Update listsecret return to send a JSON object 75/35575/4
authorKiran Kamineni <kiran.k.kamineni@intel.com>
Tue, 13 Mar 2018 19:59:37 +0000 (12:59 -0700)
committerGirish Havaldar <hg0071052@techmahindra.com>
Thu, 15 Mar 2018 17:00:33 +0000 (17:00 +0000)
Instead of sending JSONArray, retrun JSON object
for consistency and client processing

Issue-ID: AAF-172
Change-Id: I17d2e2c2865a817c8016987f998c87259413f306
Signed-off-by: Kiran Kamineni <kiran.k.kamineni@intel.com>
sms-service/doc/api_swagger.html
sms-service/doc/api_swagger.yaml
sms-service/src/sms/handler/handler.go
sms-service/src/sms/handler/handler_test.go

index 94a72aa..7f987a3 100644 (file)
@@ -181,7 +181,7 @@ font-style: italic;
   <body>
   <h1>Secret Management Service</h1>
     <div class="app-desc">This is a service that provides secret management facilities</div>
-    <div class="app-desc">More information: <a href=""></a></div>
+    <div class="app-desc">More information: <a href="https://helloreverb.com">https://helloreverb.com</a></div>
     <div class="app-desc">Contact Info: <a href="kiran.k.kamineni@intel.com">kiran.k.kamineni@intel.com</a></div>
     <div class="app-desc">Version: 1.0.0</div>
     <div class="app-desc">BasePath:/v1/sms/</div>
@@ -295,8 +295,8 @@ font-style: italic;
     <h3 class="field-label">Example data</h3>
     <div class="example-data-content-type">Content-Type: application/json</div>
     <pre class="example"><code>{
-  "name" : "aeiou",
-  "uuid" : "aeiou"
+  "name" : "name",
+  "uuid" : "uuid"
 }</code></pre>
 
     <h3 class="field-label">Produces</h3>
@@ -356,7 +356,7 @@ font-style: italic;
     <div class="example-data-content-type">Content-Type: application/json</div>
     <pre class="example"><code>{
   "ttl" : 0,
-  "token" : "aeiou"
+  "token" : "token"
 }</code></pre>
 
     <h3 class="field-label">Produces</h3>
@@ -397,15 +397,15 @@ font-style: italic;
 
     <h3 class="field-label">Return type</h3>
     <div class="return-type">
+      <a href="#inline_response_200_2">inline_response_200_2</a>
       
-      array[String]
     </div>
 
     <!--Todo: process Response Object and its headers, schema, examples -->
 
     <h3 class="field-label">Example data</h3>
     <div class="example-data-content-type">Content-Type: application/json</div>
-    <pre class="example"><code>[ "secret1", "secret2", "secret3" ]</code></pre>
+    <pre class="example"><code>"{\"secretnames\":[\"secretname1\",\"secretname2\",\"secretname3\"]}"</code></pre>
 
     <h3 class="field-label">Produces</h3>
     This API call produces the following media types according to the <span class="header">Accept</span> request header;
@@ -417,7 +417,7 @@ font-style: italic;
     <h3 class="field-label">Responses</h3>
     <h4 class="field-label">200</h4>
     Successful operation
-        
+        <a href="#inline_response_200_2">inline_response_200_2</a>
     <h4 class="field-label">404</h4>
     Invalid Path or Path not found
         <a href="#"></a>
@@ -552,7 +552,7 @@ font-style: italic;
     "Age" : 40,
     "admin" : true
   },
-  "name" : "aeiou"
+  "name" : "name"
 }</code></pre>
 
     <h3 class="field-label">Produces</h3>
@@ -596,7 +596,7 @@ font-style: italic;
     <h3 class="field-label">Example data</h3>
     <div class="example-data-content-type">Content-Type: application/json</div>
     <pre class="example"><code>{
-  "sealstatus" : "aeiou"
+  "sealstatus" : "sealstatus"
 }</code></pre>
 
     <h3 class="field-label">Produces</h3>
