public AuthorizeUserOptions CreateAuthorizeUserOptions(
            string login,
            string password,
            DateTime lastOnline = default)
        {
            var options = new AuthorizeUserOptions();

            options.Login      = login;
            options.Password   = password;
            options.LastOnline = lastOnline;
            return(options);
        }
Exemplo n.º 2
0
        public User SignIn(AuthorizeUserOptions options)
        {
            var user = userRepository.GetUser(options.Login);

            _ = user ?? throw new ArgumentException($"Can not sign in. No user with login '{options.Login}'");

            if (user.Password != options.Password)
            {
                throw new ArgumentException($"Can not sign in. Wrong password provided for login '{options.Login}'");
            }

            var domainUser = mapper.Map <User>(user);

            return(domainUser);
        }
Exemplo n.º 3
0
        public OperationResult DeleteAccount(AuthorizeUserOptions options)
        {
            OperationResult operationResult;

            try
            {
                var domainOptions = mapper.Map <DomainOptions.AuthorizeUserOptions>(options);
                userService.DeleteAccount(domainOptions);

                operationResult = new OperationResult(OperationResultTypes.Success);
            }
            catch (Exception exception)
            {
                operationResult = new OperationResult(
                    operationResultType: OperationResultTypes.Failure,
                    message: exception.ToString());
            }

            return(operationResult);
        }
Exemplo n.º 4
0
        public void SignUp(AuthorizeUserOptions options)
        {
            var domainUser = mapper.Map <User>(options);
            var usersInDb  = userRepository.GetAllUsers();
            var users      = mapper.Map <IList <User> >(usersInDb);

            if (!Users.IsUserDataUnique(domainUser, users))
            {
                throw new ArgumentException($"User with such login ('{options.Login}') already exists");
            }

            if (!Users.AreUserCredentialsValid(options.Login, options.Password))
            {
                throw new ArgumentException($"Provided user credentials for login '{options.Login}' are not valid");
            }

            var dataUser = mapper.Map <DataEntities.User>(options);

            dataUser.LastUpdate = DateTime.Now;

            userRepository.SaveUser(dataUser);
        }
Exemplo n.º 5
0
        public void Disconnect(AuthorizeUserOptions options)
        {
            try
            {
                var domainOptions = mapper.Map <DomainOptions.AuthorizeUserOptions>(options);
                var domainUser    = this.userService.SignIn(domainOptions);

                this.chatServiceCallbacks.Remove(domainUser.Login);

                // var affectedUsers = this.chatService.GetAffectedUsers(domainUser.Login);
                // foreach (var user in affectedUsers)
                // {
                //     if (this.chatServiceCallbacks.ContainsKey(user.Login))
                //     {
                //         var userChatServiceCallback = this.chatServiceCallbacks[user.Login];
                //     }
                // }
            }
            catch (Exception exception)
            {
                // Exception logging
            }
        }
Exemplo n.º 6
0
        public void DeleteAccount(AuthorizeUserOptions options)
        {
            var user = SignIn(options);

            userRepository.DeleteUser(user.Login);
        }
Exemplo n.º 7
0
        public OperationResult SignIn(AuthorizeUserOptions options)
        {
            OperationResult operationResult;

            try
            {
                var domainOptions = mapper.Map <DomainOptions.AuthorizeUserOptions>(options);
                var domainUser    = this.userService.SignIn(domainOptions);

                var callback = this.CurrentSessionChatServiceCallback;
                if (this.chatServiceCallbacks.ContainsValue(callback))
                {
                    throw new ArgumentException($"Can not connect client (user #{domainUser.Login}). Client is already connected");
                }

                lock (syncObject)
                {
                    this.chatServiceCallbacks.Add(domainUser.Login, callback);
                }

                var domainMissedChatUpdates  = this.chatService.GetMissedChatUpdates(domainUser.Login, options.LastOnline);
                var missedChatUpdatesOptions = this.mapper.Map <IList <CreateOrUpdateChatOptions> >(domainMissedChatUpdates);
                foreach (var missedChatUpdatesOption in missedChatUpdatesOptions)
                {
                    var domainChatMembers = this.chatService.GetMembersOfChat(missedChatUpdatesOption.ChatId);
                    missedChatUpdatesOption.MembersLogins = domainChatMembers
                                                            .Select(chm => chm.Login)
                                                            .ToList();
                    CreateOrUpdateChatForClient(domainUser.Login, missedChatUpdatesOption);
                }

                var domainMissedMessages = this.chatService.GetMissedMessages(domainUser.Login, options.LastOnline);
                var missedMessages       = mapper.Map <IList <SendMessageOptions> >(domainMissedMessages);
                foreach (var message in missedMessages)
                {
                    callback.ReceiveMessage(message);
                }

                var domainMissedDeletedMessages = this.chatService.GetMissedDeletedMessages(domainUser.Login, options.LastOnline);
                foreach (var message in domainMissedDeletedMessages)
                {
                    callback.RemoveMessage(message.MessageId);
                }

                var domainMissedDeletedChats = this.chatService.GetMissedDeletedChats(domainUser.Login, options.LastOnline);
                foreach (var chat in domainMissedDeletedChats)
                {
                    callback.RemoveChat(chat.ChatId);
                }

                var domainMissedChatPermissions =
                    this.chatPermissionService.GetMissedChatPermissions(options.Login, options.LastOnline);
                var chatPermissionOptions =
                    this.mapper.Map <IList <AddOrUpdateChatPermissionOptions> >(domainMissedChatPermissions);
                foreach (var chatPermission in chatPermissionOptions)
                {
                    callback.UpdateChatPermission(chatPermission);
                }

                var userData = mapper.Map <User>(domainUser);
                operationResult = new OperationResult(OperationResultTypes.Success, extraData: userData);
            }
            catch (Exception exception)
            {
                operationResult = new OperationResult(
                    operationResultType: OperationResultTypes.Failure,
                    message: exception.ToString());
            }

            return(operationResult);
        }