mirror of
https://github.com/weloe/token-go.git
synced 2025-10-05 07:26:50 +08:00
feat: add checkId getId api and SecondAuth api
This commit is contained in:
@@ -24,3 +24,5 @@ const (
|
|||||||
BeKicked int = -5
|
BeKicked int = -5
|
||||||
BeBanned int = -6
|
BeBanned int = -6
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const DefaultSecondAuthValue = "DefaultSecondAuthValue"
|
||||||
|
62
enforcer.go
62
enforcer.go
@@ -422,9 +422,21 @@ func (e *Enforcer) CheckLogin(ctx ctx.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Enforcer) CheckLoginByToken(token string) error {
|
||||||
|
_, err := e.GetLoginIdByToken(token)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (e *Enforcer) GetLoginId(ctx ctx.Context) (string, error) {
|
func (e *Enforcer) GetLoginId(ctx ctx.Context) (string, error) {
|
||||||
tokenValue := e.GetRequestToken(ctx)
|
tokenValue := e.GetRequestToken(ctx)
|
||||||
str := e.GetIdByToken(tokenValue)
|
return e.GetLoginIdByToken(tokenValue)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Enforcer) GetLoginIdByToken(token string) (string, error) {
|
||||||
|
str := e.GetIdByToken(token)
|
||||||
if str == "" {
|
if str == "" {
|
||||||
return "", errors.New("GetLoginId() failed: not logged in")
|
return "", errors.New("GetLoginId() failed: not logged in")
|
||||||
}
|
}
|
||||||
@@ -620,3 +632,51 @@ func (e *Enforcer) UpdateSession(id string, session *model.Session) error {
|
|||||||
func (e *Enforcer) GetTokenConfig() config.TokenConfig {
|
func (e *Enforcer) GetTokenConfig() config.TokenConfig {
|
||||||
return e.config
|
return e.config
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Enforcer) OpenSafe(token string, service string, time int64) error {
|
||||||
|
if time == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
err := e.CheckLoginByToken(token)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = e.adapter.SetStr(e.spliceSecSafeKey(token, service), constant.DefaultSecondAuthValue, time)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if e.watcher != nil {
|
||||||
|
e.watcher.OpenSafe(e.loginType, token, service, time)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Enforcer) IsSafe(token string, service string) bool {
|
||||||
|
if token == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
str := e.adapter.GetStr(e.spliceSecSafeKey(token, service))
|
||||||
|
return str != ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Enforcer) GetSafeTime(token string, service string) int64 {
|
||||||
|
if token == "" {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
timeout := e.adapter.GetTimeout(e.spliceSecSafeKey(token, service))
|
||||||
|
return timeout
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Enforcer) CloseSafe(token string, service string) error {
|
||||||
|
if token == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
err := e.adapter.DeleteStr(e.spliceSecSafeKey(token, service))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if e.watcher != nil {
|
||||||
|
e.watcher.CloseSafe(e.loginType, token, service)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@@ -37,8 +37,10 @@ type IEnforcer interface {
|
|||||||
IsLoginByToken(token string) (bool, error)
|
IsLoginByToken(token string) (bool, error)
|
||||||
IsLoginById(id string) (bool, error)
|
IsLoginById(id string) (bool, error)
|
||||||
CheckLogin(ctx ctx.Context) error
|
CheckLogin(ctx ctx.Context) error
|
||||||
|
CheckLoginByToken(token string) error
|
||||||
|
|
||||||
GetLoginId(ctx ctx.Context) (string, error)
|
GetLoginId(ctx ctx.Context) (string, error)
|
||||||
|
GetLoginIdByToken(token string) (string, error)
|
||||||
GetIdByToken(token string) string
|
GetIdByToken(token string) string
|
||||||
GetLoginCount(id string) int
|
GetLoginCount(id string) int
|
||||||
|
|
||||||
@@ -52,6 +54,12 @@ type IEnforcer interface {
|
|||||||
GetBannedLevel(id string, service string) (int64, error)
|
GetBannedLevel(id string, service string) (int64, error)
|
||||||
GetBannedTime(id string, service string) int64
|
GetBannedTime(id string, service string) int64
|
||||||
|
|
||||||
|
// Second auth api
|
||||||
|
OpenSafe(token string, service string, time int64) error
|
||||||
|
IsSafe(token string, service string) bool
|
||||||
|
GetSafeTime(token string, service string) int64
|
||||||
|
CloseSafe(token string, service string) error
|
||||||
|
|
||||||
GetRequestToken(ctx ctx.Context) string
|
GetRequestToken(ctx ctx.Context) string
|
||||||
AddTokenGenerateFun(tokenStyle string, f model.GenerateFunc) error
|
AddTokenGenerateFun(tokenStyle string, f model.GenerateFunc) error
|
||||||
|
|
||||||
|
@@ -125,6 +125,10 @@ func (e *Enforcer) spliceBannedKey(id string, service string) string {
|
|||||||
return e.config.TokenName + ":" + e.loginType + ":ban:" + service + ":" + id
|
return e.config.TokenName + ":" + e.loginType + ":ban:" + service + ":" + id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Enforcer) spliceSecSafeKey(token string, service string) string {
|
||||||
|
return e.config.TokenName + ":" + e.loginType + ":safe:" + service + ":" + token
|
||||||
|
}
|
||||||
|
|
||||||
func (e *Enforcer) SetJwtSecretKey(key string) {
|
func (e *Enforcer) SetJwtSecretKey(key string) {
|
||||||
e.config.JwtSecretKey = key
|
e.config.JwtSecretKey = key
|
||||||
}
|
}
|
||||||
|
@@ -471,3 +471,31 @@ func TestEnforcer_GetBannedTime(t *testing.T) {
|
|||||||
t.Logf("banned time = %v", enforcer.GetBannedTime("1", "comment"))
|
t.Logf("banned time = %v", enforcer.GetBannedTime("1", "comment"))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEnforcer_SecSafe(t *testing.T) {
|
||||||
|
err, enforcer, _ := NewTestEnforcer(t)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("NewTestEnforcer() failed: %v", err)
|
||||||
|
}
|
||||||
|
tokenValue, err := enforcer.LoginById("1")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("LoginById() failed: %v", err)
|
||||||
|
}
|
||||||
|
service := "default_service"
|
||||||
|
err = enforcer.OpenSafe(tokenValue, service, 600000)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("OpenSafe() failed: %v", err)
|
||||||
|
}
|
||||||
|
isSafe := enforcer.IsSafe(tokenValue, service)
|
||||||
|
if !isSafe {
|
||||||
|
t.Fatalf("IsSafe() failed, unexpected return value: %v", isSafe)
|
||||||
|
}
|
||||||
|
err = enforcer.CloseSafe(tokenValue, service)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("CloseSafe() failed: %v", err)
|
||||||
|
}
|
||||||
|
isSafe = enforcer.IsSafe(tokenValue, service)
|
||||||
|
if isSafe {
|
||||||
|
t.Fatalf("IsSafe() failed, unexpected return value: %v", isSafe)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -73,3 +73,17 @@ func (d *DefaultLogger) RefreshToken(tokenValue string, id interface{}, timeout
|
|||||||
}
|
}
|
||||||
log.Printf("RefreshToken: loginId = %v, tokenValue = %v, timeout = %v", id, tokenValue, timeout)
|
log.Printf("RefreshToken: loginId = %v, tokenValue = %v, timeout = %v", id, tokenValue, timeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *DefaultLogger) OpenSafe(loginType string, token string, service string, time int64) {
|
||||||
|
if !d.enable {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Printf("OpenSafe: loginType = %v, tokenValue = %v, service = %v, timeout = %v ", loginType, token, service, time)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DefaultLogger) CloseSafe(loginType string, token string, service string) {
|
||||||
|
if !d.enable {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Printf("CloseSafe: loginType = %v, tokenValue = %v, service = %v ", loginType, token, service)
|
||||||
|
}
|
||||||
|
@@ -18,4 +18,8 @@ type Watcher interface {
|
|||||||
UnBan(loginType string, id interface{}, service string)
|
UnBan(loginType string, id interface{}, service string)
|
||||||
// RefreshToken called when renew token timeout
|
// RefreshToken called when renew token timeout
|
||||||
RefreshToken(tokenValue string, id interface{}, timeout int64)
|
RefreshToken(tokenValue string, id interface{}, timeout int64)
|
||||||
|
// OpenSafe called when open second auth
|
||||||
|
OpenSafe(loginType string, token string, service string, time int64)
|
||||||
|
// CloseSafe called when close second auth
|
||||||
|
CloseSafe(loginType string, token string, service string)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user