package plugin type UserCenter interface { Base // Description returns the description of the user center, including the name, icon, url, etc. Description() UserCenterDesc // ControlCenterItems returns the items that will be displayed in the control center ControlCenterItems() []ControlCenter // LoginCallback is called when the user center login callback is called LoginCallback(ctx *GinContext) (userInfo *UserCenterBasicUserInfo, err error) // SignUpCallback is called when the user center sign up callback is called SignUpCallback(ctx *GinContext) (userInfo *UserCenterBasicUserInfo, err error) // UserInfo returns the user information UserInfo(externalID string) (userInfo *UserCenterBasicUserInfo, err error) // UserStatus returns the latest user status UserStatus(externalID string) (userStatus UserStatus) // UserList returns the user list information UserList(externalIDs []string) (userInfo []*UserCenterBasicUserInfo, err error) // UserSettings returns the user settings UserSettings(externalID string) (userSettings *SettingInfo, err error) // PersonalBranding returns the personal branding information PersonalBranding(externalID string) (branding []*PersonalBranding) // AfterLogin is called after the user logs in AfterLogin(externalID, accessToken string) } type UserCenterDesc struct { Name string `json:"name"` DisplayName Translator `json:"display_name"` Icon string `json:"icon"` Url string `json:"url"` LoginRedirectURL string `json:"login_redirect_url"` SignUpRedirectURL string `json:"sign_up_redirect_url"` RankAgentEnabled bool `json:"rank_agent_enabled"` UserStatusAgentEnabled bool `json:"user_status_agent_enabled"` UserRoleAgentEnabled bool `json:"user_role_agent_enabled"` MustAuthEmailEnabled bool `json:"must_auth_email_enabled"` EnabledOriginalUserSystem bool `json:"enabled_original_user_system"` } type UserStatus int const ( UserStatusAvailable UserStatus = 1 UserStatusSuspended UserStatus = 9 UserStatusDeleted UserStatus = 10 ) type UserCenterBasicUserInfo struct { ExternalID string `json:"external_id"` Username string `json:"username"` DisplayName string `json:"display_name"` Email string `json:"email"` Rank int `json:"rank"` Avatar string `json:"avatar"` Mobile string `json:"mobile"` Bio string `json:"bio"` Status UserStatus `json:"status"` } type ControlCenter struct { Name string `json:"name"` Label string `json:"label"` Url string `json:"url"` } type SettingInfo struct { ProfileSettingRedirectURL string `json:"profile_setting_redirect_url"` AccountSettingRedirectURL string `json:"account_setting_redirect_url"` } type PersonalBranding struct { Icon string `json:"icon"` Name string `json:"name"` Label string `json:"label"` Url string `json:"url"` } var ( // CallUserCenter is a function that calls all registered parsers CallUserCenter, registerUserCenter = MakePlugin[UserCenter](false) ) func UserCenterEnabled() (enabled bool) { _ = CallUserCenter(func(fn UserCenter) error { enabled = true return nil }) return } func RankAgentEnabled() (enabled bool) { _ = CallUserCenter(func(fn UserCenter) error { enabled = fn.Description().RankAgentEnabled return nil }) return } func GetUserCenter() (uc UserCenter, ok bool) { _ = CallUserCenter(func(fn UserCenter) error { uc = fn ok = true return nil }) return }