Skip to content

Commit 85819c4

Browse files
committed
Make ProjectRoutingResolver injectable component
1 parent 6b65726 commit 85819c4

File tree

4 files changed

+20
-8
lines changed

4 files changed

+20
-8
lines changed

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/Security.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@
104104
import org.elasticsearch.rest.RestStatus;
105105
import org.elasticsearch.script.ScriptService;
106106
import org.elasticsearch.search.crossproject.CrossProjectModeDecider;
107+
import org.elasticsearch.search.crossproject.CrossProjectRoutingResolver;
108+
import org.elasticsearch.search.crossproject.ProjectRoutingResolver;
107109
import org.elasticsearch.search.internal.ShardSearchRequest;
108110
import org.elasticsearch.telemetry.TelemetryProvider;
109111
import org.elasticsearch.threadpool.ExecutorBuilder;
@@ -645,6 +647,7 @@ public class Security extends Plugin
645647
private final SetOnce<RemoteClusterSecurityExtension.Provider> remoteClusterSecurityExtensionProvider = new SetOnce<>();
646648
private final SetOnce<RemoteClusterSecurityExtension> remoteClusterSecurityExtension = new SetOnce<>();
647649
private final SetOnce<RemoteClusterAuthenticationService> remoteClusterAuthenticationService = new SetOnce<>();
650+
private final SetOnce<ProjectRoutingResolver> projectRoutingResolver = new SetOnce<>();
648651

649652
private final SetOnce<SecurityMigrations.Manager> migrationManager = new SetOnce<>();
650653
private final SetOnce<List<Closeable>> closableComponents = new SetOnce<>();
@@ -1166,9 +1169,12 @@ Collection<Object> createComponents(
11661169
linkedProjectConfigService,
11671170
projectResolver,
11681171
authorizedProjectsResolver,
1169-
new CrossProjectModeDecider(settings)
1172+
new CrossProjectModeDecider(settings),
1173+
projectRoutingResolver.get()
11701174
);
11711175

1176+
components.add(new PluginComponentBinding<>(ProjectRoutingResolver.class, projectRoutingResolver.get()));
1177+
11721178
components.add(nativeRolesStore); // used by roles actions
11731179
components.add(reservedRolesStore); // used by roles actions
11741180
components.add(allRolesStore); // for SecurityInfoTransportAction and clear roles cache
@@ -2557,6 +2563,7 @@ public void loadExtensions(ExtensionLoader loader) {
25572563
RemoteClusterSecurityExtension.Provider.class,
25582564
CrossClusterAccessSecurityExtension.Provider::new
25592565
);
2566+
loadSingletonExtensionAndSetOnce(loader, projectRoutingResolver, ProjectRoutingResolver.class, CrossProjectRoutingResolver::new);
25602567
}
25612568

25622569
private <T> void loadSingletonExtensionAndSetOnce(ExtensionLoader loader, SetOnce<T> setOnce, Class<T> clazz) {

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/authz/AuthorizationService.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.elasticsearch.license.XPackLicenseState;
5252
import org.elasticsearch.search.crossproject.CrossProjectModeDecider;
5353
import org.elasticsearch.search.crossproject.NoMatchingProjectException;
54+
import org.elasticsearch.search.crossproject.ProjectRoutingResolver;
5455
import org.elasticsearch.search.crossproject.TargetProjects;
5556
import org.elasticsearch.threadpool.ThreadPool;
5657
import org.elasticsearch.transport.LinkedProjectConfigService;
@@ -175,7 +176,8 @@ public AuthorizationService(
175176
LinkedProjectConfigService linkedProjectConfigService,
176177
ProjectResolver projectResolver,
177178
AuthorizedProjectsResolver authorizedProjectsResolver,
178-
CrossProjectModeDecider crossProjectModeDecider
179+
CrossProjectModeDecider crossProjectModeDecider,
180+
ProjectRoutingResolver projectRoutingResolver
179181
) {
180182
this.clusterService = clusterService;
181183
this.auditTrailService = auditTrailService;
@@ -184,7 +186,8 @@ public AuthorizationService(
184186
settings,
185187
linkedProjectConfigService,
186188
resolver,
187-
crossProjectModeDecider
189+
crossProjectModeDecider,
190+
projectRoutingResolver
188191
);
189192
this.authcFailureHandler = authcFailureHandler;
190193
this.threadContext = threadPool.getThreadContext();

x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/authz/IndicesAndAliasesResolver.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import org.elasticsearch.index.IndexNotFoundException;
3636
import org.elasticsearch.search.crossproject.CrossProjectIndexExpressionsRewriter;
3737
import org.elasticsearch.search.crossproject.CrossProjectModeDecider;
38-
import org.elasticsearch.search.crossproject.CrossProjectRoutingResolver;
3938
import org.elasticsearch.search.crossproject.ProjectRoutingResolver;
4039
import org.elasticsearch.search.crossproject.TargetProjects;
4140
import org.elasticsearch.transport.LinkedProjectConfig;
@@ -77,14 +76,14 @@ class IndicesAndAliasesResolver {
7776
Settings settings,
7877
LinkedProjectConfigService linkedProjectConfigService,
7978
IndexNameExpressionResolver resolver,
80-
CrossProjectModeDecider crossProjectModeDecider
79+
CrossProjectModeDecider crossProjectModeDecider,
80+
ProjectRoutingResolver crossProjectRoutingResolver
8181
) {
8282
this.nameExpressionResolver = resolver;
8383
this.indexAbstractionResolver = new IndexAbstractionResolver(resolver);
8484
this.remoteClusterResolver = new RemoteClusterResolver(settings, linkedProjectConfigService);
8585
this.crossProjectModeDecider = crossProjectModeDecider;
86-
// TODO: This should be injected when we have the implementation provided from the serverless side
87-
this.crossProjectRoutingResolver = new CrossProjectRoutingResolver();
86+
this.crossProjectRoutingResolver = crossProjectRoutingResolver;
8887
}
8988

9089
/**

x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authz/IndicesAndAliasesResolverTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import org.elasticsearch.license.MockLicenseState;
6363
import org.elasticsearch.protocol.xpack.graph.GraphExploreRequest;
6464
import org.elasticsearch.search.crossproject.CrossProjectModeDecider;
65+
import org.elasticsearch.search.crossproject.CrossProjectRoutingResolver;
6566
import org.elasticsearch.search.crossproject.ProjectRoutingInfo;
6667
import org.elasticsearch.search.crossproject.ProjectTags;
6768
import org.elasticsearch.search.crossproject.TargetProjects;
@@ -442,7 +443,9 @@ public void setup() {
442443
settings,
443444
new ClusterSettingsLinkedProjectConfigService(settings, clusterService.getClusterSettings(), projectResolver),
444445
indexNameExpressionResolver,
445-
crossProjectModeDecider
446+
crossProjectModeDecider,
447+
// TODO: we may want to change this later
448+
new CrossProjectRoutingResolver()
446449
);
447450
}
448451

0 commit comments

Comments
 (0)