package oauth import ( "context" "github.com/QuantumNous/new-api/model" "github.com/gin-gonic/gin" ) // Provider defines the interface for OAuth providers type Provider interface { // GetName returns the display name of the provider (e.g., "GitHub", "Discord") GetName() string // IsEnabled returns whether this OAuth provider is enabled IsEnabled() bool // ExchangeToken exchanges the authorization code for an access token // The gin.Context is passed for providers that need request info (e.g., for redirect_uri) ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error) // GetUserInfo retrieves user information using the access token GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error) // IsUserIDTaken checks if the provider user ID is already associated with an account IsUserIDTaken(providerUserID string) bool // FillUserByProviderID fills the user model by provider user ID FillUserByProviderID(user *model.User, providerUserID string) error // SetProviderUserID sets the provider user ID on the user model SetProviderUserID(user *model.User, providerUserID string) // GetProviderPrefix returns the prefix for auto-generated usernames (e.g., "github_") GetProviderPrefix() string }