feat: add synced enforcer

This commit is contained in:
weloe
2023-11-02 05:11:03 +08:00
parent 3c7a8ef8b6
commit c85d2c4047
2 changed files with 426 additions and 0 deletions

422
enforcer_synced.go Normal file
View 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)
}

View File

@@ -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
}