s3d binds one Sia account per process, so the server runs one s3d per person (pithos-hosted), started on demand and flushed and stopped when idle. Only the connected s3d data folder moves between PC and server; the Sia recovery phrase never leaves the PC and nothing is re-uploaded to Sia. Because the server holds the connection key, local Pithos encrypts names and contents before they leave the machine, with keys from the Theseus vault (or a local key file elsewhere). What s3d cannot do on its own, the gateway now enforces: public folders, expiring share links and S3 keys for other people limited to one folder with read, add-only or edit rights. Files those reach are stored readable, since visitors have no key, and go back to encrypted when the rule is removed. Sign-up needs a BNS name signature, a deposit or an invite, with a per-IP limit.
16 lines
568 B
JavaScript
16 lines
568 B
JavaScript
// Small JSON files written atomically: the gateway's whole state is files
|
|
// under its root, so a backup is a copy of one folder.
|
|
|
|
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
|
|
export function readJson(file, fallback) {
|
|
try { return JSON.parse(fs.readFileSync(file, 'utf8')); } catch { return fallback; }
|
|
}
|
|
|
|
export function writeJson(file, value) {
|
|
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
const tmp = `${file}.${process.pid}.tmp`;
|
|
fs.writeFileSync(tmp, JSON.stringify(value, null, 2), { mode: 0o600 });
|
|
fs.renameSync(tmp, file);
|
|
}
|