Documentation
¶
Index ¶
- Constants
- func Callback(c *gin.Context)
- func GetEnabledProvidersHandler(c *gin.Context)
- func GetLoginURL(c *gin.Context)
- func GetProvider(provider OAuthProvider) (*oauth2.Config, error)
- func GetUserIDFromContext(c *gin.Context) uint64
- func GetUserIDFromSession(s sessions.Session) uint64
- func InitOAuthProviders()
- func IsProviderEnabled(provider OAuthProvider) bool
- func LoginRequired() gin.HandlerFunc
- func SetUserToContext(c *gin.Context, user *User)
- type CallbackRequest
- type CallbackResponse
- type GetLoginURLResponse
- type LegacyOAuthUserInfo
- type OAuthProvider
- type OAuthProviderManager
- type OAuthUserInfo
- type TrustLevel
- type User
Constants ¶
const ( UserNameKey = "username" UserIDKey = "user_id" UserObjKey = "user_obj" )
const ( OAuthPendingStatesSessionKey = "oauth_pending_states" OAuthStateCacheKeyExpiration = 10 * time.Minute )
const ( BaseUserScore = 100 MaxUserScore = 100 MinUserScore = -100 )
const ( UnAuthorized = "未登录" InvalidState = "非法登录请求" BannedAccount = "账号已被封禁" )
Variables ¶
This section is empty.
Functions ¶
func Callback ¶
Callback godoc @Tags oauth @Param request body CallbackRequest true "request body" @Produce json @Success 200 {object} CallbackResponse @Router /api/v1/oauth/callback [post]
func GetEnabledProvidersHandler ¶
GetEnabledProvidersHandler 获取启用的 OAuth 提供商列表 @Tags oauth @Produce json @Success 200 {object} map[string]any @Router /api/v1/oauth/providers [get]
func GetLoginURL ¶
GetLoginURL godoc @Tags oauth @Param provider query string false "OAuth provider (github, google)" @Produce json @Success 200 {object} GetLoginURLResponse @Router /api/v1/oauth/login [get]
func GetProvider ¶
func GetProvider(provider OAuthProvider) (*oauth2.Config, error)
GetProvider 获取指定提供商的 OAuth 配置
func GetUserIDFromContext ¶
func GetUserIDFromSession ¶
func IsProviderEnabled ¶
func IsProviderEnabled(provider OAuthProvider) bool
IsProviderEnabled 检查提供商是否启用
func LoginRequired ¶
func LoginRequired() gin.HandlerFunc
func SetUserToContext ¶
SetUserToContext 将User对象存储到Context中。
Types ¶
type CallbackRequest ¶
type CallbackResponse ¶
type GetLoginURLResponse ¶
type LegacyOAuthUserInfo ¶
type LegacyOAuthUserInfo struct {
Id uint64 `json:"id"`
Username string `json:"username"`
Name string `json:"name"`
Active bool `json:"active"`
AvatarUrl string `json:"avatar_url"`
TrustLevel TrustLevel `json:"trust_level"`
}
LegacyOAuthUserInfo 旧版 OAuth 用户信息(保留用于兼容旧数据)
type OAuthProvider ¶
type OAuthProvider string
OAuthProvider OAuth 提供商类型
const ( ProviderGitHub OAuthProvider = "github" ProviderGoogle OAuthProvider = "google" )
func GetEnabledProviders ¶
func GetEnabledProviders() []OAuthProvider
GetEnabledProviders 获取所有启用的提供商
type OAuthProviderManager ¶
type OAuthProviderManager struct {
// contains filtered or unexported fields
}
OAuthProviderManager OAuth 提供商管理器
type OAuthUserInfo ¶
type OAuthUserInfo struct {
ID string `json:"id"`
Username string `json:"username"`
Email string `json:"email"`
Name string `json:"name"`
AvatarURL string `json:"avatar_url"`
Provider string `json:"provider"`
}
OAuthUserInfo OAuth 用户信息(统一格式)
func FetchUserInfo ¶
func FetchUserInfo(ctx context.Context, provider OAuthProvider, token *oauth2.Token) (*OAuthUserInfo, error)
FetchUserInfo 获取用户信息
type TrustLevel ¶
type TrustLevel int8
const ( TrustLevelNewUser TrustLevel = iota TrustLevelBasicUser TrustLevelUser TrustLevelActiveUser TrustLevelLeader )
type User ¶
type User struct {
ID uint64 `json:"id" gorm:"primaryKey"`
Username string `json:"username" gorm:"size:255;unique"`
Nickname string `json:"nickname" gorm:"size:255"`
AvatarUrl string `json:"avatar_url" gorm:"size:255"`
OAuthID string `json:"oauth_id" gorm:"column:oauth_id;size:255;index"` // OAuth 提供商 ID,格式: provider:id
IsActive bool `json:"is_active" gorm:"default:true"`
TrustLevel TrustLevel `json:"trust_level"`
Score int8 `json:"score"`
ViolationCount uint8 `json:"violation_count" gorm:"default:0"`
IsAdmin bool `json:"is_admin" gorm:"default:false"`
LastLoginAt time.Time `json:"last_login_at" gorm:"index"`
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime;index"`
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime;index"`
}
func GetUserFromContext ¶
GetUserFromContext 从Context中获取User对象。