2024-12-01 11:06:09 +08:00
|
|
|
|
package token
|
|
|
|
|
|
2024-12-08 11:59:36 +08:00
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
|
2024-12-15 11:36:22 +08:00
|
|
|
|
"github.com/infraboard/mcube/v2/ioc"
|
2024-12-08 11:59:36 +08:00
|
|
|
|
"github.com/infraboard/mcube/v2/ioc/config/validator"
|
|
|
|
|
)
|
2024-12-01 14:54:54 +08:00
|
|
|
|
|
2024-12-15 11:36:22 +08:00
|
|
|
|
const (
|
|
|
|
|
AppName = "token"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func GetService() Service {
|
|
|
|
|
return ioc.Controller().Get(AppName).(Service)
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-01 11:06:09 +08:00
|
|
|
|
// 业务域
|
|
|
|
|
type Service interface {
|
2024-12-01 14:54:54 +08:00
|
|
|
|
UserService
|
|
|
|
|
InnterService
|
2024-12-01 11:06:09 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 1. 外部
|
2024-12-01 14:54:54 +08:00
|
|
|
|
type UserService interface {
|
2024-12-01 11:06:09 +08:00
|
|
|
|
// 颁发令牌 登录
|
2024-12-01 14:54:54 +08:00
|
|
|
|
IssueToken(context.Context, *IssueTokenRequest) (*Token, error)
|
2024-12-01 11:06:09 +08:00
|
|
|
|
// 撤销令牌 退出
|
2024-12-01 14:54:54 +08:00
|
|
|
|
RevolkToken(context.Context, *RevolkTokenRequest) (*Token, error)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type RevolkTokenRequest struct {
|
|
|
|
|
// 访问令牌
|
|
|
|
|
AccessToken string `json:"access_token"`
|
|
|
|
|
// 刷新令牌, 构成一对,避免AccessToken 泄露,用户可以直接 revolk
|
|
|
|
|
RefreshToken string `json:"refresh_token"`
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-08 11:59:36 +08:00
|
|
|
|
func NewIssueTokenRequest(username, password string) *IssueTokenRequest {
|
|
|
|
|
return &IssueTokenRequest{
|
|
|
|
|
Username: username,
|
|
|
|
|
Password: password,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-01 14:54:54 +08:00
|
|
|
|
type IssueTokenRequest struct {
|
2024-12-08 11:59:36 +08:00
|
|
|
|
Username string `json:"username" validate:"required"`
|
|
|
|
|
Password string `json:"password" validate:"required"`
|
2024-12-01 14:54:54 +08:00
|
|
|
|
// 记住我, Token可能1天过期, 过去时间调整为7天
|
|
|
|
|
RememberMe bool `json:"remember_me"`
|
2024-12-01 11:06:09 +08:00
|
|
|
|
}
|
|
|
|
|
|
2024-12-08 11:59:36 +08:00
|
|
|
|
func (r *IssueTokenRequest) Validate() error {
|
|
|
|
|
return validator.Validate(r)
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-01 11:06:09 +08:00
|
|
|
|
// 内部
|
2024-12-01 14:54:54 +08:00
|
|
|
|
type InnterService interface {
|
2024-12-01 11:06:09 +08:00
|
|
|
|
// 令牌校验
|
2024-12-01 14:54:54 +08:00
|
|
|
|
ValidateToken(context.Context, *ValidateTokenRequest) (*Token, error)
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-08 11:59:36 +08:00
|
|
|
|
func NewValidateTokenRequest(at string) *ValidateTokenRequest {
|
|
|
|
|
return &ValidateTokenRequest{
|
|
|
|
|
AccessToken: at,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-01 14:54:54 +08:00
|
|
|
|
type ValidateTokenRequest struct {
|
|
|
|
|
// 访问令牌
|
|
|
|
|
AccessToken string `json:"access_token"`
|
2024-12-01 11:06:09 +08:00
|
|
|
|
}
|