61 lines
1.4 KiB
JavaScript
61 lines
1.4 KiB
JavaScript
import test from 'brittle'
|
|
import b4a from 'b4a'
|
|
import Hyperdrive from 'hyperdrive'
|
|
import Corestore from 'corestore'
|
|
import { rmSync } from 'node:fs'
|
|
import { createVfs } from './lib/vfs/vfs.js'
|
|
|
|
function testCorestoreDir(name) {
|
|
return `/tmp/bare-os-booter-${name}-${Date.now()}-${Math.random().toString(16).slice(2)}`
|
|
}
|
|
|
|
test('guest denies /.bare sensitive operations (readdir/read/write/unlink)', async (t) => {
|
|
const dir = testCorestoreDir('vfs-bare-guest-deny')
|
|
const store = new Corestore(dir)
|
|
const sys = new Hyperdrive(store)
|
|
const personal = new Hyperdrive(store.namespace('pv-bare-deny'))
|
|
await sys.ready()
|
|
await personal.ready()
|
|
await personal.put('/.bare/account', b4a.from('acct'))
|
|
|
|
const vfs = createVfs(sys, personal, {
|
|
HOME: '/home/guest',
|
|
PWD: '/home/guest',
|
|
PATH: '/bin',
|
|
USER: 'guest'
|
|
})
|
|
vfs.bareOsIdentitySession = 'guest'
|
|
|
|
let e1 = null
|
|
try {
|
|
await vfs.readdir('/.bare/account')
|
|
} catch (e) {
|
|
e1 = e
|
|
}
|
|
t.ok(e1)
|
|
let e2 = null
|
|
try {
|
|
await vfs.readFile('/.bare/account')
|
|
} catch (e) {
|
|
e2 = e
|
|
}
|
|
t.ok(e2)
|
|
let e3 = null
|
|
try {
|
|
await vfs.writeFile('/.bare/account', b4a.from('x'))
|
|
} catch (e) {
|
|
e3 = e
|
|
}
|
|
t.ok(e3)
|
|
let e4 = null
|
|
try {
|
|
await vfs.unlink('/.bare/account')
|
|
} catch (e) {
|
|
e4 = e
|
|
}
|
|
t.ok(e4)
|
|
|
|
await store.close()
|
|
rmSync(dir, { recursive: true, force: true })
|
|
})
|