From bcd32ada4f7203d67ba661bb7ff2f75c9ec99dca Mon Sep 17 00:00:00 2001 From: Ryan Ernst Date: Thu, 10 Nov 2016 12:43:28 -0800 Subject: [PATCH] Extensions: Make resource watcher available to custom realms This simply adds ResourceWatcherService as an arg for getting custom realms from xpack extensions. closes elastic/elasticsearch#4038 Original commit: elastic/x-pack-elasticsearch@fe58d8a7ee71935c3c7526e373434a53563f075f --- .../org/elasticsearch/xpack/extensions/XPackExtension.java | 5 ++++- .../main/java/org/elasticsearch/xpack/security/Security.java | 2 +- .../java/org/elasticsearch/xpack/security/SecurityTests.java | 3 ++- .../org/elasticsearch/example/ExampleRealmExtension.java | 3 ++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/elasticsearch/src/main/java/org/elasticsearch/xpack/extensions/XPackExtension.java b/elasticsearch/src/main/java/org/elasticsearch/xpack/extensions/XPackExtension.java index cdb445d9772..9682df1885e 100644 --- a/elasticsearch/src/main/java/org/elasticsearch/xpack/extensions/XPackExtension.java +++ b/elasticsearch/src/main/java/org/elasticsearch/xpack/extensions/XPackExtension.java @@ -10,6 +10,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xpack.security.authc.AuthenticationFailureHandler; import org.elasticsearch.xpack.security.authc.Realm; @@ -41,8 +42,10 @@ public abstract class XPackExtension { * The key of the returned {@link Map} is the type name of the realm, and the value * is a {@link org.elasticsearch.xpack.security.authc.Realm.Factory} which will construct * that realm for use in authentication when that realm type is configured. + * + * @param resourceWatcherService Use to watch configuration files for changes */ - public Map getRealms() { + public Map getRealms(ResourceWatcherService resourceWatcherService) { return Collections.emptyMap(); } diff --git a/elasticsearch/src/main/java/org/elasticsearch/xpack/security/Security.java b/elasticsearch/src/main/java/org/elasticsearch/xpack/security/Security.java index 01e7c108c15..d76a3a51fa2 100644 --- a/elasticsearch/src/main/java/org/elasticsearch/xpack/security/Security.java +++ b/elasticsearch/src/main/java/org/elasticsearch/xpack/security/Security.java @@ -255,7 +255,7 @@ public class Security implements ActionPlugin, IngestPlugin, NetworkPlugin { realmFactories.put(LdapRealm.TYPE, config -> new LdapRealm(config, resourceWatcherService, sslService)); realmFactories.put(PkiRealm.TYPE, config -> new PkiRealm(config, resourceWatcherService, sslService)); for (XPackExtension extension : extensions) { - Map newRealms = extension.getRealms(); + Map newRealms = extension.getRealms(resourceWatcherService); for (Map.Entry entry : newRealms.entrySet()) { if (realmFactories.put(entry.getKey(), entry.getValue()) != null) { throw new IllegalArgumentException("Realm type [" + entry.getKey() + "] is already registered"); diff --git a/elasticsearch/src/test/java/org/elasticsearch/xpack/security/SecurityTests.java b/elasticsearch/src/test/java/org/elasticsearch/xpack/security/SecurityTests.java index 3e28f984873..b424966d8df 100644 --- a/elasticsearch/src/test/java/org/elasticsearch/xpack/security/SecurityTests.java +++ b/elasticsearch/src/test/java/org/elasticsearch/xpack/security/SecurityTests.java @@ -23,6 +23,7 @@ import org.elasticsearch.env.Environment; import org.elasticsearch.license.XPackLicenseState; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.threadpool.ThreadPool; +import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xpack.XPackSettings; import org.elasticsearch.xpack.extensions.XPackExtension; import org.elasticsearch.xpack.security.audit.AuditTrailService; @@ -53,7 +54,7 @@ public class SecurityTests extends ESTestCase { return "dummy"; } @Override - public Map getRealms() { + public Map getRealms(ResourceWatcherService resourceWatcherService) { return Collections.singletonMap(realmType, config -> null); } } diff --git a/qa/security-example-realm/src/main/java/org/elasticsearch/example/ExampleRealmExtension.java b/qa/security-example-realm/src/main/java/org/elasticsearch/example/ExampleRealmExtension.java index ee1f8e7c3ff..49688c1f2ba 100644 --- a/qa/security-example-realm/src/main/java/org/elasticsearch/example/ExampleRealmExtension.java +++ b/qa/security-example-realm/src/main/java/org/elasticsearch/example/ExampleRealmExtension.java @@ -7,6 +7,7 @@ package org.elasticsearch.example; import org.elasticsearch.example.realm.CustomAuthenticationFailureHandler; import org.elasticsearch.example.realm.CustomRealm; +import org.elasticsearch.watcher.ResourceWatcherService; import org.elasticsearch.xpack.security.authc.AuthenticationFailureHandler; import org.elasticsearch.xpack.extensions.XPackExtension; import org.elasticsearch.xpack.security.authc.Realm; @@ -40,7 +41,7 @@ public class ExampleRealmExtension extends XPackExtension { } @Override - public Map getRealms() { + public Map getRealms(ResourceWatcherService resourceWatcherService) { return Collections.singletonMap(CustomRealm.TYPE, CustomRealm::new); }