diff options
Diffstat (limited to 'src/dkv/api/registrationHandlers.go')
-rw-r--r-- | src/dkv/api/registrationHandlers.go | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/src/dkv/api/registrationHandlers.go b/src/dkv/api/registrationHandlers.go new file mode 100644 index 0000000..1c50b33 --- /dev/null +++ b/src/dkv/api/registrationHandlers.go @@ -0,0 +1,173 @@ +/* + * Copyright 2018 Intel Corporation, Inc + * + * 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 api + +import ( + "encoding/json" + "errors" + "github.com/gorilla/mux" + "net/http" +) + +type CreateRegisterServiceBody struct { + Domain string `json:"domain"` +} + +type CreateServiceSubdomainBody struct { + Subdomain string `json:"subdomain"` +} + +func ValidateCreateRegisterServiceBody(body CreateRegisterServiceBody) error { + if body.Domain == "" { + return errors.New("Domain not set. Please set domain in POST.") + } + if body.Domain == "default" { + return errors.New("Domain not allowed. Please set another domain in POST.") + } + return nil +} + +/* + TODO(sshank): Add validations to check if tokens/sub-domains/files indeed + exist in the token_service JSON or in the directory. This is to avoid the service + returning the file system errors to the user. +*/ + +func HandleServiceCreate(w http.ResponseWriter, r *http.Request) { + var body CreateRegisterServiceBody + + decoder := json.NewDecoder(r.Body) + err := decoder.Decode(&body) + + if err != nil { + GenerateResponse(w, r, http.StatusBadRequest, "Empty body.") + return + } + + err = ValidateCreateRegisterServiceBody(body) + + if err != nil { + GenerateResponse(w, r, http.StatusBadRequest, string(err.Error())) + return + } + + token, err := Directory.CreateService(body) + + if err != nil { + GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error())) + } else { + GenerateResponse(w, r, http.StatusOK, "Registration Successful. Token: "+token) + } +} + +func HandleServiceGet(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + token := vars["token"] + + if token == "" { + GenerateResponse(w, r, http.StatusBadRequest, "Token not present in path.") + return + } + + service, found, err := Directory.FindService(token) + + if err != nil { + GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error())) + } else { + if found == true { + GenerateResponse(w, r, http.StatusOK, service) + } else { + GenerateResponse(w, r, http.StatusNotFound, "Service for Token:"+token+"not found.") + } + + } +} + +func HandleServiceDelete(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + token := vars["token"] + + if token == "default" { + GenerateResponse(w, r, http.StatusNotAcceptable, "Default delete not allowed.") + return + } + + err := Directory.RemoveService(token) + + if err != nil { + GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error())) + } else { + GenerateResponse(w, r, http.StatusOK, "Deletion of service is successful.") + } +} + +func HandleServiceSubdomainCreate(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + token := vars["token"] + + var body CreateServiceSubdomainBody + + decoder := json.NewDecoder(r.Body) + err := decoder.Decode(&body) + + if err != nil { + GenerateResponse(w, r, http.StatusBadRequest, "Empty body.") + return + } + + if body.Subdomain == "" { + GenerateResponse(w, r, http.StatusBadRequest, "Subdomain not found in POST.") + return + } + + err = Directory.CreateServiceSubdomain(token, body.Subdomain) + + if err != nil { + GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error())) + } else { + GenerateResponse(w, r, http.StatusOK, "Subdomain creation success with token: "+token) + } + +} + +func HandleServiceSubdomainGet(w http.ResponseWriter, r *http.Request) { + // TODO(sshank): This will list all subdomain in a service. +} + +func HandleServiceSubdomainDelete(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + token := vars["token"] + subdomain := vars["subdomain"] + + if token == "" { + GenerateResponse(w, r, http.StatusBadRequest, "Token not passed.") + return + } + + if token == "default" && subdomain == "" { + GenerateResponse(w, r, http.StatusNotAcceptable, "Not allowerd.") + return + } + + err := Directory.RemoveServiceSubdomain(token, subdomain) + + if err != nil { + GenerateResponse(w, r, http.StatusInternalServerError, string(err.Error())) + } else { + GenerateResponse(w, r, http.StatusOK, "Deletion of service is successful.") + } +} |