diff options
author | Kiran Kamineni <kiran.k.kamineni@intel.com> | 2018-04-05 11:54:20 -0700 |
---|---|---|
committer | Kiran Kamineni <kiran.k.kamineni@intel.com> | 2018-04-05 12:40:56 -0700 |
commit | c4150670d35e36457ff5f793accae615627e55c8 (patch) | |
tree | d1fbc3c5e20d48c4e11038e31a226c79650272df /sms-service/src/quorumclient | |
parent | 978daf3d407d1d7991946d97dbb48011e7b4f6bc (diff) |
renaming folder to match go executable
Renaming folder from smsquorum to quorumclient
Added quorumclient build as part of the makefile
Will upload another patch in ci-management that
will call the new parent makefile
Issue-ID: AAF-213
Change-Id: Ib85ac6b9dc454fc1447cf2221a555d7a7552efa5
Signed-off-by: Kiran Kamineni <kiran.k.kamineni@intel.com>
Diffstat (limited to 'sms-service/src/quorumclient')
-rw-r--r-- | sms-service/src/quorumclient/Makefile | 25 | ||||
-rw-r--r-- | sms-service/src/quorumclient/config.json | 8 | ||||
-rw-r--r-- | sms-service/src/quorumclient/quorumclient.go | 106 |
3 files changed, 139 insertions, 0 deletions
diff --git a/sms-service/src/quorumclient/Makefile b/sms-service/src/quorumclient/Makefile new file mode 100644 index 0000000..720be29 --- /dev/null +++ b/sms-service/src/quorumclient/Makefile @@ -0,0 +1,25 @@ +GOPATH := $(shell realpath "$(CURDIR)/../../")
+BINARY := quorumclient
+PLATFORM := linux
+
+export GOPATH ...
+
+all: test build
+deploy: test build
+
+build: format
+ CGO_ENABLED=0 GOOS=$(PLATFORM) go build -a \
+ -ldflags '-extldflags "-static"' \
+ -o $(GOPATH)/target/$(BINARY) -v quorumclient.go
+
+clean:
+ go clean
+ rm -f $(GOPATH)/target/$(BINARY)
+
+test:
+ @echo "Yet to Implement"
+
+format:
+ go fmt ./...
+
+.PHONY: test
diff --git a/sms-service/src/quorumclient/config.json b/sms-service/src/quorumclient/config.json new file mode 100644 index 0000000..1b2e4df --- /dev/null +++ b/sms-service/src/quorumclient/config.json @@ -0,0 +1,8 @@ +{ + "url":"https://localhost:10443/", + "cafile": "selfsignedca.pem", + "clientcert":"client.crt", + "clientkey":"client.key", + "key":"UHFFY0l6WDhZVlErbGxvWitFVWpUL3FCV083NXRra1B2TDVBblN4VE5mYz0=", + "timeout":"60s" +}
\ No newline at end of file diff --git a/sms-service/src/quorumclient/quorumclient.go b/sms-service/src/quorumclient/quorumclient.go new file mode 100644 index 0000000..3f3c70b --- /dev/null +++ b/sms-service/src/quorumclient/quorumclient.go @@ -0,0 +1,106 @@ +/* +* 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 ( + "crypto/tls" + "crypto/x509" + "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 { + BackEndURL string `json:"url"` + CAFile string `json:"cafile"` + ClientCert string `json:"clientcert"` + ClientKey string `json:"clientkey"` + 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) + ticker := time.NewTicker(duration) + + for _ = range ticker.C { + + caCert, err := ioutil.ReadFile(cfg.CAFile) + if err != nil { + log.Fatalf("Error while reading CA file %v ", err) + } + caCertPool := x509.NewCertPool() + caCertPool.AppendCertsFromPEM(caCert) + cert, err := tls.LoadX509KeyPair(cfg.ClientCert, cfg.ClientKey) + if err != nil { + log.Fatalf("Error while loading key pair %v ", err) + } + + client := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: caCertPool, + Certificates: []tls.Certificate{cert}, + }, + }, + } + //URL and Port is configured in config file + response, err := client.Get(cfg.BackEndURL + "v1/sms/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) + `"}`) + //URL and PORT is configured via config file + response, err = client.Post(cfg.BackEndURL+"v1/sms/unseal", "application/json", body) + if err != nil { + log.Fatalf("Error while unsealing %v", err) + } + } + } +} |