Refactor ClientFactoryManagerConfigurator
[netconf.git] / apps / netconf-topology / src / main / java / org / opendaylight / netconf / topology / spi / NetconfClientConfigurationBuilderFactoryImpl.java
index 24dcad0f53098e690582f54f24c6791d8f7425fe..82fd1f9400f1f22c9a4608bb7d18ddac973df8a2 100644 (file)
@@ -19,8 +19,11 @@ import org.opendaylight.netconf.client.conf.NetconfClientConfiguration.NetconfCl
 import org.opendaylight.netconf.client.conf.NetconfClientConfigurationBuilder;
 import org.opendaylight.netconf.client.mdsal.api.CredentialProvider;
 import org.opendaylight.netconf.client.mdsal.api.SslContextFactoryProvider;
+import org.opendaylight.netconf.shaded.sshd.client.ClientFactoryManager;
 import org.opendaylight.netconf.shaded.sshd.client.auth.pubkey.UserAuthPublicKeyFactory;
 import org.opendaylight.netconf.shaded.sshd.common.keyprovider.KeyIdentityProvider;
+import org.opendaylight.netconf.transport.api.UnsupportedConfigurationException;
+import org.opendaylight.netconf.transport.ssh.ClientFactoryManagerConfigurator;
 import org.opendaylight.netconf.transport.tls.FixedSslHandlerFactory;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.crypto.types.rev240208.password.grouping.password.type.CleartextPasswordBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.client.rev240208.netconf.client.initiate.stack.grouping.transport.ssh.ssh.SshClientParametersBuilder;
@@ -115,16 +118,20 @@ public final class NetconfClientConfigurationBuilderFactoryImpl implements Netco
         } else if (credentials instanceof KeyAuth keyAuth) {
             final var keyBased = keyAuth.getKeyBased();
             sshParamsBuilder.setClientIdentity(new ClientIdentityBuilder().setUsername(keyBased.getUsername()).build());
-            confBuilder.withSshConfigurator(factoryMgr -> {
-                final var keyId = keyBased.getKeyId();
-                final var keyPair = credentialProvider.credentialForId(keyId);
-                if (keyPair == null) {
-                    throw new IllegalArgumentException("No keypair found with keyId=" + keyId);
+            confBuilder.withSshConfigurator(new ClientFactoryManagerConfigurator() {
+                @Override
+                protected void configureClientFactoryManager(final ClientFactoryManager factoryManager)
+                        throws UnsupportedConfigurationException {
+                    final var keyId = keyBased.getKeyId();
+                    final var keyPair = credentialProvider.credentialForId(keyId);
+                    if (keyPair == null) {
+                        throw new IllegalArgumentException("No keypair found with keyId=" + keyId);
+                    }
+                    factoryManager.setKeyIdentityProvider(KeyIdentityProvider.wrapKeyPairs(keyPair));
+                    final var factory = new UserAuthPublicKeyFactory();
+                    factory.setSignatureFactories(factoryManager.getSignatureFactories());
+                    factoryManager.setUserAuthFactories(List.of(factory));
                 }
-                factoryMgr.setKeyIdentityProvider(KeyIdentityProvider.wrapKeyPairs(keyPair));
-                final var factory = new UserAuthPublicKeyFactory();
-                factory.setSignatureFactories(factoryMgr.getSignatureFactories());
-                factoryMgr.setUserAuthFactories(List.of(factory));
             });
         } else {
             throw new IllegalArgumentException("Unsupported credential type: " + credentials.getClass());