diff options
Diffstat (limited to 'runtime/js')
-rw-r--r-- | runtime/js/11_workers.js | 15 | ||||
-rw-r--r-- | runtime/js/40_permissions.js | 34 |
2 files changed, 46 insertions, 3 deletions
diff --git a/runtime/js/11_workers.js b/runtime/js/11_workers.js index 602046a14..a0385357d 100644 --- a/runtime/js/11_workers.js +++ b/runtime/js/11_workers.js @@ -93,7 +93,16 @@ } else if (ArrayIsArray(value)) { value = ArrayPrototypeMap(value, (route) => { if (route instanceof URL) { - route = pathFromURL(route); + if (permission === "net") { + route = route.host; + } + if (permission === "env") { + throw new Error( + `Expected 'string' for env permission, received 'URL'`, + ); + } else { + route = pathFromURL(route); + } } return route; }); @@ -115,12 +124,12 @@ write = "inherit", }) { return { - env: parseUnitPermission(env, "env"), + env: parseArrayPermission(env, "env"), hrtime: parseUnitPermission(hrtime, "hrtime"), net: parseArrayPermission(net, "net"), plugin: parseUnitPermission(plugin, "plugin"), read: parseArrayPermission(read, "read"), - run: parseUnitPermission(run, "run"), + run: parseArrayPermission(run, "run"), write: parseArrayPermission(write, "write"), }; } diff --git a/runtime/js/40_permissions.js b/runtime/js/40_permissions.js index 8e57a5b5a..019e65446 100644 --- a/runtime/js/40_permissions.js +++ b/runtime/js/40_permissions.js @@ -8,6 +8,7 @@ Deno: { core }, __bootstrap: { webUtil: { illegalConstructorKey } }, } = window; + const { pathFromURL } = window.__bootstrap.util; const { ArrayPrototypeIncludes, Map, @@ -161,6 +162,17 @@ ), ); } + + if (desc.name === "read" || desc.name === "write") { + desc.path = pathFromURL(desc.path); + } else if (desc.name === "run") { + desc.command = pathFromURL(desc.command); + } else if (desc.name === "net") { + if (desc.host instanceof URL) { + desc.host = desc.host.host; + } + } + const state = opQuery(desc); return PromiseResolve(cache(desc, state)); } @@ -173,6 +185,17 @@ ), ); } + + if (desc.name === "read" || desc.name === "write") { + desc.path = pathFromURL(desc.path); + } else if (desc.name === "run") { + desc.command = pathFromURL(desc.command); + } else if (desc.name === "net") { + if (desc.host instanceof URL) { + desc.host = desc.host.host; + } + } + const state = opRevoke(desc); return PromiseResolve(cache(desc, state)); } @@ -185,6 +208,17 @@ ), ); } + + if (desc.name === "read" || desc.name === "write") { + desc.path = pathFromURL(desc.path); + } else if (desc.name === "run") { + desc.command = pathFromURL(desc.command); + } else if (desc.name === "net") { + if (desc.host instanceof URL) { + desc.host = desc.host.host; + } + } + const state = opRequest(desc); return PromiseResolve(cache(desc, state)); } |