X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fnetconf-topology-singleton%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Ftopology%2Fsingleton%2Fimpl%2FRemoteDeviceConnectorImpl.java;h=acf3854a83c7289b3b9bd91ae56b1b2217043d16;hb=202b4d062c1064fc061009d5725b8a102fcc13c4;hp=02f9fe8aba3131a4a6ef86599a2f3511f9ba5a70;hpb=3d01a690f3d26dbd2bec429415b026e501fcead5;p=netconf.git diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImpl.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImpl.java index 02f9fe8aba..acf3854a83 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImpl.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImpl.java @@ -23,8 +23,10 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; +import org.opendaylight.aaa.encrypt.AAAEncryptionService; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.client.NetconfClientSessionListener; @@ -32,7 +34,7 @@ import org.opendaylight.netconf.client.conf.NetconfClientConfiguration; import org.opendaylight.netconf.client.conf.NetconfReconnectingClientConfiguration; import org.opendaylight.netconf.client.conf.NetconfReconnectingClientConfigurationBuilder; import org.opendaylight.netconf.nettyutil.handler.ssh.authentication.AuthenticationHandler; -import org.opendaylight.netconf.nettyutil.handler.ssh.authentication.LoginPassword; +import org.opendaylight.netconf.nettyutil.handler.ssh.authentication.PublicKeyAuth; import org.opendaylight.netconf.sal.connect.api.RemoteDevice; import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler; import org.opendaylight.netconf.sal.connect.netconf.LibraryModulesSchemas; @@ -77,7 +79,9 @@ public class RemoteDeviceConnectorImpl implements RemoteDeviceConnector { private final RemoteDeviceId remoteDeviceId; private final DOMMountPointService mountService; private final Timeout actorResponseWaitTime; - + private final String privateKeyPath; + private final String privateKeyPassphrase; + private final AAAEncryptionService encryptionService; private NetconfConnectorDTO deviceCommunicatorDTO; public RemoteDeviceConnectorImpl(final NetconfTopologySetup netconfTopologyDeviceSetup, @@ -88,6 +92,9 @@ public class RemoteDeviceConnectorImpl implements RemoteDeviceConnector { this.remoteDeviceId = remoteDeviceId; this.actorResponseWaitTime = actorResponseWaitTime; this.mountService = mountService; + this.privateKeyPath = netconfTopologyDeviceSetup.getPrivateKeyPath(); + this.privateKeyPassphrase = netconfTopologyDeviceSetup.getPrivateKeyPassphrase(); + this.encryptionService = netconfTopologyDeviceSetup.getEncryptionService(); } @Override @@ -120,6 +127,7 @@ public class RemoteDeviceConnectorImpl implements RemoteDeviceConnector { }); } + @SuppressWarnings("checkstyle:IllegalCatch") @Override public void stopRemoteDeviceConnection() { Preconditions.checkNotNull(deviceCommunicatorDTO, remoteDeviceId + ": Device communicator was not created."); @@ -205,11 +213,12 @@ public class RemoteDeviceConnectorImpl implements RemoteDeviceConnector { } return new NetconfConnectorDTO( - userCapabilities.isPresent() - ? new NetconfDeviceCommunicator( - remoteDeviceId, device, new UserPreferences(userCapabilities.get(), - node.getYangModuleCapabilities().isOverride(), node.getNonModuleCapabilities().isOverride()), - rpcMessageLimit) + userCapabilities.isPresent() ? new NetconfDeviceCommunicator(remoteDeviceId, device, + new UserPreferences(userCapabilities.get(), + Objects.isNull(node.getYangModuleCapabilities()) + ? false : node.getYangModuleCapabilities().isOverride(), + Objects.isNull(node.getNonModuleCapabilities()) + ? false : node.getNonModuleCapabilities().isOverride()), rpcMessageLimit) : new NetconfDeviceCommunicator(remoteDeviceId, device, rpcMessageLimit), salFacade); } @@ -225,9 +234,9 @@ public class RemoteDeviceConnectorImpl implements RemoteDeviceConnector { //non-module capabilities should not exist in yang module capabilities final NetconfSessionPreferences netconfSessionPreferences = NetconfSessionPreferences.fromStrings(capabilities); - Preconditions.checkState(netconfSessionPreferences.getNonModuleCaps().isEmpty(), "List yang-module-capabilities/capability " + - "should contain only module based capabilities. Non-module capabilities used: " + - netconfSessionPreferences.getNonModuleCaps()); + Preconditions.checkState(netconfSessionPreferences.getNonModuleCaps().isEmpty(), + "List yang-module-capabilities/capability should contain only module based capabilities. " + + "Non-module capabilities used: " + netconfSessionPreferences.getNonModuleCaps()); if (node.getNonModuleCapabilities() != null) { capabilities.addAll(node.getNonModuleCapabilities().getCapability()); @@ -271,10 +280,15 @@ public class RemoteDeviceConnectorImpl implements RemoteDeviceConnector { final AuthenticationHandler authHandler; final Credentials credentials = node.getCredentials(); - if (credentials instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPassword) { - authHandler = new LoginPassword( - ((org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPassword) credentials).getUsername(), - ((org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPassword) credentials).getPassword()); + if (credentials instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf + .node.credentials.credentials.LoginPassword) { + authHandler = new PublicKeyAuth( + ((org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf + .node.credentials.credentials.LoginPassword) credentials).getUsername(), + ((org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf + .node.credentials.credentials.LoginPassword) credentials).getPassword(), + this.privateKeyPath, this.privateKeyPassphrase, encryptionService); + } else { throw new IllegalStateException(remoteDeviceId + ": Only login/password authentication is supported"); }