コード例 #1
0
		private HandleObject ChangeCurrency(NameValueCollection requestParameters, Uri urlReferrer)
		{
			var handleObject = new HandleObject { Action = "ChangeCurrency", Url = urlReferrer };
			var result = new Dictionary<string, string>();
			var changeCurrencyKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "changecurrency"); //requestParameters["validate"];
			var changeCurrency = requestParameters[changeCurrencyKey];

			if (string.IsNullOrEmpty(changeCurrency))
			{
				handleObject.Success = false;
				return handleObject;
			}

			if (!StoreHelper.ChangeCurrency(changeCurrency))
			{
				Session.Add(Constants.ChangeCurrencyResult, BasketActionResult.Failed);
				result.Add(Constants.ChangeCurrencyResult, BasketActionResult.Failed.ToString());
				handleObject.Success = false;
				return handleObject;
			}

			handleObject.Success = true;
			handleObject.Url = urlReferrer;
			handleObject.Item = new Dictionary<string, string>{ { "Currency", changeCurrency } };
			Session.Add(Constants.ChangeCurrencyResult, BasketActionResult.Success);
			result.Add(Constants.ChangeCurrencyResult, BasketActionResult.Success.ToString());
			handleObject.Messages = result;
			return handleObject;
		}
コード例 #2
0
		private HandleObject ValidateCustomValidation(NameValueCollection requestParameters, Uri urlReferrer)
		{
			var handleObject = new HandleObject {Action = "ValidateCustomValidation", Url = urlReferrer};
			var result = new Dictionary<string, string>();
			var order = OrderHelper.GetOrder();

			if (order == null)
			{
				handleObject.Success = false;
				return handleObject;
			}

			if (OrderHelper.ValidateCustomValidation(order, true))
			{
				// order is valid, ok!
				SetBasket(handleObject, order);
				handleObject.Validated = true;
				Session.Add(Constants.ValidateCustomResult, BasketActionResult.Success);
				result.Add(Constants.ValidateCustomResult, BasketActionResult.Success.ToString());
				handleObject.Messages = result;
				return handleObject;
			}
			order.Save(true, ValidateSaveAction.CustomValidation);
			// todo: does this create the incomplete order in the order overview?
			SetBasket(handleObject, order);
			handleObject.Validated = false;

			Uri redirect = null;
			if (urlReferrer != null)
			{
				redirect = new Uri(urlReferrer, "#validation");
			}

			handleObject.Url = redirect;

			Session.Add(Constants.ValidateCustomResult, BasketActionResult.Failed);
			result.Add(Constants.ValidateCustomResult, BasketActionResult.Failed.ToString());
			handleObject.Messages = result;

			return handleObject;
		}
コード例 #3
0
		internal HandleObject WishlistToBasket(NameValueCollection requestParameters, Uri requestUri)
		{
			var handleObject = new HandleObject { Action = "AddWishlistToBasket", Url = requestUri };

			var result = new Dictionary<string, string>();

			var order = OrderHelper.GetOrder();

			if (order == null)
			{
				order = GetCreateOrderOrWishList(requestParameters);

				order.Status = OrderStatus.Incomplete;
			}
			else
			{
				var wishlist = GetOrCreateWishlist(requestParameters);

				order.Status = OrderStatus.Incomplete;

				foreach (var line in wishlist.OrderLines)
				{
					Dictionary<string, string> dictionary = null;
					var xElement = line.CustomData.Element("fields");

					if (xElement != null)
					{
						dictionary = xElement.Elements().ToDictionary(e => e.Name.LocalName, e => e.Value);
					}

					order.AddOrUpdateOrderLine(0, line.ProductInfo.Id, "add", line.ProductInfo.ItemCount.GetValueOrDefault(1), line.ProductInfo.ProductVariants.Select(v => v.Id), dictionary);
				}

				
			}

			Session.Add(Constants.WishlistToBasketActionResult, BasketActionResult.Success);
			result.Add(Constants.WishlistToBasketActionResult, BasketActionResult.Success.ToString());

			order.Save();

			handleObject.Validated = false;
			handleObject.Success = true;
			SetBasket(handleObject, order);
			handleObject.Messages = result;
			return handleObject;
		}
コード例 #4
0
		internal HandleObject AddProduct(NameValueCollection requestParameters, Uri requestUri)
		{
			// you want to lock the order here
			lock (GetLockForOrder(IO.Container.Resolve<IOrderService>().GetOrderIdFromOrderIdCookie()))
			{
				var order = GetCreateOrderOrWishList(requestParameters);

				var handleObject = new HandleObject {Action = "AddProduct", Url = requestUri};

				var orderUpdater = IO.Container.Resolve<IOrderUpdatingService>();

				string productIdKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "productid");
				string orderLineIdKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "orderlineid");

				string productIdValue = requestParameters[productIdKey];
				string orderlineIdValue = requestParameters[orderLineIdKey];

				int productId = 0;
				int orderLineId = 0;

				int.TryParse(productIdValue, out productId);
				int.TryParse(orderlineIdValue, out orderLineId);

				var result = new Dictionary<string, string>();

				if (productId <= 0 && orderLineId <= 0)
				{
					Log.Instance.LogError("ADD TO BASKET ERROR: productId <= 0 && orderLineId <= 0");
					if (HttpContext.Current != null)
					{
						Session.Add(Constants.BasketActionResult, BasketActionResult.NoProductOrOrderLineId);
					}
					result.Add(Constants.BasketActionResult, BasketActionResult.NoProductOrOrderLineId.ToString());
					handleObject.Success = false;
					SetBasket(handleObject, order);
					return handleObject;
				}

				string actionKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "action");
				string actionValue = requestParameters[actionKey];
				string action = !string.IsNullOrEmpty(actionValue) ? actionValue : string.Empty;

				string quantityKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "quantity");
				string quantityValue = requestParameters[quantityKey];

				int quantity;
				int.TryParse(quantityValue, out quantity);

				var variants = requestParameters.Keys.Cast<string>().Where(key => key.ToLower().StartsWith("variant")).Select(key => Common.Helpers.ParseInt(requestParameters[key])).ToList();

				// todo: varianten als key/value pair met groepnaam zodat we dit op order kunnen checken dat er maar 1 per groep is?
				//var variantGroupDictionary = new Dictionary<string, int>();
				//foreach(var variantGroupKey in requestParameters.AllKeys.Where(x => x.StartsWith("variant")))
				//{
				//	var variantIdValue = requestParameters[variantGroupKey];
				//	int variantId;
				//	int.TryParse(variantIdValue, out variantId);

				//	if (variantId != 0)
				//	{
				//		variantGroupDictionary.Add(variantGroupKey, variantId);
				//	}
				//}

				List<string> orderlineDetailsQueryStringCollection = requestParameters.AllKeys.Where(x => x != null).ToList();

				Dictionary<string, string> fields = orderlineDetailsQueryStringCollection.Where(s => !string.IsNullOrEmpty(requestParameters[s])).ToDictionary(s => s, s => requestParameters[s]);

				if (order != null)
				{
					Log.Instance.LogDebug("ADD TO BASKET DEBUG order: " + order.UniqueOrderId + " orderLineId: " + orderLineId + " productId: " + productId + " action: " + action + " quantity: " + quantity + " variantsCount: " + variants.Count() + " fieldsCount: " + fields.Count());

					orderUpdater.AddOrUpdateOrderLine(order, orderLineId, productId, action, quantity, variants, fields);
					// unit test dat dit aangeroepen wordt
					orderUpdater.Save(order);

					if (HttpContext.Current != null)
					{
						Session.Add(order.Status == OrderStatus.Wishlist ? Constants.WishlistActionResult : Constants.BasketActionResult, BasketActionResult.Success);
					}
					result.Add(order.Status == OrderStatus.Wishlist ? Constants.WishlistActionResult : Constants.BasketActionResult, BasketActionResult.Success.ToString());
					handleObject.Success = true;
					SetBasket(handleObject, order);
				}
				else
				{
					if (HttpContext.Current != null)
					{
						Session.Add(Constants.WishlistActionResult, BasketActionResult.OrderNull);
						Session.Add(Constants.BasketActionResult, BasketActionResult.OrderNull);
					}
					result.Add(Constants.WishlistActionResult, BasketActionResult.OrderNull.ToString());
					result.Add(Constants.BasketActionResult, BasketActionResult.OrderNull.ToString());
					handleObject.Success = false;

				}
				handleObject.Messages = result;
				return handleObject;
			}
		}
