aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/auth/service.go
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.com>2025-08-15 19:20:48 +0100
committerLeonardo Bishop <me@leonardobishop.com>2025-08-15 19:20:48 +0100
commit8f7dec8ba6b2f9bde01afd0a110596ebbd43e0ed (patch)
tree7b4f203d92f4b99b1e98fac314415e293984196b /pkg/auth/service.go
parent4697556cac819c47d068819b9fc9c3b4ea84e279 (diff)
Implement OIDC
Diffstat (limited to 'pkg/auth/service.go')
-rw-r--r--pkg/auth/service.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/pkg/auth/service.go b/pkg/auth/service.go
new file mode 100644
index 0000000..be1d6e7
--- /dev/null
+++ b/pkg/auth/service.go
@@ -0,0 +1,49 @@
+package auth
+
+import (
+ "fmt"
+ "sync"
+)
+
+type Service interface {
+ GetAuthProvider(string) AuthProvider
+ GetAuthProviders() []string
+ RegisterAuthProvider(string, AuthProvider) error
+}
+
+type AuthProvider interface {
+ Name() string
+ Type() string
+}
+
+type service struct {
+ authProviders map[string]AuthProvider
+ order []string
+ lock sync.Mutex
+}
+
+func NewService() Service {
+ return &service{
+ authProviders: make(map[string]AuthProvider),
+ }
+}
+
+func (s *service) GetAuthProvider(name string) AuthProvider {
+ return s.authProviders[name]
+}
+
+func (s *service) GetAuthProviders() []string {
+ return s.order
+}
+
+func (s *service) RegisterAuthProvider(name string, provider AuthProvider) error {
+ s.lock.Lock()
+ defer s.lock.Unlock()
+
+ if _, ok := s.authProviders[name]; ok {
+ return fmt.Errorf("duplicate auth provider: %s", name)
+ }
+ s.order = append(s.order, name)
+ s.authProviders[name] = provider
+ return nil
+}