Files
base/internal/pkg/oauth/provider.go
2026-04-10 18:25:21 +03:30

52 lines
983 B
Go

package oauth
import (
"encoding/json"
"fmt"
"strings"
)
//go:generate stringer -type=Provider
type Provider int
const (
Unknown Provider = iota
Credentials
Google
GitHub
Linkedin
Mock
)
// UnmarshalJSON implements json.Unmarshaler so Provider accepts string in JSON (e.g. "mock", "google")
func (p *Provider) UnmarshalJSON(data []byte) error {
var s string
if err := json.Unmarshal(data, &s); err != nil {
return err
}
parsed, err := ParseProvider(s)
if err != nil {
return err
}
*p = parsed
return nil
}
// ParseProvider parses a provider string and returns the corresponding Provider enum
func ParseProvider(provider string) (Provider, error) {
switch strings.ToLower(provider) {
case "credentials":
return Credentials, nil
case "google":
return Google, nil
case "github":
return GitHub, nil
case "linkedin":
return Linkedin, nil
case "mock":
return Mock, nil
default:
return Unknown, fmt.Errorf("unknown provider: %s", provider)
}
}