provider.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. package oauth
  2. import (
  3. "context"
  4. "github.com/QuantumNous/new-api/model"
  5. "github.com/gin-gonic/gin"
  6. )
  7. // Provider defines the interface for OAuth providers
  8. type Provider interface {
  9. // GetName returns the display name of the provider (e.g., "GitHub", "Discord")
  10. GetName() string
  11. // IsEnabled returns whether this OAuth provider is enabled
  12. IsEnabled() bool
  13. // ExchangeToken exchanges the authorization code for an access token
  14. // The gin.Context is passed for providers that need request info (e.g., for redirect_uri)
  15. ExchangeToken(ctx context.Context, code string, c *gin.Context) (*OAuthToken, error)
  16. // GetUserInfo retrieves user information using the access token
  17. GetUserInfo(ctx context.Context, token *OAuthToken) (*OAuthUser, error)
  18. // IsUserIDTaken checks if the provider user ID is already associated with an account
  19. IsUserIDTaken(providerUserID string) bool
  20. // FillUserByProviderID fills the user model by provider user ID
  21. FillUserByProviderID(user *model.User, providerUserID string) error
  22. // SetProviderUserID sets the provider user ID on the user model
  23. SetProviderUserID(user *model.User, providerUserID string)
  24. // GetProviderPrefix returns the prefix for auto-generated usernames (e.g., "github_")
  25. GetProviderPrefix() string
  26. }