Skip to content

Commit 9630cbb

Browse files
authored
Merge pull request #277 from authorizerdev/development
chore(1.1.21.rc)
2 parents d8ecead + 1ac0601 commit 9630cbb

27 files changed

+1108
-77
lines changed

Makefile

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,20 @@ test-arangodb:
2323
docker run -d --name authorizer_arangodb -p 8529:8529 -e ARANGO_NO_AUTH=1 arangodb/arangodb:3.8.4
2424
cd server && go clean --testcache && TEST_DBS="arangodb" go test -p 1 -v ./test
2525
docker rm -vf authorizer_arangodb
26+
test-dynamodb:
27+
docker run -d --name dynamodb-local-test -p 8000:8000 amazon/dynamodb-local:latest
28+
cd server && go clean --testcache && TEST_DBS="dynamodb" go test -p 1 -v ./test
29+
docker rm -vf dynamodb-local-test
2630
test-all-db:
2731
rm -rf server/test/test.db && rm -rf test.db
2832
docker run -d --name authorizer_scylla_db -p 9042:9042 scylladb/scylla
2933
docker run -d --name authorizer_mongodb_db -p 27017:27017 mongo:4.4.15
3034
docker run -d --name authorizer_arangodb -p 8529:8529 -e ARANGO_NO_AUTH=1 arangodb/arangodb:3.8.4
31-
cd server && go clean --testcache && TEST_DBS="sqlite,mongodb,arangodb,scylladb" go test -p 1 -v ./test
35+
docker run -d --name dynamodb-local-test -p 8000:8000 amazon/dynamodb-local:latest
36+
cd server && go clean --testcache && TEST_DBS="sqlite,mongodb,arangodb,scylladb,dynamodb" go test -p 1 -v ./test
3237
docker rm -vf authorizer_scylla_db
3338
docker rm -vf authorizer_mongodb_db
3439
docker rm -vf authorizer_arangodb
40+
docker rm -vf dynamodb-local-test
3541
generate:
3642
cd server && go run github.com/99designs/gqlgen generate && go mod tidy

server/constants/db_types.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@ const (
2525
DbTypeCockroachDB = "cockroachdb"
2626
// DbTypePlanetScaleDB is the planetscale database type
2727
DbTypePlanetScaleDB = "planetscale"
28+
// DbTypeDynamoDB is the Dynamo database type
29+
DbTypeDynamoDB = "dynamodb"
2830
)

