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  }