Пример #1
0
        /// <summary>
        /// Deletes a User.
        /// </summary>
        /// <param name="request">Request object.</param>
        /// <param name="response">Response object.</param>
        /// <returns>Populated Response object.</returns>
        public UserManagementResponse deleteUser(
            UserManagementRequest request,
            UserManagementResponse response)
        {
            IUserManagementDataServices userManagementDataServices = getUserManagementDataServices();

            if (request.RequestorUserAccount.UserID == request.UserAccountToProcess.UserID)
            {
                response.IsRequestSuccessful  = false;
                response.ResponseErrorMessage = "The currently logged in user cannot delete itself.";
                return(response);
            }

            DDO.UserAccount dataUserAccount = UserAccountConverter.ConvertToDataUserAccount(request.UserAccountToProcess);

            response.IsRequestSuccessful = userManagementDataServices.DeleteUser(dataUserAccount);

            if (response.IsRequestSuccessful)
            {
                Logger.Log("[Delete User Successful] " + request.UserAccountToProcess.ToString(),
                           LogType.Informational);
            }
            else
            {
                Logger.Log("[Delete User Failed]",
                           LogType.Warning);
                response.ResponseErrorMessage = "Problem encountered when deleting a user.";
            }

            return(response);
        }
Пример #2
0
        /// <summary>
        /// Attempt to Login a user account.
        /// </summary>
        /// <param name="request">Request object to login.</param>
        /// <param name="response">Response object to populate with details.</param>
        /// <returns>Response object with details about login.</returns>
        public DCO.Response.UserManagementResponse login(
            UserManagementRequest request,
            UserManagementResponse response)
        {
            IUserManagementDataServices userManagementDataServices = getUserManagementDataServices();

            DDO.UserAccount retrievedDataUserAccount =
                userManagementDataServices.GetUserByUsername(request.UserAccountToProcess.Username);

            DCO.UserAccount retrievedCoreUserAccount =
                UserAccountConverter.ConvertToCoreUserAccount(retrievedDataUserAccount);

            // Check if a user is found.
            if (retrievedCoreUserAccount != null)
            {
                // Check if the passwords match.
                if (retrievedCoreUserAccount.Password == request.UserAccountToProcess.Password)
                {
                    if (retrievedDataUserAccount.FailedAttempts >= 3)
                    {
                        response.IsRequestSuccessful  = false;
                        response.ResponseErrorMessage = "User is currently locked out. Please contact an administrator.";

                        Logger.Log("[Locked Account] " + retrievedCoreUserAccount.ToString(),
                                   LogType.Warning);
                    }
                    else
                    {
                        retrievedDataUserAccount.FailedAttempts = 0;
                        userManagementDataServices.EditUser(retrievedDataUserAccount);

                        response.UserAccountsRetrieved.Add(retrievedCoreUserAccount);
                        response.IsRequestSuccessful = true;

                        Logger.Log("[Login Successful] " + retrievedCoreUserAccount.ToString(),
                                   LogType.Informational);
                    }
                }
                // User found but password given was incorrect.
                // Increase failed attempts.
                else
                {
                    // If failed attempts is less than 3,
                    // add counters to failed attempts.
                    if (retrievedDataUserAccount.FailedAttempts < 3)
                    {
                        retrievedDataUserAccount.FailedAttempts += 1;
                        userManagementDataServices.EditUser(retrievedDataUserAccount);

                        if (retrievedDataUserAccount.FailedAttempts == 3)
                        {
                            Logger.Log("[Locking Account] " + retrievedCoreUserAccount.ToString(),
                                       LogType.Warning);
                        }
                    }
                }
            }

            return(response);
        }
