Added Quorum client with vault config file 59/32559/3
authorgiri <hg0071052@techmahindra.com>
Thu, 22 Feb 2018 14:37:05 +0000 (20:07 +0530)
committerKiran Kamineni <kiran.k.kamineni@intel.com>
Tue, 27 Feb 2018 17:51:20 +0000 (17:51 +0000)
Quorum client is used to check the
status of the vault and unseal if found sealed

Change-Id: I113fd64ee8a3ed97b2c445f9a27d7352dc86aaaf
Issue-ID: AAF-130
Signed-off-by: giri <hg0071052@techmahindra.com>
sms-quorum/.keep [deleted file]
sms-quorum/src/smsquorum/config.json [new file with mode: 0644]
sms-quorum/src/smsquorum/quorumclient.go [new file with mode: 0644]

diff --git a/sms-quorum/.keep b/sms-quorum/.keep
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/sms-quorum/src/smsquorum/config.json b/sms-quorum/src/smsquorum/config.json
new file mode 100644 (file)
index 0000000..7c0f138
--- /dev/null
@@ -0,0 +1,4 @@
+{
+    "key":"UHFFY0l6WDhZVlErbGxvWitFVWpUL3FCV083NXRra1B2TDVBblN4VE5mYz0=",
+    "timeout":"60s"
+}
\ No newline at end of file
diff --git a/sms-quorum/src/smsquorum/quorumclient.go b/sms-quorum/src/smsquorum/quorumclient.go
new file mode 100644 (file)
index 0000000..edee934
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+* Copyright 2018 TechMahindra
+*
+* 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 main
+
+import (
+       "encoding/base64"
+       "encoding/json"
+       "io/ioutil"
+       "log"
+       "net/http"
+       "os"
+       "strings"
+       "time"
+)
+
+//This application checks the backend status and
+//calls necessary initialization endpoints on the
+//SMS webservice
+func main() {
+       //Struct to read json configuration file
+       type config struct {
+               B64Key  string `json:"key"`
+               TimeOut string `json:"timeout"`
+       }
+       //Load the config File for reading
+       vcf, err := os.Open("config.json")
+       if err != nil {
+               log.Fatalf("Error reading config file %v", err)
+       }
+
+       cfg := config{}
+       decoder := json.NewDecoder(vcf)
+       err = decoder.Decode(&cfg)
+       if err != nil {
+               log.Fatalf("Error while parsing config file %v", err)
+       }
+
+       duration, _ := time.ParseDuration(cfg.TimeOut)
+
+       for _ = range time.NewTicker(duration).C {
+               //Currently using a localhost host, later will be replaced with
+               //exact url
+               response, err := http.Get("http://localhost:8200/v1/sys/seal-status")
+               if err != nil {
+                       log.Fatalf("Error while connecting to SMS webservice %v", err)
+               }
+
+               responseData, err := ioutil.ReadAll(response.Body)
+               if err != nil {
+                       log.Fatalf("Error while reading response %v", err)
+               }
+               var data map[string]interface{}
+               json.Unmarshal(responseData, &data)
+               sealed := data["sealed"].(bool)
+               // Unseal the vault if sealed
+               if sealed {
+                       decdB64Key, _ := base64.StdEncoding.DecodeString(cfg.B64Key)
+                       body := strings.NewReader(`{"key":"` + string(decdB64Key) + `"}`)
+                       //below url will be replaced with exact webservice
+                       response, err = http.Post("http://127.0.0.1:8200/v1/sys/unseal", "application/x-www-form-urlencoded", body)
+                       if err != nil {
+                               log.Fatalf("Error while unsealing %v", err)
+                       }
+               }
+       }
+}