public AuthorizeState(string returnUrl, AuthorizationResult authorizationResult) : this(returnUrl, authorizationResult.Status) { Errors = authorizationResult.Errors; }
public virtual AuthorizationResult Authorize(OpenAuthenticationParameters parameters) { var userFound = _openAuthenticationService.GetUser(parameters); var userLoggedIn = _currentActivity.CurrentAccount.IsRegistered() ? _currentActivity.CurrentAccount : null; if (AccountAlreadyExists(userFound, userLoggedIn)) { if (AccountIsAssignedToLoggedOnAccount(userFound, userLoggedIn)) { // The person is trying to log in as himself.. bit weird return new AuthorizationResult(OpenAuthenticationStatus.Authenticated); } var result = new AuthorizationResult(OpenAuthenticationStatus.Error); result.AddError("Account is already assigned"); return result; } if (AccountDoesNotExistAndUserIsNotLoggedOn(userFound, userLoggedIn)) { ExternalAuthorizerHelper.StoreParametersForRoundTrip(parameters); if (AutoRegistrationIsEnabled()) { #region Register user var currentAccount = _currentActivity.CurrentAccount; var details = new RegistrationDetails(parameters); var randomPassword = CommonHelper.GenerateRandomDigitCode(20); bool isApproved = _accountSettings.UserRegistrationType == UserRegistrationType.Standard; var registrationRequest = new AccountRegistrationRequest(currentAccount, details.EmailAddress, _accountSettings.UsernamesEnabled ? details.UserName : details.EmailAddress, randomPassword, PasswordFormat.Clear, isApproved); var registrationResult = _accountRegistrationService.RegisterAccount(registrationRequest); if (registrationResult.Success) { //store other parameters (form fields) if (!String.IsNullOrEmpty(details.FirstName)) _genericAttributeService.SaveAttribute(currentAccount, SystemAttributeNames.FirstName, details.FirstName); if (!String.IsNullOrEmpty(details.LastName)) _genericAttributeService.SaveAttribute(currentAccount, SystemAttributeNames.LastName, details.LastName); userFound = currentAccount; _openAuthenticationService.AssociateExternalAccountWithUser(currentAccount, parameters); ExternalAuthorizerHelper.RemoveParameters(); //code below is copied from AccountController.Register method //authenticate if (isApproved) _authenticationService.SignIn(userFound ?? userLoggedIn, false); //notifications if (_accountSettings.NotifyNewRegistration) _workflowMessageService.SendAccountRegisteredNotificationMessage(currentAccount, _localizationSettings.DefaultAdminLanguageId); switch (_accountSettings.UserRegistrationType) { case UserRegistrationType.EmailValidation: { //email validation message _genericAttributeService.SaveAttribute(currentAccount, SystemAttributeNames.AccountActivationToken, Guid.NewGuid().ToString()); _workflowMessageService.SendAccountEmailValidationMessage(currentAccount, _currentActivity.CurrentLanguage.Id); //result return new AuthorizationResult(OpenAuthenticationStatus.AutoRegisteredEmailValidation); } case UserRegistrationType.AdminApproval: { //result return new AuthorizationResult(OpenAuthenticationStatus.AutoRegisteredAdminApproval); } case UserRegistrationType.Standard: { //send account welcome message _workflowMessageService.SendAccountWelcomeMessage(currentAccount, _currentActivity.CurrentLanguage.Id); //result return new AuthorizationResult(OpenAuthenticationStatus.AutoRegisteredStandard); } default: break; } } else { ExternalAuthorizerHelper.RemoveParameters(); var result = new AuthorizationResult(OpenAuthenticationStatus.Error); foreach (var error in registrationResult.Errors) result.AddError(string.Format(error)); return result; } #endregion } else if (RegistrationIsEnabled()) { return new AuthorizationResult(OpenAuthenticationStatus.AssociateOnLogon); } else { ExternalAuthorizerHelper.RemoveParameters(); var result = new AuthorizationResult(OpenAuthenticationStatus.Error); result.AddError("Registration is disabled"); return result; } } if (userFound == null) { _openAuthenticationService.AssociateExternalAccountWithUser(userLoggedIn, parameters); } //authenticate _authenticationService.SignIn(userFound ?? userLoggedIn, false); return new AuthorizationResult(OpenAuthenticationStatus.Authenticated); }