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); } }
public MemberApiProxyException(MemberApiException exception, HttpStatusCode code) : base(exception.ErrorMessage) { StatusCode = code; Exception = exception; }
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 }); }