public static async Task <List <KeyVariantAttributes> > GetKeyVariantAttributes(Product product, Variant variant, CultureInfo culture, IOvertureClient client)
        {
            if (variant == null)
            {
                return(null);
            }

            var request = new GetProductDefinitionRequest()
            {
                CultureName = culture.Name,
                Name        = product.DefinitionName,
            };

            var productDef = client.Send(request);

            var lookups = await GetLookups(productDef, client).ConfigureAwait(false);

            if (variant.PropertyBag == null)
            {
                return(null);
            }

            var keyVariantAttributes = productDef.VariantProperties.Where(x => x.IsKeyVariant)
                                       .OrderBy(x => x.KeyVariantOrder)
                                       .ToList();

            if (!keyVariantAttributes.Any())
            {
                return(null);
            }

            var list = new List <KeyVariantAttributes>();

            foreach (var keyVariantAttribute in keyVariantAttributes)
            {
                object kvaValue;
                if (keyVariantAttribute.DataType.Equals(PropertyDataType.Lookup))
                {
                    var lookup =
                        lookups.SingleOrDefault(l => l.LookupName == keyVariantAttribute.LookupDefinition.LookupName);
                    kvaValue = GetLocalizedKvaDisplayValueFromLookup(lookup, culture.Name, variant, keyVariantAttribute);
                }
                else
                {
                    kvaValue = GetLocalizedKvaDisplayValueFromValue(culture.Name, variant, keyVariantAttribute);
                }

                if (kvaValue != null)
                {
                    list.Add(new KeyVariantAttributes()
                    {
                        Key           = keyVariantAttribute.PropertyName,
                        Value         = kvaValue.ToString(),
                        OriginalValue = variant.PropertyBag[keyVariantAttribute.PropertyName].ToString()
                    });
                }
            }

            return(list);
        }
Example #2
0
        /// <summary>
        /// Adds a new membership user to the data source.
        /// </summary>
        /// <param name="username">The user name could be user's email depending on configuration.</param>
        /// <param name="password">The password for the new user.</param>
        /// <param name="email">The e-mail address for the new user.</param>
        /// <param name="passwordQuestion">The password question for the new user.</param>
        /// <param name="passwordAnswer">The password answer for the new user</param>
        /// <param name="isApproved">The new user is always approved no matter the value of this parameter.</param>
        /// <param name="providerUserKey">The unique identifier from the membership data source for the user. Generated if null.</param>
        /// <param name="status">A <see cref="T:System.Web.Security.MembershipCreateStatus"/> enumeration value indicating whether the user was created successfully.</param>
        /// <returns>
        /// A <see cref="T:System.Web.Security.MembershipUser"/> object populated with the information for the newly created user.
        /// </returns>
        public override MembershipUser CreateUser(string username, string password, string email,
                                                  string passwordQuestion, string passwordAnswer,
                                                  bool isApproved, object providerUserKey,
                                                  out MembershipCreateStatus status)
        {
            string domainUsername;

            if (TryGetDomainUser(username, out domainUsername))
            {
                // Username shouldn't contain domain
                status = MembershipCreateStatus.UserRejected;
                return(null);
            }

            var args = new ValidatePasswordEventArgs(domainUsername, password, true);

            OnValidatingPassword(args);

            if (args.Cancel)
            {
                status = MembershipCreateStatus.InvalidPassword;
                return(null);
            }

            Guid userId = Guid.Empty;

            if (providerUserKey != null)
            {
                if (!(providerUserKey is Guid))
                {
                    status = MembershipCreateStatus.InvalidProviderUserKey;
                    return(null);
                }

                userId = (Guid)providerUserKey;
            }

            var request = new CreateCustomerMembershipRequest
            {
                Id               = userId,
                Username         = username,
                Email            = email,
                FirstName        = OvertureMembershipConfiguration.DefaultFirstName, // Required in Overture
                LastName         = OvertureMembershipConfiguration.DefaultLastName,  // Required in Overture
                Password         = password,
                PasswordQuestion = passwordQuestion,
                PasswordAnswer   = passwordAnswer,
                ScopeId          = GetCurrentScope(),
            };

            try
            {
                var createdCustomer = _client.Send(request);

                status = MembershipCreateStatus.Success;

                return(ConvertToMembershipUser(createdCustomer));
            }
            catch (ValidationError ex)
            {
                switch (ex.ErrorCode)
                {
                case "InvalidPassword":
                case "InvalidOperationException":
                    status = MembershipCreateStatus.InvalidPassword;
                    return(null);

                case "PasswordQuestionNoSet":
                    status = MembershipCreateStatus.InvalidQuestion;
                    return(null);

                case "UserNameAlreadyUsed":
                    status = MembershipCreateStatus.DuplicateUserName;
                    return(null);

                default:
                    status = MembershipCreateStatus.UserRejected;
                    return(null);
                }
            }
            catch (WebException ex)
            {
                throw new MembershipCreateUserException(ex.Message, ex);
            }
            catch (WebServiceException ex)
            {
                throw new MembershipCreateUserException(ex.ErrorMessage, ex);
            }
        }
 public TResponse Send <TResponse>(IReturn <TResponse> request)
 {
     return(Intercept(() => _client.Send(request), request));
 }