mirror of
https://github.com/safing/portbase
synced 2025-04-10 20:49:09 +00:00
88 lines
1.7 KiB
Go
88 lines
1.7 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"flag"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/safing/portbase/modules"
|
|
)
|
|
|
|
var (
|
|
module *modules.Module
|
|
|
|
exportEndpoints bool
|
|
)
|
|
|
|
// API Errors.
|
|
var (
|
|
ErrAuthenticationAlreadySet = errors.New("the authentication function has already been set")
|
|
ErrAuthenticationImmutable = errors.New("the authentication function can only be set before the api has started")
|
|
)
|
|
|
|
func init() {
|
|
module = modules.Register("api", prep, start, stop, "database", "config")
|
|
|
|
flag.BoolVar(&exportEndpoints, "export-api-endpoints", false, "export api endpoint registry and exit")
|
|
}
|
|
|
|
func prep() error {
|
|
if exportEndpoints {
|
|
modules.SetCmdLineOperation(exportEndpointsCmd)
|
|
}
|
|
|
|
if getDefaultListenAddress() == "" {
|
|
return errors.New("no default listen address for api available")
|
|
}
|
|
|
|
if err := registerConfig(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := registerDebugEndpoints(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := registerConfigEndpoints(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := registerModulesEndpoints(); err != nil {
|
|
return err
|
|
}
|
|
|
|
return registerMetaEndpoints()
|
|
}
|
|
|
|
func start() error {
|
|
startServer()
|
|
|
|
_ = updateAPIKeys(module.Ctx, nil)
|
|
err := module.RegisterEventHook("config", "config change", "update API keys", updateAPIKeys)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// start api auth token cleaner
|
|
if authFnSet.IsSet() {
|
|
module.NewTask("clean api sessions", cleanSessions).Repeat(5 * time.Minute)
|
|
}
|
|
|
|
return registerEndpointBridgeDB()
|
|
}
|
|
|
|
func stop() error {
|
|
return stopServer()
|
|
}
|
|
|
|
func exportEndpointsCmd() error {
|
|
data, err := json.MarshalIndent(ExportEndpoints(), "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = os.Stdout.Write(data)
|
|
return err
|
|
}
|