server/constants/env.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ const (
2121
EnvKeyDatabaseType = "DATABASE_TYPE"
2222
// EnvKeyDatabaseURL key for env variable DATABASE_URL
2323
EnvKeyDatabaseURL = "DATABASE_URL"
24+
// EnvAwsRegion key for env variable AWS REGION
25+
EnvAwsRegion = "AWS_REGION"
26+
// EnvAwsAccessKeyID key for env variable AWS_ACCESS_KEY_ID
27+
EnvAwsAccessKeyID = "AWS_ACCESS_KEY_ID"
28+
// EnvAwsAccessKey key for env variable AWS_SECRET_ACCESS_KEY
29+
EnvAwsSecretAccessKey = "AWS_SECRET_ACCESS_KEY"
2430
// EnvKeyDatabaseName key for env variable DATABASE_NAME
2531
EnvKeyDatabaseName = "DATABASE_NAME"
2632
// EnvKeyDatabaseUsername key for env variable DATABASE_USERNAME

server/db/db.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/authorizerdev/authorizer/server/db/providers"
88
"github.com/authorizerdev/authorizer/server/db/providers/arangodb"
99
"github.com/authorizerdev/authorizer/server/db/providers/cassandradb"
10+
"github.com/authorizerdev/authorizer/server/db/providers/dynamodb"
1011
"github.com/authorizerdev/authorizer/server/db/providers/mongodb"
1112
"github.com/authorizerdev/authorizer/server/db/providers/sql"
1213
"github.com/authorizerdev/authorizer/server/memorystore"
@@ -20,10 +21,11 @@ func InitDB() error {
2021

2122
envs := memorystore.RequiredEnvStoreObj.GetRequiredEnv()
2223

23-
isSQL := envs.DatabaseType != constants.DbTypeArangodb && envs.DatabaseType != constants.DbTypeMongodb && envs.DatabaseType != constants.DbTypeCassandraDB && envs.DatabaseType != constants.DbTypeScyllaDB
24+
isSQL := envs.DatabaseType != constants.DbTypeArangodb && envs.DatabaseType != constants.DbTypeMongodb && envs.DatabaseType != constants.DbTypeCassandraDB && envs.DatabaseType != constants.DbTypeScyllaDB && envs.DatabaseType != constants.DbTypeDynamoDB
2425
isArangoDB := envs.DatabaseType == constants.DbTypeArangodb
2526
isMongoDB := envs.DatabaseType == constants.DbTypeMongodb
2627
isCassandra := envs.DatabaseType == constants.DbTypeCassandraDB || envs.DatabaseType == constants.DbTypeScyllaDB
28+
isDynamoDB := envs.DatabaseType == constants.DbTypeDynamoDB
2729

2830
if isSQL {
2931
log.Info("Initializing SQL Driver for: ", envs.DatabaseType)
@@ -61,5 +63,14 @@ func InitDB() error {
6163
}
6264
}
6365

66+
if isDynamoDB {
67+
log.Info("Initializing DynamoDB Driver for: ", envs.DatabaseType)
68+
Provider, err = dynamodb.NewProvider()
69+
if err != nil {
70+
log.Fatal("Failed to initialize DynamoDB driver: ", err)
71+
return err
72+
}
73+
}
74+
6475
return nil
6576
}

server/db/models/email_templates.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ import (
99

1010
// EmailTemplate model for database
1111
type EmailTemplate struct {
12-
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty"` // for arangodb
13-
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id"`
14-
EventName string `gorm:"unique" json:"event_name" bson:"event_name" cql:"event_name"`
15-
Subject string `json:"subject" bson:"subject" cql:"subject"`
16-
Template string `json:"template" bson:"template" cql:"template"`
17-
Design string `json:"design" bson:"design" cql:"design"`
18-
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at"`
19-
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at"`
12+
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty" dynamo:"key,omitempty"` // for arangodb
13+
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id" dynamo:"id,hash"`
14+
EventName string `gorm:"unique" json:"event_name" bson:"event_name" cql:"event_name" dynamo:"event_name" index:"event_name,hash"`
15+
Subject string `json:"subject" bson:"subject" cql:"subject" dynamo:"subject"`
16+
Template string `json:"template" bson:"template" cql:"template" dynamo:"template"`
17+
Design string `json:"design" bson:"design" cql:"design" dynamo:"design"`
18+
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at" dynamo:"created_at"`
19+
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at" dynamo:"updated_at"`
2020
}
2121

2222
// AsAPIEmailTemplate to return email template as graphql response object

server/db/models/env.go

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

55
// Env model for db
66
type Env struct {
7-
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty"` // for arangodb
8-
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id"`
9-
EnvData string `json:"env" bson:"env" cql:"env"`
10-
Hash string `json:"hash" bson:"hash" cql:"hash"`
11-
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at"`
12-
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"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+
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"`
1313
}

server/db/models/otp.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@ package models
22

33
// OTP model for database
44
type OTP struct {
5-
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty"` // for arangodb
6-
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id"`
7-
Email string `gorm:"unique" json:"email" bson:"email" cql:"email"`
8-
Otp string `json:"otp" bson:"otp" cql:"otp"`
9-
ExpiresAt int64 `json:"expires_at" bson:"expires_at" cql:"expires_at"`
10-
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at"`
11-
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at"`
5+
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty" dynamo:"key,omitempty"` // for arangodb
6+
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id" dynamo:"id,hash"`
7+
Email string `gorm:"unique" json:"email" bson:"email" cql:"email" dynamo:"email" index:"email,hash"`
8+
Otp string `json:"otp" bson:"otp" cql:"otp" dynamo:"otp"`
9+
ExpiresAt int64 `json:"expires_at" bson:"expires_at" cql:"expires_at" dynamo:"expires_at"`
10+
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at" dynamo:"created_at"`
11+
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at" dynamo:"updated_at"`
12+
}
13+
14+
type Paging struct {
15+
ID string `json:"id,omitempty" dynamo:"id,hash"`
1216
}

server/db/models/session.go

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

55
// Session model for db
66
type Session struct {
7-
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty"` // for arangodb
8-
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id"`
9-
UserID string `gorm:"type:char(36)" json:"user_id" bson:"user_id" cql:"user_id"`
10-
UserAgent string `json:"user_agent" bson:"user_agent" cql:"user_agent"`
11-
IP string `json:"ip" bson:"ip" cql:"ip"`
12-
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at"`
13-
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_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+
UserID string `gorm:"type:char(36)" json:"user_id" bson:"user_id" cql:"user_id" dynamo:"user_id" index:"user_id,hash"`
10+
UserAgent string `json:"user_agent" bson:"user_agent" cql:"user_agent" dynamo:"user_agent"`
11+
IP string `json:"ip" bson:"ip" cql:"ip" dynamo:"ip"`
12+
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at" dynamo:"created_at"`
13+
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at" dynamo:"updated_at"`
1414
}

server/db/models/user.go

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,27 @@ import (
1212

1313
// User model for db
1414
type User struct {
15-
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty"` // for arangodb
16-
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id"`
15+
Key string `json:"_key,omitempty" bson:"_key,omitempty" cql:"_key,omitempty" dynamo:"key,omitempty"` // for arangodb
16+
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id" dynamo:"id,hash"`
1717

18-
Email string `gorm:"unique" json:"email" bson:"email" cql:"email"`
19-
EmailVerifiedAt *int64 `json:"email_verified_at" bson:"email_verified_at" cql:"email_verified_at"`
20-
Password *string `json:"password" bson:"password" cql:"password"`
21-
SignupMethods string `json:"signup_methods" bson:"signup_methods" cql:"signup_methods"`
22-
GivenName *string `json:"given_name" bson:"given_name" cql:"given_name"`
23-
FamilyName *string `json:"family_name" bson:"family_name" cql:"family_name"`
24-
MiddleName *string `json:"middle_name" bson:"middle_name" cql:"middle_name"`
25-
Nickname *string `json:"nickname" bson:"nickname" cql:"nickname"`
26-
Gender *string `json:"gender" bson:"gender" cql:"gender"`
27-
Birthdate *string `json:"birthdate" bson:"birthdate" cql:"birthdate"`
28-
PhoneNumber *string `gorm:"unique" json:"phone_number" bson:"phone_number" cql:"phone_number"`
29-
PhoneNumberVerifiedAt *int64 `json:"phone_number_verified_at" bson:"phone_number_verified_at" cql:"phone_number_verified_at"`
30-
Picture *string `json:"picture" bson:"picture" cql:"picture"`
31-
Roles string `json:"roles" bson:"roles" cql:"roles"`
32-
RevokedTimestamp *int64 `json:"revoked_timestamp" bson:"revoked_timestamp" cql:"revoked_timestamp"`
33-
IsMultiFactorAuthEnabled *bool `json:"is_multi_factor_auth_enabled" bson:"is_multi_factor_auth_enabled" cql:"is_multi_factor_auth_enabled"`
34-
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at"`
35-
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at"`
18+
Email string `gorm:"unique" json:"email" bson:"email" cql:"email" dynamo:"email" index:"email,hash"`
19+
EmailVerifiedAt *int64 `json:"email_verified_at" bson:"email_verified_at" cql:"email_verified_at" dynamo:"email_verified_at"`
20+
Password *string `json:"password" bson:"password" cql:"password" dynamo:"password"`
21+
SignupMethods string `json:"signup_methods" bson:"signup_methods" cql:"signup_methods" dynamo:"signup_methods"`
22+
GivenName *string `json:"given_name" bson:"given_name" cql:"given_name" dynamo:"given_name"`
23+
FamilyName *string `json:"family_name" bson:"family_name" cql:"family_name" dynamo:"family_name"`
24+
MiddleName *string `json:"middle_name" bson:"middle_name" cql:"middle_name" dynamo:"middle_name"`
25+
Nickname *string `json:"nickname" bson:"nickname" cql:"nickname" dynamo:"nickname"`
26+
Gender *string `json:"gender" bson:"gender" cql:"gender" dynamo:"gender"`
27+
Birthdate *string `json:"birthdate" bson:"birthdate" cql:"birthdate" dynamo:"birthdate"`
28+
PhoneNumber *string `gorm:"unique" json:"phone_number" bson:"phone_number" cql:"phone_number" dynamo:"phone_number"`
29+
PhoneNumberVerifiedAt *int64 `json:"phone_number_verified_at" bson:"phone_number_verified_at" cql:"phone_number_verified_at" dynamo:"phone_number_verified_at"`
30+
Picture *string `json:"picture" bson:"picture" cql:"picture" dynamo:"picture"`
31+
Roles string `json:"roles" bson:"roles" cql:"roles" dynamo:"roles"`
32+
RevokedTimestamp *int64 `json:"revoked_timestamp" bson:"revoked_timestamp" cql:"revoked_timestamp" dynamo:"revoked_timestamp"`
33+
IsMultiFactorAuthEnabled *bool `json:"is_multi_factor_auth_enabled" bson:"is_multi_factor_auth_enabled" cql:"is_multi_factor_auth_enabled" dynamo:"is_multi_factor_auth_enabled"`
34+
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at" dynamo:"updated_at"`
35+
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at" dynamo:"created_at"`
3636
}
3737

3838
func (user *User) AsAPIUser() *model.User {

server/db/models/verification_requests.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ import (
1111

1212
// VerificationRequest model for db
1313
type VerificationRequest struct {
14-
Key string `json:"_key,omitempty" bson:"_key" cql:"_key,omitempty"` // for arangodb
15-
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id"`
16-
Token string `json:"token" bson:"token" cql:"jwt_token"` // token is reserved keyword in cassandra
17-
Identifier string `gorm:"uniqueIndex:idx_email_identifier;type:varchar(64)" json:"identifier" bson:"identifier" cql:"identifier"`
18-
ExpiresAt int64 `json:"expires_at" bson:"expires_at" cql:"expires_at"`
19-
Email string `gorm:"uniqueIndex:idx_email_identifier;type:varchar(256)" json:"email" bson:"email" cql:"email"`
20-
Nonce string `json:"nonce" bson:"nonce" cql:"nonce"`
21-
RedirectURI string `json:"redirect_uri" bson:"redirect_uri" cql:"redirect_uri"`
22-
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at"`
23-
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at"`
14+
Key string `json:"_key,omitempty" bson:"_key" cql:"_key,omitempty" dynamo:"key,omitempty"` // for arangodb
15+
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id" dynamo:"id,hash"`
16+
Token string `json:"token" bson:"token" cql:"jwt_token" dynamo:"token" index:"token,hash"`
17+
Identifier string `gorm:"uniqueIndex:idx_email_identifier;type:varchar(64)" json:"identifier" bson:"identifier" cql:"identifier" dynamo:"identifier"`
18+
ExpiresAt int64 `json:"expires_at" bson:"expires_at" cql:"expires_at" dynamo:"expires_at"`
19+
Email string `gorm:"uniqueIndex:idx_email_identifier;type:varchar(256)" json:"email" bson:"email" cql:"email" dynamo:"email"`
20+
Nonce string `json:"nonce" bson:"nonce" cql:"nonce" dynamo:"nonce"`
21+
RedirectURI string `json:"redirect_uri" bson:"redirect_uri" cql:"redirect_uri" dynamo:"redirect_uri"`
22+
CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at" dynamo:"created_at"`
23+
UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at" dynamo:"updated_at"`
2424
}
2525

2626
func (v *VerificationRequest) AsAPIVerificationRequest() *model.VerificationRequest {

0 commit comments

Comments
 (0)