196 lines
5.1 KiB
Plaintext
196 lines
5.1 KiB
Plaintext
syntax = "v1"
|
||
|
||
type (
|
||
AuthLoginReq {
|
||
Email string `json:"email,optional"`
|
||
LoginId string `json:"login_id,optional"`
|
||
Password string `json:"password"`
|
||
Platform string `json:"platform,optional"` // platform|google|line (default platform)
|
||
}
|
||
|
||
AuthRegisterReq {
|
||
Email string `json:"email"`
|
||
Password string `json:"password"`
|
||
DisplayName string `json:"display_name,optional"`
|
||
Phone string `json:"phone,optional"`
|
||
}
|
||
|
||
AuthRefreshReq {
|
||
RefreshToken string `json:"refresh_token"`
|
||
}
|
||
|
||
AuthLogoutReq {
|
||
RefreshToken string `json:"refresh_token,optional"`
|
||
}
|
||
|
||
TokenPair {
|
||
AccessToken string `json:"access_token"`
|
||
RefreshToken string `json:"refresh_token"`
|
||
TokenType string `json:"token_type"`
|
||
ExpiresIn int64 `json:"expires_in"`
|
||
}
|
||
|
||
AuthSessionData {
|
||
Tokens TokenPair `json:"tokens"`
|
||
Member MemberPublic `json:"member"`
|
||
}
|
||
|
||
AuthTokensOnly {
|
||
Tokens TokenPair `json:"tokens"`
|
||
}
|
||
|
||
AuthProfilePatchReq {
|
||
DisplayName string `json:"display_name,optional"`
|
||
Nickname string `json:"nickname,optional"`
|
||
FullName string `json:"full_name,optional"`
|
||
Email string `json:"email,optional"`
|
||
Phone string `json:"phone,optional"`
|
||
Bio string `json:"bio,optional"`
|
||
Timezone string `json:"timezone,optional"`
|
||
NotifyEmail *bool `json:"notify_email,optional"`
|
||
// *string:省略=不改;""=清除頭像;http(s)=設定(禁止 data URL)
|
||
AvatarUrl *string `json:"avatar_url,optional"`
|
||
GenderCode *int `json:"gender_code,optional"`
|
||
Birthdate *int64 `json:"birthdate,optional"`
|
||
National string `json:"national,optional"`
|
||
Address string `json:"address,optional"`
|
||
PostCode string `json:"post_code,optional"`
|
||
PreferredLanguage string `json:"preferred_language,optional"`
|
||
Currency string `json:"currency,optional"`
|
||
CurrentPassword string `json:"current_password,optional"`
|
||
NewPassword string `json:"new_password,optional"`
|
||
}
|
||
|
||
AuthRequestResetReq {
|
||
Email string `json:"email"`
|
||
// FE locale: zh-TW | en | en-US(未登入時用;有會員則優先 preferred_language)
|
||
Language string `json:"language,optional"`
|
||
}
|
||
|
||
AuthRequestResetData {
|
||
Ok bool `json:"ok"`
|
||
Message string `json:"message"`
|
||
MockCode string `json:"mock_code,optional"`
|
||
MockResetPath string `json:"mock_reset_path,optional"`
|
||
}
|
||
|
||
AuthResetPasswordReq {
|
||
Email string `json:"email"`
|
||
Token string `json:"token,optional"`
|
||
Code string `json:"code,optional"`
|
||
NewPassword string `json:"new_password"`
|
||
}
|
||
|
||
AuthSendCodeData {
|
||
Ok bool `json:"ok"`
|
||
Message string `json:"message"`
|
||
MockCode string `json:"mock_code,optional"`
|
||
}
|
||
|
||
AuthVerifyEmailReq {
|
||
Code string `json:"code"`
|
||
}
|
||
|
||
AuthOAuthProviderPath {
|
||
Provider string `path:"provider"`
|
||
}
|
||
|
||
AuthOAuthCallbackReq {
|
||
Provider string `path:"provider"`
|
||
Code string `json:"code,optional"`
|
||
IdToken string `json:"id_token,optional"`
|
||
AccessToken string `json:"access_token,optional"`
|
||
RedirectUri string `json:"redirect_uri,optional"`
|
||
}
|
||
|
||
AuthOAuthStartData {
|
||
AuthorizeUrl string `json:"authorize_url"`
|
||
Provider string `json:"provider"`
|
||
State string `json:"state"`
|
||
}
|
||
|
||
AuthBindReq {
|
||
LoginId string `json:"login_id"`
|
||
Platform string `json:"platform"`
|
||
AccountType string `json:"account_type,optional"`
|
||
Password string `json:"password,optional"`
|
||
}
|
||
|
||
AuthUnbindReq {
|
||
LoginId string `json:"login_id"`
|
||
Platform string `json:"platform"`
|
||
}
|
||
|
||
AuthIdentitiesData {
|
||
List []IdentityPublic `json:"list"`
|
||
}
|
||
|
||
AuthLogoutAllData {
|
||
Ok bool `json:"ok"`
|
||
}
|
||
)
|
||
|
||
@server (
|
||
group: auth
|
||
prefix: /api/v1/auth
|
||
)
|
||
service gateway {
|
||
@handler Login
|
||
post /login (AuthLoginReq) returns (AuthSessionData)
|
||
|
||
@handler Logout
|
||
post /logout (AuthLogoutReq) returns (OkData)
|
||
|
||
@handler Refresh
|
||
post /refresh (AuthRefreshReq) returns (AuthTokensOnly)
|
||
|
||
@handler Register
|
||
post /register (AuthRegisterReq) returns (AuthSessionData)
|
||
|
||
@handler RequestPasswordReset
|
||
post /password/request-reset (AuthRequestResetReq) returns (AuthRequestResetData)
|
||
|
||
@handler ResetPassword
|
||
post /password/reset (AuthResetPasswordReq) returns (OkData)
|
||
|
||
@handler OAuthStart
|
||
post /oauth/:provider/start (AuthOAuthProviderPath) returns (AuthOAuthStartData)
|
||
|
||
@handler OAuthCallback
|
||
post /oauth/:provider/callback (AuthOAuthCallbackReq) returns (AuthSessionData)
|
||
}
|
||
|
||
@server (
|
||
group: auth
|
||
prefix: /api/v1/auth
|
||
middleware: AuthJWT
|
||
)
|
||
service gateway {
|
||
@handler Me
|
||
get /me returns (MemberPublic)
|
||
|
||
@handler UpdateProfile
|
||
patch /profile (AuthProfilePatchReq) returns (MemberPublic)
|
||
|
||
@handler UpdateProfilePut
|
||
put /profile (AuthProfilePatchReq) returns (MemberPublic)
|
||
|
||
@handler SendEmailCode
|
||
post /email/send-code returns (AuthSendCodeData)
|
||
|
||
@handler VerifyEmail
|
||
post /email/verify (AuthVerifyEmailReq) returns (MemberPublic)
|
||
|
||
@handler ListIdentities
|
||
get /identities returns (AuthIdentitiesData)
|
||
|
||
@handler BindAccount
|
||
post /bind (AuthBindReq) returns (IdentityPublic)
|
||
|
||
@handler UnbindAccount
|
||
post /unbind (AuthUnbindReq) returns (OkData)
|
||
|
||
@handler LogoutAll
|
||
post /logout-all returns (AuthLogoutAllData)
|
||
}
|