public override void OnActionExecuting(HttpActionContext actionContext)
{
var apiBaseController = actionContext.ControllerContext.Controller as ApiControllerBase;
if (apiBaseController == null)
{
throw new InvalidOperationException("The ApiAuthentication attribute can only be applied to actions in an ApiController that extends ApiControllerBase.");
}
if (!actionContext.Request.Headers.Contains(AUTH_HEADER))
{
if (!AuthenticateOnly)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest,
ERROR_MESSAGE_MISSING_AUTH_TOKEN_HEADER);
}
return;
}
string authHeader = actionContext.Request.Headers.GetValues(AUTH_HEADER).FirstOrDefault();
if (string.IsNullOrWhiteSpace(authHeader))
{
if (!AuthenticateOnly)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest,
ERROR_MESSAGE_INVALID_AUTH_TOKEN);
}
return;
}
ApplicationUser applicationUser = _authTokenValidator.ValidateAuthToken(authHeader);
if (applicationUser == null)
{
if (!AuthenticateOnly)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.Unauthorized,
ERROR_MESSAGE_INVALID_AUTH_TOKEN);
}
return;
}
if (actionContext.ActionArguments.ContainsKey(PARAMETER_NAME_GAMING_GROUP_ID) &&
(int)actionContext.ActionArguments[PARAMETER_NAME_GAMING_GROUP_ID] != applicationUser.CurrentGamingGroupId)
{
if (!AuthenticateOnly)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.Unauthorized,
string.Format(ERROR_MESSAGE_UNAUTHORIZED_TO_GAMING_GROUP,
actionContext.ActionArguments[PARAMETER_NAME_GAMING_GROUP_ID]));
return;
}
}
applicationUser.AnonymousClientId = _clientIdCalculator.GetClientId(actionContext.Request, applicationUser);
apiBaseController.CurrentUser = applicationUser;
}