コード例 #5
0
		private HandleObject AccountSignIn(NameValueCollection requestParameters, Uri urlReferrer)
		{
			var handleObject = new HandleObject {Action = "AccountSignIn", Url = urlReferrer};
			

			string userNameKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "username") ?? requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "customeremail") ?? string.Empty;
			string passwordKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "password") ?? string.Empty;

			string userNameValue = requestParameters[userNameKey];
			string passwordValue = requestParameters[passwordKey];

			MembershipUser user = Membership.GetUser(userNameValue);

			var result = new Dictionary<string, string>();

			if (user == null)
			{
				Session.Add(Constants.SignInMemberSessionKey, AccountActionResult.MemberNotExists);

				result.Add(Constants.SignInMemberSessionKey, AccountActionResult.MemberNotExists.ToString());
				handleObject.Messages = result;
				handleObject.Success = false;
				return handleObject;
			}

			if (!Membership.ValidateUser(userNameValue, passwordValue))
			{
				Session.Add(Constants.SignInMemberSessionKey, AccountActionResult.ValidateUserError);
				result.Add(Constants.SignInMemberSessionKey, AccountActionResult.ValidateUserError.ToString());
				handleObject.Success = false;
				handleObject.Messages = result;
				return handleObject;
			}

			FormsAuthentication.SetAuthCookie(userNameValue, true);

			Session.Add(Constants.SignInMemberSessionKey, AccountActionResult.Success);
			Session.Remove(Constants.SignOutMemberSessionKey);

			result.Add(Constants.SignInMemberSessionKey, AccountActionResult.Success.ToString());
			handleObject.Messages = result;
			handleObject.Success = true;
			return handleObject;
		}
コード例 #6
0
		private HandleObject AccountChangePassword(NameValueCollection requestParameters, Uri urlReferrer)
		{
			var handleObject = new HandleObject { Action = "ChangePassoword", Url = urlReferrer };
			
			var result = new Dictionary<string, string>();

			var currentPasswordKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "currentpassword"); //requestParameters["currentPassword"];
			var newPasswordKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "newpassword"); //requestParameters["newPassword"];
			var validatePasswordKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "validatenewpassword"); //requestParameters["validateNewPassword"];
			var generatePasswordKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "generatepassword"); //requestParameters["generatePassword"];

			var currentPasswordValue = requestParameters[currentPasswordKey];
			var newPasswordValue = requestParameters[newPasswordKey];
			var validatePasswordValue = requestParameters[validatePasswordKey];
			var generatePasswordValue = requestParameters[generatePasswordKey];

			var memberShipUser = Membership.GetUser();

			if (!string.IsNullOrEmpty(currentPasswordValue) || !string.IsNullOrEmpty(newPasswordValue) || !string.IsNullOrEmpty(validatePasswordValue) || !string.IsNullOrEmpty(generatePasswordValue))
			{
				Log.Instance.LogDebug("Update Account Password Section");
				if (Membership.ValidateUser(memberShipUser.UserName, currentPasswordValue))
				{
					if (!string.IsNullOrEmpty(generatePasswordValue))
					{
						newPasswordValue = Membership.GeneratePassword(Membership.MinRequiredPasswordLength,
							Membership.MinRequiredNonAlphanumericCharacters);
					}
					else
					{
						if (newPasswordValue != validatePasswordValue)
						{
							Session.Add(Constants.ChangePasswordSessionKey, AccountActionResult.PasswordMismatch);
							result.Add(Constants.ChangePasswordSessionKey,
								AccountActionResult.PasswordMismatch.ToString());
							
							handleObject.Success = false;
							handleObject.Messages = result;
							return handleObject;
						}

						if (string.IsNullOrEmpty(newPasswordValue))
						{
							Session.Add(Constants.ChangePasswordSessionKey, AccountActionResult.Failed);
							result.Add(Constants.ChangePasswordSessionKey, AccountActionResult.Failed.ToString());
							handleObject.Success = false;
							handleObject.Messages = result;
							return handleObject;
						}

						if (Membership.MinRequiredPasswordLength > 0)
						{
							if (newPasswordValue.Length < Membership.MinRequiredPasswordLength)
							{
								Session.Add(Constants.ChangePasswordSessionKey, AccountActionResult.MinRequiredPasswordLengthError);
								result.Add(Constants.ChangePasswordSessionKey,
									AccountActionResult.MinRequiredPasswordLengthError.ToString());
								handleObject.Messages = result;
								handleObject.Success = false;
								return handleObject;
							}
						}

						if (!string.IsNullOrEmpty(Membership.PasswordStrengthRegularExpression))
						{
							if (!Regex.IsMatch(newPasswordValue, Membership.PasswordStrengthRegularExpression))
							{
								Session.Add(Constants.ChangePasswordSessionKey, AccountActionResult.PasswordStrengthRegularExpressionError);
								result.Add(Constants.ChangePasswordSessionKey,
									AccountActionResult.PasswordStrengthRegularExpressionError.ToString());
								handleObject.Messages = result;
								handleObject.Success = false;
								return handleObject;
							}
						}

						if (Membership.MinRequiredNonAlphanumericCharacters > 0)
						{
							int num = newPasswordValue.Where((t, i) => !char.IsLetterOrDigit(newPasswordValue, i)).Count();

							if (num < Membership.MinRequiredNonAlphanumericCharacters)
							{
								Session.Add(Constants.ChangePasswordSessionKey, AccountActionResult.MinRequiredNonAlphanumericCharactersError);
								Session.Add(Constants.UpdateMemberSessionKeyAddition, Membership.MinRequiredNonAlphanumericCharacters);
								result.Add(Constants.ChangePasswordSessionKey, AccountActionResult.MinRequiredNonAlphanumericCharactersError.ToString());
								handleObject.Messages = result;
								handleObject.Success = false;
								return handleObject;
							}
						}
					}

					Session.Add(Constants.ChangePasswordSessionKey, AccountActionResult.Success);
					result.Add(Constants.ChangePasswordSessionKey, AccountActionResult.Success.ToString());

					memberShipUser.ChangePassword(currentPasswordValue, newPasswordValue);

					handleObject.Success = true;
					handleObject.Messages = result;
					handleObject.Validated = true;
					return handleObject;
				}

				Session.Add(Constants.ChangePasswordSessionKey, AccountActionResult.CurrentpasswordError);
				result.Add(Constants.ChangePasswordSessionKey, AccountActionResult.ChangePasswordError.ToString());
				handleObject.Messages = result;
				handleObject.Success = false;
				handleObject.Messages = result;
				return handleObject;
			}

			Session.Add(Constants.ChangePasswordSessionKey, AccountActionResult.Failed);
			result.Add(Constants.ChangePasswordSessionKey, AccountActionResult.Failed.ToString());
			handleObject.Success = false;
			handleObject.Messages = result;
			return handleObject;
		}