@@ -672,6 +672,7 @@ font-style: italic;
     <li><a href="#body"><code>body</code> - </a></li>
     <li><a href="#inline_response_200"><code>inline_response_200</code> - </a></li>
     <li><a href="#inline_response_200_1"><code>inline_response_200_1</code> - </a></li>
+    <li><a href="#inline_response_200_2"><code>inline_response_200_2</code> - </a></li>
   </ol>
 
   <div class="model">
@@ -720,5 +721,12 @@ font-style: italic;
       <div class="param">sealstatus (optional)</div><div class="param-desc"><span class="param-type"><a href="#string">String</a></span> seal status of backend </div>
     </div>  <!-- field-items -->
   </div>
+  <div class="model">
+    <h3><a name="inline_response_200_2"><code>inline_response_200_2</code> - </a> <a class="up" href="#__Models">Up</a></h3>
+    
+    <div class="field-items">
+      <div class="param">secretnames (optional)</div><div class="param-desc"><span class="param-type"><a href="#string">array[String]</a></span> Array of strings referencing the secret names </div>
+    </div>  <!-- field-items -->
+  </div>
   </body>
 </html>
index 08e3c18..61cd091 100644 (file)
@@ -89,12 +89,14 @@ paths:
             properties:
               unsealshard:
                 type: string
-                description: Unseal shard that will be used along with other shards to unseal backend
+                description: >-
+                  Unseal shard that will be used along with other shards to
+                  unseal backend
       responses:
         '201':
           description: Submitted unseal key
         '404':
-          description: Invalid Path or Path not found          
+          description: Invalid Path or Path not found
   /domain:
     post:
       tags:
@@ -182,10 +184,15 @@ paths:
         '200':
           description: Successful operation
           schema:
-            type: array
-            items:
-              type: string 
-            example: ['secret1', 'secret2', 'secret3']
+            type: object
+            properties:
+              secretnames:
+                type: array
+                items:
+                  type: string
+                description: Array of strings referencing the secret names
+            example:
+              secretnames: ["secretname1", "secretname2", "secretname3"]
         '404':
           description: Invalid Path or Path not found
   '/domain/{domainName}/secret/{secretName}':
@@ -239,9 +246,9 @@ paths:
           description: Invalid Path or Path not found
 securityDefinitions:
   token:
-    type: "apiKey"
-    name: "token"
-    in: "header"
+    type: apiKey
+    name: token
+    in: header
 definitions:
   Credential:
     type: object
@@ -273,9 +280,9 @@ definitions:
         additionalProperties:
           type: object
         example:
-          "name": "john"
-          "Age": 40
-          "admin": true
+          name: john
+          Age: 40
+          admin: true
 externalDocs:
   description: Find out more about Swagger
   url: 'http://swagger.io'
index 4456806..f2800fc 100644 (file)
@@ -131,14 +131,21 @@ func (h handler) listSecretHandler(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
        domName := vars["domName"]
 
-       sec, err := h.secretBackend.ListSecret(domName)
+       secList, err := h.secretBackend.ListSecret(domName)
        if err != nil {
                smslogger.WriteError(err.Error())
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
        }
 
-       jdata, err := json.Marshal(sec)
+       // Creating an anonymous struct to store the returned list of data
+       var retStruct = struct {
+               SecretNames []string `json:"secretnames"`
+       }{
+               secList,
+       }
+
+       jdata, err := json.Marshal(retStruct)
        if err != nil {
                smslogger.WriteError(err.Error())
                http.Error(w, err.Error(), http.StatusInternalServerError)
index e1b5b34..5e9e965 100644 (file)
@@ -249,9 +249,16 @@ func TestListSecretHandler(t *testing.T) {
                t.Errorf("Expected statusCreated return code. Got: %v", rr.Code)
        }
 
-       expected := []string{"testsecret1", "testsecret2"}
+       var expected = struct {
+               SecretNames []string `json:"secretnames"`
+       }{
+               []string{"testsecret1", "testsecret2"},
+       }
+
+       var got struct {
+               SecretNames []string `json:"secretnames"`
+       }
 
-       var got []string
        json.NewDecoder(rr.Body).Decode(&got)
 
        if reflect.DeepEqual(expected, got) == false {