/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }