Add fauna db provider
This commit is contained in:
51
server/db/providers/faunadb/env.go
Normal file
51
server/db/providers/faunadb/env.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package faunadb
|
||||
|
||||
import (
|
||||
"log"
|
||||
"time"
|
||||
|
||||
f "github.com/fauna/faunadb-go/v5/faunadb"
|
||||
"github.com/google/uuid"
|
||||
|
||||
"github.com/authorizerdev/authorizer/server/db/models"
|
||||
)
|
||||
|
||||
// AddEnv to save environment information in database
|
||||
func (p *provider) AddEnv(env models.Env) (models.Env, error) {
|
||||
if env.ID == "" {
|
||||
env.ID = uuid.New().String()
|
||||
env.Key = env.ID
|
||||
}
|
||||
|
||||
env.CreatedAt = time.Now().Unix()
|
||||
env.UpdatedAt = time.Now().Unix()
|
||||
|
||||
_, err := p.db.Query(
|
||||
f.Create(
|
||||
f.Collection(models.Collections.Env),
|
||||
f.Obj{
|
||||
"data": env,
|
||||
},
|
||||
),
|
||||
)
|
||||
if err != nil {
|
||||
log.Println("error adding env:", err)
|
||||
return env, err
|
||||
}
|
||||
|
||||
return env, nil
|
||||
}
|
||||
|
||||
// UpdateEnv to update environment information in database
|
||||
func (p *provider) UpdateEnv(env models.Env) (models.Env, error) {
|
||||
env.UpdatedAt = time.Now().Unix()
|
||||
|
||||
return env, nil
|
||||
}
|
||||
|
||||
// GetEnv to get environment information from database
|
||||
func (p *provider) GetEnv() (models.Env, error) {
|
||||
var env models.Env
|
||||
|
||||
return env, nil
|
||||
}
|
164
server/db/providers/faunadb/faunadb.go
Normal file
164
server/db/providers/faunadb/faunadb.go
Normal file
@@ -0,0 +1,164 @@
|
||||
package faunadb
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"github.com/authorizerdev/authorizer/server/constants"
|
||||
"github.com/authorizerdev/authorizer/server/db/models"
|
||||
"github.com/authorizerdev/authorizer/server/envstore"
|
||||
f "github.com/fauna/faunadb-go/v5/faunadb"
|
||||
)
|
||||
|
||||
type provider struct {
|
||||
db *f.FaunaClient
|
||||
}
|
||||
|
||||
// NewProvider returns a new faunadb provider
|
||||
func NewProvider() (*provider, error) {
|
||||
secret := ""
|
||||
dbURL := "https://db.fauna.com"
|
||||
|
||||
// secret,url is stored in DATABASE_URL
|
||||
dbURLSplit := strings.Split(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL), ":")
|
||||
secret = dbURLSplit[0]
|
||||
|
||||
if len(dbURLSplit) > 1 {
|
||||
dbURL = dbURLSplit[1]
|
||||
}
|
||||
|
||||
client := f.NewFaunaClient(secret, f.Endpoint(dbURL))
|
||||
if client == nil {
|
||||
return nil, errors.New("failed to create faunadb client")
|
||||
}
|
||||
|
||||
_, err := client.Query(
|
||||
f.CreateCollection(f.Obj{"name": models.Collections.Env}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateIndex(
|
||||
f.Obj{
|
||||
"name": "env_id",
|
||||
"source": f.Collection(models.Collections.Env),
|
||||
"values": "_id",
|
||||
"unique": true,
|
||||
}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateIndex(
|
||||
f.Obj{
|
||||
"name": "env_key",
|
||||
"source": f.Collection(models.Collections.Env),
|
||||
"values": "_key",
|
||||
"unique": true,
|
||||
}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateCollection(f.Obj{"name": models.Collections.User}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateIndex(
|
||||
f.Obj{
|
||||
"name": "_id",
|
||||
"source": f.Collection(models.Collections.User),
|
||||
"unique": true,
|
||||
}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateIndex(
|
||||
f.Obj{
|
||||
"name": "_key",
|
||||
"source": f.Collection(models.Collections.User),
|
||||
"unique": true,
|
||||
}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateIndex(
|
||||
f.Obj{
|
||||
"name": "email",
|
||||
"source": f.Collection(models.Collections.User),
|
||||
"unique": true,
|
||||
}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateCollection(f.Obj{"name": models.Collections.Session}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateIndex(
|
||||
f.Obj{
|
||||
"name": "_id",
|
||||
"source": f.Collection(models.Collections.Session),
|
||||
"unique": true,
|
||||
}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateIndex(
|
||||
f.Obj{
|
||||
"name": "_key",
|
||||
"source": f.Collection(models.Collections.Session),
|
||||
"unique": true,
|
||||
}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateCollection(f.Obj{"name": models.Collections.VerificationRequest}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateIndex(
|
||||
f.Obj{
|
||||
"name": "_id",
|
||||
"source": f.Collection(models.Collections.VerificationRequest),
|
||||
"unique": true,
|
||||
}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
_, err = client.Query(
|
||||
f.CreateIndex(
|
||||
f.Obj{
|
||||
"name": "_key",
|
||||
"source": f.Collection(models.Collections.VerificationRequest),
|
||||
"unique": true,
|
||||
}))
|
||||
if err != nil {
|
||||
log.Println("error:", err)
|
||||
}
|
||||
|
||||
return &provider{
|
||||
db: client,
|
||||
}, nil
|
||||
}
|
25
server/db/providers/faunadb/session.go
Normal file
25
server/db/providers/faunadb/session.go
Normal file
@@ -0,0 +1,25 @@
|
||||
package faunadb
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/authorizerdev/authorizer/server/db/models"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// AddSession to save session information in database
|
||||
func (p *provider) AddSession(session models.Session) error {
|
||||
if session.ID == "" {
|
||||
session.ID = uuid.New().String()
|
||||
}
|
||||
|
||||
session.CreatedAt = time.Now().Unix()
|
||||
session.UpdatedAt = time.Now().Unix()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteSession to delete session information from database
|
||||
func (p *provider) DeleteSession(userId string) error {
|
||||
return nil
|
||||
}
|
60
server/db/providers/faunadb/user.go
Normal file
60
server/db/providers/faunadb/user.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package faunadb
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/authorizerdev/authorizer/server/constants"
|
||||
"github.com/authorizerdev/authorizer/server/db/models"
|
||||
"github.com/authorizerdev/authorizer/server/envstore"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// AddUser to save user information in database
|
||||
func (p *provider) AddUser(user models.User) (models.User, error) {
|
||||
if user.ID == "" {
|
||||
user.ID = uuid.New().String()
|
||||
}
|
||||
|
||||
if user.Roles == "" {
|
||||
user.Roles = strings.Join(envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles), ",")
|
||||
}
|
||||
|
||||
user.CreatedAt = time.Now().Unix()
|
||||
user.UpdatedAt = time.Now().Unix()
|
||||
|
||||
return user, nil
|
||||
}
|
||||
|
||||
// UpdateUser to update user information in database
|
||||
func (p *provider) UpdateUser(user models.User) (models.User, error) {
|
||||
user.UpdatedAt = time.Now().Unix()
|
||||
|
||||
return user, nil
|
||||
}
|
||||
|
||||
// DeleteUser to delete user information from database
|
||||
func (p *provider) DeleteUser(user models.User) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// ListUsers to get list of users from database
|
||||
func (p *provider) ListUsers() ([]models.User, error) {
|
||||
var users []models.User
|
||||
|
||||
return users, nil
|
||||
}
|
||||
|
||||
// GetUserByEmail to get user information from database using email address
|
||||
func (p *provider) GetUserByEmail(email string) (models.User, error) {
|
||||
var user models.User
|
||||
|
||||
return user, nil
|
||||
}
|
||||
|
||||
// GetUserByID to get user information from database using user ID
|
||||
func (p *provider) GetUserByID(id string) (models.User, error) {
|
||||
var user models.User
|
||||
|
||||
return user, nil
|
||||
}
|
46
server/db/providers/faunadb/verification_requests.go
Normal file
46
server/db/providers/faunadb/verification_requests.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package faunadb
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/authorizerdev/authorizer/server/db/models"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// AddVerification to save verification request in database
|
||||
func (p *provider) AddVerificationRequest(verificationRequest models.VerificationRequest) (models.VerificationRequest, error) {
|
||||
if verificationRequest.ID == "" {
|
||||
verificationRequest.ID = uuid.New().String()
|
||||
}
|
||||
|
||||
verificationRequest.CreatedAt = time.Now().Unix()
|
||||
verificationRequest.UpdatedAt = time.Now().Unix()
|
||||
|
||||
return verificationRequest, nil
|
||||
}
|
||||
|
||||
// GetVerificationRequestByToken to get verification request from database using token
|
||||
func (p *provider) GetVerificationRequestByToken(token string) (models.VerificationRequest, error) {
|
||||
var verificationRequest models.VerificationRequest
|
||||
|
||||
return verificationRequest, nil
|
||||
}
|
||||
|
||||
// GetVerificationRequestByEmail to get verification request by email from database
|
||||
func (p *provider) GetVerificationRequestByEmail(email string, identifier string) (models.VerificationRequest, error) {
|
||||
var verificationRequest models.VerificationRequest
|
||||
|
||||
return verificationRequest, nil
|
||||
}
|
||||
|
||||
// ListVerificationRequests to get list of verification requests from database
|
||||
func (p *provider) ListVerificationRequests() ([]models.VerificationRequest, error) {
|
||||
var verificationRequests []models.VerificationRequest
|
||||
|
||||
return verificationRequests, nil
|
||||
}
|
||||
|
||||
// DeleteVerificationRequest to delete verification request from database
|
||||
func (p *provider) DeleteVerificationRequest(verificationRequest models.VerificationRequest) error {
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user