authorizer/server/db/providers/dynamodb/provider.go

63 lines
2.1 KiB
Go
Raw Normal View History

2022-10-02 19:38:12 +00:00
package dynamodb
import (
"os"
"github.com/authorizerdev/authorizer/server/constants"
2022-10-02 19:38:12 +00:00
"github.com/authorizerdev/authorizer/server/db/models"
"github.com/authorizerdev/authorizer/server/memorystore"
2022-10-02 19:38:12 +00:00
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
2022-10-02 19:38:12 +00:00
"github.com/aws/aws-sdk-go/aws/session"
"github.com/guregu/dynamo"
log "github.com/sirupsen/logrus"
2022-10-02 19:38:12 +00:00
)
type provider struct {
db *dynamo.DB
}
// NewProvider returns a new Dynamo provider
2022-10-02 19:38:12 +00:00
func NewProvider() (*provider, error) {
dbURL := memorystore.RequiredEnvStoreObj.GetRequiredEnv().DatabaseURL
awsRegion := os.Getenv(constants.EnvAwsRegion)
accessKey := os.Getenv(constants.EnvAwsAccessKey)
secretKey := os.Getenv(constants.EnvAwsSecretKey)
2022-10-02 19:38:12 +00:00
config := aws.Config{
MaxRetries: aws.Int(3),
CredentialsChainVerboseErrors: aws.Bool(true), // for full error logs
}
if awsRegion != "" {
config.Region = aws.String(awsRegion)
2022-10-02 19:38:12 +00:00
}
// custom accessKey, secretkey took first priority, if not then fetch config from aws credentials
if accessKey != "" && secretKey != "" {
config.Credentials = credentials.NewStaticCredentials(accessKey, secretKey, "")
} else if dbURL != "" {
// static config in case of testing or local-setup
config.Credentials = credentials.NewStaticCredentials("key", "key", "")
config.Endpoint = aws.String(dbURL)
} else {
log.Info("REGION, AWS_ACCESS_KEY and AWS_SECRET_KEY not found in .env, trying to load default profile from aws credentials")
2022-10-02 19:38:12 +00:00
}
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-02 19:38:12 +00:00
return &provider{
db: db,
}, nil
}