57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
package impl
|
||
|
||
import (
|
||
"time"
|
||
|
||
"122.51.31.227/go-course/go18/devcloud/mcenter/apps/token"
|
||
"122.51.31.227/go-course/go18/devcloud/mcenter/apps/user"
|
||
"github.com/infraboard/mcube/v2/ioc"
|
||
"github.com/infraboard/mcube/v2/ioc/config/datasource"
|
||
"github.com/infraboard/mcube/v2/ioc/config/log"
|
||
"github.com/rs/zerolog"
|
||
)
|
||
|
||
func init() {
|
||
ioc.Controller().Registry(&TokenServiceImpl{
|
||
AutoRefresh: true,
|
||
RereshTTLSecond: 1 * 60 * 60,
|
||
})
|
||
}
|
||
|
||
var _ token.Service = (*TokenServiceImpl)(nil)
|
||
|
||
type TokenServiceImpl struct {
|
||
ioc.ObjectImpl
|
||
user user.Service
|
||
log *zerolog.Logger
|
||
// policy policy.PermissionService
|
||
|
||
// 自动刷新, 直接刷新Token的过期时间,而不是生成一个新Token
|
||
AutoRefresh bool `json:"auto_refresh" toml:"auto_refresh" yaml:"auto_refresh" env:"AUTO_REFRESH"`
|
||
// 刷新TTL
|
||
RereshTTLSecond uint64 `json:"refresh_ttl" toml:"refresh_ttl" yaml:"refresh_ttl" env:"REFRESH_TTL"`
|
||
// Api最多多少个, 这种Token往往过期时间比较长, 为了安全不要申请太多
|
||
MaxActiveApiToken uint8 `json:"max_active_api_token" toml:"max_active_api_token" yaml:"max_active_api_token" env:"MAX_ACTIVE_API_TOKEN"`
|
||
|
||
refreshDuration time.Duration
|
||
}
|
||
|
||
func (i *TokenServiceImpl) Init() error {
|
||
i.log = log.Sub(i.Name())
|
||
i.user = user.GetService()
|
||
// i.policy = policy.GetService()
|
||
i.refreshDuration = time.Duration(i.RereshTTLSecond) * time.Second
|
||
|
||
if datasource.Get().AutoMigrate {
|
||
err := datasource.DB().AutoMigrate(&token.Token{})
|
||
if err != nil {
|
||
return err
|
||
}
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func (i *TokenServiceImpl) Name() string {
|
||
return token.APP_NAME
|
||
}
|