Exemple #1
0
        /// <summary>
        /// Sign-in flow implementation
        /// </summary>
        /// <param name="httpContext">The HTTP Context</param>
        /// <param name="input">The sign-in input</param>
        /// <returns></returns>
        public async Task <SignInFlowResult> SignIn(HttpContext httpContext, SignInFlowInput input)
        {
            // gets the authorization context by the return URL (authorize callback URL)
            var context = await this.identityInteraction.GetAuthorizationContextAsync(input.ReturnUrl);

            // get the user by given email and password
            var validUser = await this.userService.EvaluateCredentials(input.Email, input.Password);

            // check if something went wrong while signin-in
            if (validUser.Errors.Count > 0 || validUser.Value == null)
            {
                await this.userService.SignInFailed(input.Email);

                throw new ShocException(validUser.Errors);
            }

            // get user from result
            var user = validUser.Value;

            // the users email is not verified report early
            if (!user.EmailVerified)
            {
                throw ErrorDefinition.Validation(IdentityErrors.UNVERIFIED_EMAIL).AsException();
            }

            // do actual sign-in with given scheme
            await this.SignInImpl(httpContext, new SignInPrincipal
            {
                Subject     = user.Id,
                Email       = user.Email,
                DisplayName = validUser.Value.FullName,
                Provider    = IdentityProviders.LOCAL,
            });

            // the sign-in result
            return(new SignInFlowResult
            {
                Subject = validUser.Value.Id,
                ReturnUrl = input.ReturnUrl.IsBlank() || context == null ? "/" : input.ReturnUrl,
                ContinueFlow = context != null
            });
        }
Exemple #2
0
 public Task <SignInFlowResult> SignInFlow(SignInFlowInput input)
 {
     return(this.authService.SignIn(this.HttpContext, input));
 }