blob: 6d10c0c238d4c252f58bf02aae72de1ef1b97601 [file] [log] [blame]
Dave Borowitz9de65952012-08-13 16:09:45 -07001// Copyright 2012 Google Inc. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package com.google.gitiles;
16
David Ostrovsky84286b72017-08-19 16:25:20 +020017import com.google.gitiles.blame.cache.BlameCache;
Dave Borowitz9de65952012-08-13 16:09:45 -070018import java.util.Enumeration;
Dave Borowitz03397692012-12-18 17:11:16 -080019import javax.annotation.Nullable;
Dave Borowitz9de65952012-08-13 16:09:45 -070020import javax.servlet.Filter;
21import javax.servlet.FilterConfig;
22import javax.servlet.ServletConfig;
23import javax.servlet.ServletContext;
24import javax.servlet.ServletException;
25import javax.servlet.http.HttpServlet;
26import javax.servlet.http.HttpServletRequest;
Dave Borowitz3b744b12016-08-19 16:11:10 -040027import org.eclipse.jgit.http.server.glue.MetaServlet;
28import org.eclipse.jgit.lib.Config;
29import org.eclipse.jgit.transport.resolver.RepositoryResolver;
Dave Borowitz9de65952012-08-13 16:09:45 -070030
31/**
32 * Servlet to serve Gitiles.
Dave Borowitz40255d52016-08-19 16:16:22 -040033 *
34 * <p>This servlet can either be constructed manually with its dependencies, or configured to use
35 * default implementations for the Gitiles interfaces. To configure the defaults, you must provide a
36 * single init parameter "configPath", which is the path to a git config file containing additional
Dave Borowitz9de65952012-08-13 16:09:45 -070037 * configuration.
38 */
39public class GitilesServlet extends MetaServlet {
Chad Horohoead23f142012-11-12 09:45:39 -080040 private static final long serialVersionUID = 1L;
41
Dave Borowitz9de65952012-08-13 16:09:45 -070042 /** The prefix from which static resources are served. */
43 public static final String STATIC_PREFIX = "/+static/";
44
Dave Borowitz03397692012-12-18 17:11:16 -080045 public GitilesServlet(
David Pursehouse49164f62013-10-02 18:13:33 +090046 Config config,
Dave Borowitz03397692012-12-18 17:11:16 -080047 @Nullable Renderer renderer,
48 @Nullable GitilesUrls urls,
49 @Nullable GitilesAccess.Factory accessFactory,
50 @Nullable RepositoryResolver<HttpServletRequest> resolver,
Dave Borowitz14ce8282012-12-20 14:08:25 -080051 @Nullable VisibilityCache visibilityCache,
Dave Borowitzd91bdf72013-01-10 20:07:32 -080052 @Nullable TimeCache timeCache,
Dave Borowitz86462df2014-02-03 14:23:57 -080053 @Nullable BlameCache blameCache,
Dave Borowitzd91bdf72013-01-10 20:07:32 -080054 @Nullable GitwebRedirectFilter gitwebRedirect) {
Masaya Suzukib53fc062019-03-25 13:35:07 -070055 this(
56 config,
57 renderer,
58 urls,
59 accessFactory,
60 resolver,
61 visibilityCache,
62 timeCache,
63 blameCache,
64 gitwebRedirect,
65 null);
66 }
67
68 public GitilesServlet(
69 Config config,
70 @Nullable Renderer renderer,
71 @Nullable GitilesUrls urls,
72 @Nullable GitilesAccess.Factory accessFactory,
73 @Nullable RepositoryResolver<HttpServletRequest> resolver,
74 @Nullable VisibilityCache visibilityCache,
75 @Nullable TimeCache timeCache,
76 @Nullable BlameCache blameCache,
77 @Nullable GitwebRedirectFilter gitwebRedirect,
78 @Nullable Filter errorHandler) {
Han-Wen Nienhuysc0200f62016-05-02 17:34:51 +020079 super(
80 new GitilesFilter(
81 config,
82 renderer,
83 urls,
84 accessFactory,
85 resolver,
86 visibilityCache,
87 timeCache,
88 blameCache,
Masaya Suzukib53fc062019-03-25 13:35:07 -070089 gitwebRedirect,
90 errorHandler));
Dave Borowitz9de65952012-08-13 16:09:45 -070091 }
92
93 public GitilesServlet() {
94 super(new GitilesFilter());
95 }
96
97 @Override
98 protected GitilesFilter getDelegateFilter() {
99 return (GitilesFilter) super.getDelegateFilter();
100 }
101
102 @Override
103 public void init(final ServletConfig config) throws ServletException {
Han-Wen Nienhuysc0200f62016-05-02 17:34:51 +0200104 getDelegateFilter()
105 .init(
106 new FilterConfig() {
107 @Override
108 public String getFilterName() {
109 return getDelegateFilter().getClass().getName();
110 }
Dave Borowitz9de65952012-08-13 16:09:45 -0700111
Han-Wen Nienhuysc0200f62016-05-02 17:34:51 +0200112 @Override
113 public String getInitParameter(String name) {
114 return config.getInitParameter(name);
115 }
Dave Borowitz9de65952012-08-13 16:09:45 -0700116
Han-Wen Nienhuysc0200f62016-05-02 17:34:51 +0200117 @SuppressWarnings("rawtypes")
118 @Override
119 public Enumeration getInitParameterNames() {
120 return config.getInitParameterNames();
121 }
Dave Borowitz9de65952012-08-13 16:09:45 -0700122
Han-Wen Nienhuysc0200f62016-05-02 17:34:51 +0200123 @Override
124 public ServletContext getServletContext() {
125 return config.getServletContext();
126 }
127 });
Dave Borowitz9de65952012-08-13 16:09:45 -0700128 }
129
130 /**
131 * Add a custom filter for a view.
Dave Borowitz40255d52016-08-19 16:16:22 -0400132 *
133 * <p>Must be called before initializing the servlet.
Dave Borowitz9de65952012-08-13 16:09:45 -0700134 *
135 * @param view view type.
136 * @param filter filter.
137 */
138 public void addFilter(GitilesView.Type view, Filter filter) {
139 getDelegateFilter().addFilter(view, filter);
140 }
141
142 /**
143 * Set a custom handler for a view.
Dave Borowitz40255d52016-08-19 16:16:22 -0400144 *
145 * <p>Must be called before initializing the servlet.
Dave Borowitz9de65952012-08-13 16:09:45 -0700146 *
147 * @param view view type.
148 * @param handler handler.
149 */
150 public void setHandler(GitilesView.Type view, HttpServlet handler) {
151 getDelegateFilter().setHandler(view, handler);
152 }
153
154 public BaseServlet getDefaultHandler(GitilesView.Type view) {
155 return getDelegateFilter().getDefaultHandler(view);
156 }
157}