From cf5db4cdca65f1f87a1b3b7f23437e9d26917f96 Mon Sep 17 00:00:00 2001 From: James Moger Date: Mon, 21 Apr 2014 16:15:58 -0400 Subject: [PATCH] Allow filter extensions to define init parameters in IStoredSettings --- .../gitblit/servlet/FilterRuntimeConfig.java | 71 +++++++++++++++++++ .../java/com/gitblit/servlet/ProxyFilter.java | 14 +++- 2 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/gitblit/servlet/FilterRuntimeConfig.java diff --git a/src/main/java/com/gitblit/servlet/FilterRuntimeConfig.java b/src/main/java/com/gitblit/servlet/FilterRuntimeConfig.java new file mode 100644 index 00000000..9f0c0ac5 --- /dev/null +++ b/src/main/java/com/gitblit/servlet/FilterRuntimeConfig.java @@ -0,0 +1,71 @@ +/* + * Copyright 2014 gitblit.com. + * + * 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.gitblit.servlet; + +import java.util.Enumeration; + +import javax.servlet.FilterConfig; +import javax.servlet.ServletContext; + +import com.gitblit.IStoredSettings; +import com.gitblit.manager.IRuntimeManager; + +/** + * Wraps a filter config and will prefer a setting retrieved from IStoredSettings + * if one is available. + * + * @author James Moger + * @since 1.6.0 + */ +public class FilterRuntimeConfig implements FilterConfig { + + final IRuntimeManager runtime; + final IStoredSettings settings; + final String namespace; + final FilterConfig config; + + public FilterRuntimeConfig(IRuntimeManager runtime, String namespace, FilterConfig config) { + this.runtime = runtime; + this.settings = runtime.getSettings(); + this.namespace = namespace; + this.config = config; + } + + @Override + public String getFilterName() { + return config.getFilterName(); + } + + @Override + public ServletContext getServletContext() { + return config.getServletContext(); + } + + @Override + public String getInitParameter(String name) { + String key = namespace + "." + name; + if (settings.hasSettings(key)) { + String value = settings.getString(key, null); + return value; + } + return config.getInitParameter(name); + } + + @Override + public Enumeration getInitParameterNames() { + return config.getInitParameterNames(); + } +} diff --git a/src/main/java/com/gitblit/servlet/ProxyFilter.java b/src/main/java/com/gitblit/servlet/ProxyFilter.java index bfdc87f3..46f59de9 100644 --- a/src/main/java/com/gitblit/servlet/ProxyFilter.java +++ b/src/main/java/com/gitblit/servlet/ProxyFilter.java @@ -25,14 +25,17 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; +import ro.fortsoft.pf4j.PluginWrapper; + import com.gitblit.dagger.DaggerFilter; import com.gitblit.extensions.HttpRequestFilter; import com.gitblit.manager.IPluginManager; +import com.gitblit.manager.IRuntimeManager; import dagger.ObjectGraph; /** - * A request filter than allows regsitered extension request filters to access + * A request filter than allows registered extension request filters to access * request data. The intended purpose is for server monitoring plugins. * * @author David Ostrovsky @@ -43,10 +46,17 @@ public class ProxyFilter extends DaggerFilter { @Override protected void inject(ObjectGraph dagger, FilterConfig filterConfig) throws ServletException { + IRuntimeManager runtimeManager = dagger.get(IRuntimeManager.class); IPluginManager pluginManager = dagger.get(IPluginManager.class); + filters = pluginManager.getExtensions(HttpRequestFilter.class); for (HttpRequestFilter f : filters) { - f.init(filterConfig); + // wrap the filter config for Gitblit settings retrieval + PluginWrapper pluginWrapper = pluginManager.whichPlugin(f.getClass()); + FilterConfig runtimeConfig = new FilterRuntimeConfig(runtimeManager, + pluginWrapper.getPluginId(), filterConfig); + + f.init(runtimeConfig); } } -- 2.39.5