Exemplo n.º 1
0
        /// <summary>
        /// Create new Registration
        /// </summary>
        public object Post(Registration request)
        {
            if (EndpointHost.RequestFilters == null ||
                !EndpointHost.RequestFilters.Contains(ValidationFilters.RequestFilter))    //Already gets run
            {
                RegistrationValidator.ValidateAndThrow(request, ApplyTo.Post);
            }

            AssertUserAuthRepo();

            if (ValidateFn != null)
            {
                var validateResponse = ValidateFn(this, HttpMethods.Post, request);
                if (validateResponse != null)
                {
                    return(validateResponse);
                }
            }

            RegistrationResponse response = null;
            var session      = this.GetSession();
            var newUserAuth  = ToUserAuth(request);
            var existingUser = UserAuthRepo.GetUserAuth(session, null);

            var registerNewUser = existingUser == null;
            var user            = registerNewUser
                ? this.UserAuthRepo.CreateUserAuth(newUserAuth, request.Password)
                : this.UserAuthRepo.UpdateUserAuth(existingUser, newUserAuth, request.Password);

            if (registerNewUser)
            {
                session.OnRegistered(this);
            }

            if (request.AutoLogin.GetValueOrDefault())
            {
                using (var authService = base.ResolveService <AuthService>())
                {
                    var authResponse = authService.Post(new Auth {
                        UserName = request.UserName ?? request.Email,
                        Password = request.Password,
                        Continue = request.Continue
                    });

                    if (authResponse is IHttpError)
                    {
                        throw (Exception)authResponse;
                    }

                    var typedResponse = authResponse as AuthResponse;
                    if (typedResponse != null)
                    {
                        response = new RegistrationResponse {
                            SessionId   = typedResponse.SessionId,
                            UserName    = typedResponse.UserName,
                            ReferrerUrl = typedResponse.ReferrerUrl,
                            UserId      = user.Id.ToString(CultureInfo.InvariantCulture),
                        };
                    }
                }
            }

            if (response == null)
            {
                response = new RegistrationResponse {
                    UserId      = user.Id.ToString(CultureInfo.InvariantCulture),
                    ReferrerUrl = request.Continue
                };
            }

            var isHtml = base.RequestContext.ResponseContentType.MatchesContentType(ContentType.Html);

            if (isHtml)
            {
                if (string.IsNullOrEmpty(request.Continue))
                {
                    return(response);
                }

                return(new HttpResult(response)
                {
                    Location = request.Continue
                });
            }

            return(response);
        }
        /// <summary>
        /// Create new Registration
        /// </summary>
        public object Post(Registration request)
        {
            if (!ValidationFeature.Enabled) //Already gets run
            {
                RegistrationValidator.ValidateAndThrow(request, ApplyTo.Post);
            }

            AssertUserAuthRepo();

            if (ValidateFn != null)
            {
                var validateResponse = ValidateFn(this, HttpMethods.Post, request);
                if (validateResponse != null)
                {
                    return(validateResponse);
                }
            }

            RegistrationResponse response = null;
            var session      = this.GetSession();
            var newUserAuth  = ToUserAuth(request);
            var existingUser = UserAuthRepo.GetUserAuth(session, null);

            var user = existingUser != null
                ? this.UserAuthRepo.UpdateUserAuth(existingUser, newUserAuth, request.Password)
                : this.UserAuthRepo.CreateUserAuth(newUserAuth, request.Password);

            if (request.AutoLogin.GetValueOrDefault())
            {
                var authService  = base.ResolveService <AuthService>();
                var authResponse = authService.Post(new Auth {
                    UserName = request.UserName ?? request.Email,
                    Password = request.Password
                });

                if (authResponse is IHttpError)
                {
                    throw (Exception)authResponse;
                }

                var typedResponse = authResponse as AuthResponse;
                if (typedResponse != null)
                {
                    response = new RegistrationResponse {
                        SessionId   = typedResponse.SessionId,
                        UserName    = typedResponse.UserName,
                        ReferrerUrl = typedResponse.ReferrerUrl,
                        UserId      = user.Id.ToString(CultureInfo.InvariantCulture),
                    };
                }
            }

            if (response == null)
            {
                response = new RegistrationResponse {
                    UserId = user.Id.ToString(CultureInfo.InvariantCulture),
                };
            }

            if (request.Continue == null)
            {
                return(response);
            }

            return(new HttpResult(response)
            {
                Location = request.Continue
            });
        }