From 6fe15746e7284efdc59f382793d17c4a0a1028a2 Mon Sep 17 00:00:00 2001 From: giri Date: Thu, 22 Feb 2018 20:07:05 +0530 Subject: Added Quorum client with vault config file 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 --- sms-quorum/.keep | 0 sms-quorum/src/smsquorum/config.json | 4 ++ sms-quorum/src/smsquorum/quorumclient.go | 80 ++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+) delete mode 100644 sms-quorum/.keep create mode 100644 sms-quorum/src/smsquorum/config.json create mode 100644 sms-quorum/src/smsquorum/quorumclient.go diff --git a/sms-quorum/.keep b/sms-quorum/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/sms-quorum/src/smsquorum/config.json b/sms-quorum/src/smsquorum/config.json new file mode 100644 index 0000000..7c0f138 --- /dev/null +++ b/sms-quorum/src/smsquorum/config.json @@ -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 index 0000000..edee934 --- /dev/null +++ b/sms-quorum/src/smsquorum/quorumclient.go @@ -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) + } + } + } +} -- cgit