diff options
author | Shashank Kumar Shankar <shashank.kumar.shankar@intel.com> | 2018-02-28 17:54:59 -0800 |
---|---|---|
committer | Shashank Kumar Shankar <shashank.kumar.shankar@intel.com> | 2018-03-02 16:52:39 -0800 |
commit | 67dd59385cf983ef1307e3b3e410a8f773d8a5c3 (patch) | |
tree | e53c1997f643a0826fb9cd5a8b44ccc6466dc392 /src/dkv/api/utils.go | |
parent | ff8cba5a49e85fbb1d2e14f0fa0bcb5bf92caf34 (diff) |
Add feature to hold configs in filesystem
This patch adds feature to hold config files
on filesystem and adds all unit tests to have
enough coverage for milestones.
Change-Id: Icd6f3dc93e0f419500f82f0a6ccd62e500dfc918
Issue-ID: MUSIC-42
Signed-off-by: Shashank Kumar Shankar <shashank.kumar.shankar@intel.com>
Diffstat (limited to 'src/dkv/api/utils.go')
-rw-r--r-- | src/dkv/api/utils.go | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/src/dkv/api/utils.go b/src/dkv/api/utils.go new file mode 100644 index 0000000..c1094ab --- /dev/null +++ b/src/dkv/api/utils.go @@ -0,0 +1,153 @@ +/* + * 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" + "io/ioutil" + "net/http" +) + +var ( + IoutilRead = ioutil.ReadFile + IoutilWrite = ioutil.WriteFile + JsonReader = ReadJSON +) + +type Token_service_map struct { + Token string `json:"token"` + Service string `json:"service"` +} + +func ReadJSON(path string) ([]Token_service_map, error) { + var tsm_list []Token_service_map + // raw, err := ioutil.ReadFile("./token_service_map.json") + raw, err := IoutilRead(path) + if err != nil { + return tsm_list, err + } + json.Unmarshal(raw, &tsm_list) + return tsm_list, nil +} + +func WriteJSON(path string, token string, service string) error { + tsm_list, err := JsonReader(path) + if err != nil { + return err + } + var tsm Token_service_map + tsm.Token = token + tsm.Service = service + tsm_list = append(tsm_list, tsm) + raw, err := json.Marshal(tsm_list) + if err != nil { + return err + } + err = IoutilWrite(path, raw, 0644) + if err != nil { + return err + } + return nil +} + +func DeleteInJSON(path string, token string) error { + serviceList, err := JsonReader(path) + if err != nil { + return err + } + + var resultList []Token_service_map + var foundFlag = false + + // Linear search for the token. If found set found flag. If not, keep + // copying the different values to resultList. + for _, service := range serviceList { + if service.Token == token { + foundFlag = true + } else { + resultList = append(resultList, service) + } + } + + if foundFlag == false { + return errors.New("Service not found. Check if Token is correct or service is registered.") + } else { + // This is done to avoid writing 'null' in the json file. + if len(serviceList) == 1 { + dummy := Token_service_map{Token: "", Service: ""} + resultList = append(resultList, dummy) + } + raw, err := json.Marshal(resultList) + if err != nil { + return err + } + err = IoutilWrite(path, raw, 0644) + if err != nil { + return err + } + return nil + } +} + +func FindTokenInJSON(path string, token string) (bool, error) { + serviceList, err := JsonReader(path) + if err != nil { + return false, err + } + + for _, service := range serviceList { + if service.Token == token { + return true, nil + } + } + return false, nil +} + +func FindServiceInJSON(path string, serviceName string) (bool, error) { + serviceList, err := JsonReader(path) + if err != nil { + return false, err + } + + for _, service := range serviceList { + if service.Service == serviceName { + return true, nil + } + } + return false, nil +} + +func GetServicebyToken(path string, token string) (string, bool, error) { + serviceList, err := JsonReader(path) + if err != nil { + return "", false, err + } + for _, service := range serviceList { + if service.Token == token { + return service.Service, true, nil + } + } + return "", false, nil +} + +func GenerateResponse(w http.ResponseWriter, r *http.Request, httpStatus int, msg string) { + req := ResponseStringStruct{Response: msg} + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(httpStatus) + json.NewEncoder(w).Encode(req) +} |