go18/devcloud/mcenter/apps/token/interfaceg.go

172 lines
3.9 KiB
Go
Raw Normal View History

2025-05-31 10:50:37 +08:00
package token
import (
"context"
"time"
2025-05-31 16:14:34 +08:00
"github.com/infraboard/mcube/v2/http/request"
"github.com/infraboard/mcube/v2/ioc"
"github.com/infraboard/mcube/v2/types"
)
const (
APP_NAME = "token"
2025-05-31 10:50:37 +08:00
)
2025-05-31 16:14:34 +08:00
func GetService() Service {
return ioc.Controller().Get(APP_NAME).(Service)
}
2025-05-31 10:50:37 +08:00
type Service interface {
// 颁发访问令牌: Login
IssueToken(context.Context, *IssueTokenRequest) (*Token, error)
// 撤销访问令牌: 令牌失效了 Logout
RevolkToken(context.Context, *RevolkTokenRequest) (*Token, error)
2025-05-31 16:14:34 +08:00
// 查询已经颁发出去的Token
QueryToken(context.Context, *QueryTokenRequest) (*types.Set[*Token], error)
2025-05-31 10:50:37 +08:00
2025-05-31 16:14:34 +08:00
// 查询Token详情
DescribeToken(context.Context, *DescribeTokenRequest) (*Token, error)
2025-05-31 10:50:37 +08:00
// 校验访问令牌:检查令牌的合法性, 是不是伪造的
2025-05-31 12:03:22 +08:00
ValiateToken(context.Context, *ValiateTokenRequest) (*Token, error)
2025-05-31 10:50:37 +08:00
}
2025-05-31 16:14:34 +08:00
func NewDescribeTokenRequest(accessToken string) *DescribeTokenRequest {
return &DescribeTokenRequest{
DescribeBy: DESCRIBE_BY_ACCESS_TOKEN,
DescribeValue: accessToken,
}
}
type DescribeTokenRequest struct {
DescribeBy DESCRIBE_BY `json:"describe_by"`
DescribeValue string `json:"describe_value"`
}
func NewQueryTokenRequest() *QueryTokenRequest {
return &QueryTokenRequest{
PageRequest: request.NewDefaultPageRequest(),
UserIds: []uint64{},
}
}
type QueryTokenRequest struct {
*request.PageRequest
// 当前可用的没过期的Token
Active *bool `json:"active"`
// 用户来源
Source *SOURCE `json:"source"`
// Uids
UserIds []uint64 `json:"user_ids"`
}
func (r *QueryTokenRequest) SetActive(v bool) *QueryTokenRequest {
r.Active = &v
return r
}
func (r *QueryTokenRequest) SetSource(v SOURCE) *QueryTokenRequest {
r.Source = &v
return r
}
func (r *QueryTokenRequest) AddUserId(uids ...uint64) *QueryTokenRequest {
r.UserIds = append(r.UserIds, uids...)
return r
}
func NewIssueTokenRequest() *IssueTokenRequest {
return &IssueTokenRequest{
Parameter: make(IssueParameter),
}
}
2025-05-31 10:50:37 +08:00
// 用户会给我们 用户的身份凭证用于换取Token
type IssueTokenRequest struct {
// 端类型
Source SOURCE `json:"source"`
// 认证方式
Issuer string `json:"issuer"`
// 参数
Parameter IssueParameter `json:"parameter"`
}
2025-05-31 16:14:34 +08:00
func (i *IssueTokenRequest) IssueByPassword(username, password string) {
i.Issuer = ISSUER_PASSWORD
i.Parameter.SetUsername(username)
i.Parameter.SetPassword(password)
}
func NewIssueParameter() IssueParameter {
return make(IssueParameter)
}
2025-05-31 10:50:37 +08:00
type IssueParameter map[string]any
/*
password issuer parameter
*/
func (p IssueParameter) Username() string {
return GetIssueParameterValue[string](p, "username")
}
func (p IssueParameter) Password() string {
return GetIssueParameterValue[string](p, "password")
}
2025-05-31 16:14:34 +08:00
func (p IssueParameter) SetUsername(v string) IssueParameter {
2025-05-31 10:50:37 +08:00
p["username"] = v
2025-05-31 16:14:34 +08:00
return p
2025-05-31 10:50:37 +08:00
}
2025-05-31 16:14:34 +08:00
func (p IssueParameter) SetPassword(v string) IssueParameter {
2025-05-31 10:50:37 +08:00
p["password"] = v
2025-05-31 16:14:34 +08:00
return p
2025-05-31 10:50:37 +08:00
}
/*
private token issuer parameter
*/
func (p IssueParameter) AccessToken() string {
return GetIssueParameterValue[string](p, "access_token")
}
func (p IssueParameter) ExpireTTL() time.Duration {
return time.Second * time.Duration(GetIssueParameterValue[int64](p, "expired_ttl"))
}
2025-05-31 16:14:34 +08:00
func (p IssueParameter) SetAccessToken(v string) IssueParameter {
2025-05-31 10:50:37 +08:00
p["access_token"] = v
2025-05-31 16:14:34 +08:00
return p
}
func (p IssueParameter) SetExpireTTL(v int64) IssueParameter {
p["expired_ttl"] = v
return p
2025-05-31 10:50:37 +08:00
}
2025-05-31 12:03:22 +08:00
func NewRevolkTokenRequest(at, rk string) *RevolkTokenRequest {
return &RevolkTokenRequest{
AccessToken: at,
RefreshToken: rk,
}
}
// 万一的Token泄露, 不知道refresh_token也没法推出
2025-05-31 10:50:37 +08:00
type RevolkTokenRequest struct {
2025-05-31 12:03:22 +08:00
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
}
func NewValiateTokenRequest(accessToken string) *ValiateTokenRequest {
return &ValiateTokenRequest{
AccessToken: accessToken,
}
2025-05-31 10:50:37 +08:00
}
2025-05-31 12:03:22 +08:00
type ValiateTokenRequest struct {
AccessToken string `json:"access_token"`
2025-05-31 10:50:37 +08:00
}