diff options
| author | Akihiko Odaki <nekomanma@pixiv.co.jp> | 2018-04-02 20:16:13 +0900 |
|---|---|---|
| committer | Akihiko Odaki <nekomanma@pixiv.co.jp> | 2018-04-03 02:10:43 +0900 |
| commit | 32c008d0087eae2a2b32f050fd2ae126a3e2c732 (patch) | |
| tree | 492ee92b3c35af6a243c38e5a4fccfccdad63c7b /src/remote/request.ts | |
| parent | Fix job processor interfaces (diff) | |
| download | sharkey-32c008d0087eae2a2b32f050fd2ae126a3e2c732.tar.gz sharkey-32c008d0087eae2a2b32f050fd2ae126a3e2c732.tar.bz2 sharkey-32c008d0087eae2a2b32f050fd2ae126a3e2c732.zip | |
Deliver posts to remote followers
Diffstat (limited to 'src/remote/request.ts')
| -rw-r--r-- | src/remote/request.ts | 35 |
1 files changed, 35 insertions, 0 deletions
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)); +}); |