forked from wrenn/wrenn
Moves 12 packages from internal/ to pkg/ (config, id, validate, events, db, auth, lifecycle, scheduler, channels, audit, service) so they can be imported by the enterprise repo as a Go module dependency. Introduces pkg/cpextension (shared Extension interface + ServerContext) and pkg/cpserver (Run() entrypoint with functional options) so the enterprise main.go can call cpserver.Run(cpserver.WithExtensions(...)) without duplicating the 20-step server bootstrap. Adds db/migrations/embed.go for go:embed access to OSS SQL migrations from the enterprise module. cmd/control-plane/main.go is reduced to a 10-line wrapper around cpserver.Run.
42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package oauth
|
|
|
|
import "context"
|
|
|
|
// UserProfile is the normalized user info returned by an OAuth provider.
|
|
type UserProfile struct {
|
|
ProviderID string
|
|
Email string
|
|
Name string
|
|
}
|
|
|
|
// Provider abstracts an OAuth 2.0 identity provider.
|
|
type Provider interface {
|
|
// Name returns the provider identifier (e.g. "github", "google").
|
|
Name() string
|
|
// AuthCodeURL returns the URL to redirect the user to for authorization.
|
|
AuthCodeURL(state string) string
|
|
// Exchange trades an authorization code for a user profile.
|
|
Exchange(ctx context.Context, code string) (UserProfile, error)
|
|
}
|
|
|
|
// Registry maps provider names to Provider implementations.
|
|
type Registry struct {
|
|
providers map[string]Provider
|
|
}
|
|
|
|
// NewRegistry creates an empty provider registry.
|
|
func NewRegistry() *Registry {
|
|
return &Registry{providers: make(map[string]Provider)}
|
|
}
|
|
|
|
// Register adds a provider to the registry.
|
|
func (r *Registry) Register(p Provider) {
|
|
r.providers[p.Name()] = p
|
|
}
|
|
|
|
// Get looks up a provider by name.
|
|
func (r *Registry) Get(name string) (Provider, bool) {
|
|
p, ok := r.providers[name]
|
|
return p, ok
|
|
}
|