]>
Commit | Line | Data |
---|---|---|
e4f97bab C |
1 | import * as express from 'express' |
2 | ||
3 | import { | |
4 | processCreateActivity, | |
5 | processUpdateActivity, | |
6 | processFlagActivity | |
7 | } from '../../lib' | |
8 | import { | |
9 | Activity, | |
10 | ActivityType, | |
11 | RootActivity, | |
12 | ActivityPubCollection, | |
13 | ActivityPubOrderedCollection | |
14 | } from '../../../shared' | |
15 | import { | |
16 | signatureValidator, | |
17 | checkSignature, | |
18 | asyncMiddleware | |
19 | } from '../../middlewares' | |
20 | import { logger } from '../../helpers' | |
21 | ||
22 | const processActivity: { [ P in ActivityType ]: (activity: Activity) => Promise<any> } = { | |
23 | Create: processCreateActivity, | |
24 | Update: processUpdateActivity, | |
25 | Flag: processFlagActivity | |
26 | } | |
27 | ||
28 | const inboxRouter = express.Router() | |
29 | ||
30 | inboxRouter.post('/', | |
31 | signatureValidator, | |
32 | asyncMiddleware(checkSignature), | |
33 | // inboxValidator, | |
34 | asyncMiddleware(inboxController) | |
35 | ) | |
36 | ||
37 | // --------------------------------------------------------------------------- | |
38 | ||
39 | export { | |
40 | inboxRouter | |
41 | } | |
42 | ||
43 | // --------------------------------------------------------------------------- | |
44 | ||
45 | async function inboxController (req: express.Request, res: express.Response, next: express.NextFunction) { | |
46 | const rootActivity: RootActivity = req.body | |
47 | let activities: Activity[] = [] | |
48 | ||
49 | if ([ 'Collection', 'CollectionPage' ].indexOf(rootActivity.type) !== -1) { | |
50 | activities = (rootActivity as ActivityPubCollection).items | |
51 | } else if ([ 'OrderedCollection', 'OrderedCollectionPage' ].indexOf(rootActivity.type) !== -1) { | |
52 | activities = (rootActivity as ActivityPubOrderedCollection).orderedItems | |
53 | } else { | |
54 | activities = [ rootActivity as Activity ] | |
55 | } | |
56 | ||
57 | await processActivities(activities) | |
58 | ||
59 | res.status(204).end() | |
60 | } | |
61 | ||
62 | async function processActivities (activities: Activity[]) { | |
63 | for (const activity of activities) { | |
64 | const activityProcessor = processActivity[activity.type] | |
65 | if (activityProcessor === undefined) { | |
66 | logger.warn('Unknown activity type %s.', activity.type, { activityId: activity.id }) | |
67 | continue | |
68 | } | |
69 | ||
70 | await activityProcessor(activity) | |
71 | } | |
72 | } |