/// <summary> /// Finalizes the link to existing customer. /// </summary> /// <param name="emailAddressOfExistingCustomer">The email address of existing customer.</param> /// <param name="activationCode">The activation code.</param> /// <returns>The link result.</returns> public virtual async Task <LinkToExistingCustomerResult> FinalizeLinkToExistingCustomer(string emailAddressOfExistingCustomer, string activationCode) { IStoreOperationsManager storeOperationsManager = Utilities.GetManagerFactory(this.EcommerceContext.GetAnonymousContext()).GetManager <IStoreOperationsManager>(); LinkToExistingCustomerResult result = await storeOperationsManager.FinalizeLinkToExistingCustomer(emailAddressOfExistingCustomer, activationCode); return(result); }
/// <summary> /// Initiates a link between an external identity and an existing customer. /// </summary> /// <param name="emailAddressOfExistingCustomer">The email address of existing customer.</param> /// <param name="emailTemplateId">The email template identifier.</param> /// <param name="emailTemplateProperties">The email template properties.</param> /// <returns> /// A task. /// </returns> public virtual async Task <LinkToExistingCustomerResult> InitiateLinkExternalIdToExistingCustomer(string emailAddressOfExistingCustomer, string emailTemplateId, IEnumerable <NameValuePair> emailTemplateProperties) { string activationToken = System.Guid.NewGuid().ToString(); IStoreOperationsManager storeOperationsManager = Utilities.GetManagerFactory(this.EcommerceContext).GetManager <IStoreOperationsManager>(); LinkToExistingCustomerResult linkResult = await storeOperationsManager.InitiateLinkToExistingCustomer(emailAddressOfExistingCustomer, activationToken, emailTemplateId, emailTemplateProperties); return(linkResult); }
/// <summary> /// Saves the customer account activation request to channel DB. /// </summary> /// <param name="request">The data service request.</param> /// <returns>The data service response.</returns> private SingleEntityDataServiceResponse <LinkToExistingCustomerResult> InitiateLinkToExistingCustomer(InitiateLinkToExistingCustomerDataRequest request) { CustomerSqlServerDatabaseAccessor databaseAccessor = this.GetSqlDatabaseAccessorInstance(request.RequestContext); LinkToExistingCustomerResult result = databaseAccessor.InitiateLinkToExistingCustomer(request.EmailAddress, request.ActivationToken, request.ExternalIdentityId, request.ExternalIdentityIssuer, request.CustomerId); this.UpdateCustomerExternalIdentityMapCache(request.RequestContext, result.ExternalIdentityId, result.ExternalIdentityProvider); return(new SingleEntityDataServiceResponse <LinkToExistingCustomerResult>(result)); }
public async Task <ActionResult> FinishSignUp() { IdentityProviderType selectedAuthenticationProviderType; Enum.TryParse(this.Request.Form["SelectedAuthenticationProviderType"], out selectedAuthenticationProviderType); string selectedAuthenticationProviderToken = this.Request.Form["SelectedAuthenticationProviderToken"]; EcommerceContext ecommerceContext = ServiceUtilities.GetEcommerceContext(this.HttpContext, selectedAuthenticationProviderToken, selectedAuthenticationProviderType); string signUpRadioButtonSelection = this.Request.Form["SignUpRadioButton"]; if (string.Equals(signUpRadioButtonSelection, NewAccount, StringComparison.OrdinalIgnoreCase)) { string firstName = this.Request.Form["FirstName"]; string lastName = this.Request.Form["LastName"]; string email = this.Request.Form["Email"]; Customer customer = new Customer(); customer.Email = email; customer.AccountNumber = string.Empty; customer.FirstName = firstName; customer.LastName = lastName; CustomerOperationsHandler customerOperationsHandler = new CustomerOperationsHandler(ecommerceContext); customer = await customerOperationsHandler.Create(customer); this.UpdateClaims( this.HttpContext, selectedAuthenticationProviderToken, selectedAuthenticationProviderType, email, customer.AccountNumber, customer.FirstName, customer.LastName); return(this.RedirectToAction(HomeController.DefaultActionName, HomeController.ControllerName)); } else { string emailOfExistingCustomer = this.Request.Form["EmailOfExistingCustomer"]; LinkToExistingCustomerResult linkToExistingCustomerResult = null; try { CustomerOperationsHandler customerOperationsHandler = new CustomerOperationsHandler(ecommerceContext); linkToExistingCustomerResult = await customerOperationsHandler.InitiateLinkExternalIdToExistingCustomer(emailOfExistingCustomer, "emailTemplateId", null); } catch (DataValidationException ex) { if (string.Equals(ex.ErrorResourceId, DataValidationErrors.Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound.ToString(), StringComparison.OrdinalIgnoreCase)) { RetailLogger.Log.OnlineStoreCustomerForLinkingNotFound(Utilities.GetMaskedEmailAddress(emailOfExistingCustomer), ex, ex.InnerException); this.TempData["BadLinkUpEmail"] = emailOfExistingCustomer; this.TempData["AuthToken"] = selectedAuthenticationProviderToken; this.TempData["ExternalIdProviderType"] = selectedAuthenticationProviderType; this.TempData["LogOnEmail"] = this.Request.Form["LogOnEmail"]; return(this.RedirectToAction(SignInController.StartSignUpActionName, SignInController.ControllerName)); } else { throw ex; } } string maskedEmailAddress = Utilities.GetMaskedEmailAddress(linkToExistingCustomerResult.EmailAddress); ////Clean up auth cookies completely. We need to be signed out. this.TempData["IsSignUpFlow"] = true; this.TempData["MaskedEmail"] = maskedEmailAddress; return(this.RedirectToAction(SignInController.AccountLinkUpPendingActionName, SignInController.ControllerName)); } }