From 32c008d0087eae2a2b32f050fd2ae126a3e2c732 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Mon, 2 Apr 2018 20:16:13 +0900 Subject: Deliver posts to remote followers --- src/remote/request.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/remote/request.ts (limited to 'src/remote/request.ts') diff --git a/src/remote/request.ts b/src/remote/request.ts new file mode 100644 index 0000000000..72262cbf61 --- /dev/null +++ b/src/remote/request.ts @@ -0,0 +1,35 @@ +import { request } from 'https'; +import { sign } from 'http-signature'; +import { URL } from 'url'; +import config from '../config'; + +export default ({ account, username }, url, object) => new Promise((resolve, reject) => { + const { protocol, hostname, port, pathname, search } = new URL(url); + + const req = request({ + protocol, + hostname, + port, + method: 'POST', + path: pathname + search, + }, res => { + res.on('end', () => { + if (res.statusCode >= 200 && res.statusCode < 300) { + resolve(); + } else { + reject(res); + } + }); + + res.on('data', () => {}); + res.on('error', reject); + }); + + sign(req, { + authorizationHeaderName: 'Signature', + key: account.keypair, + keyId: `acct:${username}@${config.host}` + }); + + req.end(JSON.stringify(object)); +}); -- cgit v1.2.3-freya