diff options
-rw-r--r-- | sms-quorum/.keep | 0 | ||||
-rw-r--r-- | sms-quorum/src/smsquorum/config.json | 4 | ||||
-rw-r--r-- | sms-quorum/src/smsquorum/quorumclient.go | 80 |
3 files changed, 84 insertions, 0 deletions
diff --git a/sms-quorum/.keep b/sms-quorum/.keep deleted file mode 100644 index e69de29..0000000 --- a/sms-quorum/.keep +++ /dev/null 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) + } + } + } +} |