Пример #3
0
        /// <summary>
        /// Search for Users
        /// </summary>
        /// <param name="clientSearchCriteria">Search criteria.</param>
        /// <param name="keyWord">Search key word.</param>
        public void SearchUser(
            DCU.Enums.UserInfoSearchCriteria clientSearchCriteria,
            string keyWord)
        {
            // 1.) Get Service
            IUserManagementServices userManagementServices =
                ComponentManager.GetComponent <IUserManagementServices>();

            // 2.) Create Request
            DCO.Enums.UserInfoSearchCriteriaEnum coreSearchCriteria =
                UserAccountConverter.ConvertToCoreUserInfoSearchCriteria(clientSearchCriteria);

            UserManagementRequest request = UserManagementHelper.CreateUserManagementRequest(
                UserManagementActionType.SearchUsers,
                searchKeyWord: keyWord,
                userInfoSearchCriteria: coreSearchCriteria);

            // 3.) Send Request
            UserManagementResponse response =
                userManagementServices.UserManagementHandleRequest(request);


            // 4.) Handle Response
            List <DCO.Objects.UserAccount> coreUserAccounts = response.UserAccountsRetrieved;

            List <DCU.Objects.UserAccount> clientUserAccounts = new List <DCU.Objects.UserAccount>();

            foreach (DCO.Objects.UserAccount coreUserAccount in coreUserAccounts)
            {
                clientUserAccounts.Add(UserAccountConverter.CovertToClientUserAccount(coreUserAccount));
            }

            // Get the logged in user account that was used by the server
            // when handling the request.
            DCU.Objects.UserAccount clientUserAccountLoggedIn =
                UserAccountConverter.CovertToClientUserAccount(response.RequestorUserAccount);

            UserAccountEventArgs userAccountEventArgs =
                createUserAccountEventArgs(
                    UserAccountActionType.SearchUsers,
                    clientUserAccounts,
                    clientUserAccountLoggedIn,
                    response.ResponseErrorMessage);

            // Broadcast to UserAccountEventArgs that a search user was triggered.
            EventBus <UserAccountEventArgs> .Broadcast(
                this,
                userAccountEventArgs);
        }
Пример #4
0
        /// <summary>
        /// Handles the request object based on the Action Type.
        /// </summary>
        /// <param name="request">Request object to be processed.</param>
        /// <returns>Response object with the results from the request.</returns>
        public UserManagementResponse UserManagementHandleRequest(UserManagementRequest request)
        {
            // 1.) Create container for response object.
            UserManagementResponse response = createResponseObject(request);

            try
            {
                // Based on the Action Type, select what action to perform.
                switch (request.UserManagementActionType)
                {
                case UserManagementActionType.AddUser:
                    response = addUser(request, response);
                    break;

                case UserManagementActionType.DeleteUser:
                    response = deleteUser(request, response);
                    break;

                case UserManagementActionType.EditUser:
                    response = editUser(request, response);
                    break;

                case UserManagementActionType.GetUsers:
                    response = getUsers(request, response);
                    break;

                case UserManagementActionType.SearchUsers:
                    response = searchUsersByName(request, response);
                    break;

                case UserManagementActionType.Login:
                    response = login(request, response);
                    break;

                case UserManagementActionType.UnlockUser:
                    response = unlock(request, response);
                    break;
                }
            }
            // Unknown exception occured.
            catch (Exception e)
            {
                Logger.Log(e,
                           LogType.Error);
            }

            return(response);
        }
Пример #5
0
        /// <summary>
        /// Performs a login request to UserManagementServices.
        /// </summary>
        /// <param name="userAccount">UserAccount to login.</param>
        public void Login(DCU.Objects.UserAccount userAccount)
        {
            // 1.) Get Service
            IUserManagementServices userManagementServices =
                ComponentManager.GetComponent <IUserManagementServices>();

            // 2.) Populate and Create Request.
            DCO.Objects.UserAccount coreUserAccount = new DCO.Objects.UserAccount();
            coreUserAccount.Username = userAccount.Username;
            coreUserAccount.Password = userAccount.Password;

            UserManagementRequest request = UserManagementHelper.CreateUserManagementRequest(
                DCO.Enums.UserManagementActionType.Login,
                coreUserAccount);

            // 3.) Send Request
            UserManagementResponse response = userManagementServices.UserManagementHandleRequest
                                                  (request);

            // 4.) Handle Response
            DCU.Objects.UserAccount userAccountLoggedIn = new DCU.Objects.UserAccount();

            if (response.UserAccountsRetrieved.Count > 0)
            {
                userAccountLoggedIn = UserAccountConverter.CovertToClientUserAccount(response.UserAccountsRetrieved[0]);
            }

            UserLoginEventArgs userLoginEventArg;

            if (response.IsRequestSuccessful)
            {
                ComponentManager.RegisterComponent <DCU.Objects.UserAccount>(userAccountLoggedIn);

                userLoginEventArg = createUserLoginEventArg(
                    LoginResultType.Success,
                    response.ResponseMessage);
            }
            else
            {
                userLoginEventArg = createUserLoginEventArg(
                    LoginResultType.Failed,
                    response.ResponseErrorMessage);
            }

            // 5.) Broadcast via the EventBus.
            EventBus <UserLoginEventArgs> .Broadcast(this, userLoginEventArg);
        }
