Initial minimal mcp server for KorAP
diff --git a/config/oauth.go b/config/oauth.go
new file mode 100644
index 0000000..b015f16
--- /dev/null
+++ b/config/oauth.go
@@ -0,0 +1,83 @@
+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
+}