Add fauna db provider
This commit is contained in:
parent
b42cc1549a
commit
e170569959
|
@ -13,4 +13,6 @@ const (
|
|||
DbTypeArangodb = "arangodb"
|
||||
// DbTypeMongodb is the mongodb database type
|
||||
DbTypeMongodb = "mongodb"
|
||||
// DbTypeFaunadb is the faunadb database type
|
||||
DbTypeFaunadb = "faunadb"
|
||||
)
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"github.com/authorizerdev/authorizer/server/constants"
|
||||
"github.com/authorizerdev/authorizer/server/db/providers"
|
||||
"github.com/authorizerdev/authorizer/server/db/providers/arangodb"
|
||||
"github.com/authorizerdev/authorizer/server/db/providers/faunadb"
|
||||
"github.com/authorizerdev/authorizer/server/db/providers/mongodb"
|
||||
"github.com/authorizerdev/authorizer/server/db/providers/sql"
|
||||
"github.com/authorizerdev/authorizer/server/envstore"
|
||||
|
@ -17,9 +18,10 @@ var Provider providers.Provider
|
|||
func InitDB() {
|
||||
var err error
|
||||
|
||||
isSQL := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeArangodb && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeMongodb
|
||||
isSQL := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeArangodb && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeMongodb && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeFaunadb
|
||||
isArangoDB := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeArangodb
|
||||
isMongoDB := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeMongodb
|
||||
isFaunaDB := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeFaunadb
|
||||
|
||||
if isSQL {
|
||||
Provider, err = sql.NewProvider()
|
||||
|
@ -41,4 +43,11 @@ func InitDB() {
|
|||
log.Fatal("=> error setting arangodb provider:", err)
|
||||
}
|
||||
}
|
||||
|
||||
if isFaunaDB {
|
||||
Provider, err = faunadb.NewProvider()
|
||||
if err != nil {
|
||||
log.Fatal("=> error setting arangodb provider:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
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
|
||||
}
|
|
@ -6,6 +6,7 @@ require (
|
|||
github.com/99designs/gqlgen v0.14.0
|
||||
github.com/arangodb/go-driver v1.2.1
|
||||
github.com/coreos/go-oidc/v3 v3.1.0
|
||||
github.com/fauna/faunadb-go/v5 v5.0.0-beta // indirect
|
||||
github.com/gin-contrib/location v0.0.2
|
||||
github.com/gin-gonic/gin v1.7.2
|
||||
github.com/go-playground/validator/v10 v10.8.0 // indirect
|
||||
|
|
|
@ -79,6 +79,8 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
|
|||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fauna/faunadb-go/v5 v5.0.0-beta h1:qjig7OPEsDPH/DJuHWIrOboreYd5aLQnSCzLgHDpnck=
|
||||
github.com/fauna/faunadb-go/v5 v5.0.0-beta/go.mod h1:eoEA8JUERBnzK5/8Rxnetzx326ImTZ8c++wi2GQwrEU=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
|
@ -456,6 +458,7 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R
|
|||
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q=
|
||||
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
|
|
Loading…
Reference in New Issue
Block a user