66 lines
2.2 KiB
Go
66 lines
2.2 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"kra/internal/biz"
|
|
"kra/pkg/adminauth"
|
|
)
|
|
|
|
func tokenDTO(v *biz.APIToken) map[string]any {
|
|
var user any = nil
|
|
if v.User != nil {
|
|
user = convertUser(v.User)
|
|
}
|
|
return map[string]any{"ID": v.ID, "CreatedAt": v.CreatedAt, "UpdatedAt": v.UpdatedAt, "DeletedAt": nil, "userId": v.UserID, "authorityId": v.AuthorityID, "token": v.Token, "status": v.Status, "expiresAt": v.ExpiresAt, "remark": v.Remark, "user": user}
|
|
}
|
|
|
|
func (s *SettingsService) CreateAPIToken(ctx context.Context, userID, authorityID uint, days int, remark string) (string, error) {
|
|
user, duration, err := s.uc.PrepareAPIToken(ctx, userID, authorityID, days)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
secret, issuer := "", "kra"
|
|
buffer := 24 * time.Hour
|
|
config := s.runtime.Admin()
|
|
if config != nil && config.Jwt != nil {
|
|
secret = config.Jwt.SigningKey
|
|
if config.Jwt.Issuer != "" {
|
|
issuer = config.Jwt.Issuer
|
|
}
|
|
if config.Jwt.BufferTime != nil {
|
|
buffer = config.Jwt.BufferTime.AsDuration()
|
|
}
|
|
}
|
|
token, _, err := adminauth.Generate(secret, issuer, duration, buffer, user.ID, authorityID, user.UUID, user.Username, user.NickName, false)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
record := &biz.APIToken{UserID: userID, AuthorityID: authorityID, Token: token, Status: true, ExpiresAt: time.Now().Add(duration), Remark: remark}
|
|
if err = s.uc.CreateAPIToken(ctx, record); err != nil {
|
|
return "", err
|
|
}
|
|
return token, nil
|
|
}
|
|
func (s *SettingsService) APITokens(ctx context.Context, page, size int, userID uint, status *bool) ([]map[string]any, int64, error) {
|
|
items, total, err := s.uc.ListAPITokens(ctx, page, size, userID, status)
|
|
if err != nil {
|
|
return nil, 0, err
|
|
}
|
|
out := make([]map[string]any, 0, len(items))
|
|
for _, v := range items {
|
|
out = append(out, tokenDTO(v))
|
|
}
|
|
return out, total, nil
|
|
}
|
|
func (s *SettingsService) DisableAPIToken(ctx context.Context, id uint) error {
|
|
return s.uc.DisableToken(ctx, id)
|
|
}
|
|
func (s *SettingsService) BlacklistToken(ctx context.Context, token string) error {
|
|
return s.uc.BlacklistToken(ctx, token)
|
|
}
|
|
func (s *SettingsService) IsTokenDisabled(ctx context.Context, token string) (bool, error) {
|
|
return s.uc.IsTokenDisabled(ctx, token)
|
|
}
|