James Moger
2014-04-21 cf5db4cdca65f1f87a1b3b7f23437e9d26917f96
Allow filter extensions to define init parameters in IStoredSettings
1 files added
1 files modified
85 ■■■■■ changed files
src/main/java/com/gitblit/servlet/FilterRuntimeConfig.java 71 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/ProxyFilter.java 14 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/servlet/FilterRuntimeConfig.java
New file
@@ -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<String> getInitParameterNames() {
        return config.getInitParameterNames();
    }
}
src/main/java/com/gitblit/servlet/ProxyFilter.java
@@ -25,14 +25,17 @@
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 @@
    @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);
        }
    }