diff --git a/app/executor.php b/app/executor.php index 76f938b8d7..fba8c4c416 100644 --- a/app/executor.php +++ b/app/executor.php @@ -503,7 +503,7 @@ App::post('/v1/execution') $ch = \curl_init(); $body = \json_encode([ - 'env' => $vars, + 'variables' => $vars, 'payload' => $data, 'timeout' => $timeout ]); diff --git a/app/views/console/comps/permissions-matrix.phtml b/app/views/console/comps/permissions-matrix.phtml index 6a688d0629..7dd80c19cd 100644 --- a/app/views/console/comps/permissions-matrix.phtml +++ b/app/views/console/comps/permissions-matrix.phtml @@ -46,8 +46,20 @@ $escapedPermissions = \array_map(function ($perm) { :value="rawPermissions"/> - - + + + +
+ + @@ -60,7 +72,16 @@ $escapedPermissions = \array_map(function ($perm) { - .window="addPermission('', role, { })"> - - - - - - diff --git a/app/views/console/functions/function.phtml b/app/views/console/functions/function.phtml index 235892c2db..d4381c03ea 100644 --- a/app/views/console/functions/function.phtml +++ b/app/views/console/functions/function.phtml @@ -416,7 +416,7 @@ sort($patterns);
Role
- - - - - - -
- +
- + - diff --git a/public/dist/scripts/app-all.js b/public/dist/scripts/app-all.js index 52f329f1e7..19a8d73470 100644 --- a/public/dist/scripts/app-all.js +++ b/public/dist/scripts/app-all.js @@ -4015,14 +4015,13 @@ if(this.action){event+=`.${this.action}`;} if(this.attribute){event+=`.${this.attribute}`;} this.events.add(event);this.reset();},removeEvent(value){this.events.delete(value);}}));});})(window);(function(window){document.addEventListener('alpine:init',()=>{Alpine.data('permissionsMatrix',()=>({permissions:[],rawPermissions:[],load(permissions){if(permissions===undefined){return;} this.rawPermissions=permissions;permissions.map(p=>{let{type,role}=this.parsePermission(p);type=this.parseInputPermission(type);let index=-1;let existing=this.permissions.find((p,idx)=>{if(p.role===role){index=idx;return true;}}) -if(existing===undefined){this.permissions.push({role,[type]:true,});} -if(index!==-1){existing[type]=true;this.permissions[index]=existing;}});},addPermission(formId,role,permissions){if(!this.validate(formId,role,permissions)){return;} -Object.entries(permissions).forEach(entry=>{let[type,enabled]=entry;type=this.parseOutputPermission(type);if(enabled){this.rawPermissions.push(this.buildPermission(type,role));}});this.permissions.push({role,...permissions,});this.reset();},updatePermission(index){setTimeout(()=>{const permission=this.permissions[index];Object.keys(permission).forEach(key=>{if(key==='role'){return;} +if(existing===undefined){let newPermission={role,create:false,read:false,update:false,xdelete:false,};newPermission[type]=true;this.permissions.push(newPermission);} +if(index!==-1){existing[type]=true;this.permissions[index]=existing;}});},addPermission(formId){if(this.permissions.length>0&&!this.validate(formId,this.permissions.length-1)){return;} +this.permissions.push({role:'',create:false,read:false,update:false,xdelete:false,});},updatePermission(index){setTimeout(()=>{const permission=this.permissions[index];Object.keys(permission).forEach(key=>{if(key==='role'){return;} const parsedKey=this.parseOutputPermission(key);const permissionString=this.buildPermission(parsedKey,permission.role);if(permission[key]){if(!this.rawPermissions.includes(permissionString)){this.rawPermissions.push(permissionString);}}else{this.rawPermissions=this.rawPermissions.filter(p=>{return!p.includes(permissionString);});}});});},removePermission(index){let row=this.permissions.splice(index,1);if(row.length===1){this.rawPermissions=this.rawPermissions.filter(p=>!p.includes(row[0].role));}},parsePermission(permission){let parts=permission.split('(');let type=parts[0];let role=parts[1].replace(')','').replace(' ','').replaceAll('"','');return{type,role};},buildPermission(type,role){return`${type}("${role}")`},parseInputPermission(key){if(key==='delete'){return'xdelete';} return key;},parseOutputPermission(key){if(key==='xdelete'){return'delete';} -return key;},validate(formId,role,permissions){const form=document.getElementById(formId);const input=document.getElementById(`${formId}Input`);input.setCustomValidity('');if(!Object.values(permissions).some(p=>p)){input.setCustomValidity('No permissions selected');} -if(this.permissions.some(p=>p.role===role)){input.setCustomValidity('Role entry already exists');} -return form.reportValidity();}}));Alpine.data('permissionsRow',()=>({role:'',read:false,create:false,update:false,xdelete:false,reset(){this.role='';this.read=this.create=this.update=this.xdelete=false;}}));});})(window);(function(window){"use strict";window.ls.view.add({selector:"data-service",controller:function(element,view,container,form,alerts,expression,window){let action=element.dataset["service"];let service=element.dataset["name"]||null;let event=expression.parse(element.dataset["event"]);let confirm=element.dataset["confirm"]||"";let loading=element.dataset["loading"]||"";let loaderId=null;let scope=element.dataset["scope"]||"sdk";let success=element.dataset["success"]||"";let failure=element.dataset["failure"]||"";let running=false;let callbacks={hide:function(){return function(){return element.style.opacity='0';};},reset:function(){return function(){if("FORM"===element.tagName){return element.reset();} +return key;},validate(formId,index){const form=document.getElementById(formId);const input=document.getElementById(`${formId}Input${index}`);const permission=this.permissions[index];input.setCustomValidity('');if(permission.role===''){input.setCustomValidity('Role is required');}else if(!Object.entries(permission).some(([k,v])=>!k.includes('role')&&v)){input.setCustomValidity('No permissions selected');}else if(this.permissions.some(p=>p.role===permission.role&&p!==permission)){input.setCustomValidity('Role entry already exists');} +return form.reportValidity();},prevent(event){event.preventDefault();event.stopPropagation();}}));});})(window);(function(window){"use strict";window.ls.view.add({selector:"data-service",controller:function(element,view,container,form,alerts,expression,window){let action=element.dataset["service"];let service=element.dataset["name"]||null;let event=expression.parse(element.dataset["event"]);let confirm=element.dataset["confirm"]||"";let loading=element.dataset["loading"]||"";let loaderId=null;let scope=element.dataset["scope"]||"sdk";let success=element.dataset["success"]||"";let failure=element.dataset["failure"]||"";let running=false;let callbacks={hide:function(){return function(){return element.style.opacity='0';};},reset:function(){return function(){if("FORM"===element.tagName){return element.reset();} throw new Error("This callback is only valid for forms");};},alert:function(text,classname){return function(alerts){alerts.add({text:text,class:classname||"success"},6000);};},redirect:function(url){return function(router){if(url==="/console"){window.location=url;return;} router.change(url||"/");};},reload:function(){return function(router){router.reload();};},state:function(keys){let updateQueryString=function(key,value,url){var re=new RegExp("([?&])"+key+"=.*?(&|#|$)(.*)","gi"),hash;if(re.test(url)){if(typeof value!=="undefined"&&value!==null){return url.replace(re,"$1"+key+"="+value+"$2$3");}else{hash=url.split("#");url=hash[0].replace(re,"$1$3").replace(/(&|\?)$/,"");if(typeof hash[1]!=="undefined"&&hash[1]!==null){url+="#"+hash[1];} return url;}}else{if(typeof value!=="undefined"&&value!==null){var separator=url.indexOf("?")!==-1?"&":"?";hash=url.split("#");url=hash[0]+separator+key+"="+value;if(typeof hash[1]!=="undefined"&&hash[1]!==null){url+="#"+hash[1];} diff --git a/public/dist/scripts/app.js b/public/dist/scripts/app.js index ed3fc41d53..1ce692ef9f 100644 --- a/public/dist/scripts/app.js +++ b/public/dist/scripts/app.js @@ -603,14 +603,13 @@ if(this.action){event+=`.${this.action}`;} if(this.attribute){event+=`.${this.attribute}`;} this.events.add(event);this.reset();},removeEvent(value){this.events.delete(value);}}));});})(window);(function(window){document.addEventListener('alpine:init',()=>{Alpine.data('permissionsMatrix',()=>({permissions:[],rawPermissions:[],load(permissions){if(permissions===undefined){return;} this.rawPermissions=permissions;permissions.map(p=>{let{type,role}=this.parsePermission(p);type=this.parseInputPermission(type);let index=-1;let existing=this.permissions.find((p,idx)=>{if(p.role===role){index=idx;return true;}}) -if(existing===undefined){this.permissions.push({role,[type]:true,});} -if(index!==-1){existing[type]=true;this.permissions[index]=existing;}});},addPermission(formId,role,permissions){if(!this.validate(formId,role,permissions)){return;} -Object.entries(permissions).forEach(entry=>{let[type,enabled]=entry;type=this.parseOutputPermission(type);if(enabled){this.rawPermissions.push(this.buildPermission(type,role));}});this.permissions.push({role,...permissions,});this.reset();},updatePermission(index){setTimeout(()=>{const permission=this.permissions[index];Object.keys(permission).forEach(key=>{if(key==='role'){return;} +if(existing===undefined){let newPermission={role,create:false,read:false,update:false,xdelete:false,};newPermission[type]=true;this.permissions.push(newPermission);} +if(index!==-1){existing[type]=true;this.permissions[index]=existing;}});},addPermission(formId){if(this.permissions.length>0&&!this.validate(formId,this.permissions.length-1)){return;} +this.permissions.push({role:'',create:false,read:false,update:false,xdelete:false,});},updatePermission(index){setTimeout(()=>{const permission=this.permissions[index];Object.keys(permission).forEach(key=>{if(key==='role'){return;} const parsedKey=this.parseOutputPermission(key);const permissionString=this.buildPermission(parsedKey,permission.role);if(permission[key]){if(!this.rawPermissions.includes(permissionString)){this.rawPermissions.push(permissionString);}}else{this.rawPermissions=this.rawPermissions.filter(p=>{return!p.includes(permissionString);});}});});},removePermission(index){let row=this.permissions.splice(index,1);if(row.length===1){this.rawPermissions=this.rawPermissions.filter(p=>!p.includes(row[0].role));}},parsePermission(permission){let parts=permission.split('(');let type=parts[0];let role=parts[1].replace(')','').replace(' ','').replaceAll('"','');return{type,role};},buildPermission(type,role){return`${type}("${role}")`},parseInputPermission(key){if(key==='delete'){return'xdelete';} return key;},parseOutputPermission(key){if(key==='xdelete'){return'delete';} -return key;},validate(formId,role,permissions){const form=document.getElementById(formId);const input=document.getElementById(`${formId}Input`);input.setCustomValidity('');if(!Object.values(permissions).some(p=>p)){input.setCustomValidity('No permissions selected');} -if(this.permissions.some(p=>p.role===role)){input.setCustomValidity('Role entry already exists');} -return form.reportValidity();}}));Alpine.data('permissionsRow',()=>({role:'',read:false,create:false,update:false,xdelete:false,reset(){this.role='';this.read=this.create=this.update=this.xdelete=false;}}));});})(window);(function(window){"use strict";window.ls.view.add({selector:"data-service",controller:function(element,view,container,form,alerts,expression,window){let action=element.dataset["service"];let service=element.dataset["name"]||null;let event=expression.parse(element.dataset["event"]);let confirm=element.dataset["confirm"]||"";let loading=element.dataset["loading"]||"";let loaderId=null;let scope=element.dataset["scope"]||"sdk";let success=element.dataset["success"]||"";let failure=element.dataset["failure"]||"";let running=false;let callbacks={hide:function(){return function(){return element.style.opacity='0';};},reset:function(){return function(){if("FORM"===element.tagName){return element.reset();} +return key;},validate(formId,index){const form=document.getElementById(formId);const input=document.getElementById(`${formId}Input${index}`);const permission=this.permissions[index];input.setCustomValidity('');if(permission.role===''){input.setCustomValidity('Role is required');}else if(!Object.entries(permission).some(([k,v])=>!k.includes('role')&&v)){input.setCustomValidity('No permissions selected');}else if(this.permissions.some(p=>p.role===permission.role&&p!==permission)){input.setCustomValidity('Role entry already exists');} +return form.reportValidity();},prevent(event){event.preventDefault();event.stopPropagation();}}));});})(window);(function(window){"use strict";window.ls.view.add({selector:"data-service",controller:function(element,view,container,form,alerts,expression,window){let action=element.dataset["service"];let service=element.dataset["name"]||null;let event=expression.parse(element.dataset["event"]);let confirm=element.dataset["confirm"]||"";let loading=element.dataset["loading"]||"";let loaderId=null;let scope=element.dataset["scope"]||"sdk";let success=element.dataset["success"]||"";let failure=element.dataset["failure"]||"";let running=false;let callbacks={hide:function(){return function(){return element.style.opacity='0';};},reset:function(){return function(){if("FORM"===element.tagName){return element.reset();} throw new Error("This callback is only valid for forms");};},alert:function(text,classname){return function(alerts){alerts.add({text:text,class:classname||"success"},6000);};},redirect:function(url){return function(router){if(url==="/console"){window.location=url;return;} router.change(url||"/");};},reload:function(){return function(router){router.reload();};},state:function(keys){let updateQueryString=function(key,value,url){var re=new RegExp("([?&])"+key+"=.*?(&|#|$)(.*)","gi"),hash;if(re.test(url)){if(typeof value!=="undefined"&&value!==null){return url.replace(re,"$1"+key+"="+value+"$2$3");}else{hash=url.split("#");url=hash[0].replace(re,"$1$3").replace(/(&|\?)$/,"");if(typeof hash[1]!=="undefined"&&hash[1]!==null){url+="#"+hash[1];} return url;}}else{if(typeof value!=="undefined"&&value!==null){var separator=url.indexOf("?")!==-1?"&":"?";hash=url.split("#");url=hash[0]+separator+key+"="+value;if(typeof hash[1]!=="undefined"&&hash[1]!==null){url+="#"+hash[1];} diff --git a/public/scripts/permissions-matrix.js b/public/scripts/permissions-matrix.js index a4d8cc53e9..81a869a8f4 100644 --- a/public/scripts/permissions-matrix.js +++ b/public/scripts/permissions-matrix.js @@ -22,10 +22,15 @@ } }) if (existing === undefined) { - this.permissions.push({ + let newPermission = { role, - [type]: true, - }); + create: false, + read: false, + update: false, + xdelete: false, + }; + newPermission[type] = true; + this.permissions.push(newPermission); } if (index !== -1) { existing[type] = true; @@ -33,22 +38,18 @@ } }); }, - addPermission(formId, role, permissions) { - if (!this.validate(formId, role, permissions)) { + addPermission(formId) { + if (this.permissions.length > 0 + && !this.validate(formId, this.permissions.length - 1)) { return; } - Object.entries(permissions).forEach(entry => { - let [type, enabled] = entry; - type = this.parseOutputPermission(type); - if (enabled) { - this.rawPermissions.push(this.buildPermission(type, role)); - } - }); this.permissions.push({ - role, - ...permissions, + role: '', + create: false, + read: false, + update: false, + xdelete: false, }); - this.reset(); }, updatePermission(index) { // Because the x-model does not update before the click event, @@ -106,31 +107,26 @@ } return key; }, - validate(formId, role, permissions) { + validate(formId, index) { const form = document.getElementById(formId); - const input = document.getElementById(`${formId}Input`); + const input = document.getElementById(`${formId}Input${index}`); + const permission = this.permissions[index]; input.setCustomValidity(''); - if (!Object.values(permissions).some(p => p)) { + if (permission.role === '') { + input.setCustomValidity('Role is required'); + } else if (!Object.entries(permission).some(([k, v]) => !k.includes('role') && v)) { input.setCustomValidity('No permissions selected'); - } - if (this.permissions.some(p => p.role === role)) { + } else if (this.permissions.some(p => p.role === permission.role && p !== permission)) { input.setCustomValidity('Role entry already exists'); } - + return form.reportValidity(); - } - })); - Alpine.data('permissionsRow', () => ({ - role: '', - read: false, - create: false, - update: false, - xdelete: false, - reset() { - this.role = ''; - this.read = this.create = this.update = this.xdelete = false; + }, + prevent(event) { + event.preventDefault(); + event.stopPropagation(); } })); }); diff --git a/tests/e2e/General/UsageTest.php b/tests/e2e/General/UsageTest.php index c98742251e..5126b8eb8d 100644 --- a/tests/e2e/General/UsageTest.php +++ b/tests/e2e/General/UsageTest.php @@ -26,8 +26,7 @@ class UsageTest extends Scope parent::setUp(); } - #[Retry(count: 1)] - public function testUsersStats(): array + public function testPrepareUsersStats(): array { $project = $this->getProject(true); $projectId = $project['$id']; @@ -63,8 +62,27 @@ class UsageTest extends Scope } } + return [ + 'projectId' => $projectId, + 'headers' => $headers, + 'usersCount' => $usersCount, + 'requestsCount' => $requestsCount + ]; + } + + /** + * @depends testPrepareUsersStats + */ + #[Retry(count: 1)] + public function testUsersStats(array $data): array + { sleep(35); + $projectId = $data['projectId']; + $headers = $data['headers']; + $usersCount = $data['usersCount']; + $requestsCount = $data['requestsCount']; + // console request $cheaders = [ 'origin' => 'http://localhost', @@ -94,8 +112,7 @@ class UsageTest extends Scope } /** @depends testUsersStats */ - #[Retry(count: 1)] - public function testStorageStats(array $data): array + public function testPrepareStorageStats(array $data): array { $projectId = $data['projectId']; $headers = $data['headers']; @@ -190,6 +207,40 @@ class UsageTest extends Scope } } + return array_merge($data, [ + 'bucketId' => $bucketId, + 'bucketsCount' => $bucketsCount, + 'requestsCount' => $requestsCount, + 'storageTotal' => $storageTotal, + 'bucketsCreate' => $bucketsCreate, + 'bucketsDelete' => $bucketsDelete, + 'bucketsRead' => $bucketsRead, + 'filesCount' => $filesCount, + 'filesRead' => $filesRead, + 'filesCreate' => $filesCreate, + 'filesDelete' => $filesDelete, + ]); + } + + /** + * @depends testPrepareStorageStats + */ + #[Retry(count: 1)] + public function testStorageStats(array $data): array + { + $projectId = $data['projectId']; + $bucketId = $data['bucketId']; + $bucketsCount = $data['bucketsCount']; + $requestsCount = $data['requestsCount']; + $storageTotal = $data['storageTotal']; + $bucketsCreate = $data['bucketsCreate']; + $bucketsDelete = $data['bucketsDelete']; + $bucketsRead = $data['bucketsRead']; + $filesCount = $data['filesCount']; + $filesRead = $data['filesRead']; + $filesCreate = $data['filesCreate']; + $filesDelete = $data['filesDelete']; + sleep(35); // console request @@ -239,8 +290,7 @@ class UsageTest extends Scope } /** @depends testStorageStats */ - #[Retry(count: 1)] - public function testDatabaseStats(array $data): array + public function testPrepareDatabaseStats(array $data): array { $headers = $data['headers']; $projectId = $data['projectId']; @@ -366,6 +416,58 @@ class UsageTest extends Scope } } + $data = array_merge($data, [ + 'databaseId' => $databaseId, + 'collectionId' => $collectionId, + + 'requestsCount' => $requestsCount, + 'databasesCount' => $databasesCount, + 'databasesCreate' => $databasesCreate, + 'databasesRead' => $databasesRead, + 'databasesDelete' => $databasesDelete, + + 'collectionsCount' => $collectionsCount, + 'collectionsCreate' => $collectionsCreate, + 'collectionsRead' => $collectionsRead, + 'collectionsUpdate' => $collectionsUpdate, + 'collectionsDelete' => $collectionsDelete, + + 'documentsCount' => $documentsCount, + 'documentsCreate' => $documentsCreate, + 'documentsRead' => $documentsRead, + 'documentsDelete' => $documentsDelete, + ]); + + return $data; + } + + /** @depends testPrepareDatabaseStats */ + #[Retry(count: 1)] + public function testDatabaseStats(array $data): array + { + $headers = $data['headers']; + $projectId = $data['projectId']; + + $databaseId = $data['databaseId']; + $collectionId = $data['collectionId']; + + $requestsCount = $data['requestsCount']; + $databasesCount = $data['databasesCount']; + $databasesCreate = $data['databasesCreate']; + $databasesRead = $data['databasesRead']; + $databasesDelete = $data['databasesDelete']; + + $collectionsCount = $data['collectionsCount']; + $collectionsCreate = $data['collectionsCreate']; + $collectionsRead = $data['collectionsRead']; + $collectionsUpdate = $data['collectionsUpdate']; + $collectionsDelete = $data['collectionsDelete']; + + $documentsCount = $data['documentsCount']; + $documentsCreate = $data['documentsCreate']; + $documentsRead = $data['documentsRead']; + $documentsDelete = $data['documentsDelete']; + sleep(35); // check datbase stats @@ -440,8 +542,7 @@ class UsageTest extends Scope /** @depends testDatabaseStats */ - #[Retry(count: 1)] - public function testFunctionsStats(array $data): void + public function testPrepareFunctionsStats(array $data): array { $headers = $data['headers']; $functionId = ''; @@ -526,6 +627,26 @@ class UsageTest extends Scope } $executionTime += (int) ($execution['body']['duration'] * 1000); + $data = array_merge($data, [ + 'functionId' => $functionId, + 'executionTime' => $executionTime, + 'executions' => $executions, + 'failures' => $failures, + ]); + + return $data; + } + + /** @depends testPrepareFunctionsStats */ + #[Retry(count: 1)] + public function testFunctionsStats(array $data): void + { + $headers = $data['headers']; + $functionId = $data['functionId']; + $executionTime = $data['executionTime']; + $executions = $data['executions']; + $failures = $data['failures']; + sleep(25); $response = $this->client->call(Client::METHOD_GET, '/functions/' . $functionId . '/usage', $headers, [ diff --git a/tests/resources/functions/dart/main.dart b/tests/resources/functions/dart/main.dart index 93463e9321..0a6cabdac7 100644 --- a/tests/resources/functions/dart/main.dart +++ b/tests/resources/functions/dart/main.dart @@ -2,7 +2,7 @@ 'req' variable has: 'headers' - object with request headers 'payload' - object with request body data - 'env' - object with environment variables + 'variables' - object with function variables 'res' variable has: 'send(text, status)' - function to return text response. Status code defaults to 200 'json(obj, status)' - function to return JSON response. Status code defaults to 200 @@ -12,18 +12,18 @@ Future start(final request, final response) async { response.json({ - 'APPWRITE_FUNCTION_ID' : request.env['APPWRITE_FUNCTION_ID'], - 'APPWRITE_FUNCTION_NAME' : request.env['APPWRITE_FUNCTION_NAME'], - 'APPWRITE_FUNCTION_DEPLOYMENT' : request.env['APPWRITE_FUNCTION_DEPLOYMENT'], - 'APPWRITE_FUNCTION_TRIGGER' : request.env['APPWRITE_FUNCTION_TRIGGER'], - 'APPWRITE_FUNCTION_RUNTIME_NAME' : request.env['APPWRITE_FUNCTION_RUNTIME_NAME'], - 'APPWRITE_FUNCTION_RUNTIME_VERSION' : request.env['APPWRITE_FUNCTION_RUNTIME_VERSION'], - 'APPWRITE_FUNCTION_EVENT' : request.env['APPWRITE_FUNCTION_EVENT'], - 'APPWRITE_FUNCTION_EVENT_DATA' : request.env['APPWRITE_FUNCTION_EVENT_DATA'], - 'APPWRITE_FUNCTION_DATA' : request.env['APPWRITE_FUNCTION_DATA'], - 'APPWRITE_FUNCTION_USER_ID' : request.env['APPWRITE_FUNCTION_USER_ID'], - 'APPWRITE_FUNCTION_JWT' : request.env['APPWRITE_FUNCTION_JWT'], - 'APPWRITE_FUNCTION_PROJECT_ID' : request.env['APPWRITE_FUNCTION_PROJECT_ID'], - 'CUSTOM_VARIABLE' : request.env['CUSTOM_VARIABLE'] + 'APPWRITE_FUNCTION_ID' : request.variables['APPWRITE_FUNCTION_ID'], + 'APPWRITE_FUNCTION_NAME' : request.variables['APPWRITE_FUNCTION_NAME'], + 'APPWRITE_FUNCTION_DEPLOYMENT' : request.variables['APPWRITE_FUNCTION_DEPLOYMENT'], + 'APPWRITE_FUNCTION_TRIGGER' : request.variables['APPWRITE_FUNCTION_TRIGGER'], + 'APPWRITE_FUNCTION_RUNTIME_NAME' : request.variables['APPWRITE_FUNCTION_RUNTIME_NAME'], + 'APPWRITE_FUNCTION_RUNTIME_VERSION' : request.variables['APPWRITE_FUNCTION_RUNTIME_VERSION'], + 'APPWRITE_FUNCTION_EVENT' : request.variables['APPWRITE_FUNCTION_EVENT'], + 'APPWRITE_FUNCTION_EVENT_DATA' : request.variables['APPWRITE_FUNCTION_EVENT_DATA'], + 'APPWRITE_FUNCTION_DATA' : request.variables['APPWRITE_FUNCTION_DATA'], + 'APPWRITE_FUNCTION_USER_ID' : request.variables['APPWRITE_FUNCTION_USER_ID'], + 'APPWRITE_FUNCTION_JWT' : request.variables['APPWRITE_FUNCTION_JWT'], + 'APPWRITE_FUNCTION_PROJECT_ID' : request.variables['APPWRITE_FUNCTION_PROJECT_ID'], + 'CUSTOM_VARIABLE' : request.variables['CUSTOM_VARIABLE'] }); } \ No newline at end of file diff --git a/tests/resources/functions/node/index.js b/tests/resources/functions/node/index.js index 67e011e77e..7f190bcaf5 100644 --- a/tests/resources/functions/node/index.js +++ b/tests/resources/functions/node/index.js @@ -2,7 +2,7 @@ 'req' variable has: 'headers' - object with request headers 'payload' - object with request body data - 'env' - object with environment variables + 'variables' - object with function variables 'res' variable has: 'send(text, status)' - function to return text response. Status code defaults to 200 'json(obj, status)' - function to return JSON response. Status code defaults to 200 @@ -12,18 +12,18 @@ module.exports = async(req, res) => { res.json({ - 'APPWRITE_FUNCTION_ID' : req.env.APPWRITE_FUNCTION_ID, - 'APPWRITE_FUNCTION_NAME' : req.env.APPWRITE_FUNCTION_NAME, - 'APPWRITE_FUNCTION_DEPLOYMENT' : req.env.APPWRITE_FUNCTION_DEPLOYMENT, - 'APPWRITE_FUNCTION_TRIGGER' : req.env.APPWRITE_FUNCTION_TRIGGER, - 'APPWRITE_FUNCTION_RUNTIME_NAME' : req.env.APPWRITE_FUNCTION_RUNTIME_NAME, - 'APPWRITE_FUNCTION_RUNTIME_VERSION' : req.env.APPWRITE_FUNCTION_RUNTIME_VERSION, - 'APPWRITE_FUNCTION_EVENT' : req.env.APPWRITE_FUNCTION_EVENT, - 'APPWRITE_FUNCTION_EVENT_DATA' : req.env.APPWRITE_FUNCTION_EVENT_DATA, - 'APPWRITE_FUNCTION_DATA' : req.env.APPWRITE_FUNCTION_DATA, - 'APPWRITE_FUNCTION_USER_ID' : req.env.APPWRITE_FUNCTION_USER_ID, - 'APPWRITE_FUNCTION_JWT' : req.env.APPWRITE_FUNCTION_JWT, - 'APPWRITE_FUNCTION_PROJECT_ID' : req.env.APPWRITE_FUNCTION_PROJECT_ID, - 'CUSTOM_VARIABLE' : req.env.CUSTOM_VARIABLE + 'APPWRITE_FUNCTION_ID' : req.variables.APPWRITE_FUNCTION_ID, + 'APPWRITE_FUNCTION_NAME' : req.variables.APPWRITE_FUNCTION_NAME, + 'APPWRITE_FUNCTION_DEPLOYMENT' : req.variables.APPWRITE_FUNCTION_DEPLOYMENT, + 'APPWRITE_FUNCTION_TRIGGER' : req.variables.APPWRITE_FUNCTION_TRIGGER, + 'APPWRITE_FUNCTION_RUNTIME_NAME' : req.variables.APPWRITE_FUNCTION_RUNTIME_NAME, + 'APPWRITE_FUNCTION_RUNTIME_VERSION' : req.variables.APPWRITE_FUNCTION_RUNTIME_VERSION, + 'APPWRITE_FUNCTION_EVENT' : req.variables.APPWRITE_FUNCTION_EVENT, + 'APPWRITE_FUNCTION_EVENT_DATA' : req.variables.APPWRITE_FUNCTION_EVENT_DATA, + 'APPWRITE_FUNCTION_DATA' : req.variables.APPWRITE_FUNCTION_DATA, + 'APPWRITE_FUNCTION_USER_ID' : req.variables.APPWRITE_FUNCTION_USER_ID, + 'APPWRITE_FUNCTION_JWT' : req.variables.APPWRITE_FUNCTION_JWT, + 'APPWRITE_FUNCTION_PROJECT_ID' : req.variables.APPWRITE_FUNCTION_PROJECT_ID, + 'CUSTOM_VARIABLE' : req.variables.CUSTOM_VARIABLE }); } \ No newline at end of file diff --git a/tests/resources/functions/php-fn/index.php b/tests/resources/functions/php-fn/index.php index e3ce05829c..7947c4a6a6 100644 --- a/tests/resources/functions/php-fn/index.php +++ b/tests/resources/functions/php-fn/index.php @@ -4,17 +4,17 @@ return function ($request, $response) { \var_dump("Amazing Function Log"); // We test logs (stdout) visibility with this $response->json([ - 'APPWRITE_FUNCTION_ID' => $request['env']['APPWRITE_FUNCTION_ID'], - 'APPWRITE_FUNCTION_NAME' => $request['env']['APPWRITE_FUNCTION_NAME'], - 'APPWRITE_FUNCTION_DEPLOYMENT' => $request['env']['APPWRITE_FUNCTION_DEPLOYMENT'], - 'APPWRITE_FUNCTION_TRIGGER' => $request['env']['APPWRITE_FUNCTION_TRIGGER'], - 'APPWRITE_FUNCTION_RUNTIME_NAME' => $request['env']['APPWRITE_FUNCTION_RUNTIME_NAME'], - 'APPWRITE_FUNCTION_RUNTIME_VERSION' => $request['env']['APPWRITE_FUNCTION_RUNTIME_VERSION'], - 'APPWRITE_FUNCTION_EVENT' => $request['env']['APPWRITE_FUNCTION_EVENT'], - 'APPWRITE_FUNCTION_EVENT_DATA' => $request['env']['APPWRITE_FUNCTION_EVENT_DATA'], - 'APPWRITE_FUNCTION_DATA' => $request['env']['APPWRITE_FUNCTION_DATA'], - 'APPWRITE_FUNCTION_USER_ID' => $request['env']['APPWRITE_FUNCTION_USER_ID'], - 'APPWRITE_FUNCTION_JWT' => $request['env']['APPWRITE_FUNCTION_JWT'], - 'APPWRITE_FUNCTION_PROJECT_ID' => $request['env']['APPWRITE_FUNCTION_PROJECT_ID'], + 'APPWRITE_FUNCTION_ID' => $request['variables']['APPWRITE_FUNCTION_ID'], + 'APPWRITE_FUNCTION_NAME' => $request['variables']['APPWRITE_FUNCTION_NAME'], + 'APPWRITE_FUNCTION_DEPLOYMENT' => $request['variables']['APPWRITE_FUNCTION_DEPLOYMENT'], + 'APPWRITE_FUNCTION_TRIGGER' => $request['variables']['APPWRITE_FUNCTION_TRIGGER'], + 'APPWRITE_FUNCTION_RUNTIME_NAME' => $request['variables']['APPWRITE_FUNCTION_RUNTIME_NAME'], + 'APPWRITE_FUNCTION_RUNTIME_VERSION' => $request['variables']['APPWRITE_FUNCTION_RUNTIME_VERSION'], + 'APPWRITE_FUNCTION_EVENT' => $request['variables']['APPWRITE_FUNCTION_EVENT'], + 'APPWRITE_FUNCTION_EVENT_DATA' => $request['variables']['APPWRITE_FUNCTION_EVENT_DATA'], + 'APPWRITE_FUNCTION_DATA' => $request['variables']['APPWRITE_FUNCTION_DATA'], + 'APPWRITE_FUNCTION_USER_ID' => $request['variables']['APPWRITE_FUNCTION_USER_ID'], + 'APPWRITE_FUNCTION_JWT' => $request['variables']['APPWRITE_FUNCTION_JWT'], + 'APPWRITE_FUNCTION_PROJECT_ID' => $request['variables']['APPWRITE_FUNCTION_PROJECT_ID'], ]); }; diff --git a/tests/resources/functions/php-large/index.php b/tests/resources/functions/php-large/index.php index 8bd0de5e60..84b6a991fe 100644 --- a/tests/resources/functions/php-large/index.php +++ b/tests/resources/functions/php-large/index.php @@ -2,14 +2,14 @@ return function ($request, $response) { return $response->json([ - 'APPWRITE_FUNCTION_ID' => $request['env']['APPWRITE_FUNCTION_ID'], - 'APPWRITE_FUNCTION_NAME' => $request['env']['APPWRITE_FUNCTION_NAME'], - 'APPWRITE_FUNCTION_DEPLOYMENT' => $request['env']['APPWRITE_FUNCTION_DEPLOYMENT'], - 'APPWRITE_FUNCTION_TRIGGER' => $request['env']['APPWRITE_FUNCTION_TRIGGER'], - 'APPWRITE_FUNCTION_RUNTIME_NAME' => $request['env']['APPWRITE_FUNCTION_RUNTIME_NAME'], - 'APPWRITE_FUNCTION_RUNTIME_VERSION' => $request['env']['APPWRITE_FUNCTION_RUNTIME_VERSION'], - 'APPWRITE_FUNCTION_EVENT' => $request['env']['APPWRITE_FUNCTION_EVENT'], - 'APPWRITE_FUNCTION_EVENT_DATA' => $request['env']['APPWRITE_FUNCTION_EVENT_DATA'], + 'APPWRITE_FUNCTION_ID' => $request['variables']['APPWRITE_FUNCTION_ID'], + 'APPWRITE_FUNCTION_NAME' => $request['variables']['APPWRITE_FUNCTION_NAME'], + 'APPWRITE_FUNCTION_DEPLOYMENT' => $request['variables']['APPWRITE_FUNCTION_DEPLOYMENT'], + 'APPWRITE_FUNCTION_TRIGGER' => $request['variables']['APPWRITE_FUNCTION_TRIGGER'], + 'APPWRITE_FUNCTION_RUNTIME_NAME' => $request['variables']['APPWRITE_FUNCTION_RUNTIME_NAME'], + 'APPWRITE_FUNCTION_RUNTIME_VERSION' => $request['variables']['APPWRITE_FUNCTION_RUNTIME_VERSION'], + 'APPWRITE_FUNCTION_EVENT' => $request['variables']['APPWRITE_FUNCTION_EVENT'], + 'APPWRITE_FUNCTION_EVENT_DATA' => $request['variables']['APPWRITE_FUNCTION_EVENT_DATA'], 'UNICODE_TEST' => "êä" ]); }; diff --git a/tests/resources/functions/php/index.php b/tests/resources/functions/php/index.php index 8bd0de5e60..84b6a991fe 100644 --- a/tests/resources/functions/php/index.php +++ b/tests/resources/functions/php/index.php @@ -2,14 +2,14 @@ return function ($request, $response) { return $response->json([ - 'APPWRITE_FUNCTION_ID' => $request['env']['APPWRITE_FUNCTION_ID'], - 'APPWRITE_FUNCTION_NAME' => $request['env']['APPWRITE_FUNCTION_NAME'], - 'APPWRITE_FUNCTION_DEPLOYMENT' => $request['env']['APPWRITE_FUNCTION_DEPLOYMENT'], - 'APPWRITE_FUNCTION_TRIGGER' => $request['env']['APPWRITE_FUNCTION_TRIGGER'], - 'APPWRITE_FUNCTION_RUNTIME_NAME' => $request['env']['APPWRITE_FUNCTION_RUNTIME_NAME'], - 'APPWRITE_FUNCTION_RUNTIME_VERSION' => $request['env']['APPWRITE_FUNCTION_RUNTIME_VERSION'], - 'APPWRITE_FUNCTION_EVENT' => $request['env']['APPWRITE_FUNCTION_EVENT'], - 'APPWRITE_FUNCTION_EVENT_DATA' => $request['env']['APPWRITE_FUNCTION_EVENT_DATA'], + 'APPWRITE_FUNCTION_ID' => $request['variables']['APPWRITE_FUNCTION_ID'], + 'APPWRITE_FUNCTION_NAME' => $request['variables']['APPWRITE_FUNCTION_NAME'], + 'APPWRITE_FUNCTION_DEPLOYMENT' => $request['variables']['APPWRITE_FUNCTION_DEPLOYMENT'], + 'APPWRITE_FUNCTION_TRIGGER' => $request['variables']['APPWRITE_FUNCTION_TRIGGER'], + 'APPWRITE_FUNCTION_RUNTIME_NAME' => $request['variables']['APPWRITE_FUNCTION_RUNTIME_NAME'], + 'APPWRITE_FUNCTION_RUNTIME_VERSION' => $request['variables']['APPWRITE_FUNCTION_RUNTIME_VERSION'], + 'APPWRITE_FUNCTION_EVENT' => $request['variables']['APPWRITE_FUNCTION_EVENT'], + 'APPWRITE_FUNCTION_EVENT_DATA' => $request['variables']['APPWRITE_FUNCTION_EVENT_DATA'], 'UNICODE_TEST' => "êä" ]); }; diff --git a/tests/resources/functions/python/main.py b/tests/resources/functions/python/main.py index af7d79ab23..ff78d6d336 100644 --- a/tests/resources/functions/python/main.py +++ b/tests/resources/functions/python/main.py @@ -3,7 +3,7 @@ import json # 'req' variable has: # 'headers' - object with request headers # 'payload' - object with request body data -# 'env' - object with environment variables +# 'variables' - object with function variables # 'res' variable has: # 'send(text, status)' - function to return text response. Status code defaults to 200 # 'json(obj, status)' - function to return JSON response. Status code defaults to 200 @@ -12,17 +12,17 @@ import json def main(request, response): return response.json({ - 'APPWRITE_FUNCTION_ID' : request.env['APPWRITE_FUNCTION_ID'], - 'APPWRITE_FUNCTION_NAME' : request.env['APPWRITE_FUNCTION_NAME'], - 'APPWRITE_FUNCTION_DEPLOYMENT' : request.env['APPWRITE_FUNCTION_DEPLOYMENT'], - 'APPWRITE_FUNCTION_TRIGGER' : request.env['APPWRITE_FUNCTION_TRIGGER'], - 'APPWRITE_FUNCTION_RUNTIME_NAME' : request.env['APPWRITE_FUNCTION_RUNTIME_NAME'], - 'APPWRITE_FUNCTION_RUNTIME_VERSION' : request.env['APPWRITE_FUNCTION_RUNTIME_VERSION'], - 'APPWRITE_FUNCTION_EVENT' : request.env['APPWRITE_FUNCTION_EVENT'], - 'APPWRITE_FUNCTION_EVENT_DATA' : request.env['APPWRITE_FUNCTION_EVENT_DATA'], - 'APPWRITE_FUNCTION_DATA' : request.env['APPWRITE_FUNCTION_DATA'], - 'APPWRITE_FUNCTION_USER_ID' : request.env['APPWRITE_FUNCTION_USER_ID'], - 'APPWRITE_FUNCTION_JWT' : request.env['APPWRITE_FUNCTION_JWT'], - 'APPWRITE_FUNCTION_PROJECT_ID' : request.env['APPWRITE_FUNCTION_PROJECT_ID'], - 'CUSTOM_VARIABLE' : request.env['CUSTOM_VARIABLE'], + 'APPWRITE_FUNCTION_ID' : request.variables['APPWRITE_FUNCTION_ID'], + 'APPWRITE_FUNCTION_NAME' : request.variables['APPWRITE_FUNCTION_NAME'], + 'APPWRITE_FUNCTION_DEPLOYMENT' : request.variables['APPWRITE_FUNCTION_DEPLOYMENT'], + 'APPWRITE_FUNCTION_TRIGGER' : request.variables['APPWRITE_FUNCTION_TRIGGER'], + 'APPWRITE_FUNCTION_RUNTIME_NAME' : request.variables['APPWRITE_FUNCTION_RUNTIME_NAME'], + 'APPWRITE_FUNCTION_RUNTIME_VERSION' : request.variables['APPWRITE_FUNCTION_RUNTIME_VERSION'], + 'APPWRITE_FUNCTION_EVENT' : request.variables['APPWRITE_FUNCTION_EVENT'], + 'APPWRITE_FUNCTION_EVENT_DATA' : request.variables['APPWRITE_FUNCTION_EVENT_DATA'], + 'APPWRITE_FUNCTION_DATA' : request.variables['APPWRITE_FUNCTION_DATA'], + 'APPWRITE_FUNCTION_USER_ID' : request.variables['APPWRITE_FUNCTION_USER_ID'], + 'APPWRITE_FUNCTION_JWT' : request.variables['APPWRITE_FUNCTION_JWT'], + 'APPWRITE_FUNCTION_PROJECT_ID' : request.variables['APPWRITE_FUNCTION_PROJECT_ID'], + 'CUSTOM_VARIABLE' : request.variables['CUSTOM_VARIABLE'], }) \ No newline at end of file diff --git a/tests/resources/functions/ruby/main.rb b/tests/resources/functions/ruby/main.rb index 41b9b0fc52..d6ccdfb073 100644 --- a/tests/resources/functions/ruby/main.rb +++ b/tests/resources/functions/ruby/main.rb @@ -2,7 +2,7 @@ 'req' variable has: 'headers' - object with request headers 'payload' - object with request body data - 'env' - object with environment variables + 'variables' - object with function variables 'res' variable has: 'send(text, status)' - function to return text response. Status code defaults to 200 'json(obj, status)' - function to return JSON response. Status code defaults to 200 @@ -12,18 +12,18 @@ def main(request, response) return response.json({ - 'APPWRITE_FUNCTION_ID' => request.env['APPWRITE_FUNCTION_ID'], - 'APPWRITE_FUNCTION_NAME' => request.env['APPWRITE_FUNCTION_NAME'], - 'APPWRITE_FUNCTION_DEPLOYMENT' => request.env['APPWRITE_FUNCTION_DEPLOYMENT'], - 'APPWRITE_FUNCTION_TRIGGER' => request.env['APPWRITE_FUNCTION_TRIGGER'], - 'APPWRITE_FUNCTION_RUNTIME_NAME' => request.env['APPWRITE_FUNCTION_RUNTIME_NAME'], - 'APPWRITE_FUNCTION_RUNTIME_VERSION' => request.env['APPWRITE_FUNCTION_RUNTIME_VERSION'], - 'APPWRITE_FUNCTION_EVENT' => request.env['APPWRITE_FUNCTION_EVENT'], - 'APPWRITE_FUNCTION_EVENT_DATA' => request.env['APPWRITE_FUNCTION_EVENT_DATA'], - 'APPWRITE_FUNCTION_DATA' => request.env['APPWRITE_FUNCTION_DATA'], - 'APPWRITE_FUNCTION_USER_ID' => request.env['APPWRITE_FUNCTION_USER_ID'], - 'APPWRITE_FUNCTION_JWT' => request.env['APPWRITE_FUNCTION_JWT'], - 'APPWRITE_FUNCTION_PROJECT_ID' => request.env['APPWRITE_FUNCTION_PROJECT_ID'], - 'CUSTOM_VARIABLE' => request.env['CUSTOM_VARIABLE'] + 'APPWRITE_FUNCTION_ID' => request.variables['APPWRITE_FUNCTION_ID'], + 'APPWRITE_FUNCTION_NAME' => request.variables['APPWRITE_FUNCTION_NAME'], + 'APPWRITE_FUNCTION_DEPLOYMENT' => request.variables['APPWRITE_FUNCTION_DEPLOYMENT'], + 'APPWRITE_FUNCTION_TRIGGER' => request.variables['APPWRITE_FUNCTION_TRIGGER'], + 'APPWRITE_FUNCTION_RUNTIME_NAME' => request.variables['APPWRITE_FUNCTION_RUNTIME_NAME'], + 'APPWRITE_FUNCTION_RUNTIME_VERSION' => request.variables['APPWRITE_FUNCTION_RUNTIME_VERSION'], + 'APPWRITE_FUNCTION_EVENT' => request.variables['APPWRITE_FUNCTION_EVENT'], + 'APPWRITE_FUNCTION_EVENT_DATA' => request.variables['APPWRITE_FUNCTION_EVENT_DATA'], + 'APPWRITE_FUNCTION_DATA' => request.variables['APPWRITE_FUNCTION_DATA'], + 'APPWRITE_FUNCTION_USER_ID' => request.variables['APPWRITE_FUNCTION_USER_ID'], + 'APPWRITE_FUNCTION_JWT' => request.variables['APPWRITE_FUNCTION_JWT'], + 'APPWRITE_FUNCTION_PROJECT_ID' => request.variables['APPWRITE_FUNCTION_PROJECT_ID'], + 'CUSTOM_VARIABLE' => request.variables['CUSTOM_VARIABLE'] }) end \ No newline at end of file diff --git a/tests/resources/functions/swift/index.swift b/tests/resources/functions/swift/index.swift index 67b0f35bec..b3dcdbc91a 100644 --- a/tests/resources/functions/swift/index.swift +++ b/tests/resources/functions/swift/index.swift @@ -1,17 +1,17 @@ func main(req: RequestValue, res: RequestResponse) throws -> RequestResponse { return res.json(data: [ - "APPWRITE_FUNCTION_ID": req.env["APPWRITE_FUNCTION_ID"], - "APPWRITE_FUNCTION_NAME": req.env["APPWRITE_FUNCTION_NAME"], - "APPWRITE_FUNCTION_DEPLOYMENT": req.env["APPWRITE_FUNCTION_DEPLOYMENT"], - "APPWRITE_FUNCTION_TRIGGER": req.env["APPWRITE_FUNCTION_TRIGGER"], - "APPWRITE_FUNCTION_RUNTIME_NAME": req.env["APPWRITE_FUNCTION_RUNTIME_NAME"], - "APPWRITE_FUNCTION_RUNTIME_VERSION": req.env["APPWRITE_FUNCTION_RUNTIME_VERSION"], - "APPWRITE_FUNCTION_EVENT": req.env["APPWRITE_FUNCTION_EVENT"], - "APPWRITE_FUNCTION_EVENT_DATA": req.env["APPWRITE_FUNCTION_EVENT_DATA"], - "APPWRITE_FUNCTION_DATA": req.env["APPWRITE_FUNCTION_DATA"], - "APPWRITE_FUNCTION_USER_ID": req.env["APPWRITE_FUNCTION_USER_ID"], - "APPWRITE_FUNCTION_JWT": req.env["APPWRITE_FUNCTION_JWT"], - "APPWRITE_FUNCTION_PROJECT_ID": req.env["APPWRITE_FUNCTION_PROJECT_ID"], - "CUSTOM_VARIABLE": req.env["CUSTOM_VARIABLE"] + "APPWRITE_FUNCTION_ID": req.variables["APPWRITE_FUNCTION_ID"], + "APPWRITE_FUNCTION_NAME": req.variables["APPWRITE_FUNCTION_NAME"], + "APPWRITE_FUNCTION_DEPLOYMENT": req.variables["APPWRITE_FUNCTION_DEPLOYMENT"], + "APPWRITE_FUNCTION_TRIGGER": req.variables["APPWRITE_FUNCTION_TRIGGER"], + "APPWRITE_FUNCTION_RUNTIME_NAME": req.variables["APPWRITE_FUNCTION_RUNTIME_NAME"], + "APPWRITE_FUNCTION_RUNTIME_VERSION": req.variables["APPWRITE_FUNCTION_RUNTIME_VERSION"], + "APPWRITE_FUNCTION_EVENT": req.variables["APPWRITE_FUNCTION_EVENT"], + "APPWRITE_FUNCTION_EVENT_DATA": req.variables["APPWRITE_FUNCTION_EVENT_DATA"], + "APPWRITE_FUNCTION_DATA": req.variables["APPWRITE_FUNCTION_DATA"], + "APPWRITE_FUNCTION_USER_ID": req.variables["APPWRITE_FUNCTION_USER_ID"], + "APPWRITE_FUNCTION_JWT": req.variables["APPWRITE_FUNCTION_JWT"], + "APPWRITE_FUNCTION_PROJECT_ID": req.variables["APPWRITE_FUNCTION_PROJECT_ID"], + "CUSTOM_VARIABLE": req.variables["CUSTOM_VARIABLE"] ]) } \ No newline at end of file