コード例 #7
0
		private HandleObject AddShippingMethod(NameValueCollection requestParameters, Uri requestUri)
		{
			var handleObject = new HandleObject {Action = "AddShippingMethod", Url = requestUri};

			var order = GetCreateOrderOrWishList(requestParameters);

			string shippingProviderKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "shippingprovider"); //requestParameters["shippingProvider"];

			string shippingProviderValue = requestParameters[shippingProviderKey];

			var result = new Dictionary<string, string>();

			if (shippingProviderValue != null && (shippingProviderValue.ToLower() == "indication" || shippingProviderValue.ToLower() == "auto"))
			{
				ShippingProviderHelper.AutoSelectShippingProvider(order);

				Session.Add(Constants.ShippingProviderSessionKey, ProviderActionResult.Success);
				result.Add(Constants.ShippingProviderSessionKey, ProviderActionResult.Success.ToString());
				order.Save();

				SetBasket(handleObject, order);
				handleObject.Success = true;
				handleObject.Messages = result;
				handleObject.Validated = true;
				return handleObject;
			}

			if (shippingProviderValue != null)
			{
				if (!shippingProviderValue.Contains("-"))
				{
					Log.Instance.LogDebug("AddShippingMethod: " + ProviderActionResult.NoCorrectInput + " value: " + shippingProviderValue);
					Session.Add(Constants.ShippingProviderSessionKey, ProviderActionResult.NoCorrectInput);
					result.Add(Constants.ShippingProviderSessionKey, ProviderActionResult.NoCorrectInput.ToString());
					SetBasket(handleObject, order);
					handleObject.Success = false;
					handleObject.Validated = false;
					handleObject.Messages = result;
					return handleObject;
				}

				var shippingproviderSplit =  shippingProviderValue.Split('-');

				int shippingProviderId = 0;
				int.TryParse(shippingproviderSplit[0], out shippingProviderId);
				string shippingProviderMethodId = shippingProviderValue.Replace(shippingproviderSplit[0] + "-", "");


				if (shippingProviderId == 0)
				{
					Log.Instance.LogDebug("AddShippingMethod: " + ProviderActionResult.ProviderIdZero + " value: " + shippingProviderValue);
					Session.Add(Constants.ShippingProviderSessionKey, ProviderActionResult.ProviderIdZero);
					result.Add(Constants.ShippingProviderSessionKey, ProviderActionResult.ProviderIdZero.ToString());
					SetBasket(handleObject, order);
					handleObject.Success = false;
					handleObject.Validated = false;
					handleObject.Messages = result;
					return handleObject;
				}

				var actionResult = order.AddShippingProvider(shippingProviderId, shippingProviderMethodId);

				order.Save();

				Session.Add(Constants.ShippingProviderSessionKey, actionResult);
				result.Add(Constants.ShippingProviderSessionKey, actionResult.ToString());
				SetBasket(handleObject, order);
				handleObject.Success = true;
				handleObject.Validated = true;
				handleObject.Messages = result;
				return handleObject;
			}
			Log.Instance.LogDebug("AddShippingMethod: " + ProviderActionResult.NoCorrectInput + " value: null");
			Session.Add(Constants.ShippingProviderSessionKey, ProviderActionResult.NoCorrectInput);

			result.Add(Constants.ShippingProviderSessionKey, ProviderActionResult.NoCorrectInput.ToString());
			SetBasket(handleObject, order);
			handleObject.Success = false;
			handleObject.Validated = false;
			handleObject.Messages = result;
			return handleObject;
		}
コード例 #8
0
		private HandleObject ClearOrder(NameValueCollection requestParameters, Uri urlReferrer)
		{
			var handleObject = new HandleObject { Action = "ClearOrder", Url = urlReferrer };
			var result = new Dictionary<string, string>();

			var order = OrderHelper.GetOrder();

			if (order == null)
			{
				handleObject.Success = false;
				handleObject.Messages = result;
				Session.Add(Constants.BasketActionResult, BasketActionResult.Failed);

				result.Add(Constants.BasketActionResult, BasketActionResult.Failed.ToString());
				return handleObject;
			}

			order = OrderHelper.CreateOrder();

			Session.Add(Constants.BasketActionResult, BasketActionResult.Success);
			result.Add(Constants.BasketActionResult, BasketActionResult.Success.ToString());
			SetBasket(handleObject, order);
			handleObject.Messages = result;
			handleObject.Success = true;
			return handleObject;
		}
