safing-portbase/api/endpoints_modules.go

56 lines
1.3 KiB
Go

package api
import (
"errors"
"fmt"
"github.com/safing/portbase/modules"
)
func registerModulesEndpoints() error {
if err := RegisterEndpoint(Endpoint{
Path: "modules/status",
Read: PermitUser,
StructFunc: getStatusfunc,
Name: "Get Module Status",
Description: "Returns status information of all modules.",
}); err != nil {
return err
}
if err := RegisterEndpoint(Endpoint{
Path: "modules/{moduleName:.+}/trigger/{eventName:.+}",
Write: PermitSelf,
ActionFunc: triggerEvent,
Name: "Trigger Event",
Description: "Triggers an event of an internal module.",
}); err != nil {
return err
}
return nil
}
func getStatusfunc(ar *Request) (i interface{}, err error) {
status := modules.GetStatus()
if status == nil {
return nil, errors.New("modules not yet initialized")
}
return status, nil
}
func triggerEvent(ar *Request) (msg string, err error) {
// Get parameters.
moduleName := ar.URLVars["moduleName"]
eventName := ar.URLVars["eventName"]
if moduleName == "" || eventName == "" {
return "", errors.New("invalid parameters")
}
// Inject event.
if err := module.InjectEvent("api event injection", moduleName, eventName, nil); err != nil {
return "", fmt.Errorf("failed to inject event: %w", err)
}
return "event successfully injected", nil
}