Пример #6
0
        /// <summary>
        /// Unlocks a User Account
        /// </summary>
        /// <param name="userAccount">User Account to be unlocked.</param>
        public void UnlockUser(DCU.Objects.UserAccount userAccount)
        {
            // 1.) Get Service
            IUserManagementServices userManagementServices =
                ComponentManager.GetComponent <IUserManagementServices>();

            // 2.) Create Request
            UserManagementRequest request = UserManagementHelper.CreateUserManagementRequest(
                UserManagementActionType.UnlockUser,
                UserAccountConverter.CovertToCoreUserAccount(userAccount));

            // 3.) Send Request
            UserManagementResponse response =
                userManagementServices.UserManagementHandleRequest(request);

            // 4.) Handle Response
            UserAccountActionType userAccountActionType;
            string message;

            if (response.IsRequestSuccessful)
            {
                userAccountActionType = UserAccountActionType.UnlockUser;
                message = response.ResponseMessage;
            }
            else
            {
                userAccountActionType = UserAccountActionType.UnlockUserFailed;
                message = response.ResponseErrorMessage;
            }

            // Get the logged in user account that was used by the server
            // when handling the request.
            DCU.Objects.UserAccount clientUserAccountLoggedIn =
                UserAccountConverter.CovertToClientUserAccount(response.RequestorUserAccount);

            UserAccountEventArgs userAccountEventArgs =
                createUserAccountEventArgs(
                    userAccountActionType,
                    null,
                    clientUserAccountLoggedIn,
                    message);

            // Broadcast to UserAccountEventARgs that an unlock user was triggered.
            EventBus <UserAccountEventArgs> .Broadcast(
                this,
                userAccountEventArgs);
        }
Пример #7
0
        /// <summary>
        /// Updates User Accounts
        /// </summary>
        /// <param name="actionType">Action Type</param>
        public void UpdateUsers(
            UserAccountActionType actionType = UserAccountActionType.UpdateUsers)
        {
            // 1.) Get Service
            IUserManagementServices userManagementServices =
                ComponentManager.GetComponent <IUserManagementServices>();


            // 2.) Create Request
            UserManagementRequest request = UserManagementHelper.CreateUserManagementRequest(
                UserManagementActionType.GetUsers);

            // 3.) Send Request
            UserManagementResponse response =
                userManagementServices.UserManagementHandleRequest(request);

            // 4.) Handle Response
            List <DCO.Objects.UserAccount> coreUserAccounts = response.UserAccountsRetrieved;

            List <DCU.Objects.UserAccount> clientUserAccounts = new List <DCU.Objects.UserAccount>();

            foreach (DCO.Objects.UserAccount coreUserAccount in coreUserAccounts)
            {
                clientUserAccounts.Add(UserAccountConverter.CovertToClientUserAccount(coreUserAccount));
            }

            // Get the logged in user account that was used by the server
            // when handling the request.
            DCU.Objects.UserAccount clientUserAccountLoggedIn =
                UserAccountConverter.CovertToClientUserAccount(response.RequestorUserAccount);

            UserAccountEventArgs userAccountEventArgs =
                createUserAccountEventArgs(
                    actionType,
                    clientUserAccounts,
                    clientUserAccountLoggedIn,
                    response.ResponseErrorMessage);

            // Broadcast to UserAccountEventArgs that update users was triggered.
            EventBus <UserAccountEventArgs> .Broadcast(
                this,
                userAccountEventArgs);
        }
Пример #8
0
        /// <summary>
        /// Edits a User Account
        /// </summary>
        /// <param name="userAccount">User Account to be edited.</param>
        public void EditUser(DCU.Objects.UserAccount userAccount)
        {
            // 1.) Get Service
            IUserManagementServices userManagementServices =
                ComponentManager.GetComponent <IUserManagementServices>();

            // 2.) Create Request
            UserManagementRequest request = UserManagementHelper.CreateUserManagementRequest(
                UserManagementActionType.EditUser,
                UserAccountConverter.CovertToCoreUserAccount(userAccount));

            // 3.) Send Request
            UserManagementResponse response =
                userManagementServices.UserManagementHandleRequest(request);

            // 4.) Handle Response
            if (response.IsRequestSuccessful)
            {
                // Broadcast to UserAccountEventArgs that add was successful.
                UpdateUsers(UserAccountActionType.EditUser);
            }
            else
            {
                // Get the logged in user account that was used by the server
                // when handling the request.
                DCU.Objects.UserAccount clientUserAccountLoggedIn =
                    UserAccountConverter.CovertToClientUserAccount(response.RequestorUserAccount);

                UserAccountEventArgs userAccountEventArgs =
                    createUserAccountEventArgs(
                        UserAccountActionType.EditUserFailed,
                        null,
                        clientUserAccountLoggedIn,
                        response.ResponseErrorMessage);

                // Broadcast to UserAccountEventArgs that add failed.
                EventBus <UserAccountEventArgs> .Broadcast(
                    this,
                    userAccountEventArgs);
            }
        }