コード例 #9
0
		private HandleObject AddOrderLineDetails(NameValueCollection requestParameters, IEnumerable<string> queryStringCollection, int orderlineId, Uri requestUri)
		{
			// todo: updating an account, while there is an order will also update those details on the current order; do we want that?
			var handleObject = new HandleObject {Action = "AddOrderLineDetails", Url = requestUri};
			var result = new Dictionary<string, string>();
			var order = GetCreateOrderOrWishList(requestParameters);

			Dictionary<string, string> fields = queryStringCollection.ToDictionary(s => s, s => requestParameters[s]);

			if (!fields.Any())
			{
				SetBasket(handleObject, order);
				result.Add(Constants.BasketActionResult, BasketActionResult.Failed.ToString());
				Session.Add(Constants.BasketActionResult, BasketActionResult.Failed.ToString());
				handleObject.Messages = result;
				handleObject.Success = false;
				return handleObject;
			}
			order.AddOrderLineDetails(fields, orderlineId);

			order.Save();

			SetBasket(handleObject, order);
			result.Add(Constants.BasketActionResult, BasketActionResult.Success.ToString());
			Session.Add(Constants.BasketActionResult, BasketActionResult.Success.ToString());
			handleObject.Success = true;
			handleObject.Messages = result;
			return handleObject;

		}
コード例 #10
0
		private HandleObject AddCustomerInformation(NameValueCollection requestParameters, IEnumerable<string> queryStringCollection, CustomerDatatypes customerDataType, Uri requestUri)
		{
			var handleObject = new HandleObject {Action = "AddCustomerInformation", Url = requestUri};
			var result = new Dictionary<string, string>();

			var order = GetCreateOrderOrWishList(requestParameters);

			var stringCollection = queryStringCollection as string[] ?? queryStringCollection.ToArray();
			var fields = stringCollection.ToDictionary(s => s, s => requestParameters[s]);

			if (!fields.Any())
			{
				SetBasket(handleObject, order);
				handleObject.Success = false;
				handleObject.Validated = false;
				result.Add(Constants.CustomerInformation, CustomerInformationResult.Failed.ToString());
				Session.Add(Constants.CustomerInformation, CustomerInformationResult.Failed.ToString());
				handleObject.Messages = result;
				return handleObject;
			}
			IO.Container.Resolve<IOrderUpdatingService>().AddCustomerFields(order, fields, customerDataType);

			var customerIsShippingKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "customerisshipping"); //requestParameters["customerIsShipping"];

			if (customerIsShippingKey != null)
			{
				var customerIsShippingValue = requestParameters[customerIsShippingKey];

				if (customerIsShippingValue != null && (customerIsShippingValue.ToLower() == "customerisshipping" || customerIsShippingValue.ToLower() == "true" || customerIsShippingValue.ToLower() == "on" || customerIsShippingValue == "1"))
				{
					var shippingFields = stringCollection.ToDictionary(s => s.Replace("customer", "shipping"), s => requestParameters[s]);

					if (!shippingFields.Any()) return handleObject;
					order.AddCustomerFields(shippingFields, CustomerDatatypes.Shipping);
				}
			}

			order.Save();

			SetBasket(handleObject, order);
			handleObject.Success = true;
			handleObject.Validated = true;
			result.Add(Constants.CustomerInformation, CustomerInformationResult.Success.ToString());
			Session.Add(Constants.CustomerInformation, CustomerInformationResult.Success.ToString());
			handleObject.Messages = result;
			return handleObject;
		}
コード例 #11
0
		private HandleObject AddCoupon(NameValueCollection requestParameters, Uri requestUri)
		{
			var handleObject = new HandleObject {Action = "AddCoupon", Url = requestUri};
			var result = new Dictionary<string, string>();
			var order = GetCreateOrderOrWishList(requestParameters);

			string couponCodeKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "couponcode"); //requestParameters["couponCode"];
			string removeCouponKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "removecoupon"); //requestParameters["removeCoupon"];

			string couponCodeValue = requestParameters[couponCodeKey];
			string removeCouponValue = requestParameters[removeCouponKey];

			CouponCodeResult codeResult;
			var message = new Dictionary<string, string>();
			bool saveOrder = true;
			if (!string.IsNullOrEmpty(removeCouponValue))
			{
				if (removeCouponValue.ToLower() == "true" || removeCouponValue.ToLower() == "removecoupon" && removeCouponValue.ToLower() != "on" && removeCouponValue != "1")
				{
					codeResult = order.RemoveCoupon(couponCodeValue);
					if (codeResult != CouponCodeResult.Success)
					{
						message = new Dictionary<string, string> { { Constants.CouponCodeSessionKey, codeResult.ToString() } };

						saveOrder = false;
					}
				}
				else
				{
					codeResult = CouponCodeResult.Failed;
					message = new Dictionary<string, string> {{Constants.CouponCodeSessionKey, codeResult.ToString()}};

					saveOrder = false;
				}
			}
			else
			{
				codeResult = order.AddCoupon(couponCodeValue);
				if (codeResult != CouponCodeResult.Success)
				{
					message = new Dictionary<string, string> { { Constants.CouponCodeSessionKey, codeResult.ToString() } };
					saveOrder = false;
				}
			}

			if (saveOrder)
			{
				handleObject.Success = true;
				order.Save();
			}
			else
			{
				handleObject.Success = false;
			}

			handleObject.Messages = message;
			SetBasket(handleObject, order);
			foreach (var mes in message)
			{
				result.Add(mes.Key, mes.Value);
				Session.Add(mes.Key, mes.Value);
			}
			handleObject.Messages = result;
			return handleObject;
		}
コード例 #12
0
		private HandleObject ConfirmOrder(NameValueCollection requestParameters, Uri requestUri)
		{
			var handleObject = new HandleObject {Action = "ConfirmOrder", Url = requestUri};
			var result = new Dictionary<string, string>();

			var order = GetCreateOrderOrWishList(requestParameters);

			string orderStatusKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "confirm"); //requestParameters["confirm"];
			string acceptTermsKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "acceptterms"); //requestParameters["acceptterms"];
			string orderStatusValue = requestParameters[orderStatusKey];
			string acceptTermsValue = requestParameters[acceptTermsKey];

			if (string.IsNullOrEmpty(orderStatusValue))
			{
				Session.Add(Constants.ConfirmOrderKey, AccountActionResult.Failed);
				result.Add(Constants.ConfirmOrderKey, ConfirmOrderResults.Failed.ToString());
				handleObject.Success = false;
				handleObject.Messages = result;
				return handleObject;
			}

			bool termsAccepted = acceptTermsValue != null && (acceptTermsValue.ToLower() == "true" || acceptTermsValue.ToLower() == "acceptterms" || acceptTermsValue.ToLower() == "on" || acceptTermsValue == "1");

			Uri validateUri = null;
			if (requestUri != null)
			{
				validateUri = new Uri(requestUri, "#validation");
			}

			int confirmOrderNodeId = 0;

			Log.Instance.LogDebug("BasketHandler ConfirmOrder confirm: " + orderStatusValue);

			string confirmOrderNodeRequestKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "confirmordernodeid"); //requestParameters["confirmOrderNodeId"];
			string confirmOrderNodeRequestValue = requestParameters[confirmOrderNodeRequestKey];

			if (!string.IsNullOrEmpty(confirmOrderNodeRequestValue))
			{
				int.TryParse(confirmOrderNodeRequestValue, out confirmOrderNodeId);
			}

			if (!order.ConfirmOrder(termsAccepted, confirmOrderNodeId))
			{
				SetBasket(handleObject, order);
				handleObject.Url = validateUri;
				handleObject.Success = false;
				handleObject.Validated = false;
				Session.Add(Constants.ConfirmOrderKey, AccountActionResult.Failed);
				result.Add(Constants.ConfirmOrderKey, ConfirmOrderResults.Failed.ToString());
				handleObject.Messages = result;
				return handleObject;
			}


			handleObject.Validated = true;
			if (order.PaymentInfo.TransactionMethod == PaymentTransactionMethod.WebClient)
			{
				HttpContext.Current.Response.Write(Encoding.UTF8.GetString(GetBytes(order.PaymentInfo.Parameters)));
			}
			else
			{
				if (string.IsNullOrEmpty(order.RedirectUrl))
				{
					handleObject.Success = true;
					handleObject.Messages = result;
					//todo: check if this is really a successfull situation?
					Session.Add(Constants.ConfirmOrderKey, AccountActionResult.Success);
					result.Add(Constants.ConfirmOrderKey, ConfirmOrderResults.Success.ToString());
					return handleObject;
				}
				SetBasket(handleObject, order);
				
				// todo: nasty hack, because on localhost // somehow makes from // file:// instead of http:// 
				var redirectUrl = order.RedirectUrl;

				if (order.RedirectUrl.StartsWith("//"))
				{
					var http = "http:";
					if (requestUri != null && requestUri.AbsoluteUri.StartsWith("https"))
					{
						http = "https:";
					}

					redirectUrl = string.Format("{0}{1}", http, order.RedirectUrl);
				}

				if(redirectUrl != "inline")
				handleObject.Url = new Uri(redirectUrl);
				handleObject.PostConfirmUrl = new Uri(redirectUrl);

				Log.Instance.LogDebug("CONFIRM ORDER REDIRECT URL: "+ redirectUrl + " (handleObject.PostConfirmUrl) handleObject.PostConfirmUrl.AbsoluteUri: " + handleObject.PostConfirmUrl.AbsoluteUri);

			}

			Session.Add(Constants.ConfirmOrderKey, AccountActionResult.Success);
			result.Add(Constants.ConfirmOrderKey, ConfirmOrderResults.Success.ToString());

			handleObject.Success = true;
			handleObject.Messages = result;

			return handleObject;
		}
コード例 #13
0
		private HandleObject AccountUpdate(NameValueCollection requestParameters, Uri urlReferrer)
		{
			var handleObject = new HandleObject {Action = "UpdateAccount", Url = urlReferrer};
			
			var result = new Dictionary<string, string>();

			var memberShipUser = Membership.GetUser();

			if (memberShipUser == null)
			{
				Log.Instance.LogDebug("UpdateAccount: " + AccountActionResult.MemberNotExists);
				Session.Add(Constants.UpdateMemberSessionKey, AccountActionResult.MemberNotExists);

				result.Add(Constants.UpdateMemberSessionKey, AccountActionResult.MemberNotExists.ToString());
				handleObject.Success = false;
				handleObject.Messages = result;
				return handleObject;
			}

			var profile = ProfileBase.Create(memberShipUser.UserName);

			// note don't forget to disable automatic profile save!: <profile defaultProvider="UmbracoMemberProfileProvider" enabled="true" automaticSaveEnabled="false">
			foreach (var prop in ProfileBase.Properties)
			{
				try
				{
					var settingsProperty = (SettingsProperty) prop;

					string settingsPropertyName = settingsProperty.Name;

					if (!string.IsNullOrEmpty(requestParameters[settingsPropertyName]))
					{
						profile[settingsPropertyName] = requestParameters[settingsPropertyName];
					}
				}
				catch
				{
					var settingsProperty = (SettingsProperty) prop;

					Log.Instance.LogDebug(string.Format("UpdateAccount Failed for Request Property: {0}, currentNodeId: {1}",
						settingsProperty.Name, IO.Container.Resolve<ICMSApplication>().CurrentNodeId()));
				}
			}


			var emailKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "email");

			if (string.IsNullOrEmpty(emailKey))
			{
				emailKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "customerEmail");
			}

			if (string.IsNullOrEmpty(emailKey))
			{
				memberShipUser.Email = emailKey;
			}

			// todo: BREAKING with 2.4, only fired when calling changepassword as well!
			//AccountChangePassword(requestParameters, urlReferrer);
			
			profile.Save();
			try
			{
				Membership.UpdateUser(memberShipUser);
			}
			catch
			{
				// Umbraco + SQL CE can't change email: BUG in Umbraco!
			}

			Session.Add(Constants.UpdateMemberSessionKey, AccountActionResult.Success);
			result.Add(Constants.UpdateMemberSessionKey, AccountActionResult.Success.ToString());
			handleObject.Success = true;
			handleObject.Messages = result;
			handleObject.Validated = true;
			return handleObject;
		}
コード例 #14
0
		private static void SetBasket(HandleObject handleObject, OrderInfo order)
		{
			var orderInfo = OrderHelper.GetOrder(order.UniqueOrderId);

			handleObject.Item = Basket.CreateBasketFromOrderInfo(orderInfo);
		}
コード例 #15
0
		private HandleObject AddPaymentMethod(NameValueCollection requestParameters, Uri requestUri)
		{
			var handleObject = new HandleObject {Action = "AddPaymentMethod", Url = requestUri};

			var order = GetCreateOrderOrWishList(requestParameters);

			string paymentProviderKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "paymentprovider"); //requestParameters["paymentProvider"];

			string paymentProviderValue = requestParameters[paymentProviderKey];

			var result = new Dictionary<string, string>();

			if (paymentProviderValue == null)
			{
				Session.Add(Constants.PaymentProviderSessionKey, ProviderActionResult.NoCorrectInput);
				Log.Instance.LogError("BasketHandler AddPaymentMethod paymentProviderValue == null");
				result.Add(Constants.PaymentProviderSessionKey, ProviderActionResult.NoCorrectInput.ToString());
				handleObject.Success = false;
				handleObject.Validated = false;
				SetBasket(handleObject, order);
				handleObject.Messages = result;
				return handleObject;
			}

			if (!paymentProviderValue.Contains("-")) 
				// if the payment provider/method is given, act as PaymentHandler and request payment
			{
				var paymentProvider = IO.Container.Resolve<IPaymentProviderService>().GetPaymentProviderWithName(paymentProviderValue, StoreHelper.CurrentLocalization);

				if (paymentProvider != null)
				{
					new PaymentRequestHandler().HandleuWebshopPaymentRequest(paymentProvider);
					result.Add(Constants.PaymentProviderSessionKey, "HandleuWebshopPaymentRequest");
					handleObject.Success = true;
					handleObject.Validated = true;
					handleObject.Messages = result;
					return handleObject;
				}

				Session.Add(Constants.PaymentProviderSessionKey, ProviderActionResult.NoCorrectInput);
				Log.Instance.LogError("BasketHandler AddPaymentMethod !paymentProviderValue.Contains(-) && paymentProviderNode != null");
				result.Add(Constants.PaymentProviderSessionKey, ProviderActionResult.NoCorrectInput.ToString());
				handleObject.Success = false;
				handleObject.Validated = false;
				handleObject.Messages = result;
				return handleObject;
			}

			if (paymentProviderValue.Split('-').Length <= 0)
			{
				Session.Add(Constants.PaymentProviderSessionKey, ProviderActionResult.NoCorrectInput);
				Log.Instance.LogError("BasketHandler AddPaymentMethod paymentProviderValue.Split('-').Length <= 0");
				result.Add(Constants.PaymentProviderSessionKey, ProviderActionResult.NoCorrectInput.ToString());
				handleObject.Success = false;
				handleObject.Validated = false;
				SetBasket(handleObject, order);
				return handleObject;
			}

			var paymentProviderSplit = paymentProviderValue.Split('-');

			int paymentProviderId;
			int.TryParse(paymentProviderSplit[0], out paymentProviderId);
			var paymentProviderMethodId = paymentProviderValue.Replace(paymentProviderSplit[0] + "-", "");

			if (paymentProviderId == 0)
			{
				Session.Add(Constants.PaymentProviderSessionKey, ProviderActionResult.ProviderIdZero);
				Log.Instance.LogError("BasketHandler AddPaymentMethod ProviderActionResult.ProviderIdZero");
				result.Add(Constants.PaymentProviderSessionKey, ProviderActionResult.ProviderIdZero.ToString());
				SetBasket(handleObject, order);
				handleObject.Success = false;
				handleObject.Validated = false;
				return handleObject;
			}
			order.AddPaymentProvider(paymentProviderId, paymentProviderMethodId);

			order.Save();

			Session.Add(Constants.PaymentProviderSessionKey, ProviderActionResult.Success);

			result.Add(Constants.PaymentProviderSessionKey, ProviderActionResult.Success.ToString());

			handleObject.Item = order;
			SetBasket(handleObject, order);
			handleObject.Success = true;
			handleObject.Validated = true;
			handleObject.Messages = result;
			return handleObject;
		}
コード例 #16
0
		private HandleObject ValidateOrderlines(NameValueCollection requestParameters, Uri urlReferrer)
		{
			var handleObject = new HandleObject {Action = "ValidateOrderlines", Url = urlReferrer};
			var result = new Dictionary<string, string>();

			var order = OrderHelper.GetOrder();

			if (order == null)
			{
				handleObject.Success = false;
				return handleObject;
			}

			if (OrderHelper.ValidateOrderLines(order, true))
			{
				// order is valid, ok!
				SetBasket(handleObject, order);
				handleObject.Validated = true;

				Session.Add(Constants.ValidateOrderlineResult, BasketActionResult.Success);
				result.Add(Constants.ValidateOrderlineResult, BasketActionResult.Success.ToString());
				handleObject.Messages = result;
				return handleObject;
			}
			order.Save(true, ValidateSaveAction.Orderlines);
			SetBasket(handleObject, order);
			handleObject.Validated = false;

			Uri redirect = null;
			if (urlReferrer != null)
			{
				redirect = new Uri(urlReferrer, "#validation");
			}

			Session.Add(Constants.ValidateOrderlineResult, BasketActionResult.Failed);
			result.Add(Constants.ValidateOrderlineResult, BasketActionResult.Failed.ToString());
			handleObject.Messages = result;

			handleObject.Url = redirect;
			return handleObject;
		}
コード例 #17
0
		internal HandleObject WishlistRename(NameValueCollection requestParameters, Uri requestUri)
		{
			var handleObject = new HandleObject { Action = "RenameWishlist", Url = requestUri };

			var result = new Dictionary<string, string>();

			var wishlist = GetOrCreateWishlist(requestParameters);
			var newWishlistName = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "newwishlistname");

			if (wishlist != null && !string.IsNullOrEmpty(newWishlistName))
			{
				wishlist.Name = requestParameters[newWishlistName];
				wishlist.Save();

				Session.Add(Constants.WishlistRenameActionResult, BasketActionResult.Success);
				result.Add(Constants.WishlistRenameActionResult, BasketActionResult.Success.ToString());
				SetBasket(handleObject, wishlist);
				handleObject.Success = true;
			}
			else
			{
				Session.Add(Constants.WishlistRenameActionResult, BasketActionResult.Failed);
				result.Add(Constants.WishlistRenameActionResult, BasketActionResult.Failed.ToString());
				handleObject.Success = false;
			}

			handleObject.Messages = result;
			return handleObject;
		}
コード例 #18
0
		private HandleObject AccountSignOut(NameValueCollection requestParameters, Uri urlReferrer)
		{
			var handleObject = new HandleObject {Action = "AccountSignOut", Url = urlReferrer};
			var result = new Dictionary<string, string>();
			FormsAuthentication.SignOut();

			Session.Add(Constants.SignOutMemberSessionKey, AccountActionResult.Success);

			result.Add(Constants.SignOutMemberSessionKey, AccountActionResult.Success.ToString());

			Session.Remove(Constants.SignInMemberSessionKey);
			handleObject.Messages = result;
			handleObject.Success = true;

			return handleObject;
		}
コード例 #19
0
		internal HandleObject WishlistRemove(NameValueCollection requestParameters, Uri requestUri)
		{
			var handleObject = new HandleObject { Action = "RemoveWishlist", Url = requestUri };

			var wishlist = GetOrCreateWishlist(requestParameters);

			var result = new Dictionary<string, string>();
			if (wishlist != null)
			{
				wishlist.Status = OrderStatus.Incomplete;
				wishlist.Name = string.Empty;
				wishlist.CustomerInfo.CustomerId = 0;
				wishlist.CustomerInfo.LoginName = string.Empty;
				wishlist.Save();

				Session.Add(Constants.WishlistRemoveActionResult, BasketActionResult.Success);
				result.Add(Constants.WishlistRemoveActionResult, BasketActionResult.Success.ToString());
				handleObject.Success = true;
			}
			else
			{
				Session.Add(Constants.WishlistRemoveActionResult, BasketActionResult.Failed);
				result.Add(Constants.WishlistRemoveActionResult, BasketActionResult.Failed.ToString());
				handleObject.Success = false;
			}

			handleObject.Messages = result;
			return handleObject;
		}
