aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorMorten Tokle <mortent@verizonmedia.com>2021-04-16 14:23:33 +0200
committerGitHub <noreply@github.com>2021-04-16 14:23:33 +0200
commitb5ef9172e7ba9a4dc4429918e1ae2fc26444ce33 (patch)
tree16d88702fe9fde02d5005cbd1f0ce8ecce5d18e8 /container-search
parent95162715532714931a379f35f29fba6836e57daa (diff)
parent852ae37871cc7db3447dbfc8ddea5157b6a81d4d (diff)
Merge pull request #17440 from vespa-engine/mortent/custom-acl-mapping
Custom acl mapping
Diffstat (limited to 'container-search')
-rw-r--r--container-search/abi-spec.json9
-rw-r--r--container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java27
2 files changed, 32 insertions, 4 deletions
diff --git a/container-search/abi-spec.json b/container-search/abi-spec.json
index 75b8814ecb0..b5933936adf 100644
--- a/container-search/abi-spec.json
+++ b/container-search/abi-spec.json
@@ -1642,13 +1642,13 @@
"final"
],
"methods": [
+ "public void <init>()",
+ "public void <init>(int)",
+ "public void <init>(java.lang.String, int)",
"public com.yahoo.prelude.query.Item$ItemType getItemType()",
"public java.lang.String getName()",
- "public void <init>(java.lang.String, int)",
- "public void <init>(int)",
"public void setIndexName(java.lang.String)",
"public java.lang.String getIndexName()",
- "public void <init>()",
"public int getN()",
"public void setN(int)",
"public int getScoreThreshold()",
@@ -4235,7 +4235,8 @@
"public com.yahoo.search.Result searchAndFill(com.yahoo.search.Query, com.yahoo.component.chain.Chain)",
"public com.yahoo.processing.rendering.Renderer getRendererCopy(com.yahoo.component.ComponentSpecification)",
"public com.yahoo.search.searchchain.SearchChainRegistry getSearchChainRegistry()",
- "public void createRequestMapping(com.yahoo.slime.Inspector, java.util.Map, java.lang.String)"
+ "public void createRequestMapping(com.yahoo.slime.Inspector, java.util.Map, java.lang.String)",
+ "public com.yahoo.container.jdisc.RequestHandlerSpec requestHandlerSpec()"
],
"fields": [
"public static final java.lang.String defaultSearchChainName"
diff --git a/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java b/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java
index 2b27f60ef73..e7c5511f259 100644
--- a/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java
+++ b/container-search/src/main/java/com/yahoo/search/handler/SearchHandler.java
@@ -14,11 +14,14 @@ import com.yahoo.container.handler.threadpool.ContainerThreadPool;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.container.jdisc.LoggingRequestHandler;
+import com.yahoo.container.jdisc.RequestHandlerSpec;
import com.yahoo.container.jdisc.VespaHeaders;
import com.yahoo.container.logging.AccessLog;
import com.yahoo.io.IOUtils;
import com.yahoo.jdisc.Metric;
import com.yahoo.jdisc.Request;
+import com.yahoo.container.jdisc.AclMapping;
+import com.yahoo.container.jdisc.RequestView;
import com.yahoo.language.Linguistics;
import com.yahoo.net.HostName;
import com.yahoo.net.UriTools;
@@ -103,6 +106,8 @@ public class SearchHandler extends LoggingRequestHandler {
private final AtomicLong numRequestsLeftToTrace;
+ private final static RequestHandlerSpec REQUEST_HANDLER_SPEC = RequestHandlerSpec.builder().withAclMapping(SearchHandler::mapRequestToAction).build();
+
private final class MeanConnections implements Callback {
@Override
@@ -631,6 +636,28 @@ public class SearchHandler extends LoggingRequestHandler {
});
}
+ @Override
+ public RequestHandlerSpec requestHandlerSpec() {
+ return REQUEST_HANDLER_SPEC;
+ }
+
+ private static AclMapping.Action mapRequestToAction(RequestView requestMeta) {
+ switch (requestMeta.method()){
+ case GET:
+ case POST:
+ case HEAD:
+ case OPTIONS:
+ return AclMapping.Action.READ;
+ case PUT:
+ case DELETE:
+ case CONNECT:
+ case TRACE:
+ case PATCH:
+ return AclMapping.Action.WRITE;
+ default:
+ throw new IllegalArgumentException("Illegal method " + requestMeta.method());
+ }
+ }
}