From d17acd2a65c905d0a500577326ce882fa6ca80f6 Mon Sep 17 00:00:00 2001 From: Dmitriy Tverdiakov Date: Mon, 6 Mar 2023 13:02:39 +0000 Subject: [PATCH] Seal AuthToken interface Driver effectively does not expect external implementations of `AuthToken` interface. This update makes it more explicit. --- .../src/main/java/org/neo4j/driver/AuthToken.java | 4 +++- .../async/connection/ChannelConnectorImpl.java | 14 +------------- .../internal/security/InternalAuthToken.java | 2 +- 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/driver/src/main/java/org/neo4j/driver/AuthToken.java b/driver/src/main/java/org/neo4j/driver/AuthToken.java index 38232ba1be..27830cf012 100644 --- a/driver/src/main/java/org/neo4j/driver/AuthToken.java +++ b/driver/src/main/java/org/neo4j/driver/AuthToken.java @@ -18,6 +18,8 @@ */ package org.neo4j.driver; +import org.neo4j.driver.internal.security.InternalAuthToken; + /** * Token for holding authentication details, such as user name and password. * Such a token is required by a {@link Driver} to authenticate with a Neo4j @@ -27,4 +29,4 @@ * @see GraphDatabase#driver(String, AuthToken) * @since 1.0 */ -public interface AuthToken {} +public sealed interface AuthToken permits InternalAuthToken {} diff --git a/driver/src/main/java/org/neo4j/driver/internal/async/connection/ChannelConnectorImpl.java b/driver/src/main/java/org/neo4j/driver/internal/async/connection/ChannelConnectorImpl.java index 3cdd1cdc07..35a6ffc08d 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/async/connection/ChannelConnectorImpl.java +++ b/driver/src/main/java/org/neo4j/driver/internal/async/connection/ChannelConnectorImpl.java @@ -31,15 +31,12 @@ import java.net.SocketAddress; import java.time.Clock; import org.neo4j.driver.AuthToken; -import org.neo4j.driver.AuthTokens; import org.neo4j.driver.Logging; -import org.neo4j.driver.exceptions.ClientException; import org.neo4j.driver.internal.BoltServerAddress; import org.neo4j.driver.internal.ConnectionSettings; import org.neo4j.driver.internal.DomainNameResolver; import org.neo4j.driver.internal.async.inbound.ConnectTimeoutHandler; import org.neo4j.driver.internal.cluster.RoutingContext; -import org.neo4j.driver.internal.security.InternalAuthToken; import org.neo4j.driver.internal.security.SecurityPlan; public class ChannelConnectorImpl implements ChannelConnector { @@ -80,7 +77,7 @@ public ChannelConnectorImpl( RoutingContext routingContext, DomainNameResolver domainNameResolver) { this.userAgent = connectionSettings.userAgent(); - this.authToken = requireValidAuthToken(connectionSettings.authToken()); + this.authToken = connectionSettings.authToken(); this.routingContext = routingContext; this.connectTimeoutMillis = connectionSettings.connectTimeoutMillis(); this.securityPlan = requireNonNull(securityPlan); @@ -143,13 +140,4 @@ private void installHandshakeCompletedListeners( handshakeCompleted.addListener( new HandshakeCompletedListener(userAgent, authToken, routingContext, connectionInitialized)); } - - private static AuthToken requireValidAuthToken(AuthToken token) { - if (token instanceof InternalAuthToken) { - return token; - } else { - throw new ClientException("Unknown authentication token, `" + token + "`. Please use one of the supported " - + "tokens from `" + AuthTokens.class.getSimpleName() + "`."); - } - } } diff --git a/driver/src/main/java/org/neo4j/driver/internal/security/InternalAuthToken.java b/driver/src/main/java/org/neo4j/driver/internal/security/InternalAuthToken.java index 6b12dc08ab..d4848edc7b 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/security/InternalAuthToken.java +++ b/driver/src/main/java/org/neo4j/driver/internal/security/InternalAuthToken.java @@ -26,7 +26,7 @@ * A simple common token for authentication schemes that easily convert to * an auth token map */ -public class InternalAuthToken implements AuthToken { +public final class InternalAuthToken implements AuthToken { public static final String SCHEME_KEY = "scheme"; public static final String PRINCIPAL_KEY = "principal"; public static final String CREDENTIALS_KEY = "credentials";