middleware model

This commit is contained in:
Gus Caplan 2020-12-11 13:43:51 -06:00
parent a626dc8c41
commit 21bfe3da7c
No known key found for this signature in database
GPG key ID: F00BD11880E82F0E

View file

@ -135,20 +135,37 @@ class InteractionClient extends BaseClient {
} }
} }
async handleFromHTTP(body, signature, timestamp) { middleware() {
return async (req, res, next) => {
const timestamp = req.get('x-signature-timestamp');
const signature = req.get('x-signature-ed25519');
const chunks = [];
for await (const chunk of req) {
chunks.push(chunk);
}
const body = Buffer.concat(chunks);
if (sodium === undefined) { if (sodium === undefined) {
sodium = require('../util/Sodium'); sodium = require('../util/Sodium');
} }
if (!sodium.methods.verify(Buffer.from(signature, 'hex'), Buffer.from(timestamp + body), this.publicKey)) { if (
return { status: 400, body: '' }; !sodium.methods.verify(
Buffer.from(signature, 'hex'),
Buffer.concat([Buffer.from(timestamp), body]),
this.publicKey,
)
) {
res.status(403).end();
return;
} }
const data = JSON.parse(body);
const data = JSON.parse(body.toString());
const result = await this.handle(data); const result = await this.handle(data);
res.status(200).end(JSON.stringify(result));
return { next();
status: 200,
body: JSON.stringify(result),
}; };
} }