generated from VLADIMIR/template
up
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"evening_detective_server/internal/modules/processor_jwt"
|
||||
"evening_detective_server/internal/modules/roles"
|
||||
"evening_detective_server/internal/services/device_presence_service"
|
||||
proto "evening_detective_server/proto"
|
||||
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
)
|
||||
|
||||
func (s *server) DeviceHeartbeat(ctx context.Context, req *proto.DeviceHeartbeatReq) (*proto.DeviceHeartbeatRsp, error) {
|
||||
if req == nil {
|
||||
req = &proto.DeviceHeartbeatReq{}
|
||||
}
|
||||
ip, userAgent := clientInfoFromContext(ctx)
|
||||
claims, authenticated := processor_jwt.ClaimsFromContext(ctx)
|
||||
input := device_presence_service.Heartbeat{
|
||||
DeviceID: req.DeviceID,
|
||||
ConnectionID: req.ConnectionID,
|
||||
OrganizerGameID: deviceOptionalID(req.OrganizerGameID),
|
||||
TeamID: deviceOptionalID(req.TeamID),
|
||||
Password: req.Password,
|
||||
ScreenID: req.ScreenID,
|
||||
IP: ip,
|
||||
UserAgent: userAgent,
|
||||
IsAuthenticated: authenticated,
|
||||
CanManage: authenticated && (roles.HasRole(claims, roles.Organizer) || roles.HasRole(claims, roles.Author)),
|
||||
}
|
||||
if req.AccessToken != "" {
|
||||
input.ScreenTokenHash = hashScreenToken(req.AccessToken)
|
||||
}
|
||||
enabled, now, err := s.devicePresenceService.Heartbeat(ctx, input)
|
||||
if err != nil {
|
||||
return nil, deviceErrorStatus(err)
|
||||
}
|
||||
return &proto.DeviceHeartbeatRsp{
|
||||
Enabled: &enabled,
|
||||
ServerTime: timestamppb.New(now),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *server) GetDevices(ctx context.Context, req *proto.GetDevicesReq) (*proto.GetDevicesRsp, error) {
|
||||
if req == nil {
|
||||
req = &proto.GetDevicesReq{}
|
||||
}
|
||||
claims, authenticated := processor_jwt.ClaimsFromContext(ctx)
|
||||
canRead := authenticated && (roles.HasRole(claims, roles.Organizer) || roles.HasRole(claims, roles.Developer))
|
||||
devices, now, err := s.devicePresenceService.List(ctx, deviceOptionalID(req.GameID), canRead)
|
||||
if err != nil {
|
||||
return nil, deviceErrorStatus(err)
|
||||
}
|
||||
return &proto.GetDevicesRsp{
|
||||
Devices: mapVenueDevices(devices),
|
||||
ServerTime: timestamppb.New(now),
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user