| // Copyright (C) 2014 The Android Open Source Project | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License.package com.google.gerrit.httpd.plugins; | |
| package com.google.gerrit.httpd.plugins; | |
| import com.google.common.base.Strings; | |
| import javax.servlet.http.HttpServletRequest; | |
| import javax.servlet.http.HttpServletRequestWrapper; | |
| class ContextMapper { | |
| private static final String PLUGINS_PREFIX = "/plugins/"; | |
| private static final String AUTHORIZED_PREFIX = "/a" + PLUGINS_PREFIX; | |
| private final String base; | |
| private final String authorizedBase; | |
| ContextMapper(String contextPath) { | |
| base = Strings.nullToEmpty(contextPath) + PLUGINS_PREFIX; | |
| authorizedBase = Strings.nullToEmpty(contextPath) + AUTHORIZED_PREFIX; | |
| } | |
| private static boolean isAuthorizedCall(HttpServletRequest req) { | |
| return !Strings.isNullOrEmpty(req.getServletPath()) | |
| && req.getServletPath().startsWith(AUTHORIZED_PREFIX); | |
| } | |
| HttpServletRequest create(HttpServletRequest req, String name) { | |
| String contextPath = (isAuthorizedCall(req) ? authorizedBase : base) + name; | |
| return new WrappedRequest(req, contextPath); | |
| } | |
| public String getFullPath(String name) { | |
| return base + name; | |
| } | |
| private static class WrappedRequest extends HttpServletRequestWrapper { | |
| private final String contextPath; | |
| private final String pathInfo; | |
| private WrappedRequest(HttpServletRequest req, String contextPath) { | |
| super(req); | |
| this.contextPath = contextPath; | |
| this.pathInfo = getRequestURI().substring(contextPath.length()); | |
| } | |
| @Override | |
| public String getServletPath() { | |
| return ""; | |
| } | |
| @Override | |
| public String getContextPath() { | |
| return contextPath; | |
| } | |
| @Override | |
| public String getPathInfo() { | |
| return pathInfo; | |
| } | |
| } | |
| } |