summaryrefslogtreecommitdiffstats
path: root/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java')
-rw-r--r--gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java165
1 files changed, 0 insertions, 165 deletions
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java
deleted file mode 100644
index e13ea959d2..0000000000
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/plugins/LfsPluginServlet.java
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright (C) 2015 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;
-
-import static com.google.gerrit.extensions.api.lfs.LfsDefinitions.CONTENTTYPE_VND_GIT_LFS_JSON;
-import static java.nio.charset.StandardCharsets.UTF_8;
-import static javax.servlet.http.HttpServletResponse.SC_NOT_IMPLEMENTED;
-
-import com.google.gerrit.extensions.registration.RegistrationHandle;
-import com.google.gerrit.httpd.resources.Resource;
-import com.google.gerrit.server.config.GerritServerConfig;
-import com.google.gerrit.server.plugins.Plugin;
-import com.google.gerrit.server.plugins.ReloadPluginListener;
-import com.google.gerrit.server.plugins.StartPluginListener;
-import com.google.gwtexpui.server.CacheHeaders;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import com.google.inject.servlet.GuiceFilter;
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.eclipse.jgit.lib.Config;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Singleton
-public class LfsPluginServlet extends HttpServlet
- implements StartPluginListener, ReloadPluginListener {
- private static final long serialVersionUID = 1L;
- private static final Logger log = LoggerFactory.getLogger(LfsPluginServlet.class);
- private static final String MESSAGE_LFS_NOT_CONFIGURED =
- "{\"message\":\"No LFS plugin is configured to handle LFS requests.\"}";
-
- private List<Plugin> pending = new ArrayList<>();
- private final String pluginName;
- private final FilterChain chain;
- private AtomicReference<GuiceFilter> filter;
-
- @Inject
- LfsPluginServlet(@GerritServerConfig Config cfg) {
- this.pluginName = cfg.getString("lfs", null, "plugin");
- this.chain =
- new FilterChain() {
- @Override
- public void doFilter(ServletRequest req, ServletResponse res) throws IOException {
- Resource.NOT_FOUND.send((HttpServletRequest) req, (HttpServletResponse) res);
- }
- };
- this.filter = new AtomicReference<>();
- }
-
- @Override
- protected void service(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- if (filter.get() == null) {
- responseLfsNotConfigured(res);
- return;
- }
- filter.get().doFilter(req, res, chain);
- }
-
- @Override
- public synchronized void init(ServletConfig config) throws ServletException {
- super.init(config);
-
- for (Plugin plugin : pending) {
- install(plugin);
- }
- pending = null;
- }
-
- @Override
- public synchronized void onStartPlugin(Plugin plugin) {
- if (pending != null) {
- pending.add(plugin);
- } else {
- install(plugin);
- }
- }
-
- @Override
- public void onReloadPlugin(Plugin oldPlugin, Plugin newPlugin) {
- install(newPlugin);
- }
-
- private void responseLfsNotConfigured(HttpServletResponse res) throws IOException {
- CacheHeaders.setNotCacheable(res);
- res.setContentType(CONTENTTYPE_VND_GIT_LFS_JSON);
- res.setStatus(SC_NOT_IMPLEMENTED);
- Writer w = new BufferedWriter(new OutputStreamWriter(res.getOutputStream(), UTF_8));
- w.write(MESSAGE_LFS_NOT_CONFIGURED);
- w.flush();
- }
-
- private void install(Plugin plugin) {
- if (!plugin.getName().equals(pluginName)) {
- return;
- }
- final GuiceFilter guiceFilter = load(plugin);
- plugin.add(
- new RegistrationHandle() {
- @Override
- public void remove() {
- filter.compareAndSet(guiceFilter, null);
- }
- });
- filter.set(guiceFilter);
- }
-
- private GuiceFilter load(Plugin plugin) {
- if (plugin.getHttpInjector() != null) {
- final String name = plugin.getName();
- final GuiceFilter guiceFilter;
- try {
- guiceFilter = plugin.getHttpInjector().getInstance(GuiceFilter.class);
- } catch (RuntimeException e) {
- log.warn("Plugin {} cannot load GuiceFilter", name, e);
- return null;
- }
-
- try {
- ServletContext ctx = PluginServletContext.create(plugin, "/");
- guiceFilter.init(new WrappedFilterConfig(ctx));
- } catch (ServletException e) {
- log.warn("Plugin {} failed to initialize HTTP", name, e);
- return null;
- }
-
- plugin.add(
- new RegistrationHandle() {
- @Override
- public void remove() {
- guiceFilter.destroy();
- }
- });
- return guiceFilter;
- }
- return null;
- }
-}