github.com/safing/portbase@v0.19.5/api/endpoints_modules.go (about) 1 package api 2 3 import ( 4 "errors" 5 "fmt" 6 7 "github.com/safing/portbase/modules" 8 ) 9 10 func registerModulesEndpoints() error { 11 if err := RegisterEndpoint(Endpoint{ 12 Path: "modules/status", 13 Read: PermitUser, 14 StructFunc: getStatusfunc, 15 Name: "Get Module Status", 16 Description: "Returns status information of all modules.", 17 }); err != nil { 18 return err 19 } 20 21 if err := RegisterEndpoint(Endpoint{ 22 Path: "modules/{moduleName:.+}/trigger/{eventName:.+}", 23 Write: PermitSelf, 24 ActionFunc: triggerEvent, 25 Name: "Trigger Event", 26 Description: "Triggers an event of an internal module.", 27 }); err != nil { 28 return err 29 } 30 31 return nil 32 } 33 34 func getStatusfunc(ar *Request) (i interface{}, err error) { 35 status := modules.GetStatus() 36 if status == nil { 37 return nil, errors.New("modules not yet initialized") 38 } 39 return status, nil 40 } 41 42 func triggerEvent(ar *Request) (msg string, err error) { 43 // Get parameters. 44 moduleName := ar.URLVars["moduleName"] 45 eventName := ar.URLVars["eventName"] 46 if moduleName == "" || eventName == "" { 47 return "", errors.New("invalid parameters") 48 } 49 50 // Inject event. 51 if err := module.InjectEvent("api event injection", moduleName, eventName, nil); err != nil { 52 return "", fmt.Errorf("failed to inject event: %w", err) 53 } 54 55 return "event successfully injected", nil 56 }