package com.sixsq.slipstream.metrics; import org.restlet.Context; import org.restlet.Request; import org.restlet.Response; import org.restlet.data.Reference; import org.restlet.data.Status; import org.restlet.routing.Redirector; public class GraphiteRedirector extends Redirector { public GraphiteRedirector(Context context, String targetPattern, int mode) { super(context, targetPattern, mode); } protected void outboundServerRedirect(Reference targetRef, Request request, Response response) { // Ensure all target parameter begins with 'slipstream.{username}' // to avoid any data leakage. String username = request.getClientInfo().getUser().getName(); String[] targets = request.getResourceRef().getQueryAsForm().getValuesArray("target"); for (String target : targets) { if (!target.replace("keepLastValue(", "").startsWith("slipstream." + username)) { response.setStatus(Status.CLIENT_ERROR_BAD_REQUEST, "target parameter must start with 'slipstream." + username + "'"); return; } } super.outboundServerRedirect(targetRef, request, response); } }