diff --git a/src/main/java/org/opensearch/security/OpenSearchSecurityPlugin.java b/src/main/java/org/opensearch/security/OpenSearchSecurityPlugin.java index f0356b623d..31a8a9acf6 100644 --- a/src/main/java/org/opensearch/security/OpenSearchSecurityPlugin.java +++ b/src/main/java/org/opensearch/security/OpenSearchSecurityPlugin.java @@ -246,6 +246,7 @@ public final class OpenSearchSecurityPlugin extends OpenSearchSecuritySSLPlugin private static final Logger actionTrace = LogManager.getLogger("opendistro_security_action_trace"); private static final DeprecationLogger deprecationLogger = DeprecationLogger.getLogger(OpenSearchSecurityPlugin.class); + @Deprecated public static final String LEGACY_OPENDISTRO_PREFIX = "_opendistro/_security"; public static final String PLUGINS_PREFIX = "_plugins/_security"; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/AccountApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/AccountApiAction.java index ad9aa656da..45f97b0931 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/AccountApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/AccountApiAction.java @@ -43,6 +43,8 @@ import static org.opensearch.security.dlic.rest.api.Responses.badRequestMessage; import static org.opensearch.security.dlic.rest.api.Responses.ok; import static org.opensearch.security.dlic.rest.api.Responses.response; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; /** @@ -57,6 +59,13 @@ public class AccountApiAction extends AbstractApiAction { ImmutableList.of(new Route(Method.GET, "/account"), new Route(Method.PUT, "/account")) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(Method.GET, "/account", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PUT, "/account", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + public AccountApiAction( final ClusterService clusterService, final ThreadPool threadPool, @@ -73,6 +82,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected CType getConfigType() { return CType.INTERNALUSERS; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/ActionGroupsApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/ActionGroupsApiAction.java index e54e7d87af..751de30905 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/ActionGroupsApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/ActionGroupsApiAction.java @@ -40,6 +40,8 @@ import static org.opensearch.security.dlic.rest.api.RequestHandler.methodNotImplementedHandler; import static org.opensearch.security.dlic.rest.api.Responses.badRequestMessage; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class ActionGroupsApiAction extends AbstractApiAction { @@ -72,6 +74,22 @@ public class ActionGroupsApiAction extends AbstractApiAction { ) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(Method.GET, "/actiongroup/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.GET, "/actiongroup", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.DELETE, "/actiongroup/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PUT, "/actiongroup/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + + new DeprecatedRoute(Method.GET, "/actiongroups/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.GET, "/actiongroups", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.DELETE, "/actiongroups/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PUT, "/actiongroups/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/actiongroups", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/actiongroups/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + @Inject public ActionGroupsApiAction( final ClusterService clusterService, @@ -87,6 +105,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected CType getConfigType() { return CType.ACTIONGROUPS; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/AuditApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/AuditApiAction.java index a5bf9c6b9b..690458da2f 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/AuditApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/AuditApiAction.java @@ -41,6 +41,8 @@ import static org.opensearch.security.dlic.rest.api.RequestHandler.methodNotImplementedHandler; import static org.opensearch.security.dlic.rest.api.Responses.conflictMessage; import static org.opensearch.security.dlic.rest.api.Responses.methodNotImplementedMessage; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; /** @@ -129,6 +131,14 @@ public class AuditApiAction extends AbstractApiAction { ) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(RestRequest.Method.GET, "/audit", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(RestRequest.Method.PUT, "/audit/config", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(RestRequest.Method.PATCH, "/audit", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + @VisibleForTesting public static final String READONLY_FIELD = "_readonly"; @VisibleForTesting @@ -232,6 +242,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected CType getConfigType() { return CType.AUDIT; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/AuthTokenProcessorAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/AuthTokenProcessorAction.java index b77af85db3..60fdacfd6d 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/AuthTokenProcessorAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/AuthTokenProcessorAction.java @@ -14,6 +14,8 @@ import java.util.Collections; import java.util.List; +import com.google.common.collect.ImmutableList; + import org.opensearch.cluster.service.ClusterService; import org.opensearch.common.inject.Inject; import org.opensearch.rest.RestRequest.Method; @@ -21,11 +23,18 @@ import org.opensearch.threadpool.ThreadPool; import static org.opensearch.security.dlic.rest.api.Responses.ok; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class AuthTokenProcessorAction extends AbstractApiAction { + private static final List routes = addRoutesPrefix(Collections.singletonList(new Route(Method.POST, "/authtoken"))); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of(new DeprecatedRoute(Method.POST, "/authtoken", OPENDISTRO_API_DEPRECATION_MESSAGE)) + ); + @Inject public AuthTokenProcessorAction( final ClusterService clusterService, @@ -43,6 +52,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected CType getConfigType() { return null; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/ConfigUpgradeApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/ConfigUpgradeApiAction.java index 545a7be105..f613da815e 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/ConfigUpgradeApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/ConfigUpgradeApiAction.java @@ -62,6 +62,8 @@ import static org.opensearch.security.dlic.rest.api.Responses.badRequestMessage; import static org.opensearch.security.dlic.rest.api.Responses.response; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.withIOException; @@ -77,6 +79,13 @@ public class ConfigUpgradeApiAction extends AbstractApiAction { ImmutableList.of(new Route(Method.GET, "/_upgrade_check"), new Route(Method.POST, "/_upgrade_perform")) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(Method.GET, "/_upgrade_check", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.POST, "/_upgrade_perform", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + @Inject public ConfigUpgradeApiAction( final ClusterService clusterService, @@ -285,6 +294,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected CType getConfigType() { throw new UnsupportedOperationException("This class supports multiple configuration types"); diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/FlushCacheApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/FlushCacheApiAction.java index c574f1bee2..aa7ee50940 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/FlushCacheApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/FlushCacheApiAction.java @@ -30,6 +30,8 @@ import static org.opensearch.security.dlic.rest.api.Responses.internalServerError; import static org.opensearch.security.dlic.rest.api.Responses.ok; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class FlushCacheApiAction extends AbstractApiAction { @@ -38,6 +40,10 @@ public class FlushCacheApiAction extends AbstractApiAction { private static final List routes = addRoutesPrefix(ImmutableList.of(new Route(Method.DELETE, "/cache"))); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of(new DeprecatedRoute(Method.DELETE, "/cache", OPENDISTRO_API_DEPRECATION_MESSAGE)) + ); + @Inject public FlushCacheApiAction( final ClusterService clusterService, @@ -53,6 +59,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + private void flushCacheApiRequestHandlers(RequestHandler.RequestHandlersBuilder requestHandlersBuilder) { requestHandlersBuilder.allMethodsNotImplemented() .override( diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/InternalUsersApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/InternalUsersApiAction.java index 00c33e0f4f..f0eeb89926 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/InternalUsersApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/InternalUsersApiAction.java @@ -47,6 +47,8 @@ import static org.opensearch.security.dlic.rest.api.Responses.ok; import static org.opensearch.security.dlic.rest.api.Responses.payload; import static org.opensearch.security.dlic.rest.api.Responses.response; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class InternalUsersApiAction extends AbstractApiAction { @@ -82,6 +84,25 @@ protected void consumeParameters(final RestRequest request) { ) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(Method.GET, "/user/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.GET, "/user", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.POST, "/user/{name}/authtoken", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.DELETE, "/user/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PUT, "/user/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + + // corrected mapping, introduced in OpenSearch Security + new DeprecatedRoute(Method.GET, "/internalusers/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.GET, "/internalusers", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.POST, "/internalusers/{name}/authtoken", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.DELETE, "/internalusers/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PUT, "/internalusers/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/internalusers", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/internalusers/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + UserService userService; @Inject @@ -103,6 +124,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected CType getConfigType() { return CType.INTERNALUSERS; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/MultiTenancyConfigApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/MultiTenancyConfigApiAction.java index 5614c5018b..4782f4686a 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/MultiTenancyConfigApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/MultiTenancyConfigApiAction.java @@ -29,6 +29,7 @@ import org.opensearch.common.settings.Settings; import org.opensearch.core.xcontent.ToXContent; import org.opensearch.rest.RestChannel; +import org.opensearch.rest.RestRequest; import org.opensearch.security.dlic.rest.validation.EndpointValidator; import org.opensearch.security.dlic.rest.validation.RequestContentValidator; import org.opensearch.security.dlic.rest.validation.RequestContentValidator.DataType; @@ -45,6 +46,8 @@ import static org.opensearch.rest.RestRequest.Method.PUT; import static org.opensearch.security.dlic.rest.api.Responses.ok; import static org.opensearch.security.dlic.rest.api.Responses.response; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class MultiTenancyConfigApiAction extends AbstractApiAction { @@ -58,6 +61,13 @@ public class MultiTenancyConfigApiAction extends AbstractApiAction { ImmutableList.of(new Route(GET, "/tenancy/config"), new Route(PUT, "/tenancy/config")) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(RestRequest.Method.GET, "/tenancy/config", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(RestRequest.Method.PUT, "/tenancy/config", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + private final static Set ACCEPTABLE_DEFAULT_TENANTS = Set.of( ConfigConstants.TENANCY_GLOBAL_TENANT_DEFAULT_NAME, ConfigConstants.TENANCY_GLOBAL_TENANT_NAME, @@ -74,6 +84,11 @@ public List routes() { return ROUTES; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + public MultiTenancyConfigApiAction( final ClusterService clusterService, final ThreadPool threadPool, diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/NodesDnApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/NodesDnApiAction.java index d1c53721d8..d7d13014c6 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/NodesDnApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/NodesDnApiAction.java @@ -39,6 +39,8 @@ import org.opensearch.threadpool.ThreadPool; import static org.opensearch.security.dlic.rest.api.Responses.forbiddenMessage; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; /** @@ -70,6 +72,17 @@ public class NodesDnApiAction extends AbstractApiAction { ) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(Method.GET, "/nodesdn/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.GET, "/nodesdn", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.DELETE, "/nodesdn/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PUT, "/nodesdn/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/nodesdn", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/nodesdn/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + @Inject public NodesDnApiAction( final ClusterService clusterService, @@ -89,6 +102,14 @@ public List routes() { return Collections.emptyList(); } + @Override + public List deprecatedRoutes() { + if (securityApiDependencies.settings().getAsBoolean(ConfigConstants.SECURITY_NODES_DN_DYNAMIC_CONFIG_ENABLED, false)) { + return deprecatedRoutes; + } + return Collections.emptyList(); + } + @Override protected CType getConfigType() { return CType.NODESDN; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/PermissionsInfoAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/PermissionsInfoAction.java index bf3b3d9a24..db67e9b979 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/PermissionsInfoAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/PermissionsInfoAction.java @@ -43,14 +43,21 @@ import org.opensearch.transport.client.Client; import org.opensearch.transport.client.node.NodeClient; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; /** * Provides the evaluated REST API permissions for the currently logged in user */ public class PermissionsInfoAction extends BaseRestHandler { + private static final List routes = addRoutesPrefix(Collections.singletonList(new Route(Method.GET, "/permissionsinfo"))); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of(new DeprecatedRoute(Method.GET, "/permissionsinfo", OPENDISTRO_API_DEPRECATION_MESSAGE)) + ); + private final RestApiPrivilegesEvaluator restApiPrivilegesEvaluator; private final ThreadPool threadPool; private final PrivilegesEvaluator privilegesEvaluator; @@ -93,6 +100,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException { switch (request.method()) { diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/RateLimitersApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/RateLimitersApiAction.java index 387fe75cde..b250923471 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/RateLimitersApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/RateLimitersApiAction.java @@ -25,6 +25,7 @@ import org.opensearch.common.settings.Settings; import org.opensearch.core.rest.RestStatus; import org.opensearch.core.xcontent.ToXContent; +import org.opensearch.rest.RestRequest; import org.opensearch.security.DefaultObjectMapper; import org.opensearch.security.dlic.rest.validation.EndpointValidator; import org.opensearch.security.dlic.rest.validation.RequestContentValidator; @@ -43,6 +44,8 @@ import static org.opensearch.security.dlic.rest.api.Responses.notFound; import static org.opensearch.security.dlic.rest.api.Responses.ok; import static org.opensearch.security.dlic.rest.api.Responses.response; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; import static org.opensearch.security.securityconf.impl.v7.ConfigV7.ALLOWED_TRIES_DEFAULT; import static org.opensearch.security.securityconf.impl.v7.ConfigV7.BLOCK_EXPIRY_SECONDS_DEFAULT; @@ -75,11 +78,24 @@ public class RateLimitersApiAction extends AbstractApiAction { ) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(RestRequest.Method.GET, "/authfailurelisteners", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(RestRequest.Method.DELETE, "/authfailurelisteners/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(RestRequest.Method.PUT, "/authfailurelisteners/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + protected RateLimitersApiAction(ClusterService clusterService, ThreadPool threadPool, SecurityApiDependencies securityApiDependencies) { super(Endpoint.RATELIMITERS, clusterService, threadPool, securityApiDependencies); this.requestHandlersBuilder.configureRequestHandlers(this::authFailureConfigApiRequestHandlers); } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override public String getName() { return "Rate limiter actions to retrieve / update configs."; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/RolesApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/RolesApiAction.java index 3c9f58a522..4339a11d96 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/RolesApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/RolesApiAction.java @@ -39,6 +39,8 @@ import org.opensearch.threadpool.ThreadPool; import static org.opensearch.security.dlic.rest.api.RequestHandler.methodNotImplementedHandler; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class RolesApiAction extends AbstractApiAction { @@ -54,6 +56,17 @@ public class RolesApiAction extends AbstractApiAction { ) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(Method.GET, "/roles", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.GET, "/roles/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.DELETE, "/roles/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PUT, "/roles/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/roles", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/roles/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + public static class RoleRequestContentValidator extends RequestContentValidator { private static final Salt SALT = new Salt(new byte[] { 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6 }); @@ -115,6 +128,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected CType getConfigType() { return CType.ROLES; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/RolesMappingApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/RolesMappingApiAction.java index 5b117ec48d..58ce27af93 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/RolesMappingApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/RolesMappingApiAction.java @@ -32,6 +32,8 @@ import org.opensearch.threadpool.ThreadPool; import static org.opensearch.security.dlic.rest.api.RequestHandler.methodNotImplementedHandler; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class RolesMappingApiAction extends AbstractApiAction { @@ -47,6 +49,17 @@ public class RolesMappingApiAction extends AbstractApiAction { ) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(Method.GET, "/rolesmapping", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.GET, "/rolesmapping/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.DELETE, "/rolesmapping/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PUT, "/rolesmapping/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/rolesmapping", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/rolesmapping/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + @Inject public RolesMappingApiAction( final ClusterService clusterService, @@ -64,6 +77,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected CType getConfigType() { return CType.ROLESMAPPING; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/SecurityConfigApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/SecurityConfigApiAction.java index 57c23f86af..4cb5a2a77e 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/SecurityConfigApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/SecurityConfigApiAction.java @@ -14,6 +14,7 @@ import java.util.List; import java.util.Map; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.opensearch.cluster.service.ClusterService; @@ -30,6 +31,8 @@ import static org.opensearch.security.dlic.rest.api.RequestHandler.methodNotImplementedHandler; import static org.opensearch.security.dlic.rest.api.RestApiAdminPrivilegesEvaluator.SECURITY_CONFIG_UPDATE; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; import static org.opensearch.security.support.ConfigConstants.SECURITY_RESTAPI_ADMIN_ENABLED; @@ -43,6 +46,15 @@ public class SecurityConfigApiAction extends AbstractApiAction { ) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(Method.GET, "/securityconfig", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/securityconfig", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PUT, "/securityconfig/config", OPENDISTRO_API_DEPRECATION_MESSAGE) + + ) + ); + private final boolean allowPutOrPatch; private final boolean restApiAdminEnabled; @@ -66,6 +78,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected CType getConfigType() { return CType.CONFIG; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/SecuritySSLCertsApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/SecuritySSLCertsApiAction.java index 5233149c66..acaa9d0aab 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/SecuritySSLCertsApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/SecuritySSLCertsApiAction.java @@ -43,6 +43,8 @@ import static org.opensearch.security.dlic.rest.api.Responses.response; import static org.opensearch.security.dlic.rest.api.RestApiAdminPrivilegesEvaluator.CERTS_INFO_ACTION; import static org.opensearch.security.dlic.rest.api.RestApiAdminPrivilegesEvaluator.RELOAD_CERTS_ACTION; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; /** @@ -63,6 +65,13 @@ public class SecuritySSLCertsApiAction extends AbstractApiAction { ) ); + private static final List DEPRECATED_ROUTES = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(Method.GET, "/ssl/certs", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PUT, "/ssl/{certType}/reloadcerts", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + private final SslSettingsManager sslSettingsManager; private final boolean certificatesReloadEnabled; @@ -85,6 +94,11 @@ public List routes() { return ROUTES; } + @Override + public List deprecatedRoutes() { + return DEPRECATED_ROUTES; + } + @Override public String getName() { return "SSL Certificates Action"; diff --git a/src/main/java/org/opensearch/security/dlic/rest/api/TenantsApiAction.java b/src/main/java/org/opensearch/security/dlic/rest/api/TenantsApiAction.java index 7cccd04bb1..6eb2c986a9 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/api/TenantsApiAction.java +++ b/src/main/java/org/opensearch/security/dlic/rest/api/TenantsApiAction.java @@ -43,6 +43,8 @@ import org.opensearch.security.securityconf.impl.CType; import org.opensearch.threadpool.ThreadPool; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addLegacyRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class TenantsApiAction extends AbstractApiAction { @@ -58,6 +60,17 @@ public class TenantsApiAction extends AbstractApiAction { ) ); + private static final List deprecatedRoutes = addLegacyRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(Method.GET, "/tenants/", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.GET, "/tenants/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.DELETE, "/tenants/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PUT, "/tenants/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/tenants", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(Method.PATCH, "/tenants/{name}", OPENDISTRO_API_DEPRECATION_MESSAGE) + ) + ); + @Inject public TenantsApiAction( final ClusterService clusterService, @@ -73,6 +86,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected CType getConfigType() { return CType.TENANTS; diff --git a/src/main/java/org/opensearch/security/dlic/rest/support/Utils.java b/src/main/java/org/opensearch/security/dlic/rest/support/Utils.java index 2e900169db..81b813e8b1 100644 --- a/src/main/java/org/opensearch/security/dlic/rest/support/Utils.java +++ b/src/main/java/org/opensearch/security/dlic/rest/support/Utils.java @@ -58,12 +58,17 @@ public class Utils { public final static String PLUGIN_ROUTE_PREFIX = "/" + PLUGINS_PREFIX; + @Deprecated public final static String LEGACY_PLUGIN_ROUTE_PREFIX = "/" + LEGACY_OPENDISTRO_PREFIX; public final static String PLUGIN_API_ROUTE_PREFIX = PLUGIN_ROUTE_PREFIX + "/api"; + @Deprecated public final static String LEGACY_PLUGIN_API_ROUTE_PREFIX = LEGACY_PLUGIN_ROUTE_PREFIX + "/api"; + public final static String OPENDISTRO_API_DEPRECATION_MESSAGE = + "[_opendistro/_security] is a deprecated endpoint path. Please use _plugins/_security instead."; + private static final ObjectMapper internalMapper = new ObjectMapper(); public static Map convertJsonToxToStructuredMap(ToXContent jsonContent) { @@ -198,13 +203,23 @@ public static Set generateFieldResourcePaths(final Set fields, f } /** - * Add prefixes(_opendistro... and _plugins...) to rest API routes + * Add prefixes(_plugins/_security/api) to rest API routes * @param routes routes - * @return new list of API routes prefixed with _opendistro... and _plugins... - *Total number of routes is expanded as twice as the number of routes passed in + * @return new list of API routes prefixed with and _plugins/_security/api */ public static List addRoutesPrefix(List routes) { - return addRoutesPrefix(routes, LEGACY_PLUGIN_API_ROUTE_PREFIX, PLUGIN_API_ROUTE_PREFIX); + return addRoutesPrefix(routes, PLUGIN_API_ROUTE_PREFIX); + } + + /** + * Add prefixes(_opendistro/_security/api) to rest API routes + * Deprecated in favor of addRoutesPrefix(List routes) + * @param routes routes + * @return new list of API routes prefixed with and _opendistro/_security/api + */ + @Deprecated + public static List addLegacyRoutesPrefix(List routes) { + return addDeprecatedRoutesPrefix(routes, LEGACY_PLUGIN_API_ROUTE_PREFIX); } /** diff --git a/src/main/java/org/opensearch/security/rest/DashboardsInfoAction.java b/src/main/java/org/opensearch/security/rest/DashboardsInfoAction.java index df1874fafb..1f2a638b1f 100644 --- a/src/main/java/org/opensearch/security/rest/DashboardsInfoAction.java +++ b/src/main/java/org/opensearch/security/rest/DashboardsInfoAction.java @@ -51,7 +51,9 @@ import static org.opensearch.rest.RestRequest.Method.GET; import static org.opensearch.rest.RestRequest.Method.POST; import static org.opensearch.security.dlic.rest.support.Utils.LEGACY_PLUGIN_ROUTE_PREFIX; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; import static org.opensearch.security.dlic.rest.support.Utils.PLUGIN_ROUTE_PREFIX; +import static org.opensearch.security.dlic.rest.support.Utils.addDeprecatedRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class DashboardsInfoAction extends BaseRestHandler { @@ -60,8 +62,17 @@ public class DashboardsInfoAction extends BaseRestHandler { .addAll( addRoutesPrefix(ImmutableList.of(new Route(GET, "/dashboardsinfo"), new Route(POST, "/dashboardsinfo")), PLUGIN_ROUTE_PREFIX) ) + .build(); + + private static final List deprecatedRoutes = ImmutableList.builder() .addAll( - addRoutesPrefix(ImmutableList.of(new Route(GET, "/kibanainfo"), new Route(POST, "/kibanainfo")), LEGACY_PLUGIN_ROUTE_PREFIX) + addDeprecatedRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(GET, "/kibanainfo", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(POST, "/kibanainfo", OPENDISTRO_API_DEPRECATION_MESSAGE) + ), + LEGACY_PLUGIN_ROUTE_PREFIX + ) ) .build(); @@ -90,6 +101,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException { return new RestChannelConsumer() { diff --git a/src/main/java/org/opensearch/security/rest/SecurityConfigUpdateAction.java b/src/main/java/org/opensearch/security/rest/SecurityConfigUpdateAction.java index d1ff68a7fc..d6d3843566 100644 --- a/src/main/java/org/opensearch/security/rest/SecurityConfigUpdateAction.java +++ b/src/main/java/org/opensearch/security/rest/SecurityConfigUpdateAction.java @@ -37,11 +37,18 @@ import org.opensearch.transport.client.node.NodeClient; import static org.opensearch.rest.RestRequest.Method.PUT; +import static org.opensearch.security.dlic.rest.support.Utils.LEGACY_PLUGIN_ROUTE_PREFIX; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addDeprecatedRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class SecurityConfigUpdateAction extends BaseRestHandler { private static final List routes = addRoutesPrefix(ImmutableList.of(new Route(PUT, "/configupdate")), "/_plugins/_security"); + private static final List deprecatedRoutes = addDeprecatedRoutesPrefix( + ImmutableList.of(new DeprecatedRoute(PUT, "/configupdate", OPENDISTRO_API_DEPRECATION_MESSAGE)), + LEGACY_PLUGIN_ROUTE_PREFIX + ); private final ThreadContext threadContext; private final AdminDNs adminDns; @@ -70,6 +77,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException { String[] configTypes = request.paramAsStringArrayOrEmptyIfAll("config_types"); diff --git a/src/main/java/org/opensearch/security/rest/SecurityHealthAction.java b/src/main/java/org/opensearch/security/rest/SecurityHealthAction.java index 1efa41e7e1..892f48d892 100644 --- a/src/main/java/org/opensearch/security/rest/SecurityHealthAction.java +++ b/src/main/java/org/opensearch/security/rest/SecurityHealthAction.java @@ -45,16 +45,25 @@ import static org.opensearch.rest.RestRequest.Method.GET; import static org.opensearch.rest.RestRequest.Method.POST; import static org.opensearch.security.dlic.rest.support.Utils.LEGACY_PLUGIN_ROUTE_PREFIX; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; import static org.opensearch.security.dlic.rest.support.Utils.PLUGIN_ROUTE_PREFIX; +import static org.opensearch.security.dlic.rest.support.Utils.addDeprecatedRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class SecurityHealthAction extends BaseRestHandler { private static final List routes = addRoutesPrefix( ImmutableList.of(new Route(GET, "/health"), new Route(POST, "/health")), - LEGACY_PLUGIN_ROUTE_PREFIX, PLUGIN_ROUTE_PREFIX ); + private static final List deprecatedRoutes = addDeprecatedRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(GET, "/health", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(POST, "/health", OPENDISTRO_API_DEPRECATION_MESSAGE) + ), + LEGACY_PLUGIN_ROUTE_PREFIX + ); + private final BackendRegistry registry; public SecurityHealthAction(final Settings settings, final RestController controller, final BackendRegistry registry) { @@ -67,6 +76,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException { return new RestChannelConsumer() { diff --git a/src/main/java/org/opensearch/security/rest/SecurityInfoAction.java b/src/main/java/org/opensearch/security/rest/SecurityInfoAction.java index 5fffffa380..560f1b4669 100644 --- a/src/main/java/org/opensearch/security/rest/SecurityInfoAction.java +++ b/src/main/java/org/opensearch/security/rest/SecurityInfoAction.java @@ -58,14 +58,19 @@ import static org.opensearch.rest.RestRequest.Method.GET; import static org.opensearch.rest.RestRequest.Method.POST; import static org.opensearch.security.dlic.rest.support.Utils.LEGACY_PLUGIN_ROUTE_PREFIX; -import static org.opensearch.security.dlic.rest.support.Utils.PLUGIN_ROUTE_PREFIX; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; +import static org.opensearch.security.dlic.rest.support.Utils.addDeprecatedRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class SecurityInfoAction extends BaseRestHandler { - private static final List routes = addRoutesPrefix( - ImmutableList.of(new Route(GET, "/authinfo"), new Route(POST, "/authinfo")), - LEGACY_PLUGIN_ROUTE_PREFIX, - PLUGIN_ROUTE_PREFIX + private static final List routes = addRoutesPrefix(ImmutableList.of(new Route(GET, "/authinfo"), new Route(POST, "/authinfo"))); + + private static final List deprecatedRoutes = addDeprecatedRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(GET, "/authinfo", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(POST, "/authinfo", OPENDISTRO_API_DEPRECATION_MESSAGE) + ), + LEGACY_PLUGIN_ROUTE_PREFIX ); private final Logger log = LogManager.getLogger(this.getClass()); @@ -88,6 +93,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException { final boolean verbose = request.paramAsBoolean("verbose", false); diff --git a/src/main/java/org/opensearch/security/rest/TenantInfoAction.java b/src/main/java/org/opensearch/security/rest/TenantInfoAction.java index 453ae554e3..b2c0566e3d 100644 --- a/src/main/java/org/opensearch/security/rest/TenantInfoAction.java +++ b/src/main/java/org/opensearch/security/rest/TenantInfoAction.java @@ -62,16 +62,25 @@ import static org.opensearch.rest.RestRequest.Method.GET; import static org.opensearch.rest.RestRequest.Method.POST; import static org.opensearch.security.dlic.rest.support.Utils.LEGACY_PLUGIN_ROUTE_PREFIX; +import static org.opensearch.security.dlic.rest.support.Utils.OPENDISTRO_API_DEPRECATION_MESSAGE; import static org.opensearch.security.dlic.rest.support.Utils.PLUGIN_ROUTE_PREFIX; +import static org.opensearch.security.dlic.rest.support.Utils.addDeprecatedRoutesPrefix; import static org.opensearch.security.dlic.rest.support.Utils.addRoutesPrefix; public class TenantInfoAction extends BaseRestHandler { private static final List routes = addRoutesPrefix( ImmutableList.of(new Route(GET, "/tenantinfo"), new Route(POST, "/tenantinfo")), - LEGACY_PLUGIN_ROUTE_PREFIX, PLUGIN_ROUTE_PREFIX ); + private static final List deprecatedRoutes = addDeprecatedRoutesPrefix( + ImmutableList.of( + new DeprecatedRoute(GET, "/tenantinfo", OPENDISTRO_API_DEPRECATION_MESSAGE), + new DeprecatedRoute(POST, "/tenantinfo", OPENDISTRO_API_DEPRECATION_MESSAGE) + ), + LEGACY_PLUGIN_ROUTE_PREFIX + ); + private final Logger log = LogManager.getLogger(this.getClass()); private final PrivilegesEvaluator evaluator; private final ThreadContext threadContext; @@ -101,6 +110,11 @@ public List routes() { return routes; } + @Override + public List deprecatedRoutes() { + return deprecatedRoutes; + } + @Override protected RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException { return new RestChannelConsumer() {