syntax = "v1"

info (
	title: // TODO: add title
	desc: // TODO: add description
	author: ""
	email: ""
)

import "basic.api"

service auth {
	@handler UserLoginHandler
	post /api/auth/login(RequestUserLogin) returns (response);

	@handler UserLoginHandler
	post /api/auth/register(RequestUserLogin) returns (response);
	
	@handler AcceptCookieHandler
	post /api/auth/accept-cookie(request) returns (response);
	
	@handler UserGoogleLoginHandler
	get /api/auth/oauth2/login/google(RequestGoogleLogin) returns (response);
	
	@handler UserEmailConfirmationHandler
	get /api/auth/email/confirmation(RequestEmailConfirmation) returns (response);
	
	@handler UserEmailRegisterHandler
	post /api/auth/oauth2/register(RequestEmailRegister) returns (response);
	
	@handler UserResetTokenHandler
	get /api/auth/reset/token(RequestUserResetToken) returns (response);
	
	@handler UserResetPasswordHandler
	post /api/auth/reset/password(RequestUserResetPassword) returns (response);
}

type (
	// UserAddAddressHandler 用户登录请求结构
	RequestUserLogin {
		Email    string `json:"email"`
		Password string `json:"password"`
	}

	// UserLoginHandler 用户登录请求结构
	DataUserLogin {
		Token string `json:"token"` // 登录jwt token
	}
)

type (
	// UserAddAddressHandler 用户登录请求结构
	RequestUserRegister {
		Email    string `json:"email"`
		Password string `json:"password"`
	}

	// UserLoginHandler 用户登录请求结构
	DataUserRegister{
		Token string `json:"token"` // 登录jwt token
	}
)

type (

	// RequestUserResetToken 请求重置token, 一定不为null
	RequestUserResetToken {
		Wid string `json:"wid"`
	}

	// UserResetTokenHandler 返回重置token
	DataResetToken {
		ResetToken string `json:"reset_token"` // 获取重置的token
	}

	// RequestUserResetPassword 重置密码
	RequestUserResetPassword {
		ResetToken string `json:"reset_token"` // 附带重置token, 确保流程唯一
		Password   string `json:"password"`    // 附带的hash密码
	}
)

type RequestGoogleLogin {
	Code     string `form:"code"`
	Scope    string `form:"scope"`
	AuthUser string `form:"authuser"`
	Prompt   string `form:"prompt"`
}

type RequestEmailConfirmation {
	Token string `query:"token"` // 操作Token
}

type RequestEmailRegister {
	Email         string `json:"email"`
	Wid           string `json:"wid"`
	GuestId       uint64 `json:"guest_id"`
	RegisterToken string `json:"register_token"`
}

// DataGuest 游客获取toekn请求结构
type DataGuest {
	Token string `json:"token"` // 登录jwt token
}