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 | |
| 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')
| -rw-r--r-- | src/remote/activitypub/create.ts | 3 | ||||
| -rw-r--r-- | src/remote/request.ts | 35 |
2 files changed, 36 insertions, 2 deletions
diff --git a/src/remote/activitypub/create.ts b/src/remote/activitypub/create.ts index dd3f7b0227..f70f56b79f 100644 --- a/src/remote/activitypub/create.ts +++ b/src/remote/activitypub/create.ts @@ -1,6 +1,5 @@ import { JSDOM } from 'jsdom'; import config from '../../config'; -import { pack as packPost } from '../../models/post'; import RemoteUserObject, { IRemoteUserObject } from '../../models/remote-user-object'; import { IRemoteUser } from '../../models/user'; import uploadFromUrl from '../../drive/upload-from-url'; @@ -69,7 +68,7 @@ class Creator { const promises = []; if (this.distribute) { - promises.push(distributePost(this.actor, inserted.mentions, packPost(inserted))); + promises.push(distributePost(this.actor, inserted.mentions, inserted)); } // Register to search database 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)); +}); |