diff options
Diffstat (limited to 'server/controllers')
-rw-r--r-- | server/controllers/activitypub/client.ts | 8 | ||||
-rw-r--r-- | server/controllers/activitypub/inbox.ts | 29 | ||||
-rw-r--r-- | server/controllers/activitypub/index.ts | 2 | ||||
-rw-r--r-- | server/controllers/activitypub/videos.ts | 61 | ||||
-rw-r--r-- | server/controllers/api/pods.ts | 33 |
5 files changed, 53 insertions, 80 deletions
diff --git a/server/controllers/activitypub/client.ts b/server/controllers/activitypub/client.ts index 28d08b3f4..5cfbc2f1d 100644 --- a/server/controllers/activitypub/client.ts +++ b/server/controllers/activitypub/client.ts | |||
@@ -16,12 +16,12 @@ activityPubClientRouter.get('/account/:name', | |||
16 | executeIfActivityPub(asyncMiddleware(accountController)) | 16 | executeIfActivityPub(asyncMiddleware(accountController)) |
17 | ) | 17 | ) |
18 | 18 | ||
19 | activityPubClientRouter.get('/account/:name/followers', | 19 | activityPubClientRouter.get('/account/:nameWithHost/followers', |
20 | executeIfActivityPub(localAccountValidator), | 20 | executeIfActivityPub(localAccountValidator), |
21 | executeIfActivityPub(asyncMiddleware(accountFollowersController)) | 21 | executeIfActivityPub(asyncMiddleware(accountFollowersController)) |
22 | ) | 22 | ) |
23 | 23 | ||
24 | activityPubClientRouter.get('/account/:name/following', | 24 | activityPubClientRouter.get('/account/:nameWithHost/following', |
25 | executeIfActivityPub(localAccountValidator), | 25 | executeIfActivityPub(localAccountValidator), |
26 | executeIfActivityPub(asyncMiddleware(accountFollowingController)) | 26 | executeIfActivityPub(asyncMiddleware(accountFollowingController)) |
27 | ) | 27 | ) |
@@ -46,7 +46,7 @@ async function accountFollowersController (req: express.Request, res: express.Re | |||
46 | const page = req.params.page || 1 | 46 | const page = req.params.page || 1 |
47 | const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE) | 47 | const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE) |
48 | 48 | ||
49 | const result = await db.Account.listFollowerUrlsForApi(account.name, start, count) | 49 | const result = await db.Account.listFollowerUrlsForApi(account.id, start, count) |
50 | const activityPubResult = activityPubCollectionPagination(req.url, page, result) | 50 | const activityPubResult = activityPubCollectionPagination(req.url, page, result) |
51 | 51 | ||
52 | return res.json(activityPubResult) | 52 | return res.json(activityPubResult) |
@@ -58,7 +58,7 @@ async function accountFollowingController (req: express.Request, res: express.Re | |||
58 | const page = req.params.page || 1 | 58 | const page = req.params.page || 1 |
59 | const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE) | 59 | const { start, count } = pageToStartAndCount(page, ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE) |
60 | 60 | ||
61 | const result = await db.Account.listFollowingUrlsForApi(account.name, start, count) | 61 | const result = await db.Account.listFollowingUrlsForApi(account.id, start, count) |
62 | const activityPubResult = activityPubCollectionPagination(req.url, page, result) | 62 | const activityPubResult = activityPubCollectionPagination(req.url, page, result) |
63 | 63 | ||
64 | return res.json(activityPubResult) | 64 | return res.json(activityPubResult) |
diff --git a/server/controllers/activitypub/inbox.ts b/server/controllers/activitypub/inbox.ts index eee217650..eedb518b9 100644 --- a/server/controllers/activitypub/inbox.ts +++ b/server/controllers/activitypub/inbox.ts | |||
@@ -3,26 +3,41 @@ import { Activity, ActivityPubCollection, ActivityPubOrderedCollection, Activity | |||
3 | import { logger } from '../../helpers' | 3 | import { logger } from '../../helpers' |
4 | import { isActivityValid } from '../../helpers/custom-validators/activitypub/activity' | 4 | import { isActivityValid } from '../../helpers/custom-validators/activitypub/activity' |
5 | import { processCreateActivity, processFlagActivity, processUpdateActivity } from '../../lib' | 5 | import { processCreateActivity, processFlagActivity, processUpdateActivity } from '../../lib' |
6 | import { processAcceptActivity } from '../../lib/activitypub/process-accept' | ||
6 | import { processAddActivity } from '../../lib/activitypub/process-add' | 7 | import { processAddActivity } from '../../lib/activitypub/process-add' |
7 | import { asyncMiddleware, checkSignature, signatureValidator } from '../../middlewares' | 8 | import { processDeleteActivity } from '../../lib/activitypub/process-delete' |
9 | import { processFollowActivity } from '../../lib/activitypub/process-follow' | ||
10 | import { asyncMiddleware, checkSignature, localAccountValidator, signatureValidator } from '../../middlewares' | ||
8 | import { activityPubValidator } from '../../middlewares/validators/activitypub/activity' | 11 | import { activityPubValidator } from '../../middlewares/validators/activitypub/activity' |
12 | import { AccountInstance } from '../../models/account/account-interface' | ||
9 | 13 | ||
10 | const processActivity: { [ P in ActivityType ]: (activity: Activity) => Promise<any> } = { | 14 | const processActivity: { [ P in ActivityType ]: (activity: Activity, inboxAccount?: AccountInstance) => Promise<any> } = { |
11 | Create: processCreateActivity, | 15 | Create: processCreateActivity, |
12 | Add: processAddActivity, | 16 | Add: processAddActivity, |
13 | Update: processUpdateActivity, | 17 | Update: processUpdateActivity, |
14 | Flag: processFlagActivity | 18 | Flag: processFlagActivity, |
19 | Delete: processDeleteActivity, | ||
20 | Follow: processFollowActivity, | ||
21 | Accept: processAcceptActivity | ||
15 | } | 22 | } |
16 | 23 | ||
17 | const inboxRouter = express.Router() | 24 | const inboxRouter = express.Router() |
18 | 25 | ||
19 | inboxRouter.post('/', | 26 | inboxRouter.post('/inbox', |
20 | signatureValidator, | 27 | signatureValidator, |
21 | asyncMiddleware(checkSignature), | 28 | asyncMiddleware(checkSignature), |
22 | activityPubValidator, | 29 | activityPubValidator, |
23 | asyncMiddleware(inboxController) | 30 | asyncMiddleware(inboxController) |
24 | ) | 31 | ) |
25 | 32 | ||
33 | inboxRouter.post('/:nameWithHost/inbox', | ||
34 | signatureValidator, | ||
35 | asyncMiddleware(checkSignature), | ||
36 | localAccountValidator, | ||
37 | activityPubValidator, | ||
38 | asyncMiddleware(inboxController) | ||
39 | ) | ||
40 | |||
26 | // --------------------------------------------------------------------------- | 41 | // --------------------------------------------------------------------------- |
27 | 42 | ||
28 | export { | 43 | export { |
@@ -46,12 +61,12 @@ async function inboxController (req: express.Request, res: express.Response, nex | |||
46 | // Only keep activities we are able to process | 61 | // Only keep activities we are able to process |
47 | activities = activities.filter(a => isActivityValid(a)) | 62 | activities = activities.filter(a => isActivityValid(a)) |
48 | 63 | ||
49 | await processActivities(activities) | 64 | await processActivities(activities, res.locals.account) |
50 | 65 | ||
51 | res.status(204).end() | 66 | res.status(204).end() |
52 | } | 67 | } |
53 | 68 | ||
54 | async function processActivities (activities: Activity[]) { | 69 | async function processActivities (activities: Activity[], inboxAccount?: AccountInstance) { |
55 | for (const activity of activities) { | 70 | for (const activity of activities) { |
56 | const activityProcessor = processActivity[activity.type] | 71 | const activityProcessor = processActivity[activity.type] |
57 | if (activityProcessor === undefined) { | 72 | if (activityProcessor === undefined) { |
@@ -59,6 +74,6 @@ async function processActivities (activities: Activity[]) { | |||
59 | continue | 74 | continue |
60 | } | 75 | } |
61 | 76 | ||
62 | await activityProcessor(activity) | 77 | await activityProcessor(activity, inboxAccount) |
63 | } | 78 | } |
64 | } | 79 | } |
diff --git a/server/controllers/activitypub/index.ts b/server/controllers/activitypub/index.ts index 2b0e2a489..6c7bafc6e 100644 --- a/server/controllers/activitypub/index.ts +++ b/server/controllers/activitypub/index.ts | |||
@@ -6,7 +6,7 @@ import { activityPubClientRouter } from './client' | |||
6 | 6 | ||
7 | const remoteRouter = express.Router() | 7 | const remoteRouter = express.Router() |
8 | 8 | ||
9 | remoteRouter.use('/inbox', inboxRouter) | 9 | remoteRouter.use('/', inboxRouter) |
10 | remoteRouter.use('/', activityPubClientRouter) | 10 | remoteRouter.use('/', activityPubClientRouter) |
11 | remoteRouter.use('/*', badRequest) | 11 | remoteRouter.use('/*', badRequest) |
12 | 12 | ||
diff --git a/server/controllers/activitypub/videos.ts b/server/controllers/activitypub/videos.ts index a9b31bf75..98894379f 100644 --- a/server/controllers/activitypub/videos.ts +++ b/server/controllers/activitypub/videos.ts | |||
@@ -224,67 +224,6 @@ | |||
224 | // logger.info('Remote video with uuid %s quick and dirty updated', videoUUID) | 224 | // logger.info('Remote video with uuid %s quick and dirty updated', videoUUID) |
225 | // } | 225 | // } |
226 | // | 226 | // |
227 | // async function removeRemoteVideoRetryWrapper (videoToRemoveData: RemoteVideoRemoveData, fromPod: PodInstance) { | ||
228 | // const options = { | ||
229 | // arguments: [ videoToRemoveData, fromPod ], | ||
230 | // errorMessage: 'Cannot remove the remote video channel with many retries.' | ||
231 | // } | ||
232 | // | ||
233 | // await retryTransactionWrapper(removeRemoteVideo, options) | ||
234 | // } | ||
235 | // | ||
236 | // async function removeRemoteVideo (videoToRemoveData: RemoteVideoRemoveData, fromPod: PodInstance) { | ||
237 | // logger.debug('Removing remote video "%s".', videoToRemoveData.uuid) | ||
238 | // | ||
239 | // await db.sequelize.transaction(async t => { | ||
240 | // // We need the instance because we have to remove some other stuffs (thumbnail etc) | ||
241 | // const videoInstance = await fetchVideoByHostAndUUID(fromPod.host, videoToRemoveData.uuid, t) | ||
242 | // await videoInstance.destroy({ transaction: t }) | ||
243 | // }) | ||
244 | // | ||
245 | // logger.info('Remote video with uuid %s removed.', videoToRemoveData.uuid) | ||
246 | // } | ||
247 | // | ||
248 | // async function removeRemoteVideoAccountRetryWrapper (accountAttributesToRemove: RemoteVideoAccountRemoveData, fromPod: PodInstance) { | ||
249 | // const options = { | ||
250 | // arguments: [ accountAttributesToRemove, fromPod ], | ||
251 | // errorMessage: 'Cannot remove the remote video account with many retries.' | ||
252 | // } | ||
253 | // | ||
254 | // await retryTransactionWrapper(removeRemoteVideoAccount, options) | ||
255 | // } | ||
256 | // | ||
257 | // async function removeRemoteVideoAccount (accountAttributesToRemove: RemoteVideoAccountRemoveData, fromPod: PodInstance) { | ||
258 | // logger.debug('Removing remote video account "%s".', accountAttributesToRemove.uuid) | ||
259 | // | ||
260 | // await db.sequelize.transaction(async t => { | ||
261 | // const videoAccount = await db.Account.loadAccountByPodAndUUID(accountAttributesToRemove.uuid, fromPod.id, t) | ||
262 | // await videoAccount.destroy({ transaction: t }) | ||
263 | // }) | ||
264 | // | ||
265 | // logger.info('Remote video account with uuid %s removed.', accountAttributesToRemove.uuid) | ||
266 | // } | ||
267 | // | ||
268 | // async function removeRemoteVideoChannelRetryWrapper (videoChannelAttributesToRemove: RemoteVideoChannelRemoveData, fromPod: PodInstance) { | ||
269 | // const options = { | ||
270 | // arguments: [ videoChannelAttributesToRemove, fromPod ], | ||
271 | // errorMessage: 'Cannot remove the remote video channel with many retries.' | ||
272 | // } | ||
273 | // | ||
274 | // await retryTransactionWrapper(removeRemoteVideoChannel, options) | ||
275 | // } | ||
276 | // | ||
277 | // async function removeRemoteVideoChannel (videoChannelAttributesToRemove: RemoteVideoChannelRemoveData, fromPod: PodInstance) { | ||
278 | // logger.debug('Removing remote video channel "%s".', videoChannelAttributesToRemove.uuid) | ||
279 | // | ||
280 | // await db.sequelize.transaction(async t => { | ||
281 | // const videoChannel = await fetchVideoChannelByHostAndUUID(fromPod.host, videoChannelAttributesToRemove.uuid, t) | ||
282 | // await videoChannel.destroy({ transaction: t }) | ||
283 | // }) | ||
284 | // | ||
285 | // logger.info('Remote video channel with uuid %s removed.', videoChannelAttributesToRemove.uuid) | ||
286 | // } | ||
287 | // | ||
288 | // async function reportAbuseRemoteVideoRetryWrapper (reportData: RemoteVideoReportAbuseData, fromPod: PodInstance) { | 227 | // async function reportAbuseRemoteVideoRetryWrapper (reportData: RemoteVideoReportAbuseData, fromPod: PodInstance) { |
289 | // const options = { | 228 | // const options = { |
290 | // arguments: [ reportData, fromPod ], | 229 | // arguments: [ reportData, fromPod ], |
diff --git a/server/controllers/api/pods.ts b/server/controllers/api/pods.ts index 43df3f66f..aa07b17f6 100644 --- a/server/controllers/api/pods.ts +++ b/server/controllers/api/pods.ts | |||
@@ -1,16 +1,27 @@ | |||
1 | import * as express from 'express' | 1 | import * as express from 'express' |
2 | import { getFormattedObjects } from '../../helpers' | 2 | import { getFormattedObjects } from '../../helpers' |
3 | import { getApplicationAccount } from '../../helpers/utils' | ||
3 | import { database as db } from '../../initializers/database' | 4 | import { database as db } from '../../initializers/database' |
4 | import { asyncMiddleware, paginationValidator, podsSortValidator, setPagination, setPodsSort } from '../../middlewares' | 5 | import { asyncMiddleware, paginationValidator, setFollowersSort, setPagination } from '../../middlewares' |
6 | import { setFollowingSort } from '../../middlewares/sort' | ||
7 | import { followersSortValidator, followingSortValidator } from '../../middlewares/validators/sort' | ||
5 | 8 | ||
6 | const podsRouter = express.Router() | 9 | const podsRouter = express.Router() |
7 | 10 | ||
8 | podsRouter.get('/', | 11 | podsRouter.get('/following', |
9 | paginationValidator, | 12 | paginationValidator, |
10 | podsSortValidator, | 13 | followingSortValidator, |
11 | setPodsSort, | 14 | setFollowingSort, |
12 | setPagination, | 15 | setPagination, |
13 | asyncMiddleware(listPods) | 16 | asyncMiddleware(listFollowing) |
17 | ) | ||
18 | |||
19 | podsRouter.get('/followers', | ||
20 | paginationValidator, | ||
21 | followersSortValidator, | ||
22 | setFollowersSort, | ||
23 | setPagination, | ||
24 | asyncMiddleware(listFollowers) | ||
14 | ) | 25 | ) |
15 | 26 | ||
16 | // --------------------------------------------------------------------------- | 27 | // --------------------------------------------------------------------------- |
@@ -21,8 +32,16 @@ export { | |||
21 | 32 | ||
22 | // --------------------------------------------------------------------------- | 33 | // --------------------------------------------------------------------------- |
23 | 34 | ||
24 | async function listPods (req: express.Request, res: express.Response, next: express.NextFunction) { | 35 | async function listFollowing (req: express.Request, res: express.Response, next: express.NextFunction) { |
25 | const resultList = await db.Pod.listForApi(req.query.start, req.query.count, req.query.sort) | 36 | const applicationAccount = await getApplicationAccount() |
37 | const resultList = await db.Account.listFollowingForApi(applicationAccount.id, req.query.start, req.query.count, req.query.sort) | ||
38 | |||
39 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | ||
40 | } | ||
41 | |||
42 | async function listFollowers (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
43 | const applicationAccount = await getApplicationAccount() | ||
44 | const resultList = await db.Account.listFollowersForApi(applicationAccount.id, req.query.start, req.query.count, req.query.sort) | ||
26 | 45 | ||
27 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 46 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
28 | } | 47 | } |