oauth

package
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 23, 2026 License: Apache-2.0 Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	UserNameKey = "username"
	UserIDKey   = "user_id"
	UserObjKey  = "user_obj"
)
View Source
const (
	OAuthPendingStatesSessionKey = "oauth_pending_states"
	OAuthStateCacheKeyExpiration = 10 * time.Minute
)
View Source
const (
	BaseUserScore = 100
	MaxUserScore  = 100
	MinUserScore  = -100
)
View Source
const (
	UnAuthorized  = "未登录"
	InvalidState  = "非法登录请求"
	BannedAccount = "账号已被封禁"
)

Variables

This section is empty.

Functions

func Callback

func Callback(c *gin.Context)

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

func GetEnabledProvidersHandler(c *gin.Context)

GetEnabledProvidersHandler 获取启用的 OAuth 提供商列表 @Tags oauth @Produce json @Success 200 {object} map[string]any @Router /api/v1/oauth/providers [get]

func GetLoginURL

func GetLoginURL(c *gin.Context)

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 GetUserIDFromContext(c *gin.Context) uint64

func GetUserIDFromSession

func GetUserIDFromSession(s sessions.Session) uint64

func InitOAuthProviders

func InitOAuthProviders()

InitOAuthProviders 初始化 OAuth 提供商

func IsProviderEnabled

func IsProviderEnabled(provider OAuthProvider) bool

IsProviderEnabled 检查提供商是否启用

func LoginRequired

func LoginRequired() gin.HandlerFunc

func SetUserToContext

func SetUserToContext(c *gin.Context, user *User)

SetUserToContext 将User对象存储到Context中。

Types

type CallbackRequest

type CallbackRequest struct {
	State string `json:"state"`
	Code  string `json:"code"`
}

type CallbackResponse

type CallbackResponse struct {
	ErrorMsg string `json:"error_msg"`
	Data     any    `json:"data"`
}

type GetLoginURLResponse

type GetLoginURLResponse struct {
	ErrorMsg string `json:"error_msg"`
	Data     string `json:"data"`
}

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

func GetUserFromContext(c *gin.Context) (*User, bool)

GetUserFromContext 从Context中获取User对象。

func (*User) Exact

func (u *User) Exact(tx *gorm.DB, id uint64) error

func (*User) RiskLevel

func (u *User) RiskLevel() int8

func (*User) SetScore

func (u *User) SetScore(tx *gorm.DB, newScore int) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL