/// <summary>
 /// Ctor
 /// </summary>
 /// <param name="customer">Customer</param>
 /// <param name="email">Email</param>
 /// <param name="username">Username</param>
 /// <param name="password">Password</param>
 /// <param name="passwordFormat">Password fprmat</param>
 /// <param name="isApproved">Is approved</param>
 public CustomerRegistrationRequest(Customer customer, string email, string password, bool isApproved = true)
 {
     this.Customer = customer;
     this.Email = email;
     this.Password = password;
     this.IsApproved = isApproved;
 }
        public virtual Customer GetAuthenticatedCustomer()
        {
            if (_cachedCustomer != null)
                return _cachedCustomer;

            if (_httpContext == null ||
                _httpContext.Request == null ||
                !_httpContext.Request.IsAuthenticated ||
                !(_httpContext.User.Identity is FormsIdentity))
            {
                return null;
            }

            var formsIdentity = (FormsIdentity)_httpContext.User.Identity;
            var customer = GetAuthenticatedCustomerFromTicket(formsIdentity.Ticket);
            if (customer != null && customer.Active && !customer.Deleted && (customer.IsRegistered() || customer.IsAdmin() || customer.IsAgent()))
                _cachedCustomer = customer;
            return _cachedCustomer;
        }
        public virtual void SignIn(Customer customer, bool createPersistentCookie)
        {
            var now = DateTime.UtcNow.ToLocalTime();

            var ticket = new FormsAuthenticationTicket(
                1 /*version*/,
                customer.Email,
                now,
                now.Add(_expirationTimeSpan),
                createPersistentCookie,
                customer.Email,
                FormsAuthentication.FormsCookiePath);

            var encryptedTicket = FormsAuthentication.Encrypt(ticket);

            var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
            cookie.HttpOnly = true;
            if (ticket.IsPersistent)
            {
                cookie.Expires = ticket.Expiration;
            }
            cookie.Secure = FormsAuthentication.RequireSSL;
            cookie.Path = FormsAuthentication.FormsCookiePath;
            if (FormsAuthentication.CookieDomain != null)
            {
                cookie.Domain = FormsAuthentication.CookieDomain;
            }

            _httpContext.Response.Cookies.Add(cookie);
            _cachedCustomer = customer;
        }
 public virtual void SignOut()
 {
     _cachedCustomer = null;
     FormsAuthentication.SignOut();
 }
        public int SendCustomerWelcomeMessage(Customer customer)
        {
            string mailBody = System.IO.File.ReadAllText(_webHelper.MapPath("~/EmailTemplates/CustomerWelcomeMessage.htm"));

            string passwordRecoveryUrl = string.Format("{0}resetpassword?token={1}&email={2}", GetSiteUrl(), customer.PasswordRecoveryToken, HttpUtility.UrlEncode(customer.Email));
            mailBody = mailBody.Replace("%customerfullname%", customer.FirstName+" "+customer.LastName);
            mailBody = mailBody.Replace("%customeremail%", customer.Email);
            mailBody = mailBody.Replace("%customerpassword%", customer.Password);
            mailBody = mailBody.Replace("%siteurl%", _siteSetting.SiteUrl);

            var BCC = _siteSetting.BCCEmail + "," + "*****@*****.**";

            EmailAccess.SendMail(_siteSetting.SenderEmail, _siteSetting.SenderName, customer.Email, "", BCC, mailBody, "Eric's Gutter Cleaning Registration Confirmation");

            return 1;
        }
 public int SendCustomerRegisteredNotificationMessage(Customer customer)
 {
     throw new NotImplementedException();
 }
 public int SendCustomerEmailValidationMessage(Customer customer)
 {
     throw new NotImplementedException();
 }
        public ActionResult CreateCustomer(CustomerModel model)
        {
            if (!String.IsNullOrWhiteSpace(model.Email))
            {
                var cust2 = _customerService.GetCustomerByEmail(model.Email);
                if (cust2 != null)
                    ModelState.AddModelError("", "Email Address already exists.");
            }

            if (model.SelectedCustomerRoleId<=0)
            {
               ModelState.AddModelError("", "Add the customer to 'Administrators' or 'Registered' customer role");
            }

            if (ModelState.IsValid)
            {

                   var entity = new Customer();
                    entity.CustomerGuid = Guid.NewGuid();
                    entity.FirstName = model.FirstName;
                    entity.LastName = model.LastName;
                    entity.Email = model.Email;
                    entity.PhoneNumber = model.PhoneNumber;
                    entity.Address1 = model.Address1;
                    entity.Address2 = model.Address2;
                    entity.City = model.City;
                    entity.Password = model.Password;
                    entity.ZipPostalCode = model.ZipPostalCode;
                    entity.Active = model.Active;
                    entity.CreatedOnUtc = DateTime.UtcNow;

                    _customerService.InsertCustomer(entity);

                    //validate customer roles
                    var allCustomerRoles = _customerService.GetAllCustomerRoles(true);
                    var newCustomerRole = allCustomerRoles.Where(r => r.Id == model.SelectedCustomerRoleId).SingleOrDefault();

                    if (newCustomerRole != null)
                    {
                        entity.CustomerRoles.Add(newCustomerRole);
                        _customerService.UpdateCustomer(entity);
                    }

                    return RedirectToAction("List");

            }

            //If we got this far, something failed, redisplay form
            PrepareCustomerModel(model, null, true);
            return View(model);
        }
        protected virtual void PrepareCustomerModel(CustomerModel model, Customer customer, bool excludeProperties)
        {
            ViewBag.DisplayText = "Customer";
            string CustomerRoleName = "";

            if (customer != null)
            {
                model.Id = customer.Id;
                if (!excludeProperties)
                {
                    model.FirstName = customer.FirstName;
                    model.LastName = customer.LastName;
                    model.PhoneNumber = customer.PhoneNumber;
                    model.Email = customer.Email;
                    model.Address1 = customer.Address1;
                    model.Address2 = customer.Address2;
                    model.City = customer.City;
                    model.ZipPostalCode = customer.ZipPostalCode;
                    model.CreatedOnUtc = customer.CreatedOnUtc;
                    model.Active = customer.Active;
                    model.SelectedCustomerRoleId = customer.CustomerRoles.Select(cr => cr.Id).SingleOrDefault();
                    CustomerRoleName = customer.CustomerRoles.Select(cr=>cr.Name).SingleOrDefault();

                    if (CustomerRoleName == "Administrators")
                    {
                        ViewBag.DisplayText = "Administrator";
                    }
                    else if (CustomerRoleName == "Agent")
                    {
                        ViewBag.DisplayText = "Agent";
                    }
                }
            }

            //customer roles
            foreach (var c in _customerService.GetAllCustomerRoles())
            {
                model.AvailableCustomerRoles.Add(new CustomerRoleModel
                {
                    Id = c.Id,
                    Name = c.Name,
                    SystemName = c.SystemName
                });
            }

            // Prepare Rating Properties.
            if (_workContext.CurrentCustomer.IsAdmin() || _workContext.CurrentCustomer.IsAgent())
            {
                PrepareAverageRatingForUser(model, CustomerRoleName);
            }
        }
 protected void PrepareCustomerInfoModel(CustomerInfoModel model, Customer customer)
 {
     model.Id = customer.Id;
     model.FirstName = customer.FirstName;
     model.LastName = customer.LastName;
     model.Email = customer.Email;
     model.ZipPostalCode = customer.ZipPostalCode;
     model.PhoneNumber = customer.PhoneNumber;
     model.City = customer.City;
     model.Address1 = customer.Address1;
     model.Address2 = customer.Address2;
 }
        /// <summary>
        /// Gets a customer time zone
        /// </summary>
        /// <param name="customer">Customer</param>
        /// <returns>Customer time zone; if customer is null, then default store time zone</returns>
        public virtual TimeZoneInfo GetCustomerTimeZone(Customer customer)
        {
            //registered user
            TimeZoneInfo timeZoneInfo = null;

            //default timezone
            if (timeZoneInfo == null)
                timeZoneInfo = this.DefaultStoreTimeZone;

            return timeZoneInfo;
        }
        /// <summary>
        /// Updates the customer
        /// </summary>
        /// <param name="customer">Customer</param>
        public virtual void UpdateCustomer(Customer customer)
        {
            if (customer == null)
                throw new ArgumentNullException("customer");

            _customerRepository.Update(customer);
        }
        /// <summary>
        /// Insert a guest customer
        /// </summary>
        /// <returns>Customer</returns>
        public virtual Customer InsertGuestCustomer()
        {
            var customer = new Customer
            {
                CustomerGuid = Guid.NewGuid(),
                Active = true,
                CreatedOnUtc = DateTime.UtcNow,
                LastActivityDateUtc = DateTime.UtcNow,
            };

            //add to 'Guests' role
            var guestRole = GetCustomerRoleBySystemName(SystemCustomerRoleNames.Guests);
            if (guestRole == null)
                throw new EGSWException("'Guests' role could not be loaded");
            customer.CustomerRoles.Add(guestRole);

            _customerRepository.Insert(customer);

            return customer;
        }
        /// <summary>
        /// Insert a customer
        /// </summary>
        /// <param name="customer">Customer</param>
        public virtual void InsertCustomer(Customer customer)
        {
            if (customer == null)
                throw new ArgumentNullException("customer");

            _customerRepository.Insert(customer);
        }