Files
MonkeyCode/backend/domain/oauth.go

84 lines
3.0 KiB
Go

package domain
import "github.com/chaitin/MonkeyCode/backend/consts"
type OAuther interface {
GetAuthorizeURL() (state string, url string)
GetUserInfo(code string) (*OAuthUserInfo, error)
}
type OAuthConfig struct {
Debug bool
Platform consts.UserPlatform
ClientID string
ClientSecret string
RedirectURI string
Scopes []string
AuthorizeURL string
TokenURL string
UserInfoURL string
IDField string
NameField string
AvatarField string
EmailField string
}
type OAuthUserInfo struct {
ID string `json:"id"`
UnionID string `json:"union_id"`
Name string `json:"name"`
Email string `json:"email"`
AvatarURL string `json:"avatar_url"`
}
type OAuthSignUpOrInReq struct {
Source consts.LoginSource `json:"source" query:"source" validate:"required" default:"plugin"` // 登录来源 plugin: 插件 browser: 浏览器; 默认为 plugin
Platform consts.UserPlatform `json:"platform" query:"platform" validate:"required"` // 第三方平台 dingtalk
SessionID string `json:"session_id" query:"session_id"` // 会话ID
RedirectURL string `json:"redirect_url" query:"redirect_url"` // 登录成功后跳转的 URL
InviteCode string `json:"inviate_code" query:"inviate_code"` // 邀请码
BaseURL string `json:"-"`
}
func (o OAuthSignUpOrInReq) OAuthKind() consts.OAuthKind {
if o.InviteCode == "" {
return consts.OAuthKindLogin
}
return consts.OAuthKindInvite
}
type OAuthCallbackReq struct {
State string `json:"state" query:"state" validate:"required"`
Code string `json:"code" query:"code" validate:"required"`
IP string `json:"-"`
BaseURL string `json:"-"`
}
type OAuthURLResp struct {
URL string `json:"url"`
}
type OAuthState struct {
Source consts.LoginSource `json:"source"` // 登录来源 plugin: 插件 browser: 浏览器; 默认为 plugin
Kind consts.OAuthKind `json:"kind" query:"kind" validate:"required"` // invite: 邀请登录 login: 登录
SessionID string `json:"session_id"` // 会话ID
Platform consts.UserPlatform `json:"platform" query:"platform" validate:"required"` // 第三方平台 dingtalk
RedirectURL string `json:"redirect_url" query:"redirect_url"` // 登录成功后跳转的 URL
InviteCode string `json:"inviate_code"` // 邀请码
}
type OAuthAccessToken struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresIn int64 `json:"expires_in"`
Scope string `json:"scope"`
}
type GetAccessTokenReq struct {
GrantType string `json:"grant_type"`
ClientID string `json:"client_id"`
ClientSecret string `json:"client_secret"`
Code string `json:"code"`
RedirectURL string `json:"redirect_uri"`
}