mirror of
https://github.com/weloe/token-go.git
synced 2025-09-27 03:46:01 +08:00
feat: add synced enforcer
This commit is contained in:
422
enforcer_synced.go
Normal file
422
enforcer_synced.go
Normal file
@@ -0,0 +1,422 @@
|
||||
package token_go
|
||||
|
||||
import (
|
||||
"github.com/weloe/token-go/config"
|
||||
"github.com/weloe/token-go/ctx"
|
||||
"github.com/weloe/token-go/log"
|
||||
"github.com/weloe/token-go/model"
|
||||
"github.com/weloe/token-go/persist"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// SyncedEnforcer wraps Enforcer and provides synchronized access
|
||||
type SyncedEnforcer struct {
|
||||
*Enforcer
|
||||
m sync.RWMutex
|
||||
}
|
||||
|
||||
// NewSyncedEnforcer creates a synchronized enforcer
|
||||
func NewSyncedEnforcer(adapter persist.Adapter, params ...interface{}) (*SyncedEnforcer, error) {
|
||||
e := &SyncedEnforcer{}
|
||||
var err error
|
||||
e.Enforcer, err = NewEnforcer(adapter, params...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return e, nil
|
||||
}
|
||||
|
||||
// GetLock return the private RWMutex lock
|
||||
func (e *SyncedEnforcer) GetLock() *sync.RWMutex {
|
||||
return &e.m
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) SetType(t string) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
e.Enforcer.SetType(t)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetType() string {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetType()
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetAdapter() persist.Adapter {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetAdapter()
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) SetAdapter(adapter persist.Adapter) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
e.Enforcer.SetAdapter(adapter)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) SetWatcher(watcher persist.Watcher) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
e.Enforcer.SetWatcher(watcher)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetWatcher() persist.Watcher {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetWatcher()
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) SetLogger(logger log.Logger) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
e.Enforcer.SetLogger(logger)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetLogger() log.Logger {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetLogger()
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) EnableLog() {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
e.Enforcer.EnableLog()
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) IsLogEnable() bool {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.IsLogEnable()
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetTokenConfig() config.TokenConfig {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetTokenConfig()
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) Login(id string, ctx ctx.Context) (string, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.Login(id, ctx)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) LoginById(id string, device ...string) (string, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.LoginById(id, device...)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) LoginByModel(id string, loginModel *model.Login, ctx ctx.Context) (string, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.LoginByModel(id, loginModel, ctx)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) Logout(ctx ctx.Context) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.Logout(ctx)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) LogoutById(id string, device ...string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.LogoutById(id, device...)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) LogoutByToken(token string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.LogoutByToken(token)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) IsLogin(ctx ctx.Context) (bool, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.IsLogin(ctx)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) IsLoginByToken(token string) (bool, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.IsLoginByToken(token)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) IsLoginById(id string, device ...string) (bool, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.IsLoginById(id, device...)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) CheckLogin(ctx ctx.Context) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.CheckLogin(ctx)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) CheckLoginByToken(token string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.CheckLoginByToken(token)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetLoginId(ctx ctx.Context) (string, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetLoginId(ctx)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetLoginIdByToken(token string) (string, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetLoginIdByToken(token)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetId(ctx ctx.Context) string {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetId(ctx)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetIdByToken(token string) string {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetIdByToken(token)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetLoginCount(id string, device ...string) int {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetLoginCount(id, device...)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetRefreshToken(tokenValue string) string {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetRefreshToken(tokenValue)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) RefreshToken(refreshToken string, refreshModel ...*model.Refresh) (*model.RefreshRes, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.RefreshToken(refreshToken, refreshModel...)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) RefreshTokenByModel(refreshToken string, refreshModel *model.Refresh, ctx ctx.Context) (*model.RefreshRes, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.RefreshTokenByModel(refreshToken, refreshModel, ctx)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetLoginCounts() (int, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetLoginCounts()
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetLoginTokenCounts() (int, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetLoginTokenCounts()
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) Kickout(id string, device ...string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.Kickout(id, device...)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) Replaced(id string, device ...string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.Replaced(id, device...)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) Banned(id string, service string, level int, time int64) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.Banned(id, service, level, time)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) UnBanned(id string, services ...string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.UnBanned(id, services...)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) IsBanned(id string, service string) bool {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.IsBanned(id, service)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetBannedLevel(id string, service string) (int64, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetBannedLevel(id, service)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetBannedTime(id string, service string) int64 {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.getBannedTime(id, service)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) OpenSafe(token string, service string, time int64) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.OpenSafe(token, service, time)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) IsSafe(token string, service string) bool {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.IsSafe(token, service)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetSafeTime(token string, service string) int64 {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetSafeTime(token, service)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) CloseSafe(token string, service string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.CloseSafe(token, service)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) CreateTempToken(token string, service string, value string, timeout int64) (string, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.CreateTempToken(token, service, value, timeout)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) CreateTempTokenByStyle(style string, service string, value string, timeout int64) (string, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.CreateTempTokenByStyle(style, service, value, timeout)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetTempTokenTimeout(service string, tempToken string) int64 {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetTempTokenTimeout(service, tempToken)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) ParseTempToken(service string, tempToken string) string {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.ParseTempToken(service, tempToken)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) DeleteTempToken(service string, tempToken string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.DeleteTempToken(service, tempToken)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetRequestToken(ctx ctx.Context) string {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetRequestToken(ctx)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) AddTokenGenerateFun(tokenStyle string, f model.HandlerFunc) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.AddTokenGenerateFun(tokenStyle, f)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) CreateQRCodeState(QRCodeId string, timeout int64) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.CreateQRCodeState(QRCodeId, timeout)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetQRCode(QRCodeId string) *model.QRCode {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetQRCode(QRCodeId)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetQRCodeState(QRCodeId string) model.QRCodeState {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetQRCodeState(QRCodeId)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetQRCodeTimeout(QRCodeId string) int64 {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetQRCodeTimeout(QRCodeId)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) DeleteQRCode(QRCodeId string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.DeleteQRCode(QRCodeId)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) Scanned(QRCodeId string, loginId string) (string, error) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.Scanned(QRCodeId, loginId)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) ConfirmAuth(QRCodeTempToken string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.ConfirmAuth(QRCodeTempToken)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) CancelAuth(QRCodeTempToken string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.CancelAuth(QRCodeTempToken)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) SetAuth(manager interface{}) {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
e.Enforcer.SetAuth(manager)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) CheckRole(ctx ctx.Context, role string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.CheckRole(ctx, role)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) CheckPermission(ctx ctx.Context, permission string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.CheckPermission(ctx, permission)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) GetSession(id string) *model.Session {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.GetSession(id)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) DeleteSession(id string) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.DeleteSession(id)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) UpdateSession(id string, session *model.Session) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.UpdateSession(id, session)
|
||||
}
|
||||
|
||||
func (e *SyncedEnforcer) SetSession(id string, session *model.Session, timeout int64) error {
|
||||
e.m.Lock()
|
||||
defer e.m.Unlock()
|
||||
return e.Enforcer.SetSession(id, session, timeout)
|
||||
}
|
@@ -25,6 +25,10 @@ func NewDefaultAdapter() *DefaultAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
func (d *DefaultAdapter) SetCache(cache cache.Cache) {
|
||||
d.cache = cache
|
||||
}
|
||||
|
||||
func (d *DefaultAdapter) SetSerializer(serializer Serializer) {
|
||||
d.serializer = serializer
|
||||
}
|
||||
|
Reference in New Issue
Block a user