package integration import ( "context" "forge.cadoles.com/cadoles/bouncer/internal/jwk" "github.com/pkg/errors" ) type Integration interface { Integration() } type OnStartup interface { Integration OnStartup(ctx context.Context) error } type OnKeyLoad interface { Integration OnKeyLoad(ctx context.Context) (jwk.Key, error) } func RunOnStartup(ctx context.Context, integrations []Integration) error { for _, it := range integrations { onStartup, ok := it.(OnStartup) if !ok { continue } if err := onStartup.OnStartup(ctx); err != nil { return errors.WithStack(err) } } return nil } func RunOnKeyLoad(ctx context.Context, integrations []Integration) (jwk.Key, error) { for _, it := range integrations { onKeyLoad, ok := it.(OnKeyLoad) if !ok { continue } key, err := onKeyLoad.OnKeyLoad(ctx) if err != nil { return nil, errors.WithStack(err) } if key != nil { return key, nil } } return nil, nil }