Initial structure and java code for sms client. 57/34857/9
authorManjunath Ranganathaiah <manjunath.ranganathaiah@intel.com>
Thu, 8 Mar 2018 22:43:37 +0000 (14:43 -0800)
committerKiran Kamineni <kiran.k.kamineni@intel.com>
Wed, 14 Mar 2018 16:27:24 +0000 (16:27 +0000)
Change-Id: I245302bc125515269be948bb8b6874a7d3cb5367
Issue-ID: AAF-98
Signed-off-by: Manjunath Ranganathaiah <manjunath.ranganathaiah@intel.com>
sms-client/src/java/example/SmsClientExample.java [new file with mode: 0644]
sms-client/src/java/main/SmsClient.java [new file with mode: 0644]
sms-client/src/java/main/SmsInterface.java [new file with mode: 0644]
sms-client/src/java/main/SmsResponse.java [new file with mode: 0644]

diff --git a/sms-client/src/java/example/SmsClientExample.java b/sms-client/src/java/example/SmsClientExample.java
new file mode 100644 (file)
index 0000000..b82d6d1
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2018 Intel Corporation, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.security.Provider;
+import java.security.Security;
+import java.security.KeyStore;
+import java.security.SecureRandom;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.SSLSessionContext;
+import java.io.FileInputStream;
+import java.net.URL;
+import javax.net.ssl.HttpsURLConnection;
+import java.util.Map;
+import java.util.HashMap;
+import org.onap.aaf.sms.SmsClient;
+import org.onap.aaf.sms.SmsResponse;
+
+public class SmsClientExample {
+    public static void main(String[] args) throws Exception {
+        // Set up the Sun PKCS 11 provider
+        Provider p = Security.getProvider("SunPKCS11-pkcs11Test");
+        if (p==null) {
+            throw new RuntimeException("could not get security provider");
+        }
+
+        // Load the key store
+        char[] pin = "45789654".toCharArray();
+        KeyStore keyStore = KeyStore.getInstance("PKCS11", p);
+        keyStore.load(null, pin);
+
+        // Load the CA certificate
+        FileInputStream tst = new FileInputStream("/ca.jks");
+        KeyStore trustStore = KeyStore.getInstance("JKS");
+        trustStore.load(tst, pin);
+
+        KeyManagerFactory keyManagerFactory =
+             KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
+        //Add to keystore to key manager
+        keyManagerFactory.init(keyStore, pin);
+
+        TrustManagerFactory trustManagerFactory =
+             TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+        trustManagerFactory.init(trustStore);
+
+        //Create the context
+        SSLContext context = SSLContext.getInstance("TLS");
+        context.init(keyManagerFactory.getKeyManagers(),
+             trustManagerFactory.getTrustManagers(), new SecureRandom());
+        //Create a socket factory
+        SSLSocketFactory ssf = context.getSocketFactory();
+        SSLSessionContext sessCtx = context.getServerSessionContext();
+        SmsClient sms = new SmsClient("onap.mydomain.com", 10443, ssf);
+        SmsResponse resp1 = sms.createDomain("onap.new.test.sms0");
+        if ( resp1.getSuccess() ) {
+            System.out.println(resp1.getResponse());
+            System.out.println(resp1.getResponseCode());
+        }
+        Map<String, Object> m1 = new HashMap<String, Object>();
+        m1.put("passwd", "gax6ChD0yft");
+        SmsResponse resp2 = sms.storeSecret("onap.new.test.sms0", "testsec",  m1);
+        if ( resp2.getSuccess() ) {
+            System.out.println(resp2.getResponse());
+            System.out.println(resp2.getResponseCode());
+        }
+        Map<String, Object> m2 = new HashMap<String, Object>();
+        m2.put("username", "dbuser");
+        SmsResponse resp3 = sms.storeSecret("onap.new.test.sms0","user", m2);
+        if ( resp3.getSuccess() ) {
+            System.out.println(resp3.getResponse());
+            System.out.println(resp3.getResponseCode());
+        }
+        SmsResponse resp4 = sms.getSecretNames("onap.new.test.sms0");
+        if ( resp4.getSuccess() ) {
+            System.out.println(resp4.getResponse());
+            System.out.println(resp4.getResponseCode());
+        }
+        SmsResponse resp5= sms.getSecret("onap.new.test.sms0", "testsec");
+        if ( resp5.getSuccess() ) {
+            System.out.println(resp5.getResponse());
+            System.out.println(resp5.getResponseCode());
+        }
+        SmsResponse resp6= sms.getSecret("onap.new.test.sms0", "user");
+        if ( resp6.getSuccess() ) {
+            System.out.println(resp6.getResponse());
+            System.out.println(resp6.getResponseCode());
+        }
+        SmsResponse resp7=sms.deleteDomain("onap.new.test.sms0");
+        if ( resp7.getSuccess() ) {
+            System.out.println(resp7.getResponse());
+            System.out.println(resp7.getResponseCode());
+        }
+    }
+}
diff --git a/sms-client/src/java/main/SmsClient.java b/sms-client/src/java/main/SmsClient.java
new file mode 100644 (file)
index 0000000..69d81e4
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+ * Copyright 2018 Intel Corporation, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.aaf.sms;
+
+import javax.net.ssl.SSLSocketFactory;
+import java.net.URL;
+import javax.net.ssl.HttpsURLConnection;
+import org.onap.aaf.sms.SmsResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
+import java.io.OutputStreamWriter;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ArrayList;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class SmsClient implements SmsInterface {
+
+    private String baset;
+    private SSLSocketFactory ssf;
+
+    public SmsClient(String host, int port, SSLSocketFactory s) {
+        baset = "https://"+ host + ":" + port + "/v1/sms";
+        ssf = s;
+    }
+    public SmsClient(String host, int port, String version, SSLSocketFactory s) {
+        baset = "https://"+ host + ":" + port + "/" + version + "/sms";
+        ssf = s;
+    }
+
+    private List<Object> jsontolist(JSONArray a) throws JSONException {
+        List<Object> l = new ArrayList<Object>();
+        for(int i=0;i<a.length();i++) {
+            Object v = a.get(i);
+            if ( v instanceof JSONArray ) {
+                v = jsontolist((JSONArray) v);
+            } else if (v instanceof JSONObject) {
+                v = jsontomap((JSONObject) v);
+            }
+            l.add(v);
+        }
+        return(l);
+    }
+
+    private Map<String, Object> jsontomap(JSONObject j) throws JSONException {
+        Map<String, Object> m = new HashMap<String, Object>();
+
+        Iterator<?> ks = j.keys();
+        while( ks.hasNext() ) {
+            String k = (String)ks.next();
+            Object v = j.get(k);
+
+            if ( v instanceof JSONArray ) {
+                v = jsontolist((JSONArray) v);
+            } else if ( v instanceof JSONObject ) {
+                v = jsontomap((JSONObject) v);
+            }
+            m.put(k, v);
+        }
+        return(m);
+    }
+
+    private Map<String, Object> strtomap(String r) throws JSONException {
+        JSONObject jobj = null;
+
+        jobj = new JSONObject(r);
+        return(jsontomap(jobj));
+
+    }
+    private SmsResponse execute(String reqtype, String t, String ins, boolean input, boolean output) {
+
+        HttpsURLConnection conn;
+        int errorcode = -1;
+        SmsResponse resp = new SmsResponse();
+
+        try {
+            URL url = new URL(t);
+            conn = (HttpsURLConnection)url.openConnection();
+            conn.setSSLSocketFactory(ssf);
+            conn.setRequestMethod(reqtype);
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            conn.setRequestProperty("Content-Type", "application/json");
+            conn.setRequestProperty("Accept", "application/json");
+
+            if ( input ) {
+                OutputStream out = conn.getOutputStream();
+                OutputStreamWriter wr = new OutputStreamWriter(out);
+                wr.write(ins);
+                wr.flush();
+                wr.close();
+            }
+            errorcode = conn.getResponseCode();
+            if ( output && errorcode > 0 ) {
+                InputStream inputstream = conn.getInputStream();
+                InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
+                BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
+
+                String response;
+                String save = "";
+                while ((response = bufferedreader.readLine()) != null) {
+                    save = save + response;
+                }
+                if ( !save.isEmpty() ) {
+                    if ( errorcode/100 == 2 ) {
+                        resp.setResponse(strtomap(save));
+                    } else {
+                        resp.setErrorMessage(save);
+                    }
+                }
+            }
+        } catch ( Exception e ) {
+            e.printStackTrace();
+            resp.setResponseCode(errorcode);
+            return(resp);
+        }
+        resp.setResponseCode(errorcode);
+        return resp;
+    }
+    @Override
+    public SmsResponse createDomain(String dname) {
+
+        String t = baset + "/domain";
+        String input = "{\"name\":\"" + dname + "\"}";
+
+        SmsResponse resp = execute("POST", t, input, true, true);
+        int errcode = resp.getResponseCode();
+
+        if ( errcode > 0 && errcode/100 == 2 )
+            resp.setSuccess(true);
+        else
+            resp.setSuccess(false);
+
+        return(resp);
+    }
+    @Override
+    public SmsResponse deleteDomain(String dname) {
+
+        String t = baset + "/domain/" + dname;
+
+        SmsResponse resp = execute("DELETE", t, null, false, true);
+        int errcode = resp.getResponseCode();
+
+        if ( errcode > 0 && errcode/100 == 2 )
+            resp.setSuccess(true);
+        else
+            resp.setSuccess(false);
+
+        return(resp);
+    }
+    @Override
+    public SmsResponse storeSecret(String dname, String sname, Map<String, Object> values) {
+
+        String t = baset + "/domain/" + dname + "/secret";
+        Map<String, Object> cm = new HashMap<String, Object>();
+        cm.put("name", sname);
+        cm.put("values", values);
+        JSONObject jobj = new JSONObject(cm);
+
+        SmsResponse resp = execute("POST", t, jobj.toString(), true, false);
+        int errcode = resp.getResponseCode();
+
+        if ( errcode > 0 && errcode/100 == 2 )
+            resp.setSuccess(true);
+        else
+            resp.setSuccess(false);
+
+        return(resp);
+    }
+    @Override
+    public SmsResponse getSecretNames(String dname) {
+
+        String t = baset + "/domain/" + dname + "/secret";
+
+        SmsResponse resp = execute("GET", t, null, false, true);
+        int errcode = resp.getResponseCode();
+
+        if ( errcode > 0 && errcode/100 == 2 )
+            resp.setSuccess(true);
+        else
+            resp.setSuccess(false);
+
+        return(resp);
+    }
+    @Override
+    public SmsResponse getSecret(String dname, String sname) {
+
+        String t = baset + "/domain/" + dname + "/secret/" + sname;
+
+        SmsResponse resp = execute("GET", t, null, false, true);
+        int errcode = resp.getResponseCode();
+
+        if ( errcode > 0 && errcode/100 == 2 )
+            resp.setSuccess(true);
+        else
+            resp.setSuccess(false);
+
+        return(resp);
+
+    }
+    @Override
+    public SmsResponse deleteSecret(String dname, String sname) {
+
+        String t = baset + "/domain/" + dname + "/secret/" + sname;
+
+        SmsResponse resp = execute("DELETE", t, null, false, true);
+        int errcode = resp.getResponseCode();
+
+        if ( errcode > 0 && errcode/100 == 2 )
+            resp.setSuccess(true);
+        else
+            resp.setSuccess(false);
+
+        return(resp);
+    }
+}
diff --git a/sms-client/src/java/main/SmsInterface.java b/sms-client/src/java/main/SmsInterface.java
new file mode 100644 (file)
index 0000000..31875d7
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2018 Intel Corporation, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.aaf.sms;
+
+import org.onap.aaf.sms.SmsResponse;
+import java.util.Map;
+
+public interface SmsInterface {
+    /*
+        Inputs dname - domain name
+        Output - name and uuid
+        Return SmsResponse object
+            success or failure
+            response code if connection succeeded, otherwise -1
+            response string if expected.
+    */
+    public SmsResponse createDomain(String dname);
+
+    /*
+        Inputs dname - domain name
+        Output - none
+        Return SmsResponse object
+            success or failure
+            response code if connection succeeded, otherwise -1
+            response string if expected.
+
+    */
+    public SmsResponse deleteDomain(String dname);
+
+    /*
+        Inputs dname - domain name
+        Output - list of secret names
+        Return SmsResponse object
+            success or failure
+            response code if connection succeeded, otherwise -1
+            response string if expected.
+
+    */
+    public SmsResponse getSecretNames(String dname);
+
+    /*
+        Inputs dname - domain name
+               sname - secret name
+               values - list of key value pairs
+        Output - none
+        Return SmsResponse object
+            success or failure
+            response code if connection succeeded, otherwise -1
+            response string if expected.
+
+    */
+    public SmsResponse storeSecret(String dname, String sname, Map<String, Object> values);
+
+    /*
+        Inputs dname - domain name
+               sname - secret name
+        Output values - list of value pairs
+        Return SmsResponse object
+            success or failure
+            response code if connection succeeded, otherwise -1
+            response string if expected.
+
+    */
+    public SmsResponse getSecret(String dname, String sname);
+
+    /*
+        Inputs dname - domain name
+               sname - secret name
+        Output - none
+        Return SmsResponse object
+            success or failure
+            response code if connection succeeded, otherwise -1
+            response string if expected.
+    */
+    public SmsResponse deleteSecret(String dname, String sname);
+}
diff --git a/sms-client/src/java/main/SmsResponse.java b/sms-client/src/java/main/SmsResponse.java
new file mode 100644 (file)
index 0000000..b7a9980
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2018 Intel Corporation, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.aaf.sms;
+
+import java.util.Map;
+
+public class SmsResponse {
+    private boolean success;
+    private int responseCode;
+    private String errorMessage;
+    private Map<String, Object> response;
+
+    public SmsResponse() {
+        success = false;
+        responseCode = -1;
+        errorMessage = "";
+        response = null;
+    }
+    public void setResponseCode(int code) {
+        responseCode = code;
+    }
+    public void setResponse(Map<String, Object> res) {
+        response = res;
+    }
+    public void setSuccess(boolean val) {
+        success = val;
+    }
+    public int getResponseCode() {
+        return responseCode;
+    }
+    public void setErrorMessage(String em) {
+        errorMessage = em;
+    }
+    public String getErrorMessage() {
+        return errorMessage;
+    }
+    public Map<String, Object> getResponse() {
+        return response;
+    }
+    public boolean getSuccess() {
+        return success;
+    }
+}