X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fsal%2Fconnect%2Futil%2FNetconfSalKeystoreService.java;h=6608f21e6e9db92ccc1b6123085b7eab3639c4bb;hb=7e1c9a3ba9211a98027bd9da7dc84a4b2136eb84;hp=7cb9216a5748bd16014bb996dbae5262364442e2;hpb=bf36cdd6c9e5b95f1fcc5a1163f2b691e937c9df;p=netconf.git diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/util/NetconfSalKeystoreService.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/util/NetconfSalKeystoreService.java index 7cb9216a57..6608f21e6e 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/util/NetconfSalKeystoreService.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/util/NetconfSalKeystoreService.java @@ -5,31 +5,48 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.sal.connect.util; -import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.SettableFuture; import java.util.List; -import java.util.concurrent.Future; +import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; -import javax.annotation.Nullable; import org.opendaylight.aaa.encrypt.AAAEncryptionService; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.WriteTransaction; +import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddKeystoreEntryInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddKeystoreEntryOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddKeystoreEntryOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddPrivateKeyInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddPrivateKeyOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddPrivateKeyOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddTrustedCertificateInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddTrustedCertificateOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.AddTrustedCertificateOutputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.Keystore; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.KeystoreBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.NetconfKeystoreService; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveKeystoreEntryInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveKeystoreEntryOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveKeystoreEntryOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemovePrivateKeyInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemovePrivateKeyOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemovePrivateKeyOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveTrustedCertificateInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveTrustedCertificateOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.RemoveTrustedCertificateOutputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017._private.keys.PrivateKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017._private.keys.PrivateKeyKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.keystore.entry.KeyCredential; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.keystore.entry.KeyCredentialBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.keystore.entry.KeyCredentialKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.trusted.certificates.TrustedCertificate; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.keystore.rev171017.trusted.certificates.TrustedCertificateKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; @@ -61,18 +78,17 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService { final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, keystoreIid, keystore); - final CheckedFuture submit = writeTransaction.submit(); - try { - submit.checkedGet(); + writeTransaction.commit().get(); LOG.debug("init keystore done"); - } catch (TransactionCommitFailedException exception) { + } catch (InterruptedException | ExecutionException exception) { LOG.error("Unable to initialize Netconf key-pair store.", exception); } } @Override - public Future> removeKeystoreEntry(final RemoveKeystoreEntryInput input) { + public ListenableFuture> removeKeystoreEntry( + final RemoveKeystoreEntryInput input) { LOG.debug("Removing keypairs: {}", input); final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); @@ -83,15 +99,13 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService { keystoreIid.child(KeyCredential.class, new KeyCredentialKey(id))); } - final SettableFuture> rpcResult = SettableFuture.create(); + final SettableFuture> rpcResult = SettableFuture.create(); - final CheckedFuture submit = writeTransaction.submit(); - Futures.addCallback(submit, new FutureCallback() { + writeTransaction.commit().addCallback(new FutureCallback() { @Override - public void onSuccess(@Nullable final Void result) { - LOG.debug("remove-key-pair success. Input: {}"); - final RpcResult success = RpcResultBuilder.success().build(); - rpcResult.set(success); + public void onSuccess(final CommitInfo result) { + LOG.debug("remove-key-pair success. Input: {}", input); + rpcResult.set(RpcResultBuilder.success(new RemoveKeystoreEntryOutputBuilder().build()).build()); } @Override @@ -105,7 +119,7 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService { } @Override - public Future> addKeystoreEntry(final AddKeystoreEntryInput input) { + public ListenableFuture> addKeystoreEntry(final AddKeystoreEntryInput input) { LOG.debug("Adding keypairs: {}", input); final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); @@ -117,18 +131,16 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService { for (KeyCredential keypair : keypairs) { writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, - keystoreIid.child(KeyCredential.class, keypair.getKey()), keypair); + keystoreIid.child(KeyCredential.class, keypair.key()), keypair); } - final SettableFuture> rpcResult = SettableFuture.create(); + final SettableFuture> rpcResult = SettableFuture.create(); - final CheckedFuture submit = writeTransaction.submit(); - Futures.addCallback(submit, new FutureCallback() { + writeTransaction.commit().addCallback(new FutureCallback() { @Override - public void onSuccess(@Nullable final Void result) { - LOG.debug("add-key-pair success. Input: {}"); - final RpcResult success = RpcResultBuilder.success().build(); - rpcResult.set(success); + public void onSuccess(final CommitInfo result) { + LOG.debug("add-key-pair success. Input: {}", input); + rpcResult.set(RpcResultBuilder.success(new AddKeystoreEntryOutputBuilder().build()).build()); } @Override @@ -140,4 +152,120 @@ public class NetconfSalKeystoreService implements NetconfKeystoreService { return rpcResult; } + + @Override + public ListenableFuture> addTrustedCertificate( + final AddTrustedCertificateInput input) { + final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); + + for (TrustedCertificate certificate : input.getTrustedCertificate()) { + writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, + keystoreIid.child(TrustedCertificate.class, certificate.key()), certificate); + } + + final SettableFuture> rpcResult = SettableFuture.create(); + + writeTransaction.commit().addCallback(new FutureCallback() { + @Override + public void onSuccess(final CommitInfo result) { + LOG.debug("add-trusted-certificate success. Input: {}", input); + rpcResult.set(RpcResultBuilder.success(new AddTrustedCertificateOutputBuilder().build()).build()); + } + + @Override + public void onFailure(final Throwable throwable) { + LOG.warn("add-trusted-certificate failed. Input: {}", input, throwable); + rpcResult.setException(throwable); + } + }, MoreExecutors.directExecutor()); + + return rpcResult; + } + + @Override + public ListenableFuture> removeTrustedCertificate( + final RemoveTrustedCertificateInput input) { + final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); + final List names = input.getName(); + + for (final String name : names) { + writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, + keystoreIid.child(TrustedCertificate.class, new TrustedCertificateKey(name))); + } + + final SettableFuture> rpcResult = SettableFuture.create(); + + writeTransaction.commit().addCallback(new FutureCallback() { + @Override + public void onSuccess(final CommitInfo result) { + LOG.debug("remove-trusted-certificate success. Input: {}", input); + rpcResult.set(RpcResultBuilder.success(new RemoveTrustedCertificateOutputBuilder().build()).build()); + } + + @Override + public void onFailure(final Throwable throwable) { + LOG.warn("remove-trusted-certificate failed. Input: {}", input, throwable); + rpcResult.setException(throwable); + } + }, MoreExecutors.directExecutor()); + + return rpcResult; + } + + @Override + public ListenableFuture> addPrivateKey(final AddPrivateKeyInput input) { + final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); + + for (PrivateKey key: input.getPrivateKey()) { + writeTransaction.merge(LogicalDatastoreType.CONFIGURATION, + keystoreIid.child(PrivateKey.class, key.key()), key); + } + + final SettableFuture> rpcResult = SettableFuture.create(); + + writeTransaction.commit().addCallback(new FutureCallback() { + @Override + public void onSuccess(final CommitInfo result) { + LOG.debug("add-private-key success. Input: {}", input); + rpcResult.set(RpcResultBuilder.success(new AddPrivateKeyOutputBuilder().build()).build()); + } + + @Override + public void onFailure(final Throwable throwable) { + LOG.warn("add-private-key failed. Input: {}", input, throwable); + rpcResult.setException(throwable); + } + }, MoreExecutors.directExecutor()); + + return rpcResult; + } + + @Override + public ListenableFuture> removePrivateKey(final RemovePrivateKeyInput input) { + final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); + final List names = input.getName(); + + for (final String name : names) { + writeTransaction.delete(LogicalDatastoreType.CONFIGURATION, + keystoreIid.child(PrivateKey.class, new PrivateKeyKey(name))); + } + + final SettableFuture> rpcResult = SettableFuture.create(); + + writeTransaction.commit().addCallback(new FutureCallback() { + @Override + public void onSuccess(final CommitInfo result) { + LOG.debug("remove-private-key success. Input: {}", input); + rpcResult.set(RpcResultBuilder.success(new RemovePrivateKeyOutputBuilder().build()).build()); + } + + @Override + public void onFailure(final Throwable throwable) { + LOG.warn("remove-private-key failed. Input: {}", input, throwable); + rpcResult.setException(throwable); + } + }, MoreExecutors.directExecutor()); + + return rpcResult; + } }