Пример #9
0
        /// <summary>
        /// Unlocks a User.
        /// </summary>
        /// <param name="request">Request object.</param>
        /// <param name="response">Response object.</param>
        /// <returns>Populated Response object.</returns>
        private UserManagementResponse unlock(
            UserManagementRequest request,
            UserManagementResponse response)
        {
            IUserManagementDataServices userManagementDataServices = getUserManagementDataServices();

            DDO.UserAccount retrievedDataUserAccount =
                userManagementDataServices.GetUserById(request.UserAccountToProcess.UserID);

            retrievedDataUserAccount.FailedAttempts = 0;

            userManagementDataServices.EditUser(retrievedDataUserAccount);

            response.IsRequestSuccessful = true;
            response.ResponseMessage     = "User unlocked successfully.";

            Logger.Log("[Unlocked Account] " + request.UserAccountToProcess.ToString(),
                       LogType.Informational);

            return(response);
        }
Пример #10
0
        /// <summary>
        /// Search users.
        /// </summary>
        /// <param name="request">Request object.</param>
        /// <param name="response">Response object.</param>
        /// <returns>Populated Response object.</returns>
        public UserManagementResponse searchUsersByName(
            UserManagementRequest request,
            UserManagementResponse response)
        {
            IUserManagementDataServices userManagementDataServices = getUserManagementDataServices();

            List <DDO.UserAccount> dataUserAccounts = new List <DDO.UserAccount>();

            List <DCO.UserAccount> coreUserAccounts = new List <UserAccount>();

            switch (request.SearchCriteriaEnum)
            {
            case UserInfoSearchCriteriaEnum.FirstName:
                dataUserAccounts = userManagementDataServices.GetUsersByFirstName(request.SearchKeyWord);
                break;

            case UserInfoSearchCriteriaEnum.LastName:
                dataUserAccounts = userManagementDataServices.GetUsersByLastName(request.SearchKeyWord);
                break;
            }

            foreach (DDO.UserAccount dataUserAccount in dataUserAccounts)
            {
                coreUserAccounts.Add(UserAccountConverter.ConvertToCoreUserAccount(dataUserAccount));
            }

            response.UserAccountsRetrieved = coreUserAccounts;
            response.IsRequestSuccessful   = true;

            StringBuilder sbuilder = new StringBuilder();

            sbuilder.Append("[Search Users Success] [Keyword:").Append(request.SearchKeyWord).Append("]")
            .Append("[Criteria:").Append(request.SearchCriteriaEnum.ToString("g")).Append("]")
            .Append("[ResultCount:").Append(coreUserAccounts.Count).Append("]");

            Logger.Log(sbuilder.ToString(),
                       LogType.Informational);

            return(response);
        }
Пример #11
0
        /// <summary>
        /// Creates a UserManagementRequest object.
        /// Automatically gets the logged-in user account and sets it as the requestor.
        /// </summary>
        /// <param name="userManagementActionType">Action Type of the request.</param>
        /// <param name="userAccountToProcess">User Account to process.</param>
        /// <param name="searchKeyWord">Search Keyword (For Searching).</param>
        /// <param name="userInfoSearchCriteria">Search Criteria (For Searching).</param>
        /// <returns>Populated UserManagement Request.</returns>
        public static DCO.Objects.Request.UserManagementRequest CreateUserManagementRequest(
            DCO.Enums.UserManagementActionType userManagementActionType,
            DCO.Objects.UserAccount userAccountToProcess = null,
            string searchKeyWord = "",
            DCO.Enums.UserInfoSearchCriteriaEnum userInfoSearchCriteria = DCO.Enums.UserInfoSearchCriteriaEnum.FirstName)
        {
            UserManagementRequest request = new UserManagementRequest();

            request.UserManagementActionType = userManagementActionType;
            request.RequestorUserAccount     = getCurrentlyLoggedInUserAccount();

            if (userAccountToProcess == null)
            {
                userAccountToProcess = new DCO.Objects.UserAccount();
            }
            request.UserAccountToProcess = userAccountToProcess;

            request.SearchKeyWord      = searchKeyWord;
            request.SearchCriteriaEnum = userInfoSearchCriteria;

            return(request);
        }
