diff --git a/config.yaml.sample b/config.yaml.sample index 1ee2d92b8a78a1c7cab3001a72a679b71314c503..28d760a620292f12ae7593d778132bb8da51690e 100644 --- a/config.yaml.sample +++ b/config.yaml.sample @@ -7,6 +7,10 @@ dataStorageUrl: localhost:7777 grpcListenAddress: localhost:7877 restListenAddress: localhost:7878 +# VIAM Variables +viamUUID: viam-system +viamSession: viam-session + # Choose a certificate method for providing PEM strings # 1 = Read from file (*.crt and *.key files) # 2 = Read from Vault server (this will require additional config information for Vault) diff --git a/handler/generate_keypair.go b/handler/generate_keypair.go index 1a7e20ed3133d461eaaf3be201756b3ffed96382..578008e483282bb428dc7baafe4781d8a715a52a 100644 --- a/handler/generate_keypair.go +++ b/handler/generate_keypair.go @@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package handler import ( + "log" "crypto/aes" "crypto/cipher" "crypto/rand" @@ -46,24 +47,28 @@ func (s *KeyStorageServerImpl) GenerateKeyPair(ctx context.Context, uuid, err := generateUnusedUUID(client) if err != nil { + log.Printf("Error: %v", err) generateKeyPairResponse.StatusList = utils.AddStatus(generateKeyPairResponse.StatusList, "500", api.StatusType_ERROR, err.Error()) } privateKeyBytes, publicKeyBytes, err := generateKeyPair(int(in.KeySize)) if err != nil { + log.Printf("Error: %v", err) generateKeyPairResponse.StatusList = utils.AddStatus(generateKeyPairResponse.StatusList, "500", api.StatusType_ERROR, err.Error()) } aesKeyBytes, err := generateRandomSequence(256) if err != nil { + log.Printf("Error: %v", err) generateKeyPairResponse.StatusList = utils.AddStatus(generateKeyPairResponse.StatusList, "500", api.StatusType_ERROR, err.Error()) } encryptedPrivateKeyBytes, privateKeyNonce, err := aesEncrypt(aesKeyBytes, privateKeyBytes) if err != nil { + log.Printf("Error: %v", err) generateKeyPairResponse.StatusList = utils.AddStatus(generateKeyPairResponse.StatusList, "500", api.StatusType_ERROR, err.Error()) return generateKeyPairResponse, nil @@ -91,6 +96,7 @@ func (s *KeyStorageServerImpl) GenerateKeyPair(ctx context.Context, if generateKeyPairResponse.StatusList == nil || len(generateKeyPairResponse.StatusList) == 0 { encryptedAesKeyBytes, err := rsaEncryptWithServerKey(s.VereignCertFilePath, aesKeyBytes, []byte("aeskeys")) if err != nil { + log.Printf("Error: %v", err) generateKeyPairResponse.StatusList = utils.AddStatus(generateKeyPairResponse.StatusList, "500", api.StatusType_ERROR, err.Error()) return generateKeyPairResponse, nil @@ -105,6 +111,7 @@ func (s *KeyStorageServerImpl) GenerateKeyPair(ctx context.Context, if generateKeyPairResponse.StatusList == nil || len(generateKeyPairResponse.StatusList) == 0 { encryptedPrivateKeyNonceBytes, err := rsaEncryptWithServerKey(s.VereignCertFilePath, privateKeyNonce, []byte("nonce")) if err != nil { + log.Printf("Error: %v", err) generateKeyPairResponse.StatusList = utils.AddStatus(generateKeyPairResponse.StatusList, "500", api.StatusType_ERROR, err.Error()) return generateKeyPairResponse, nil @@ -128,11 +135,13 @@ func (s *KeyStorageServerImpl) GenerateKeyPair(ctx context.Context, func generateKeyPair(keySize int) ([]byte, []byte, error) { privateKey, err := rsa.GenerateKey(rand.Reader, keySize) if err != nil { + log.Printf("Error: %v", err) return nil, nil, err } err = privateKey.Validate() if err != nil { + log.Printf("Error: %v", err) return nil, nil, err } @@ -140,6 +149,7 @@ func generateKeyPair(keySize int) ([]byte, []byte, error) { pkcs8PrivateKeyBytes, err := x509.MarshalPKCS8PrivateKey(privateKey) if err != nil { + log.Printf("Error: %v", err) return nil, nil, err } @@ -152,6 +162,7 @@ func generateKeyPair(keySize int) ([]byte, []byte, error) { pkixPublicKeyBytes, err := x509.MarshalPKIXPublicKey(publicKey) if err != nil { + log.Printf("Error: %v", err) return nil, nil, err } @@ -168,12 +179,14 @@ func generateKeyPair(keySize int) ([]byte, []byte, error) { func rsaEncryptWithServerKey(certFilePath string, message []byte, label []byte) ([]byte, error) { serverCertificate, err := readCertificateFromFile(certFilePath) if err != nil { + log.Printf("Error: %v", err) return nil, err } serverPublicKey := serverCertificate.PublicKey.(*rsa.PublicKey) encryptedMessageBytes, err := rsa.EncryptOAEP(sha256.New(), rand.Reader, serverPublicKey, message, label) if err != nil { + log.Printf("Error: %v", err) return nil, err } @@ -183,16 +196,19 @@ func rsaEncryptWithServerKey(certFilePath string, message []byte, label []byte) func aesEncrypt(aesKey []byte, message []byte) ([]byte, []byte, error) { block, err := aes.NewCipher(aesKey) if err != nil { + log.Printf("Error: %v", err) return nil, nil, err } aesgcm, err := cipher.NewGCM(block) if err != nil { + log.Printf("Error: %v", err) return nil, nil, err } nonce, err := generateRandomSequence(aesgcm.NonceSize() * 8) if err != nil { + log.Printf("Error: %v", err) return nil, nil, err } @@ -206,6 +222,7 @@ func generateRandomSequence(keySize int) ([]byte, error) { _, err := rand.Read(key) if err != nil { + log.Printf("Error: %v", err) return nil, err } diff --git a/handler/handler.go b/handler/handler.go index b53e59b673818784d4bcddcac9c7ca0a6da98a02..535a449764488ba4a033c7c2e1968e399164a001 100644 --- a/handler/handler.go +++ b/handler/handler.go @@ -18,7 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package handler import ( - "fmt" + "log" "io/ioutil" "strings" @@ -76,6 +76,7 @@ func (s *KeyStorageServerImpl) GetKey(ctx context.Context, in *api.GetKeyRequest data, err := ioutil.ReadFile(s.VereignCertFilePath) if err != nil { + log.Printf("Error: %v", err) getKeyResponse.StatusList = utils.AddStatus(getKeyResponse.StatusList, "400", api.StatusType_ERROR, "Can not get root certificate") return getKeyResponse, nil @@ -168,6 +169,7 @@ func (s *KeyStorageServerImpl) ReserveKeyUUID(ctx context.Context, in *api.Reser uuid, err := generateUnusedUUID(client) if err != nil { + log.Printf("Error: %v", err) reserveKeyUUIDResponse.StatusList = utils.AddStatus(reserveKeyUUIDResponse.StatusList, "500", api.StatusType_INFO, err.Error()) } @@ -199,6 +201,6 @@ func (s *KeyStorageServerImpl) ReserveKeyUUID(ctx context.Context, in *api.Reser } func (s *KeyStorageServerImpl) GetVersionKSA(ctx context.Context, in *api.GetVersionKSAMessage) (*api.GetVersionKSAResponseMessage, error) { - fmt.Println("Version: " + version) + log.Println("Version: " + version) return &api.GetVersionKSAResponseMessage{Version: version, Errors: ""}, nil } \ No newline at end of file diff --git a/handler/utils.go b/handler/utils.go index c206e05ce6273d3f1fc2ec19a1532d78e63760d4..f1381396aff5754e53b71ee685ab652095693430 100644 --- a/handler/utils.go +++ b/handler/utils.go @@ -22,6 +22,7 @@ import ( "crypto/x509" "errors" "fmt" + "log" "io" "code.vereign.com/code/viam-apis/data-storage-agent/client" @@ -65,6 +66,7 @@ func newUUID() (string, error) { func handlePutDataErrors(statusList []*api.Status, errors string, err error) []*api.Status { if err != nil { + log.Printf("Error: %v", err) statusList = utils.AddStatus(statusList, "500", api.StatusType_ERROR, err.Error()) } else if errors != "" { statusList = utils.AddStatus(statusList, "400", api.StatusType_ERROR, errors) @@ -76,11 +78,13 @@ func handlePutDataErrors(statusList []*api.Status, errors string, err error) []* func readCertificateFromFile(fileName string) (*x509.Certificate, error) { certificatePemBlock, err := readPemBlockFromFile(fileName) if err != nil { + log.Printf("Error: %v", err) return nil, err } certificate, err := x509.ParseCertificate(certificatePemBlock.Bytes) if err != nil { + log.Printf("Error: %v", err) return nil, err } @@ -90,6 +94,7 @@ func readCertificateFromFile(fileName string) (*x509.Certificate, error) { func readPemBlockFromFile(fileName string) (*pem.Block, error) { fileBytes, err := ioutil.ReadFile(fileName) if err != nil { + log.Printf("Error: %v", err) return nil, err } diff --git a/server/configs.go b/server/configs.go index d66e379e5d9d5bf3f19626119ee638ac9268b2fb..e40bafc9a7132651a0ee851e8ec5b7e6fb2422e1 100644 --- a/server/configs.go +++ b/server/configs.go @@ -21,6 +21,9 @@ func SetConfigValues() { viper.SetDefault("vereignCertFile", "vereign_ca.cer") viper.SetDefault("vereignCertKey", "vereign_ca.key") + viper.SetDefault("viamUUID", "viam-system") + viper.SetDefault("viamSession", "viam-session") + viper.SetDefault("maxMessageSize", "32") // Read Config File diff --git a/server/server.go b/server/server.go index 8ff5003e77c2e2349cac8a51ccec3d39ea9e0017..5dcbe0eb7da5169c56898390935e35fcd98a7325 100644 --- a/server/server.go +++ b/server/server.go @@ -67,8 +67,8 @@ func authenticateClient(ctx context.Context, s *handler.KeyStorageServerImpl, in } viamAuth := &authentication.Authentication{ - Uuid: "viam-system", - Session: "viam-session", + Uuid: viper.GetString("viamUUID"), + Session: viper.GetString("viamSession"), } sessionClient := &client.DataStorageClientImpl{} @@ -95,12 +95,13 @@ func authenticateClient(ctx context.Context, s *handler.KeyStorageServerImpl, in // unaryInterceptor call authenticateClient with current context func unaryInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler1 grpc.UnaryHandler) (interface{}, error) { s, ok := info.Server.(*handler.KeyStorageServerImpl) - fmt.Println("Invoked method: " + info.FullMethod) + log.Println("Invoked method: " + info.FullMethod) if !ok { return nil, fmt.Errorf("unable to cast server") } clientID, err := authenticateClient(ctx, s, info.FullMethod) if err != nil { + log.Printf("Error: %v", err) return nil, err } @@ -117,6 +118,7 @@ func StartGRPCServer(address, certFilePath, privateKeyFilePath, caCertFilePath, // create a listener on TCP port lis, err := net.Listen("tcp", address) if err != nil { + log.Printf("Error: %v", err) return fmt.Errorf("failed to listen: %v", err) } @@ -134,6 +136,7 @@ func StartGRPCServer(address, certFilePath, privateKeyFilePath, caCertFilePath, // Create the TLS credentials creds, err := credentials.NewServerTLSFromFile(certFilePath, privateKeyFilePath) if err != nil { + log.Printf("Error: %v", err) return fmt.Errorf("could not load TLS keys: %s", err) } @@ -168,6 +171,7 @@ func StartRESTServer(address, grpcAddress, certFile string) error { creds, err := credentials.NewClientTLSFromFile(certFile, "") if err != nil { + log.Printf("Error: %v", err) return fmt.Errorf("could not load TLS certificate: %s", err) } @@ -177,6 +181,7 @@ func StartRESTServer(address, grpcAddress, certFile string) error { // Register RedisStorageServer err = api.RegisterKeyStorageHandlerFromEndpoint(ctx, mux, grpcAddress, opts) if err != nil { + log.Printf("Error: %v", err) return fmt.Errorf("could not register service RedisStorageServer: %s", err) } diff --git a/session/session.go b/session/session.go index 14793a89303df97561b0e64975fe40ab0a22ee2a..326243f9350e95a6c295d5ad4aa775363b17aee3 100644 --- a/session/session.go +++ b/session/session.go @@ -18,12 +18,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package session import ( + "log" client "code.vereign.com/code/viam-apis/data-storage-agent/client" ) func CheckSession(uuid string, session string, sessionClient *client.DataStorageClientImpl) bool { hasSession, _, err := sessionClient.HasSession(uuid, session) if err != nil { + log.Printf("Error: %v", err) return false }