2021-07-12 18:22:16 +00:00
|
|
|
package db
|
|
|
|
|
|
|
|
import (
|
|
|
|
"log"
|
|
|
|
|
2021-12-17 15:55:07 +00:00
|
|
|
arangoDriver "github.com/arangodb/go-driver"
|
2021-07-23 16:27:44 +00:00
|
|
|
"github.com/authorizerdev/authorizer/server/constants"
|
|
|
|
"github.com/authorizerdev/authorizer/server/enum"
|
2021-07-12 18:22:16 +00:00
|
|
|
"gorm.io/driver/mysql"
|
|
|
|
"gorm.io/driver/postgres"
|
|
|
|
"gorm.io/driver/sqlite"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
"gorm.io/gorm/schema"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Manager interface {
|
2021-12-17 15:55:07 +00:00
|
|
|
AddUser(user User) (User, error)
|
2021-07-18 03:55:20 +00:00
|
|
|
UpdateUser(user User) (User, error)
|
2021-12-17 15:55:07 +00:00
|
|
|
DeleteUser(user User) error
|
2021-07-12 18:22:16 +00:00
|
|
|
GetUsers() ([]User, error)
|
|
|
|
GetUserByEmail(email string) (User, error)
|
2021-09-21 02:53:40 +00:00
|
|
|
GetUserByID(email string) (User, error)
|
2021-07-18 04:22:54 +00:00
|
|
|
AddVerification(verification VerificationRequest) (VerificationRequest, error)
|
|
|
|
GetVerificationByToken(token string) (VerificationRequest, error)
|
2021-12-17 15:55:07 +00:00
|
|
|
DeleteVerificationRequest(verificationRequest VerificationRequest) error
|
2021-07-18 04:22:54 +00:00
|
|
|
GetVerificationRequests() ([]VerificationRequest, error)
|
2021-07-18 07:26:17 +00:00
|
|
|
GetVerificationByEmail(email string) (VerificationRequest, error)
|
2021-12-17 15:55:07 +00:00
|
|
|
AddSession(session Session) error
|
2021-07-12 18:22:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type manager struct {
|
2021-12-17 15:55:07 +00:00
|
|
|
sqlDB *gorm.DB
|
|
|
|
arangodb arangoDriver.Database
|
2021-07-12 18:22:16 +00:00
|
|
|
}
|
|
|
|
|
2021-12-17 15:55:07 +00:00
|
|
|
// mainly used by nosql dbs
|
|
|
|
type CollectionList struct {
|
|
|
|
User string
|
|
|
|
VerificationRequest string
|
|
|
|
Session string
|
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
IsSQL bool
|
|
|
|
IsArangoDB bool
|
|
|
|
Mgr Manager
|
|
|
|
Prefix = "authorizer_"
|
|
|
|
Collections = CollectionList{
|
|
|
|
User: Prefix + "users",
|
|
|
|
VerificationRequest: Prefix + "verification_requests",
|
|
|
|
Session: Prefix + "sessions",
|
|
|
|
}
|
|
|
|
)
|
2021-07-12 18:22:16 +00:00
|
|
|
|
2021-07-28 06:23:37 +00:00
|
|
|
func InitDB() {
|
2021-12-17 15:55:07 +00:00
|
|
|
var sqlDB *gorm.DB
|
2021-07-12 18:22:16 +00:00
|
|
|
var err error
|
2021-12-17 15:55:07 +00:00
|
|
|
|
|
|
|
IsSQL = constants.DATABASE_TYPE != enum.Arangodb.String()
|
|
|
|
IsArangoDB = constants.DATABASE_TYPE == enum.Arangodb.String()
|
|
|
|
|
|
|
|
// sql db orm config
|
2021-07-12 18:22:16 +00:00
|
|
|
ormConfig := &gorm.Config{
|
|
|
|
NamingStrategy: schema.NamingStrategy{
|
2021-12-17 15:55:07 +00:00
|
|
|
TablePrefix: Prefix,
|
2021-07-12 18:22:16 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2021-12-17 15:55:07 +00:00
|
|
|
log.Println("db type:", constants.DATABASE_TYPE)
|
|
|
|
|
|
|
|
switch constants.DATABASE_TYPE {
|
|
|
|
case enum.Postgres.String():
|
|
|
|
sqlDB, err = gorm.Open(postgres.Open(constants.DATABASE_URL), ormConfig)
|
|
|
|
break
|
|
|
|
case enum.Sqlite.String():
|
|
|
|
sqlDB, err = gorm.Open(sqlite.Open(constants.DATABASE_URL), ormConfig)
|
|
|
|
break
|
|
|
|
case enum.Mysql.String():
|
|
|
|
sqlDB, err = gorm.Open(mysql.Open(constants.DATABASE_URL), ormConfig)
|
|
|
|
break
|
|
|
|
case enum.Arangodb.String():
|
|
|
|
arangodb, err := initArangodb()
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal("error initing arangodb:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
Mgr = &manager{
|
|
|
|
sqlDB: nil,
|
|
|
|
arangodb: arangodb,
|
|
|
|
}
|
|
|
|
|
|
|
|
break
|
2021-07-12 18:22:16 +00:00
|
|
|
}
|
|
|
|
|
2021-12-17 15:55:07 +00:00
|
|
|
// common for all sql dbs that are configured via gorm
|
|
|
|
if IsSQL {
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal("Failed to init sqlDB:", err)
|
|
|
|
} else {
|
|
|
|
sqlDB.AutoMigrate(&User{}, &VerificationRequest{}, &Session{})
|
|
|
|
}
|
|
|
|
Mgr = &manager{
|
|
|
|
sqlDB: sqlDB,
|
|
|
|
arangodb: nil,
|
|
|
|
}
|
|
|
|
}
|
2021-07-12 18:22:16 +00:00
|
|
|
}
|