2022-10-03 01:08:12 +05:30
package dynamodb
import (
"github.com/aws/aws-sdk-go/aws"
2022-10-05 15:32:32 +05:30
"github.com/aws/aws-sdk-go/aws/credentials"
2022-10-03 01:08:12 +05:30
"github.com/aws/aws-sdk-go/aws/session"
"github.com/guregu/dynamo"
2022-10-09 00:49:31 +05:30
log "github.com/sirupsen/logrus"
2022-10-20 16:27:00 +05:30
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/db/models"
"github.com/authorizerdev/authorizer/server/memorystore"
2022-10-03 01:08:12 +05:30
)
type provider struct {
db * dynamo . DB
}
2022-10-05 15:32:32 +05:30
// NewProvider returns a new Dynamo provider
2022-10-03 01:08:12 +05:30
func NewProvider ( ) ( * provider , error ) {
2022-10-05 15:32:32 +05:30
dbURL := memorystore . RequiredEnvStoreObj . GetRequiredEnv ( ) . DatabaseURL
2022-10-21 15:55:54 +05:30
awsRegion := memorystore . RequiredEnvStoreObj . GetRequiredEnv ( ) . AwsRegion
awsAccessKeyID := memorystore . RequiredEnvStoreObj . GetRequiredEnv ( ) . AwsAccessKeyID
awsSecretAccessKey := memorystore . RequiredEnvStoreObj . GetRequiredEnv ( ) . AwsSecretAccessKey
2022-10-09 00:49:31 +05:30
2022-10-03 01:08:12 +05:30
config := aws . Config {
2022-10-09 00:49:31 +05:30
MaxRetries : aws . Int ( 3 ) ,
CredentialsChainVerboseErrors : aws . Bool ( true ) , // for full error logs
}
if awsRegion != "" {
config . Region = aws . String ( awsRegion )
2022-10-03 01:08:12 +05:30
}
2022-10-21 15:55:54 +05:30
// custom awsAccessKeyID, awsSecretAccessKey took first priority, if not then fetch config from aws credentials
if awsAccessKeyID != "" && awsSecretAccessKey != "" {
config . Credentials = credentials . NewStaticCredentials ( awsAccessKeyID , awsSecretAccessKey , "" )
2022-10-05 15:32:32 +05:30
} else if dbURL != "" {
// static config in case of testing or local-setup
config . Credentials = credentials . NewStaticCredentials ( "key" , "key" , "" )
config . Endpoint = aws . String ( dbURL )
2022-10-21 15:55:54 +05:30
} else {
log . Debugf ( "%s or %s or %s not found. Trying to load default credentials from aws config" , constants . EnvAwsRegion , constants . EnvAwsAccessKeyID , constants . EnvAwsSecretAccessKey )
2022-10-03 01:08:12 +05:30
}
2022-10-05 15:32:32 +05:30
session := session . Must ( session . NewSession ( & config ) )
db := dynamo . New ( session )
db . CreateTable ( models . Collections . User , models . User { } ) . Wait ( )
db . CreateTable ( models . Collections . Session , models . Session { } ) . Wait ( )
db . CreateTable ( models . Collections . EmailTemplate , models . EmailTemplate { } ) . Wait ( )
db . CreateTable ( models . Collections . Env , models . Env { } ) . Wait ( )
db . CreateTable ( models . Collections . OTP , models . OTP { } ) . Wait ( )
db . CreateTable ( models . Collections . VerificationRequest , models . VerificationRequest { } ) . Wait ( )
db . CreateTable ( models . Collections . Webhook , models . Webhook { } ) . Wait ( )
db . CreateTable ( models . Collections . WebhookLog , models . WebhookLog { } ) . Wait ( )
2022-10-03 01:08:12 +05:30
return & provider {
db : db ,
} , nil
}