2 * Copyright 2018 Intel Corporation, Inc
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 "github.com/gorilla/mux"
28 secretBackend backend.SecretBackend
29 loginBackend backend.LoginBackend
32 // createSecretDomainHandler creates a secret domain with a name provided
33 func (h handler) createSecretDomainHandler(w http.ResponseWriter, r *http.Request) {
34 var d backend.SecretDomain
36 err := json.NewDecoder(r.Body).Decode(&d)
38 http.Error(w, err.Error(), 400)
42 h.secretBackend.CreateSecretDomain(d.Name)
45 // getSecretDomainHandler returns list of secret domains
46 func (h handler) getSecretDomainHandler(w http.ResponseWriter, r *http.Request) {
48 domName := vars["domName"]
50 h.secretBackend.GetSecretDomain(domName)
51 //encode data into json and return
54 // deleteSecretDomainHandler deletes a secret domain with the name provided
55 func (h handler) deleteSecretDomainHandler(w http.ResponseWriter, r *http.Request) {
57 domName := vars["domName"]
59 h.secretBackend.DeleteSecretDomain(domName)
62 // createSecretHandler handles creation of secrets on a given domain name
63 func (h handler) createSecretHandler(w http.ResponseWriter, r *http.Request) {
65 domName := vars["domName"]
68 err := json.NewDecoder(r.Body).Decode(&b)
70 http.Error(w, err.Error(), 400)
74 h.secretBackend.CreateSecret(domName, b)
77 // getSecretHandler handles reading a secret by given domain name and secret name
78 func (h handler) getSecretHandler(w http.ResponseWriter, r *http.Request) {
80 domName := vars["domName"]
81 secName := vars["secretName"]
83 h.secretBackend.GetSecret(domName, secName)
84 //encode and return response
87 // deleteSecretHandler handles deleting a secret by given domain name and secret name
88 func (h handler) deleteSecretHandler(w http.ResponseWriter, r *http.Request) {
90 domName := vars["domName"]
91 secName := vars["secretName"]
93 h.secretBackend.DeleteSecret(domName, secName)
96 // struct that tracks various status items for SMS and backend
98 Seal bool `json:"sealstatus"`
101 // statusHandler returns information related to SMS and SMS backend services
102 func (h handler) statusHandler(w http.ResponseWriter, r *http.Request) {
103 s, err := h.secretBackend.GetStatus()
105 http.Error(w, err.Error(), 500)
109 status := status{Seal: s}
110 err = json.NewEncoder(w).Encode(status)
112 http.Error(w, err.Error(), 500)
117 // loginHandler handles login via password and username
118 func (h handler) loginHandler(w http.ResponseWriter, r *http.Request) {
122 // CreateRouter returns an http.Handler for the registered URLs
123 func CreateRouter(b backend.SecretBackend) http.Handler {
124 h := handler{secretBackend: b}
126 // Create a new mux to handle URL endpoints
127 router := mux.NewRouter()
129 router.HandleFunc("/v1/sms/login", h.loginHandler).Methods("POST")
131 router.HandleFunc("/v1/sms/status", h.statusHandler).Methods("GET")
133 router.HandleFunc("/v1/sms/domain", h.createSecretDomainHandler).Methods("POST")
134 router.HandleFunc("/v1/sms/domain/{domName}", h.getSecretDomainHandler).Methods("GET")
135 router.HandleFunc("/v1/sms/domain/{domName}", h.deleteSecretDomainHandler).Methods("DELETE")
137 router.HandleFunc("v1/sms/domain/{domainName}/secret", h.createSecretHandler).Methods("POST")
138 router.HandleFunc("v1/sms/domain/{domainName}/secret/{secretName}", h.getSecretHandler).Methods("GET")
139 router.HandleFunc("v1/sms/domain/{domainName}/secret/{secretName}", h.deleteSecretHandler).Methods("DELETE")