Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        // 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);
        }
Exemplo n.º 4
0
        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 }));
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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));
        }
Exemplo n.º 7
0
        public async Task <string> RecoverAccount(S4Identity s4id)
        {
            Agency agency = await GetAgencyDetails(s4id.user_name);

            return(await _email.AccountRecovery(agency));
        }