- /*
- * Copyright (C) 2009-2010, Google Inc. and others
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Distribution License v. 1.0 which is available at
- * https://www.eclipse.org/org/documents/edl-v10.php.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
- package org.eclipse.jgit.http.server.glue;
-
- import static java.lang.Integer.valueOf;
-
- import java.io.IOException;
- import java.text.MessageFormat;
-
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
-
- import org.eclipse.jgit.http.server.HttpServerText;
-
- /**
- * Switch servlet path and path info to use another regex match group.
- * <p>
- * This filter is meant to be installed in the middle of a pipeline created by
- * {@link org.eclipse.jgit.http.server.glue.MetaServlet#serveRegex(String)}. The
- * passed request's servlet path is updated to be all text up to the start of
- * the designated capture group, and the path info is changed to the contents of
- * the capture group.
- */
- public class RegexGroupFilter implements Filter {
- private final int groupIdx;
-
- /**
- * Constructor for RegexGroupFilter
- *
- * @param groupIdx
- * capture group number, 1 through the number of groups.
- */
- public RegexGroupFilter(int groupIdx) {
- if (groupIdx < 1)
- throw new IllegalArgumentException(MessageFormat.format(
- HttpServerText.get().invalidIndex, valueOf(groupIdx)));
- this.groupIdx = groupIdx - 1;
- }
-
- /** {@inheritDoc} */
- @Override
- public void init(FilterConfig config) throws ServletException {
- // Do nothing.
- }
-
- /** {@inheritDoc} */
- @Override
- public void destroy() {
- // Do nothing.
- }
-
- /** {@inheritDoc} */
- @Override
- public void doFilter(final ServletRequest request,
- final ServletResponse rsp, final FilterChain chain)
- throws IOException, ServletException {
- final WrappedRequest[] g = groupsFor(request);
- if (groupIdx < g.length)
- chain.doFilter(g[groupIdx], rsp);
- else
- throw new ServletException(MessageFormat.format(
- HttpServerText.get().invalidRegexGroup,
- valueOf(groupIdx + 1)));
- }
-
- private static WrappedRequest[] groupsFor(ServletRequest r) {
- return (WrappedRequest[]) r.getAttribute(MetaFilter.REGEX_GROUPS);
- }
- }
|