public virtual IHttpActionResult Register(RegisterRequest registerRequest)
        {
            //todo:  Captcha for bots or not?!
            if (registerRequest == null)
            {
                return(BadRequest("No body found in the request"));
            }

            var returnUrl = registerRequest.ReturnUrl;

            if (string.IsNullOrWhiteSpace(returnUrl) || !UrlFormatter.IsReturnUrlValid(RequestUtils.GetBaseUrl(Request).ToString(), returnUrl))
            {
                returnUrl = MyAccountUrlProvider.GetMyAccountUrl(new BaseUrlParameter
                {
                    CultureInfo = ComposerContext.CultureInfo
                });
            }

            var registerParam = new CreateUserParam
            {
                Username         = registerRequest.Username,
                Password         = registerRequest.Password,
                Email            = registerRequest.Email,
                FirstName        = registerRequest.FirstName,
                LastName         = registerRequest.LastName,
                PhoneNumber      = registerRequest.PhoneNumber,
                PasswordQuestion = registerRequest.PasswordQuestion,
                PasswordAnswer   = registerRequest.PasswordAnswer,
                ReturnUrl        = returnUrl,
                Scope            = ComposerContext.Scope,
                CultureInfo      = ComposerContext.CultureInfo,
                GuestCustomerId  = ComposerContext.CustomerId
            };

            var createAccountViewModel = MembershipViewService.RegisterAsync(registerParam).Result;

            if (!createAccountViewModel.IsSuccess)
            {
                return(Ok(createAccountViewModel));
            }

            var loginParam = new LoginParam
            {
                CultureInfo     = ComposerContext.CultureInfo,
                Scope           = ComposerContext.Scope,
                GuestCustomerId = ComposerContext.CustomerId,
                Username        = registerRequest.Email,
                Password        = registerRequest.Password
            };

            var loginViewModel = MembershipViewService.LoginAsync(loginParam).Result;

            ComposerContext.IsGuest    = false;
            ComposerContext.CustomerId = createAccountViewModel.CustomerId;
            FormsAuthentication.SetAuthCookie(createAccountViewModel.Username, true, WebsiteContext.WebsiteId.ToString());

            return(Ok(createAccountViewModel));
        }
        public virtual IHttpActionResult SignIn(LoginViewModel loginRequest)
        {
            if (loginRequest == null)
            {
                return(BadRequest("Request body cannot be null"));
            }

            var returnUrl = loginRequest.ReturnUrl;

            if (string.IsNullOrWhiteSpace(returnUrl) || !UrlFormatter.IsReturnUrlValid(RequestUtils.GetBaseUrl(Request).ToString(), returnUrl))
            {
                returnUrl = MyAccountUrlProvider.GetMyAccountUrl(new BaseUrlParameter
                {
                    CultureInfo = ComposerContext.CultureInfo
                });
            }

            var loginParam = new LoginParam
            {
                Password        = loginRequest.Password,
                Username        = loginRequest.Username,
                Scope           = ComposerContext.Scope,
                CultureInfo     = ComposerContext.CultureInfo,
                ReturnUrl       = returnUrl,
                GuestCustomerId = ComposerContext.CustomerId,
            };

            var loginViewModel = MembershipViewService.LoginAsync(loginParam).Result;

            if (!loginViewModel.IsSuccess)
            {
                return(Ok(loginViewModel));
            }

            ComposerContext.CustomerId = loginViewModel.CustomerId;
            ComposerContext.IsGuest    = false;

            if (loginRequest.IsRememberMe)
            {
                FormsAuthentication.SetAuthCookie(
                    loginViewModel.Username,
                    SiteConfiguration.CookieAccesserSettings.TimeoutInMinutes,
                    loginRequest.IsRememberMe,
                    WebsiteContext.WebsiteId.ToString(),
                    SiteConfiguration.CookieAccesserSettings.RequireSsl);
            }
            else
            {
                FormsAuthentication.SetAuthCookie(loginViewModel.Username, true, WebsiteContext.WebsiteId.ToString());
            }

            return(Ok(loginViewModel));
        }