blob: b015f16ec9c88a74b2fc93d34bb321effd69a1d6 [file] [log] [blame]
package config
import (
"fmt"
"golang.org/x/oauth2"
)
// OAuthConfig represents OAuth2 configuration for KorAP authentication
type OAuthConfig struct {
// ClientID is the OAuth2 client identifier
ClientID string `yaml:"client_id"`
// ClientSecret is the OAuth2 client secret
ClientSecret string `yaml:"client_secret"`
// AuthURL is the authorization endpoint URL
AuthURL string `yaml:"auth_url"`
// TokenURL is the token endpoint URL
TokenURL string `yaml:"token_url"`
// RedirectURL is the callback URL for authorization code flow
RedirectURL string `yaml:"redirect_url"`
// Scopes are the requested OAuth2 scopes
Scopes []string `yaml:"scopes"`
// Enabled indicates whether OAuth2 authentication is enabled
Enabled bool `yaml:"enabled"`
}
// DefaultOAuthConfig returns a default OAuth2 configuration
func DefaultOAuthConfig() *OAuthConfig {
return &OAuthConfig{
AuthURL: "https://korap.ids-mannheim.de/api/v1.0/oauth2/authorize",
TokenURL: "https://korap.ids-mannheim.de/api/v1.0/oauth2/token",
RedirectURL: "urn:ietf:wg:oauth:2.0:oob",
Scopes: []string{"read"},
Enabled: false,
}
}
// ToOAuth2Config converts the config to golang.org/x/oauth2.Config
func (c *OAuthConfig) ToOAuth2Config() *oauth2.Config {
if !c.Enabled {
return nil
}
return &oauth2.Config{
ClientID: c.ClientID,
ClientSecret: c.ClientSecret,
Endpoint: oauth2.Endpoint{
AuthURL: c.AuthURL,
TokenURL: c.TokenURL,
},
RedirectURL: c.RedirectURL,
Scopes: c.Scopes,
}
}
// Validate checks if the OAuth2 configuration is valid
func (c *OAuthConfig) Validate() error {
if !c.Enabled {
return nil
}
if c.ClientID == "" {
return fmt.Errorf("oauth2 client_id is required when authentication is enabled")
}
if c.ClientSecret == "" {
return fmt.Errorf("oauth2 client_secret is required when authentication is enabled")
}
if c.TokenURL == "" {
return fmt.Errorf("oauth2 token_url is required when authentication is enabled")
}
// AuthURL is only required for authorization code flow, not client credentials
return nil
}