mirror of
https://github.com/openimsdk/open-im-server.git
synced 2026-06-29 06:20:32 +08:00
剔除设备
This commit is contained in:
parent
24d15d5e36
commit
33e2a71362
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user