diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /container-disc/src/main/java/com/yahoo/container/jdisc/FilterBindingsProvider.java |
Publish
Diffstat (limited to 'container-disc/src/main/java/com/yahoo/container/jdisc/FilterBindingsProvider.java')
-rw-r--r-- | container-disc/src/main/java/com/yahoo/container/jdisc/FilterBindingsProvider.java | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/container-disc/src/main/java/com/yahoo/container/jdisc/FilterBindingsProvider.java b/container-disc/src/main/java/com/yahoo/container/jdisc/FilterBindingsProvider.java new file mode 100644 index 00000000000..838593ab28a --- /dev/null +++ b/container-disc/src/main/java/com/yahoo/container/jdisc/FilterBindingsProvider.java @@ -0,0 +1,61 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.container.jdisc; + +import com.yahoo.component.ComponentId; +import com.yahoo.component.provider.ComponentRegistry; +import com.yahoo.container.di.componentgraph.Provider; +import com.yahoo.container.http.filter.FilterChainRepository; +import com.yahoo.jdisc.application.BindingRepository; +import com.yahoo.jdisc.http.ServerConfig; +import com.yahoo.jdisc.http.filter.RequestFilter; +import com.yahoo.jdisc.http.filter.ResponseFilter; +import com.yahoo.jdisc.http.filter.SecurityRequestFilter; +import com.yahoo.jdisc.http.server.FilterBindings; + +import java.util.ArrayList; +import java.util.List; + +/** + * Provides filter bindings based on vespa config. + * + * @author <a href="mailto:bakksjo@yahoo-inc.com">Oyvind Bakksjo</a> + */ +public class FilterBindingsProvider implements Provider<FilterBindings> { + final BindingRepository<RequestFilter> requestFilters = new BindingRepository<>(); + final BindingRepository<ResponseFilter> responseFilters = new BindingRepository<>(); + + public FilterBindingsProvider( + final ComponentId componentId, + final ServerConfig config, + final FilterChainRepository filterChainRepository, + final ComponentRegistry<SecurityRequestFilter> legacyRequestFilters) { + final ComponentId serverId = componentId.getNamespace(); + try { + FilterUtil.setupFilters( + componentId, + legacyRequestFilters, + toFilterSpecs(config.filter()), + filterChainRepository, + requestFilters, + responseFilters); + } catch (Exception e) { + throw new RuntimeException("Invalid config for http server " + serverId, e); + } + } + + private List<FilterUtil.FilterSpec> toFilterSpecs(List<ServerConfig.Filter> inFilters) { + List<FilterUtil.FilterSpec> outFilters = new ArrayList<>(); + for (ServerConfig.Filter inFilter : inFilters) { + outFilters.add(new FilterUtil.FilterSpec(inFilter.id(), inFilter.binding())); + } + return outFilters; + } + + @Override + public FilterBindings get() { + return new FilterBindings(requestFilters, responseFilters); + } + + @Override + public void deconstruct() {} +} |