Skip to content

Commit a1df2ce

Browse files
committed
[server] use encryption_key for couchbase env as hash is reserved keyword
1 parent 7487619 commit a1df2ce

File tree

9 files changed

+29
-20
lines changed

9 files changed

+29
-20
lines changed

Makefile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,18 @@ test-dynamodb:
3434
cd server && go clean --testcache && TEST_DBS="dynamodb" go test -p 1 -v ./test
3535
docker rm -vf dynamodb-local-test
3636
test-couchbase:
37-
# docker run -d --name couchbase-local-test -p 8091-8097:8091-8097 -p 11210:11210 -p 11207:11207 -p 18091-18095:18091-18095 -p 18096:18096 -p 18097:18097 couchbase:latest
38-
# create a docker container, set the cluster information and then run the tests
37+
docker run -d --name couchbase-local-test -p 8091-8097:8091-8097 -p 11210:11210 -p 11207:11207 -p 18091-18095:18091-18095 -p 18096:18096 -p 18097:18097 couchbase:latest
38+
sh scripts/couchbase-test.sh
3939
cd server && go clean --testcache && TEST_DBS="couchbase" go test -p 1 -v ./test
40-
# docker rm -vf couchbase-local-test
40+
docker rm -vf couchbase-local-test
4141
test-all-db:
4242
rm -rf server/test/test.db server/test/test.db-shm server/test/test.db-wal && rm -rf test.db test.db-shm test.db-wal
4343
docker run -d --name authorizer_scylla_db -p 9042:9042 scylladb/scylla
4444
docker run -d --name authorizer_mongodb_db -p 27017:27017 mongo:4.4.15
4545
docker run -d --name authorizer_arangodb -p 8529:8529 -e ARANGO_NO_AUTH=1 arangodb/arangodb:3.8.4
4646
docker run -d --name dynamodb-local-test -p 8000:8000 amazon/dynamodb-local:latest
47-
# docker run -d --name couchbase-local-test -p 8091-8097:8091-8097 -p 11210:11210 -p 11207:11207 -p 18091-18095:18091-18095 -p 18096:18096 -p 18097:18097 couchbase:latest
47+
docker run -d --name couchbase-local-test -p 8091-8097:8091-8097 -p 11210:11210 -p 11207:11207 -p 18091-18095:18091-18095 -p 18096:18096 -p 18097:18097 couchbase:latest
48+
sh scripts/couchbase-test.sh
4849
cd server && go clean --testcache && TEST_DBS="sqlite,mongodb,arangodb,scylladb,dynamodb" go test -p 1 -v ./test
4950
docker rm -vf authorizer_scylla_db
5051
docker rm -vf authorizer_mongodb_db

scripts/couchbase-test.sh

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,4 @@ if [ "$TYPE" = "WORKER" ]; then
3636
else
3737
couchbase-cli server-add --cluster=$COUCHBASE_MASTER:8091 --user=Administrator --password=password --server-add=$IP --server-add-username=Administrator --server-add-password=password
3838
fi;
39-
fi;
40-
41-
fg 1
39+
fi;

server/crypto/aes.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"crypto/aes"
55
"crypto/cipher"
66
"crypto/rand"
7+
"fmt"
78
"io"
89