コード例 #20
0
		private HandleObject AccountCreate(NameValueCollection requestParameters, Uri urlReferrer)
		{
			var handleObject = new HandleObject { Action = "CreateAccount", Url = urlReferrer };

			var userKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "username") ?? requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "customeremail");

			var passwordKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "password");

			var validatePasswordKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "validatepassword");

			var generatePasswordKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "generatepassword");

			// when doing a one-page checkout, you might not want to cancel the confirmation when the member already exists
			var ignoreMemberexistsError = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "ignorememberexistserror");

			var ignoreMemberexistsValue = requestParameters[ignoreMemberexistsError];

			var ignoreMemberexists = ignoreMemberexistsValue != null && (ignoreMemberexistsValue.ToLower() == "true" ||
																		 ignoreMemberexistsValue.ToLower() == "ignorememberexistserror" ||
																		 ignoreMemberexistsValue.ToLower() == "on" ||
																		 ignoreMemberexistsValue == "1") || Membership.GetUser() != null;

			var userName = requestParameters[userKey];

			if (userName == null)
			{
				var order = OrderHelper.GetOrder();

				if (order != null)
				{
					userName = order.CustomerEmail;
				}
			}

			var result = new Dictionary<string, string>();

			if (userName == null)
			{
				Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.NoUserNameInput);
				result.Add(Constants.CreateMemberSessionKey, AccountActionResult.NoUserNameInput.ToString());
				handleObject.Success = false;
				handleObject.Validated = false;
				handleObject.Messages = result;
				return handleObject;
			}

			if (!Regex.IsMatch(userName, "\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b", RegexOptions.IgnoreCase))
			{
				Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.UserNameInvalid);
				result.Add(Constants.CreateMemberSessionKey, AccountActionResult.UserNameInvalid.ToString());
				handleObject.Success = false;
				handleObject.Validated = false;
				handleObject.Messages = result;
				return handleObject;
			}

			string passwordValue = requestParameters[passwordKey];
			string validatePasswordValue = requestParameters[validatePasswordKey];
			string generatePasswordValue = requestParameters[generatePasswordKey];

			if (string.IsNullOrEmpty(generatePasswordValue) && !string.IsNullOrEmpty(passwordValue))
			{
				if (passwordValue == validatePasswordValue)
				{
					if (Membership.MinRequiredPasswordLength > 0)
					{
						if (passwordValue.Length < Membership.MinRequiredPasswordLength)
						{
							Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.MinRequiredPasswordLengthError);
							Log.Instance.LogDebug("MinRequiredPasswordLengthError");
							result.Add(Constants.CreateMemberSessionKey,
								AccountActionResult.MinRequiredPasswordLengthError.ToString());
							handleObject.Success = false;
							handleObject.Validated = false;
							handleObject.Messages = result;
							return handleObject;
						}
					}

					if (!string.IsNullOrEmpty(Membership.PasswordStrengthRegularExpression))
					{
						if (!Regex.IsMatch(passwordValue, Membership.PasswordStrengthRegularExpression))
						{
							Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.PasswordStrengthRegularExpressionError);
							Log.Instance.LogDebug("PasswordStrengthRegularExpression");
							result.Add(Constants.CreateMemberSessionKey,
								AccountActionResult.PasswordStrengthRegularExpressionError.ToString());
							handleObject.Success = false;
							handleObject.Validated = false;
							handleObject.Messages = result;
							return handleObject;
						}
					}

					if (Membership.MinRequiredNonAlphanumericCharacters > 0)
					{
						int num = passwordValue.Where((t, i) => !char.IsLetterOrDigit(passwordValue, i)).Count();

						if (num < Membership.MinRequiredNonAlphanumericCharacters)
						{
							Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.MinRequiredNonAlphanumericCharactersError);
							Log.Instance.LogDebug("MinRequiredNonAlphanumericCharacters");
							result.Add(Constants.CreateMemberSessionKey,
								AccountActionResult.MinRequiredNonAlphanumericCharactersError.ToString());
							handleObject.Success = false;
							handleObject.Validated = false;
							handleObject.Messages = result;
							return handleObject;
						}
					}
				}
				else
				{
					Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.PasswordMismatch);
					Log.Instance.LogDebug("PasswordMismatch");
					result.Add(Constants.CreateMemberSessionKey, AccountActionResult.PasswordMismatch.ToString());
					handleObject.Success = false;
					handleObject.Validated = false;
					handleObject.Messages = result;
					return handleObject;
				}
			}
			else
			{
				passwordValue = Membership.GeneratePassword(Membership.MinRequiredPasswordLength, Membership.MinRequiredNonAlphanumericCharacters);
			}

			var webConfig = new XmlDocument();
			webConfig.Load(HttpContext.Current.Server.MapPath("~/web.config"));

			var umbracoDefaultMemberTypeAlias = webConfig.SelectSingleNode("//add[@defaultMemberTypeAlias]");

			var memberTypes = IO.Container.Resolve<ICMSApplication>().GetAllMemberTypes();

			if (umbracoDefaultMemberTypeAlias == null || umbracoDefaultMemberTypeAlias.Attributes == null)
			{
				Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.DefaultMemberTypeAliasError);
				Log.Instance.LogError("AccountCreate: DefaultMemberTypeAliasError");
				result.Add(Constants.CreateMemberSessionKey,
					AccountActionResult.DefaultMemberTypeAliasError.ToString());
				handleObject.Success = false;
				handleObject.Validated = false;
				handleObject.Messages = result;
				return handleObject;
			}
			string memberTypevalue = umbracoDefaultMemberTypeAlias.Attributes["defaultMemberTypeAlias"].Value;

			if (memberTypes.All(x => x.Alias != memberTypevalue))
			{
				Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.DefaultMemberTypeAliasNonExistingError);
				Log.Instance.LogError("AccountCreate: DefaultMemberTypeAliasNonExistingError");
				result.Add(Constants.CreateMemberSessionKey, AccountActionResult.DefaultMemberTypeAliasNonExistingError.ToString());
				handleObject.Success = false;
				handleObject.Validated = false;
				handleObject.Messages = result;
				return handleObject;
			}
			if (string.IsNullOrEmpty(userName))
			{
				Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.CustomerEmailEmpty);
				Log.Instance.LogError("AccountCreate: Username empty");
				result.Add(Constants.CreateMemberSessionKey, AccountActionResult.CustomerEmailEmpty.ToString());
				handleObject.Success = false;
				handleObject.Validated = false;
				handleObject.Messages = result;
				return handleObject;
			}

			var member = Membership.GetUser(userName);

			if (member != null && !ignoreMemberexists)
			{
				Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.MemberExists);
				Log.Instance.LogError("AccountCreate: MemberExists username: "******"AccountCreate: MemberExists username: "******" BUT Ignore Member Exists");
				handleObject.Success = true;
				handleObject.Validated = true;
				Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.SuccessMemberExists);
				result.Add(Constants.CreateMemberSessionKey, AccountActionResult.SuccessMemberExists.ToString());
			}

			if (member == null)
			{
				var membershipUser = Membership.CreateUser(userName, passwordValue, userName);

				string roleKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "membergroup");
				string roleValue = requestParameters[roleKey];

				if (!string.IsNullOrEmpty(roleValue))
				{
					if (Roles.RoleExists(roleValue))
					{
						Roles.AddUserToRole(membershipUser.UserName, roleValue);
					}
					else
					{
						Roles.CreateRole(roleValue);

						Roles.AddUserToRole(membershipUser.UserName, roleValue);
					}
				}
				else
				{
					if (!Roles.GetAllRoles().Any())
					{
						const string customersRole = "Customers";

						Roles.CreateRole(customersRole);

						Roles.AddUserToRole(membershipUser.UserName, customersRole);
					}
					else
					{
						Roles.AddUserToRole(membershipUser.UserName, Roles.GetAllRoles().First());
					}
				}

				var profile = ProfileBase.Create(userName);

				foreach (var prop in ProfileBase.Properties)
				{
					try
					{
						var settingsProperty = (SettingsProperty)prop;

						string settingsPropertyName = settingsProperty.Name;

						if (!string.IsNullOrEmpty(requestParameters[settingsPropertyName]))
						{
							profile[settingsPropertyName] = requestParameters[settingsPropertyName];
						}
					}
					catch
					{
						var settingsProperty = (SettingsProperty)prop;

						Log.Instance.LogDebug(
							string.Format("UpdateAccount Failed for Request Property: {0}, currentNodeId: {1}",
								settingsProperty.Name, IO.Container.Resolve<ICMSApplication>().CurrentNodeId()));
					}
				}

				profile.Save();
				handleObject.Item = profile;
				FormsAuthentication.SetAuthCookie(userName, true);

				var currentStore = StoreHelper.GetById(StoreHelper.GetCurrentStore().Id);

				if (string.IsNullOrEmpty(currentStore.AccountCreatedEmail))
				{
					Log.Instance.LogError("CreateAccount: AccountCreatedEmail not set: No email send to customer");
					handleObject.Messages = result;

					handleObject.Success = true;
					handleObject.Validated = true;
				}
				else
				{
					var emailNodeId = Convert.ToInt32(currentStore.AccountCreatedEmail);
					EmailHelper.SendMemberEmailCustomer(emailNodeId, currentStore, userName, passwordValue);

					handleObject.Success = true;
					handleObject.Validated = true;
				}

				if (Session[Constants.CreateMemberSessionKey] == null)
				{
					Session.Add(Constants.CreateMemberSessionKey, AccountActionResult.Success);
				}
				if (!result.ContainsKey(Constants.CreateMemberSessionKey))
				{
					result.Add(Constants.CreateMemberSessionKey, AccountActionResult.Success.ToString());
				}
			}

			handleObject.Messages = result;
			return handleObject;
		}
