diff --git a/handler/handler.go b/handler/handler.go index b56797387dacd8079edb7b158cabf05dd8fc71bd..5c8b78769e2001ac6292329350b6b55cd2756753 100644 --- a/handler/handler.go +++ b/handler/handler.go @@ -22,14 +22,13 @@ import ( "errors" "log" "strings" - "code.vereign.com/code/viam-apis/clientutils" - "github.com/golang/protobuf/proto" keyutils "code.vereign.com/code/key-storage-agent/utils" "code.vereign.com/code/viam-apis/authentication" "code.vereign.com/code/viam-apis/key-storage-agent/api" "code.vereign.com/code/viam-apis/utils" + "code.vereign.com/code/viam-apis/system" "golang.org/x/net/context" "google.golang.org/grpc/metadata" ) @@ -99,25 +98,33 @@ func (s *KeyStorageServerImpl) GetKey(ctx context.Context, in *api.GetKeyRequest return getKeyResponse, nil } - data, err := client.DoGetDataCall("keys", in.Uuid+"/"+api.KeyType.String(in.KeyType)) + key := &api.Key{} + + hasData, errorsString, err := client.GetData("keys", in.Uuid+"/"+api.KeyType.String(in.KeyType), key) if err != nil { - log.Printf("grpc call DoGetDataCall to DataStorage failed: %s", err) + log.Printf("grpc call GetData to DataStorage failed: %s", err) getKeyResponse.Key = nil getKeyResponse.StatusList = utils.AddStatus(getKeyResponse.StatusList, "500", api.StatusType_ERROR, err.Error()) return getKeyResponse, nil } - if data.Errors != "" { + if errorsString != "" { getKeyResponse.Key = nil getKeyResponse.StatusList = utils.AddStatus(getKeyResponse.StatusList, - "500", api.StatusType_ERROR, data.Errors) - } else { - key := &api.Key{} - proto.Unmarshal(data.Data.Data, key) - getKeyResponse.Key = key + "500", api.StatusType_ERROR, errorsString) + } + + if !hasData { + log.Println("No such key " + in.Uuid) + getKeyResponse.Key = nil + getKeyResponse.StatusList = utils.AddStatus(getKeyResponse.StatusList, + "500", api.StatusType_ERROR, err.Error()) + return getKeyResponse, nil } + getKeyResponse.Key = key + return getKeyResponse, nil } @@ -141,23 +148,17 @@ func (s *KeyStorageServerImpl) SetKey(ctx context.Context, in *api.SetKeyRequest return setKeyResponse, nil } - data, err := client.DoGetDataCall("keys", in.Uuid+"/"+api.KeyType.String(in.KeyType)) + key := &api.Key{} + + _, _, err := client.GetData("keys", in.Uuid+"/"+api.KeyType.String(in.KeyType), key) if err != nil { - log.Printf("grpc call DoGetDataCall to DataStorage failed: %s", err) + log.Printf("grpc call GetData to DataStorage failed: %s", err) setKeyResponse.StatusList = utils.AddStatus(setKeyResponse.StatusList, "500", api.StatusType_ERROR, err.Error()) return setKeyResponse, nil } - if data.Errors != "" { - setKeyResponse.StatusList = utils.AddStatus(setKeyResponse.StatusList, - "400", api.StatusType_ERROR, data.Errors) - return setKeyResponse, nil - } - - key := &api.Key{} - proto.Unmarshal(data.Data.Data, key) - if key != nil && key.Content != nil && len(key.Content) > 0 { + if len(key.Content) > 0 { setKeyResponse.StatusList = utils.AddStatus(setKeyResponse.StatusList, "400", api.StatusType_ERROR, "Key is already set") return setKeyResponse, nil @@ -176,7 +177,7 @@ func (s *KeyStorageServerImpl) SetKey(ctx context.Context, in *api.SetKeyRequest _, _, err = client.PutString(keyToKeyIdTable, keyContent, in.Uuid) if err != nil { - log.Printf("can't DoPutDataCallWithString: %s", err) + log.Printf("can't PutString: %s", err) return nil, err } } @@ -236,10 +237,11 @@ func (s *KeyStorageServerImpl) GetKeyId(ctx context.Context, in *api.GetKeyIdByK keyIdResponse := &api.GetKeyIdByKeyResponse{} - response, err := dataStorageClient.DoGetDataCall(keyToKeyIdTable, in.PublicKey) - if err == nil && response.Data != nil && response.Data.Data != nil { - keyID := string(response.Data.Data) - keyIdResponse.KeyId = keyID + stringMessage := &system.String{} + + hasData, errorsString, err := dataStorageClient.GetData(keyToKeyIdTable, in.PublicKey, stringMessage) + if err == nil && errorsString == "" && hasData { + keyIdResponse.KeyId = stringMessage.Value return keyIdResponse, nil } else { if err != nil { @@ -258,17 +260,21 @@ func (s *KeyStorageServerImpl) GetKeyId(ctx context.Context, in *api.GetKeyIdByK for _, checkID := range entity.AuthenticationKeys { key := &api.Key{} - data, err := dataStorageClient.DoGetDataCall("keys", checkID+"/"+api.KeyType_PUBLIC.String()) + hasData, errorsString, err := dataStorageClient.GetData("keys", checkID+"/"+api.KeyType_PUBLIC.String(), key) if err != nil { - log.Printf("grpc call GetKeyId to DataStorage failed: %s", err) + log.Printf("grpc call GetData to DataStorage failed: %s", err) return nil, err } - if data.Errors != "" { - return nil, errors.New(data.Errors) - } else { - proto.Unmarshal(data.Data.Data, key) + if errorsString != "" { + log.Printf("Error: %s", errorsString) + return nil, errors.New(errorsString) + } + + if !hasData { + log.Println("No such checkID " + checkID) + return nil, errors.New("No such checkID " + checkID) } keyFromStorage := base64.StdEncoding.EncodeToString(key.Content) @@ -279,7 +285,7 @@ func (s *KeyStorageServerImpl) GetKeyId(ctx context.Context, in *api.GetKeyIdByK _, _, err = dataStorageClient.PutString(keyToKeyIdTable, in.PublicKey, checkID) if err != nil { - log.Printf("can't DoPutDataCallWithString: %s", err) + log.Printf("can't PutString: %s", err) return nil, err } diff --git a/utils/utils.go b/utils/utils.go index aaf072029e81bb2f67e244ae96f9cda74ea68bb3..d4fb92d316a351d9985a87b5995c85faa08caf9d 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -36,7 +36,6 @@ import ( emclient "code.vereign.com/code/viam-apis/entities-management-agent/client" "code.vereign.com/code/viam-apis/key-storage-agent/api" "code.vereign.com/code/viam-apis/utils" - "github.com/golang/protobuf/proto" ) func GenerateUnusedUUID(client *client.DataStorageClientImpl) (string, error) { @@ -45,9 +44,10 @@ func GenerateUnusedUUID(client *client.DataStorageClientImpl) (string, error) { uuid, err := NewUUID() // check that uuid is not used - data, _ := client.DoGetDataCall("keys", uuid+"/"+api.KeyType.String(api.KeyType_PRIVATE)) + key := &api.Key{} - if data == nil || data.Errors != "" || err != nil { + hasData, errorsString, err := client.GetData("keys", uuid+"/"+api.KeyType.String(api.KeyType_PRIVATE), key) + if err != nil && errorsString != "" && !hasData { return uuid, nil } if count >= 10 { @@ -136,14 +136,23 @@ func ReadPemBlockFromFile(fileName string) (*pem.Block, error) { func GetKey(client *client.DataStorageClientImpl, uuid string, keyType api.KeyType) (*api.Key, []*api.Status) { statusList := []*api.Status{} - data, _ := client.DoGetDataCall("keys", uuid+"/"+api.KeyType.String(keyType)) - if data.Errors != "" { - statusList = utils.AddStatus(statusList, "400", api.StatusType_ERROR, data.Errors) + key := &api.Key{} + + hasData, errorsString, err := client.GetData("keys", uuid+"/"+api.KeyType.String(keyType), key) + if err != nil { + statusList = utils.AddStatus(statusList, "400", api.StatusType_ERROR, errorsString) return nil, statusList } - key := &api.Key{} - proto.Unmarshal(data.Data.Data, key) + if errorsString != "" { + statusList = utils.AddStatus(statusList, "400", api.StatusType_ERROR, errorsString) + return nil, statusList + } + + if !hasData { + statusList = utils.AddStatus(statusList, "400", api.StatusType_ERROR, errorsString) + return nil, statusList + } return key, nil }