910
"github.com/authorizerdev/authorizer/server/constants"
@@ -56,6 +57,7 @@ func DecryptAES(text string) (string, error) {
5657
func EncryptAESEnv(text []byte) ([]byte, error) {
5758
var res []byte
5859
k, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyEncryptionKey)
60+
fmt.Println("=> key:", k)
5961
if err != nil {
6062
return res, err
6163
}

server/db/models/env.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ package models
44

55
// Env model for db
66
type Env struct {
7-
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty" dynamo:"key,omitempty"` // for arangodb
8-
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id" dynamo:"id,hash"`
9-
EnvData string `json:"env" bson:"env" cql:"env" dynamo:"env"`
10-
Hash string `json:"hash" bson:"hash" cql:"hash" dynamo:"hash"`
11-
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at" dynamo:"updated_at"`
12-
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at" dynamo:"created_at"`
7+
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty" dynamo:"key,omitempty"` // for arangodb
8+
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id" dynamo:"id,hash"`
9+
EnvData string `json:"env" bson:"env" cql:"env" dynamo:"env"`
10+
Hash string `json:"hash" bson:"hash" cql:"hash" dynamo:"hash"`
11+
EncryptionKey string `json:"encryption_key" bson:"encryption_key" cql:"encryption_key" dynamo:"encryption_key"` // couchbase has "hash" as reserved keyword so we cannot use it. This will be empty for other dbs.
12+
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at" dynamo:"updated_at"`
13+
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at" dynamo:"created_at"`
1314
}

server/db/providers/couchbase/env.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ func (p *provider) AddEnv(ctx context.Context, env models.Env) (models.Env, erro
1818
env.CreatedAt = time.Now().Unix()
1919
env.UpdatedAt = time.Now().Unix()
2020
env.Key = env.ID
21+
env.EncryptionKey = env.Hash
2122

2223
insertOpt := gocb.InsertOptions{
2324
Context: ctx,
@@ -32,6 +33,7 @@ func (p *provider) AddEnv(ctx context.Context, env models.Env) (models.Env, erro
3233
// UpdateEnv to update environment information in database
3334
func (p *provider) UpdateEnv(ctx context.Context, env models.Env) (models.Env, error) {
3435
env.UpdatedAt = time.Now().Unix()
36+
env.EncryptionKey = env.Hash
3537

3638
updateEnvQuery := fmt.Sprintf("UPDATE %s.%s SET env = $1, updated_at = $2 WHERE _id = $3", p.scopeName, models.Collections.Env)
3739
_, err := p.db.Query(updateEnvQuery, &gocb.QueryOptions{
@@ -50,7 +52,7 @@ func (p *provider) UpdateEnv(ctx context.Context, env models.Env) (models.Env, e
5052
func (p *provider) GetEnv(ctx context.Context) (models.Env, error) {
5153
var env models.Env
5254

53-
query := fmt.Sprintf("SELECT _id, env, created_at, updated_at FROM %s.%s LIMIT 1", p.scopeName, models.Collections.Env)
55+
query := fmt.Sprintf("SELECT _id, env, encryption_key, created_at, updated_at FROM %s.%s LIMIT 1", p.scopeName, models.Collections.Env)
5456
q, err := p.db.Query(query, &gocb.QueryOptions{
5557
Context: ctx,
5658
ScanConsistency: gocb.QueryScanConsistencyRequestPlus,
@@ -63,5 +65,6 @@ func (p *provider) GetEnv(ctx context.Context) (models.Env, error) {
6365
if err != nil {
6466
return env, err
6567
}
68+
env.Hash = env.EncryptionKey
6669
return env, nil
6770
}

server/db/providers/couchbase/provider.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ func NewProvider() (*provider, error) {
5252
scopeIdentifier := fmt.Sprintf("%s.%s", bucketName, scopeName)
5353
v := reflect.ValueOf(models.Collections)
5454
for i := 0; i < v.NumField(); i++ {
55-
field := v.Field(i)
55+
collectionName := v.Field(i)
5656
user := gocb.CollectionSpec{
57-
Name: field.String(),
57+
Name: collectionName.String(),
5858
ScopeName: scopeName,
5959
}
6060
collectionOpts := gocb.CreateCollectionOptions{
@@ -64,8 +64,11 @@ func NewProvider() (*provider, error) {
6464
if err != nil && !errors.Is(err, gocb.ErrCollectionExists) {
6565
return nil, err
6666
}
67-
indexQuery := fmt.Sprintf("CREATE PRIMARY INDEX ON %s.%s", scopeIdentifier, field.String())
68-
scope.Query(indexQuery, nil)
67+
indexQuery := fmt.Sprintf("CREATE PRIMARY INDEX ON %s.%s", scopeIdentifier, collectionName.String())
68+
_, err = scope.Query(indexQuery, nil)
69+
if err != nil {
70+
fmt.Println("=> err", err, collectionName.String())
71+
}
6972
}
7073

7174
indices := GetIndex(scopeIdentifier)
@@ -85,7 +88,6 @@ func CreateBucketAndScope(cluster *gocb.Cluster, bucketName string, scopeName st
8588
settings := gocb.BucketSettings{
8689
Name: bucketName,
8790
RAMQuotaMB: 1000,
88-
NumReplicas: 1,
8991
BucketType: gocb.CouchbaseBucketType,
9092
EvictionPolicy: gocb.EvictionPolicyTypeValueOnly,
9193
FlushEnabled: true,

server/env/persist_env.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package env
33
import (
44
"context"
55
"encoding/json"
6+
"fmt"
67
"os"
78
"reflect"
89
"strconv"
@@ -115,6 +116,7 @@ func PersistEnv() error {
115116
if err != nil || env.EnvData == "" {
116117
// AES encryption needs 32 bit key only, so we chop off last 4 characters from 36 bit uuid
117118
hash := uuid.New().String()[:36-4]
119+
fmt.Println("hash:", hash)
118120
err := memorystore.Provider.UpdateEnvVariable(constants.EnvKeyEncryptionKey, hash)
119121
if err != nil {
120122
log.Debug("Error while updating encryption env variable: ", err)

server/resolvers/admin_signup.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ func AdminSignupResolver(ctx context.Context, params model.AdminSignupInput) (*m
6767
envData, err := crypto.EncryptEnvData(storeData)
6868
if err != nil {
6969
log.Debug("Failed to encrypt envstore: ", err)
70+
fmt.Println("Failed to encrypt envstore: ", err)
7071
return res, err
7172
}
7273

server/test/admin_signup_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ func adminSignupTests(t *testing.T, s TestSetup) {
2525
_, err = resolvers.AdminSignupResolver(ctx, model.AdminSignupInput{
2626
AdminSecret: "admin123",
2727
})
28-
2928
assert.Nil(t, err)
3029
})
3130
}

0 commit comments

Comments
 (0)