コード例 #21
0
		private HandleObject AccountRequestPassword(NameValueCollection requestParameters, Uri urlReferrer)
		{
			var handleObject = new HandleObject { Action = "RequestPassword", Url = urlReferrer };

			string userNameKey = requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "username") ?? requestParameters.AllKeys.FirstOrDefault(x => x.ToLower() == "customeremail"); //requestParameters["customerEmail"];
			string userNameValue = requestParameters[userNameKey];

			var result = new Dictionary<string, string>();

			if (string.IsNullOrEmpty(userNameValue))
			{
				Session.Add(Constants.RequestPasswordSessionKey, AccountActionResult.CustomerUserNameEmpty);
				result.Add(Constants.RequestPasswordSessionKey, AccountActionResult.CustomerUserNameEmpty.ToString());
				handleObject.Messages = result;
				handleObject.Success = false;
				return handleObject;
			}

			var currentStore = StoreHelper.GetById(StoreHelper.GetCurrentStore().Id);

			if (string.IsNullOrEmpty(currentStore.AccountForgotPasswordEmail))
			{
				Session.Add(Constants.RequestPasswordSessionKey, AccountActionResult.AccountForgotPasswordEmailNotConfigured);
				result.Add(Constants.RequestPasswordSessionKey, AccountActionResult.AccountForgotPasswordEmailNotConfigured.ToString());
				handleObject.Messages = result;
				handleObject.Success = false;
				return handleObject;
			}
			int emailNodeId = Convert.ToInt32(currentStore.AccountForgotPasswordEmail);

			MembershipUser user = Membership.GetUser(userNameValue);


			if (user == null)
			{
				Session.Add(Constants.RequestPasswordSessionKey, AccountActionResult.MemberNotExists);
				result.Add(Constants.RequestPasswordSessionKey, AccountActionResult.MemberNotExists.ToString());
				handleObject.Success = false;
				handleObject.Messages = result;
				return handleObject;
			}


			if (!Membership.EnablePasswordReset)
			{
				Session.Add(Constants.RequestPasswordSessionKey, AccountActionResult.EnablePasswordResetDisabled);
				result.Add(Constants.RequestPasswordSessionKey, AccountActionResult.EnablePasswordResetDisabled.ToString());
				handleObject.Success = false;
				handleObject.Messages = result;
				return handleObject;
			}

			string resetPassword = user.ResetPassword();

			string newPassword = Membership.GeneratePassword(Membership.MinRequiredPasswordLength, Membership.MinRequiredNonAlphanumericCharacters);

			if (user.ChangePassword(resetPassword, newPassword))
			{
				EmailHelper.SendMemberEmailCustomer(emailNodeId, currentStore, userNameValue, newPassword);
				Session.Add(Constants.RequestPasswordSessionKey, AccountActionResult.Success);
				result.Add(Constants.RequestPasswordSessionKey, AccountActionResult.Success.ToString());
				handleObject.Success = true;
				handleObject.Messages = result;
				handleObject.Validated = true;
				return handleObject;
			}

			Session.Add(Constants.RequestPasswordSessionKey, AccountActionResult.ChangePasswordError);
			result.Add(Constants.RequestPasswordSessionKey, AccountActionResult.ChangePasswordError.ToString());
			handleObject.Success = false;
			handleObject.Messages = result;
			return handleObject;
		}