public async Task <IHttpActionResult> Reset(AccountEmailReset model) { var user = await AppDatabase.Users.FirstOrDefaultAsync(o => o.Email == model.Email); if (user == null) { return(BadRequest("User not found")); } if (string.IsNullOrEmpty(user.Email)) { return(BadRequest("User lacks a valid email address. Did you use Facebook or Twilio ?")); } var token = Strings.RandomString(6).ToLower(); user.ModifiedOn = DateTime.UtcNow; user.EmailPassword = UserPassword.Create(token); AppDatabase.Entry(user).State = EntityState.Modified; await AppDatabase.SaveChangesAsync(); await SendTokenEmail(new UserTokenViewModel { UserId = user.Id, UserEmail = user.Email, Token = token, }); return(Ok(GetAccountDetails())); }
public ActionResult CreateUser(UserModal user) { Result <UserCpf> cpf = UserCpf.Create(user.cpf); Result <UserPassword> password = UserPassword.Create(user.password); Result <UserCardNumber> cardNumber = UserCardNumber.Create(user.cardNumber); Result <UserCardDigits> cardDigits = UserCardDigits.Create(user.cardDigits); Result <UserCardDate> cardDate = UserCardDate.Create(user.cardDate); Result result = Result.Combine(cpf, password, cardDate, cardDigits, cardNumber); if (result.IsNotSuccess) { return(new BadRequestObjectResult(result.Error)); } User newUser = new User(cpf.Value, cardDate.Value, cardDigits.Value, cardNumber.Value, password.Value); var createUserOperation = _userService.CreateUser(newUser); if (createUserOperation.IsNotSuccess) { return(new BadRequestObjectResult(createUserOperation.Error)); } return(new OkResult()); }
public void should_create_new_user_if_the_user_does_not_exist() { var dbClient = new UserDatabaseManager(); var testUser = new User( UserCpf.Create("123456789").Value, UserCardDate.Create("2020-02-01").Value, UserCardDigits.Create("123").Value, UserCardNumber.Create("0123456789").Value, UserPassword.Create("adminpassword").Value); var fileContent = new FileContent(new string[] { "222222222;password;01/04/2021;444;0123456789;" }, "file"); Maybe <FileOperation> operation = dbClient.AddUser(fileContent, testUser); Assert.True(operation.HasValue); if (operation.HasValue) { Assert.Equal(OperationType.WRITE, operation.Value.Type); Assert.Equal(new[] { "222222222;password;01/04/2021;444;0123456789", "123456789;adminpassword;01/02/2020;123;0123456789" }, operation.Value.Content); Assert.Equal("file", operation.Value.FileName); } }
public void should_return_null_if_creating_already_existing_user() { var dbClient = new UserDatabaseManager(); var testUser = new User( UserCpf.Create("123456789").Value, UserCardDate.Create("2020-02-01").Value, UserCardDigits.Create("123").Value, UserCardNumber.Create("0123456789").Value, UserPassword.Create("adminpassword").Value); var fileContent = new FileContent(new string[] { "222222222;password;01/04/2021;444;0123456789;", "123456789;adminpassword;01/02/2020;123;0123456789" }, "file"); Maybe <FileOperation> operation = dbClient.AddUser(fileContent, testUser); Assert.True(operation.HasNoValue); }
async Task <IHttpActionResult> Create(AccountEmailSignIn model) { if (string.IsNullOrEmpty(model.UserId)) { model.UserId = Guid.NewGuid().ToString(); } if (await AppDatabase.Users.AnyAsync(o => o.Id == model.UserId)) { return(BadRequest("UserId is in use.")); } if (await AppDatabase.Users.AnyAsync(o => o.Email == model.Email)) { return(BadRequest("Email is in use.")); } var user = new UserAccount { Email = model.Email, Id = model.UserId, CreatedOn = DateTime.UtcNow, ModifiedOn = DateTime.UtcNow, EmailPassword = UserPassword.Create(model.Password), PhonePassword = UserPassword.Create(model.Password), }; AppDatabase.Users.Add(user); await AppDatabase.SaveChangesAsync(); await SendWelcomeMail(new UserEmailViewModel { UserId = user.Id, UserEmail = user.Email }); //Sign In Authorization.UpdateFrom(user); Session.UpdateFrom(user); return(Ok(GetAccountDetails())); }
public async Task <IHttpActionResult> FacebookCreate(AccountFacebookConnect model) { var client = new FacebookClient(model.AccessToken); client.AppId = AppConfig.Settings.FacebookId; client.AppSecret = AppConfig.Settings.FacebookSecret; dynamic fbresult = client.Get("me?fields=id,email,first_name,last_name,gender,locale,link,timezone,location,picture"); string email = fbresult.email; var social = await AppDatabase.UserFacebookClaims.FindAsync(fbresult.id); if (social != null) { // old profile FacebookUpdateInternal(social, fbresult); await AppDatabase.SaveChangesAsync(); var oldUser = social.User; Session.UpdateFrom(oldUser); return(Ok(GetAccountDetails())); } //email in use ? var user3 = await AppDatabase.Users.FirstOrDefaultAsync(o => o.Email == email); if (user3 != null) { return(BadRequest("Email is in use. Try account recovery.")); } // new user var password = new string(Guid.NewGuid().ToString().Take(7).ToArray()); var user = new UserAccount { CreatedOn = DateTime.UtcNow, ModifiedOn = DateTime.UtcNow, Email = email, Id = Guid.NewGuid().ToString(), EmailPassword = UserPassword.Create(password), }; AppDatabase.Users.Add(user); social = new UserFacebookClaim { Id = fbresult.id, UserId = user.Id, User = user, AccessToken = model.AccessToken }; FacebookUpdateInternal(social, fbresult); AppDatabase.UserFacebookClaims.Add(social); await SendWelcomeMail(new UserEmailViewModel { UserId = user.Id, UserEmail = user.Email }); await AppDatabase.SaveChangesAsync(); Session.UpdateFrom(user); return(Ok(GetAccountDetails())); }
public async Task <IHttpActionResult> Update(AccountEmailUpdate model) { var user = await AppDatabase.Users.FindAsync(Session.UserId); // no user? signUp. This happens from guest upgrades. if (user == null) { return(await Create(new AccountEmailSignIn { UserId = Session.UserId, Email = model.NewEmail, Password = model.NewPassword })); } // make sure Email is not in use by someone else string oldEmail = null; if (!string.IsNullOrEmpty(model.NewEmail)) { var users = await AppDatabase.Users .Where(o => o.Id != Session.UserId) .AnyAsync(o => o.Email == model.NewEmail); if (users) { return(BadRequest("Email is in use.")); } oldEmail = user.Email; user.Email = model.NewEmail; } // update password if (!string.IsNullOrEmpty(model.NewPassword)) { user.EmailPassword = UserPassword.Create(model.NewPassword); } // update password if (!string.IsNullOrEmpty(model.NewEmail)) { user.Email = model.NewEmail; } // update user.ModifiedOn = DateTime.UtcNow; AppDatabase.Entry(user).State = EntityState.Modified; await AppDatabase.SaveChangesAsync(); await SendUpdateEmail(new UserUpdateViewModel { UserId = user.Id, UserEmail = user.Email, OldEmail = oldEmail, }); //update session Session.UpdateFrom(user); Authorization.UpdateFrom(user); return(Ok(GetAccountDetails())); }