fix: rename config -> env and handle env interface better
This commit is contained in:
parent
7785f98dcd
commit
38419a4ef4
|
@ -1,6 +1,14 @@
|
||||||
package constants
|
package constants
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
// Envstore identifier
|
||||||
|
// StringStore string store identifier
|
||||||
|
StringStoreIdentifier = "stringStore"
|
||||||
|
// BoolStore bool store identifier
|
||||||
|
BoolStoreIdentifier = "boolStore"
|
||||||
|
// SliceStore slice store identifier
|
||||||
|
SliceStoreIdentifier = "sliceStore"
|
||||||
|
|
||||||
// EnvKeyEnv key for env variable ENV
|
// EnvKeyEnv key for env variable ENV
|
||||||
EnvKeyEnv = "ENV"
|
EnvKeyEnv = "ENV"
|
||||||
// EnvKeyEnvPath key for cli arg variable ENV_PATH
|
// EnvKeyEnvPath key for cli arg variable ENV_PATH
|
||||||
|
|
|
@ -18,7 +18,7 @@ import (
|
||||||
func initArangodb() (arangoDriver.Database, error) {
|
func initArangodb() (arangoDriver.Database, error) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
conn, err := http.NewConnection(http.ConnectionConfig{
|
conn, err := http.NewConnection(http.ConnectionConfig{
|
||||||
Endpoints: []string{envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseURL).(string)},
|
Endpoints: []string{envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -33,16 +33,16 @@ func initArangodb() (arangoDriver.Database, error) {
|
||||||
|
|
||||||
var arangodb driver.Database
|
var arangodb driver.Database
|
||||||
|
|
||||||
arangodb_exists, err := arangoClient.DatabaseExists(nil, envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseName).(string))
|
arangodb_exists, err := arangoClient.DatabaseExists(nil, envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName))
|
||||||
|
|
||||||
if arangodb_exists {
|
if arangodb_exists {
|
||||||
log.Println(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseName).(string) + " db exists already")
|
log.Println(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName) + " db exists already")
|
||||||
arangodb, err = arangoClient.Database(nil, envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseName).(string))
|
arangodb, err = arangoClient.Database(nil, envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
arangodb, err = arangoClient.CreateDatabase(nil, envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseName).(string), nil)
|
arangodb, err = arangoClient.CreateDatabase(nil, envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -101,13 +101,13 @@ func initArangodb() (arangoDriver.Database, error) {
|
||||||
Sparse: true,
|
Sparse: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
configCollectionExists, err := arangodb.CollectionExists(ctx, Collections.Config)
|
configCollectionExists, err := arangodb.CollectionExists(ctx, Collections.Env)
|
||||||
if configCollectionExists {
|
if configCollectionExists {
|
||||||
log.Println(Collections.Config + " collection exists already")
|
log.Println(Collections.Env + " collection exists already")
|
||||||
} else {
|
} else {
|
||||||
_, err = arangodb.CreateCollection(ctx, Collections.Config, nil)
|
_, err = arangodb.CreateCollection(ctx, Collections.Env, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("error creating collection("+Collections.Config+"):", err)
|
log.Println("error creating collection("+Collections.Env+"):", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,161 +0,0 @@
|
||||||
package db
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
arangoDriver "github.com/arangodb/go-driver"
|
|
||||||
"github.com/google/uuid"
|
|
||||||
"go.mongodb.org/mongo-driver/bson"
|
|
||||||
"go.mongodb.org/mongo-driver/mongo/options"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Config struct {
|
|
||||||
Key string `json:"_key,omitempty" bson:"_key"` // for arangodb
|
|
||||||
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id"`
|
|
||||||
Config []byte `gorm:"type:text" json:"config" bson:"config"`
|
|
||||||
Hash string `gorm:"type:hash" json:"hash" bson:"hash"`
|
|
||||||
UpdatedAt int64 `gorm:"autoUpdateTime" json:"updated_at" bson:"updated_at"`
|
|
||||||
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at" bson:"created_at"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddConfig function to add config
|
|
||||||
func (mgr *manager) AddConfig(config Config) (Config, error) {
|
|
||||||
if config.ID == "" {
|
|
||||||
config.ID = uuid.New().String()
|
|
||||||
}
|
|
||||||
|
|
||||||
if IsORMSupported {
|
|
||||||
// copy id as value for fields required for mongodb & arangodb
|
|
||||||
config.Key = config.ID
|
|
||||||
result := mgr.sqlDB.Create(&config)
|
|
||||||
|
|
||||||
if result.Error != nil {
|
|
||||||
log.Println("error adding config:", result.Error)
|
|
||||||
return config, result.Error
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if IsArangoDB {
|
|
||||||
config.CreatedAt = time.Now().Unix()
|
|
||||||
config.UpdatedAt = time.Now().Unix()
|
|
||||||
configCollection, _ := mgr.arangodb.Collection(nil, Collections.Config)
|
|
||||||
meta, err := configCollection.CreateDocument(arangoDriver.WithOverwrite(nil), config)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("error adding config:", err)
|
|
||||||
return config, err
|
|
||||||
}
|
|
||||||
config.Key = meta.Key
|
|
||||||
config.ID = meta.ID.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
if IsMongoDB {
|
|
||||||
config.CreatedAt = time.Now().Unix()
|
|
||||||
config.UpdatedAt = time.Now().Unix()
|
|
||||||
config.Key = config.ID
|
|
||||||
configCollection := mgr.mongodb.Collection(Collections.Config, options.Collection())
|
|
||||||
_, err := configCollection.InsertOne(nil, config)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("error adding config:", err)
|
|
||||||
return config, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return config, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// UpdateConfig function to update config
|
|
||||||
func (mgr *manager) UpdateConfig(config Config) (Config, error) {
|
|
||||||
config.UpdatedAt = time.Now().Unix()
|
|
||||||
|
|
||||||
if IsORMSupported {
|
|
||||||
result := mgr.sqlDB.Save(&config)
|
|
||||||
|
|
||||||
if result.Error != nil {
|
|
||||||
log.Println("error updating config:", result.Error)
|
|
||||||
return config, result.Error
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if IsArangoDB {
|
|
||||||
collection, _ := mgr.arangodb.Collection(nil, Collections.Config)
|
|
||||||
meta, err := collection.UpdateDocument(nil, config.Key, config)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("error updating config:", err)
|
|
||||||
return config, err
|
|
||||||
}
|
|
||||||
|
|
||||||
config.Key = meta.Key
|
|
||||||
config.ID = meta.ID.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
if IsMongoDB {
|
|
||||||
configCollection := mgr.mongodb.Collection(Collections.Config, options.Collection())
|
|
||||||
_, err := configCollection.UpdateOne(nil, bson.M{"_id": bson.M{"$eq": config.ID}}, bson.M{"$set": config}, options.MergeUpdateOptions())
|
|
||||||
if err != nil {
|
|
||||||
log.Println("error updating config:", err)
|
|
||||||
return config, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return config, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetConfig function to get config
|
|
||||||
func (mgr *manager) GetConfig() (Config, error) {
|
|
||||||
var config Config
|
|
||||||
|
|
||||||
if IsORMSupported {
|
|
||||||
result := mgr.sqlDB.First(&config)
|
|
||||||
|
|
||||||
if result.Error != nil {
|
|
||||||
return config, result.Error
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if IsArangoDB {
|
|
||||||
query := fmt.Sprintf("FOR d in %s RETURN d", Collections.Config)
|
|
||||||
|
|
||||||
cursor, err := mgr.arangodb.Query(nil, query, nil)
|
|
||||||
if err != nil {
|
|
||||||
return config, err
|
|
||||||
}
|
|
||||||
defer cursor.Close()
|
|
||||||
|
|
||||||
for {
|
|
||||||
if !cursor.HasMore() {
|
|
||||||
if config.Key == "" {
|
|
||||||
return config, fmt.Errorf("config not found")
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
_, err := cursor.ReadDocument(nil, &config)
|
|
||||||
if err != nil {
|
|
||||||
return config, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if IsMongoDB {
|
|
||||||
configCollection := mgr.mongodb.Collection(Collections.Config, options.Collection())
|
|
||||||
cursor, err := configCollection.Find(nil, bson.M{}, options.Find())
|
|
||||||
if err != nil {
|
|
||||||
return config, err
|
|
||||||
}
|
|
||||||
defer cursor.Close(nil)
|
|
||||||
|
|
||||||
for cursor.Next(nil) {
|
|
||||||
err := cursor.Decode(&config)
|
|
||||||
if err != nil {
|
|
||||||
return config, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if config.ID == "" {
|
|
||||||
return config, fmt.Errorf("config not found")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return config, nil
|
|
||||||
}
|
|
|
@ -29,9 +29,9 @@ type Manager interface {
|
||||||
GetVerificationByEmail(email string, identifier string) (VerificationRequest, error)
|
GetVerificationByEmail(email string, identifier string) (VerificationRequest, error)
|
||||||
AddSession(session Session) error
|
AddSession(session Session) error
|
||||||
DeleteUserSession(userId string) error
|
DeleteUserSession(userId string) error
|
||||||
AddConfig(config Config) (Config, error)
|
AddEnv(env Env) (Env, error)
|
||||||
UpdateConfig(config Config) (Config, error)
|
UpdateEnv(env Env) (Env, error)
|
||||||
GetConfig() (Config, error)
|
GetEnv() (Env, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type manager struct {
|
type manager struct {
|
||||||
|
@ -45,7 +45,7 @@ type CollectionList struct {
|
||||||
User string
|
User string
|
||||||
VerificationRequest string
|
VerificationRequest string
|
||||||
Session string
|
Session string
|
||||||
Config string
|
Env string
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -58,7 +58,7 @@ var (
|
||||||
User: Prefix + "users",
|
User: Prefix + "users",
|
||||||
VerificationRequest: Prefix + "verification_requests",
|
VerificationRequest: Prefix + "verification_requests",
|
||||||
Session: Prefix + "sessions",
|
Session: Prefix + "sessions",
|
||||||
Config: Prefix + "config",
|
Env: Prefix + "env",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -66,9 +66,9 @@ func InitDB() {
|
||||||
var sqlDB *gorm.DB
|
var sqlDB *gorm.DB
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
IsORMSupported = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseType).(string) != constants.DbTypeArangodb && envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseType).(string) != constants.DbTypeMongodb
|
IsORMSupported = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeArangodb && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeMongodb
|
||||||
IsArangoDB = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseType).(string) == constants.DbTypeArangodb
|
IsArangoDB = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeArangodb
|
||||||
IsMongoDB = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseType).(string) == constants.DbTypeMongodb
|
IsMongoDB = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeMongodb
|
||||||
|
|
||||||
// sql db orm config
|
// sql db orm config
|
||||||
ormConfig := &gorm.Config{
|
ormConfig := &gorm.Config{
|
||||||
|
@ -77,20 +77,20 @@ func InitDB() {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("db type:", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseType).(string))
|
log.Println("db type:", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType))
|
||||||
|
|
||||||
switch envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseType).(string) {
|
switch envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) {
|
||||||
case constants.DbTypePostgres:
|
case constants.DbTypePostgres:
|
||||||
sqlDB, err = gorm.Open(postgres.Open(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseURL).(string)), ormConfig)
|
sqlDB, err = gorm.Open(postgres.Open(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
|
||||||
break
|
break
|
||||||
case constants.DbTypeSqlite:
|
case constants.DbTypeSqlite:
|
||||||
sqlDB, err = gorm.Open(sqlite.Open(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseURL).(string)), ormConfig)
|
sqlDB, err = gorm.Open(sqlite.Open(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
|
||||||
break
|
break
|
||||||
case constants.DbTypeMysql:
|
case constants.DbTypeMysql:
|
||||||
sqlDB, err = gorm.Open(mysql.Open(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseURL).(string)), ormConfig)
|
sqlDB, err = gorm.Open(mysql.Open(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
|
||||||
break
|
break
|
||||||
case constants.DbTypeSqlserver:
|
case constants.DbTypeSqlserver:
|
||||||
sqlDB, err = gorm.Open(sqlserver.Open(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseURL).(string)), ormConfig)
|
sqlDB, err = gorm.Open(sqlserver.Open(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL)), ormConfig)
|
||||||
break
|
break
|
||||||
case constants.DbTypeArangodb:
|
case constants.DbTypeArangodb:
|
||||||
arangodb, err := initArangodb()
|
arangodb, err := initArangodb()
|
||||||
|
@ -123,7 +123,7 @@ func InitDB() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Failed to init sqlDB:", err)
|
log.Fatal("Failed to init sqlDB:", err)
|
||||||
} else {
|
} else {
|
||||||
sqlDB.AutoMigrate(&User{}, &VerificationRequest{}, &Session{}, &Config{})
|
sqlDB.AutoMigrate(&User{}, &VerificationRequest{}, &Session{}, &Env{})
|
||||||
}
|
}
|
||||||
Mgr = &manager{
|
Mgr = &manager{
|
||||||
sqlDB: sqlDB,
|
sqlDB: sqlDB,
|
||||||
|
|
161
server/db/env.go
Normal file
161
server/db/env.go
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
arangoDriver "github.com/arangodb/go-driver"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
|
"go.mongodb.org/mongo-driver/mongo/options"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Env struct {
|
||||||
|
Key string `json:"_key,omitempty" bson:"_key"` // for arangodb
|
||||||
|
ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id"`
|
||||||
|
EnvData []byte `gorm:"type:text" json:"env" bson:"env"`
|
||||||
|
Hash string `gorm:"type:hash" json:"hash" bson:"hash"`
|
||||||
|
UpdatedAt int64 `gorm:"autoUpdateTime" json:"updated_at" bson:"updated_at"`
|
||||||
|
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at" bson:"created_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddEnv function to add env to db
|
||||||
|
func (mgr *manager) AddEnv(env Env) (Env, error) {
|
||||||
|
if env.ID == "" {
|
||||||
|
env.ID = uuid.New().String()
|
||||||
|
}
|
||||||
|
|
||||||
|
if IsORMSupported {
|
||||||
|
// copy id as value for fields required for mongodb & arangodb
|
||||||
|
env.Key = env.ID
|
||||||
|
result := mgr.sqlDB.Create(&env)
|
||||||
|
|
||||||
|
if result.Error != nil {
|
||||||
|
log.Println("error adding config:", result.Error)
|
||||||
|
return env, result.Error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if IsArangoDB {
|
||||||
|
env.CreatedAt = time.Now().Unix()
|
||||||
|
env.UpdatedAt = time.Now().Unix()
|
||||||
|
configCollection, _ := mgr.arangodb.Collection(nil, Collections.Env)
|
||||||
|
meta, err := configCollection.CreateDocument(arangoDriver.WithOverwrite(nil), env)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error adding config:", err)
|
||||||
|
return env, err
|
||||||
|
}
|
||||||
|
env.Key = meta.Key
|
||||||
|
env.ID = meta.ID.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
if IsMongoDB {
|
||||||
|
env.CreatedAt = time.Now().Unix()
|
||||||
|
env.UpdatedAt = time.Now().Unix()
|
||||||
|
env.Key = env.ID
|
||||||
|
configCollection := mgr.mongodb.Collection(Collections.Env, options.Collection())
|
||||||
|
_, err := configCollection.InsertOne(nil, env)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error adding config:", err)
|
||||||
|
return env, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return env, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateEnv function to update env in db
|
||||||
|
func (mgr *manager) UpdateEnv(env Env) (Env, error) {
|
||||||
|
env.UpdatedAt = time.Now().Unix()
|
||||||
|
|
||||||
|
if IsORMSupported {
|
||||||
|
result := mgr.sqlDB.Save(&env)
|
||||||
|
|
||||||
|
if result.Error != nil {
|
||||||
|
log.Println("error updating config:", result.Error)
|
||||||
|
return env, result.Error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if IsArangoDB {
|
||||||
|
collection, _ := mgr.arangodb.Collection(nil, Collections.Env)
|
||||||
|
meta, err := collection.UpdateDocument(nil, env.Key, env)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error updating config:", err)
|
||||||
|
return env, err
|
||||||
|
}
|
||||||
|
|
||||||
|
env.Key = meta.Key
|
||||||
|
env.ID = meta.ID.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
if IsMongoDB {
|
||||||
|
configCollection := mgr.mongodb.Collection(Collections.Env, options.Collection())
|
||||||
|
_, err := configCollection.UpdateOne(nil, bson.M{"_id": bson.M{"$eq": env.ID}}, bson.M{"$set": env}, options.MergeUpdateOptions())
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error updating config:", err)
|
||||||
|
return env, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return env, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetConfig function to get config
|
||||||
|
func (mgr *manager) GetEnv() (Env, error) {
|
||||||
|
var env Env
|
||||||
|
|
||||||
|
if IsORMSupported {
|
||||||
|
result := mgr.sqlDB.First(&env)
|
||||||
|
|
||||||
|
if result.Error != nil {
|
||||||
|
return env, result.Error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if IsArangoDB {
|
||||||
|
query := fmt.Sprintf("FOR d in %s RETURN d", Collections.Env)
|
||||||
|
|
||||||
|
cursor, err := mgr.arangodb.Query(nil, query, nil)
|
||||||
|
if err != nil {
|
||||||
|
return env, err
|
||||||
|
}
|
||||||
|
defer cursor.Close()
|
||||||
|
|
||||||
|
for {
|
||||||
|
if !cursor.HasMore() {
|
||||||
|
if env.Key == "" {
|
||||||
|
return env, fmt.Errorf("config not found")
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
_, err := cursor.ReadDocument(nil, &env)
|
||||||
|
if err != nil {
|
||||||
|
return env, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if IsMongoDB {
|
||||||
|
configCollection := mgr.mongodb.Collection(Collections.Env, options.Collection())
|
||||||
|
cursor, err := configCollection.Find(nil, bson.M{}, options.Find())
|
||||||
|
if err != nil {
|
||||||
|
return env, err
|
||||||
|
}
|
||||||
|
defer cursor.Close(nil)
|
||||||
|
|
||||||
|
for cursor.Next(nil) {
|
||||||
|
err := cursor.Decode(&env)
|
||||||
|
if err != nil {
|
||||||
|
return env, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if env.ID == "" {
|
||||||
|
return env, fmt.Errorf("config not found")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return env, nil
|
||||||
|
}
|
|
@ -13,7 +13,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func initMongodb() (*mongo.Database, error) {
|
func initMongodb() (*mongo.Database, error) {
|
||||||
mongodbOptions := options.Client().ApplyURI(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseURL).(string))
|
mongodbOptions := options.Client().ApplyURI(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL))
|
||||||
maxWait := time.Duration(5 * time.Second)
|
maxWait := time.Duration(5 * time.Second)
|
||||||
mongodbOptions.ConnectTimeout = &maxWait
|
mongodbOptions.ConnectTimeout = &maxWait
|
||||||
mongoClient, err := mongo.NewClient(mongodbOptions)
|
mongoClient, err := mongo.NewClient(mongodbOptions)
|
||||||
|
@ -31,7 +31,7 @@ func initMongodb() (*mongo.Database, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
mongodb := mongoClient.Database(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDatabaseName).(string), options.Database())
|
mongodb := mongoClient.Database(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseName), options.Database())
|
||||||
|
|
||||||
mongodb.CreateCollection(ctx, Collections.User, options.CreateCollection())
|
mongodb.CreateCollection(ctx, Collections.User, options.CreateCollection())
|
||||||
userCollection := mongodb.Collection(Collections.User, options.Collection())
|
userCollection := mongodb.Collection(Collections.User, options.Collection())
|
||||||
|
@ -74,7 +74,7 @@ func initMongodb() (*mongo.Database, error) {
|
||||||
},
|
},
|
||||||
}, options.CreateIndexes())
|
}, options.CreateIndexes())
|
||||||
|
|
||||||
mongodb.CreateCollection(ctx, Collections.Config, options.CreateCollection())
|
mongodb.CreateCollection(ctx, Collections.Env, options.CreateCollection())
|
||||||
|
|
||||||
return mongodb, nil
|
return mongodb, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ func (mgr *manager) AddUser(user User) (User, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if user.Roles == "" {
|
if user.Roles == "" {
|
||||||
user.Roles = strings.Join(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDefaultRoles).([]string), ",")
|
user.Roles = strings.Join(envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles), ",")
|
||||||
}
|
}
|
||||||
|
|
||||||
if IsORMSupported {
|
if IsORMSupported {
|
||||||
|
|
|
@ -32,13 +32,13 @@ func addEmailTemplate(a string, b map[string]interface{}, templateName string) s
|
||||||
// SendMail function to send mail
|
// SendMail function to send mail
|
||||||
func SendMail(to []string, Subject, bodyMessage string) error {
|
func SendMail(to []string, Subject, bodyMessage string) error {
|
||||||
m := gomail.NewMessage()
|
m := gomail.NewMessage()
|
||||||
m.SetHeader("From", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeySenderEmail).(string))
|
m.SetHeader("From", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeySenderEmail))
|
||||||
m.SetHeader("To", to...)
|
m.SetHeader("To", to...)
|
||||||
m.SetHeader("Subject", Subject)
|
m.SetHeader("Subject", Subject)
|
||||||
m.SetBody("text/html", bodyMessage)
|
m.SetBody("text/html", bodyMessage)
|
||||||
port, _ := strconv.Atoi(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeySmtpPort).(string))
|
port, _ := strconv.Atoi(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeySmtpPort))
|
||||||
d := gomail.NewDialer(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeySmtpHost).(string), port, envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeySmtpUsername).(string), envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeySmtpPassword).(string))
|
d := gomail.NewDialer(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeySmtpHost), port, envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeySmtpUsername), envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeySmtpPassword))
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyEnv).(string) == "development" {
|
if envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyEnv) == "development" {
|
||||||
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
|
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
|
||||||
}
|
}
|
||||||
if err := d.DialAndSend(m); err != nil {
|
if err := d.DialAndSend(m); err != nil {
|
||||||
|
|
|
@ -7,9 +7,9 @@ import (
|
||||||
|
|
||||||
// SendForgotPasswordMail to send forgot password email
|
// SendForgotPasswordMail to send forgot password email
|
||||||
func SendForgotPasswordMail(toEmail, token, host string) error {
|
func SendForgotPasswordMail(toEmail, token, host string) error {
|
||||||
resetPasswordUrl := envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyResetPasswordURL).(string)
|
resetPasswordUrl := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyResetPasswordURL)
|
||||||
if resetPasswordUrl == "" {
|
if resetPasswordUrl == "" {
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyResetPasswordURL, envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string)+"/app/reset-password")
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyResetPasswordURL, envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL)+"/app/reset-password")
|
||||||
}
|
}
|
||||||
|
|
||||||
// The receiver needs to be in slice as the receive supports multiple receiver
|
// The receiver needs to be in slice as the receive supports multiple receiver
|
||||||
|
@ -103,8 +103,8 @@ func SendForgotPasswordMail(toEmail, token, host string) error {
|
||||||
`
|
`
|
||||||
|
|
||||||
data := make(map[string]interface{}, 3)
|
data := make(map[string]interface{}, 3)
|
||||||
data["org_logo"] = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyOrganizationLogo).(string)
|
data["org_logo"] = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyOrganizationLogo)
|
||||||
data["org_name"] = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyOrganizationName).(string)
|
data["org_name"] = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyOrganizationName)
|
||||||
data["verification_url"] = resetPasswordUrl + "?token=" + token
|
data["verification_url"] = resetPasswordUrl + "?token=" + token
|
||||||
message = addEmailTemplate(message, data, "reset_password_email.tmpl")
|
message = addEmailTemplate(message, data, "reset_password_email.tmpl")
|
||||||
|
|
||||||
|
|
|
@ -97,9 +97,9 @@ func SendVerificationMail(toEmail, token string) error {
|
||||||
</html>
|
</html>
|
||||||
`
|
`
|
||||||
data := make(map[string]interface{}, 3)
|
data := make(map[string]interface{}, 3)
|
||||||
data["org_logo"] = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyOrganizationLogo).(string)
|
data["org_logo"] = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyOrganizationLogo)
|
||||||
data["org_name"] = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyOrganizationName).(string)
|
data["org_name"] = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyOrganizationName)
|
||||||
data["verification_url"] = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string) + "/verify_email?token=" + token
|
data["verification_url"] = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL) + "/verify_email?token=" + token
|
||||||
message = addEmailTemplate(message, data, "verify_email.tmpl")
|
message = addEmailTemplate(message, data, "verify_email.tmpl")
|
||||||
// bodyMessage := sender.WriteHTMLEmail(Receiver, Subject, message)
|
// bodyMessage := sender.WriteHTMLEmail(Receiver, Subject, message)
|
||||||
|
|
||||||
|
|
181
server/env/env.go
vendored
181
server/env/env.go
vendored
|
@ -27,176 +27,175 @@ func InitEnv() {
|
||||||
// get clone of current store
|
// get clone of current store
|
||||||
envData := envstore.EnvInMemoryStoreObj.GetEnvStoreClone()
|
envData := envstore.EnvInMemoryStoreObj.GetEnvStoreClone()
|
||||||
|
|
||||||
if envData[constants.EnvKeyEnv] == nil || envData[constants.EnvKeyEnv] == "" {
|
if envData.StringEnv[constants.EnvKeyEnv] == "" {
|
||||||
envData[constants.EnvKeyEnv] = os.Getenv("ENV")
|
envData.StringEnv[constants.EnvKeyEnv] = os.Getenv("ENV")
|
||||||
if envData[constants.EnvKeyEnv] == "" {
|
if envData.StringEnv[constants.EnvKeyEnv] == "" {
|
||||||
envData[constants.EnvKeyEnv] = "production"
|
envData.StringEnv[constants.EnvKeyEnv] = "production"
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyEnv] == "production" {
|
if envData.StringEnv[constants.EnvKeyEnv] == "production" {
|
||||||
envData[constants.EnvKeyIsProd] = true
|
envData.BoolEnv[constants.EnvKeyIsProd] = true
|
||||||
os.Setenv("GIN_MODE", "release")
|
os.Setenv("GIN_MODE", "release")
|
||||||
} else {
|
} else {
|
||||||
envData[constants.EnvKeyIsProd] = false
|
envData.BoolEnv[constants.EnvKeyIsProd] = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set authorizer url to empty string so that fresh url is obtained with every server start
|
// set authorizer url to empty string so that fresh url is obtained with every server start
|
||||||
envData[constants.EnvKeyAuthorizerURL] = ""
|
envData.StringEnv[constants.EnvKeyAuthorizerURL] = ""
|
||||||
if envData[constants.EnvKeyAppURL] == nil || envData[constants.EnvKeyAppURL] == "" {
|
if envData.StringEnv[constants.EnvKeyAppURL] == "" {
|
||||||
envData[constants.EnvKeyAppURL] = os.Getenv(constants.EnvKeyAppURL)
|
envData.StringEnv[constants.EnvKeyAppURL] = os.Getenv(constants.EnvKeyAppURL)
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyEnvPath] == nil || envData[constants.EnvKeyEnvPath].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyEnvPath] == "" {
|
||||||
envData[constants.EnvKeyEnvPath] = `.env`
|
envData.StringEnv[constants.EnvKeyEnvPath] = `.env`
|
||||||
}
|
}
|
||||||
|
|
||||||
if ARG_ENV_FILE != nil && *ARG_ENV_FILE != "" {
|
if ARG_ENV_FILE != nil && *ARG_ENV_FILE != "" {
|
||||||
envData[constants.EnvKeyEnvPath] = *ARG_ENV_FILE
|
envData.StringEnv[constants.EnvKeyEnvPath] = *ARG_ENV_FILE
|
||||||
}
|
}
|
||||||
|
|
||||||
err := godotenv.Load(envData[constants.EnvKeyEnvPath].(string))
|
err := godotenv.Load(envData.StringEnv[constants.EnvKeyEnvPath])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error loading %s file", envData[constants.EnvKeyEnvPath])
|
log.Printf("error loading %s file", envData.StringEnv[constants.EnvKeyEnvPath])
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyPort] == nil || envData[constants.EnvKeyPort].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyPort] == "" {
|
||||||
envData[constants.EnvKeyPort] = os.Getenv("PORT")
|
envData.StringEnv[constants.EnvKeyPort] = os.Getenv("PORT")
|
||||||
if envData[constants.EnvKeyPort].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyPort] == "" {
|
||||||
envData[constants.EnvKeyPort] = "8080"
|
envData.StringEnv[constants.EnvKeyPort] = "8080"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyAdminSecret] == nil || envData[constants.EnvKeyAdminSecret].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyAdminSecret] == "" {
|
||||||
envData[constants.EnvKeyAdminSecret] = os.Getenv("ADMIN_SECRET")
|
envData.StringEnv[constants.EnvKeyAdminSecret] = os.Getenv("ADMIN_SECRET")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyDatabaseType] == nil || envData[constants.EnvKeyDatabaseType].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyDatabaseType] == "" {
|
||||||
envData[constants.EnvKeyDatabaseType] = os.Getenv("DATABASE_TYPE")
|
envData.StringEnv[constants.EnvKeyDatabaseType] = os.Getenv("DATABASE_TYPE")
|
||||||
log.Println(envData[constants.EnvKeyDatabaseType].(string))
|
|
||||||
|
|
||||||
if ARG_DB_TYPE != nil && *ARG_DB_TYPE != "" {
|
if ARG_DB_TYPE != nil && *ARG_DB_TYPE != "" {
|
||||||
envData[constants.EnvKeyDatabaseType] = *ARG_DB_TYPE
|
envData.StringEnv[constants.EnvKeyDatabaseType] = *ARG_DB_TYPE
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyDatabaseType].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyDatabaseType] == "" {
|
||||||
panic("DATABASE_TYPE is required")
|
panic("DATABASE_TYPE is required")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyDatabaseURL] == nil || envData[constants.EnvKeyDatabaseURL].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyDatabaseURL] == "" {
|
||||||
envData[constants.EnvKeyDatabaseURL] = os.Getenv("DATABASE_URL")
|
envData.StringEnv[constants.EnvKeyDatabaseURL] = os.Getenv("DATABASE_URL")
|
||||||
|
|
||||||
if ARG_DB_URL != nil && *ARG_DB_URL != "" {
|
if ARG_DB_URL != nil && *ARG_DB_URL != "" {
|
||||||
envData[constants.EnvKeyDatabaseURL] = *ARG_DB_URL
|
envData.StringEnv[constants.EnvKeyDatabaseURL] = *ARG_DB_URL
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyDatabaseURL] == "" {
|
if envData.StringEnv[constants.EnvKeyDatabaseURL] == "" {
|
||||||
panic("DATABASE_URL is required")
|
panic("DATABASE_URL is required")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyDatabaseName] == nil || envData[constants.EnvKeyDatabaseName].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyDatabaseName] == "" {
|
||||||
envData[constants.EnvKeyDatabaseName] = os.Getenv("DATABASE_NAME")
|
envData.StringEnv[constants.EnvKeyDatabaseName] = os.Getenv("DATABASE_NAME")
|
||||||
if envData[constants.EnvKeyDatabaseName].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyDatabaseName] == "" {
|
||||||
envData[constants.EnvKeyDatabaseName] = "authorizer"
|
envData.StringEnv[constants.EnvKeyDatabaseName] = "authorizer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeySmtpHost] == nil || envData[constants.EnvKeySmtpHost].(string) == "" {
|
if envData.StringEnv[constants.EnvKeySmtpHost] == "" {
|
||||||
envData[constants.EnvKeySmtpHost] = os.Getenv("SMTP_HOST")
|
envData.StringEnv[constants.EnvKeySmtpHost] = os.Getenv("SMTP_HOST")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeySmtpPort] == nil || envData[constants.EnvKeySmtpPort].(string) == "" {
|
if envData.StringEnv[constants.EnvKeySmtpPort] == "" {
|
||||||
envData[constants.EnvKeySmtpPort] = os.Getenv("SMTP_PORT")
|
envData.StringEnv[constants.EnvKeySmtpPort] = os.Getenv("SMTP_PORT")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeySmtpUsername] == nil || envData[constants.EnvKeySmtpUsername].(string) == "" {
|
if envData.StringEnv[constants.EnvKeySmtpUsername] == "" {
|
||||||
envData[constants.EnvKeySmtpUsername] = os.Getenv("SMTP_USERNAME")
|
envData.StringEnv[constants.EnvKeySmtpUsername] = os.Getenv("SMTP_USERNAME")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeySmtpPassword] == nil || envData[constants.EnvKeySmtpPassword].(string) == "" {
|
if envData.StringEnv[constants.EnvKeySmtpPassword] == "" {
|
||||||
envData[constants.EnvKeySmtpPassword] = os.Getenv("SMTP_PASSWORD")
|
envData.StringEnv[constants.EnvKeySmtpPassword] = os.Getenv("SMTP_PASSWORD")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeySenderEmail] == nil || envData[constants.EnvKeySenderEmail].(string) == "" {
|
if envData.StringEnv[constants.EnvKeySenderEmail] == "" {
|
||||||
envData[constants.EnvKeySenderEmail] = os.Getenv("SENDER_EMAIL")
|
envData.StringEnv[constants.EnvKeySenderEmail] = os.Getenv("SENDER_EMAIL")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyJwtSecret] == nil || envData[constants.EnvKeyJwtSecret].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyJwtSecret] == "" {
|
||||||
envData[constants.EnvKeyJwtSecret] = os.Getenv("JWT_SECRET")
|
envData.StringEnv[constants.EnvKeyJwtSecret] = os.Getenv("JWT_SECRET")
|
||||||
if envData[constants.EnvKeyJwtSecret].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyJwtSecret] == "" {
|
||||||
envData[constants.EnvKeyJwtSecret] = uuid.New().String()
|
envData.StringEnv[constants.EnvKeyJwtSecret] = uuid.New().String()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyJwtType] == nil || envData[constants.EnvKeyJwtType].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyJwtType] == "" {
|
||||||
envData[constants.EnvKeyJwtType] = os.Getenv("JWT_TYPE")
|
envData.StringEnv[constants.EnvKeyJwtType] = os.Getenv("JWT_TYPE")
|
||||||
if envData[constants.EnvKeyJwtType].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyJwtType] == "" {
|
||||||
envData[constants.EnvKeyJwtType] = "HS256"
|
envData.StringEnv[constants.EnvKeyJwtType] = "HS256"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyJwtRoleClaim] == nil || envData[constants.EnvKeyJwtRoleClaim].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyJwtRoleClaim] == "" {
|
||||||
envData[constants.EnvKeyJwtRoleClaim] = os.Getenv("JWT_ROLE_CLAIM")
|
envData.StringEnv[constants.EnvKeyJwtRoleClaim] = os.Getenv("JWT_ROLE_CLAIM")
|
||||||
|
|
||||||
if envData[constants.EnvKeyJwtRoleClaim].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyJwtRoleClaim] == "" {
|
||||||
envData[constants.EnvKeyJwtRoleClaim] = "role"
|
envData.StringEnv[constants.EnvKeyJwtRoleClaim] = "role"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyRedisURL] == nil || envData[constants.EnvKeyRedisURL].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyRedisURL] == "" {
|
||||||
envData[constants.EnvKeyRedisURL] = os.Getenv("REDIS_URL")
|
envData.StringEnv[constants.EnvKeyRedisURL] = os.Getenv("REDIS_URL")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyCookieName] == nil || envData[constants.EnvKeyCookieName].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyCookieName] == "" {
|
||||||
envData[constants.EnvKeyCookieName] = os.Getenv("COOKIE_NAME")
|
envData.StringEnv[constants.EnvKeyCookieName] = os.Getenv("COOKIE_NAME")
|
||||||
if envData[constants.EnvKeyCookieName].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyCookieName] == "" {
|
||||||
envData[constants.EnvKeyCookieName] = "authorizer"
|
envData.StringEnv[constants.EnvKeyCookieName] = "authorizer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyGoogleClientID] == nil || envData[constants.EnvKeyGoogleClientID].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyGoogleClientID] == "" {
|
||||||
envData[constants.EnvKeyGoogleClientID] = os.Getenv("GOOGLE_CLIENT_ID")
|
envData.StringEnv[constants.EnvKeyGoogleClientID] = os.Getenv("GOOGLE_CLIENT_ID")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyGoogleClientSecret] == nil || envData[constants.EnvKeyGoogleClientSecret].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyGoogleClientSecret] == "" {
|
||||||
envData[constants.EnvKeyGoogleClientSecret] = os.Getenv("GOOGLE_CLIENT_SECRET")
|
envData.StringEnv[constants.EnvKeyGoogleClientSecret] = os.Getenv("GOOGLE_CLIENT_SECRET")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyGithubClientID] == nil || envData[constants.EnvKeyGithubClientID].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyGithubClientID] == "" {
|
||||||
envData[constants.EnvKeyGithubClientID] = os.Getenv("GITHUB_CLIENT_ID")
|
envData.StringEnv[constants.EnvKeyGithubClientID] = os.Getenv("GITHUB_CLIENT_ID")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyGithubClientSecret] == nil || envData[constants.EnvKeyGithubClientSecret].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyGithubClientSecret] == "" {
|
||||||
envData[constants.EnvKeyGithubClientSecret] = os.Getenv("GITHUB_CLIENT_SECRET")
|
envData.StringEnv[constants.EnvKeyGithubClientSecret] = os.Getenv("GITHUB_CLIENT_SECRET")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyFacebookClientID] == nil || envData[constants.EnvKeyFacebookClientID].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyFacebookClientID] == "" {
|
||||||
envData[constants.EnvKeyFacebookClientID] = os.Getenv("FACEBOOK_CLIENT_ID")
|
envData.StringEnv[constants.EnvKeyFacebookClientID] = os.Getenv("FACEBOOK_CLIENT_ID")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyFacebookClientSecret] == nil || envData[constants.EnvKeyFacebookClientSecret].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyFacebookClientSecret] == "" {
|
||||||
envData[constants.EnvKeyFacebookClientSecret] = os.Getenv("FACEBOOK_CLIENT_SECRET")
|
envData.StringEnv[constants.EnvKeyFacebookClientSecret] = os.Getenv("FACEBOOK_CLIENT_SECRET")
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyResetPasswordURL] == nil || envData[constants.EnvKeyResetPasswordURL].(string) == "" {
|
if envData.StringEnv[constants.EnvKeyResetPasswordURL] == "" {
|
||||||
envData[constants.EnvKeyResetPasswordURL] = strings.TrimPrefix(os.Getenv("RESET_PASSWORD_URL"), "/")
|
envData.StringEnv[constants.EnvKeyResetPasswordURL] = strings.TrimPrefix(os.Getenv("RESET_PASSWORD_URL"), "/")
|
||||||
}
|
}
|
||||||
|
|
||||||
envData[constants.EnvKeyDisableBasicAuthentication] = os.Getenv("DISABLE_BASIC_AUTHENTICATION") == "true"
|
envData.BoolEnv[constants.EnvKeyDisableBasicAuthentication] = os.Getenv("DISABLE_BASIC_AUTHENTICATION") == "true"
|
||||||
envData[constants.EnvKeyDisableEmailVerification] = os.Getenv("DISABLE_EMAIL_VERIFICATION") == "true"
|
envData.BoolEnv[constants.EnvKeyDisableEmailVerification] = os.Getenv("DISABLE_EMAIL_VERIFICATION") == "true"
|
||||||
envData[constants.EnvKeyDisableMagicLinkLogin] = os.Getenv("DISABLE_MAGIC_LINK_LOGIN") == "true"
|
envData.BoolEnv[constants.EnvKeyDisableMagicLinkLogin] = os.Getenv("DISABLE_MAGIC_LINK_LOGIN") == "true"
|
||||||
envData[constants.EnvKeyDisableLoginPage] = os.Getenv("DISABLE_LOGIN_PAGE") == "true"
|
envData.BoolEnv[constants.EnvKeyDisableLoginPage] = os.Getenv("DISABLE_LOGIN_PAGE") == "true"
|
||||||
|
|
||||||
// no need to add nil check as its already done above
|
// no need to add nil check as its already done above
|
||||||
if envData[constants.EnvKeySmtpHost].(string) == "" || envData[constants.EnvKeySmtpUsername].(string) == "" || envData[constants.EnvKeySmtpPassword].(string) == "" || envData[constants.EnvKeySenderEmail].(string) == "" {
|
if envData.StringEnv[constants.EnvKeySmtpHost] == "" || envData.StringEnv[constants.EnvKeySmtpUsername] == "" || envData.StringEnv[constants.EnvKeySmtpPassword] == "" || envData.StringEnv[constants.EnvKeySenderEmail] == "" && envData.StringEnv[constants.EnvKeySmtpPort] == "" {
|
||||||
envData[constants.EnvKeyDisableEmailVerification] = true
|
envData.BoolEnv[constants.EnvKeyDisableEmailVerification] = true
|
||||||
envData[constants.EnvKeyDisableMagicLinkLogin] = true
|
envData.BoolEnv[constants.EnvKeyDisableMagicLinkLogin] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if envData[constants.EnvKeyDisableEmailVerification].(bool) {
|
if envData.BoolEnv[constants.EnvKeyDisableEmailVerification] {
|
||||||
envData[constants.EnvKeyDisableMagicLinkLogin] = true
|
envData.BoolEnv[constants.EnvKeyDisableMagicLinkLogin] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
allowedOriginsSplit := strings.Split(os.Getenv("ALLOWED_ORIGINS"), ",")
|
allowedOriginsSplit := strings.Split(os.Getenv("ALLOWED_ORIGINS"), ",")
|
||||||
|
@ -225,7 +224,7 @@ func InitEnv() {
|
||||||
allowedOrigins = []string{"*"}
|
allowedOrigins = []string{"*"}
|
||||||
}
|
}
|
||||||
|
|
||||||
envData[constants.EnvKeyAllowedOrigins] = allowedOrigins
|
envData.SliceEnv[constants.EnvKeyAllowedOrigins] = allowedOrigins
|
||||||
|
|
||||||
rolesEnv := strings.TrimSpace(os.Getenv("ROLES"))
|
rolesEnv := strings.TrimSpace(os.Getenv("ROLES"))
|
||||||
rolesSplit := strings.Split(rolesEnv, ",")
|
rolesSplit := strings.Split(rolesEnv, ",")
|
||||||
|
@ -268,16 +267,16 @@ func InitEnv() {
|
||||||
panic(`Invalid DEFAULT_ROLE environment variable. It can be one from give ROLES environment variable value`)
|
panic(`Invalid DEFAULT_ROLE environment variable. It can be one from give ROLES environment variable value`)
|
||||||
}
|
}
|
||||||
|
|
||||||
envData[constants.EnvKeyRoles] = roles
|
envData.SliceEnv[constants.EnvKeyRoles] = roles
|
||||||
envData[constants.EnvKeyDefaultRoles] = defaultRoles
|
envData.SliceEnv[constants.EnvKeyDefaultRoles] = defaultRoles
|
||||||
envData[constants.EnvKeyProtectedRoles] = protectedRoles
|
envData.SliceEnv[constants.EnvKeyProtectedRoles] = protectedRoles
|
||||||
|
|
||||||
if os.Getenv("ORGANIZATION_NAME") != "" {
|
if os.Getenv("ORGANIZATION_NAME") != "" {
|
||||||
envData[constants.EnvKeyOrganizationName] = os.Getenv("ORGANIZATION_NAME")
|
envData.StringEnv[constants.EnvKeyOrganizationName] = os.Getenv("ORGANIZATION_NAME")
|
||||||
}
|
}
|
||||||
|
|
||||||
if os.Getenv("ORGANIZATION_LOGO") != "" {
|
if os.Getenv("ORGANIZATION_LOGO") != "" {
|
||||||
envData[constants.EnvKeyOrganizationLogo] = os.Getenv("ORGANIZATION_LOGO")
|
envData.StringEnv[constants.EnvKeyOrganizationLogo] = os.Getenv("ORGANIZATION_LOGO")
|
||||||
}
|
}
|
||||||
|
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvStore(envData)
|
envstore.EnvInMemoryStoreObj.UpdateEnvStore(envData)
|
||||||
|
|
105
server/env/persist_env.go
vendored
105
server/env/persist_env.go
vendored
|
@ -4,7 +4,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/authorizerdev/authorizer/server/constants"
|
"github.com/authorizerdev/authorizer/server/constants"
|
||||||
|
@ -16,12 +16,12 @@ import (
|
||||||
|
|
||||||
// PersistEnv persists the environment variables to the database
|
// PersistEnv persists the environment variables to the database
|
||||||
func PersistEnv() error {
|
func PersistEnv() error {
|
||||||
config, err := db.Mgr.GetConfig()
|
env, err := db.Mgr.GetEnv()
|
||||||
// config not found in db
|
// config not found in db
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// AES encryption needs 32 bit key only, so we chop off last 4 characters from 36 bit uuid
|
// AES encryption needs 32 bit key only, so we chop off last 4 characters from 36 bit uuid
|
||||||
hash := uuid.New().String()[:36-4]
|
hash := uuid.New().String()[:36-4]
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyEncryptionKey, hash)
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyEncryptionKey, hash)
|
||||||
encodedHash := utils.EncryptB64(hash)
|
encodedHash := utils.EncryptB64(hash)
|
||||||
|
|
||||||
configData, err := json.Marshal(envstore.EnvInMemoryStoreObj.GetEnvStoreClone())
|
configData, err := json.Marshal(envstore.EnvInMemoryStoreObj.GetEnvStoreClone())
|
||||||
|
@ -34,31 +34,31 @@ func PersistEnv() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
config = db.Config{
|
env = db.Env{
|
||||||
Hash: encodedHash,
|
Hash: encodedHash,
|
||||||
Config: encryptedConfig,
|
EnvData: encryptedConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
db.Mgr.AddConfig(config)
|
db.Mgr.AddEnv(env)
|
||||||
} else {
|
} else {
|
||||||
// decrypt the config data from db
|
// decrypt the config data from db
|
||||||
// decryption can be done using the hash stored in db
|
// decryption can be done using the hash stored in db
|
||||||
encryptionKey := config.Hash
|
encryptionKey := env.Hash
|
||||||
decryptedEncryptionKey, err := utils.DecryptB64(encryptionKey)
|
decryptedEncryptionKey, err := utils.DecryptB64(encryptionKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyEncryptionKey, decryptedEncryptionKey)
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyEncryptionKey, decryptedEncryptionKey)
|
||||||
decryptedConfigs, err := utils.DecryptAES(config.Config)
|
decryptedConfigs, err := utils.DecryptAES(env.EnvData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// temp json to validate with env
|
// temp store variable
|
||||||
var jsonData map[string]interface{}
|
var storeData envstore.Store
|
||||||
|
|
||||||
err = json.Unmarshal(decryptedConfigs, &jsonData)
|
err = json.Unmarshal(decryptedConfigs, &storeData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -68,69 +68,70 @@ func PersistEnv() error {
|
||||||
|
|
||||||
hasChanged := false
|
hasChanged := false
|
||||||
|
|
||||||
for key, value := range jsonData {
|
for key, value := range storeData.StringEnv {
|
||||||
fieldType := reflect.TypeOf(value).String()
|
if key != constants.EnvKeyEncryptionKey {
|
||||||
|
// check only for derivative keys
|
||||||
|
// No need to check for ENCRYPTION_KEY which special key we use for encrypting config data
|
||||||
|
// as we have removed it from json
|
||||||
|
envValue := strings.TrimSpace(os.Getenv(key))
|
||||||
|
|
||||||
// check only for derivative keys
|
// env is not empty
|
||||||
// No need to check for ENCRYPTION_KEY which special key we use for encrypting config data
|
if envValue != "" {
|
||||||
// as we have removed it from json
|
if value != envValue {
|
||||||
|
storeData.StringEnv[key] = envValue
|
||||||
|
hasChanged = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range storeData.BoolEnv {
|
||||||
envValue := strings.TrimSpace(os.Getenv(key))
|
envValue := strings.TrimSpace(os.Getenv(key))
|
||||||
|
|
||||||
// env is not empty
|
// env is not empty
|
||||||
if envValue != "" {
|
if envValue != "" {
|
||||||
// check the type
|
envValueBool, _ := strconv.ParseBool(envValue)
|
||||||
// currently we have 3 types of env vars: string, bool, []string{}
|
if value != envValueBool {
|
||||||
if fieldType == "string" {
|
storeData.BoolEnv[key] = envValueBool
|
||||||
if value != envValue {
|
hasChanged = true
|
||||||
jsonData[key] = envValue
|
|
||||||
hasChanged = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if fieldType == "bool" {
|
for key, value := range storeData.SliceEnv {
|
||||||
newValue := envValue == "true"
|
envValue := strings.TrimSpace(os.Getenv(key))
|
||||||
if value != newValue {
|
// env is not empty
|
||||||
jsonData[key] = newValue
|
if envValue != "" {
|
||||||
hasChanged = true
|
envStringArr := strings.Split(envValue, ",")
|
||||||
}
|
if !utils.IsStringArrayEqual(value, envStringArr) {
|
||||||
}
|
storeData.SliceEnv[key] = envStringArr
|
||||||
|
hasChanged = true
|
||||||
if fieldType == "[]interface {}" {
|
|
||||||
stringArr := []string{}
|
|
||||||
envStringArr := strings.Split(envValue, ",")
|
|
||||||
for _, v := range value.([]interface{}) {
|
|
||||||
stringArr = append(stringArr, v.(string))
|
|
||||||
}
|
|
||||||
if !utils.IsStringArrayEqual(stringArr, envStringArr) {
|
|
||||||
jsonData[key] = envStringArr
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle derivative cases like disabling email verification & magic login
|
// handle derivative cases like disabling email verification & magic login
|
||||||
// in case SMTP is off but env is set to true
|
// in case SMTP is off but env is set to true
|
||||||
if jsonData["SMTP_HOST"] == "" || jsonData["SENDER_EMAIL"] == "" || jsonData["SENDER_PASSWORD"] == "" {
|
if storeData.StringEnv[constants.EnvKeySmtpHost] == "" || storeData.StringEnv[constants.EnvKeySmtpUsername] == "" || storeData.StringEnv[constants.EnvKeySmtpPassword] == "" || storeData.StringEnv[constants.EnvKeySenderEmail] == "" && storeData.StringEnv[constants.EnvKeySmtpPort] == "" {
|
||||||
if !jsonData["DISABLE_EMAIL_VERIFICATION"].(bool) {
|
if !storeData.BoolEnv[constants.EnvKeyDisableEmailVerification] {
|
||||||
jsonData["DISABLE_EMAIL_VERIFICATION"] = true
|
storeData.BoolEnv[constants.EnvKeyDisableEmailVerification] = true
|
||||||
hasChanged = true
|
hasChanged = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if !jsonData["DISABLE_MAGIC_LINK_LOGIN"].(bool) {
|
if !storeData.BoolEnv[constants.EnvKeyDisableMagicLinkLogin] {
|
||||||
jsonData["DISABLE_MAGIC_LINK_LOGIN"] = true
|
storeData.BoolEnv[constants.EnvKeyDisableMagicLinkLogin] = true
|
||||||
hasChanged = true
|
hasChanged = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvStore(jsonData)
|
envstore.EnvInMemoryStoreObj.UpdateEnvStore(storeData)
|
||||||
if hasChanged {
|
if hasChanged {
|
||||||
encryptedConfig, err := utils.EncryptEnvData(jsonData)
|
encryptedConfig, err := utils.EncryptEnvData(storeData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
config.Config = encryptedConfig
|
env.EnvData = encryptedConfig
|
||||||
_, err = db.Mgr.UpdateConfig(config)
|
_, err = db.Mgr.UpdateEnv(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("error updating config:", err)
|
log.Println("error updating config:", err)
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -6,60 +6,97 @@ import (
|
||||||
"github.com/authorizerdev/authorizer/server/constants"
|
"github.com/authorizerdev/authorizer/server/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Store data structure
|
||||||
|
type Store struct {
|
||||||
|
StringEnv map[string]string `json:"string_env"`
|
||||||
|
BoolEnv map[string]bool `json:"bool_env"`
|
||||||
|
SliceEnv map[string][]string `json:"slice_env"`
|
||||||
|
}
|
||||||
|
|
||||||
// EnvInMemoryStore struct
|
// EnvInMemoryStore struct
|
||||||
type EnvInMemoryStore struct {
|
type EnvInMemoryStore struct {
|
||||||
mutex sync.Mutex
|
mutex sync.Mutex
|
||||||
store map[string]interface{}
|
store *Store
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnvInMemoryStoreObj global variable for EnvInMemoryStore
|
// EnvInMemoryStoreObj global variable for EnvInMemoryStore
|
||||||
var EnvInMemoryStoreObj = &EnvInMemoryStore{
|
var EnvInMemoryStoreObj = &EnvInMemoryStore{
|
||||||
store: map[string]interface{}{
|
store: &Store{
|
||||||
constants.EnvKeyAdminCookieName: "authorizer-admin",
|
StringEnv: map[string]string{
|
||||||
constants.EnvKeyJwtRoleClaim: "role",
|
constants.EnvKeyAdminCookieName: "authorizer-admin",
|
||||||
constants.EnvKeyOrganizationName: "Authorizer",
|
constants.EnvKeyJwtRoleClaim: "role",
|
||||||
constants.EnvKeyOrganizationLogo: "https://www.authorizer.io/images/logo.png",
|
constants.EnvKeyOrganizationName: "Authorizer",
|
||||||
constants.EnvKeyDisableBasicAuthentication: false,
|
constants.EnvKeyOrganizationLogo: "https://www.authorizer.io/images/logo.png",
|
||||||
constants.EnvKeyDisableMagicLinkLogin: false,
|
},
|
||||||
constants.EnvKeyDisableEmailVerification: false,
|
BoolEnv: map[string]bool{
|
||||||
constants.EnvKeyDisableLoginPage: false,
|
constants.EnvKeyDisableBasicAuthentication: false,
|
||||||
|
constants.EnvKeyDisableMagicLinkLogin: false,
|
||||||
|
constants.EnvKeyDisableEmailVerification: false,
|
||||||
|
constants.EnvKeyDisableLoginPage: false,
|
||||||
|
},
|
||||||
|
SliceEnv: map[string][]string{},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateEnvStore to update the whole env store object
|
// UpdateEnvStore to update the whole env store object
|
||||||
func (e *EnvInMemoryStore) UpdateEnvStore(data map[string]interface{}) {
|
func (e *EnvInMemoryStore) UpdateEnvStore(store Store) {
|
||||||
e.mutex.Lock()
|
e.mutex.Lock()
|
||||||
defer e.mutex.Unlock()
|
defer e.mutex.Unlock()
|
||||||
// just override the keys + new keys
|
// just override the keys + new keys
|
||||||
for key, value := range data {
|
|
||||||
e.store[key] = value
|
for key, value := range store.StringEnv {
|
||||||
|
e.store.StringEnv[key] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range store.BoolEnv {
|
||||||
|
e.store.BoolEnv[key] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range store.SliceEnv {
|
||||||
|
e.store.SliceEnv[key] = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateEnvVariable to update the particular env variable
|
// UpdateEnvVariable to update the particular env variable
|
||||||
func (e *EnvInMemoryStore) UpdateEnvVariable(key string, value interface{}) map[string]interface{} {
|
func (e *EnvInMemoryStore) UpdateEnvVariable(storeIdentifier, key string, value interface{}) {
|
||||||
e.mutex.Lock()
|
e.mutex.Lock()
|
||||||
defer e.mutex.Unlock()
|
defer e.mutex.Unlock()
|
||||||
e.store[key] = value
|
switch storeIdentifier {
|
||||||
return e.store
|
case constants.StringStoreIdentifier:
|
||||||
|
e.store.StringEnv[key] = value.(string)
|
||||||
|
case constants.BoolStoreIdentifier:
|
||||||
|
e.store.BoolEnv[key] = value.(bool)
|
||||||
|
case constants.SliceStoreIdentifier:
|
||||||
|
e.store.SliceEnv[key] = value.([]string)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetEnvStore to get the env variable from env store object
|
// GetStringStoreEnvVariable to get the env variable from string store object
|
||||||
func (e *EnvInMemoryStore) GetEnvVariable(key string) interface{} {
|
func (e *EnvInMemoryStore) GetStringStoreEnvVariable(key string) string {
|
||||||
// e.mutex.Lock()
|
// e.mutex.Lock()
|
||||||
// defer e.mutex.Unlock()
|
// defer e.mutex.Unlock()
|
||||||
return e.store[key]
|
return e.store.StringEnv[key]
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetBoolStoreEnvVariable to get the env variable from bool store object
|
||||||
|
func (e *EnvInMemoryStore) GetBoolStoreEnvVariable(key string) bool {
|
||||||
|
// e.mutex.Lock()
|
||||||
|
// defer e.mutex.Unlock()
|
||||||
|
return e.store.BoolEnv[key]
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSliceStoreEnvVariable to get the env variable from slice store object
|
||||||
|
func (e *EnvInMemoryStore) GetSliceStoreEnvVariable(key string) []string {
|
||||||
|
// e.mutex.Lock()
|
||||||
|
// defer e.mutex.Unlock()
|
||||||
|
return e.store.SliceEnv[key]
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetEnvStoreClone to get clone of current env store object
|
// GetEnvStoreClone to get clone of current env store object
|
||||||
func (e *EnvInMemoryStore) GetEnvStoreClone() map[string]interface{} {
|
func (e *EnvInMemoryStore) GetEnvStoreClone() Store {
|
||||||
e.mutex.Lock()
|
e.mutex.Lock()
|
||||||
defer e.mutex.Unlock()
|
defer e.mutex.Unlock()
|
||||||
|
|
||||||
result := make(map[string]interface{})
|
result := *e.store
|
||||||
for key, value := range e.store {
|
|
||||||
result[key] = value
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ func AppHandler() gin.HandlerFunc {
|
||||||
var stateObj State
|
var stateObj State
|
||||||
|
|
||||||
if state == "" {
|
if state == "" {
|
||||||
stateObj.AuthorizerURL = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string)
|
stateObj.AuthorizerURL = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL)
|
||||||
stateObj.RedirectURL = stateObj.AuthorizerURL + "/app"
|
stateObj.RedirectURL = stateObj.AuthorizerURL + "/app"
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -57,7 +57,7 @@ func AppHandler() gin.HandlerFunc {
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate host and domain of authorizer url
|
// validate host and domain of authorizer url
|
||||||
if strings.TrimSuffix(stateObj.AuthorizerURL, "/") != envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string) {
|
if strings.TrimSuffix(stateObj.AuthorizerURL, "/") != envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL) {
|
||||||
c.JSON(400, gin.H{"error": "invalid host url"})
|
c.JSON(400, gin.H{"error": "invalid host url"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -74,8 +74,8 @@ func AppHandler() gin.HandlerFunc {
|
||||||
"data": map[string]string{
|
"data": map[string]string{
|
||||||
"authorizerURL": stateObj.AuthorizerURL,
|
"authorizerURL": stateObj.AuthorizerURL,
|
||||||
"redirectURL": stateObj.RedirectURL,
|
"redirectURL": stateObj.RedirectURL,
|
||||||
"organizationName": envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyOrganizationName).(string),
|
"organizationName": envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyOrganizationName),
|
||||||
"organizationLogo": envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyOrganizationLogo).(string),
|
"organizationLogo": envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyOrganizationLogo),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ func DashboardHandler() gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
isOnboardingCompleted := false
|
isOnboardingCompleted := false
|
||||||
|
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret) != nil && envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string) != "" {
|
if envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret) != "" {
|
||||||
isOnboardingCompleted = true
|
isOnboardingCompleted = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ func OAuthCallbackHandler() gin.HandlerFunc {
|
||||||
// make sure inputRoles don't include protected roles
|
// make sure inputRoles don't include protected roles
|
||||||
hasProtectedRole := false
|
hasProtectedRole := false
|
||||||
for _, ir := range inputRoles {
|
for _, ir := range inputRoles {
|
||||||
if utils.StringSliceContains(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyProtectedRoles).([]string), ir) {
|
if utils.StringSliceContains(envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyProtectedRoles), ir) {
|
||||||
hasProtectedRole = true
|
hasProtectedRole = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,7 @@ func OAuthCallbackHandler() gin.HandlerFunc {
|
||||||
// check if it contains protected unassigned role
|
// check if it contains protected unassigned role
|
||||||
hasProtectedRole := false
|
hasProtectedRole := false
|
||||||
for _, ur := range unasignedRoles {
|
for _, ur := range unasignedRoles {
|
||||||
if utils.StringSliceContains(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyProtectedRoles).([]string), ur) {
|
if utils.StringSliceContains(envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyProtectedRoles), ur) {
|
||||||
hasProtectedRole = true
|
hasProtectedRole = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,14 +33,14 @@ func OAuthLoginHandler() gin.HandlerFunc {
|
||||||
|
|
||||||
// use protected roles verification for admin login only.
|
// use protected roles verification for admin login only.
|
||||||
// though if not associated with user, it will be rejected from oauth_callback
|
// though if not associated with user, it will be rejected from oauth_callback
|
||||||
if !utils.IsValidRoles(append([]string{}, append(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyRoles).([]string), envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyProtectedRoles).([]string)...)...), rolesSplit) {
|
if !utils.IsValidRoles(append([]string{}, append(envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyRoles), envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyProtectedRoles)...)...), rolesSplit) {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"error": "invalid role",
|
"error": "invalid role",
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
roles = strings.Join(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDefaultRoles).([]string), ",")
|
roles = strings.Join(envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles), ",")
|
||||||
}
|
}
|
||||||
|
|
||||||
uuid := uuid.New()
|
uuid := uuid.New()
|
||||||
|
@ -56,7 +56,7 @@ func OAuthLoginHandler() gin.HandlerFunc {
|
||||||
}
|
}
|
||||||
session.SetSocailLoginState(oauthStateString, constants.SignupMethodGoogle)
|
session.SetSocailLoginState(oauthStateString, constants.SignupMethodGoogle)
|
||||||
// during the init of OAuthProvider authorizer url might be empty
|
// during the init of OAuthProvider authorizer url might be empty
|
||||||
oauth.OAuthProviders.GoogleConfig.RedirectURL = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string) + "/oauth_callback/google"
|
oauth.OAuthProviders.GoogleConfig.RedirectURL = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL) + "/oauth_callback/google"
|
||||||
url := oauth.OAuthProviders.GoogleConfig.AuthCodeURL(oauthStateString)
|
url := oauth.OAuthProviders.GoogleConfig.AuthCodeURL(oauthStateString)
|
||||||
c.Redirect(http.StatusTemporaryRedirect, url)
|
c.Redirect(http.StatusTemporaryRedirect, url)
|
||||||
case constants.SignupMethodGithub:
|
case constants.SignupMethodGithub:
|
||||||
|
@ -65,7 +65,7 @@ func OAuthLoginHandler() gin.HandlerFunc {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
session.SetSocailLoginState(oauthStateString, constants.SignupMethodGithub)
|
session.SetSocailLoginState(oauthStateString, constants.SignupMethodGithub)
|
||||||
oauth.OAuthProviders.GithubConfig.RedirectURL = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string) + "/oauth_callback/github"
|
oauth.OAuthProviders.GithubConfig.RedirectURL = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL) + "/oauth_callback/github"
|
||||||
url := oauth.OAuthProviders.GithubConfig.AuthCodeURL(oauthStateString)
|
url := oauth.OAuthProviders.GithubConfig.AuthCodeURL(oauthStateString)
|
||||||
c.Redirect(http.StatusTemporaryRedirect, url)
|
c.Redirect(http.StatusTemporaryRedirect, url)
|
||||||
case constants.SignupMethodFacebook:
|
case constants.SignupMethodFacebook:
|
||||||
|
@ -74,7 +74,7 @@ func OAuthLoginHandler() gin.HandlerFunc {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
session.SetSocailLoginState(oauthStateString, constants.SignupMethodFacebook)
|
session.SetSocailLoginState(oauthStateString, constants.SignupMethodFacebook)
|
||||||
oauth.OAuthProviders.FacebookConfig.RedirectURL = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string) + "/oauth_callback/facebook"
|
oauth.OAuthProviders.FacebookConfig.RedirectURL = envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL) + "/oauth_callback/facebook"
|
||||||
url := oauth.OAuthProviders.FacebookConfig.AuthCodeURL(oauthStateString)
|
url := oauth.OAuthProviders.FacebookConfig.AuthCodeURL(oauthStateString)
|
||||||
c.Redirect(http.StatusTemporaryRedirect, url)
|
c.Redirect(http.StatusTemporaryRedirect, url)
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -20,7 +20,7 @@ func main() {
|
||||||
env.ARG_ENV_FILE = flag.String("env_file", "", "Env file path")
|
env.ARG_ENV_FILE = flag.String("env_file", "", "Env file path")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyVersion, VERSION)
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyVersion, VERSION)
|
||||||
|
|
||||||
env.InitEnv()
|
env.InitEnv()
|
||||||
db.InitDB()
|
db.InitDB()
|
||||||
|
@ -31,5 +31,5 @@ func main() {
|
||||||
|
|
||||||
router := routes.InitRouter()
|
router := routes.InitRouter()
|
||||||
|
|
||||||
router.Run(":" + envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyPort).(string))
|
router.Run(":" + envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyPort))
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,9 +12,9 @@ import (
|
||||||
// GinContextToContextMiddleware is a middleware to add gin context in context
|
// GinContextToContextMiddleware is a middleware to add gin context in context
|
||||||
func GinContextToContextMiddleware() gin.HandlerFunc {
|
func GinContextToContextMiddleware() gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string) == "" {
|
if envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL) == "" {
|
||||||
url := location.Get(c)
|
url := location.Get(c)
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyAuthorizerURL, url.Scheme+"://"+c.Request.Host)
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyAuthorizerURL, url.Scheme+"://"+c.Request.Host)
|
||||||
}
|
}
|
||||||
ctx := context.WithValue(c.Request.Context(), "GinContextKey", c)
|
ctx := context.WithValue(c.Request.Context(), "GinContextKey", c)
|
||||||
c.Request = c.Request.WithContext(ctx)
|
c.Request = c.Request.WithContext(ctx)
|
||||||
|
|
|
@ -34,33 +34,33 @@ var (
|
||||||
// InitOAuth initializes the OAuth providers based on EnvData
|
// InitOAuth initializes the OAuth providers based on EnvData
|
||||||
func InitOAuth() {
|
func InitOAuth() {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGoogleClientID).(string) != "" && envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGoogleClientSecret).(string) != "" {
|
if envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGoogleClientID) != "" && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGoogleClientSecret) != "" {
|
||||||
p, err := oidc.NewProvider(ctx, "https://accounts.google.com")
|
p, err := oidc.NewProvider(ctx, "https://accounts.google.com")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("error creating oidc provider for google:", err)
|
log.Fatalln("error creating oidc provider for google:", err)
|
||||||
}
|
}
|
||||||
OIDCProviders.GoogleOIDC = p
|
OIDCProviders.GoogleOIDC = p
|
||||||
OAuthProviders.GoogleConfig = &oauth2.Config{
|
OAuthProviders.GoogleConfig = &oauth2.Config{
|
||||||
ClientID: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGoogleClientID).(string),
|
ClientID: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGoogleClientID),
|
||||||
ClientSecret: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGoogleClientSecret).(string),
|
ClientSecret: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGoogleClientSecret),
|
||||||
RedirectURL: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string) + "/oauth_callback/google",
|
RedirectURL: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL) + "/oauth_callback/google",
|
||||||
Endpoint: OIDCProviders.GoogleOIDC.Endpoint(),
|
Endpoint: OIDCProviders.GoogleOIDC.Endpoint(),
|
||||||
Scopes: []string{oidc.ScopeOpenID, "profile", "email"},
|
Scopes: []string{oidc.ScopeOpenID, "profile", "email"},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGithubClientID).(string) != "" && envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGithubClientSecret).(string) != "" {
|
if envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGithubClientID) != "" && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGithubClientSecret) != "" {
|
||||||
OAuthProviders.GithubConfig = &oauth2.Config{
|
OAuthProviders.GithubConfig = &oauth2.Config{
|
||||||
ClientID: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGithubClientID).(string),
|
ClientID: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGithubClientID),
|
||||||
ClientSecret: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGithubClientSecret).(string),
|
ClientSecret: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGithubClientSecret),
|
||||||
RedirectURL: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string) + "/oauth_callback/github",
|
RedirectURL: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL) + "/oauth_callback/github",
|
||||||
Endpoint: githubOAuth2.Endpoint,
|
Endpoint: githubOAuth2.Endpoint,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyFacebookClientID).(string) != "" && envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGoogleClientID).(string) != "" {
|
if envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyFacebookClientID) != "" && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGoogleClientID) != "" {
|
||||||
OAuthProviders.FacebookConfig = &oauth2.Config{
|
OAuthProviders.FacebookConfig = &oauth2.Config{
|
||||||
ClientID: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyFacebookClientID).(string),
|
ClientID: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyFacebookClientID),
|
||||||
ClientSecret: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyFacebookClientSecret).(string),
|
ClientSecret: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyFacebookClientSecret),
|
||||||
RedirectURL: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string) + "/oauth_callback/facebook",
|
RedirectURL: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL) + "/oauth_callback/facebook",
|
||||||
Endpoint: facebookOAuth2.Endpoint,
|
Endpoint: facebookOAuth2.Endpoint,
|
||||||
Scopes: []string{"public_profile", "email"},
|
Scopes: []string{"public_profile", "email"},
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ func AdminLoginResolver(ctx context.Context, params model.AdminLoginInput) (*mod
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
adminSecret := envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string)
|
adminSecret := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret)
|
||||||
if params.AdminSecret != adminSecret {
|
if params.AdminSecret != adminSecret {
|
||||||
return res, fmt.Errorf(`invalid admin secret`)
|
return res, fmt.Errorf(`invalid admin secret`)
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ func AdminSessionResolver(ctx context.Context) (*model.Response, error) {
|
||||||
return res, fmt.Errorf("unauthorized")
|
return res, fmt.Errorf("unauthorized")
|
||||||
}
|
}
|
||||||
|
|
||||||
hashedKey, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
hashedKey, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/authorizerdev/authorizer/server/constants"
|
"github.com/authorizerdev/authorizer/server/constants"
|
||||||
|
@ -33,39 +32,38 @@ func AdminSignupResolver(ctx context.Context, params model.AdminSignupInput) (*m
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
adminSecret := envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string)
|
adminSecret := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret)
|
||||||
|
|
||||||
if adminSecret != "" {
|
if adminSecret != "" {
|
||||||
err = fmt.Errorf("admin sign up already completed")
|
err = fmt.Errorf("admin sign up already completed")
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyAdminSecret, params.AdminSecret)
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyAdminSecret, params.AdminSecret)
|
||||||
// consvert EnvData to JSON
|
// consvert EnvData to JSON
|
||||||
var jsonData map[string]interface{}
|
var storeData envstore.Store
|
||||||
|
|
||||||
jsonBytes, err := json.Marshal(envstore.EnvInMemoryStoreObj.GetEnvStoreClone())
|
jsonBytes, err := json.Marshal(envstore.EnvInMemoryStoreObj.GetEnvStoreClone())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := json.Unmarshal(jsonBytes, &jsonData); err != nil {
|
if err := json.Unmarshal(jsonBytes, &storeData); err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
config, err := db.Mgr.GetConfig()
|
env, err := db.Mgr.GetEnv()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
configData, err := utils.EncryptEnvData(jsonData)
|
envData, err := utils.EncryptEnvData(storeData)
|
||||||
log.Println("=> config data from signup:", configData)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
config.Config = configData
|
env.EnvData = envData
|
||||||
if _, err := db.Mgr.UpdateConfig(config); err != nil {
|
if _, err := db.Mgr.UpdateEnv(env); err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,39 +26,39 @@ func EnvResolver(ctx context.Context) (*model.Env, error) {
|
||||||
|
|
||||||
// get clone of store
|
// get clone of store
|
||||||
store := envstore.EnvInMemoryStoreObj.GetEnvStoreClone()
|
store := envstore.EnvInMemoryStoreObj.GetEnvStoreClone()
|
||||||
adminSecret := store[constants.EnvKeyAdminSecret].(string)
|
adminSecret := store.StringEnv[constants.EnvKeyAdminSecret]
|
||||||
databaseType := store[constants.EnvKeyDatabaseType].(string)
|
databaseType := store.StringEnv[constants.EnvKeyDatabaseType]
|
||||||
databaseURL := store[constants.EnvKeyDatabaseURL].(string)
|
databaseURL := store.StringEnv[constants.EnvKeyDatabaseURL]
|
||||||
databaseName := store[constants.EnvKeyDatabaseName].(string)
|
databaseName := store.StringEnv[constants.EnvKeyDatabaseName]
|
||||||
smtpHost := store[constants.EnvKeySmtpHost].(string)
|
smtpHost := store.StringEnv[constants.EnvKeySmtpHost]
|
||||||
smtpPort := store[constants.EnvKeySmtpPort].(string)
|
smtpPort := store.StringEnv[constants.EnvKeySmtpPort]
|
||||||
smtpUsername := store[constants.EnvKeySmtpUsername].(string)
|
smtpUsername := store.StringEnv[constants.EnvKeySmtpUsername]
|
||||||
smtpPassword := store[constants.EnvKeySmtpPassword].(string)
|
smtpPassword := store.StringEnv[constants.EnvKeySmtpPassword]
|
||||||
senderEmail := store[constants.EnvKeySenderEmail].(string)
|
senderEmail := store.StringEnv[constants.EnvKeySenderEmail]
|
||||||
jwtType := store[constants.EnvKeyJwtType].(string)
|
jwtType := store.StringEnv[constants.EnvKeyJwtType]
|
||||||
jwtSecret := store[constants.EnvKeyJwtSecret].(string)
|
jwtSecret := store.StringEnv[constants.EnvKeyJwtSecret]
|
||||||
jwtRoleClaim := store[constants.EnvKeyJwtRoleClaim].(string)
|
jwtRoleClaim := store.StringEnv[constants.EnvKeyJwtRoleClaim]
|
||||||
allowedOrigins := store[constants.EnvKeyAllowedOrigins].([]string)
|
allowedOrigins := store.SliceEnv[constants.EnvKeyAllowedOrigins]
|
||||||
authorizerURL := store[constants.EnvKeyAuthorizerURL].(string)
|
authorizerURL := store.StringEnv[constants.EnvKeyAuthorizerURL]
|
||||||
appURL := store[constants.EnvKeyAppURL].(string)
|
appURL := store.StringEnv[constants.EnvKeyAppURL]
|
||||||
redisURL := store[constants.EnvKeyRedisURL].(string)
|
redisURL := store.StringEnv[constants.EnvKeyRedisURL]
|
||||||
cookieName := store[constants.EnvKeyCookieName].(string)
|
cookieName := store.StringEnv[constants.EnvKeyCookieName]
|
||||||
resetPasswordURL := store[constants.EnvKeyResetPasswordURL].(string)
|
resetPasswordURL := store.StringEnv[constants.EnvKeyResetPasswordURL]
|
||||||
disableEmailVerification := store[constants.EnvKeyDisableEmailVerification].(bool)
|
disableEmailVerification := store.BoolEnv[constants.EnvKeyDisableEmailVerification]
|
||||||
disableBasicAuthentication := store[constants.EnvKeyDisableBasicAuthentication].(bool)
|
disableBasicAuthentication := store.BoolEnv[constants.EnvKeyDisableBasicAuthentication]
|
||||||
disableMagicLinkLogin := store[constants.EnvKeyDisableMagicLinkLogin].(bool)
|
disableMagicLinkLogin := store.BoolEnv[constants.EnvKeyDisableMagicLinkLogin]
|
||||||
disableLoginPage := store[constants.EnvKeyDisableLoginPage].(bool)
|
disableLoginPage := store.BoolEnv[constants.EnvKeyDisableLoginPage]
|
||||||
roles := store[constants.EnvKeyRoles].([]string)
|
roles := store.SliceEnv[constants.EnvKeyRoles]
|
||||||
defaultRoles := store[constants.EnvKeyDefaultRoles].([]string)
|
defaultRoles := store.SliceEnv[constants.EnvKeyDefaultRoles]
|
||||||
protectedRoles := store[constants.EnvKeyProtectedRoles].([]string)
|
protectedRoles := store.SliceEnv[constants.EnvKeyProtectedRoles]
|
||||||
googleClientID := store[constants.EnvKeyGoogleClientID].(string)
|
googleClientID := store.StringEnv[constants.EnvKeyGoogleClientID]
|
||||||
googleClientSecret := store[constants.EnvKeyGoogleClientSecret].(string)
|
googleClientSecret := store.StringEnv[constants.EnvKeyGoogleClientSecret]
|
||||||
facebookClientID := store[constants.EnvKeyFacebookClientID].(string)
|
facebookClientID := store.StringEnv[constants.EnvKeyFacebookClientID]
|
||||||
facebookClientSecret := store[constants.EnvKeyFacebookClientSecret].(string)
|
facebookClientSecret := store.StringEnv[constants.EnvKeyFacebookClientSecret]
|
||||||
githubClientID := store[constants.EnvKeyGithubClientID].(string)
|
githubClientID := store.StringEnv[constants.EnvKeyGithubClientID]
|
||||||
githubClientSecret := store[constants.EnvKeyGithubClientSecret].(string)
|
githubClientSecret := store.StringEnv[constants.EnvKeyGithubClientSecret]
|
||||||
organizationName := store[constants.EnvKeyOrganizationName].(string)
|
organizationName := store.StringEnv[constants.EnvKeyOrganizationName]
|
||||||
organizationLogo := store[constants.EnvKeyOrganizationLogo].(string)
|
organizationLogo := store.StringEnv[constants.EnvKeyOrganizationLogo]
|
||||||
|
|
||||||
res = &model.Env{
|
res = &model.Env{
|
||||||
AdminSecret: &adminSecret,
|
AdminSecret: &adminSecret,
|
||||||
|
|
|
@ -22,7 +22,7 @@ func ForgotPasswordResolver(ctx context.Context, params model.ForgotPasswordInpu
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableBasicAuthentication).(bool) {
|
if envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableBasicAuthentication) {
|
||||||
return res, fmt.Errorf(`basic authentication is disabled for this instance`)
|
return res, fmt.Errorf(`basic authentication is disabled for this instance`)
|
||||||
}
|
}
|
||||||
host := gc.Request.Host
|
host := gc.Request.Host
|
||||||
|
|
|
@ -23,7 +23,7 @@ func LoginResolver(ctx context.Context, params model.LoginInput) (*model.AuthRes
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableBasicAuthentication).(bool) {
|
if envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableBasicAuthentication) {
|
||||||
return res, fmt.Errorf(`basic authentication is disabled for this instance`)
|
return res, fmt.Errorf(`basic authentication is disabled for this instance`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ func LoginResolver(ctx context.Context, params model.LoginInput) (*model.AuthRes
|
||||||
log.Println("compare password error:", err)
|
log.Println("compare password error:", err)
|
||||||
return res, fmt.Errorf(`invalid password`)
|
return res, fmt.Errorf(`invalid password`)
|
||||||
}
|
}
|
||||||
roles := envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDefaultRoles).([]string)
|
roles := envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles)
|
||||||
currentRoles := strings.Split(user.Roles, ",")
|
currentRoles := strings.Split(user.Roles, ",")
|
||||||
if len(params.Roles) > 0 {
|
if len(params.Roles) > 0 {
|
||||||
if !utils.IsValidRoles(currentRoles, params.Roles) {
|
if !utils.IsValidRoles(currentRoles, params.Roles) {
|
||||||
|
|
|
@ -19,7 +19,7 @@ import (
|
||||||
func MagicLinkLoginResolver(ctx context.Context, params model.MagicLinkLoginInput) (*model.Response, error) {
|
func MagicLinkLoginResolver(ctx context.Context, params model.MagicLinkLoginInput) (*model.Response, error) {
|
||||||
var res *model.Response
|
var res *model.Response
|
||||||
|
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableMagicLinkLogin).(bool) {
|
if envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableMagicLinkLogin) {
|
||||||
return res, fmt.Errorf(`magic link login is disabled for this instance`)
|
return res, fmt.Errorf(`magic link login is disabled for this instance`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,13 +43,13 @@ func MagicLinkLoginResolver(ctx context.Context, params model.MagicLinkLoginInpu
|
||||||
// define roles for new user
|
// define roles for new user
|
||||||
if len(params.Roles) > 0 {
|
if len(params.Roles) > 0 {
|
||||||
// check if roles exists
|
// check if roles exists
|
||||||
if !utils.IsValidRoles(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyRoles).([]string), params.Roles) {
|
if !utils.IsValidRoles(envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyRoles), params.Roles) {
|
||||||
return res, fmt.Errorf(`invalid roles`)
|
return res, fmt.Errorf(`invalid roles`)
|
||||||
} else {
|
} else {
|
||||||
inputRoles = params.Roles
|
inputRoles = params.Roles
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
inputRoles = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDefaultRoles).([]string)
|
inputRoles = envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles)
|
||||||
}
|
}
|
||||||
|
|
||||||
user.Roles = strings.Join(inputRoles, ",")
|
user.Roles = strings.Join(inputRoles, ",")
|
||||||
|
@ -74,7 +74,7 @@ func MagicLinkLoginResolver(ctx context.Context, params model.MagicLinkLoginInpu
|
||||||
// check if it contains protected unassigned role
|
// check if it contains protected unassigned role
|
||||||
hasProtectedRole := false
|
hasProtectedRole := false
|
||||||
for _, ur := range unasignedRoles {
|
for _, ur := range unasignedRoles {
|
||||||
if utils.StringSliceContains(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyProtectedRoles).([]string), ur) {
|
if utils.StringSliceContains(envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyProtectedRoles), ur) {
|
||||||
hasProtectedRole = true
|
hasProtectedRole = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ func MagicLinkLoginResolver(ctx context.Context, params model.MagicLinkLoginInpu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableEmailVerification).(bool) {
|
if !envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableEmailVerification) {
|
||||||
// insert verification request
|
// insert verification request
|
||||||
verificationType := constants.VerificationTypeMagicLinkLogin
|
verificationType := constants.VerificationTypeMagicLinkLogin
|
||||||
token, err := utils.CreateVerificationToken(params.Email, verificationType)
|
token, err := utils.CreateVerificationToken(params.Email, verificationType)
|
||||||
|
|
|
@ -16,7 +16,7 @@ import (
|
||||||
// ResetPasswordResolver is a resolver for reset password mutation
|
// ResetPasswordResolver is a resolver for reset password mutation
|
||||||
func ResetPasswordResolver(ctx context.Context, params model.ResetPasswordInput) (*model.Response, error) {
|
func ResetPasswordResolver(ctx context.Context, params model.ResetPasswordInput) (*model.Response, error) {
|
||||||
var res *model.Response
|
var res *model.Response
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableBasicAuthentication).(bool) {
|
if envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableBasicAuthentication) {
|
||||||
return res, fmt.Errorf(`basic authentication is disabled for this instance`)
|
return res, fmt.Errorf(`basic authentication is disabled for this instance`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ func SessionResolver(ctx context.Context, roles []string) (*model.AuthResponse,
|
||||||
expiresTimeObj := time.Unix(expiresAt, 0)
|
expiresTimeObj := time.Unix(expiresAt, 0)
|
||||||
currentTimeObj := time.Now()
|
currentTimeObj := time.Now()
|
||||||
|
|
||||||
claimRoleInterface := claim[envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyJwtRoleClaim).(string)].([]interface{})
|
claimRoleInterface := claim[envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtRoleClaim)].([]interface{})
|
||||||
claimRoles := make([]string, len(claimRoleInterface))
|
claimRoles := make([]string, len(claimRoleInterface))
|
||||||
for i, v := range claimRoleInterface {
|
for i, v := range claimRoleInterface {
|
||||||
claimRoles[i] = v.(string)
|
claimRoles[i] = v.(string)
|
||||||
|
|
|
@ -18,14 +18,13 @@ import (
|
||||||
|
|
||||||
// SignupResolver is a resolver for signup mutation
|
// SignupResolver is a resolver for signup mutation
|
||||||
func SignupResolver(ctx context.Context, params model.SignUpInput) (*model.AuthResponse, error) {
|
func SignupResolver(ctx context.Context, params model.SignUpInput) (*model.AuthResponse, error) {
|
||||||
log.Println(envstore.EnvInMemoryStoreObj.GetEnvStoreClone())
|
|
||||||
gc, err := utils.GinContextFromContext(ctx)
|
gc, err := utils.GinContextFromContext(ctx)
|
||||||
var res *model.AuthResponse
|
var res *model.AuthResponse
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableBasicAuthentication).(bool) {
|
if envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableBasicAuthentication) {
|
||||||
return res, fmt.Errorf(`basic authentication is disabled for this instance`)
|
return res, fmt.Errorf(`basic authentication is disabled for this instance`)
|
||||||
}
|
}
|
||||||
if params.ConfirmPassword != params.Password {
|
if params.ConfirmPassword != params.Password {
|
||||||
|
@ -55,13 +54,13 @@ func SignupResolver(ctx context.Context, params model.SignUpInput) (*model.AuthR
|
||||||
|
|
||||||
if len(params.Roles) > 0 {
|
if len(params.Roles) > 0 {
|
||||||
// check if roles exists
|
// check if roles exists
|
||||||
if !utils.IsValidRoles(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyRoles).([]string), params.Roles) {
|
if !utils.IsValidRoles(envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyRoles), params.Roles) {
|
||||||
return res, fmt.Errorf(`invalid roles`)
|
return res, fmt.Errorf(`invalid roles`)
|
||||||
} else {
|
} else {
|
||||||
inputRoles = params.Roles
|
inputRoles = params.Roles
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
inputRoles = envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDefaultRoles).([]string)
|
inputRoles = envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles)
|
||||||
}
|
}
|
||||||
|
|
||||||
user := db.User{
|
user := db.User{
|
||||||
|
@ -106,7 +105,7 @@ func SignupResolver(ctx context.Context, params model.SignUpInput) (*model.AuthR
|
||||||
}
|
}
|
||||||
|
|
||||||
user.SignupMethods = constants.SignupMethodBasicAuth
|
user.SignupMethods = constants.SignupMethodBasicAuth
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableEmailVerification).(bool) {
|
if envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableEmailVerification) {
|
||||||
now := time.Now().Unix()
|
now := time.Now().Unix()
|
||||||
user.EmailVerifiedAt = &now
|
user.EmailVerifiedAt = &now
|
||||||
}
|
}
|
||||||
|
@ -118,7 +117,7 @@ func SignupResolver(ctx context.Context, params model.SignUpInput) (*model.AuthR
|
||||||
roles := strings.Split(user.Roles, ",")
|
roles := strings.Split(user.Roles, ",")
|
||||||
userToReturn := utils.GetResponseUserData(user)
|
userToReturn := utils.GetResponseUserData(user)
|
||||||
|
|
||||||
if !envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableEmailVerification).(bool) {
|
if !envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableEmailVerification) {
|
||||||
// insert verification request
|
// insert verification request
|
||||||
verificationType := constants.VerificationTypeBasicAuthSignup
|
verificationType := constants.VerificationTypeBasicAuthSignup
|
||||||
token, err := utils.CreateVerificationToken(params.Email, verificationType)
|
token, err := utils.CreateVerificationToken(params.Email, verificationType)
|
||||||
|
|
|
@ -41,44 +41,48 @@ func UpdateEnvResolver(ctx context.Context, params model.UpdateEnvInput) (*model
|
||||||
return res, fmt.Errorf("error un-marshalling params: %t", err)
|
return res, fmt.Errorf("error un-marshalling params: %t", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
updatedData := make(map[string]interface{})
|
updatedData := envstore.EnvInMemoryStoreObj.GetEnvStoreClone()
|
||||||
for key, value := range data {
|
for key, value := range data {
|
||||||
if value != nil {
|
if value != nil {
|
||||||
fieldType := reflect.TypeOf(value).String()
|
fieldType := reflect.TypeOf(value).String()
|
||||||
|
|
||||||
if fieldType == "string" || fieldType == "bool" {
|
if fieldType == "string" {
|
||||||
updatedData[key] = value
|
updatedData.StringEnv[key] = value.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if fieldType == "bool" {
|
||||||
|
updatedData.BoolEnv[key] = value.(bool)
|
||||||
|
}
|
||||||
if fieldType == "[]interface {}" {
|
if fieldType == "[]interface {}" {
|
||||||
stringArr := []string{}
|
stringArr := []string{}
|
||||||
for _, v := range value.([]interface{}) {
|
for _, v := range value.([]interface{}) {
|
||||||
stringArr = append(stringArr, v.(string))
|
stringArr = append(stringArr, v.(string))
|
||||||
}
|
}
|
||||||
updatedData[key] = stringArr
|
updatedData.SliceEnv[key] = stringArr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle derivative cases like disabling email verification & magic login
|
// handle derivative cases like disabling email verification & magic login
|
||||||
// in case SMTP is off but env is set to true
|
// in case SMTP is off but env is set to true
|
||||||
if updatedData[constants.EnvKeySmtpHost] == "" || updatedData[constants.EnvKeySenderEmail] == "" || updatedData[constants.EnvKeySmtpPort] == "" || updatedData[constants.EnvKeySmtpUsername] == "" || updatedData[constants.EnvKeySmtpPassword] == "" {
|
if updatedData.StringEnv[constants.EnvKeySmtpHost] == "" || updatedData.StringEnv[constants.EnvKeySmtpUsername] == "" || updatedData.StringEnv[constants.EnvKeySmtpPassword] == "" || updatedData.StringEnv[constants.EnvKeySenderEmail] == "" && updatedData.StringEnv[constants.EnvKeySmtpPort] == "" {
|
||||||
if !updatedData[constants.EnvKeyDisableEmailVerification].(bool) {
|
if !updatedData.BoolEnv[constants.EnvKeyDisableEmailVerification] {
|
||||||
updatedData[constants.EnvKeyDisableEmailVerification] = true
|
updatedData.BoolEnv[constants.EnvKeyDisableEmailVerification] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if !updatedData[constants.EnvKeyDisableMagicLinkLogin].(bool) {
|
if !updatedData.BoolEnv[constants.EnvKeyDisableMagicLinkLogin] {
|
||||||
updatedData[constants.EnvKeyDisableMagicLinkLogin] = true
|
updatedData.BoolEnv[constants.EnvKeyDisableMagicLinkLogin] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Update local store
|
||||||
|
envstore.EnvInMemoryStoreObj.UpdateEnvStore(updatedData)
|
||||||
|
|
||||||
config, err := db.Mgr.GetConfig()
|
// Fetch the current db store and update it
|
||||||
|
env, err := db.Mgr.GetEnv()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvStore(updatedData)
|
|
||||||
|
|
||||||
encryptedConfig, err := utils.EncryptEnvData(updatedData)
|
encryptedConfig, err := utils.EncryptEnvData(updatedData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
|
@ -95,20 +99,20 @@ func UpdateEnvResolver(ctx context.Context, params model.UpdateEnvInput) (*model
|
||||||
return res, errors.New("admin secret and old admin secret are required for secret change")
|
return res, errors.New("admin secret and old admin secret are required for secret change")
|
||||||
}
|
}
|
||||||
|
|
||||||
err := bcrypt.CompareHashAndPassword([]byte(*params.OldAdminSecret), []byte(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string)))
|
err := bcrypt.CompareHashAndPassword([]byte(*params.OldAdminSecret), []byte(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, errors.New("old admin secret is not correct")
|
return res, errors.New("old admin secret is not correct")
|
||||||
}
|
}
|
||||||
|
|
||||||
hashedKey, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
hashedKey, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
utils.SetAdminCookie(gc, hashedKey)
|
utils.SetAdminCookie(gc, hashedKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
config.Config = encryptedConfig
|
env.EnvData = encryptedConfig
|
||||||
_, err = db.Mgr.UpdateConfig(config)
|
_, err = db.Mgr.UpdateEnv(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("error updating config:", err)
|
log.Println("error updating config:", err)
|
||||||
return res, err
|
return res, err
|
||||||
|
|
|
@ -124,7 +124,7 @@ func UpdateUserResolver(ctx context.Context, params model.UpdateUserInput) (*mod
|
||||||
inputRoles = append(inputRoles, *item)
|
inputRoles = append(inputRoles, *item)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !utils.IsValidRoles(append([]string{}, append(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyRoles).([]string), envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyProtectedRoles).([]string)...)...), inputRoles) {
|
if !utils.IsValidRoles(append([]string{}, append(envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyRoles), envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyProtectedRoles)...)...), inputRoles) {
|
||||||
return res, fmt.Errorf("invalid list of roles")
|
return res, fmt.Errorf("invalid list of roles")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ func InitRouter() *gin.Engine {
|
||||||
|
|
||||||
router.LoadHTMLGlob("templates/*")
|
router.LoadHTMLGlob("templates/*")
|
||||||
// login page app related routes.
|
// login page app related routes.
|
||||||
if !envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableLoginPage).(bool) {
|
if !envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableLoginPage) {
|
||||||
app := router.Group("/app")
|
app := router.Group("/app")
|
||||||
{
|
{
|
||||||
app.Static("/build", "app/build")
|
app.Static("/build", "app/build")
|
||||||
|
|
|
@ -107,9 +107,9 @@ func RemoveSocialLoginState(key string) {
|
||||||
|
|
||||||
// InitializeSessionStore initializes the SessionStoreObj based on environment variables
|
// InitializeSessionStore initializes the SessionStoreObj based on environment variables
|
||||||
func InitSession() {
|
func InitSession() {
|
||||||
if envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyRedisURL).(string) != "" {
|
if envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyRedisURL) != "" {
|
||||||
log.Println("using redis store to save sessions")
|
log.Println("using redis store to save sessions")
|
||||||
opt, err := redis.ParseURL(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyRedisURL).(string))
|
opt, err := redis.ParseURL(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyRedisURL))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("Error parsing redis url:", err)
|
log.Fatalln("Error parsing redis url:", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ func adminLoginTests(t *testing.T, s TestSetup) {
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
|
|
||||||
_, err = resolvers.AdminLoginResolver(ctx, model.AdminLoginInput{
|
_, err = resolvers.AdminLoginResolver(ctx, model.AdminLoginInput{
|
||||||
AdminSecret: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string),
|
AdminSecret: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret),
|
||||||
})
|
})
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
|
@ -18,9 +18,9 @@ func adminLogoutTests(t *testing.T, s TestSetup) {
|
||||||
_, err := resolvers.AdminLogoutResolver(ctx)
|
_, err := resolvers.AdminLogoutResolver(ctx)
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
|
|
||||||
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminCookieName).(string), h))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), h))
|
||||||
_, err = resolvers.AdminLogoutResolver(ctx)
|
_, err = resolvers.AdminLogoutResolver(ctx)
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
|
@ -20,9 +20,9 @@ func adminSessionTests(t *testing.T, s TestSetup) {
|
||||||
log.Println("error:", err)
|
log.Println("error:", err)
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
|
|
||||||
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminCookieName).(string), h))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), h))
|
||||||
_, err = resolvers.AdminSessionResolver(ctx)
|
_, err = resolvers.AdminSessionResolver(ctx)
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
|
@ -21,7 +21,7 @@ func adminSignupTests(t *testing.T, s TestSetup) {
|
||||||
|
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
// reset env for test to pass
|
// reset env for test to pass
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyAdminSecret, "")
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyAdminSecret, "")
|
||||||
|
|
||||||
_, err = resolvers.AdminSignupResolver(ctx, model.AdminSignupInput{
|
_, err = resolvers.AdminSignupResolver(ctx, model.AdminSignupInput{
|
||||||
AdminSecret: uuid.New().String(),
|
AdminSecret: uuid.New().String(),
|
||||||
|
|
|
@ -28,9 +28,9 @@ func deleteUserTest(t *testing.T, s TestSetup) {
|
||||||
})
|
})
|
||||||
assert.NotNil(t, err, "unauthorized")
|
assert.NotNil(t, err, "unauthorized")
|
||||||
|
|
||||||
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminCookieName).(string), h))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), h))
|
||||||
|
|
||||||
_, err = resolvers.DeleteUserResolver(ctx, model.DeleteUserInput{
|
_, err = resolvers.DeleteUserResolver(ctx, model.DeleteUserInput{
|
||||||
Email: email,
|
Email: email,
|
||||||
|
|
|
@ -10,20 +10,20 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestEnvs(t *testing.T) {
|
func TestEnvs(t *testing.T) {
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyEnvPath, "../../.env.sample")
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyEnvPath, "../../.env.sample")
|
||||||
env.InitEnv()
|
env.InitEnv()
|
||||||
store := envstore.EnvInMemoryStoreObj.GetEnvStoreClone()
|
store := envstore.EnvInMemoryStoreObj.GetEnvStoreClone()
|
||||||
|
|
||||||
assert.Equal(t, store[constants.EnvKeyAdminSecret].(string), "admin")
|
assert.Equal(t, store.StringEnv[constants.EnvKeyAdminSecret], "admin")
|
||||||
assert.Equal(t, store[constants.EnvKeyEnv].(string), "production")
|
assert.Equal(t, store.StringEnv[constants.EnvKeyEnv], "production")
|
||||||
assert.False(t, store[constants.EnvKeyDisableEmailVerification].(bool))
|
assert.False(t, store.BoolEnv[constants.EnvKeyDisableEmailVerification])
|
||||||
assert.False(t, store[constants.EnvKeyDisableMagicLinkLogin].(bool))
|
assert.False(t, store.BoolEnv[constants.EnvKeyDisableMagicLinkLogin])
|
||||||
assert.False(t, store[constants.EnvKeyDisableBasicAuthentication].(bool))
|
assert.False(t, store.BoolEnv[constants.EnvKeyDisableBasicAuthentication])
|
||||||
assert.Equal(t, store[constants.EnvKeyJwtType].(string), "HS256")
|
assert.Equal(t, store.StringEnv[constants.EnvKeyJwtType], "HS256")
|
||||||
assert.Equal(t, store[constants.EnvKeyJwtSecret].(string), "random_string")
|
assert.Equal(t, store.StringEnv[constants.EnvKeyJwtSecret], "random_string")
|
||||||
assert.Equal(t, store[constants.EnvKeyJwtRoleClaim].(string), "role")
|
assert.Equal(t, store.StringEnv[constants.EnvKeyJwtRoleClaim], "role")
|
||||||
assert.EqualValues(t, store[constants.EnvKeyRoles].([]string), []string{"user"})
|
assert.EqualValues(t, store.SliceEnv[constants.EnvKeyRoles], []string{"user"})
|
||||||
assert.EqualValues(t, store[constants.EnvKeyDefaultRoles].([]string), []string{"user"})
|
assert.EqualValues(t, store.SliceEnv[constants.EnvKeyDefaultRoles], []string{"user"})
|
||||||
assert.EqualValues(t, store[constants.EnvKeyProtectedRoles].([]string), []string{"admin"})
|
assert.EqualValues(t, store.SliceEnv[constants.EnvKeyProtectedRoles], []string{"admin"})
|
||||||
assert.EqualValues(t, store[constants.EnvKeyAllowedOrigins].([]string), []string{"*"})
|
assert.EqualValues(t, store.SliceEnv[constants.EnvKeyAllowedOrigins], []string{"*"})
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,20 +12,20 @@ import (
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func configTests(t *testing.T, s TestSetup) {
|
func envTests(t *testing.T, s TestSetup) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
t.Run(`should get config`, func(t *testing.T) {
|
t.Run(`should get envs`, func(t *testing.T) {
|
||||||
req, ctx := createContext(s)
|
req, ctx := createContext(s)
|
||||||
_, err := resolvers.EnvResolver(ctx)
|
_, err := resolvers.EnvResolver(ctx)
|
||||||
log.Println("error:", err)
|
log.Println("error:", err)
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
|
|
||||||
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminCookieName).(string), h))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), h))
|
||||||
res, err := resolvers.EnvResolver(ctx)
|
res, err := resolvers.EnvResolver(ctx)
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, *res.AdminSecret, envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
assert.Equal(t, *res.AdminSecret, envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ func logoutTests(t *testing.T, s TestSetup) {
|
||||||
})
|
})
|
||||||
|
|
||||||
token := *verifyRes.AccessToken
|
token := *verifyRes.AccessToken
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyCookieName).(string), token))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName), token))
|
||||||
_, err = resolvers.LogoutResolver(ctx)
|
_, err = resolvers.LogoutResolver(ctx)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
_, err = resolvers.ProfileResolver(ctx)
|
_, err = resolvers.ProfileResolver(ctx)
|
||||||
|
|
|
@ -29,7 +29,7 @@ func magicLinkLoginTests(t *testing.T, s TestSetup) {
|
||||||
})
|
})
|
||||||
|
|
||||||
token := *verifyRes.AccessToken
|
token := *verifyRes.AccessToken
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyCookieName).(string), token))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName), token))
|
||||||
_, err = resolvers.ProfileResolver(ctx)
|
_, err = resolvers.ProfileResolver(ctx)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ func profileTests(t *testing.T, s TestSetup) {
|
||||||
})
|
})
|
||||||
|
|
||||||
token := *verifyRes.AccessToken
|
token := *verifyRes.AccessToken
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyCookieName).(string), token))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName), token))
|
||||||
profileRes, err := resolvers.ProfileResolver(ctx)
|
profileRes, err := resolvers.ProfileResolver(ctx)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
|
|
@ -15,19 +15,19 @@ func TestResolvers(t *testing.T) {
|
||||||
// constants.DbTypeArangodb: "http://localhost:8529",
|
// constants.DbTypeArangodb: "http://localhost:8529",
|
||||||
// constants.DbTypeMongodb: "mongodb://localhost:27017",
|
// constants.DbTypeMongodb: "mongodb://localhost:27017",
|
||||||
}
|
}
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyVersion, "test")
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyVersion, "test")
|
||||||
for dbType, dbURL := range databases {
|
for dbType, dbURL := range databases {
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyDatabaseURL, dbURL)
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyDatabaseURL, dbURL)
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyDatabaseType, dbType)
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyDatabaseType, dbType)
|
||||||
|
|
||||||
env.InitEnv()
|
env.InitEnv()
|
||||||
db.InitDB()
|
db.InitDB()
|
||||||
|
|
||||||
// clean the persisted config for test to use fresh config
|
// clean the persisted config for test to use fresh config
|
||||||
config, err := db.Mgr.GetConfig()
|
envData, err := db.Mgr.GetEnv()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
config.Config = []byte{}
|
envData.EnvData = []byte{}
|
||||||
db.Mgr.UpdateConfig(config)
|
db.Mgr.UpdateEnv(envData)
|
||||||
}
|
}
|
||||||
env.PersistEnv()
|
env.PersistEnv()
|
||||||
|
|
||||||
|
@ -44,8 +44,8 @@ func TestResolvers(t *testing.T) {
|
||||||
adminLoginTests(t, s)
|
adminLoginTests(t, s)
|
||||||
adminLogoutTests(t, s)
|
adminLogoutTests(t, s)
|
||||||
adminSessionTests(t, s)
|
adminSessionTests(t, s)
|
||||||
updateConfigTests(t, s)
|
updateEnvTests(t, s)
|
||||||
configTests(t, s)
|
envTests(t, s)
|
||||||
|
|
||||||
// user tests
|
// user tests
|
||||||
loginTests(t, s)
|
loginTests(t, s)
|
||||||
|
|
|
@ -33,7 +33,7 @@ func sessionTests(t *testing.T, s TestSetup) {
|
||||||
})
|
})
|
||||||
|
|
||||||
token := *verifyRes.AccessToken
|
token := *verifyRes.AccessToken
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyCookieName).(string), token))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName), token))
|
||||||
|
|
||||||
sessionRes, err := resolvers.SessionResolver(ctx, []string{})
|
sessionRes, err := resolvers.SessionResolver(ctx, []string{})
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
|
@ -3,6 +3,7 @@ package test
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"time"
|
"time"
|
||||||
|
@ -72,7 +73,8 @@ func testSetup() TestSetup {
|
||||||
Password: "test",
|
Password: "test",
|
||||||
}
|
}
|
||||||
|
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyEnvPath, "../../.env.sample")
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.StringStoreIdentifier, constants.EnvKeyEnvPath, "../../.env.sample")
|
||||||
|
log.Println("envstore", envstore.EnvInMemoryStoreObj.GetEnvStoreClone())
|
||||||
env.InitEnv()
|
env.InitEnv()
|
||||||
session.InitSession()
|
session.InitSession()
|
||||||
|
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
package test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/authorizerdev/authorizer/server/constants"
|
|
||||||
"github.com/authorizerdev/authorizer/server/envstore"
|
|
||||||
"github.com/authorizerdev/authorizer/server/graph/model"
|
|
||||||
"github.com/authorizerdev/authorizer/server/resolvers"
|
|
||||||
"github.com/authorizerdev/authorizer/server/utils"
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func updateConfigTests(t *testing.T, s TestSetup) {
|
|
||||||
t.Helper()
|
|
||||||
t.Run(`should update configs`, func(t *testing.T) {
|
|
||||||
req, ctx := createContext(s)
|
|
||||||
originalAppURL := envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAppURL).(string)
|
|
||||||
|
|
||||||
data := model.UpdateEnvInput{}
|
|
||||||
_, err := resolvers.UpdateEnvResolver(ctx, data)
|
|
||||||
log.Println("error:", err)
|
|
||||||
assert.NotNil(t, err)
|
|
||||||
|
|
||||||
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
|
||||||
assert.Nil(t, err)
|
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminCookieName).(string), h))
|
|
||||||
newURL := "https://test.com"
|
|
||||||
data = model.UpdateEnvInput{
|
|
||||||
AppURL: &newURL,
|
|
||||||
}
|
|
||||||
_, err = resolvers.UpdateEnvResolver(ctx, data)
|
|
||||||
log.Println("error:", err)
|
|
||||||
assert.Nil(t, err)
|
|
||||||
assert.Equal(t, envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAppURL).(string), newURL)
|
|
||||||
data = model.UpdateEnvInput{
|
|
||||||
AppURL: &originalAppURL,
|
|
||||||
}
|
|
||||||
_, err = resolvers.UpdateEnvResolver(ctx, data)
|
|
||||||
assert.Nil(t, err)
|
|
||||||
})
|
|
||||||
}
|
|
54
server/test/update_env_test.go
Normal file
54
server/test/update_env_test.go
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
package test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/authorizerdev/authorizer/server/constants"
|
||||||
|
"github.com/authorizerdev/authorizer/server/envstore"
|
||||||
|
"github.com/authorizerdev/authorizer/server/graph/model"
|
||||||
|
"github.com/authorizerdev/authorizer/server/resolvers"
|
||||||
|
"github.com/authorizerdev/authorizer/server/utils"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func updateEnvTests(t *testing.T, s TestSetup) {
|
||||||
|
t.Helper()
|
||||||
|
t.Run(`should update envs`, func(t *testing.T) {
|
||||||
|
req, ctx := createContext(s)
|
||||||
|
originalAppURL := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAppURL)
|
||||||
|
|
||||||
|
data := model.UpdateEnvInput{}
|
||||||
|
_, err := resolvers.UpdateEnvResolver(ctx, data)
|
||||||
|
log.Println("error:", err)
|
||||||
|
assert.NotNil(t, err)
|
||||||
|
|
||||||
|
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
|
assert.Nil(t, err)
|
||||||
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), h))
|
||||||
|
newURL := "https://test.com"
|
||||||
|
disableLoginPage := true
|
||||||
|
allowedOrigins := []string{"http://localhost:8080"}
|
||||||
|
data = model.UpdateEnvInput{
|
||||||
|
AppURL: &newURL,
|
||||||
|
DisableLoginPage: &disableLoginPage,
|
||||||
|
AllowedOrigins: allowedOrigins,
|
||||||
|
}
|
||||||
|
_, err = resolvers.UpdateEnvResolver(ctx, data)
|
||||||
|
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAppURL), newURL)
|
||||||
|
assert.True(t, envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableLoginPage))
|
||||||
|
assert.Equal(t, envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyAllowedOrigins), allowedOrigins)
|
||||||
|
|
||||||
|
disableLoginPage = false
|
||||||
|
data = model.UpdateEnvInput{
|
||||||
|
AppURL: &originalAppURL,
|
||||||
|
DisableLoginPage: &disableLoginPage,
|
||||||
|
AllowedOrigins: []string{"*"},
|
||||||
|
}
|
||||||
|
_, err = resolvers.UpdateEnvResolver(ctx, data)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
})
|
||||||
|
}
|
|
@ -36,7 +36,7 @@ func updateProfileTests(t *testing.T, s TestSetup) {
|
||||||
})
|
})
|
||||||
|
|
||||||
token := *verifyRes.AccessToken
|
token := *verifyRes.AccessToken
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyCookieName).(string), token))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName), token))
|
||||||
_, err = resolvers.UpdateProfileResolver(ctx, model.UpdateProfileInput{
|
_, err = resolvers.UpdateProfileResolver(ctx, model.UpdateProfileInput{
|
||||||
FamilyName: &fName,
|
FamilyName: &fName,
|
||||||
})
|
})
|
||||||
|
|
|
@ -33,9 +33,9 @@ func updateUserTest(t *testing.T, s TestSetup) {
|
||||||
})
|
})
|
||||||
assert.NotNil(t, err, "unauthorized")
|
assert.NotNil(t, err, "unauthorized")
|
||||||
|
|
||||||
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminCookieName).(string), h))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), h))
|
||||||
_, err = resolvers.UpdateUserResolver(ctx, model.UpdateUserInput{
|
_, err = resolvers.UpdateUserResolver(ctx, model.UpdateUserInput{
|
||||||
ID: user.ID,
|
ID: user.ID,
|
||||||
Roles: newRoles,
|
Roles: newRoles,
|
||||||
|
|
|
@ -26,9 +26,9 @@ func usersTest(t *testing.T, s TestSetup) {
|
||||||
users, err := resolvers.UsersResolver(ctx)
|
users, err := resolvers.UsersResolver(ctx)
|
||||||
assert.NotNil(t, err, "unauthorized")
|
assert.NotNil(t, err, "unauthorized")
|
||||||
|
|
||||||
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminCookieName).(string), h))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), h))
|
||||||
users, err = resolvers.UsersResolver(ctx)
|
users, err = resolvers.UsersResolver(ctx)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
rLen := len(users)
|
rLen := len(users)
|
||||||
|
|
|
@ -22,7 +22,7 @@ func TestIsValidEmail(t *testing.T) {
|
||||||
func TestIsValidOrigin(t *testing.T) {
|
func TestIsValidOrigin(t *testing.T) {
|
||||||
// don't use portocal(http/https) for ALLOWED_ORIGINS while testing,
|
// don't use portocal(http/https) for ALLOWED_ORIGINS while testing,
|
||||||
// as we trim them off while running the main function
|
// as we trim them off while running the main function
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyAllowedOrigins, []string{"localhost:8080", "*.google.com", "*.google.in", "*abc.*"})
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.SliceStoreIdentifier, constants.EnvKeyAllowedOrigins, []string{"localhost:8080", "*.google.com", "*.google.in", "*abc.*"})
|
||||||
assert.False(t, utils.IsValidOrigin("http://myapp.com"), "it should be invalid origin")
|
assert.False(t, utils.IsValidOrigin("http://myapp.com"), "it should be invalid origin")
|
||||||
assert.False(t, utils.IsValidOrigin("http://appgoogle.com"), "it should be invalid origin")
|
assert.False(t, utils.IsValidOrigin("http://appgoogle.com"), "it should be invalid origin")
|
||||||
assert.True(t, utils.IsValidOrigin("http://app.google.com"), "it should be valid origin")
|
assert.True(t, utils.IsValidOrigin("http://app.google.com"), "it should be valid origin")
|
||||||
|
@ -32,7 +32,7 @@ func TestIsValidOrigin(t *testing.T) {
|
||||||
assert.True(t, utils.IsValidOrigin("http://xyx.abc.in"), "it should be valid origin")
|
assert.True(t, utils.IsValidOrigin("http://xyx.abc.in"), "it should be valid origin")
|
||||||
assert.True(t, utils.IsValidOrigin("http://xyxabc.in"), "it should be valid origin")
|
assert.True(t, utils.IsValidOrigin("http://xyxabc.in"), "it should be valid origin")
|
||||||
assert.True(t, utils.IsValidOrigin("http://localhost:8080"), "it should be valid origin")
|
assert.True(t, utils.IsValidOrigin("http://localhost:8080"), "it should be valid origin")
|
||||||
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.EnvKeyAllowedOrigins, []string{"*"})
|
envstore.EnvInMemoryStoreObj.UpdateEnvVariable(constants.SliceStoreIdentifier, constants.EnvKeyAllowedOrigins, []string{"*"})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestIsValidIdentifier(t *testing.T) {
|
func TestIsValidIdentifier(t *testing.T) {
|
||||||
|
|
|
@ -28,9 +28,9 @@ func verificationRequestsTest(t *testing.T, s TestSetup) {
|
||||||
requests, err := resolvers.VerificationRequestsResolver(ctx)
|
requests, err := resolvers.VerificationRequestsResolver(ctx)
|
||||||
assert.NotNil(t, err, "unauthorized")
|
assert.NotNil(t, err, "unauthorized")
|
||||||
|
|
||||||
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
h, err := utils.EncryptPassword(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminCookieName).(string), h))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), h))
|
||||||
requests, err = resolvers.VerificationRequestsResolver(ctx)
|
requests, err = resolvers.VerificationRequestsResolver(ctx)
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
|
@ -21,7 +21,7 @@ import (
|
||||||
// CreateAuthToken util to create JWT token, based on
|
// CreateAuthToken util to create JWT token, based on
|
||||||
// user information, roles config and CUSTOM_ACCESS_TOKEN_SCRIPT
|
// user information, roles config and CUSTOM_ACCESS_TOKEN_SCRIPT
|
||||||
func CreateAuthToken(user db.User, tokenType string, roles []string) (string, int64, error) {
|
func CreateAuthToken(user db.User, tokenType string, roles []string) (string, int64, error) {
|
||||||
t := jwt.New(jwt.GetSigningMethod(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyJwtType).(string)))
|
t := jwt.New(jwt.GetSigningMethod(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtType)))
|
||||||
expiryBound := time.Hour
|
expiryBound := time.Hour
|
||||||
if tokenType == constants.TokenTypeRefreshToken {
|
if tokenType == constants.TokenTypeRefreshToken {
|
||||||
// expires in 1 year
|
// expires in 1 year
|
||||||
|
@ -35,7 +35,7 @@ func CreateAuthToken(user db.User, tokenType string, roles []string) (string, in
|
||||||
var userMap map[string]interface{}
|
var userMap map[string]interface{}
|
||||||
json.Unmarshal(userBytes, &userMap)
|
json.Unmarshal(userBytes, &userMap)
|
||||||
|
|
||||||
claimKey := envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyJwtRoleClaim).(string)
|
claimKey := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtRoleClaim)
|
||||||
customClaims := jwt.MapClaims{
|
customClaims := jwt.MapClaims{
|
||||||
"exp": expiresAt,
|
"exp": expiresAt,
|
||||||
"iat": time.Now().Unix(),
|
"iat": time.Now().Unix(),
|
||||||
|
@ -82,7 +82,7 @@ func CreateAuthToken(user db.User, tokenType string, roles []string) (string, in
|
||||||
|
|
||||||
t.Claims = customClaims
|
t.Claims = customClaims
|
||||||
|
|
||||||
token, err := t.SignedString([]byte(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyJwtSecret).(string)))
|
token, err := t.SignedString([]byte(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtSecret)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", 0, err
|
return "", 0, err
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,7 @@ func VerifyAuthToken(token string) (map[string]interface{}, error) {
|
||||||
claims := jwt.MapClaims{}
|
claims := jwt.MapClaims{}
|
||||||
|
|
||||||
_, err := jwt.ParseWithClaims(token, claims, func(token *jwt.Token) (interface{}, error) {
|
_, err := jwt.ParseWithClaims(token, claims, func(token *jwt.Token) (interface{}, error) {
|
||||||
return []byte(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyJwtSecret).(string)), nil
|
return []byte(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtSecret)), nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
|
@ -134,7 +134,7 @@ func VerifyAuthToken(token string) (map[string]interface{}, error) {
|
||||||
|
|
||||||
// CreateAdminAuthToken creates the admin token based on secret key
|
// CreateAdminAuthToken creates the admin token based on secret key
|
||||||
func CreateAdminAuthToken(tokenType string, c *gin.Context) (string, error) {
|
func CreateAdminAuthToken(tokenType string, c *gin.Context) (string, error) {
|
||||||
return EncryptPassword(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string))
|
return EncryptPassword(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAdminAuthToken helps in getting the admin token from the request cookie
|
// GetAdminAuthToken helps in getting the admin token from the request cookie
|
||||||
|
@ -151,7 +151,7 @@ func GetAdminAuthToken(gc *gin.Context) (string, error) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = bcrypt.CompareHashAndPassword([]byte(decodedValue), []byte(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string)))
|
err = bcrypt.CompareHashAndPassword([]byte(decodedValue), []byte(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret)))
|
||||||
log.Println("error comparing hash:", err)
|
log.Println("error comparing hash:", err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf(`unauthorized`)
|
return "", fmt.Errorf(`unauthorized`)
|
||||||
|
|
|
@ -15,22 +15,22 @@ import (
|
||||||
func SetCookie(gc *gin.Context, token string) {
|
func SetCookie(gc *gin.Context, token string) {
|
||||||
secure := true
|
secure := true
|
||||||
httpOnly := true
|
httpOnly := true
|
||||||
host, _ := GetHostParts(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string))
|
host, _ := GetHostParts(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL))
|
||||||
domain := GetDomainName(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string))
|
domain := GetDomainName(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL))
|
||||||
if domain != "localhost" {
|
if domain != "localhost" {
|
||||||
domain = "." + domain
|
domain = "." + domain
|
||||||
}
|
}
|
||||||
|
|
||||||
gc.SetSameSite(http.SameSiteNoneMode)
|
gc.SetSameSite(http.SameSiteNoneMode)
|
||||||
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyCookieName).(string), token, 3600, "/", host, secure, httpOnly)
|
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName), token, 3600, "/", host, secure, httpOnly)
|
||||||
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyCookieName).(string)+"-client", token, 3600, "/", domain, secure, httpOnly)
|
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName)+"-client", token, 3600, "/", domain, secure, httpOnly)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCookie gets the cookie from the request
|
// GetCookie gets the cookie from the request
|
||||||
func GetCookie(gc *gin.Context) (string, error) {
|
func GetCookie(gc *gin.Context) (string, error) {
|
||||||
cookie, err := gc.Request.Cookie(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyCookieName).(string))
|
cookie, err := gc.Request.Cookie(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cookie, err = gc.Request.Cookie(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyCookieName).(string) + "-client")
|
cookie, err = gc.Request.Cookie(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName) + "-client")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -44,28 +44,28 @@ func DeleteCookie(gc *gin.Context) {
|
||||||
secure := true
|
secure := true
|
||||||
httpOnly := true
|
httpOnly := true
|
||||||
|
|
||||||
host, _ := GetHostParts(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string))
|
host, _ := GetHostParts(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL))
|
||||||
domain := GetDomainName(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string))
|
domain := GetDomainName(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL))
|
||||||
if domain != "localhost" {
|
if domain != "localhost" {
|
||||||
domain = "." + domain
|
domain = "." + domain
|
||||||
}
|
}
|
||||||
|
|
||||||
gc.SetSameSite(http.SameSiteNoneMode)
|
gc.SetSameSite(http.SameSiteNoneMode)
|
||||||
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyCookieName).(string), "", -1, "/", host, secure, httpOnly)
|
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName), "", -1, "/", host, secure, httpOnly)
|
||||||
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyCookieName).(string)+"-client", "", -1, "/", domain, secure, httpOnly)
|
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyCookieName)+"-client", "", -1, "/", domain, secure, httpOnly)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetAdminCookie sets the admin cookie in the response
|
// SetAdminCookie sets the admin cookie in the response
|
||||||
func SetAdminCookie(gc *gin.Context, token string) {
|
func SetAdminCookie(gc *gin.Context, token string) {
|
||||||
secure := true
|
secure := true
|
||||||
httpOnly := true
|
httpOnly := true
|
||||||
host, _ := GetHostParts(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string))
|
host, _ := GetHostParts(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL))
|
||||||
|
|
||||||
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminCookieName).(string), token, 3600, "/", host, secure, httpOnly)
|
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), token, 3600, "/", host, secure, httpOnly)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetAdminCookie(gc *gin.Context) (string, error) {
|
func GetAdminCookie(gc *gin.Context) (string, error) {
|
||||||
cookie, err := gc.Request.Cookie(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminCookieName).(string))
|
cookie, err := gc.Request.Cookie(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ func GetAdminCookie(gc *gin.Context) (string, error) {
|
||||||
func DeleteAdminCookie(gc *gin.Context) {
|
func DeleteAdminCookie(gc *gin.Context) {
|
||||||
secure := true
|
secure := true
|
||||||
httpOnly := true
|
httpOnly := true
|
||||||
host, _ := GetHostParts(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string))
|
host, _ := GetHostParts(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL))
|
||||||
|
|
||||||
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminCookieName).(string), "", -1, "/", host, secure, httpOnly)
|
gc.SetCookie(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminCookieName), "", -1, "/", host, secure, httpOnly)
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ func DecryptB64(s string) (string, error) {
|
||||||
|
|
||||||
// EncryptAES encrypts data using AES algorithm
|
// EncryptAES encrypts data using AES algorithm
|
||||||
func EncryptAES(text []byte) ([]byte, error) {
|
func EncryptAES(text []byte) ([]byte, error) {
|
||||||
key := []byte(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyEncryptionKey).(string))
|
key := []byte(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyEncryptionKey))
|
||||||
c, err := aes.NewCipher(key)
|
c, err := aes.NewCipher(key)
|
||||||
var res []byte
|
var res []byte
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -63,7 +63,7 @@ func EncryptAES(text []byte) ([]byte, error) {
|
||||||
|
|
||||||
// DecryptAES decrypts data using AES algorithm
|
// DecryptAES decrypts data using AES algorithm
|
||||||
func DecryptAES(ciphertext []byte) ([]byte, error) {
|
func DecryptAES(ciphertext []byte) ([]byte, error) {
|
||||||
key := []byte(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyEncryptionKey).(string))
|
key := []byte(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyEncryptionKey))
|
||||||
c, err := aes.NewCipher(key)
|
c, err := aes.NewCipher(key)
|
||||||
var res []byte
|
var res []byte
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -90,7 +90,7 @@ func DecryptAES(ciphertext []byte) ([]byte, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// EncryptEnvData is used to encrypt the env data
|
// EncryptEnvData is used to encrypt the env data
|
||||||
func EncryptEnvData(data map[string]interface{}) ([]byte, error) {
|
func EncryptEnvData(data envstore.Store) ([]byte, error) {
|
||||||
jsonBytes, err := json.Marshal(data)
|
jsonBytes, err := json.Marshal(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []byte{}, err
|
return []byte{}, err
|
||||||
|
|
|
@ -9,12 +9,12 @@ import (
|
||||||
// GetMeta helps in getting the meta data about the deployment from EnvData
|
// GetMeta helps in getting the meta data about the deployment from EnvData
|
||||||
func GetMetaInfo() model.Meta {
|
func GetMetaInfo() model.Meta {
|
||||||
return model.Meta{
|
return model.Meta{
|
||||||
Version: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyVersion).(string),
|
Version: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyVersion),
|
||||||
IsGoogleLoginEnabled: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGoogleClientID).(string) != "" && envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGoogleClientSecret).(string) != "",
|
IsGoogleLoginEnabled: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGoogleClientID) != "" && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGoogleClientSecret) != "",
|
||||||
IsGithubLoginEnabled: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGithubClientID).(string) != "" && envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyGithubClientSecret).(string) != "",
|
IsGithubLoginEnabled: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGithubClientID) != "" && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyGithubClientSecret) != "",
|
||||||
IsFacebookLoginEnabled: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyFacebookClientID).(string) != "" && envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyFacebookClientSecret).(string) != "",
|
IsFacebookLoginEnabled: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyFacebookClientID) != "" && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyFacebookClientSecret) != "",
|
||||||
IsBasicAuthenticationEnabled: !envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableBasicAuthentication).(bool),
|
IsBasicAuthenticationEnabled: !envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableBasicAuthentication),
|
||||||
IsEmailVerificationEnabled: !envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableEmailVerification).(bool),
|
IsEmailVerificationEnabled: !envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableEmailVerification),
|
||||||
IsMagicLinkLoginEnabled: !envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyDisableMagicLinkLogin).(bool),
|
IsMagicLinkLoginEnabled: !envstore.EnvInMemoryStoreObj.GetBoolStoreEnvVariable(constants.EnvKeyDisableMagicLinkLogin),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,8 @@ func IsValidEmail(email string) bool {
|
||||||
|
|
||||||
// IsValidOrigin validates origin based on ALLOWED_ORIGINS
|
// IsValidOrigin validates origin based on ALLOWED_ORIGINS
|
||||||
func IsValidOrigin(url string) bool {
|
func IsValidOrigin(url string) bool {
|
||||||
allowedOrigins := envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAllowedOrigins).([]interface{})
|
allowedOrigins := envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyAllowedOrigins)
|
||||||
if len(allowedOrigins) == 1 && allowedOrigins[0].(string) == "*" {
|
if len(allowedOrigins) == 1 && allowedOrigins[0] == "*" {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,10 +28,10 @@ func IsValidOrigin(url string) bool {
|
||||||
currentOrigin := hostName + ":" + port
|
currentOrigin := hostName + ":" + port
|
||||||
|
|
||||||
for _, origin := range allowedOrigins {
|
for _, origin := range allowedOrigins {
|
||||||
replacedString := origin.(string)
|
replacedString := origin
|
||||||
// if has regex whitelisted domains
|
// if has regex whitelisted domains
|
||||||
if strings.Contains(origin.(string), "*") {
|
if strings.Contains(origin, "*") {
|
||||||
replacedString = strings.Replace(origin.(string), ".", "\\.", -1)
|
replacedString = strings.Replace(origin, ".", "\\.", -1)
|
||||||
replacedString = strings.Replace(replacedString, "*", ".*", -1)
|
replacedString = strings.Replace(replacedString, "*", ".*", -1)
|
||||||
|
|
||||||
if strings.HasPrefix(replacedString, ".*") {
|
if strings.HasPrefix(replacedString, ".*") {
|
||||||
|
@ -61,7 +61,7 @@ func IsSuperAdmin(gc *gin.Context) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
return secret == envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAdminSecret).(string)
|
return secret == envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAdminSecret)
|
||||||
}
|
}
|
||||||
|
|
||||||
return token != ""
|
return token != ""
|
||||||
|
|
|
@ -26,24 +26,24 @@ type CustomClaim struct {
|
||||||
|
|
||||||
// CreateVerificationToken creates a verification JWT token
|
// CreateVerificationToken creates a verification JWT token
|
||||||
func CreateVerificationToken(email string, tokenType string) (string, error) {
|
func CreateVerificationToken(email string, tokenType string) (string, error) {
|
||||||
t := jwt.New(jwt.GetSigningMethod(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyJwtType).(string)))
|
t := jwt.New(jwt.GetSigningMethod(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtType)))
|
||||||
|
|
||||||
t.Claims = &CustomClaim{
|
t.Claims = &CustomClaim{
|
||||||
&jwt.StandardClaims{
|
&jwt.StandardClaims{
|
||||||
ExpiresAt: time.Now().Add(time.Minute * 30).Unix(),
|
ExpiresAt: time.Now().Add(time.Minute * 30).Unix(),
|
||||||
},
|
},
|
||||||
tokenType,
|
tokenType,
|
||||||
UserInfo{Email: email, Host: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAuthorizerURL).(string), RedirectURL: envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyAppURL).(string)},
|
UserInfo{Email: email, Host: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAuthorizerURL), RedirectURL: envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyAppURL)},
|
||||||
}
|
}
|
||||||
|
|
||||||
return t.SignedString([]byte(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyJwtSecret).(string)))
|
return t.SignedString([]byte(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtSecret)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// VerifyVerificationToken verifies the verification JWT token
|
// VerifyVerificationToken verifies the verification JWT token
|
||||||
func VerifyVerificationToken(token string) (*CustomClaim, error) {
|
func VerifyVerificationToken(token string) (*CustomClaim, error) {
|
||||||
claims := &CustomClaim{}
|
claims := &CustomClaim{}
|
||||||
_, err := jwt.ParseWithClaims(token, claims, func(token *jwt.Token) (interface{}, error) {
|
_, err := jwt.ParseWithClaims(token, claims, func(token *jwt.Token) (interface{}, error) {
|
||||||
return []byte(envstore.EnvInMemoryStoreObj.GetEnvVariable(constants.EnvKeyJwtSecret).(string)), nil
|
return []byte(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyJwtSecret)), nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return claims, err
|
return claims, err
|
||||||
|
|
Loading…
Reference in New Issue
Block a user