summaryrefslogtreecommitdiff
path: root/src/processor
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-04-04 23:12:35 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-04-04 23:12:35 +0900
commite8b42d7e1668679e6a6ee0a7aea1e2ff7f37005b (patch)
tree6973284192eb419bd7bfed2361a594e668b81f9a /src/processor
parentMerge pull request #1393 from akihikodaki/duplicate (diff)
downloadsharkey-e8b42d7e1668679e6a6ee0a7aea1e2ff7f37005b.tar.gz
sharkey-e8b42d7e1668679e6a6ee0a7aea1e2ff7f37005b.tar.bz2
sharkey-e8b42d7e1668679e6a6ee0a7aea1e2ff7f37005b.zip
wip
Diffstat (limited to 'src/processor')
-rw-r--r--src/processor/db/delete-post-dependents.ts22
-rw-r--r--src/processor/db/index.ts7
-rw-r--r--src/processor/http/deliver-post.ts93
-rw-r--r--src/processor/http/follow.ts69
-rw-r--r--src/processor/http/index.ts17
-rw-r--r--src/processor/http/perform-activitypub.ts7
-rw-r--r--src/processor/http/process-inbox.ts39
-rw-r--r--src/processor/http/report-github-failure.ts24
-rw-r--r--src/processor/http/unfollow.ts56
-rw-r--r--src/processor/index.ts18
10 files changed, 0 insertions, 352 deletions
diff --git a/src/processor/db/delete-post-dependents.ts b/src/processor/db/delete-post-dependents.ts
deleted file mode 100644
index 879c41ec9c..0000000000
--- a/src/processor/db/delete-post-dependents.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import Favorite from '../../models/favorite';
-import Notification from '../../models/notification';
-import PollVote from '../../models/poll-vote';
-import PostReaction from '../../models/post-reaction';
-import PostWatching from '../../models/post-watching';
-import Post from '../../models/post';
-
-export default async ({ data }) => Promise.all([
- Favorite.remove({ postId: data._id }),
- Notification.remove({ postId: data._id }),
- PollVote.remove({ postId: data._id }),
- PostReaction.remove({ postId: data._id }),
- PostWatching.remove({ postId: data._id }),
- Post.find({ repostId: data._id }).then(reposts => Promise.all([
- Notification.remove({
- postId: {
- $in: reposts.map(({ _id }) => _id)
- }
- }),
- Post.remove({ repostId: data._id })
- ]))
-]);
diff --git a/src/processor/db/index.ts b/src/processor/db/index.ts
deleted file mode 100644
index 75838c099b..0000000000
--- a/src/processor/db/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import deletePostDependents from './delete-post-dependents';
-
-const handlers = {
- deletePostDependents
-};
-
-export default (job, done) => handlers[job.data.type](job).then(() => done(), done);
diff --git a/src/processor/http/deliver-post.ts b/src/processor/http/deliver-post.ts
deleted file mode 100644
index c00ab912c9..0000000000
--- a/src/processor/http/deliver-post.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import Channel from '../../models/channel';
-import Following from '../../models/following';
-import ChannelWatching from '../../models/channel-watching';
-import Post, { pack } from '../../models/post';
-import User, { isLocalUser } from '../../models/user';
-import stream, { publishChannelStream } from '../../publishers/stream';
-import context from '../../remote/activitypub/renderer/context';
-import renderCreate from '../../remote/activitypub/renderer/create';
-import renderNote from '../../remote/activitypub/renderer/note';
-import request from '../../remote/request';
-
-export default ({ data }) => Post.findOne({ _id: data.id }).then(post => {
- const promisedPostObj = pack(post);
- const promises = [];
-
- // タイムラインへの投稿
- if (!post.channelId) {
- promises.push(
- // Publish event to myself's stream
- promisedPostObj.then(postObj => {
- stream(post.userId, 'post', postObj);
- }),
-
- Promise.all([
- User.findOne({ _id: post.userId }),
-
- // Fetch all followers
- Following.aggregate([{
- $lookup: {
- from: 'users',
- localField: 'followerId',
- foreignField: '_id',
- as: 'follower'
- }
- }, {
- $match: {
- followeeId: post.userId
- }
- }], {
- _id: false
- })
- ]).then(([user, followers]) => Promise.all(followers.map(following => {
- if (isLocalUser(following.follower)) {
- // Publish event to followers stream
- return promisedPostObj.then(postObj => {
- stream(following.followerId, 'post', postObj);
- });
- }
-
- return renderNote(user, post).then(note => {
- const create = renderCreate(note);
- create['@context'] = context;
- return request(user, following.follower[0].account.inbox, create);
- });
- })))
- );
- }
-
- // チャンネルへの投稿
- if (post.channelId) {
- promises.push(
- // Increment channel index(posts count)
- Channel.update({ _id: post.channelId }, {
- $inc: {
- index: 1
- }
- }),
-
- // Publish event to channel
- promisedPostObj.then(postObj => {
- publishChannelStream(post.channelId, 'post', postObj);
- }),
-
- Promise.all([
- promisedPostObj,
-
- // Get channel watchers
- ChannelWatching.find({
- channelId: post.channelId,
- // 削除されたドキュメントは除く
- deletedAt: { $exists: false }
- })
- ]).then(([postObj, watches]) => {
- // チャンネルの視聴者(のタイムライン)に配信
- watches.forEach(w => {
- stream(w.userId, 'post', postObj);
- });
- })
- );
- }
-
- return Promise.all(promises);
-});
diff --git a/src/processor/http/follow.ts b/src/processor/http/follow.ts
deleted file mode 100644
index 8bf890efbc..0000000000
--- a/src/processor/http/follow.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import User, { isLocalUser, pack as packUser } from '../../models/user';
-import Following from '../../models/following';
-import FollowingLog from '../../models/following-log';
-import FollowedLog from '../../models/followed-log';
-import event from '../../publishers/stream';
-import notify from '../../publishers/notify';
-import context from '../../remote/activitypub/renderer/context';
-import render from '../../remote/activitypub/renderer/follow';
-import request from '../../remote/request';
-
-export default ({ data }) => Following.findOne({ _id: data.following }).then(({ followerId, followeeId }) => {
- const promisedFollower = User.findOne({ _id: followerId });
- const promisedFollowee = User.findOne({ _id: followeeId });
-
- return Promise.all([
- // Increment following count
- User.update(followerId, {
- $inc: {
- followingCount: 1
- }
- }),
-
- promisedFollower.then(({ followingCount }) => FollowingLog.insert({
- createdAt: data.following.createdAt,
- userId: followerId,
- count: followingCount + 1
- })),
-
- // Increment followers count
- User.update({ _id: followeeId }, {
- $inc: {
- followersCount: 1
- }
- }),
-
- promisedFollowee.then(({ followersCount }) => FollowedLog.insert({
- createdAt: data.following.createdAt,
- userId: followerId,
- count: followersCount + 1
- })),
-
- // Notify
- promisedFollowee.then(followee => followee.host === null ?
- notify(followeeId, followerId, 'follow') : null),
-
- // Publish follow event
- Promise.all([promisedFollower, promisedFollowee]).then(([follower, followee]) => {
- let followerEvent;
- let followeeEvent;
-
- if (isLocalUser(follower)) {
- followerEvent = packUser(followee, follower)
- .then(packed => event(follower._id, 'follow', packed));
- }
-
- if (isLocalUser(followee)) {
- followeeEvent = packUser(follower, followee)
- .then(packed => event(followee._id, 'followed', packed));
- } else if (isLocalUser(follower)) {
- const rendered = render(follower, followee);
- rendered['@context'] = context;
-
- followeeEvent = request(follower, followee.account.inbox, rendered);
- }
-
- return Promise.all([followerEvent, followeeEvent]);
- })
- ]);
-});
diff --git a/src/processor/http/index.ts b/src/processor/http/index.ts
deleted file mode 100644
index 8f9aa717c3..0000000000
--- a/src/processor/http/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import deliverPost from './deliver-post';
-import follow from './follow';
-import performActivityPub from './perform-activitypub';
-import processInbox from './process-inbox';
-import reportGitHubFailure from './report-github-failure';
-import unfollow from './unfollow';
-
-const handlers = {
- deliverPost,
- follow,
- performActivityPub,
- processInbox,
- reportGitHubFailure,
- unfollow
-};
-
-export default (job, done) => handlers[job.data.type](job).then(() => done(), done);
diff --git a/src/processor/http/perform-activitypub.ts b/src/processor/http/perform-activitypub.ts
deleted file mode 100644
index 963e532fe5..0000000000
--- a/src/processor/http/perform-activitypub.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import User from '../../models/user';
-import act from '../../remote/activitypub/act';
-import Resolver from '../../remote/activitypub/resolver';
-
-export default ({ data }) => User.findOne({ _id: data.actor })
- .then(actor => act(new Resolver(), actor, data.outbox))
- .then(Promise.all);
diff --git a/src/processor/http/process-inbox.ts b/src/processor/http/process-inbox.ts
deleted file mode 100644
index f102f8d6b4..0000000000
--- a/src/processor/http/process-inbox.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import { verifySignature } from 'http-signature';
-import parseAcct from '../../acct/parse';
-import User, { IRemoteUser } from '../../models/user';
-import act from '../../remote/activitypub/act';
-import resolvePerson from '../../remote/activitypub/resolve-person';
-import Resolver from '../../remote/activitypub/resolver';
-
-export default async ({ data }): Promise<void> => {
- const keyIdLower = data.signature.keyId.toLowerCase();
- let user;
-
- if (keyIdLower.startsWith('acct:')) {
- const { username, host } = parseAcct(keyIdLower.slice('acct:'.length));
- if (host === null) {
- throw 'request was made by local user';
- }
-
- user = await User.findOne({ usernameLower: username, hostLower: host }) as IRemoteUser;
- } else {
- user = await User.findOne({
- host: { $ne: null },
- 'account.publicKey.id': data.signature.keyId
- }) as IRemoteUser;
-
- if (user === null) {
- user = await resolvePerson(data.signature.keyId);
- }
- }
-
- if (user === null) {
- throw 'failed to resolve user';
- }
-
- if (!verifySignature(data.signature, user.account.publicKey.publicKeyPem)) {
- throw 'signature verification failed';
- }
-
- await Promise.all(await act(new Resolver(), user, data.inbox, true));
-};
diff --git a/src/processor/http/report-github-failure.ts b/src/processor/http/report-github-failure.ts
deleted file mode 100644
index 4f6f5ccee5..0000000000
--- a/src/processor/http/report-github-failure.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import * as request from 'request-promise-native';
-import User from '../../models/user';
-const createPost = require('../../server/api/endpoints/posts/create');
-
-export default async ({ data }) => {
- const asyncBot = User.findOne({ _id: data.userId });
-
- // Fetch parent status
- const parentStatuses = await request({
- url: `${data.parentUrl}/statuses`,
- headers: {
- 'User-Agent': 'misskey'
- },
- json: true
- });
-
- const parentState = parentStatuses[0].state;
- const stillFailed = parentState == 'failure' || parentState == 'error';
- const text = stillFailed ?
- `**⚠️BUILD STILL FAILED⚠️**: ?[${data.message}](${data.htmlUrl})` :
- `**🚨BUILD FAILED🚨**: →→→?[${data.message}](${data.htmlUrl})←←←`;
-
- createPost({ text }, await asyncBot);
-};
diff --git a/src/processor/http/unfollow.ts b/src/processor/http/unfollow.ts
deleted file mode 100644
index d3d5f2246f..0000000000
--- a/src/processor/http/unfollow.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-import FollowedLog from '../../models/followed-log';
-import Following from '../../models/following';
-import FollowingLog from '../../models/following-log';
-import User, { isRemoteUser, pack as packUser } from '../../models/user';
-import stream from '../../publishers/stream';
-import renderFollow from '../../remote/activitypub/renderer/follow';
-import renderUndo from '../../remote/activitypub/renderer/undo';
-import context from '../../remote/activitypub/renderer/context';
-import request from '../../remote/request';
-
-export default async ({ data }) => {
- // Delete following
- const following = await Following.findOneAndDelete({ _id: data.id });
- if (following === null) {
- return;
- }
-
- const promisedFollower = User.findOne({ _id: following.followerId });
- const promisedFollowee = User.findOne({ _id: following.followeeId });
-
- await Promise.all([
- // Decrement following count
- User.update({ _id: following.followerId }, { $inc: { followingCount: -1 } }),
- promisedFollower.then(({ followingCount }) => FollowingLog.insert({
- createdAt: new Date(),
- userId: following.followerId,
- count: followingCount - 1
- })),
-
- // Decrement followers count
- User.update({ _id: following.followeeId }, { $inc: { followersCount: -1 } }),
- promisedFollowee.then(({ followersCount }) => FollowedLog.insert({
- createdAt: new Date(),
- userId: following.followeeId,
- count: followersCount - 1
- })),
-
- // Publish follow event
- Promise.all([promisedFollower, promisedFollowee]).then(async ([follower, followee]) => {
- if (isRemoteUser(follower)) {
- return;
- }
-
- const promisedPackedUser = packUser(followee, follower);
-
- if (isRemoteUser(followee)) {
- const undo = renderUndo(renderFollow(follower, followee));
- undo['@context'] = context;
-
- await request(follower, followee.account.inbox, undo);
- }
-
- stream(follower._id, 'unfollow', promisedPackedUser);
- })
- ]);
-};
diff --git a/src/processor/index.ts b/src/processor/index.ts
deleted file mode 100644
index 172048ddae..0000000000
--- a/src/processor/index.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import queue from '../queue';
-import db from './db';
-import http from './http';
-
-export default () => {
- queue.process('db', db);
-
- /*
- 256 is the default concurrency limit of Mozilla Firefox and Google
- Chromium.
-
- a8af215e691f3a2205a3758d2d96e9d328e100ff - chromium/src.git - Git at Google
- https://chromium.googlesource.com/chromium/src.git/+/a8af215e691f3a2205a3758d2d96e9d328e100ff
- Network.http.max-connections - MozillaZine Knowledge Base
- http://kb.mozillazine.org/Network.http.max-connections
- */
- queue.process('http', 256, http);
-};