/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.web.analytics.rest; import java.security.Principal; import java.util.List; import javax.ws.rs.core.MultivaluedMap; import com.opengamma.util.rest.HttpMethodFilter; import com.opengamma.web.analytics.push.LongPollingServlet; import com.sun.jersey.api.core.ExtendedUriInfo; import com.sun.jersey.api.core.HttpContext; import com.sun.jersey.spi.container.ContainerRequest; /** * Helper methods for the subscription filters. */ /* package */ final class FilterUtils { private FilterUtils() { } /** * Returns the client ID from a request. See {@link HttpMethodFilter} for an explanation of why the client ID * handling is the way it is. * @param request The request * @param httpContext The HTTP context of the request * @return The client ID extracted from the request. For GET requests the ID comes from the {@code clientId} * query parameter and for POST requests it's a form parameter. * @see HttpMethodFilter */ /* package */ static String getClientId(ContainerRequest request, HttpContext httpContext) { List<String> clientIds = null; ExtendedUriInfo uriInfo = httpContext.getUriInfo(); // try to get the client ID from the query params (for a GET request) MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters(); clientIds = queryParameters.get(LongPollingServlet.CLIENT_ID); if (clientIds == null || clientIds.size() != 1) { // try to get the client ID from the form params (in case it's a POST request disguised as a GET) clientIds = httpContext.getRequest().getFormParameters().get(LongPollingServlet.CLIENT_ID, String.class); } if (clientIds == null || clientIds.size() != 1) { return null; } else { return clientIds.get(0); } } /** * Returns the user ID from a request's user principal. * TODO this doesn't do anything at the moment, we have no user logins * @param httpContext The HTTP context * @return The user ID from the request */ /* package */ static String getUserId(HttpContext httpContext) { Principal userPrincipal = httpContext.getRequest().getUserPrincipal(); if (userPrincipal == null) { // TODO reinstate this if / when we have user logins /*s_logger.debug("No user principal, not subscribing, url: {}", url); return response;*/ return null; } else { return userPrincipal.getName(); } } }