/// <summary> /// Save or update the list of records /// </summary> /// <param name="request">the request containing the entities</param> /// <returns></returns> public JarsUserResponse Any(StoreJarsUser request) { return(ExecuteFaultHandledMethod(() => { IAuthRepository ssAuthRepo = ServiceStackHost.Instance.GetAuthRepository(); IUserAuth ssUser = ssAuthRepo.GetUserAuthByUserName(request.UserAccount.UserName); if (ssUser == null && request.UserAccount.Id != 0) { throw HttpError.NotFound(request.UserAccount.UserName); } UserAuth newUserA = new UserAuth(); if (request.UserAccount.Id == 0) { newUserA.PopulateWith(request.UserAccount); newUserA.LockedDate = DateTime.UtcNow; newUserA.RecoveryToken = Guid.NewGuid().ToString("N"); ssUser = ssAuthRepo.CreateUserAuth(newUserA, "Password123"); //sendemailtouser } else { newUserA.PopulateWith(ssUser); newUserA.PopulateWith(request.UserAccount); ssAuthRepo.UpdateUserAuth(ssUser, newUserA); } //so the user should be updated here.. IJarsUserRepository repository = _DataRepositoryFactory.GetDataRepository <IJarsUserRepository>(); JarsUserResponse response = new JarsUserResponse(); if (request.UserAccount != null) { JarsUser dbUser = new JarsUser(); if (request.UserAccount.Id != 0) { dbUser = repository.GetById(request.UserAccount.Id, true); } else { dbUser.IsActive = false; } dbUser.PopulateWith(ssUser); dbUser.Id = request.UserAccount.Id; dbUser.Settings = request.UserAccount.Settings.ConvertAllTo <JarsSetting>().ToList(); dbUser = repository.CreateUpdate(dbUser, CurrentSessionUsername); response.UserAccount = dbUser.ConvertTo <JarsUserDto>(); } //else // response.UserAccounts = repository.CreateUpdateList(request.UserAccounts).ToList(); return response; })); }
//this is the only request that does not require admin role public JarsUserResponse Any(GetJarsUser request) { if (request.EmailOrUserName.IsNullOrEmpty()) { return(null); } var sessionUserName = Request.GetSession().UserName; var sessionUserEmail = Request.GetSession().Email; IAuthRepository ssAuthRepo = ServiceStackHost.Instance.GetAuthRepository(); IUserAuth ssUser = ssAuthRepo.GetUserAuthByUserName(request.EmailOrUserName); if (ssUser == null) { throw HttpError.NotFound("User not found"); } if (ssUser.LockedDate != null) { throw HttpError.Unauthorized("User account locked"); } if (ssUser.Roles.Count == 0 || ssUser.Permissions.Count == 0) { IUserAuth newUserA = new UserAuth(); newUserA.PopulateWith(ssUser); if (ssUser.Roles.Count == 0) { newUserA.Roles.Add("Guest"); } if (ssUser.Permissions.Count == 0) { newUserA.Permissions.Add("ViewOnly"); } ssUser = ssAuthRepo.UpdateUserAuth(ssUser, newUserA); } IJarsUserRepository repository = _DataRepositoryFactory.GetDataRepository <IJarsUserRepository>(); JarsUser acc = repository.Where(u => u.UserName == ssUser.UserName || u.Email == ssUser.Email, request.FetchEagerly).SingleOrDefault(); if (acc == null) { acc = ssUser.ConvertTo <JarsUser>(); acc.Id = 0; acc = repository.CreateUpdate(acc, sessionUserName); } else { //we have to change the id because the 2 tables differ and id's wont match. int accId = acc.Id; acc.PopulateWith(ssUser); acc.Id = accId; acc = repository.CreateUpdate(acc, sessionUserName); } JarsUserResponse response = new JarsUserResponse { UserAccount = acc.ConvertTo <JarsUserDto>() }; //response.jarsUserAccount = FakeDataHelper.FakeUserAccount; return(response); }