diff options
Diffstat (limited to 'oauth2/manager.go')
-rw-r--r-- | oauth2/manager.go | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/oauth2/manager.go b/oauth2/manager.go new file mode 100644 index 0000000..08360a9 --- /dev/null +++ b/oauth2/manager.go @@ -0,0 +1,33 @@ +// Copyright 2017 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package oauth2 + +import "errors" + +// Manager handles OAuth2 providers. +type Manager struct { + providers map[string]Provider +} + +// Provider returns the given provider. +func (m *Manager) Provider(name string) (Provider, error) { + if provider, found := m.providers[name]; found { + return provider, nil + } + + return nil, errors.New("oauth2 provider not found") +} + +// AddProvider add a new OAuth2 provider. +func (m *Manager) AddProvider(name string, provider Provider) { + m.providers[name] = provider +} + +// NewManager returns a new Manager. +func NewManager(clientID, clientSecret, redirectURL string) *Manager { + m := &Manager{providers: make(map[string]Provider)} + m.AddProvider("google", newGoogleProvider(clientID, clientSecret, redirectURL)) + return m +} |