X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=sms-service%2Fsrc%2Fsms%2Fhandler%2Fhandler.go;h=805f7a8adb272a3fd51f58d4ba00a73a6f5a1d60;hb=af111db90fe953609a0d402630612c466eff8522;hp=7ce9e01bbef472d916c1ea461adb395a285b944a;hpb=db321f3d47d8abe90f9e8e82a0b860dcfb8b6561;p=aaf%2Fsms.git diff --git a/sms-service/src/sms/handler/handler.go b/sms-service/src/sms/handler/handler.go index 7ce9e01..805f7a8 100644 --- a/sms-service/src/sms/handler/handler.go +++ b/sms-service/src/sms/handler/handler.go @@ -21,6 +21,7 @@ import ( "github.com/gorilla/mux" "net/http" + uuid "github.com/hashicorp/go-uuid" smsbackend "sms/backend" smslogger "sms/log" ) @@ -210,6 +211,7 @@ func (h handler) unsealHandler(w http.ResponseWriter, r *http.Request) { // with their PGP public keys that are then used by sms for backend // initialization func (h handler) registerHandler(w http.ResponseWriter, r *http.Request) { + // Get shards to be used for unseal type registerStruct struct { PGPKey string `json:"pgpkey"` @@ -246,6 +248,39 @@ func (h handler) registerHandler(w http.ResponseWriter, r *http.Request) { } } +// healthCheckHandler runs a few commands on the backend and returns +// OK or not depending on the status of the backend +func (h handler) healthCheckHandler(w http.ResponseWriter, r *http.Request) { + + sealed, err := h.secretBackend.GetStatus() + if smslogger.CheckError(err, "HealthCheck") != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + // backend is sealed + if sealed == true { + http.Error(w, "Secret Backend is not ready for operations", http.StatusInternalServerError) + return + } + + // backend is not sealed + dname, _ := uuid.GenerateUUID() + _, err = h.secretBackend.CreateSecretDomain(dname) + if smslogger.CheckError(err, "HealthCheck Create Domain") != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + err = h.secretBackend.DeleteSecretDomain(dname) + if smslogger.CheckError(err, "HealthCheck Delete Domain") != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.WriteHeader(http.StatusOK) +} + // CreateRouter returns an http.Handler for the registered URLs // Takes an interface implementation as input func CreateRouter(b smsbackend.SecretBackend) http.Handler { @@ -262,6 +297,7 @@ func CreateRouter(b smsbackend.SecretBackend) http.Handler { router.HandleFunc("/v1/sms/quorum/unseal", h.unsealHandler).Methods("POST") router.HandleFunc("/v1/sms/quorum/register", h.registerHandler).Methods("POST") + router.HandleFunc("/v1/sms/healthcheck", h.healthCheckHandler).Methods("GET") router.HandleFunc("/v1/sms/domain", h.createSecretDomainHandler).Methods("POST") router.HandleFunc("/v1/sms/domain/{domName}", h.deleteSecretDomainHandler).Methods("DELETE")