Beispiel #1
0
        public async Task <ExternalAuthenticateResultModel> ExternalAuthenticate([FromBody] ExternalAuthenticateModel model)
        {
            var externalUser = await GetExternalUserInfo(model);

            var loginResult = await logInManager.LoginAsync(new UserLoginInfo(model.AuthProvider, model.ProviderKey, model.AuthProvider), GetTenancyNameOrNull());

            switch (loginResult.Result)
            {
            case StudioXLoginResultType.Success:
            {
                var accessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity));
                return(new ExternalAuthenticateResultModel
                    {
                        AccessToken = accessToken,
                        EncryptedAccessToken = GetEncrpyedAccessToken(accessToken),
                        ExpireInSeconds = (int)configuration.Expiration.TotalSeconds
                    });
            }

            case StudioXLoginResultType.UnknownExternalLogin:
            {
                var newUser = await RegisterExternalUserAsync(externalUser);

                if (!newUser.IsActive)
                {
                    return(new ExternalAuthenticateResultModel
                        {
                            WaitingForActivation = true
                        });
                }

                //Try to login again with newly registered user!
                loginResult = await logInManager.LoginAsync(new UserLoginInfo(model.AuthProvider, model.ProviderKey, model.AuthProvider), GetTenancyNameOrNull());

                if (loginResult.Result != StudioXLoginResultType.Success)
                {
                    throw studioXLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(
                              loginResult.Result,
                              model.ProviderKey,
                              GetTenancyNameOrNull()
                              );
                }

                return(new ExternalAuthenticateResultModel
                    {
                        AccessToken = CreateAccessToken(CreateJwtClaims(loginResult.Identity)),
                        ExpireInSeconds = (int)configuration.Expiration.TotalSeconds
                    });
            }

            default:
            {
                throw studioXLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(
                          loginResult.Result,
                          model.ProviderKey,
                          GetTenancyNameOrNull()
                          );
            }
            }
        }
Beispiel #2
0
        private async Task <StudioXLoginResult <Tenant, User> > GetLoginResultAsync(string usernameOrEmailAddress, string password, string tenancyName)
        {
            var loginResult = await logInManager.LoginAsync(usernameOrEmailAddress, password, tenancyName);

            switch (loginResult.Result)
            {
            case StudioXLoginResultType.Success:
                return(loginResult);

            default:
                throw studioXLoginResultTypeHelper.CreateExceptionForFailedLoginAttempt(loginResult.Result, usernameOrEmailAddress, tenancyName);
            }
        }