Adding Listsecret capability
[aaf/sms.git] / sms-service / src / sms / handler / handler.go
index 1b9b869..5fdbf3b 100644 (file)
@@ -18,20 +18,23 @@ package handler
 
 import (
        "encoding/json"
+       "fmt"
        "github.com/gorilla/mux"
        "net/http"
 
-       "sms/backend"
+       smsbackend "sms/backend"
 )
 
+// handler stores two interface implementations that implement
+// the backend functionality
 type handler struct {
-       secretBackend backend.SecretBackend
-       loginBackend  backend.LoginBackend
+       secretBackend smsbackend.SecretBackend
+       loginBackend  smsbackend.LoginBackend
 }
 
 // createSecretDomainHandler creates a secret domain with a name provided
 func (h handler) createSecretDomainHandler(w http.ResponseWriter, r *http.Request) {
-       var d backend.SecretDomain
+       var d smsbackend.SecretDomain
 
        err := json.NewDecoder(r.Body).Decode(&d)
        if err != nil {
@@ -39,7 +42,17 @@ func (h handler) createSecretDomainHandler(w http.ResponseWriter, r *http.Reques
                return
        }
 
-       h.secretBackend.CreateSecretDomain(d.Name)
+       dom, err := h.secretBackend.CreateSecretDomain(d.Name)
+       if err != nil {
+               http.Error(w, err.Error(), 500)
+               return
+       }
+
+       err = json.NewEncoder(w).Encode(dom)
+       if err != nil {
+               http.Error(w, err.Error(), 400)
+               return
+       }
 }
 
 // getSecretDomainHandler returns list of secret domains
@@ -47,7 +60,8 @@ func (h handler) getSecretDomainHandler(w http.ResponseWriter, r *http.Request)
        vars := mux.Vars(r)
        domName := vars["domName"]
 
-       h.secretBackend.GetSecretDomain(domName)
+       fmt.Fprintf(w, "Got req %s", domName)
+       //h.secretBackend.GetSecretDomain(domName)
        //encode data into json and return
 }
 
@@ -61,17 +75,25 @@ func (h handler) deleteSecretDomainHandler(w http.ResponseWriter, r *http.Reques
 
 // createSecretHandler handles creation of secrets on a given domain name
 func (h handler) createSecretHandler(w http.ResponseWriter, r *http.Request) {
+       // Get domain name from URL
        vars := mux.Vars(r)
        domName := vars["domName"]
 
-       var b backend.Secret
+       // Get secrets to be stored from body
+       var b smsbackend.Secret
        err := json.NewDecoder(r.Body).Decode(&b)
        if err != nil {
                http.Error(w, err.Error(), 400)
                return
        }
 
-       h.secretBackend.CreateSecret(domName, b)
+       err = h.secretBackend.CreateSecret(domName, b)
+       if err != nil {
+               http.Error(w, err.Error(), 500)
+               return
+       }
+
+       w.WriteHeader(http.StatusCreated)
 }
 
 // getSecretHandler handles reading a secret by given domain name and secret name
@@ -80,8 +102,35 @@ func (h handler) getSecretHandler(w http.ResponseWriter, r *http.Request) {
        domName := vars["domName"]
        secName := vars["secretName"]
 
-       h.secretBackend.GetSecret(domName, secName)
-       //encode and return response
+       sec, err := h.secretBackend.GetSecret(domName, secName)
+       if err != nil {
+               http.Error(w, err.Error(), 500)
+               return
+       }
+
+       err = json.NewEncoder(w).Encode(sec)
+       if err != nil {
+               http.Error(w, err.Error(), 400)
+               return
+       }
+}
+
+// listSecretHandler handles listing all secrets under a particular domain name
+func (h handler) listSecretHandler(w http.ResponseWriter, r *http.Request) {
+       vars := mux.Vars(r)
+       domName := vars["domName"]
+
+       sec, err := h.secretBackend.ListSecret(domName)
+       if err != nil {
+               http.Error(w, err.Error(), http.StatusInternalServerError)
+               return
+       }
+
+       err = json.NewEncoder(w).Encode(sec)
+       if err != nil {
+               http.Error(w, err.Error(), http.StatusInternalServerError)
+               return
+       }
 }
 
 // deleteSecretHandler handles deleting a secret by given domain name and secret name
@@ -94,7 +143,7 @@ func (h handler) deleteSecretHandler(w http.ResponseWriter, r *http.Request) {
 }
 
 // struct that tracks various status items for SMS and backend
-type status struct {
+type backendStatus struct {
        Seal bool `json:"sealstatus"`
 }
 
@@ -106,7 +155,7 @@ func (h handler) statusHandler(w http.ResponseWriter, r *http.Request) {
                return
        }
 
-       status := status{Seal: s}
+       status := backendStatus{Seal: s}
        err = json.NewEncoder(w).Encode(status)
        if err != nil {
                http.Error(w, err.Error(), 500)
@@ -119,8 +168,19 @@ func (h handler) loginHandler(w http.ResponseWriter, r *http.Request) {
 
 }
 
+// initSMSHandler
+func (h handler) initSMSHandler(w http.ResponseWriter, r *http.Request) {
+
+}
+
+// unsealHandler
+func (h handler) unsealHandler(w http.ResponseWriter, r *http.Request) {
+
+}
+
 // CreateRouter returns an http.Handler for the registered URLs
-func CreateRouter(b backend.SecretBackend) http.Handler {
+// Takes an interface implementation as input
+func CreateRouter(b smsbackend.SecretBackend) http.Handler {
        h := handler{secretBackend: b}
 
        // Create a new mux to handle URL endpoints
@@ -128,15 +188,20 @@ func CreateRouter(b backend.SecretBackend) http.Handler {
 
        router.HandleFunc("/v1/sms/login", h.loginHandler).Methods("POST")
 
+       // Initialization APIs which will be used by quorum client
+       // to unseal and to provide root token to sms service
        router.HandleFunc("/v1/sms/status", h.statusHandler).Methods("GET")
+       router.HandleFunc("/v1/sms/unseal", h.unsealHandler).Methods("POST")
+       router.HandleFunc("/v1/sms/init", h.initSMSHandler).Methods("POST")
 
        router.HandleFunc("/v1/sms/domain", h.createSecretDomainHandler).Methods("POST")
        router.HandleFunc("/v1/sms/domain/{domName}", h.getSecretDomainHandler).Methods("GET")
        router.HandleFunc("/v1/sms/domain/{domName}", h.deleteSecretDomainHandler).Methods("DELETE")
 
-       router.HandleFunc("v1/sms/domain/{domainName}/secret", h.createSecretHandler).Methods("POST")
-       router.HandleFunc("v1/sms/domain/{domainName}/secret/{secretName}", h.getSecretHandler).Methods("GET")
-       router.HandleFunc("v1/sms/domain/{domainName}/secret/{secretName}", h.deleteSecretHandler).Methods("DELETE")
+       router.HandleFunc("/v1/sms/domain/{domName}/secret", h.createSecretHandler).Methods("POST")
+       router.HandleFunc("/v1/sms/domain/{domName}/secret", h.listSecretHandler).Methods("GET")
+       router.HandleFunc("/v1/sms/domain/{domName}/secret/{secretName}", h.getSecretHandler).Methods("GET")
+       router.HandleFunc("/v1/sms/domain/{domName}/secret/{secretName}", h.deleteSecretHandler).Methods("DELETE")
 
        return router
 }