package liman
import (
"encoding/json"
"github.com/limanmys/render-engine/app/models"
"github.com/limanmys/render-engine/internal/database"
"github.com/limanmys/render-engine/pkg/helpers"
"github.com/mervick/aes-everywhere/go/aes256"
)
func GetSettings (user *models .User , server *models .Server , extension *models .Extension ) (map [string ]string , error ) {
extJson , err := GetExtensionJSON (extension )
if err != nil {
return nil , err
}
extensionKeys := make (map [string ]any )
globalVars := make (map [string ]any )
for _ , setting := range extJson ["database" ].([]interface {}) {
isGlobal := setting .(map [string ]interface {})["global" ]
if isGlobal != nil && isGlobal .(bool ) {
globalVars [setting .(map [string ]interface {})["variable" ].(string )] = setting
}
extensionKeys [setting .(map [string ]interface {})["variable" ].(string )] = setting
}
settings := []*models .Settings {}
results := make (map [string ]string )
decryptionKey := helpers .Env ("APP_KEY" , "" ) + user .ID + server .ID
searchKeys := []string {}
for key := range extensionKeys {
searchKeys = append (searchKeys , key )
}
database .Connection ().Find (
&settings ,
"name IN ? AND user_id = ? AND server_id = ?" ,
searchKeys ,
user .ID ,
server .ID ,
)
for _ , setting := range settings {
results [setting .Name ] = aes256 .Decrypt (setting .Value , decryptionKey )
if extensionKeys [setting .Name ].(map [string ]any )["type" ].(string ) == "server" {
serverObject , err := GetServer (&models .Server {ID : results [setting .Name ]})
if err != nil {
serverObject = &models .Server {}
}
serverJson , _ := json .Marshal (serverObject )
results [setting .Name ] = string (serverJson )
}
}
searchKeys = []string {}
for key := range globalVars {
searchKeys = append (searchKeys , key )
}
database .Connection ().Find (
&settings ,
"name IN ? AND server_id = ?" ,
searchKeys ,
server .ID ,
)
for _ , setting := range settings {
if _ , ok := results [setting .Name ]; ok {
continue
}
results [setting .Name ] = aes256 .Decrypt (setting .Value , helpers .Env ("APP_KEY" , "" )+setting .UserID +setting .ServerID )
if extensionKeys [setting .Name ].(map [string ]any )["type" ].(string ) == "server" {
serverObject , err := GetServer (&models .Server {ID : results [setting .Name ]})
if err != nil {
serverObject = &models .Server {}
}
serverJson , _ := json .Marshal (serverObject )
results [setting .Name ] = string (serverJson )
}
}
return results , nil
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .