Skip to content
Snippets Groups Projects
Commit cc45e61e authored by Alexey Kuklin's avatar Alexey Kuklin
Browse files

Merge branch 'master' into '119-devops-concurrent-ci'

Master

See merge request !39
parents 364551fb 162557a0
No related branches found
No related tags found
2 merge requests!42119 devops concurrent ci,!39Master
[[constraint]]
branch = "master"
branch = "activity_update"
name = "code.vereign.com/code/viam-apis"
[[constraint]]
......
......@@ -25,6 +25,7 @@ var MaxMessageSize int
var GrpcListenAddress string
var RestListenAddress string
var DataStorageUrl string
var EntitiesManagerUrl string
var CertDir string
func SetConfigValues() {
......@@ -34,6 +35,7 @@ func SetConfigValues() {
viper.SetDefault("grpcListenAddress", "localhost:7877")
viper.SetDefault("restListenAddress", "localhost:7878")
viper.SetDefault("dataStorageUrl", "localhost:7777")
viper.SetDefault("entitiesManagerUrl", "localhost:7779")
viper.SetDefault("viamUUID", "viam-system")
viper.SetDefault("viamSession", "viam-session")
......@@ -106,6 +108,7 @@ func SetConfigValues() {
RestListenAddress = viper.GetString("restListenAddress")
DataStorageUrl = viper.GetString("dataStorageUrl")
EntitiesManagerUrl = viper.GetString("entitiesManagerUrl")
SystemAuth.Uuid = viper.GetString("viamUUID")
SystemAuth.Session = viper.GetString("viamSession")
......
......@@ -18,9 +18,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package handler
import (
"encoding/base64"
"errors"
"log"
"strings"
"code.vereign.com/code/viam-apis/clientutils"
"code.vereign.com/code/viam-apis/versions"
"github.com/golang/protobuf/proto"
......@@ -32,6 +35,10 @@ import (
"google.golang.org/grpc/metadata"
)
const (
keyToKeyIdTable = "authenticationKeyToKeyId"
)
// Server represents the gRPC server
type KeyStorageServerImpl struct {
DataStorageUrl string
......@@ -165,6 +172,17 @@ func (s *KeyStorageServerImpl) SetKey(ctx context.Context, in *api.SetKeyRequest
"200", api.StatusType_INFO, result)
}
if in.KeyType == api.KeyType_PUBLIC {
keyContent := base64.StdEncoding.EncodeToString(in.Key.Content)
_, _, err = client.DoPutDataCallWithString(keyToKeyIdTable, keyContent,
in.Uuid, versions.EntitiesManagementAgentApiVersion)
if err != nil {
log.Printf("can't DoPutDataCallWithString: %s", err)
return nil, err
}
}
return setKeyResponse, nil
}
......@@ -209,6 +227,68 @@ func (s *KeyStorageServerImpl) ReserveKeyUUID(ctx context.Context, in *api.Reser
return reserveKeyUUIDResponse, nil
}
func (s *KeyStorageServerImpl) GetKeyId(ctx context.Context, in *api.GetKeyIdByKeyRequest) (*api.GetKeyIdByKeyResponse, error) {
auth := s.CreateAuthentication(ctx)
//in.PublicKey
entitiesMagamentClient := keyutils.CreateEntitiesManagementClient(auth)
defer entitiesMagamentClient.CloseClient()
dataStorageClient := keyutils.CreateDataStorageClient(auth)
defer dataStorageClient.CloseClient()
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
return keyIdResponse, nil
}
entity, err := clientutils.GetLastEntity(entitiesMagamentClient, auth.Uuid)
if err != nil {
return nil, err
}
for _, checkID := range entity.AuthenticationKeys {
key := &api.Key{}
data, err := dataStorageClient.DoGetDataCall("keys", checkID+"/"+api.KeyType_PUBLIC.String())
if err != nil {
log.Printf("grpc call GetKeyId to DataStorage failed: %s", err)
return nil, err
}
if data.Errors != "" {
return nil, errors.New(data.Errors)
} else {
proto.Unmarshal(data.Data.Data, key)
}
keyFromStorage := base64.StdEncoding.EncodeToString(key.Content)
if in.PublicKey != keyFromStorage {
continue
}
_, _, err = dataStorageClient.DoPutDataCallWithString(keyToKeyIdTable, in.PublicKey,
checkID, versions.EntitiesManagementAgentApiVersion)
if err != nil {
log.Printf("can't DoPutDataCallWithString: %s", err)
return nil, err
}
keyIdResponse.KeyId = checkID
return keyIdResponse, nil
}
//getKeyFromContent
return keyIdResponse, nil
}
func (s *KeyStorageServerImpl) GetVersionKSA(ctx context.Context, in *api.GetVersionKSAMessage) (*api.GetVersionKSAResponseMessage, error) {
log.Println("Version: " + version)
return &api.GetVersionKSAResponseMessage{Version: version, Errors: ""}, nil
......
......@@ -26,6 +26,28 @@ import (
"golang.org/x/net/context"
)
func (s *KeyStorageServerImpl) SetAuthorized(ctx context.Context, in *api.SetAuthorizedRequest) (*api.SetAuthorizedResponse, error) {
setAuthorizedResponse := &api.SetAuthorizedResponse{}
setAuthorizedResponse.StatusList = s.updateAll(ctx, in.Uuid, func(k *api.Key) { k.Unauthorized = !in.Value })
if setAuthorizedResponse.StatusList != nil {
return setAuthorizedResponse, nil
}
setAuthorizedResponse.StatusList = utils.AddStatus(setAuthorizedResponse.StatusList, "200", api.StatusType_INFO, "Keys authorization updated")
return setAuthorizedResponse, nil
}
func (s *KeyStorageServerImpl) Destroy(ctx context.Context, in *api.DestroyRequest) (*api.DestroyResponse, error) {
destroyResponse := &api.DestroyResponse{}
destroyResponse.StatusList = s.updateAll(ctx, in.Uuid, func(k *api.Key) { k.Destroyed = true })
if destroyResponse.StatusList != nil {
return destroyResponse, nil
}
destroyResponse.StatusList = utils.AddStatus(destroyResponse.StatusList, "200", api.StatusType_INFO, "Keys destroyed")
return destroyResponse, nil
}
func (s *KeyStorageServerImpl) Revoke(ctx context.Context, in *api.RevokeRequest) (*api.RevokeResponse, error) {
revokeResponse := &api.RevokeResponse{}
......
......@@ -33,6 +33,7 @@ import (
"code.vereign.com/code/viam-apis/clientutils"
"code.vereign.com/code/viam-apis/data-storage-agent/client"
dsclient "code.vereign.com/code/viam-apis/data-storage-agent/client"
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"
......@@ -151,3 +152,8 @@ func CreateDataStorageClient(auth *authentication.Authentication) *dsclient.Data
return clientutils.CreateDataStorageClient(auth, config.DataStorageUrl, config.CertificatePEM,
config.PrivateKeyPEM, config.CaCertificatePEM, config.MaxMessageSize)
}
func CreateEntitiesManagementClient(auth *authentication.Authentication) *emclient.EntitiesManagerClientImpl {
return clientutils.CreateEntitiesManagementClient(auth, config.EntitiesManagerUrl, config.CertificatePEM,
config.PrivateKeyPEM, config.CaCertificatePEM, config.MaxMessageSize)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment