public async Task Invoke(HttpContext context, IOAuthHandler handler, IJsonObjectWriter objectWriter) { Ensure.IsNotNull(context, nameof(context)); Ensure.IsNotNull(handler, nameof(handler)); Ensure.IsNotNull(objectWriter, nameof(objectWriter)); if (context.Request.Path == options.TokenEndpointPath) { if (!context.Request.Method.Equals("POST", StringComparison.OrdinalIgnoreCase)) { WriteResult(context, objectWriter, OAuthResult.InvalidRequest("Token request should use 'POST' method.")); return; } if (context.Request.ContentType == null) { WriteResult(context, objectWriter, OAuthResult.InvalidRequest("Token request should specify Content-Type.")); return; } if (!context.Request.ContentType.StartsWith("application/x-www-form-urlencoded", StringComparison.OrdinalIgnoreCase)) { WriteResult(context, objectWriter, OAuthResult.InvalidRequest("Token request should use 'application/x-www-form-urlencoded' Content-Type.")); return; } var form = await context.Request.ReadFormAsync(); if (form == null) { WriteResult(context, objectWriter, OAuthResult.InvalidRequest("Token request should use 'application/x-www-form-urlencoded' Content-Type.")); return; } foreach (var pair in form) { if (pair.Value.Count > 1) { WriteResult(context, objectWriter, OAuthResult.InvalidRequest($"The '{pair.Key}' parameter is repeated.")); return; } } var result = await handler.HandleTokenRequestAsync(new OAuthTokenRequest(form)); if (result != null) { WriteResult(context, objectWriter, result); } else { WriteResult(context, objectWriter, OAuthResult.ServerError("Token request was unhandled.")); } } else { await next(context); } }
public UsersController(IOAuthHandler authHandler, IMembershipService membershipService, IApiErrorHandler apiErrorHandler) { _authHandler = authHandler; _membershipService = membershipService; _apiErrorHandler = apiErrorHandler; }
public static void RegisterHandler <TContent>(this HandlerController controller, IOAuthHandler <TContent> handler) where TContent : ContextBase { controller.Controller.Add(typeof(TContent), handler); }