Skip to content

Commit 178f6ef

Browse files
authored
feat: ADD SECRET API (#343)
1 parent 771c8c7 commit 178f6ef

25 files changed

+1957
-631
lines changed

cmd/layotto/main.go

+40-4
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,22 @@ package main
1919
import (
2020
"encoding/json"
2121
"fmt"
22-
"os"
23-
"strconv"
24-
"time"
25-
22+
"github.com/dapr/components-contrib/secretstores"
23+
"github.com/dapr/components-contrib/secretstores/aws/parameterstore"
24+
"github.com/dapr/components-contrib/secretstores/aws/secretmanager"
25+
"github.com/dapr/components-contrib/secretstores/azure/keyvault"
26+
gcp_secretmanager "github.com/dapr/components-contrib/secretstores/gcp/secretmanager"
27+
"github.com/dapr/components-contrib/secretstores/hashicorp/vault"
28+
sercetstores_kubernetes "github.com/dapr/components-contrib/secretstores/kubernetes"
29+
secretstore_env "github.com/dapr/components-contrib/secretstores/local/env"
30+
secretstore_file "github.com/dapr/components-contrib/secretstores/local/file"
2631
"mosn.io/api"
2732
"mosn.io/layotto/diagnostics"
2833
"mosn.io/layotto/pkg/grpc/default_api"
34+
secretstores_loader "mosn.io/layotto/pkg/runtime/secretstores"
35+
"os"
36+
"strconv"
37+
"time"
2938

3039
"mosn.io/layotto/components/file/local"
3140
"mosn.io/layotto/components/file/s3/alicloud"
@@ -339,6 +348,33 @@ func NewRuntimeGrpcServer(data json.RawMessage, opts ...grpc.ServerOption) (mgrp
339348
runtime_sequencer.NewFactory("mongo", func() sequencer.Store {
340349
return sequencer_mongo.NewMongoSequencer(log.DefaultLogger)
341350
}),
351+
),
352+
// secretstores
353+
runtime.WithSecretStoresFactory(
354+
secretstores_loader.NewFactory("kubernetes", func() secretstores.SecretStore {
355+
return sercetstores_kubernetes.NewKubernetesSecretStore(loggerForDaprComp)
356+
}),
357+
secretstores_loader.NewFactory("azure.keyvault", func() secretstores.SecretStore {
358+
return keyvault.NewAzureKeyvaultSecretStore(loggerForDaprComp)
359+
}),
360+
secretstores_loader.NewFactory("hashicorp.vault", func() secretstores.SecretStore {
361+
return vault.NewHashiCorpVaultSecretStore(loggerForDaprComp)
362+
}),
363+
secretstores_loader.NewFactory("aws.secretmanager", func() secretstores.SecretStore {
364+
return secretmanager.NewSecretManager(loggerForDaprComp)
365+
}),
366+
secretstores_loader.NewFactory("aws.parameterstore", func() secretstores.SecretStore {
367+
return parameterstore.NewParameterStore(loggerForDaprComp)
368+
}),
369+
secretstores_loader.NewFactory("gcp.secretmanager", func() secretstores.SecretStore {
370+
return gcp_secretmanager.NewSecreteManager(loggerForDaprComp)
371+
}),
372+
secretstores_loader.NewFactory("local.file", func() secretstores.SecretStore {
373+
return secretstore_file.NewLocalSecretStore(loggerForDaprComp)
374+
}),
375+
secretstores_loader.NewFactory("local.env", func() secretstores.SecretStore {
376+
return secretstore_env.NewEnvSecretStore(loggerForDaprComp)
377+
}),
342378
))
343379
// 4. check if unhealthy
344380
if err != nil {

components/go.mod

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ require (
1818
github.com/hashicorp/consul/api v1.3.0
1919
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
2020
github.com/minio/minio-go/v7 v7.0.15
21-
github.com/mitchellh/mapstructure v1.3.3 // indirect
21+
github.com/mitchellh/mapstructure v1.4.1
22+
github.com/pkg/errors v0.9.1
2223
github.com/spf13/afero v1.2.2 // indirect
2324
github.com/stretchr/testify v1.7.0
2425
github.com/valyala/fasthttp v1.26.0

components/go.sum

+7-4
Original file line numberDiff line numberDiff line change
@@ -503,8 +503,11 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW
503503
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
504504
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
505505
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
506-
github.com/klauspost/compress v1.13.1 h1:wXr2uRxZTJXHLly6qhJabee5JqIhTRoLBhDOA74hDEQ=
507-
github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
506+
github.com/klauspost/compress v1.10.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
507+
github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
508+
github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
509+
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
510+
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
508511
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
509512
github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s=
510513
github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4=
@@ -569,8 +572,8 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4
569572
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
570573
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
571574
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
572-
github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8=
573-
github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
575+
github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
576+
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
574577
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
575578
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
576579
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ require (
1919
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
2020
github.com/hashicorp/go-multierror v1.1.1 // indirect
2121
github.com/json-iterator/go v1.1.11
22-
github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5
22+
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2
2323
github.com/pkg/errors v0.9.1
2424
github.com/shirou/gopsutil v3.21.3+incompatible
2525
github.com/stretchr/testify v1.7.0

go.sum

+14-2
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,7 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
470470
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
471471
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
472472
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
473+
github.com/go-logr/logr v0.3.0 h1:q4c+kbcR0d5rSurhBR8dIgieOaYpXtsdTYfx22Cu6rs=
473474
github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
474475
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
475476
github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY=
@@ -632,6 +633,7 @@ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
632633
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
633634
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
634635
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
636+
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
635637
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
636638
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
637639
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
@@ -656,6 +658,7 @@ github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+
656658
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
657659
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
658660
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
661+
github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwuTCM=
659662
github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
660663
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
661664
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
@@ -753,6 +756,7 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO
753756
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
754757
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
755758
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
759+
github.com/imdario/mergo v0.3.10 h1:6q5mVkdH/vYmqngx7kZQTjJ5HRsx+ImorDIEQ+beJgc=
756760
github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
757761
github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA=
758762
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
@@ -1128,8 +1132,8 @@ github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCko
11281132
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
11291133
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
11301134
github.com/peterh/liner v0.0.0-20170211195444-bf27d3ba8e1d/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
1131-
github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5 h1:rZQtoozkfsiNs36c7Tdv/gyGNzD1X1XWKO8rptVNZuM=
1132-
github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
1135+
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
1136+
github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
11331137
github.com/pierrec/lz4 v0.0.0-20190327172049-315a67e90e41/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
11341138
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
11351139
github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I=
@@ -2041,24 +2045,30 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9
20412045
istio.io/api v0.0.0-20200227213531-891bf31f3c32/go.mod h1:bcY3prusO/6vA6zGHz4PNG2v79clPyTw06Xx3fprJSQ=
20422046
istio.io/gogo-genproto v0.0.0-20190930162913-45029607206a/go.mod h1:OzpAts7jljZceG4Vqi5/zXy/pOg1b209T3jb7Nv5wIs=
20432047
k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI=
2048+
k8s.io/api v0.20.0 h1:WwrYoZNM1W1aQEbyl8HNG+oWGzLpZQBlcerS9BQw9yI=
20442049
k8s.io/api v0.20.0/go.mod h1:HyLC5l5eoS/ygQYl1BXBgFzWNlkHiAuyNAbevIn+FKg=
20452050
k8s.io/apiextensions-apiserver v0.20.0/go.mod h1:ZH+C33L2Bh1LY1+HphoRmN1IQVLTShVcTojivK3N9xg=
20462051
k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg=
2052+
k8s.io/apimachinery v0.20.0 h1:jjzbTJRXk0unNS71L7h3lxGDH/2HPxMPaQY+MjECKL8=
20472053
k8s.io/apimachinery v0.20.0/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
20482054
k8s.io/apiserver v0.20.0/go.mod h1:6gRIWiOkvGvQt12WTYmsiYoUyYW0FXSiMdNl4m+sxY8=
2055+
k8s.io/client-go v0.20.0 h1:Xlax8PKbZsjX4gFvNtt4F5MoJ1V5prDvCuoq9B7iax0=
20492056
k8s.io/client-go v0.20.0/go.mod h1:4KWh/g+Ocd8KkCwKF8vUNnmqgv+EVnQDK4MBF4oB5tY=
20502057
k8s.io/code-generator v0.20.0/go.mod h1:UsqdF+VX4PU2g46NC2JRs4gc+IfrctnwHb76RNbWHJg=
20512058
k8s.io/component-base v0.20.0/go.mod h1:wKPj+RHnAr8LW2EIBIK7AxOHPde4gme2lzXwVSoRXeA=
20522059
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
20532060
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
20542061
k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
20552062
k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
2063+
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
20562064
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
20572065
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
20582066
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
2067+
k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ=
20592068
k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
20602069
k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
20612070
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
2071+
k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw=
20622072
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
20632073
launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM=
20642074
launchpad.net/xmlpath v0.0.0-20130614043138-000000000004/go.mod h1:vqyExLOM3qBx7mvYRkoxjSCF945s0mbe7YynlKYXtsA=
@@ -2077,7 +2087,9 @@ rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
20772087
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
20782088
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
20792089
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
2090+
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ=
20802091
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
2092+
sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8=
20812093
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
20822094
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
20832095
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=

pkg/grpc/dapr/dapr_api.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"errors"
2222
"github.com/dapr/components-contrib/bindings"
2323
"github.com/dapr/components-contrib/pubsub"
24+
"github.com/dapr/components-contrib/secretstores"
2425
"github.com/dapr/components-contrib/state"
2526
jsoniter "github.com/json-iterator/go"
2627
"google.golang.org/grpc"
@@ -63,6 +64,7 @@ type daprGrpcAPI struct {
6364
lockStores map[string]lock.LockStore
6465
sequencers map[string]sequencer.Store
6566
sendToOutputBindingFn func(name string, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error)
67+
secretStores map[string]secretstores.SecretStore
6668
// app callback
6769
AppCallbackConn *grpc.ClientConn
6870
// json
@@ -161,6 +163,11 @@ func (d *daprGrpcAPI) InvokeBinding(ctx context.Context, in *runtime.InvokeBindi
161163
return r, nil
162164
}
163165

166+
func (d *daprGrpcAPI) isSecretAllowed(storeName string, key string) bool {
167+
// TODO: add permission control
168+
return true
169+
}
170+
164171
// NewDaprAPI_Alpha construct a grpc_api.GrpcAPI which implements DaprServer.
165172
// Currently it only support Dapr's InvokeService and InvokeBinding API.
166173
// Note: this feature is still in Alpha state and we don't recommend that you use it in your production environment.
@@ -175,7 +182,7 @@ func NewDaprAPI_Alpha(ac *grpc_api.ApplicationContext) grpc_api.GrpcAPI {
175182
return NewDaprServer(ac.AppId,
176183
ac.Hellos, ac.ConfigStores, ac.Rpcs, ac.PubSubs, ac.StateStores, transactionalStateStores,
177184
ac.Files, ac.LockStores, ac.Sequencers,
178-
ac.SendToOutputBindingFn)
185+
ac.SendToOutputBindingFn, ac.SecretStores)
179186
}
180187

181188
func NewDaprServer(
@@ -190,6 +197,7 @@ func NewDaprServer(
190197
lockStores map[string]lock.LockStore,
191198
sequencers map[string]sequencer.Store,
192199
sendToOutputBindingFn func(name string, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error),
200+
secretStores map[string]secretstores.SecretStore,
193201
) DaprGrpcAPI {
194202
// construct
195203
return &daprGrpcAPI{
@@ -205,5 +213,6 @@ func NewDaprServer(
205213
sequencers: sequencers,
206214
sendToOutputBindingFn: sendToOutputBindingFn,
207215
json: jsoniter.ConfigFastest,
216+
secretStores: secretStores,
208217
}
209218
}

pkg/grpc/dapr/dapr_api_secret.go

+114
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
/*
2+
* Copyright 2021 Layotto Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package dapr
18+
19+
import (
20+
"context"
21+
"github.com/dapr/components-contrib/secretstores"
22+
"google.golang.org/grpc/codes"
23+
"google.golang.org/grpc/status"
24+
"mosn.io/layotto/pkg/grpc/dapr/proto/runtime/v1"
25+
"mosn.io/layotto/pkg/messages"
26+
"mosn.io/pkg/log"
27+
)
28+
29+
func (d *daprGrpcAPI) GetSecret(ctx context.Context, request *runtime.GetSecretRequest) (*runtime.GetSecretResponse, error) {
30+
// 1. check parameters
31+
if d.secretStores == nil || len(d.secretStores) == 0 {
32+
err := status.Error(codes.FailedPrecondition, messages.ErrSecretStoreNotConfigured)
33+
log.DefaultLogger.Errorf("GetSecret fail,not configured err:%+v", err)
34+
return &runtime.GetSecretResponse{}, err
35+
}
36+
secretStoreName := request.StoreName
37+
38+
if d.secretStores[secretStoreName] == nil {
39+
err := status.Errorf(codes.InvalidArgument, messages.ErrSecretStoreNotFound, secretStoreName)
40+
log.DefaultLogger.Errorf("GetSecret fail,not find err:%+v", err)
41+
return &runtime.GetSecretResponse{}, err
42+
}
43+
44+
// 2. TODO permission control
45+
if !d.isSecretAllowed(request.StoreName, request.Key) {
46+
err := status.Errorf(codes.PermissionDenied, messages.ErrPermissionDenied, request.Key, request.StoreName)
47+
return &runtime.GetSecretResponse{}, err
48+
}
49+
50+
// 3. delegate to components
51+
req := secretstores.GetSecretRequest{
52+
Name: request.Key,
53+
Metadata: request.Metadata,
54+
}
55+
getResponse, err := d.secretStores[secretStoreName].GetSecret(req)
56+
// 4. parse result
57+
if err != nil {
58+
err = status.Errorf(codes.Internal, messages.ErrSecretGet, req.Name, secretStoreName, err.Error())
59+
log.DefaultLogger.Errorf("GetSecret fail,get secret err:%+v", err)
60+
return &runtime.GetSecretResponse{}, err
61+
}
62+
63+
response := &runtime.GetSecretResponse{}
64+
if getResponse.Data != nil {
65+
response.Data = getResponse.Data
66+
}
67+
return response, nil
68+
}
69+
70+
func (d *daprGrpcAPI) GetBulkSecret(ctx context.Context, in *runtime.GetBulkSecretRequest) (*runtime.GetBulkSecretResponse, error) {
71+
// 1. check parameters
72+
if d.secretStores == nil || len(d.secretStores) == 0 {
73+
err := status.Error(codes.FailedPrecondition, messages.ErrSecretStoreNotConfigured)
74+
log.DefaultLogger.Errorf("GetBulkSecret fail,not configured err:%+v", err)
75+
return &runtime.GetBulkSecretResponse{}, err
76+
}
77+
secretStoreName := in.StoreName
78+
79+
if d.secretStores[secretStoreName] == nil {
80+
err := status.Errorf(codes.InvalidArgument, messages.ErrSecretStoreNotFound, secretStoreName)
81+
log.DefaultLogger.Errorf("GetBulkSecret fail,not find err:%+v", err)
82+
return &runtime.GetBulkSecretResponse{}, err
83+
}
84+
// 2. delegate to components
85+
req := secretstores.BulkGetSecretRequest{
86+
Metadata: in.Metadata,
87+
}
88+
getResponse, err := d.secretStores[secretStoreName].BulkGetSecret(req)
89+
// 3. parse result
90+
if err != nil {
91+
err = status.Errorf(codes.Internal, messages.ErrBulkSecretGet, secretStoreName, err.Error())
92+
log.DefaultLogger.Errorf("GetBulkSecret fail,bulk secret err:%+v", err)
93+
return &runtime.GetBulkSecretResponse{}, err
94+
}
95+
96+
// 4. filter result
97+
filteredSecrets := map[string]map[string]string{}
98+
for key, v := range getResponse.Data {
99+
// TODO: permission control
100+
if d.isSecretAllowed(secretStoreName, key) {
101+
filteredSecrets[key] = v
102+
} else {
103+
log.DefaultLogger.Debugf(messages.ErrPermissionDenied, key, in.StoreName)
104+
}
105+
}
106+
response := &runtime.GetBulkSecretResponse{}
107+
if getResponse.Data != nil {
108+
response.Data = map[string]*runtime.SecretResponse{}
109+
for key, v := range filteredSecrets {
110+
response.Data[key] = &runtime.SecretResponse{Secrets: v}
111+
}
112+
}
113+
return response, nil
114+
}

0 commit comments

Comments
 (0)