ONOS-6020 RolledBack and deprecated a method in NetconfDeviceInfo to not break backwards compatibility

Change-Id: Ie029f6b1d3688d428130b76ed2e06c760d9a390a
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
index 2468562..eb63974 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/NetconfDeviceInfo.java
@@ -22,6 +22,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.File;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Objects;
@@ -39,6 +40,8 @@
     private IpAddress ipAddress;
     private int port;
     private char[] key;
+    //File keyFile @deprecated 1.9.0
+    private File keyFile;
     private DeviceId deviceId;
 
 
@@ -68,7 +71,12 @@
      * @param password  the password for the device
      * @param ipAddress the ip address
      * @param port      the tcp port
-     * @param keyString the string containing the key.
+     * @param keyString the string containing a DSA or RSA private key
+     *                  of the user in OpenSSH key format
+     *                  <br>
+     *                  (Pre 1.9.0 behaviour: {@code keyString} can be file path
+     *                  to a file containing DSA or RSA private key of the user
+     *                  in OpenSSH key format)
      */
     public NetconfDeviceInfo(String name, String password, IpAddress ipAddress,
                              int port, String keyString) {
@@ -80,6 +88,7 @@
         this.ipAddress = ipAddress;
         this.port = port;
         this.key = keyString.toCharArray();
+        this.keyFile = new File(keyString);
     }
 
     /**
@@ -121,18 +130,34 @@
     /**
      * Exposes the key of the controller.
      *
-     * @return int port address
+     * @return {@code char[]} containing a DSA or RSA private key of the user
+     *         in OpenSSH key format
+     *         or null if device is not configured to use public key authentication
      */
     public char[] getKey() {
         return key;
     }
 
     /**
+     * Exposes the keyFile of the controller.
+     *
+     * @return File object pointing to a file containing a DSA or RSA
+     *         private key of the user in OpenSSH key format,
+     *         or null if device is not configured to use public key authentication
+     * @deprecated 1.9.0
+     */
+    @Deprecated
+    public File getKeyFile() {
+        return keyFile;
+    }
+
+    /**
      * Return the info about the device in a string.
      * String format: "netconf:name@ip:port"
      *
      * @return String device info
      */
+    @Override
     public String toString() {
         return "netconf:" + name + "@" + ipAddress + ":" + port;
     }
diff --git a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
index 451a2a1..26ded2f 100644
--- a/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
+++ b/protocols/netconf/ctl/src/main/java/org/onosproject/netconf/ctl/NetconfSessionImpl.java
@@ -118,7 +118,13 @@
             }
             boolean isAuthenticated;
             try {
-                if (deviceInfo.getKey() != null) {
+                if (deviceInfo.getKeyFile() != null && deviceInfo.getKeyFile().canRead()) {
+                    log.debug("Authenticating with key file to device {} with username {}",
+                              deviceInfo.getDeviceId(), deviceInfo.name());
+                    isAuthenticated = netconfConnection.authenticateWithPublicKey(
+                            deviceInfo.name(), deviceInfo.getKeyFile(),
+                            deviceInfo.password().equals("") ? null : deviceInfo.password());
+                } else if (deviceInfo.getKey() != null) {
                     log.debug("Authenticating with key to device {} with username {}",
                             deviceInfo.getDeviceId(), deviceInfo.name());
                     isAuthenticated = netconfConnection.authenticateWithPublicKey(