Esempio n. 1
0
        private MainMessage HandleListRoomUsers(MainMessage msg)
        {
            ulong?userId = _clientId2UserId[msg.ClientId];

            if (!userId.HasValue)
            {
                return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Unauthorized request."));
            }
            uint?roomId = _api.Services.Room.RoomByUserId(userId.Value);

            if (!roomId.HasValue)
            {
                return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "User must be connected to some Room."));
            }
            ulong[] users = _api.Services.Room.GetConnectedUsers(roomId.Value);
            if (users == null)
            {
                users = new ulong[0];
            }
            UserListMsg userListMsg = new UserListMsg();

            userListMsg.Users.AddRange(users.Select(x => User.Get(x)).Where(x => x != null).Select(x => x.ToMessage()));
            MainMessage response = new MainMessage();

            response.UserMngMsg                     = new UserMngMsg();
            response.UserMngMsg.UserMsg             = new UserMsg();
            response.UserMngMsg.UserMsg.UserListMsg = userListMsg;
            return(response);
        }
Esempio n. 2
0
        private MainMessage HandleUserRequest(MainMessage msg)
        {
            _log.Debug("In HandleUserRequest method.");
            try
            {
                // TODO needs enhancemnets
                UserRequestMsg userRequest = msg.UserMngMsg.UserMsg.UserRequestMsg;
                switch (userRequest.UserRequestTypeCase)
                {
                // create new User
                case UserRequestMsg.UserRequestTypeOneofCase.CreateQuery:
                    _log.Debug("Creating new user: "******"User sucessfuly created.");
                    return(new MainMessage {
                        UserMngMsg = userMngMsg
                    });

                // List users (Username LIKE '%msg.username%')
                case UserRequestMsg.UserRequestTypeOneofCase.ListQuery:
                    _log.Debug("Looking for user like: " + userRequest.ListQuery.Username);
                    UserDetailMsg   userDetail = userRequest.ListQuery;
                    UserDetailMsg[] users      = User.List(userDetail)
                                                 .Select(x => new UserDetailMsg {
                        Password = "", UserId = x.Id, Username = x.Username
                    })
                                                 .ToArray();
                    UserListMsg userList = new UserListMsg();
                    userList.Users.AddRange(users);
                    UserMngMsg userMngMsg1 = new UserMngMsg();
                    userMngMsg1.UserMsg = new UserMsg {
                        UserListMsg = userList
                    };
                    _log.Debug($"Found {users.Length} records.");
                    return(new MainMessage {
                        UserMngMsg = userMngMsg1
                    });

                // Change password, where old and new password are in same filed, separated by newline
                case UserRequestMsg.UserRequestTypeOneofCase.UpdateQuery:
                    _log.Debug("Changing password to user: "******"Password sucessfuly changed.");
                    return(ISystemService.CreateOkMessage(msg.MsgId));

                // show user by its Id
                case UserRequestMsg.UserRequestTypeOneofCase.UserIdDetail:
                    _log.Debug($"Looking for user with id {userRequest.UserIdDetail}");
                    User          user2       = User.Get(userRequest.UserIdDetail);
                    UserDetailMsg userDetail1 = new UserDetailMsg();
                    userDetail1.UserId   = user2.Id;
                    userDetail1.Password = "";
                    userDetail1.Username = user2.Username;
                    UserMsg userMsg1 = new UserMsg();
                    userMsg1.UserDetailMsg = userDetail1;
                    return(new MainMessage {
                        UserMngMsg = new UserMngMsg {
                            UserMsg = userMsg1
                        }
                    });

                case UserRequestMsg.UserRequestTypeOneofCase.UserByClientId:
                    _log.Debug($"Looking for user with client id {userRequest.UserByClientId}");
                    if (msg.SenderIdCase != MainMessage.SenderIdOneofCase.ServerId)
                    {
                        return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Not enough permissions."));
                    }
                    ulong clientId = userRequest.UserByClientId;
                    if (clientId >= (ulong)_clientMachines.Count || _clientMachines[(int)clientId] == null)
                    {
                        return(ISystemService.CreateErrorMessage(msg.MsgId, 0, 0, "Unable to find user with this client ID"));
                    }
                    MainMessage respUserDetail = new MainMessage();
                    respUserDetail.UserMngMsg         = new UserMngMsg();
                    respUserDetail.UserMngMsg.UserMsg = new UserMsg();
                    respUserDetail.UserMngMsg.UserMsg.UserDetailMsg = _clientMachines[(int)clientId].ToMessage();
                    return(respUserDetail);

                default:
                    throw new ErrorMsgException("This message cannot be empty.");
                }
            }
            catch (Exception ex)
            {
                _log.Error(ex);
                return(ISystemService.CreateErrorMessage(0, 0, 0, ex.Message));
            }
        }