剔除设备

This commit is contained in:
hawklin2017 2026-04-12 19:57:17 +08:00
parent 24d15d5e36
commit 33e2a71362
3 changed files with 57 additions and 1 deletions

View File

@ -43,3 +43,11 @@ func (o *AuthApi) ParseToken(c *gin.Context) {
func (o *AuthApi) ForceLogout(c *gin.Context) {
a2r.Call(c, auth.AuthClient.ForceLogout, o.Client)
}
func (o *AuthApi) GetActiveDevices(c *gin.Context) {
a2r.Call(c, auth.AuthClient.GetActiveDevices, o.Client)
}
func (o *AuthApi) KickDevice(c *gin.Context) {
a2r.Call(c, auth.AuthClient.KickDevice, o.Client)
}

View File

@ -238,7 +238,8 @@ func newGinRouter(ctx context.Context, client discovery.SvcDiscoveryRegistry, co
authRouterGroup.POST("/get_user_token", a.GetUserToken)
authRouterGroup.POST("/parse_token", a.ParseToken)
authRouterGroup.POST("/force_logout", a.ForceLogout)
authRouterGroup.POST("/get_active_devices", a.GetActiveDevices)
authRouterGroup.POST("/kick_device", a.KickDevice)
}
// Third service
{

View File

@ -294,3 +294,50 @@ func (s *authServer) KickTokens(ctx context.Context, req *pbauth.KickTokensReq)
}
return &pbauth.KickTokensResp{}, nil
}
// GetActiveDevices returns all platforms that have at least one valid (non-kicked) token for the user.
// Only the user themselves or an admin can call this.
func (s *authServer) GetActiveDevices(ctx context.Context, req *pbauth.GetActiveDevicesReq) (*pbauth.GetActiveDevicesResp, error) {
if err := authverify.CheckAccessV3(ctx, req.UserID, s.config.Share.IMAdminUserID); err != nil {
return nil, err
}
var devices []*pbauth.DeviceInfo
for platformID, platformName := range constant.PlatformID2Name {
if int32(platformID) == constant.AdminPlatformID {
continue
}
m, err := s.authDatabase.GetTokensWithoutError(ctx, req.UserID, platformID)
if err != nil {
return nil, err
}
for _, state := range m {
if state == constant.NormalToken {
devices = append(devices, &pbauth.DeviceInfo{
PlatformID: int32(platformID),
PlatformName: platformName,
})
break
}
}
}
return &pbauth.GetActiveDevicesResp{Devices: devices}, nil
}
// KickDevice kicks the specified platform device offline for the given user.
// Only the user themselves or an admin can call this.
func (s *authServer) KickDevice(ctx context.Context, req *pbauth.KickDeviceReq) (*pbauth.KickDeviceResp, error) {
if err := authverify.CheckAccessV3(ctx, req.UserID, s.config.Share.IMAdminUserID); err != nil {
return nil, err
}
if req.PlatformID == constant.AdminPlatformID {
return nil, errs.ErrArgs.WrapMsg("cannot kick admin platform")
}
if _, ok := constant.PlatformID2Name[int(req.PlatformID)]; !ok {
return nil, errs.ErrArgs.WrapMsg("invalid platformID", "platformID", req.PlatformID)
}
if err := s.forceKickOff(ctx, req.UserID, req.PlatformID); err != nil {
return nil, err
}
return &pbauth.KickDeviceResp{}, nil
}