Skip to content

Commit

Permalink
feat(deno): support for custom deny permissions (#286)
Browse files Browse the repository at this point in the history
  • Loading branch information
wellwelwel authored May 23, 2024
1 parent 4e551f6 commit 3172c4b
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 4 deletions.
2 changes: 2 additions & 0 deletions src/bin/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ const killRange = getArg('kill-range');
const killPID = getArg('kill-pid');
const concurrency = Number(getArg('concurrency')) || undefined;
const denoAllow = getSubArg('deno-allow');
const denoDeny = getSubArg('deno-deny');

// Multiple arguments with values or not
// TODO (Custom Args)
Expand Down Expand Up @@ -82,6 +83,7 @@ if (hasArg('log-success'))
// arguments: args.length > 0 ? args : undefined,
deno: {
allow: denoAllow,
deny: denoDeny,
},
});
})();
Expand Down
8 changes: 7 additions & 1 deletion src/helpers/runner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,13 @@ export const runner = (filename: string, configs?: Configs): string[] => {
'--allow-net', // Create Service
];

return ['deno', 'run', ...denoAllow];
const denoDeny = configs?.deno?.deny
? configs.deno.deny
.map((deny) => (deny ? `--deny-${deny}` : ''))
.filter((deny) => deny)
: [];

return ['deno', 'run', ...denoAllow, ...denoDeny];
}

// Node.js
Expand Down
6 changes: 3 additions & 3 deletions test/unit/deno/allow.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { assert, describe, test } from '../../../src/index.js';
import { runner } from '../../../src/helpers/runner.js';

describe('Deno Security Arguments', { background: false, icon: '🔬' });
describe('Deno Permissions (Allow)', { background: false, icon: '🔬' });

test(() => {
assert.deepStrictEqual(
Expand Down Expand Up @@ -45,10 +45,10 @@ test(() => {
runner('', {
platform: 'deno',
deno: {
allow: ['read="file.js"', 'env'],
allow: ['read=file.js', 'env'],
},
}),
['deno', 'run', '--allow-read="file.js"', '--allow-env'],
['deno', 'run', '--allow-read=file.js', '--allow-env'],
'Custom Permissions per Files'
);

Expand Down
61 changes: 61 additions & 0 deletions test/unit/deno/deny.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { assert, describe, test } from '../../../src/index.js';
import { runner } from '../../../src/helpers/runner.js';

describe('Deno Permissions (Deny)', { background: false, icon: '🔬' });

test(() => {
assert.deepStrictEqual(
runner('', {
platform: 'deno',
deno: {
allow: [],
deny: ['read'],
},
}),
['deno', 'run', '--deny-read'],
'Custom Permission'
);

assert.deepStrictEqual(
runner('', {
platform: 'deno',
deno: {
allow: [],
deny: ['read', 'env'],
},
}),
['deno', 'run', '--deny-read', '--deny-env'],
'Custom Permissions'
);

assert.deepStrictEqual(
runner('', {
platform: 'deno',
deno: {
allow: [],
deny: ['read=file.js', 'env'],
},
}),
['deno', 'run', '--deny-read=file.js', '--deny-env'],
'Custom Permissions per Files'
);

assert.deepStrictEqual(
runner('', {
platform: 'deno',
deno: {
allow: ['read=file.js', 'net'],
deny: ['net=server.com', 'env'],
},
}),
[
'deno',
'run',
'--allow-read=file.js',
'--allow-net',
'--deny-net=server.com',
'--deny-env',
],
'Mixed Permissions'
);
});
36 changes: 36 additions & 0 deletions website/docs/documentation/poku/options/deno.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,39 @@ Clear all permissions:
```bash
npx poku --deno-allow='' ./test
```

## `deny`

> `poku(targetPaths: string | string[], configs?: Configs)`
>
> `deny: string[]`
Change permissions for **Deno**.

### API (_in-code_)

```ts
poku(['...'], {
deno: {
deny: ['write', 'sys' /* ... */],
},
});
```

```ts
poku(['...'], {
deno: {
deny: ['env=HOME', 'write' /* ... */],
},
});
```

### CLI

```bash
npx poku --deno-deny='write, sys' ./test
```

```bash
npx poku --deno-deny='env=HOME, write' ./test
```

0 comments on commit 3172c4b

Please sign in to comment.