1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package challenge
- import (
- "log/slog"
- "net/http"
- "sort"
- "sync"
- "github.com/TecharoHQ/anubis/lib/policy"
- "github.com/a-h/templ"
- )
- var (
- registry map[string]Impl = map[string]Impl{}
- regLock sync.RWMutex
- )
- func Register(name string, impl Impl) {
- regLock.Lock()
- defer regLock.Unlock()
- registry[name] = impl
- }
- func Get(name string) (Impl, bool) {
- regLock.RLock()
- defer regLock.RUnlock()
- result, ok := registry[name]
- return result, ok
- }
- func Methods() []string {
- regLock.RLock()
- defer regLock.RUnlock()
- var result []string
- for method := range registry {
- result = append(result, method)
- }
- sort.Strings(result)
- return result
- }
- type Impl interface {
- Fail(w http.ResponseWriter, r *http.Request) error
- Issue(r *http.Request, lg *slog.Logger, rule *policy.Bot, challenge string, ogTags map[string]string) (templ.Component, error)
- Validate(r *http.Request, lg *slog.Logger, rule *policy.Bot, challenge string) error
- }
|