@@ -3,13 +3,13 @@ package sandbox
33import (
44 "fmt"
55 "io/ioutil"
6- "os"
76 "strings"
87
98 "github.com/alessio/shellescape"
109 "github.com/bytedance/sonic"
1110 "github.com/gofiber/fiber/v2"
1211 "github.com/limanmys/render-engine/app/models"
12+ "github.com/limanmys/render-engine/internal/constants"
1313 "github.com/limanmys/render-engine/internal/liman"
1414 "github.com/limanmys/render-engine/pkg/helpers"
1515 "github.com/mervick/aes-everywhere/go/aes256"
@@ -19,20 +19,15 @@ func GenerateCommand(extension *models.Extension, credentials *models.Credential
1919 extension .Name = shellescape .StripUnsafe (extension .Name )
2020
2121 if ! helpers .IsLetter (extension .Name ) {
22- return "" , fiber .NewError (fiber .StatusUnprocessableEntity , "Extension names can only contains letters" )
22+ return "" , fiber .NewError (fiber .StatusUnprocessableEntity , "extension names can only contains letters" )
2323 }
2424
25- server , err := liman . GetServer ( & models. Server { ID : params . Server } )
25+ server , user , settings , err := getParams ( extension , credentials , params )
2626 if err != nil {
2727 return "" , err
2828 }
2929
30- user , err := liman .GetUser (& models.User {ID : params .User })
31- if err != nil {
32- return "" , err
33- }
34-
35- settings , err := liman .GetSettings (user , server , extension )
30+ permissions , variables , err := liman .GetPermissions (user , extension .Name )
3631 if err != nil {
3732 return "" , err
3833 }
@@ -53,52 +48,76 @@ func GenerateCommand(extension *models.Extension, credentials *models.Credential
5348 settingsJson , _ := sonic .Marshal (settings )
5449 userJson , _ := sonic .Marshal (user )
5550 requestData , _ := sonic .Marshal (params .RequestData )
51+ permissionsJson , _ := sonic .Marshal (permissions )
52+ variablesJson , _ := sonic .Marshal (variables )
5653
5754 extensionData := map [string ]string {
5855 "server" : string (serverJson ),
5956 "extension" : string (extensionJson ),
6057 "settings" : string (settingsJson ),
6158 "user" : string (userJson ),
59+ "permissions" : string (permissionsJson ),
60+ "variables" : string (variablesJson ),
61+ "requestData" : string (requestData ),
62+ "publicPath" : fmt .Sprintf (constants .EXTENSION_PUBLIC_PATH , params .BaseURL , extension .ID ),
63+ "functionsPath" : fmt .Sprintf ("%s/%s%s" , constants .EXTENSIONS_PATH , strings .ToLower (extension .Name ), constants .FUNCTIONS_FILE_PATH ),
64+ "navigationRoute" : fmt .Sprintf (constants .NAVIGATION_ROUTE , extension .ID , server .City , server .ID ),
6265 "key_type" : credentials .Type ,
63- "functionsPath" : fmt .Sprintf ("/liman/extensions/%s/views/functions.php" , strings .ToLower (extension .Name )),
6466 "function" : params .TargetFunction ,
65- "requestData" : string (requestData ),
6667 "license" : licenceData ,
67- "apiRoute" : "/extensionRun" ,
68- "navigationRoute" : fmt .Sprintf ("/l/%s/%s/%s" , extension .ID , server .City , server .ID ),
6968 "token" : params .Token ,
7069 "locale" : params .Locale ,
7170 "log_id" : "0000000" , // TODO: add log handlers
7271 "ajax" : "true" ,
73- "publicPath" : fmt .Sprintf ("%s/eklenti/%s/public/" , params .BaseURL , extension .ID ),
74- "permissions" : "[]" ,
75- "variables" : "[]" ,
76- // TODO: Add role system
72+ "apiRoute" : "/extensionRun" ,
7773 }
7874
79- secureKey , err := ioutil .ReadFile ("/liman/keys /" + extension .ID )
75+ secureKey , err := ioutil .ReadFile (constants . KEYS_PATH + " /" + extension .ID )
8076 if err != nil {
81- return "" , fiber .NewError (fiber .StatusNotFound , "Cannot found extension key file" )
77+ return "" , fiber .NewError (fiber .StatusNotFound , "cannot found extension key file" )
8278 }
8379
8480 extensionDataJson , _ := sonic .Marshal (extensionData )
8581 encryptedData := aes256 .Encrypt (string (extensionDataJson ), string (secureKey ))
8682
87- timeout := "30"
88- if len ( os . Getenv ( "EXTENSION_TIMEOUT" )) > 0 {
89- timeout = os . Getenv ( "EXTENSION_TIMEOUT" )
90- }
83+ // TODO: extJsonfile
84+ // TODO: required param tester
85+ // TODO: targetFunction and permission match check
86+ // TODO: so file handler
9187
9288 command := fmt .Sprintf (
9389 "runuser %s -c 'timeout %s /usr/bin/php -d display_errors=on %s %s %s'" ,
9490 strings .Replace (extension .ID , "-" , "" , - 1 ),
95- timeout ,
96- "/liman/sandbox/php/index.php" ,
97- "/liman/keys /"+ extension .ID ,
91+ helpers . Env ( "EXTENSION_TIMEOUT" , "30" ) ,
92+ constants . SANDBOX_PATH ,
93+ constants . KEYS_PATH + " /"+ extension .ID ,
9894 encryptedData ,
9995 )
10096
10197 // TODO: complete the command generator
10298
10399 return command , nil
104100}
101+
102+ func getParams (
103+ extension * models.Extension ,
104+ credentials * models.Credentials ,
105+ params * models.CommandParams ,
106+ ) (* models.Server , * models.User , map [string ]string , error ) {
107+ server , err := liman .GetServer (& models.Server {ID : params .Server })
108+ if err != nil {
109+ return nil , nil , nil , err
110+ }
111+
112+ user , err := liman .GetUser (& models.User {ID : params .User })
113+ if err != nil {
114+ return nil , nil , nil , err
115+ }
116+
117+ settings , err := liman .GetSettings (user , server , extension )
118+ if err != nil {
119+ return nil , nil , nil , err
120+ }
121+
122+ return server , user , settings , nil
123+ }
0 commit comments