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 .