48 lines
1018 B
JavaScript
48 lines
1018 B
JavaScript
const objectHash = require('object-hash');
|
|
|
|
const verifySignature = require('./verify-signature');
|
|
const { forum } = require('./db');
|
|
|
|
module.exports = async (req, res) => {
|
|
const { hash } = req.params;
|
|
console.log('read', hash);
|
|
|
|
// Fetch content
|
|
let data;
|
|
try {
|
|
data = await forum.get(req.params.hash);
|
|
} catch (e) {
|
|
console.log('read error:', e.message, hash);
|
|
res.status(e.status).end();
|
|
return;
|
|
}
|
|
|
|
data.embeddedData = data.embeddedData || undefined;
|
|
|
|
const {
|
|
authors, content, signature, embeddedData,
|
|
} = data;
|
|
|
|
console.log({ content, embeddedData });
|
|
|
|
// Verify hash
|
|
const derivedHash = objectHash({
|
|
authors, content, signature, embeddedData,
|
|
});
|
|
if (derivedHash !== hash) {
|
|
console.log('error: hash mismatch');
|
|
res.status(500).end();
|
|
return;
|
|
}
|
|
|
|
// Verify signature
|
|
if (!verifySignature(data)) {
|
|
console.log('error: signature verificaition failed');
|
|
res.status(500).end();
|
|
return;
|
|
}
|
|
|
|
// Return content
|
|
res.json(data);
|
|
};
|