Пример #12
0
        /// <summary>
        /// Gets all the Users.
        /// </summary>
        /// <param name="request">Request object.</param>
        /// <param name="response">Response object.</param>
        /// <returns>Populated response object.</returns>
        public UserManagementResponse getUsers(
            UserManagementRequest request,
            UserManagementResponse response)
        {
            IUserManagementDataServices userManagementDataServices = getUserManagementDataServices();

            List <DDO.UserAccount> dataUserAccounts = userManagementDataServices.GetUsers();

            List <DCO.UserAccount> coreUserAccounts = new List <UserAccount>();

            foreach (DDO.UserAccount dataUserAccount in dataUserAccounts)
            {
                coreUserAccounts.Add(UserAccountConverter.ConvertToCoreUserAccount(dataUserAccount));
            }

            response.UserAccountsRetrieved = coreUserAccounts;

            Logger.Log("[Get Users Success] Total User Accounts Retrieved: " + coreUserAccounts.Count,
                       LogType.Informational);

            return(response);
        }
Пример #13
0
        /// <summary>
        /// Edits a User.
        /// </summary>
        /// <param name="request">Request object.</param>
        /// <param name="response">Response object.</param>
        /// <returns>Populated Response object.</returns>
        public UserManagementResponse editUser(
            UserManagementRequest request,
            UserManagementResponse response)
        {
            IUserManagementDataServices userManagementDataServices = getUserManagementDataServices();

            if (request.RequestorUserAccount.UserID == request.UserAccountToProcess.UserID)
            {
                response.IsRequestSuccessful  = false;
                response.ResponseErrorMessage = "The currently logged in user cannot edit itself.";
                return(response);
            }

            // Check Username given.
            if (string.IsNullOrEmpty(request.UserAccountToProcess.Username))
            {
                Logger.Log("[Edit User Failed] Empty Username",
                           LogType.Warning);

                response.IsRequestSuccessful  = false;
                response.ResponseErrorMessage = "Username should not be empty. ";

                return(response);
            }

            // Check if Username already exists
            DDO.UserAccount dataUserAccount =
                userManagementDataServices.GetUserByUsername(request.UserAccountToProcess.Username);

            if (dataUserAccount != null)
            {
                var coreUserAccount = UserAccountConverter.ConvertToCoreUserAccount(dataUserAccount);

                if (coreUserAccount.Username == request.UserAccountToProcess.Username &&
                    coreUserAccount.UserID != request.UserAccountToProcess.UserID)
                {
                    Logger.Log("[Edit User Failed] Username already exists.",
                               LogType.Warning);

                    response.IsRequestSuccessful  = false;
                    response.ResponseErrorMessage = "Username already taken. Username should be unique. ";

                    return(response);
                }
            }


            // Check Name given.
            if (!ValidationHelper.CheckIfNameIsValid(request.UserAccountToProcess.UserInfo.FirstName) ||
                !ValidationHelper.CheckIfNameIsValid(request.UserAccountToProcess.UserInfo.LastName))
            {
                Logger.Log("[Edit User Failed] Invalid Names",
                           LogType.Warning);

                response.IsRequestSuccessful  = false;
                response.ResponseErrorMessage = "Names should only be composed of letter, spaces, and should not be empty. ";

                return(response);
            }

            request.UserAccountToProcess.UserInfo.Age =
                UserManagementHelper.CalculateAge(request.UserAccountToProcess.UserInfo.BirthDate);

            dataUserAccount = UserAccountConverter.ConvertToDataUserAccount(request.UserAccountToProcess);

            response.IsRequestSuccessful = userManagementDataServices.EditUser(dataUserAccount);

            if (response.IsRequestSuccessful)
            {
                Logger.Log("[Edit User Successful] " + request.UserAccountToProcess.ToString(),
                           LogType.Informational);
            }
            else
            {
                Logger.Log("[Edit User Failed]",
                           LogType.Warning);
                response.ResponseErrorMessage = "Problem encountered while editing a user.";
            }

            return(response);
        }