public async Task <bool> Handle(UpdateCustomerInfoCommand request, CancellationToken cancellationToken) { //username if (_customerSettings.UsernamesEnabled && _customerSettings.AllowUsersToChangeUsernames) { if (!request.Customer.Username.Equals(request.Model.Username.Trim(), StringComparison.OrdinalIgnoreCase)) { //change username await _customerRegistrationService.SetUsername(request.Customer, request.Model.Username.Trim()); //re-authenticate if (request.OriginalCustomerIfImpersonated == null) { await _authenticationService.SignIn(request.Customer, true); } } } //email if (!request.Customer.Email.Equals(request.Model.Email.Trim(), StringComparison.OrdinalIgnoreCase)) { //change email await _customerRegistrationService.SetEmail(request.Customer, request.Model.Email.Trim()); //re-authenticate (if usernames are disabled) //do not authenticate users in impersonation mode if (request.OriginalCustomerIfImpersonated == null) { //re-authenticate (if usernames are disabled) if (!_customerSettings.UsernamesEnabled) { await _authenticationService.SignIn(request.Customer, true); } } } //VAT number if (_taxSettings.EuVatEnabled) { await UpdateTax(request); } //form fields await UpdateFormFields(request); //newsletter if (_customerSettings.NewsletterEnabled) { await UpdateNewsletter(request); } if (_forumSettings.ForumsEnabled && _forumSettings.SignaturesEnabled) { await _genericAttributeService.SaveAttribute(request.Customer, SystemCustomerAttributeNames.Signature, request.Model.Signature); } //save customer attributes await _genericAttributeService.SaveAttribute(request.Customer, SystemCustomerAttributeNames.CustomCustomerAttributes, request.CustomerAttributesXml); return(true); }
public async Task <bool> Handle(UpdateCustomerInfoCommand request, CancellationToken cancellationToken) { //username if (_customerSettings.UsernamesEnabled && _customerSettings.AllowUsersToChangeUsernames) { if (!request.Customer.Username.Equals(request.Model.Username.Trim(), StringComparison.OrdinalIgnoreCase)) { //change username await _customerManagerService.SetUsername(request.Customer, request.Model.Username.Trim()); //re-authenticate if (request.OriginalCustomerIfImpersonated == null) { await _authenticationService.SignIn(request.Customer, true); } } } //email if (!request.Customer.Email.Equals(request.Model.Email.Trim(), StringComparison.OrdinalIgnoreCase) && _customerSettings.AllowUsersToChangeEmail) { //change email await _customerManagerService.SetEmail(request.Customer, request.Model.Email.Trim()); //re-authenticate (if usernames are disabled) //do not authenticate users in impersonation mode if (request.OriginalCustomerIfImpersonated == null) { //re-authenticate (if usernames are disabled) if (!_customerSettings.UsernamesEnabled) { await _authenticationService.SignIn(request.Customer, true); } } } //VAT number if (_taxSettings.EuVatEnabled) { await UpdateTax(request); } //form fields await UpdateUserFieldFields(request); //newsletter if (_customerSettings.NewsletterEnabled) { await UpdateNewsletter(request); } //save customer attributes await _customerService.UpdateCustomerField(request.Customer, x => x.Attributes, request.CustomerAttributes); //notification await _mediator.Publish(new CustomerInfoEvent(request.Customer, request.Model, request.Form, request.CustomerAttributes)); return(true); }
/// <summary> /// Register new user /// </summary> /// <param name="parameters">Authentication parameters received from external authentication method</param> /// <param name="returnUrl">URL to which the user will return after authentication</param> /// <returns>Result of an authentication</returns> protected virtual async Task <IActionResult> RegisterNewUser(ExternalAuthParam parameters, string returnUrl) { var approved = _customerSettings.UserRegistrationType == UserRegistrationType.Standard || _customerSettings.UserRegistrationType == UserRegistrationType.EmailValidation; //create registration request var registrationRequest = new RegistrationRequest(_workContext.CurrentCustomer, parameters.Email, parameters.Email, CommonHelper.GenerateRandomDigitCode(20), PasswordFormat.Hashed, _workContext.CurrentStore.Id, approved); //whether registration request has been completed successfully var registrationResult = await _customerManagerService.RegisterCustomer(registrationRequest); if (!registrationResult.Success) { return(Error(registrationResult.Errors)); } //allow to save other customer values by consuming this event await _mediator.Publish(new RegisteredByExternalMethodEventHandler(_workContext.CurrentCustomer, parameters, registrationResult)); //raise vustomer registered event await _mediator.Publish(new CustomerRegisteredEvent(_workContext.CurrentCustomer)); //associate external account with registered user await AssociateCustomer(_workContext.CurrentCustomer, parameters); //authenticate if (approved) { await _authenticationService.SignIn(_workContext.CurrentCustomer, false); return(new RedirectToRouteResult("RegisterResult", new { resultId = (int)UserRegistrationType.Standard })); } //registration is succeeded but isn't approved by admin if (_customerSettings.UserRegistrationType == UserRegistrationType.AdminApproval) { return(new RedirectToRouteResult("RegisterResult", new { resultId = (int)UserRegistrationType.AdminApproval })); } return(Error(new[] { "Error on registration" })); }
protected async Task <IActionResult> SignInAction(Customer customer, bool createPersistent) { //sign in new customer await _authenticationService.SignIn(customer, createPersistent); //raise event await _mediator.Publish(new CustomerLoggedInEvent(customer)); return(RedirectToRoute("AdminIndex", new RouteValueDictionary())); }
/// <summary> /// Register new user /// </summary> /// <param name="parameters">Authentication parameters received from external authentication method</param> /// <param name="returnUrl">URL to which the user will return after authentication</param> /// <returns>Result of an authentication</returns> protected virtual IActionResult RegisterNewUser(ExternalAuthenticationParameters parameters, string returnUrl) { //if auto registration is disabled redirect to login page //TODO remove this setting if (!_externalAuthenticationSettings.AutoRegisterEnabled) { ExternalAuthorizerHelper.StoreParametersForRoundTrip(parameters); return(new RedirectToActionResult("Login", "Customer", !string.IsNullOrEmpty(returnUrl) ? new { ReturnUrl = returnUrl } : null)); } //or try to auto register new user //registration is approved if validation isn't required var registrationIsApproved = _customerSettings.UserRegistrationType == UserRegistrationType.Standard || (_customerSettings.UserRegistrationType == UserRegistrationType.EmailValidation && !_externalAuthenticationSettings.RequireEmailValidation); //create registration request var registrationRequest = new CustomerRegistrationRequest(_workContext.CurrentCustomer, parameters.Email, parameters.Email, CommonHelper.GenerateRandomDigitCode(20), PasswordFormat.Hashed, _storeContext.CurrentStore.Id, registrationIsApproved); //whether registration request has been completed successfully var registrationResult = _customerRegistrationService.RegisterCustomer(registrationRequest); if (!registrationResult.Success) { return(Error(registrationResult.Errors, returnUrl)); } //allow to save other customer values by consuming this event _eventPublisher.Publish(new CustomerAutoRegisteredByExternalMethodEvent(_workContext.CurrentCustomer, parameters)); //raise vustomer registered event _eventPublisher.Publish(new CustomerRegisteredEvent(_workContext.CurrentCustomer)); //store owner notifications if (_customerSettings.NotifyNewCustomerRegistration) { _workflowMessageService.SendCustomerRegisteredNotificationMessage(_workContext.CurrentCustomer, _localizationSettings.DefaultAdminLanguageId); } //associate external account with registered user AssociateExternalAccountWithUser(_workContext.CurrentCustomer, parameters); //authenticate if (registrationIsApproved) { _authenticationService.SignIn(_workContext.CurrentCustomer, false); _workflowMessageService.SendCustomerWelcomeMessage(_workContext.CurrentCustomer, _workContext.WorkingLanguage.Id); return(new RedirectToRouteResult("RegisterResult", new { resultId = (int)UserRegistrationType.Standard })); } //registration is succeeded but isn't activated if (_customerSettings.UserRegistrationType == UserRegistrationType.EmailValidation) { //email validation message _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.AccountActivationToken, Guid.NewGuid().ToString()); _workflowMessageService.SendCustomerEmailValidationMessage(_workContext.CurrentCustomer, _workContext.WorkingLanguage.Id); return(new RedirectToRouteResult("RegisterResult", new { resultId = (int)UserRegistrationType.EmailValidation })); } //registration is succeeded but isn't approved by admin if (_customerSettings.UserRegistrationType == UserRegistrationType.AdminApproval) { return(new RedirectToRouteResult("RegisterResult", new { resultId = (int)UserRegistrationType.AdminApproval })); } //TODO create locale for error return(Error(new[] { "Error on registration" }, returnUrl)); }
/// <summary> /// Register new user /// </summary> /// <param name="parameters">Authentication parameters received from external authentication method</param> /// <param name="returnUrl">URL to which the user will return after authentication</param> /// <returns>Result of an authentication</returns> protected virtual async Task <IActionResult> RegisterNewUser(ExternalAuthenticationParameters parameters, string returnUrl) { //or try to auto register new user //registration is approved if validation isn't required var registrationIsApproved = _customerSettings.UserRegistrationType == UserRegistrationType.Standard || (_customerSettings.UserRegistrationType == UserRegistrationType.EmailValidation); //create registration request var registrationRequest = new CustomerRegistrationRequest(_workContext.CurrentCustomer, parameters.Email, parameters.Email, CommonHelper.GenerateRandomDigitCode(20), PasswordFormat.Hashed, _storeContext.CurrentStore.Id, registrationIsApproved); //whether registration request has been completed successfully var registrationResult = await _customerRegistrationService.RegisterCustomer(registrationRequest); if (!registrationResult.Success) { return(Error(registrationResult.Errors)); } //allow to save other customer values by consuming this event await _mediator.Publish(new CustomerAutoRegisteredByExternalMethodEvent(_workContext.CurrentCustomer, parameters)); //raise vustomer registered event await _mediator.Publish(new CustomerRegisteredEvent(_workContext.CurrentCustomer)); //store owner notifications if (_customerSettings.NotifyNewCustomerRegistration) { await _workflowMessageService.SendCustomerRegisteredNotificationMessage(_workContext.CurrentCustomer, _storeContext.CurrentStore, _localizationSettings.DefaultAdminLanguageId); } //associate external account with registered user await AssociateExternalAccountWithUser(_workContext.CurrentCustomer, parameters); //authenticate if (registrationIsApproved) { await _authenticationService.SignIn(_workContext.CurrentCustomer, false); await _workflowMessageService.SendCustomerWelcomeMessage(_workContext.CurrentCustomer, _storeContext.CurrentStore, _workContext.WorkingLanguage.Id); return(new RedirectToRouteResult("RegisterResult", new { resultId = (int)UserRegistrationType.Standard })); } //registration is succeeded but isn't activated if (_customerSettings.UserRegistrationType == UserRegistrationType.EmailValidation) { //email validation message await _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.AccountActivationToken, Guid.NewGuid().ToString()); await _workflowMessageService.SendCustomerEmailValidationMessage(_workContext.CurrentCustomer, _storeContext.CurrentStore, _workContext.WorkingLanguage.Id); return(new RedirectToRouteResult("RegisterResult", new { resultId = (int)UserRegistrationType.EmailValidation })); } //registration is succeeded but isn't approved by admin if (_customerSettings.UserRegistrationType == UserRegistrationType.AdminApproval) { return(new RedirectToRouteResult("RegisterResult", new { resultId = (int)UserRegistrationType.AdminApproval })); } return(Error(new[] { "Error on registration" })); }