feat: add device manager api

This commit is contained in:
weloe
2023-11-06 00:54:30 +08:00
parent c7d67424d0
commit 27404a24dd
4 changed files with 52 additions and 0 deletions

View File

@@ -642,3 +642,24 @@ func (e *Enforcer) RefreshTokenByModel(refreshToken string, refreshModel *model.
RefreshToken: refreshToken, RefreshToken: refreshToken,
}, nil }, nil
} }
func (e *Enforcer) GetLoginDevices(id string) []string {
session := e.GetSession(id)
if session == nil {
return nil
}
return session.GetAllDevice()
}
func (e *Enforcer) GetDeviceByToken(token string) string {
id := e.getIdByToken(token)
session := e.GetSession(id)
if session == nil {
return ""
}
tokenSign := session.GetTokenSign(token)
if tokenSign == nil {
return ""
}
return tokenSign.Device
}

View File

@@ -45,6 +45,10 @@ type IEnforcer interface {
GetIdByToken(token string) string GetIdByToken(token string) string
GetLoginCount(id string, device ...string) int GetLoginCount(id string, device ...string) int
// device manager api
GetLoginDevices(id string) []string
GetDeviceByToken(token string) string
// refresh api // refresh api
GetRefreshToken(tokenValue string) string GetRefreshToken(tokenValue string) string
RefreshToken(refreshToken string, refreshModel ...*model.Refresh) (*model.RefreshRes, error) RefreshToken(refreshToken string, refreshModel ...*model.Refresh) (*model.RefreshRes, error)

View File

@@ -621,3 +621,19 @@ func TestEnforcer_RefreshToken(t *testing.T) {
t.Fatalf("RefreshToken() failed: %v", err) t.Fatalf("RefreshToken() failed: %v", err)
} }
} }
func TestEnforcer_GetLoginDevices(t *testing.T) {
enforcer, _ := NewTestEnforcer(t)
t1, err := enforcer.LoginById("1", "test")
if err != nil {
t.Fatalf("LoginById failed: %v", err)
}
devices := enforcer.GetLoginDevices("1")
if len(devices) != 1 || devices[0] != "test" {
t.Fatalf("GetLoginDevices failed, want is 'test'")
}
device := enforcer.GetDeviceByToken(t1)
if device != "test" {
t.Fatalf("GetLoginDevices failed, want is 'test'")
}
}

View File

@@ -4,6 +4,7 @@ import (
"container/list" "container/list"
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/weloe/token-go/util"
"time" "time"
) )
@@ -65,6 +66,16 @@ func (s *Session) GetFilterTokenSignSlice(device string) []*TokenSign {
return l return l
} }
func (s *Session) GetAllDevice() []string {
arr := make([]string, 0)
for _, sign := range s.TokenSignList {
if !util.HasStr(arr, sign.Device) {
arr = append(arr, sign.Device)
}
}
return arr
}
// GetFilterTokenSign filter by TokenSign.Device from all TokenSign // GetFilterTokenSign filter by TokenSign.Device from all TokenSign
func (s *Session) GetFilterTokenSign(device string) *list.List { func (s *Session) GetFilterTokenSign(device string) *list.List {
copyList := list.New() copyList := list.New()