示例#1
0
        private static void ExceptionalScenarioHandler <T>(HttpResponseMessage result)
        {
            if (result.StatusCode == HttpStatusCode.NotFound)
            {
                var apiException =
                    new MemberApiException
                {
                    ErrorMessage = "Method not found"
                };
                throw new MemberApiProxyException(apiException, result.StatusCode);
            }
            else if (result.StatusCode == HttpStatusCode.Unauthorized)
            {
                var details = result.Content.ReadAsAsync <UnauthorizedDetails>().Result;
                MemberApiException apiException;
                try
                {
                    apiException = JsonConvert.DeserializeObject <MemberApiException>(details.error_description);
                }
                catch
                {
                    apiException = new MemberApiException
                    {
                        ErrorMessage = HttpStatusCode.Unauthorized.ToString()
                    };
                }
                throw new MemberApiProxyException(apiException, result.StatusCode);
            }
            else if (result.StatusCode == HttpStatusCode.BadRequest)
            {
                var error = result.Content.ReadAsAsync <HttpError>().Result;

                if (!error.HasValidationErrors())
                {
                    throw new Exceptions.MemberApiException(error.Message, result.StatusCode);
                }

                var validationErrors = error.GetValidationErrors();

                throw new MemberApiValidationException(validationErrors);
            }
            else
            {
                var apiException = result.Content.ReadAsAsync <MemberApiException>().Result;
                throw new MemberApiProxyException(apiException, result.StatusCode);
            }
        }
示例#2
0
 public MemberApiProxyException(MemberApiException exception, HttpStatusCode code) : base(exception.ErrorMessage)
 {
     StatusCode = code;
     Exception  = exception;
 }
示例#3
0
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-CA");

            // read additional data from the request body
            var requestData = await context.Request.ReadFormAsync();

            var brandId     = Guid.Parse(requestData["BrandId"]);
            var ipAddress   = requestData["IpAddress"];
            var jsonHeaders = requestData["BrowserHeaders"];

            var headers = string.IsNullOrWhiteSpace(jsonHeaders)
                ? new Dictionary <string, string>()
                : JsonConvert.DeserializeObject <Dictionary <string, string> >(jsonHeaders);

            MemberApiException exception;

            try
            {
                var loginContext = new LoginRequestContext
                {
                    BrandId        = brandId,
                    IpAddress      = ipAddress,
                    BrowserHeaders = headers
                };
                var validationResult = _container.Resolve <PlayerCommands>().Login(context.UserName, context.Password, loginContext);

                if (validationResult.IsValid)
                {
                    var player   = _container.Resolve <IPlayerRepository>().Players.Single(p => p.Username == context.UserName);
                    var identity = _container.Resolve <ClaimsIdentityProvider>().GetActorIdentity(player.Id, context.Options.AuthenticationType);

                    context.Validated(identity);
                    context.Request.Context.Authentication.SignIn(identity);
                    return;
                }

                exception = new MemberApiException
                {
                    ErrorCode    = validationResult.Errors[0].ErrorMessage,
                    ErrorMessage = validationResult.Errors[0].ErrorMessage,
                    Violations   = validationResult.Errors.Select(
                        x => new ValidationErrorField
                    {
                        ErrorCode    = x.ErrorCode,
                        ErrorMessage = x.ErrorMessage,
                        FieldName    = x.PropertyName,
                        Params       = x.FormattedMessageArguments
                    }
                        ).ToList()
                };
            }
            catch (Exception ex)
            {
                exception = new MemberApiException
                {
                    ErrorCode    = ex.Message,
                    ErrorMessage = ex.Message,
                    Violations   = new []
                    {
                        new ValidationErrorField
                        {
                            ErrorCode    = ex.Message,
                            ErrorMessage = ex.Message,
                            FieldName    = string.Empty
                        }
                    }
                };
            }
            context.Rejected();

            var sError = JsonConvert.SerializeObject(exception);

            context.SetError("Login error", sError);
            context.Response.Headers.Add(InvalidLoginOwinMiddleware.InvalidLoginHeader, new[] { sError });
        }