From 36620fd7730c5d49c5549e4db7ee85cd312582a4 Mon Sep 17 00:00:00 2001 From: Craig Perkins Date: Wed, 1 Jan 2025 13:40:24 -0500 Subject: [PATCH] Remove SPI Signed-off-by: Craig Perkins --- build.gradle | 1 - .../SampleResourceSharingServiceProvider.java | 62 --------------- ...arch.security.spi.ResourceSharingExtension | 6 -- .../build.gradle | 11 +-- .../sample/SampleResourcePluginTests.java | 8 +- .../security/sample/SampleResourcePlugin.java | 71 ++++++------------ .../create/CreateSampleResourceAction.java | 4 +- .../CreateSampleResourceRestAction.java | 6 +- .../CreateSampleResourceTransportAction.java | 8 +- .../actions/get/GetSampleResourceAction.java | 6 +- .../get/GetSampleResourceRestAction.java | 6 +- .../get/GetSampleResourceTransportAction.java | 15 ++-- .../list/ListSampleResourceAction.java | 6 +- .../list/ListSampleResourceRestAction.java | 6 +- .../ListSampleResourceTransportAction.java | 15 ++-- .../update/UpdateSampleResourceAction.java | 2 +- .../update/UpdateSampleResourceRequest.java | 2 +- .../update/UpdateSampleResourceResponse.java | 2 +- .../UpdateSampleResourceRestAction.java | 2 +- .../UpdateSampleResourceTransportAction.java | 6 +- .../sample}/resource/SampleResource.java | 4 +- .../resource/SampleResourceParser.java | 4 +- .../sample/resource/SampleResourceType.java | 47 ++++++++++++ .../plugin-metadata/plugin-security.policy | 0 .../security/sample}/ODFERestTestCase.java | 2 +- .../sample/SampleResourcePluginIT.java | 6 +- .../sample}/SecureRestClientBuilder.java | 2 +- .../security/sample}/TrustStore.java | 2 +- .../test/resources/security/esnode-key.pem | 0 .../src/test/resources/security/esnode.pem | 0 .../src/test/resources/security/kirk-key.pem | 0 .../src/test/resources/security/kirk.pem | 0 .../src/test/resources/security/root-ca.pem | 0 .../src/test/resources/security/sample.pem | 0 .../src/test/resources/security/test-kirk.jks | Bin settings.gradle | 7 +- .../create/CreateResourceTransportAction.java | 10 --- .../security/OpenSearchSecurityPlugin.java | 51 ++++++------- .../rest/api/SecurityApiDependencies.java | 12 +-- .../dlic/rest/api/SecurityRestApiActions.java | 8 +- .../SecurityResourceSharingService.java | 16 ++-- .../rest/resource/ShareWithRestAction.java | 14 ++-- 42 files changed, 186 insertions(+), 244 deletions(-) delete mode 100644 sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/resource/SampleResourceSharingServiceProvider.java delete mode 100644 sample-extension-plugin/src/main/resources/META-INF/services/org.opensearch.security.spi.ResourceSharingExtension rename {sample-extension-plugin => sample-resource-plugin}/build.gradle (96%) rename sample-extension-plugin/src/integrationTest/java/org/opensearch/security/sampleextension/SampleExtensionPluginTests.java => sample-resource-plugin/src/integrationTest/java/org/opensearch/security/sample/SampleResourcePluginTests.java (95%) rename sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/SampleExtensionPlugin.java => sample-resource-plugin/src/main/java/org/opensearch/security/sample/SampleResourcePlugin.java (58%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/create/CreateSampleResourceAction.java (84%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/create/CreateSampleResourceRestAction.java (88%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/create/CreateSampleResourceTransportAction.java (76%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/get/GetSampleResourceAction.java (79%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/get/GetSampleResourceRestAction.java (85%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/get/GetSampleResourceTransportAction.java (67%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/list/ListSampleResourceAction.java (79%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/list/ListSampleResourceRestAction.java (84%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/list/ListSampleResourceTransportAction.java (67%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/update/UpdateSampleResourceAction.java (92%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/update/UpdateSampleResourceRequest.java (95%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/update/UpdateSampleResourceResponse.java (95%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/update/UpdateSampleResourceRestAction.java (96%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/actions/update/UpdateSampleResourceTransportAction.java (92%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/resource/SampleResource.java (90%) rename {sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/main/java/org/opensearch/security/sample}/resource/SampleResourceParser.java (90%) create mode 100644 sample-resource-plugin/src/main/java/org/opensearch/security/sample/resource/SampleResourceType.java rename {sample-extension-plugin => sample-resource-plugin}/src/main/plugin-metadata/plugin-security.policy (100%) rename {sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/test/java/org/opensearch/security/sample}/ODFERestTestCase.java (99%) rename sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/SampleExtensionPluginIT.java => sample-resource-plugin/src/test/java/org/opensearch/security/sample/SampleResourcePluginIT.java (97%) rename {sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/test/java/org/opensearch/security/sample}/SecureRestClientBuilder.java (99%) rename {sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension => sample-resource-plugin/src/test/java/org/opensearch/security/sample}/TrustStore.java (98%) rename {sample-extension-plugin => sample-resource-plugin}/src/test/resources/security/esnode-key.pem (100%) rename {sample-extension-plugin => sample-resource-plugin}/src/test/resources/security/esnode.pem (100%) rename {sample-extension-plugin => sample-resource-plugin}/src/test/resources/security/kirk-key.pem (100%) rename {sample-extension-plugin => sample-resource-plugin}/src/test/resources/security/kirk.pem (100%) rename {sample-extension-plugin => sample-resource-plugin}/src/test/resources/security/root-ca.pem (100%) rename {sample-extension-plugin => sample-resource-plugin}/src/test/resources/security/sample.pem (100%) rename {sample-extension-plugin => sample-resource-plugin}/src/test/resources/security/test-kirk.jks (100%) diff --git a/build.gradle b/build.gradle index 06b7aa156b..443c8e5f21 100644 --- a/build.gradle +++ b/build.gradle @@ -574,7 +574,6 @@ tasks.integrationTest.finalizedBy(jacocoTestReport) // report is always generate check.dependsOn integrationTest dependencies { - implementation project(path: ":${rootProject.name}-spi", configuration: 'shadow') implementation "org.opensearch.plugin:transport-netty4-client:${opensearch_version}" implementation "org.opensearch.client:opensearch-rest-high-level-client:${opensearch_version}" implementation "org.apache.httpcomponents.client5:httpclient5-cache:${versions.httpclient5}" diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/resource/SampleResourceSharingServiceProvider.java b/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/resource/SampleResourceSharingServiceProvider.java deleted file mode 100644 index 7540c07977..0000000000 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/resource/SampleResourceSharingServiceProvider.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.opensearch.security.sampleextension.resource; - -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.opensearch.common.inject.Provider; -import org.opensearch.security.spi.ResourceSharingService; - -/** - * Provider for ResourceSharingService that handles SampleResource instances. - * This provider allows for flexible injection of different ResourceSharingService - * implementations based on runtime conditions. - */ -public final class SampleResourceSharingServiceProvider implements Provider> { - - private volatile ResourceSharingService resourceSharingService; - - private static final Map instances = new ConcurrentHashMap<>(); - - private SampleResourceSharingServiceProvider() {} - - @SuppressWarnings("removal") - public static SampleResourceSharingServiceProvider getInstance() { - ClassLoader classLoader = AccessController.doPrivileged( - (PrivilegedAction) () -> Thread.currentThread().getContextClassLoader() - ); - instances.computeIfAbsent(classLoader, cl -> new SampleResourceSharingServiceProvider()); - return instances.get(classLoader); - } - - /** - * Sets the resource sharing service implementation. - * This method is thread-safe and ensures the service is only set once. - * - * @param resourceSharingService the service implementation to use - * @throws IllegalStateException if the service has already been set - * @throws IllegalArgumentException if the provided service is null - */ - public void set(ResourceSharingService resourceSharingService) { - if (resourceSharingService == null) { - throw new IllegalArgumentException("ResourceSharingService cannot be null"); - } - - if (this.resourceSharingService != null) { - throw new IllegalStateException("ResourceSharingService has already been set"); - } - - this.resourceSharingService = resourceSharingService; - } - - /** - * {@inheritDoc} - * - * @return the configured ResourceSharingService - */ - @Override - public ResourceSharingService get() { - return resourceSharingService; - } -} diff --git a/sample-extension-plugin/src/main/resources/META-INF/services/org.opensearch.security.spi.ResourceSharingExtension b/sample-extension-plugin/src/main/resources/META-INF/services/org.opensearch.security.spi.ResourceSharingExtension deleted file mode 100644 index e32f06ee56..0000000000 --- a/sample-extension-plugin/src/main/resources/META-INF/services/org.opensearch.security.spi.ResourceSharingExtension +++ /dev/null @@ -1,6 +0,0 @@ -# -# Copyright OpenSearch Contributors -# SPDX-License-Identifier: Apache-2.0 -# - -org.opensearch.security.sampleextension.SampleExtensionPlugin \ No newline at end of file diff --git a/sample-extension-plugin/build.gradle b/sample-resource-plugin/build.gradle similarity index 96% rename from sample-extension-plugin/build.gradle rename to sample-resource-plugin/build.gradle index d601890483..e39a8b229e 100644 --- a/sample-extension-plugin/build.gradle +++ b/sample-resource-plugin/build.gradle @@ -15,10 +15,9 @@ import java.util.concurrent.Callable opensearchplugin { - name 'opensearch-security-sample-extension' - description 'Sample plugin that extends OpenSearch Security Resource Sharing Extension' - classname 'org.opensearch.security.sampleextension.SampleExtensionPlugin' - extendedPlugins = ['opensearch-security'] + name 'opensearch-security-sample-resource' + description 'Sample plugin that demonstrates Resource Sharing' + classname 'org.opensearch.security.sample.SampleResourcePlugin' } ext { @@ -60,8 +59,6 @@ configurations { // TODO Make this plugin have an integration test dependency on integrationTest from root project dependencies { - compileOnly project(path: ":${rootProject.name}-spi", configuration: 'shadow') - // integrationTestImplementation project(":") integrationTestImplementation rootProject.sourceSets.main.output integrationTestImplementation rootProject.sourceSets.integrationTest.output testImplementation "com.fasterxml.jackson.core:jackson-annotations:${versions.jackson}" @@ -177,7 +174,7 @@ integTest { } if (System.getProperty("tests.rest.bwcsuite") == null) { filter { - excludeTestsMatching "org.opensearch.security.sampleextension.bwc.*IT" + excludeTestsMatching "org.opensearch.security.sample.bwc.*IT" } } } diff --git a/sample-extension-plugin/src/integrationTest/java/org/opensearch/security/sampleextension/SampleExtensionPluginTests.java b/sample-resource-plugin/src/integrationTest/java/org/opensearch/security/sample/SampleResourcePluginTests.java similarity index 95% rename from sample-extension-plugin/src/integrationTest/java/org/opensearch/security/sampleextension/SampleExtensionPluginTests.java rename to sample-resource-plugin/src/integrationTest/java/org/opensearch/security/sample/SampleResourcePluginTests.java index 8d22e01410..84c3aad60a 100644 --- a/sample-extension-plugin/src/integrationTest/java/org/opensearch/security/sampleextension/SampleExtensionPluginTests.java +++ b/sample-resource-plugin/src/integrationTest/java/org/opensearch/security/sample/SampleResourcePluginTests.java @@ -9,7 +9,7 @@ * GitHub history for details. */ -package org.opensearch.security.sampleextension; +package org.opensearch.security.sample; import com.carrotsearch.randomizedtesting.annotations.ThreadLeakScope; import org.apache.http.HttpStatus; @@ -30,11 +30,11 @@ @RunWith(com.carrotsearch.randomizedtesting.RandomizedRunner.class) @ThreadLeakScope(ThreadLeakScope.Scope.NONE) -public class SampleExtensionPluginTests { +public class SampleResourcePluginTests { @ClassRule public static LocalCluster cluster = new LocalCluster.Builder().clusterManager(ClusterManager.SINGLENODE) - .plugin(SampleExtensionPlugin.class) + .plugin(SampleResourcePlugin.class) .anonymousAuth(true) .authc(AUTHC_HTTPBASIC_INTERNAL) .users(USER_ADMIN) @@ -52,7 +52,7 @@ public void testSecurityRoles() throws Exception { HttpResponse pluginsResponse = client.get("_cat/plugins?s=component&h=name,component,version,description"); System.out.println("pluginsResponse: " + pluginsResponse.getBody()); assertThat(pluginsResponse.getBody(), containsString("org.opensearch.security.OpenSearchSecurityPlugin")); - assertThat(pluginsResponse.getBody(), containsString("org.opensearch.security.sampleextension.SampleExtensionPlugin")); + assertThat(pluginsResponse.getBody(), containsString("org.opensearch.security.sample.SampleResourcePlugin")); } } diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/SampleExtensionPlugin.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/SampleResourcePlugin.java similarity index 58% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/SampleExtensionPlugin.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/SampleResourcePlugin.java index 359bfa8703..a98b1b6993 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/SampleExtensionPlugin.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/SampleResourcePlugin.java @@ -6,7 +6,7 @@ * this file be licensed under the Apache-2.0 license or a * compatible open source license. */ -package org.opensearch.security.sampleextension; +package org.opensearch.security.sample; import java.util.Collection; import java.util.Collections; @@ -33,43 +33,39 @@ import org.opensearch.indices.SystemIndexDescriptor; import org.opensearch.plugins.ActionPlugin; import org.opensearch.plugins.Plugin; +import org.opensearch.plugins.ResourcePlugin; import org.opensearch.plugins.SystemIndexPlugin; +import org.opensearch.plugins.resource.ResourceType; import org.opensearch.repositories.RepositoriesService; import org.opensearch.rest.RestController; import org.opensearch.rest.RestHandler; import org.opensearch.script.ScriptService; -import org.opensearch.security.sampleextension.actions.create.CreateSampleResourceAction; -import org.opensearch.security.sampleextension.actions.create.CreateSampleResourceRestAction; -import org.opensearch.security.sampleextension.actions.create.CreateSampleResourceTransportAction; -import org.opensearch.security.sampleextension.actions.get.GetSampleResourceAction; -import org.opensearch.security.sampleextension.actions.get.GetSampleResourceRestAction; -import org.opensearch.security.sampleextension.actions.get.GetSampleResourceTransportAction; -import org.opensearch.security.sampleextension.actions.list.ListSampleResourceAction; -import org.opensearch.security.sampleextension.actions.list.ListSampleResourceRestAction; -import org.opensearch.security.sampleextension.actions.list.ListSampleResourceTransportAction; -import org.opensearch.security.sampleextension.actions.update.UpdateSampleResourceAction; -import org.opensearch.security.sampleextension.actions.update.UpdateSampleResourceRestAction; -import org.opensearch.security.sampleextension.actions.update.UpdateSampleResourceTransportAction; -import org.opensearch.security.sampleextension.resource.SampleResource; -import org.opensearch.security.sampleextension.resource.SampleResourceParser; -import org.opensearch.security.sampleextension.resource.SampleResourceSharingServiceProvider; -import org.opensearch.security.spi.Resource; -import org.opensearch.security.spi.ResourceParser; -import org.opensearch.security.spi.ResourceSharingExtension; -import org.opensearch.security.spi.ResourceSharingService; +import org.opensearch.security.sample.actions.create.CreateSampleResourceAction; +import org.opensearch.security.sample.actions.create.CreateSampleResourceRestAction; +import org.opensearch.security.sample.actions.create.CreateSampleResourceTransportAction; +import org.opensearch.security.sample.actions.get.GetSampleResourceAction; +import org.opensearch.security.sample.actions.get.GetSampleResourceRestAction; +import org.opensearch.security.sample.actions.get.GetSampleResourceTransportAction; +import org.opensearch.security.sample.actions.list.ListSampleResourceAction; +import org.opensearch.security.sample.actions.list.ListSampleResourceRestAction; +import org.opensearch.security.sample.actions.list.ListSampleResourceTransportAction; +import org.opensearch.security.sample.actions.update.UpdateSampleResourceAction; +import org.opensearch.security.sample.actions.update.UpdateSampleResourceRestAction; +import org.opensearch.security.sample.actions.update.UpdateSampleResourceTransportAction; +import org.opensearch.security.sample.resource.SampleResourceType; import org.opensearch.threadpool.ThreadPool; import org.opensearch.watcher.ResourceWatcherService; /** - * Sample Security Resource Sharing extension plugin. + * Sample Resource Plugin. * - * It use ".sample_extension_resources" index to manage its resources, and exposes a REST API + * It use ".sample_resources" index to manage its resources, and exposes a REST API * */ -public class SampleExtensionPlugin extends Plugin implements ActionPlugin, SystemIndexPlugin, ResourceSharingExtension { - private static final Logger log = LogManager.getLogger(SampleExtensionPlugin.class); +public class SampleResourcePlugin extends Plugin implements ActionPlugin, SystemIndexPlugin, ResourcePlugin { + private static final Logger log = LogManager.getLogger(SampleResourcePlugin.class); - public static final String RESOURCE_INDEX_NAME = ".sample_extension_resources"; + public static final String RESOURCE_INDEX_NAME = ".sample_resources"; private Client client; @@ -88,10 +84,7 @@ public Collection createComponents( Supplier repositoriesServiceSupplier ) { this.client = client; - System.out.println( - "SampleResourceSharingServiceProvider.getInstance(): " + SampleResourceSharingServiceProvider.getInstance().get() - ); - return List.of(SampleResourceSharingServiceProvider.getInstance()); + return Collections.emptyList(); } @Override @@ -129,23 +122,7 @@ public Collection getSystemIndexDescriptors(Settings sett } @Override - public String getResourceType() { - return "sample_resource"; - } - - @Override - public String getResourceIndex() { - return RESOURCE_INDEX_NAME; - } - - @Override - public ResourceParser getResourceParser() { - return new SampleResourceParser(); - } - - @SuppressWarnings("unchecked") - @Override - public void assignResourceSharingService(ResourceSharingService service) { - SampleResourceSharingServiceProvider.getInstance().set((ResourceSharingService) service); + public List getResourceTypes() { + return List.of(SampleResourceType.getInstance()); } } diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/create/CreateSampleResourceAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/create/CreateSampleResourceAction.java similarity index 84% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/create/CreateSampleResourceAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/create/CreateSampleResourceAction.java index 618c31f24c..1f6e0d388e 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/create/CreateSampleResourceAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/create/CreateSampleResourceAction.java @@ -6,10 +6,10 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.create; +package org.opensearch.security.sample.actions.create; import org.opensearch.action.ActionType; -import org.opensearch.security.spi.actions.resource.create.CreateResourceResponse; +import org.opensearch.plugins.resource.action.create.CreateResourceResponse; /** * Action to create a sample resource diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/create/CreateSampleResourceRestAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/create/CreateSampleResourceRestAction.java similarity index 88% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/create/CreateSampleResourceRestAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/create/CreateSampleResourceRestAction.java index 315619b1d3..25abd1efde 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/create/CreateSampleResourceRestAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/create/CreateSampleResourceRestAction.java @@ -6,7 +6,7 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.create; +package org.opensearch.security.sample.actions.create; import java.io.IOException; import java.util.List; @@ -14,11 +14,11 @@ import org.opensearch.client.node.NodeClient; import org.opensearch.core.xcontent.XContentParser; +import org.opensearch.plugins.resource.action.create.CreateResourceRequest; import org.opensearch.rest.BaseRestHandler; import org.opensearch.rest.RestRequest; import org.opensearch.rest.action.RestToXContentListener; -import org.opensearch.security.sampleextension.resource.SampleResource; -import org.opensearch.security.spi.actions.resource.create.CreateResourceRequest; +import org.opensearch.security.sample.resource.SampleResource; import static java.util.Collections.singletonList; import static org.opensearch.rest.RestRequest.Method.POST; diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/create/CreateSampleResourceTransportAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/create/CreateSampleResourceTransportAction.java similarity index 76% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/create/CreateSampleResourceTransportAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/create/CreateSampleResourceTransportAction.java index 05f4c986de..8492cdc0c0 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/create/CreateSampleResourceTransportAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/create/CreateSampleResourceTransportAction.java @@ -6,7 +6,7 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.create; +package org.opensearch.security.sample.actions.create; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -14,11 +14,11 @@ import org.opensearch.action.support.ActionFilters; import org.opensearch.client.Client; import org.opensearch.common.inject.Inject; -import org.opensearch.security.sampleextension.resource.SampleResource; -import org.opensearch.security.spi.actions.resource.create.CreateResourceTransportAction; +import org.opensearch.plugins.resource.action.create.CreateResourceTransportAction; +import org.opensearch.security.sample.resource.SampleResource; import org.opensearch.transport.TransportService; -import static org.opensearch.security.sampleextension.SampleExtensionPlugin.RESOURCE_INDEX_NAME; +import static org.opensearch.security.sample.SampleResourcePlugin.RESOURCE_INDEX_NAME; /** * Transport action for CreateSampleResource. diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/get/GetSampleResourceAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/get/GetSampleResourceAction.java similarity index 79% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/get/GetSampleResourceAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/get/GetSampleResourceAction.java index 4ea3e20486..d9fb5a2f1c 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/get/GetSampleResourceAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/get/GetSampleResourceAction.java @@ -6,11 +6,11 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.get; +package org.opensearch.security.sample.actions.get; import org.opensearch.action.ActionType; -import org.opensearch.security.sampleextension.resource.SampleResource; -import org.opensearch.security.spi.actions.resource.get.GetResourceResponse; +import org.opensearch.plugins.resource.action.get.GetResourceResponse; +import org.opensearch.security.sample.resource.SampleResource; /** * Action to get a sample resource diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/get/GetSampleResourceRestAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/get/GetSampleResourceRestAction.java similarity index 85% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/get/GetSampleResourceRestAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/get/GetSampleResourceRestAction.java index bb517d7668..ed47cc88b9 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/get/GetSampleResourceRestAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/get/GetSampleResourceRestAction.java @@ -6,20 +6,20 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.get; +package org.opensearch.security.sample.actions.get; import java.io.IOException; import java.util.List; import org.opensearch.client.node.NodeClient; +import org.opensearch.plugins.resource.action.get.GetResourceRequest; import org.opensearch.rest.BaseRestHandler; import org.opensearch.rest.RestRequest; import org.opensearch.rest.action.RestToXContentListener; -import org.opensearch.security.spi.actions.resource.get.GetResourceRequest; import static java.util.Collections.singletonList; import static org.opensearch.rest.RestRequest.Method.GET; -import static org.opensearch.security.sampleextension.SampleExtensionPlugin.RESOURCE_INDEX_NAME; +import static org.opensearch.security.sample.SampleResourcePlugin.RESOURCE_INDEX_NAME; public class GetSampleResourceRestAction extends BaseRestHandler { diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/get/GetSampleResourceTransportAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/get/GetSampleResourceTransportAction.java similarity index 67% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/get/GetSampleResourceTransportAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/get/GetSampleResourceTransportAction.java index 12d470abf5..8624db26bf 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/get/GetSampleResourceTransportAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/get/GetSampleResourceTransportAction.java @@ -6,7 +6,7 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.get; +package org.opensearch.security.sample.actions.get; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -15,13 +15,13 @@ import org.opensearch.client.Client; import org.opensearch.common.inject.Inject; import org.opensearch.core.xcontent.NamedXContentRegistry; -import org.opensearch.security.sampleextension.resource.SampleResource; -import org.opensearch.security.sampleextension.resource.SampleResourceParser; -import org.opensearch.security.sampleextension.resource.SampleResourceSharingServiceProvider; -import org.opensearch.security.spi.actions.resource.get.GetResourceTransportAction; +import org.opensearch.plugins.resource.action.get.GetResourceTransportAction; +import org.opensearch.security.sample.resource.SampleResource; +import org.opensearch.security.sample.resource.SampleResourceParser; +import org.opensearch.security.sample.resource.SampleResourceType; import org.opensearch.transport.TransportService; -import static org.opensearch.security.sampleextension.SampleExtensionPlugin.RESOURCE_INDEX_NAME; +import static org.opensearch.security.sample.SampleResourcePlugin.RESOURCE_INDEX_NAME; /** * Transport action for GetSampleResource. @@ -33,7 +33,6 @@ public class GetSampleResourceTransportAction extends GetResourceTransportAction public GetSampleResourceTransportAction( TransportService transportService, ActionFilters actionFilters, - SampleResourceSharingServiceProvider resourceSharingService, Client client, NamedXContentRegistry xContentRegistry ) { @@ -42,7 +41,7 @@ public GetSampleResourceTransportAction( actionFilters, GetSampleResourceAction.NAME, RESOURCE_INDEX_NAME, - resourceSharingService.get(), + SampleResourceType.getInstance().getResourceSharingService(), new SampleResourceParser(), client, xContentRegistry diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/list/ListSampleResourceAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/list/ListSampleResourceAction.java similarity index 79% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/list/ListSampleResourceAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/list/ListSampleResourceAction.java index e91bb7e111..dce5d1bc30 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/list/ListSampleResourceAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/list/ListSampleResourceAction.java @@ -6,11 +6,11 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.list; +package org.opensearch.security.sample.actions.list; import org.opensearch.action.ActionType; -import org.opensearch.security.sampleextension.resource.SampleResource; -import org.opensearch.security.spi.actions.resource.list.ListResourceResponse; +import org.opensearch.plugins.resource.action.list.ListResourceResponse; +import org.opensearch.security.sample.resource.SampleResource; /** * Action to list sample resources diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/list/ListSampleResourceRestAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/list/ListSampleResourceRestAction.java similarity index 84% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/list/ListSampleResourceRestAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/list/ListSampleResourceRestAction.java index da30b498f5..90ab48e985 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/list/ListSampleResourceRestAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/list/ListSampleResourceRestAction.java @@ -6,19 +6,19 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.list; +package org.opensearch.security.sample.actions.list; import java.util.List; import org.opensearch.client.node.NodeClient; +import org.opensearch.plugins.resource.action.list.ListResourceRequest; import org.opensearch.rest.BaseRestHandler; import org.opensearch.rest.RestRequest; import org.opensearch.rest.action.RestToXContentListener; -import org.opensearch.security.spi.actions.resource.list.ListResourceRequest; import static java.util.Collections.singletonList; import static org.opensearch.rest.RestRequest.Method.GET; -import static org.opensearch.security.sampleextension.SampleExtensionPlugin.RESOURCE_INDEX_NAME; +import static org.opensearch.security.sample.SampleResourcePlugin.RESOURCE_INDEX_NAME; public class ListSampleResourceRestAction extends BaseRestHandler { diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/list/ListSampleResourceTransportAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/list/ListSampleResourceTransportAction.java similarity index 67% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/list/ListSampleResourceTransportAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/list/ListSampleResourceTransportAction.java index 821a26a2b7..699ee15eda 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/list/ListSampleResourceTransportAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/list/ListSampleResourceTransportAction.java @@ -6,7 +6,7 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.list; +package org.opensearch.security.sample.actions.list; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -15,13 +15,13 @@ import org.opensearch.client.Client; import org.opensearch.common.inject.Inject; import org.opensearch.core.xcontent.NamedXContentRegistry; -import org.opensearch.security.sampleextension.resource.SampleResource; -import org.opensearch.security.sampleextension.resource.SampleResourceParser; -import org.opensearch.security.sampleextension.resource.SampleResourceSharingServiceProvider; -import org.opensearch.security.spi.actions.resource.list.ListResourceTransportAction; +import org.opensearch.plugins.resource.action.list.ListResourceTransportAction; +import org.opensearch.security.sample.resource.SampleResource; +import org.opensearch.security.sample.resource.SampleResourceParser; +import org.opensearch.security.sample.resource.SampleResourceType; import org.opensearch.transport.TransportService; -import static org.opensearch.security.sampleextension.SampleExtensionPlugin.RESOURCE_INDEX_NAME; +import static org.opensearch.security.sample.SampleResourcePlugin.RESOURCE_INDEX_NAME; /** * Transport action for ListSampleResource. @@ -33,7 +33,6 @@ public class ListSampleResourceTransportAction extends ListResourceTransportActi public ListSampleResourceTransportAction( TransportService transportService, ActionFilters actionFilters, - SampleResourceSharingServiceProvider resourceSharingService, NamedXContentRegistry xContentRegistry, Client client ) { @@ -42,7 +41,7 @@ public ListSampleResourceTransportAction( actionFilters, ListSampleResourceAction.NAME, RESOURCE_INDEX_NAME, - resourceSharingService.get(), + SampleResourceType.getInstance().getResourceSharingService(), new SampleResourceParser(), client, xContentRegistry diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceAction.java similarity index 92% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceAction.java index cb1a6a394c..f0b42f2e93 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceAction.java @@ -6,7 +6,7 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.update; +package org.opensearch.security.sample.actions.update; import org.opensearch.action.ActionType; diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceRequest.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceRequest.java similarity index 95% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceRequest.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceRequest.java index 1f35dcffd6..1b2e6f73a5 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceRequest.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceRequest.java @@ -6,7 +6,7 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.update; +package org.opensearch.security.sample.actions.update; import java.io.IOException; diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceResponse.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceResponse.java similarity index 95% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceResponse.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceResponse.java index 83babbc847..0b0c742563 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceResponse.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceResponse.java @@ -6,7 +6,7 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.update; +package org.opensearch.security.sample.actions.update; import java.io.IOException; diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceRestAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceRestAction.java similarity index 96% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceRestAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceRestAction.java index 8658193c9b..28bd81eb7c 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceRestAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceRestAction.java @@ -6,7 +6,7 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.update; +package org.opensearch.security.sample.actions.update; import java.io.IOException; import java.util.List; diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceTransportAction.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceTransportAction.java similarity index 92% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceTransportAction.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceTransportAction.java index 9070622371..fd5dacee0b 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/actions/update/UpdateSampleResourceTransportAction.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/actions/update/UpdateSampleResourceTransportAction.java @@ -6,7 +6,7 @@ * compatible open source license. */ -package org.opensearch.security.sampleextension.actions.update; +package org.opensearch.security.sample.actions.update; import java.io.IOException; @@ -22,12 +22,12 @@ import org.opensearch.common.inject.Inject; import org.opensearch.core.action.ActionListener; import org.opensearch.core.xcontent.ToXContent; -import org.opensearch.security.sampleextension.resource.SampleResource; +import org.opensearch.security.sample.resource.SampleResource; import org.opensearch.tasks.Task; import org.opensearch.transport.TransportService; import static org.opensearch.common.xcontent.XContentFactory.jsonBuilder; -import static org.opensearch.security.sampleextension.SampleExtensionPlugin.RESOURCE_INDEX_NAME; +import static org.opensearch.security.sample.SampleResourcePlugin.RESOURCE_INDEX_NAME; /** * Transport action for UpdateSampleResource. diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/resource/SampleResource.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/resource/SampleResource.java similarity index 90% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/resource/SampleResource.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/resource/SampleResource.java index 3a8e04629e..6945547dfc 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/resource/SampleResource.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/resource/SampleResource.java @@ -1,11 +1,11 @@ -package org.opensearch.security.sampleextension.resource; +package org.opensearch.security.sample.resource; import java.io.IOException; import org.opensearch.core.common.io.stream.StreamInput; import org.opensearch.core.common.io.stream.StreamOutput; import org.opensearch.core.xcontent.XContentBuilder; -import org.opensearch.security.spi.Resource; +import org.opensearch.plugins.resource.Resource; public class SampleResource implements Resource { diff --git a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/resource/SampleResourceParser.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/resource/SampleResourceParser.java similarity index 90% rename from sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/resource/SampleResourceParser.java rename to sample-resource-plugin/src/main/java/org/opensearch/security/sample/resource/SampleResourceParser.java index 6ecd4e2e73..4a9491dc88 100644 --- a/sample-extension-plugin/src/main/java/org/opensearch/security/sampleextension/resource/SampleResourceParser.java +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/resource/SampleResourceParser.java @@ -1,10 +1,10 @@ -package org.opensearch.security.sampleextension.resource; +package org.opensearch.security.sample.resource; import java.io.IOException; import org.opensearch.core.xcontent.XContentParser; import org.opensearch.core.xcontent.XContentParserUtils; -import org.opensearch.security.spi.ResourceParser; +import org.opensearch.plugins.resource.ResourceParser; public class SampleResourceParser implements ResourceParser { diff --git a/sample-resource-plugin/src/main/java/org/opensearch/security/sample/resource/SampleResourceType.java b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/resource/SampleResourceType.java new file mode 100644 index 0000000000..64a98bb686 --- /dev/null +++ b/sample-resource-plugin/src/main/java/org/opensearch/security/sample/resource/SampleResourceType.java @@ -0,0 +1,47 @@ +package org.opensearch.security.sample.resource; + +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.opensearch.plugins.resource.ResourceSharingService; +import org.opensearch.plugins.resource.ResourceType; + +import static org.opensearch.security.sample.SampleResourcePlugin.RESOURCE_INDEX_NAME; + +public class SampleResourceType implements ResourceType { + private volatile ResourceSharingService resourceSharingService; + + private static final Map instances = new ConcurrentHashMap<>(); + + private SampleResourceType() {} + + @SuppressWarnings("removal") + public static SampleResourceType getInstance() { + ClassLoader classLoader = AccessController.doPrivileged( + (PrivilegedAction) () -> Thread.currentThread().getContextClassLoader() + ); + instances.computeIfAbsent(classLoader, cl -> new SampleResourceType()); + return instances.get(classLoader); + } + + @Override + public String getResourceType() { + return "sample_resource"; + } + + @Override + public String getResourceIndex() { + return RESOURCE_INDEX_NAME; + } + + @Override + public void assignResourceSharingService(ResourceSharingService resourceSharingService) { + this.resourceSharingService = resourceSharingService; + } + + public ResourceSharingService getResourceSharingService() { + return this.resourceSharingService; + } +} diff --git a/sample-extension-plugin/src/main/plugin-metadata/plugin-security.policy b/sample-resource-plugin/src/main/plugin-metadata/plugin-security.policy similarity index 100% rename from sample-extension-plugin/src/main/plugin-metadata/plugin-security.policy rename to sample-resource-plugin/src/main/plugin-metadata/plugin-security.policy diff --git a/sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/ODFERestTestCase.java b/sample-resource-plugin/src/test/java/org/opensearch/security/sample/ODFERestTestCase.java similarity index 99% rename from sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/ODFERestTestCase.java rename to sample-resource-plugin/src/test/java/org/opensearch/security/sample/ODFERestTestCase.java index 39a3b97810..eb7f4ba3b9 100644 --- a/sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/ODFERestTestCase.java +++ b/sample-resource-plugin/src/test/java/org/opensearch/security/sample/ODFERestTestCase.java @@ -6,7 +6,7 @@ * this file be licensed under the Apache-2.0 license or a * compatible open source license. */ -package org.opensearch.security.sampleextension; +package org.opensearch.security.sample; import java.io.IOException; import java.net.URI; diff --git a/sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/SampleExtensionPluginIT.java b/sample-resource-plugin/src/test/java/org/opensearch/security/sample/SampleResourcePluginIT.java similarity index 97% rename from sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/SampleExtensionPluginIT.java rename to sample-resource-plugin/src/test/java/org/opensearch/security/sample/SampleResourcePluginIT.java index 6bb3a88e56..abab27288a 100644 --- a/sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/SampleExtensionPluginIT.java +++ b/sample-resource-plugin/src/test/java/org/opensearch/security/sample/SampleResourcePluginIT.java @@ -6,7 +6,7 @@ * this file be licensed under the Apache-2.0 license or a * compatible open source license. */ -package org.opensearch.security.sampleextension; +package org.opensearch.security.sample; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -26,7 +26,7 @@ import org.opensearch.common.xcontent.json.JsonXContent; import org.opensearch.core.xcontent.NamedXContentRegistry; -public class SampleExtensionPluginIT extends ODFERestTestCase { +public class SampleResourcePluginIT extends ODFERestTestCase { // @BeforeClass // public static void createTestUsers() throws IOException { @@ -50,7 +50,7 @@ public void testPluginsAreInstalled() throws IOException { Assert.assertTrue( pluginsList.stream() .map(o -> (Map) o) - .anyMatch(plugin -> plugin.get("component").equals("opensearch-security-sample-extension")) + .anyMatch(plugin -> plugin.get("component").equals("opensearch-security-sample-resource")) ); } diff --git a/sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/SecureRestClientBuilder.java b/sample-resource-plugin/src/test/java/org/opensearch/security/sample/SecureRestClientBuilder.java similarity index 99% rename from sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/SecureRestClientBuilder.java rename to sample-resource-plugin/src/test/java/org/opensearch/security/sample/SecureRestClientBuilder.java index 6a0a6d33e1..3ad342dc65 100644 --- a/sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/SecureRestClientBuilder.java +++ b/sample-resource-plugin/src/test/java/org/opensearch/security/sample/SecureRestClientBuilder.java @@ -6,7 +6,7 @@ * this file be licensed under the Apache-2.0 license or a * compatible open source license. */ -package org.opensearch.security.sampleextension; +package org.opensearch.security.sample; import java.io.IOException; import java.io.InputStream; diff --git a/sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/TrustStore.java b/sample-resource-plugin/src/test/java/org/opensearch/security/sample/TrustStore.java similarity index 98% rename from sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/TrustStore.java rename to sample-resource-plugin/src/test/java/org/opensearch/security/sample/TrustStore.java index 2bee6291d1..ac9c31c661 100644 --- a/sample-extension-plugin/src/test/java/org/opensearch/security/sampleextension/TrustStore.java +++ b/sample-resource-plugin/src/test/java/org/opensearch/security/sample/TrustStore.java @@ -6,7 +6,7 @@ * this file be licensed under the Apache-2.0 license or a * compatible open source license. */ -package org.opensearch.security.sampleextension; +package org.opensearch.security.sample; import java.io.FileInputStream; import java.io.IOException; diff --git a/sample-extension-plugin/src/test/resources/security/esnode-key.pem b/sample-resource-plugin/src/test/resources/security/esnode-key.pem similarity index 100% rename from sample-extension-plugin/src/test/resources/security/esnode-key.pem rename to sample-resource-plugin/src/test/resources/security/esnode-key.pem diff --git a/sample-extension-plugin/src/test/resources/security/esnode.pem b/sample-resource-plugin/src/test/resources/security/esnode.pem similarity index 100% rename from sample-extension-plugin/src/test/resources/security/esnode.pem rename to sample-resource-plugin/src/test/resources/security/esnode.pem diff --git a/sample-extension-plugin/src/test/resources/security/kirk-key.pem b/sample-resource-plugin/src/test/resources/security/kirk-key.pem similarity index 100% rename from sample-extension-plugin/src/test/resources/security/kirk-key.pem rename to sample-resource-plugin/src/test/resources/security/kirk-key.pem diff --git a/sample-extension-plugin/src/test/resources/security/kirk.pem b/sample-resource-plugin/src/test/resources/security/kirk.pem similarity index 100% rename from sample-extension-plugin/src/test/resources/security/kirk.pem rename to sample-resource-plugin/src/test/resources/security/kirk.pem diff --git a/sample-extension-plugin/src/test/resources/security/root-ca.pem b/sample-resource-plugin/src/test/resources/security/root-ca.pem similarity index 100% rename from sample-extension-plugin/src/test/resources/security/root-ca.pem rename to sample-resource-plugin/src/test/resources/security/root-ca.pem diff --git a/sample-extension-plugin/src/test/resources/security/sample.pem b/sample-resource-plugin/src/test/resources/security/sample.pem similarity index 100% rename from sample-extension-plugin/src/test/resources/security/sample.pem rename to sample-resource-plugin/src/test/resources/security/sample.pem diff --git a/sample-extension-plugin/src/test/resources/security/test-kirk.jks b/sample-resource-plugin/src/test/resources/security/test-kirk.jks similarity index 100% rename from sample-extension-plugin/src/test/resources/security/test-kirk.jks rename to sample-resource-plugin/src/test/resources/security/test-kirk.jks diff --git a/settings.gradle b/settings.gradle index 407e70f319..3294aaa768 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,8 +6,5 @@ rootProject.name = 'opensearch-security' -include "spi" -project(":spi").name = rootProject.name + "-spi" - -include "sample-extension-plugin" -project(":sample-extension-plugin").name = rootProject.name + "-sample-extension" +include "sample-resource-plugin" +project(":sample-resource-plugin").name = rootProject.name + "-sample-resource" diff --git a/spi/src/main/java/org/opensearch/security/spi/actions/resource/create/CreateResourceTransportAction.java b/spi/src/main/java/org/opensearch/security/spi/actions/resource/create/CreateResourceTransportAction.java index 5c62a0b5e9..889a26e26d 100644 --- a/spi/src/main/java/org/opensearch/security/spi/actions/resource/create/CreateResourceTransportAction.java +++ b/spi/src/main/java/org/opensearch/security/spi/actions/resource/create/CreateResourceTransportAction.java @@ -73,7 +73,6 @@ protected void doExecute(Task task, CreateResourceRequest request, ActionList } private void createResource(CreateResourceRequest request, ActionListener listener) { - log.warn("Sample name: " + request.getResource()); Resource sample = request.getResource(); try { IndexRequest ir = nodeClient.prepareIndex(resourceIndex) @@ -81,16 +80,7 @@ private void createResource(CreateResourceRequest request, ActionListener resourceSharingListener = ActionListener.wrap(resourceSharingResponse -> { - // listener.onResponse(new CreateResourceResponse("Created resource: " + resourceSharingResponse.toString())); - // }, listener::onFailure); - ActionListener irListener = ActionListener.wrap(idxResponse -> { - log.info("Created resource: " + idxResponse.toString()); - // ResourceSharingUtils.getInstance() - // .indexResourceSharing(idxResponse.getId(), sample, ShareWith.PUBLIC, resourceSharingListener); listener.onResponse(new CreateResourceResponse(idxResponse.getId())); }, listener::onFailure); nodeClient.index(ir, irListener); diff --git a/src/main/java/org/opensearch/security/OpenSearchSecurityPlugin.java b/src/main/java/org/opensearch/security/OpenSearchSecurityPlugin.java index 76867c89ed..5235178331 100644 --- a/src/main/java/org/opensearch/security/OpenSearchSecurityPlugin.java +++ b/src/main/java/org/opensearch/security/OpenSearchSecurityPlugin.java @@ -122,9 +122,12 @@ import org.opensearch.plugins.IdentityPlugin; import org.opensearch.plugins.MapperPlugin; import org.opensearch.plugins.Plugin; +import org.opensearch.plugins.ResourceAccessControlPlugin; import org.opensearch.plugins.SecureHttpTransportSettingsProvider; import org.opensearch.plugins.SecureSettingsFactory; import org.opensearch.plugins.SecureTransportSettingsProvider; +import org.opensearch.plugins.resource.ResourceSharingService; +import org.opensearch.plugins.resource.ResourceType; import org.opensearch.repositories.RepositoriesService; import org.opensearch.rest.RestController; import org.opensearch.rest.RestHandler; @@ -189,8 +192,6 @@ import org.opensearch.security.securityconf.impl.CType; import org.opensearch.security.setting.OpensearchDynamicSetting; import org.opensearch.security.setting.TransportPassiveAuthSetting; -import org.opensearch.security.spi.ResourceSharingExtension; -import org.opensearch.security.spi.ResourceSharingService; import org.opensearch.security.ssl.ExternalSecurityKeyStore; import org.opensearch.security.ssl.OpenSearchSecureSettingsFactory; import org.opensearch.security.ssl.OpenSearchSecuritySSLPlugin; @@ -245,7 +246,8 @@ public final class OpenSearchSecurityPlugin extends OpenSearchSecuritySSLPlugin // CS-SUPPRESS-SINGLE: RegexpSingleline get Extensions Settings ExtensiblePlugin, ExtensionAwarePlugin, - IdentityPlugin + IdentityPlugin, + ResourceAccessControlPlugin // CS-ENFORCE-SINGLE { @@ -283,7 +285,7 @@ public final class OpenSearchSecurityPlugin extends OpenSearchSecuritySSLPlugin private volatile DlsFlsBaseContext dlsFlsBaseContext; private final Set indicesToListen = new HashSet<>(); // CS-SUPPRESS-SINGLE: RegexpSingleline SPI Extensions are unrelated to OpenSearch extensions - private final List resourceSharingExtensions = new ArrayList<>(); + private final List resourceTypes = new ArrayList<>(); // CS-ENFORCE-SINGLE public static boolean isActionTraceEnabled() { @@ -673,7 +675,7 @@ public List getRestHandlers( Objects.requireNonNull(userService), sslCertReloadEnabled, passwordHasher, - resourceSharingExtensions + resourceTypes ) ); log.debug("Added {} rest handler(s)", handlers.size()); @@ -1076,15 +1078,6 @@ public Collection createComponents( } ResourceSharingListener.getInstance().initialize(threadPool, localClient); - // CS-SUPPRESS-SINGLE: RegexpSingleline SPI Extensions are unrelated to OpenSearch extensions - for (ResourceSharingExtension extension : resourceSharingExtensions) { - ResourceSharingService resourceSharingService = new SecurityResourceSharingService<>( - localClient, - extension.getResourceIndex() - ); - extension.assignResourceSharingService(resourceSharingService); - } - // CS-ENFORCE-SINGLE // Register opensearch dynamic settings transportPassiveAuthSetting.registerClusterSettingsChangeListener(clusterService.getClusterSettings()); @@ -2196,20 +2189,6 @@ public Optional getSecureSettingFactory(Settings settings ); } - // CS-SUPPRESS-SINGLE: RegexpSingleline SPI Extensions are unrelated to OpenSearch extensions - @Override - public void loadExtensions(ExtensiblePlugin.ExtensionLoader loader) { - for (ResourceSharingExtension extension : loader.loadExtensions(ResourceSharingExtension.class)) { - String resourceIndexName = extension.getResourceIndex(); - System.out.println("loadExtensions"); - System.out.println("localClient: " + localClient); - this.indicesToListen.add(resourceIndexName); - resourceSharingExtensions.add(extension); - log.info("Loaded resource, index: {}", resourceIndexName); - } - } - // CS-ENFORCE-SINGLE - @SuppressWarnings("removal") private void tryAddSecurityProvider() { final SecurityManager sm = System.getSecurityManager(); @@ -2234,6 +2213,22 @@ private void tryAddSecurityProvider() { }); } + @Override + public void assignResourceSharingService(ResourceType resourceType) { + resourceTypes.add(resourceType); + String resourceIndexName = resourceType.getResourceIndex(); + System.out.println("getResourceSharingService"); + this.indicesToListen.add(resourceIndexName); + ResourceSharingService resourceSharingService = new SecurityResourceSharingService( + localClient, + resourceType.getResourceType(), + resourceType.getResourceIndex() + ); + resourceType.assignResourceSharingService(resourceSharingService); + + log.info("Loaded resource, index: {}", resourceIndexName); + } + public static class GuiceHolder implements LifecycleComponent { private static RepositoriesService repositoriesService; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/SecurityApiDependencies.java b/src/main/java/org/opensearch/security/dlic/rest/api/SecurityApiDependencies.java index 7d3be960b3..b3b5740cf4 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/SecurityApiDependencies.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/SecurityApiDependencies.java @@ -14,11 +14,11 @@ import java.util.List; import org.opensearch.common.settings.Settings; +import org.opensearch.plugins.resource.ResourceType; import org.opensearch.security.auditlog.AuditLog; import org.opensearch.security.configuration.AdminDNs; import org.opensearch.security.configuration.ConfigurationRepository; import org.opensearch.security.privileges.PrivilegesEvaluator; -import org.opensearch.security.spi.ResourceSharingExtension; import org.opensearch.security.support.ConfigConstants; public class SecurityApiDependencies { @@ -28,7 +28,7 @@ public class SecurityApiDependencies { private final RestApiAdminPrivilegesEvaluator restApiAdminPrivilegesEvaluator; private final AuditLog auditLog; private final Settings settings; - private final List resourceSharingExtensions; + private final List resourceTypes; private final PrivilegesEvaluator privilegesEvaluator; @@ -40,7 +40,7 @@ public SecurityApiDependencies( final RestApiAdminPrivilegesEvaluator restApiAdminPrivilegesEvaluator, final AuditLog auditLog, final Settings settings, - final List resourceSharingExtensions + final List resourceTypes ) { this.adminDNs = adminDNs; this.configurationRepository = configurationRepository; @@ -49,7 +49,7 @@ public SecurityApiDependencies( this.restApiAdminPrivilegesEvaluator = restApiAdminPrivilegesEvaluator; this.auditLog = auditLog; this.settings = settings; - this.resourceSharingExtensions = resourceSharingExtensions; + this.resourceTypes = resourceTypes; } public AdminDNs adminDNs() { @@ -72,8 +72,8 @@ public RestApiAdminPrivilegesEvaluator restApiAdminPrivilegesEvaluator() { return restApiAdminPrivilegesEvaluator; } - public List resourceSharingExtensions() { - return resourceSharingExtensions; + public List resourceTypes() { + return resourceTypes; } public AuditLog auditLog() { diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/SecurityRestApiActions.java b/src/main/java/org/opensearch/security/dlic/rest/api/SecurityRestApiActions.java index d8c5402f81..a09c9b25ca 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/SecurityRestApiActions.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/SecurityRestApiActions.java @@ -18,6 +18,7 @@ import org.opensearch.client.Client; import org.opensearch.cluster.service.ClusterService; import org.opensearch.common.settings.Settings; +import org.opensearch.plugins.resource.ResourceType; import org.opensearch.rest.RestController; import org.opensearch.rest.RestHandler; import org.opensearch.security.auditlog.AuditLog; @@ -26,7 +27,6 @@ import org.opensearch.security.hasher.PasswordHasher; import org.opensearch.security.privileges.PrivilegesEvaluator; import org.opensearch.security.rest.resource.ShareWithRestAction; -import org.opensearch.security.spi.ResourceSharingExtension; import org.opensearch.security.ssl.SslSettingsManager; import org.opensearch.security.ssl.transport.PrincipalExtractor; import org.opensearch.security.user.UserService; @@ -52,7 +52,7 @@ public static Collection getHandler( final UserService userService, final boolean certificatesReloadEnabled, final PasswordHasher passwordHasher, - final List resourceSharingExtensions + final List resourceTypes ) { final var securityApiDependencies = new SecurityApiDependencies( adminDns, @@ -67,7 +67,7 @@ public static Collection getHandler( ), auditLog, settings, - resourceSharingExtensions + resourceTypes ); return List.of( new InternalUsersApiAction(clusterService, threadPool, userService, securityApiDependencies, passwordHasher), @@ -109,7 +109,7 @@ public static Collection getHandler( securityApiDependencies ), new CertificatesApiAction(clusterService, threadPool, securityApiDependencies), - new ShareWithRestAction(resourceSharingExtensions) + new ShareWithRestAction(resourceTypes) ); } diff --git a/src/main/java/org/opensearch/security/resource/SecurityResourceSharingService.java b/src/main/java/org/opensearch/security/resource/SecurityResourceSharingService.java index bd3158cf5f..4d96d7b695 100644 --- a/src/main/java/org/opensearch/security/resource/SecurityResourceSharingService.java +++ b/src/main/java/org/opensearch/security/resource/SecurityResourceSharingService.java @@ -20,23 +20,24 @@ import org.opensearch.core.action.ActionListener; import org.opensearch.index.query.BoolQueryBuilder; import org.opensearch.index.query.QueryBuilders; +import org.opensearch.plugins.resource.ResourceSharingService; import org.opensearch.search.SearchHit; import org.opensearch.search.builder.SearchSourceBuilder; import org.opensearch.security.rest.resource.ShareWith; -import org.opensearch.security.spi.Resource; -import org.opensearch.security.spi.ResourceSharingService; import org.opensearch.security.support.ConfigConstants; import org.opensearch.security.support.WildcardMatcher; import org.opensearch.security.user.User; import static org.opensearch.security.resource.ResourceSharingListener.RESOURCE_SHARING_INDEX; -public class SecurityResourceSharingService implements ResourceSharingService { +public class SecurityResourceSharingService implements ResourceSharingService { private final Client client; + private final String resourceType; private final String resourceIndex; - public SecurityResourceSharingService(Client client, String resourceIndex) { + public SecurityResourceSharingService(Client client, String resourceType, String resourceIndex) { this.client = client; + this.resourceType = resourceType; this.resourceIndex = resourceIndex; } @@ -62,7 +63,12 @@ private boolean hasPermissionsFor(User authenticatedUser, ResourceSharingEntry s } @Override - public void isSharedWithCurrentUser(String resourceId, ActionListener resourceSharingListener) { + public String getResourceType() { + return resourceType; + } + + @Override + public void isSharedWithCurrentRequester(String resourceId, ActionListener resourceSharingListener) { User authenticatedUser = (User) client.threadPool() .getThreadContext() .getPersistent(ConfigConstants.OPENDISTRO_SECURITY_AUTHENTICATED_USER); diff --git a/src/main/java/org/opensearch/security/rest/resource/ShareWithRestAction.java b/src/main/java/org/opensearch/security/rest/resource/ShareWithRestAction.java index d114b8a576..d9085b1150 100644 --- a/src/main/java/org/opensearch/security/rest/resource/ShareWithRestAction.java +++ b/src/main/java/org/opensearch/security/rest/resource/ShareWithRestAction.java @@ -17,10 +17,10 @@ import org.opensearch.client.node.NodeClient; import org.opensearch.core.xcontent.XContentParser; +import org.opensearch.plugins.resource.ResourceType; import org.opensearch.rest.BaseRestHandler; import org.opensearch.rest.RestRequest; import org.opensearch.rest.action.RestToXContentListener; -import org.opensearch.security.spi.ResourceSharingExtension; import static org.opensearch.rest.RestRequest.Method.PUT; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; @@ -29,10 +29,10 @@ public class ShareWithRestAction extends BaseRestHandler { private final Map resourceTypeToIndexMap = new HashMap<>(); - public ShareWithRestAction(final List resourceSharingExtensions) { - if (resourceSharingExtensions != null) { - for (ResourceSharingExtension resourceSharingExtension : resourceSharingExtensions) { - resourceTypeToIndexMap.put(resourceSharingExtension.getResourceType(), resourceSharingExtension.getResourceIndex()); + public ShareWithRestAction(final List resourceTypes) { + if (resourceTypes != null) { + for (ResourceType resourceType : resourceTypes) { + resourceTypeToIndexMap.put(resourceType.getResourceType(), resourceType.getResourceIndex()); } } } @@ -58,6 +58,10 @@ public RestChannelConsumer prepareRequest(RestRequest request, NodeClient client String resourceId = request.param("id"); String resourceType = request.param("resource_type"); + System.out.println("ShareWithRestAction"); + + System.out.println("resourceTypeToIndexMap: " + resourceTypeToIndexMap); + if (!resourceTypeToIndexMap.containsKey(resourceType)) { throw new IllegalArgumentException("Resource type " + resourceType + " is not supported"); }