73 lines
2.2 KiB
Java
73 lines
2.2 KiB
Java
// 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;
|
|
}
|
|
}
|
|
}
|