public async Task <IActionResult> Register([FromBody] AgencyRequest requested) { IdentityResult registration_attempt = await _agency.ClaimAgencyAsync(requested); if (registration_attempt != IdentityResult.Success) { return(BadRequest(registration_attempt)); } S4Identity agency = await _user_manager.FindByEmailAsync(requested.email); if (agency == null) { return(BadRequest("error locating new account")); } var signin_result = await _signin_manager.PasswordSignInAsync( agency, requested.password, false, false); if (signin_result == Microsoft.AspNetCore.Identity.SignInResult.Failed) { return(BadRequest(signin_result)); } return(new OkObjectResult(registration_attempt)); }
private bool AddAgencyDetails(AgencyRequest agency, S4Identity account) { var _query = $@" UPDATE agency_account SET contact_email = @email, contact_first_name = @first, contact_last_name = @last, s4_id = @s4_id WHERE agency = @agency"; var _params = new { agency = agency.agency, email = agency.email, first = agency.first_name, last = agency.last_name, s4_id = account.s4_id, }; using (var conn = new NpgsqlConnection(_conn)) { var result = conn.Execute(_query, _params); return(result == 1); } }
// Agency Registration Process public async Task <IdentityResult> ClaimAgencyAsync(AgencyRequest dhsmv) { if (AlreadyOnboard(dhsmv.agency)) // check that agency has an active account { // Account is active already send to login var msg = "This agency has already completed the onboarding process"; IdentityError error = BuildError(msg); return(IdentityResult.Failed(error)); } if (IsInProgress(dhsmv.agency, dhsmv.email)) // check that agency has an active account { // agency has registered s4sales identity // but not clicked the onboarded with stripe button and NOW is attempting to re-register with // a different email address var msg = "This agency has already begun onboarding with a different email"; IdentityError error = BuildError(msg); return(IdentityResult.Failed(error)); } int agencyId = await GetAgencyId(dhsmv.agency); S4LookupNormalizer normalizer = new S4LookupNormalizer(); S4Identity agency = new S4Identity(agencyId.ToString()) { email = dhsmv.email, normalized_user_name = normalizer.Normalize(agencyId.ToString()), normalized_email = normalizer.Normalize(dhsmv.email) }; IdentityResult creating = await _user_manager.CreateAsync(agency, dhsmv.password); if (creating != IdentityResult.Success) { var msg = "Error claiming agency"; IdentityError error = BuildError(msg); return(IdentityResult.Failed(error)); } IList <string> roles = new List <string>(); // add roles to account roles.Add("agency"); foreach (var role in roles) // in case accounts ever need multiple roles { await _user_manager.AddToRoleAsync(agency, role); } if (!AddAgencyDetails(dhsmv, agency)) // writes details to agency table { var msg = "Error adding the agency details"; IdentityError error = BuildError(msg); return(IdentityResult.Failed(error)); } return(IdentityResult.Success); }
public async Task <IActionResult> RecoverAccount([FromBody] string email) { S4Identity agency = await _user_manager.FindByEmailAsync(email); if (agency == null) { return(BadRequest("no agency associated with this email")); } var recovery = await _agency.RecoverAccount(agency); if (recovery != "sent") { return(BadRequest("recovery attempt failure")); } return(new OkObjectResult(new { message = recovery })); }
public async Task <IActionResult> GetCurrentUser() { S4Identity user = await _user_manager.GetUserAsync(User); if (user == null) { return(new ObjectResult(new { user = false })); } Agency details = await _agency.GetAgencyDetails(user.user_name); var result = new { user = true, name = user.user_name, roles = await _user_manager.GetRolesAsync(user), details = details }; return(new ObjectResult(result)); }
public async Task <IActionResult> Login([FromBody] Credentials attempted) { const string FailureMessage = "Username or password is incorrect."; int username = await _agency.GetAgencyId(attempted.agency_name); S4Identity user = await _user_manager.FindByNameAsync(username.ToString()); if (user == null) { return(BadRequest(FailureMessage)); } var signin_result = await _signin_manager.PasswordSignInAsync( user, attempted.password, false, false); if (signin_result != Microsoft.AspNetCore.Identity.SignInResult.Success) { // sign out in case they had logged in successfully prior to this failed attempt await _signin_manager.SignOutAsync(); return(BadRequest(FailureMessage)); } return(new ObjectResult(signin_result)); }
public async Task <string> RecoverAccount(S4Identity s4id) { Agency agency = await GetAgencyDetails(s4id.user_name); return(await _email.AccountRecovery(agency)); }