diff options
45 files changed, 270 insertions, 234 deletions
diff --git a/server/controllers/activitypub/client.ts b/server/controllers/activitypub/client.ts index cc2671fc1..e06aa35f4 100644 --- a/server/controllers/activitypub/client.ts +++ b/server/controllers/activitypub/client.ts | |||
@@ -169,27 +169,27 @@ export { | |||
169 | // --------------------------------------------------------------------------- | 169 | // --------------------------------------------------------------------------- |
170 | 170 | ||
171 | function accountController (req: express.Request, res: express.Response) { | 171 | function accountController (req: express.Request, res: express.Response) { |
172 | const account: AccountModel = res.locals.account | 172 | const account = res.locals.account |
173 | 173 | ||
174 | return activityPubResponse(activityPubContextify(account.toActivityPubObject()), res) | 174 | return activityPubResponse(activityPubContextify(account.toActivityPubObject()), res) |
175 | } | 175 | } |
176 | 176 | ||
177 | async function accountFollowersController (req: express.Request, res: express.Response) { | 177 | async function accountFollowersController (req: express.Request, res: express.Response) { |
178 | const account: AccountModel = res.locals.account | 178 | const account = res.locals.account |
179 | const activityPubResult = await actorFollowers(req, account.Actor) | 179 | const activityPubResult = await actorFollowers(req, account.Actor) |
180 | 180 | ||
181 | return activityPubResponse(activityPubContextify(activityPubResult), res) | 181 | return activityPubResponse(activityPubContextify(activityPubResult), res) |
182 | } | 182 | } |
183 | 183 | ||
184 | async function accountFollowingController (req: express.Request, res: express.Response) { | 184 | async function accountFollowingController (req: express.Request, res: express.Response) { |
185 | const account: AccountModel = res.locals.account | 185 | const account = res.locals.account |
186 | const activityPubResult = await actorFollowing(req, account.Actor) | 186 | const activityPubResult = await actorFollowing(req, account.Actor) |
187 | 187 | ||
188 | return activityPubResponse(activityPubContextify(activityPubResult), res) | 188 | return activityPubResponse(activityPubContextify(activityPubResult), res) |
189 | } | 189 | } |
190 | 190 | ||
191 | async function accountPlaylistsController (req: express.Request, res: express.Response) { | 191 | async function accountPlaylistsController (req: express.Request, res: express.Response) { |
192 | const account: AccountModel = res.locals.account | 192 | const account = res.locals.account |
193 | const activityPubResult = await actorPlaylists(req, account) | 193 | const activityPubResult = await actorPlaylists(req, account) |
194 | 194 | ||
195 | return activityPubResponse(activityPubContextify(activityPubResult), res) | 195 | return activityPubResponse(activityPubContextify(activityPubResult), res) |
@@ -197,7 +197,7 @@ async function accountPlaylistsController (req: express.Request, res: express.Re | |||
197 | 197 | ||
198 | function getAccountVideoRate (rateType: VideoRateType) { | 198 | function getAccountVideoRate (rateType: VideoRateType) { |
199 | return (req: express.Request, res: express.Response) => { | 199 | return (req: express.Request, res: express.Response) => { |
200 | const accountVideoRate: AccountVideoRateModel = res.locals.accountVideoRate | 200 | const accountVideoRate = res.locals.accountVideoRate |
201 | 201 | ||
202 | const byActor = accountVideoRate.Account.Actor | 202 | const byActor = accountVideoRate.Account.Actor |
203 | const url = getRateUrl(rateType, byActor, accountVideoRate.Video) | 203 | const url = getRateUrl(rateType, byActor, accountVideoRate.Video) |
@@ -211,7 +211,7 @@ function getAccountVideoRate (rateType: VideoRateType) { | |||
211 | 211 | ||
212 | async function videoController (req: express.Request, res: express.Response) { | 212 | async function videoController (req: express.Request, res: express.Response) { |
213 | // We need more attributes | 213 | // We need more attributes |
214 | const video: VideoModel = await VideoModel.loadForGetAPI(res.locals.video.id) | 214 | const video = await VideoModel.loadForGetAPI(res.locals.video.id) |
215 | 215 | ||
216 | if (video.url.startsWith(CONFIG.WEBSERVER.URL) === false) return res.redirect(video.url) | 216 | if (video.url.startsWith(CONFIG.WEBSERVER.URL) === false) return res.redirect(video.url) |
217 | 217 | ||
@@ -230,7 +230,7 @@ async function videoController (req: express.Request, res: express.Response) { | |||
230 | } | 230 | } |
231 | 231 | ||
232 | async function videoAnnounceController (req: express.Request, res: express.Response) { | 232 | async function videoAnnounceController (req: express.Request, res: express.Response) { |
233 | const share = res.locals.videoShare as VideoShareModel | 233 | const share = res.locals.videoShare |
234 | 234 | ||
235 | if (share.url.startsWith(CONFIG.WEBSERVER.URL) === false) return res.redirect(share.url) | 235 | if (share.url.startsWith(CONFIG.WEBSERVER.URL) === false) return res.redirect(share.url) |
236 | 236 | ||
@@ -240,7 +240,7 @@ async function videoAnnounceController (req: express.Request, res: express.Respo | |||
240 | } | 240 | } |
241 | 241 | ||
242 | async function videoAnnouncesController (req: express.Request, res: express.Response) { | 242 | async function videoAnnouncesController (req: express.Request, res: express.Response) { |
243 | const video: VideoModel = res.locals.video | 243 | const video = res.locals.video |
244 | 244 | ||
245 | const handler = async (start: number, count: number) => { | 245 | const handler = async (start: number, count: number) => { |
246 | const result = await VideoShareModel.listAndCountByVideoId(video.id, start, count) | 246 | const result = await VideoShareModel.listAndCountByVideoId(video.id, start, count) |
@@ -255,21 +255,21 @@ async function videoAnnouncesController (req: express.Request, res: express.Resp | |||
255 | } | 255 | } |
256 | 256 | ||
257 | async function videoLikesController (req: express.Request, res: express.Response) { | 257 | async function videoLikesController (req: express.Request, res: express.Response) { |
258 | const video: VideoModel = res.locals.video | 258 | const video = res.locals.video |
259 | const json = await videoRates(req, 'like', video, getVideoLikesActivityPubUrl(video)) | 259 | const json = await videoRates(req, 'like', video, getVideoLikesActivityPubUrl(video)) |
260 | 260 | ||
261 | return activityPubResponse(activityPubContextify(json), res) | 261 | return activityPubResponse(activityPubContextify(json), res) |
262 | } | 262 | } |
263 | 263 | ||
264 | async function videoDislikesController (req: express.Request, res: express.Response) { | 264 | async function videoDislikesController (req: express.Request, res: express.Response) { |
265 | const video: VideoModel = res.locals.video | 265 | const video = res.locals.video |
266 | const json = await videoRates(req, 'dislike', video, getVideoDislikesActivityPubUrl(video)) | 266 | const json = await videoRates(req, 'dislike', video, getVideoDislikesActivityPubUrl(video)) |
267 | 267 | ||
268 | return activityPubResponse(activityPubContextify(json), res) | 268 | return activityPubResponse(activityPubContextify(json), res) |
269 | } | 269 | } |
270 | 270 | ||
271 | async function videoCommentsController (req: express.Request, res: express.Response) { | 271 | async function videoCommentsController (req: express.Request, res: express.Response) { |
272 | const video: VideoModel = res.locals.video | 272 | const video = res.locals.video |
273 | 273 | ||
274 | const handler = async (start: number, count: number) => { | 274 | const handler = async (start: number, count: number) => { |
275 | const result = await VideoCommentModel.listAndCountByVideoId(video.id, start, count) | 275 | const result = await VideoCommentModel.listAndCountByVideoId(video.id, start, count) |
@@ -284,27 +284,27 @@ async function videoCommentsController (req: express.Request, res: express.Respo | |||
284 | } | 284 | } |
285 | 285 | ||
286 | async function videoChannelController (req: express.Request, res: express.Response) { | 286 | async function videoChannelController (req: express.Request, res: express.Response) { |
287 | const videoChannel: VideoChannelModel = res.locals.videoChannel | 287 | const videoChannel = res.locals.videoChannel |
288 | 288 | ||
289 | return activityPubResponse(activityPubContextify(videoChannel.toActivityPubObject()), res) | 289 | return activityPubResponse(activityPubContextify(videoChannel.toActivityPubObject()), res) |
290 | } | 290 | } |
291 | 291 | ||
292 | async function videoChannelFollowersController (req: express.Request, res: express.Response) { | 292 | async function videoChannelFollowersController (req: express.Request, res: express.Response) { |
293 | const videoChannel: VideoChannelModel = res.locals.videoChannel | 293 | const videoChannel = res.locals.videoChannel |
294 | const activityPubResult = await actorFollowers(req, videoChannel.Actor) | 294 | const activityPubResult = await actorFollowers(req, videoChannel.Actor) |
295 | 295 | ||
296 | return activityPubResponse(activityPubContextify(activityPubResult), res) | 296 | return activityPubResponse(activityPubContextify(activityPubResult), res) |
297 | } | 297 | } |
298 | 298 | ||
299 | async function videoChannelFollowingController (req: express.Request, res: express.Response) { | 299 | async function videoChannelFollowingController (req: express.Request, res: express.Response) { |
300 | const videoChannel: VideoChannelModel = res.locals.videoChannel | 300 | const videoChannel = res.locals.videoChannel |
301 | const activityPubResult = await actorFollowing(req, videoChannel.Actor) | 301 | const activityPubResult = await actorFollowing(req, videoChannel.Actor) |
302 | 302 | ||
303 | return activityPubResponse(activityPubContextify(activityPubResult), res) | 303 | return activityPubResponse(activityPubContextify(activityPubResult), res) |
304 | } | 304 | } |
305 | 305 | ||
306 | async function videoCommentController (req: express.Request, res: express.Response) { | 306 | async function videoCommentController (req: express.Request, res: express.Response) { |
307 | const videoComment: VideoCommentModel = res.locals.videoComment | 307 | const videoComment = res.locals.videoComment |
308 | 308 | ||
309 | if (videoComment.url.startsWith(CONFIG.WEBSERVER.URL) === false) return res.redirect(videoComment.url) | 309 | if (videoComment.url.startsWith(CONFIG.WEBSERVER.URL) === false) return res.redirect(videoComment.url) |
310 | 310 | ||
@@ -323,7 +323,7 @@ async function videoCommentController (req: express.Request, res: express.Respon | |||
323 | } | 323 | } |
324 | 324 | ||
325 | async function videoRedundancyController (req: express.Request, res: express.Response) { | 325 | async function videoRedundancyController (req: express.Request, res: express.Response) { |
326 | const videoRedundancy: VideoRedundancyModel = res.locals.videoRedundancy | 326 | const videoRedundancy = res.locals.videoRedundancy |
327 | if (videoRedundancy.url.startsWith(CONFIG.WEBSERVER.URL) === false) return res.redirect(videoRedundancy.url) | 327 | if (videoRedundancy.url.startsWith(CONFIG.WEBSERVER.URL) === false) return res.redirect(videoRedundancy.url) |
328 | 328 | ||
329 | const serverActor = await getServerActor() | 329 | const serverActor = await getServerActor() |
@@ -340,7 +340,7 @@ async function videoRedundancyController (req: express.Request, res: express.Res | |||
340 | } | 340 | } |
341 | 341 | ||
342 | async function videoPlaylistController (req: express.Request, res: express.Response) { | 342 | async function videoPlaylistController (req: express.Request, res: express.Response) { |
343 | const playlist: VideoPlaylistModel = res.locals.videoPlaylist | 343 | const playlist = res.locals.videoPlaylist |
344 | 344 | ||
345 | // We need more attributes | 345 | // We need more attributes |
346 | playlist.OwnerAccount = await AccountModel.load(playlist.ownerAccountId) | 346 | playlist.OwnerAccount = await AccountModel.load(playlist.ownerAccountId) |
@@ -353,7 +353,7 @@ async function videoPlaylistController (req: express.Request, res: express.Respo | |||
353 | } | 353 | } |
354 | 354 | ||
355 | async function videoPlaylistElementController (req: express.Request, res: express.Response) { | 355 | async function videoPlaylistElementController (req: express.Request, res: express.Response) { |
356 | const videoPlaylistElement: VideoPlaylistElementModel = res.locals.videoPlaylistElement | 356 | const videoPlaylistElement = res.locals.videoPlaylistElement |
357 | 357 | ||
358 | const json = videoPlaylistElement.toActivityPubObject() | 358 | const json = videoPlaylistElement.toActivityPubObject() |
359 | return activityPubResponse(activityPubContextify(json), res) | 359 | return activityPubResponse(activityPubContextify(json), res) |
diff --git a/server/controllers/activitypub/inbox.ts b/server/controllers/activitypub/inbox.ts index f0e65015b..38d5c51df 100644 --- a/server/controllers/activitypub/inbox.ts +++ b/server/controllers/activitypub/inbox.ts | |||
@@ -5,8 +5,6 @@ import { logger } from '../../helpers/logger' | |||
5 | import { processActivities } from '../../lib/activitypub/process/process' | 5 | import { processActivities } from '../../lib/activitypub/process/process' |
6 | import { asyncMiddleware, checkSignature, localAccountValidator, localVideoChannelValidator, signatureValidator } from '../../middlewares' | 6 | import { asyncMiddleware, checkSignature, localAccountValidator, localVideoChannelValidator, signatureValidator } from '../../middlewares' |
7 | import { activityPubValidator } from '../../middlewares/validators/activitypub/activity' | 7 | import { activityPubValidator } from '../../middlewares/validators/activitypub/activity' |
8 | import { VideoChannelModel } from '../../models/video/video-channel' | ||
9 | import { AccountModel } from '../../models/account/account' | ||
10 | import { queue } from 'async' | 8 | import { queue } from 'async' |
11 | import { ActorModel } from '../../models/activitypub/actor' | 9 | import { ActorModel } from '../../models/activitypub/actor' |
12 | 10 | ||
@@ -66,12 +64,7 @@ function inboxController (req: express.Request, res: express.Response) { | |||
66 | activities = activities.filter(a => isActivityValid(a)) | 64 | activities = activities.filter(a => isActivityValid(a)) |
67 | logger.debug('We keep %d activities.', activities.length, { activities }) | 65 | logger.debug('We keep %d activities.', activities.length, { activities }) |
68 | 66 | ||
69 | let accountOrChannel: VideoChannelModel | AccountModel | 67 | const accountOrChannel = res.locals.account || res.locals.videoChannel |
70 | if (res.locals.account) { | ||
71 | accountOrChannel = res.locals.account | ||
72 | } else if (res.locals.videoChannel) { | ||
73 | accountOrChannel = res.locals.videoChannel | ||
74 | } | ||
75 | 68 | ||
76 | logger.info('Receiving inbox requests for %d activities by %s.', activities.length, res.locals.signature.actor.url) | 69 | logger.info('Receiving inbox requests for %d activities by %s.', activities.length, res.locals.signature.actor.url) |
77 | 70 | ||
diff --git a/server/controllers/activitypub/outbox.ts b/server/controllers/activitypub/outbox.ts index e060affb2..38b6ec976 100644 --- a/server/controllers/activitypub/outbox.ts +++ b/server/controllers/activitypub/outbox.ts | |||
@@ -33,7 +33,7 @@ export { | |||
33 | // --------------------------------------------------------------------------- | 33 | // --------------------------------------------------------------------------- |
34 | 34 | ||
35 | async function outboxController (req: express.Request, res: express.Response) { | 35 | async function outboxController (req: express.Request, res: express.Response) { |
36 | const accountOrVideoChannel: AccountModel | VideoChannelModel = res.locals.account || res.locals.videoChannel | 36 | const accountOrVideoChannel = res.locals.account || res.locals.videoChannel |
37 | const actor = accountOrVideoChannel.Actor | 37 | const actor = accountOrVideoChannel.Actor |
38 | const actorOutboxUrl = actor.url + '/outbox' | 38 | const actorOutboxUrl = actor.url + '/outbox' |
39 | 39 | ||
diff --git a/server/controllers/api/accounts.ts b/server/controllers/api/accounts.ts index e24545de8..adbf69781 100644 --- a/server/controllers/api/accounts.ts +++ b/server/controllers/api/accounts.ts | |||
@@ -17,7 +17,6 @@ import { VideoChannelModel } from '../../models/video/video-channel' | |||
17 | import { JobQueue } from '../../lib/job-queue' | 17 | import { JobQueue } from '../../lib/job-queue' |
18 | import { logger } from '../../helpers/logger' | 18 | import { logger } from '../../helpers/logger' |
19 | import { VideoPlaylistModel } from '../../models/video/video-playlist' | 19 | import { VideoPlaylistModel } from '../../models/video/video-playlist' |
20 | import { UserModel } from '../../models/account/user' | ||
21 | import { commonVideoPlaylistFiltersValidator } from '../../middlewares/validators/videos/video-playlists' | 20 | import { commonVideoPlaylistFiltersValidator } from '../../middlewares/validators/videos/video-playlists' |
22 | 21 | ||
23 | const accountsRouter = express.Router() | 22 | const accountsRouter = express.Router() |
@@ -71,7 +70,7 @@ export { | |||
71 | // --------------------------------------------------------------------------- | 70 | // --------------------------------------------------------------------------- |
72 | 71 | ||
73 | function getAccount (req: express.Request, res: express.Response) { | 72 | function getAccount (req: express.Request, res: express.Response) { |
74 | const account: AccountModel = res.locals.account | 73 | const account = res.locals.account |
75 | 74 | ||
76 | if (account.isOutdated()) { | 75 | if (account.isOutdated()) { |
77 | JobQueue.Instance.createJob({ type: 'activitypub-refresher', payload: { type: 'actor', url: account.Actor.url } }) | 76 | JobQueue.Instance.createJob({ type: 'activitypub-refresher', payload: { type: 'actor', url: account.Actor.url } }) |
@@ -98,7 +97,7 @@ async function listAccountPlaylists (req: express.Request, res: express.Response | |||
98 | 97 | ||
99 | // Allow users to see their private/unlisted video playlists | 98 | // Allow users to see their private/unlisted video playlists |
100 | let privateAndUnlisted = false | 99 | let privateAndUnlisted = false |
101 | if (res.locals.oauth && (res.locals.oauth.token.User as UserModel).Account.id === res.locals.account.id) { | 100 | if (res.locals.oauth && res.locals.oauth.token.User.Account.id === res.locals.account.id) { |
102 | privateAndUnlisted = true | 101 | privateAndUnlisted = true |
103 | } | 102 | } |
104 | 103 | ||
@@ -116,7 +115,7 @@ async function listAccountPlaylists (req: express.Request, res: express.Response | |||
116 | } | 115 | } |
117 | 116 | ||
118 | async function listAccountVideos (req: express.Request, res: express.Response) { | 117 | async function listAccountVideos (req: express.Request, res: express.Response) { |
119 | const account: AccountModel = res.locals.account | 118 | const account = res.locals.account |
120 | const followerActorId = isUserAbleToSearchRemoteURI(res) ? null : undefined | 119 | const followerActorId = isUserAbleToSearchRemoteURI(res) ? null : undefined |
121 | 120 | ||
122 | const resultList = await VideoModel.listForApi({ | 121 | const resultList = await VideoModel.listForApi({ |
diff --git a/server/controllers/api/index.ts b/server/controllers/api/index.ts index ed4b33dea..60a84036e 100644 --- a/server/controllers/api/index.ts +++ b/server/controllers/api/index.ts | |||
@@ -41,6 +41,6 @@ export { apiRouter } | |||
41 | 41 | ||
42 | // --------------------------------------------------------------------------- | 42 | // --------------------------------------------------------------------------- |
43 | 43 | ||
44 | function pong (req: express.Request, res: express.Response, next: express.NextFunction) { | 44 | function pong (req: express.Request, res: express.Response) { |
45 | return res.send('pong').status(200).end() | 45 | return res.send('pong').status(200).end() |
46 | } | 46 | } |
diff --git a/server/controllers/api/server/follows.ts b/server/controllers/api/server/follows.ts index 9fa6c34ba..99d211bfc 100644 --- a/server/controllers/api/server/follows.ts +++ b/server/controllers/api/server/follows.ts | |||
@@ -59,7 +59,7 @@ export { | |||
59 | 59 | ||
60 | // --------------------------------------------------------------------------- | 60 | // --------------------------------------------------------------------------- |
61 | 61 | ||
62 | async function listFollowing (req: express.Request, res: express.Response, next: express.NextFunction) { | 62 | async function listFollowing (req: express.Request, res: express.Response) { |
63 | const serverActor = await getServerActor() | 63 | const serverActor = await getServerActor() |
64 | const resultList = await ActorFollowModel.listFollowingForApi( | 64 | const resultList = await ActorFollowModel.listFollowingForApi( |
65 | serverActor.id, | 65 | serverActor.id, |
@@ -72,7 +72,7 @@ async function listFollowing (req: express.Request, res: express.Response, next: | |||
72 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 72 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
73 | } | 73 | } |
74 | 74 | ||
75 | async function listFollowers (req: express.Request, res: express.Response, next: express.NextFunction) { | 75 | async function listFollowers (req: express.Request, res: express.Response) { |
76 | const serverActor = await getServerActor() | 76 | const serverActor = await getServerActor() |
77 | const resultList = await ActorFollowModel.listFollowersForApi( | 77 | const resultList = await ActorFollowModel.listFollowersForApi( |
78 | serverActor.id, | 78 | serverActor.id, |
@@ -85,7 +85,7 @@ async function listFollowers (req: express.Request, res: express.Response, next: | |||
85 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 85 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
86 | } | 86 | } |
87 | 87 | ||
88 | async function followInstance (req: express.Request, res: express.Response, next: express.NextFunction) { | 88 | async function followInstance (req: express.Request, res: express.Response) { |
89 | const hosts = req.body.hosts as string[] | 89 | const hosts = req.body.hosts as string[] |
90 | const follower = await getServerActor() | 90 | const follower = await getServerActor() |
91 | 91 | ||
@@ -103,8 +103,8 @@ async function followInstance (req: express.Request, res: express.Response, next | |||
103 | return res.status(204).end() | 103 | return res.status(204).end() |
104 | } | 104 | } |
105 | 105 | ||
106 | async function removeFollow (req: express.Request, res: express.Response, next: express.NextFunction) { | 106 | async function removeFollow (req: express.Request, res: express.Response) { |
107 | const follow: ActorFollowModel = res.locals.follow | 107 | const follow = res.locals.follow |
108 | 108 | ||
109 | await sequelizeTypescript.transaction(async t => { | 109 | await sequelizeTypescript.transaction(async t => { |
110 | if (follow.state === 'accepted') await sendUndoFollow(follow, t) | 110 | if (follow.state === 'accepted') await sendUndoFollow(follow, t) |
diff --git a/server/controllers/api/server/redundancy.ts b/server/controllers/api/server/redundancy.ts index 4140c4991..f8109070d 100644 --- a/server/controllers/api/server/redundancy.ts +++ b/server/controllers/api/server/redundancy.ts | |||
@@ -2,7 +2,6 @@ import * as express from 'express' | |||
2 | import { UserRight } from '../../../../shared/models/users' | 2 | import { UserRight } from '../../../../shared/models/users' |
3 | import { asyncMiddleware, authenticate, ensureUserHasRight } from '../../../middlewares' | 3 | import { asyncMiddleware, authenticate, ensureUserHasRight } from '../../../middlewares' |
4 | import { updateServerRedundancyValidator } from '../../../middlewares/validators/redundancy' | 4 | import { updateServerRedundancyValidator } from '../../../middlewares/validators/redundancy' |
5 | import { ServerModel } from '../../../models/server/server' | ||
6 | import { removeRedundancyOf } from '../../../lib/redundancy' | 5 | import { removeRedundancyOf } from '../../../lib/redundancy' |
7 | import { logger } from '../../../helpers/logger' | 6 | import { logger } from '../../../helpers/logger' |
8 | 7 | ||
@@ -23,8 +22,8 @@ export { | |||
23 | 22 | ||
24 | // --------------------------------------------------------------------------- | 23 | // --------------------------------------------------------------------------- |
25 | 24 | ||
26 | async function updateRedundancy (req: express.Request, res: express.Response, next: express.NextFunction) { | 25 | async function updateRedundancy (req: express.Request, res: express.Response) { |
27 | const server = res.locals.server as ServerModel | 26 | const server = res.locals.server |
28 | 27 | ||
29 | server.redundancyAllowed = req.body.redundancyAllowed | 28 | server.redundancyAllowed = req.body.redundancyAllowed |
30 | 29 | ||
diff --git a/server/controllers/api/server/server-blocklist.ts b/server/controllers/api/server/server-blocklist.ts index 3cb3a96e2..d165db191 100644 --- a/server/controllers/api/server/server-blocklist.ts +++ b/server/controllers/api/server/server-blocklist.ts | |||
@@ -18,11 +18,9 @@ import { | |||
18 | unblockAccountByServerValidator, | 18 | unblockAccountByServerValidator, |
19 | unblockServerByServerValidator | 19 | unblockServerByServerValidator |
20 | } from '../../../middlewares/validators' | 20 | } from '../../../middlewares/validators' |
21 | import { AccountModel } from '../../../models/account/account' | ||
22 | import { AccountBlocklistModel } from '../../../models/account/account-blocklist' | 21 | import { AccountBlocklistModel } from '../../../models/account/account-blocklist' |
23 | import { addAccountInBlocklist, addServerInBlocklist, removeAccountFromBlocklist, removeServerFromBlocklist } from '../../../lib/blocklist' | 22 | import { addAccountInBlocklist, addServerInBlocklist, removeAccountFromBlocklist, removeServerFromBlocklist } from '../../../lib/blocklist' |
24 | import { ServerBlocklistModel } from '../../../models/server/server-blocklist' | 23 | import { ServerBlocklistModel } from '../../../models/server/server-blocklist' |
25 | import { ServerModel } from '../../../models/server/server' | ||
26 | import { UserRight } from '../../../../shared/models/users' | 24 | import { UserRight } from '../../../../shared/models/users' |
27 | 25 | ||
28 | const serverBlocklistRouter = express.Router() | 26 | const serverBlocklistRouter = express.Router() |
@@ -91,7 +89,7 @@ async function listBlockedAccounts (req: express.Request, res: express.Response) | |||
91 | 89 | ||
92 | async function blockAccount (req: express.Request, res: express.Response) { | 90 | async function blockAccount (req: express.Request, res: express.Response) { |
93 | const serverActor = await getServerActor() | 91 | const serverActor = await getServerActor() |
94 | const accountToBlock: AccountModel = res.locals.account | 92 | const accountToBlock = res.locals.account |
95 | 93 | ||
96 | await addAccountInBlocklist(serverActor.Account.id, accountToBlock.id) | 94 | await addAccountInBlocklist(serverActor.Account.id, accountToBlock.id) |
97 | 95 | ||
@@ -99,7 +97,7 @@ async function blockAccount (req: express.Request, res: express.Response) { | |||
99 | } | 97 | } |
100 | 98 | ||
101 | async function unblockAccount (req: express.Request, res: express.Response) { | 99 | async function unblockAccount (req: express.Request, res: express.Response) { |
102 | const accountBlock: AccountBlocklistModel = res.locals.accountBlock | 100 | const accountBlock = res.locals.accountBlock |
103 | 101 | ||
104 | await removeAccountFromBlocklist(accountBlock) | 102 | await removeAccountFromBlocklist(accountBlock) |
105 | 103 | ||
@@ -116,7 +114,7 @@ async function listBlockedServers (req: express.Request, res: express.Response) | |||
116 | 114 | ||
117 | async function blockServer (req: express.Request, res: express.Response) { | 115 | async function blockServer (req: express.Request, res: express.Response) { |
118 | const serverActor = await getServerActor() | 116 | const serverActor = await getServerActor() |
119 | const serverToBlock: ServerModel = res.locals.server | 117 | const serverToBlock = res.locals.server |
120 | 118 | ||
121 | await addServerInBlocklist(serverActor.Account.id, serverToBlock.id) | 119 | await addServerInBlocklist(serverActor.Account.id, serverToBlock.id) |
122 | 120 | ||
@@ -124,7 +122,7 @@ async function blockServer (req: express.Request, res: express.Response) { | |||
124 | } | 122 | } |
125 | 123 | ||
126 | async function unblockServer (req: express.Request, res: express.Response) { | 124 | async function unblockServer (req: express.Request, res: express.Response) { |
127 | const serverBlock: ServerBlocklistModel = res.locals.serverBlock | 125 | const serverBlock = res.locals.serverBlock |
128 | 126 | ||
129 | await removeServerFromBlocklist(serverBlock) | 127 | await removeServerFromBlocklist(serverBlock) |
130 | 128 | ||
diff --git a/server/controllers/api/users/index.ts b/server/controllers/api/users/index.ts index f7edbddf3..2117bdfeb 100644 --- a/server/controllers/api/users/index.ts +++ b/server/controllers/api/users/index.ts | |||
@@ -221,8 +221,8 @@ async function registerUser (req: express.Request, res: express.Response) { | |||
221 | return res.type('json').status(204).end() | 221 | return res.type('json').status(204).end() |
222 | } | 222 | } |
223 | 223 | ||
224 | async function unblockUser (req: express.Request, res: express.Response, next: express.NextFunction) { | 224 | async function unblockUser (req: express.Request, res: express.Response) { |
225 | const user: UserModel = res.locals.user | 225 | const user = res.locals.user |
226 | 226 | ||
227 | await changeUserBlock(res, user, false) | 227 | await changeUserBlock(res, user, false) |
228 | 228 | ||
@@ -230,7 +230,7 @@ async function unblockUser (req: express.Request, res: express.Response, next: e | |||
230 | } | 230 | } |
231 | 231 | ||
232 | async function blockUser (req: express.Request, res: express.Response) { | 232 | async function blockUser (req: express.Request, res: express.Response) { |
233 | const user: UserModel = res.locals.user | 233 | const user = res.locals.user |
234 | const reason = req.body.reason | 234 | const reason = req.body.reason |
235 | 235 | ||
236 | await changeUserBlock(res, user, true, reason) | 236 | await changeUserBlock(res, user, true, reason) |
@@ -239,7 +239,7 @@ async function blockUser (req: express.Request, res: express.Response) { | |||
239 | } | 239 | } |
240 | 240 | ||
241 | function getUser (req: express.Request, res: express.Response) { | 241 | function getUser (req: express.Request, res: express.Response) { |
242 | return res.json((res.locals.user as UserModel).toFormattedJSON()) | 242 | return res.json(res.locals.user.toFormattedJSON()) |
243 | } | 243 | } |
244 | 244 | ||
245 | async function autocompleteUsers (req: express.Request, res: express.Response) { | 245 | async function autocompleteUsers (req: express.Request, res: express.Response) { |
@@ -255,7 +255,7 @@ async function listUsers (req: express.Request, res: express.Response) { | |||
255 | } | 255 | } |
256 | 256 | ||
257 | async function removeUser (req: express.Request, res: express.Response) { | 257 | async function removeUser (req: express.Request, res: express.Response) { |
258 | const user: UserModel = res.locals.user | 258 | const user = res.locals.user |
259 | 259 | ||
260 | await user.destroy() | 260 | await user.destroy() |
261 | 261 | ||
@@ -266,7 +266,7 @@ async function removeUser (req: express.Request, res: express.Response) { | |||
266 | 266 | ||
267 | async function updateUser (req: express.Request, res: express.Response) { | 267 | async function updateUser (req: express.Request, res: express.Response) { |
268 | const body: UserUpdate = req.body | 268 | const body: UserUpdate = req.body |
269 | const userToUpdate = res.locals.user as UserModel | 269 | const userToUpdate = res.locals.user |
270 | const oldUserAuditView = new UserAuditView(userToUpdate.toFormattedJSON()) | 270 | const oldUserAuditView = new UserAuditView(userToUpdate.toFormattedJSON()) |
271 | const roleChanged = body.role !== undefined && body.role !== userToUpdate.role | 271 | const roleChanged = body.role !== undefined && body.role !== userToUpdate.role |
272 | 272 | ||
@@ -289,8 +289,8 @@ async function updateUser (req: express.Request, res: express.Response) { | |||
289 | return res.sendStatus(204) | 289 | return res.sendStatus(204) |
290 | } | 290 | } |
291 | 291 | ||
292 | async function askResetUserPassword (req: express.Request, res: express.Response, next: express.NextFunction) { | 292 | async function askResetUserPassword (req: express.Request, res: express.Response) { |
293 | const user = res.locals.user as UserModel | 293 | const user = res.locals.user |
294 | 294 | ||
295 | const verificationString = await Redis.Instance.setResetPasswordVerificationString(user.id) | 295 | const verificationString = await Redis.Instance.setResetPasswordVerificationString(user.id) |
296 | const url = CONFIG.WEBSERVER.URL + '/reset-password?userId=' + user.id + '&verificationString=' + verificationString | 296 | const url = CONFIG.WEBSERVER.URL + '/reset-password?userId=' + user.id + '&verificationString=' + verificationString |
@@ -299,8 +299,8 @@ async function askResetUserPassword (req: express.Request, res: express.Response | |||
299 | return res.status(204).end() | 299 | return res.status(204).end() |
300 | } | 300 | } |
301 | 301 | ||
302 | async function resetUserPassword (req: express.Request, res: express.Response, next: express.NextFunction) { | 302 | async function resetUserPassword (req: express.Request, res: express.Response) { |
303 | const user = res.locals.user as UserModel | 303 | const user = res.locals.user |
304 | user.password = req.body.password | 304 | user.password = req.body.password |
305 | 305 | ||
306 | await user.save() | 306 | await user.save() |
@@ -315,16 +315,16 @@ async function sendVerifyUserEmail (user: UserModel) { | |||
315 | return | 315 | return |
316 | } | 316 | } |
317 | 317 | ||
318 | async function askSendVerifyUserEmail (req: express.Request, res: express.Response, next: express.NextFunction) { | 318 | async function askSendVerifyUserEmail (req: express.Request, res: express.Response) { |
319 | const user = res.locals.user as UserModel | 319 | const user = res.locals.user |
320 | 320 | ||
321 | await sendVerifyUserEmail(user) | 321 | await sendVerifyUserEmail(user) |
322 | 322 | ||
323 | return res.status(204).end() | 323 | return res.status(204).end() |
324 | } | 324 | } |
325 | 325 | ||
326 | async function verifyUserEmail (req: express.Request, res: express.Response, next: express.NextFunction) { | 326 | async function verifyUserEmail (req: express.Request, res: express.Response) { |
327 | const user = res.locals.user as UserModel | 327 | const user = res.locals.user |
328 | user.emailVerified = true | 328 | user.emailVerified = true |
329 | 329 | ||
330 | await user.save() | 330 | await user.save() |
@@ -332,7 +332,7 @@ async function verifyUserEmail (req: express.Request, res: express.Response, nex | |||
332 | return res.status(204).end() | 332 | return res.status(204).end() |
333 | } | 333 | } |
334 | 334 | ||
335 | function success (req: express.Request, res: express.Response, next: express.NextFunction) { | 335 | function success (req: express.Request, res: express.Response) { |
336 | res.end() | 336 | res.end() |
337 | } | 337 | } |
338 | 338 | ||
diff --git a/server/controllers/api/users/me.ts b/server/controllers/api/users/me.ts index d5e154869..3533499be 100644 --- a/server/controllers/api/users/me.ts +++ b/server/controllers/api/users/me.ts | |||
@@ -93,8 +93,8 @@ export { | |||
93 | 93 | ||
94 | // --------------------------------------------------------------------------- | 94 | // --------------------------------------------------------------------------- |
95 | 95 | ||
96 | async function getUserVideos (req: express.Request, res: express.Response, next: express.NextFunction) { | 96 | async function getUserVideos (req: express.Request, res: express.Response) { |
97 | const user = res.locals.oauth.token.User as UserModel | 97 | const user = res.locals.oauth.token.User |
98 | const resultList = await VideoModel.listUserVideosForApi( | 98 | const resultList = await VideoModel.listUserVideosForApi( |
99 | user.Account.id, | 99 | user.Account.id, |
100 | req.query.start as number, | 100 | req.query.start as number, |
@@ -111,8 +111,8 @@ async function getUserVideos (req: express.Request, res: express.Response, next: | |||
111 | return res.json(getFormattedObjects(resultList.data, resultList.total, { additionalAttributes })) | 111 | return res.json(getFormattedObjects(resultList.data, resultList.total, { additionalAttributes })) |
112 | } | 112 | } |
113 | 113 | ||
114 | async function getUserVideoImports (req: express.Request, res: express.Response, next: express.NextFunction) { | 114 | async function getUserVideoImports (req: express.Request, res: express.Response) { |
115 | const user = res.locals.oauth.token.User as UserModel | 115 | const user = res.locals.oauth.token.User |
116 | const resultList = await VideoImportModel.listUserVideoImportsForApi( | 116 | const resultList = await VideoImportModel.listUserVideoImportsForApi( |
117 | user.id, | 117 | user.id, |
118 | req.query.start as number, | 118 | req.query.start as number, |
@@ -123,14 +123,14 @@ async function getUserVideoImports (req: express.Request, res: express.Response, | |||
123 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 123 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
124 | } | 124 | } |
125 | 125 | ||
126 | async function getUserInformation (req: express.Request, res: express.Response, next: express.NextFunction) { | 126 | async function getUserInformation (req: express.Request, res: express.Response) { |
127 | // We did not load channels in res.locals.user | 127 | // We did not load channels in res.locals.user |
128 | const user = await UserModel.loadByUsernameAndPopulateChannels(res.locals.oauth.token.user.username) | 128 | const user = await UserModel.loadByUsernameAndPopulateChannels(res.locals.oauth.token.user.username) |
129 | 129 | ||
130 | return res.json(user.toFormattedJSON()) | 130 | return res.json(user.toFormattedJSON()) |
131 | } | 131 | } |
132 | 132 | ||
133 | async function getUserVideoQuotaUsed (req: express.Request, res: express.Response, next: express.NextFunction) { | 133 | async function getUserVideoQuotaUsed (req: express.Request, res: express.Response) { |
134 | // We did not load channels in res.locals.user | 134 | // We did not load channels in res.locals.user |
135 | const user = await UserModel.loadByUsernameAndPopulateChannels(res.locals.oauth.token.user.username) | 135 | const user = await UserModel.loadByUsernameAndPopulateChannels(res.locals.oauth.token.user.username) |
136 | const videoQuotaUsed = await UserModel.getOriginalVideoFileTotalFromUser(user) | 136 | const videoQuotaUsed = await UserModel.getOriginalVideoFileTotalFromUser(user) |
@@ -143,7 +143,7 @@ async function getUserVideoQuotaUsed (req: express.Request, res: express.Respons | |||
143 | return res.json(data) | 143 | return res.json(data) |
144 | } | 144 | } |
145 | 145 | ||
146 | async function getUserVideoRating (req: express.Request, res: express.Response, next: express.NextFunction) { | 146 | async function getUserVideoRating (req: express.Request, res: express.Response) { |
147 | const videoId = res.locals.video.id | 147 | const videoId = res.locals.video.id |
148 | const accountId = +res.locals.oauth.token.User.Account.id | 148 | const accountId = +res.locals.oauth.token.User.Account.id |
149 | 149 | ||
@@ -158,7 +158,7 @@ async function getUserVideoRating (req: express.Request, res: express.Response, | |||
158 | } | 158 | } |
159 | 159 | ||
160 | async function deleteMe (req: express.Request, res: express.Response) { | 160 | async function deleteMe (req: express.Request, res: express.Response) { |
161 | const user: UserModel = res.locals.oauth.token.User | 161 | const user = res.locals.oauth.token.User |
162 | 162 | ||
163 | await user.destroy() | 163 | await user.destroy() |
164 | 164 | ||
@@ -170,7 +170,7 @@ async function deleteMe (req: express.Request, res: express.Response) { | |||
170 | async function updateMe (req: express.Request, res: express.Response) { | 170 | async function updateMe (req: express.Request, res: express.Response) { |
171 | const body: UserUpdateMe = req.body | 171 | const body: UserUpdateMe = req.body |
172 | 172 | ||
173 | const user: UserModel = res.locals.oauth.token.user | 173 | const user = res.locals.oauth.token.user |
174 | const oldUserAuditView = new UserAuditView(user.toFormattedJSON()) | 174 | const oldUserAuditView = new UserAuditView(user.toFormattedJSON()) |
175 | 175 | ||
176 | if (body.password !== undefined) user.password = body.password | 176 | if (body.password !== undefined) user.password = body.password |
@@ -199,7 +199,7 @@ async function updateMe (req: express.Request, res: express.Response) { | |||
199 | 199 | ||
200 | async function updateMyAvatar (req: express.Request, res: express.Response) { | 200 | async function updateMyAvatar (req: express.Request, res: express.Response) { |
201 | const avatarPhysicalFile = req.files[ 'avatarfile' ][ 0 ] | 201 | const avatarPhysicalFile = req.files[ 'avatarfile' ][ 0 ] |
202 | const user: UserModel = res.locals.oauth.token.user | 202 | const user = res.locals.oauth.token.user |
203 | const oldUserAuditView = new UserAuditView(user.toFormattedJSON()) | 203 | const oldUserAuditView = new UserAuditView(user.toFormattedJSON()) |
204 | 204 | ||
205 | const userAccount = await AccountModel.load(user.Account.id) | 205 | const userAccount = await AccountModel.load(user.Account.id) |
diff --git a/server/controllers/api/users/my-blocklist.ts b/server/controllers/api/users/my-blocklist.ts index 9575eab46..481e75139 100644 --- a/server/controllers/api/users/my-blocklist.ts +++ b/server/controllers/api/users/my-blocklist.ts | |||
@@ -17,7 +17,6 @@ import { | |||
17 | serversBlocklistSortValidator, | 17 | serversBlocklistSortValidator, |
18 | unblockServerByAccountValidator | 18 | unblockServerByAccountValidator |
19 | } from '../../../middlewares/validators' | 19 | } from '../../../middlewares/validators' |
20 | import { UserModel } from '../../../models/account/user' | ||
21 | import { AccountModel } from '../../../models/account/account' | 20 | import { AccountModel } from '../../../models/account/account' |
22 | import { AccountBlocklistModel } from '../../../models/account/account-blocklist' | 21 | import { AccountBlocklistModel } from '../../../models/account/account-blocklist' |
23 | import { addAccountInBlocklist, addServerInBlocklist, removeAccountFromBlocklist, removeServerFromBlocklist } from '../../../lib/blocklist' | 22 | import { addAccountInBlocklist, addServerInBlocklist, removeAccountFromBlocklist, removeServerFromBlocklist } from '../../../lib/blocklist' |
@@ -75,7 +74,7 @@ export { | |||
75 | // --------------------------------------------------------------------------- | 74 | // --------------------------------------------------------------------------- |
76 | 75 | ||
77 | async function listBlockedAccounts (req: express.Request, res: express.Response) { | 76 | async function listBlockedAccounts (req: express.Request, res: express.Response) { |
78 | const user: UserModel = res.locals.oauth.token.User | 77 | const user = res.locals.oauth.token.User |
79 | 78 | ||
80 | const resultList = await AccountBlocklistModel.listForApi(user.Account.id, req.query.start, req.query.count, req.query.sort) | 79 | const resultList = await AccountBlocklistModel.listForApi(user.Account.id, req.query.start, req.query.count, req.query.sort) |
81 | 80 | ||
@@ -83,8 +82,8 @@ async function listBlockedAccounts (req: express.Request, res: express.Response) | |||
83 | } | 82 | } |
84 | 83 | ||
85 | async function blockAccount (req: express.Request, res: express.Response) { | 84 | async function blockAccount (req: express.Request, res: express.Response) { |
86 | const user: UserModel = res.locals.oauth.token.User | 85 | const user = res.locals.oauth.token.User |
87 | const accountToBlock: AccountModel = res.locals.account | 86 | const accountToBlock = res.locals.account |
88 | 87 | ||
89 | await addAccountInBlocklist(user.Account.id, accountToBlock.id) | 88 | await addAccountInBlocklist(user.Account.id, accountToBlock.id) |
90 | 89 | ||
@@ -92,7 +91,7 @@ async function blockAccount (req: express.Request, res: express.Response) { | |||
92 | } | 91 | } |
93 | 92 | ||
94 | async function unblockAccount (req: express.Request, res: express.Response) { | 93 | async function unblockAccount (req: express.Request, res: express.Response) { |
95 | const accountBlock: AccountBlocklistModel = res.locals.accountBlock | 94 | const accountBlock = res.locals.accountBlock |
96 | 95 | ||
97 | await removeAccountFromBlocklist(accountBlock) | 96 | await removeAccountFromBlocklist(accountBlock) |
98 | 97 | ||
@@ -100,7 +99,7 @@ async function unblockAccount (req: express.Request, res: express.Response) { | |||
100 | } | 99 | } |
101 | 100 | ||
102 | async function listBlockedServers (req: express.Request, res: express.Response) { | 101 | async function listBlockedServers (req: express.Request, res: express.Response) { |
103 | const user: UserModel = res.locals.oauth.token.User | 102 | const user = res.locals.oauth.token.User |
104 | 103 | ||
105 | const resultList = await ServerBlocklistModel.listForApi(user.Account.id, req.query.start, req.query.count, req.query.sort) | 104 | const resultList = await ServerBlocklistModel.listForApi(user.Account.id, req.query.start, req.query.count, req.query.sort) |
106 | 105 | ||
@@ -108,8 +107,8 @@ async function listBlockedServers (req: express.Request, res: express.Response) | |||
108 | } | 107 | } |
109 | 108 | ||
110 | async function blockServer (req: express.Request, res: express.Response) { | 109 | async function blockServer (req: express.Request, res: express.Response) { |
111 | const user: UserModel = res.locals.oauth.token.User | 110 | const user = res.locals.oauth.token.User |
112 | const serverToBlock: ServerModel = res.locals.server | 111 | const serverToBlock = res.locals.server |
113 | 112 | ||
114 | await addServerInBlocklist(user.Account.id, serverToBlock.id) | 113 | await addServerInBlocklist(user.Account.id, serverToBlock.id) |
115 | 114 | ||
@@ -117,7 +116,7 @@ async function blockServer (req: express.Request, res: express.Response) { | |||
117 | } | 116 | } |
118 | 117 | ||
119 | async function unblockServer (req: express.Request, res: express.Response) { | 118 | async function unblockServer (req: express.Request, res: express.Response) { |
120 | const serverBlock: ServerBlocklistModel = res.locals.serverBlock | 119 | const serverBlock = res.locals.serverBlock |
121 | 120 | ||
122 | await removeServerFromBlocklist(serverBlock) | 121 | await removeServerFromBlocklist(serverBlock) |
123 | 122 | ||
diff --git a/server/controllers/api/users/my-history.ts b/server/controllers/api/users/my-history.ts index 6cd782c47..b30d3aec2 100644 --- a/server/controllers/api/users/my-history.ts +++ b/server/controllers/api/users/my-history.ts | |||
@@ -36,7 +36,7 @@ export { | |||
36 | // --------------------------------------------------------------------------- | 36 | // --------------------------------------------------------------------------- |
37 | 37 | ||
38 | async function listMyVideosHistory (req: express.Request, res: express.Response) { | 38 | async function listMyVideosHistory (req: express.Request, res: express.Response) { |
39 | const user: UserModel = res.locals.oauth.token.User | 39 | const user = res.locals.oauth.token.User |
40 | 40 | ||
41 | const resultList = await UserVideoHistoryModel.listForApi(user, req.query.start, req.query.count) | 41 | const resultList = await UserVideoHistoryModel.listForApi(user, req.query.start, req.query.count) |
42 | 42 | ||
@@ -44,7 +44,7 @@ async function listMyVideosHistory (req: express.Request, res: express.Response) | |||
44 | } | 44 | } |
45 | 45 | ||
46 | async function removeUserHistory (req: express.Request, res: express.Response) { | 46 | async function removeUserHistory (req: express.Request, res: express.Response) { |
47 | const user: UserModel = res.locals.oauth.token.User | 47 | const user = res.locals.oauth.token.User |
48 | const beforeDate = req.body.beforeDate || null | 48 | const beforeDate = req.body.beforeDate || null |
49 | 49 | ||
50 | await sequelizeTypescript.transaction(t => { | 50 | await sequelizeTypescript.transaction(t => { |
diff --git a/server/controllers/api/users/my-notifications.ts b/server/controllers/api/users/my-notifications.ts index 76cf97587..bbafda5a6 100644 --- a/server/controllers/api/users/my-notifications.ts +++ b/server/controllers/api/users/my-notifications.ts | |||
@@ -9,7 +9,6 @@ import { | |||
9 | setDefaultSort, | 9 | setDefaultSort, |
10 | userNotificationsSortValidator | 10 | userNotificationsSortValidator |
11 | } from '../../../middlewares' | 11 | } from '../../../middlewares' |
12 | import { UserModel } from '../../../models/account/user' | ||
13 | import { getFormattedObjects } from '../../../helpers/utils' | 12 | import { getFormattedObjects } from '../../../helpers/utils' |
14 | import { UserNotificationModel } from '../../../models/account/user-notification' | 13 | import { UserNotificationModel } from '../../../models/account/user-notification' |
15 | import { meRouter } from './me' | 14 | import { meRouter } from './me' |
@@ -57,8 +56,8 @@ export { | |||
57 | // --------------------------------------------------------------------------- | 56 | // --------------------------------------------------------------------------- |
58 | 57 | ||
59 | async function updateNotificationSettings (req: express.Request, res: express.Response) { | 58 | async function updateNotificationSettings (req: express.Request, res: express.Response) { |
60 | const user: UserModel = res.locals.oauth.token.User | 59 | const user = res.locals.oauth.token.User |
61 | const body = req.body | 60 | const body = req.body as UserNotificationSetting |
62 | 61 | ||
63 | const query = { | 62 | const query = { |
64 | where: { | 63 | where: { |
@@ -84,7 +83,7 @@ async function updateNotificationSettings (req: express.Request, res: express.Re | |||
84 | } | 83 | } |
85 | 84 | ||
86 | async function listUserNotifications (req: express.Request, res: express.Response) { | 85 | async function listUserNotifications (req: express.Request, res: express.Response) { |
87 | const user: UserModel = res.locals.oauth.token.User | 86 | const user = res.locals.oauth.token.User |
88 | 87 | ||
89 | const resultList = await UserNotificationModel.listForApi(user.id, req.query.start, req.query.count, req.query.sort, req.query.unread) | 88 | const resultList = await UserNotificationModel.listForApi(user.id, req.query.start, req.query.count, req.query.sort, req.query.unread) |
90 | 89 | ||
@@ -92,7 +91,7 @@ async function listUserNotifications (req: express.Request, res: express.Respons | |||
92 | } | 91 | } |
93 | 92 | ||
94 | async function markAsReadUserNotifications (req: express.Request, res: express.Response) { | 93 | async function markAsReadUserNotifications (req: express.Request, res: express.Response) { |
95 | const user: UserModel = res.locals.oauth.token.User | 94 | const user = res.locals.oauth.token.User |
96 | 95 | ||
97 | await UserNotificationModel.markAsRead(user.id, req.body.ids) | 96 | await UserNotificationModel.markAsRead(user.id, req.body.ids) |
98 | 97 | ||
@@ -100,7 +99,7 @@ async function markAsReadUserNotifications (req: express.Request, res: express.R | |||
100 | } | 99 | } |
101 | 100 | ||
102 | async function markAsReadAllUserNotifications (req: express.Request, res: express.Response) { | 101 | async function markAsReadAllUserNotifications (req: express.Request, res: express.Response) { |
103 | const user: UserModel = res.locals.oauth.token.User | 102 | const user = res.locals.oauth.token.User |
104 | 103 | ||
105 | await UserNotificationModel.markAllAsRead(user.id) | 104 | await UserNotificationModel.markAllAsRead(user.id) |
106 | 105 | ||
diff --git a/server/controllers/api/users/my-subscriptions.ts b/server/controllers/api/users/my-subscriptions.ts index accca6d52..a173adfd0 100644 --- a/server/controllers/api/users/my-subscriptions.ts +++ b/server/controllers/api/users/my-subscriptions.ts | |||
@@ -14,7 +14,6 @@ import { | |||
14 | userSubscriptionGetValidator | 14 | userSubscriptionGetValidator |
15 | } from '../../../middlewares' | 15 | } from '../../../middlewares' |
16 | import { areSubscriptionsExistValidator, userSubscriptionsSortValidator, videosSortValidator } from '../../../middlewares/validators' | 16 | import { areSubscriptionsExistValidator, userSubscriptionsSortValidator, videosSortValidator } from '../../../middlewares/validators' |
17 | import { UserModel } from '../../../models/account/user' | ||
18 | import { VideoModel } from '../../../models/video/video' | 17 | import { VideoModel } from '../../../models/video/video' |
19 | import { buildNSFWFilter } from '../../../helpers/express-utils' | 18 | import { buildNSFWFilter } from '../../../helpers/express-utils' |
20 | import { VideoFilter } from '../../../../shared/models/videos/video-query.type' | 19 | import { VideoFilter } from '../../../../shared/models/videos/video-query.type' |
@@ -77,7 +76,7 @@ export { | |||
77 | 76 | ||
78 | async function areSubscriptionsExist (req: express.Request, res: express.Response) { | 77 | async function areSubscriptionsExist (req: express.Request, res: express.Response) { |
79 | const uris = req.query.uris as string[] | 78 | const uris = req.query.uris as string[] |
80 | const user = res.locals.oauth.token.User as UserModel | 79 | const user = res.locals.oauth.token.User |
81 | 80 | ||
82 | const handles = uris.map(u => { | 81 | const handles = uris.map(u => { |
83 | let [ name, host ] = u.split('@') | 82 | let [ name, host ] = u.split('@') |
@@ -107,7 +106,7 @@ async function areSubscriptionsExist (req: express.Request, res: express.Respons | |||
107 | } | 106 | } |
108 | 107 | ||
109 | async function addUserSubscription (req: express.Request, res: express.Response) { | 108 | async function addUserSubscription (req: express.Request, res: express.Response) { |
110 | const user = res.locals.oauth.token.User as UserModel | 109 | const user = res.locals.oauth.token.User |
111 | const [ name, host ] = req.body.uri.split('@') | 110 | const [ name, host ] = req.body.uri.split('@') |
112 | 111 | ||
113 | const payload = { | 112 | const payload = { |
@@ -123,13 +122,13 @@ async function addUserSubscription (req: express.Request, res: express.Response) | |||
123 | } | 122 | } |
124 | 123 | ||
125 | function getUserSubscription (req: express.Request, res: express.Response) { | 124 | function getUserSubscription (req: express.Request, res: express.Response) { |
126 | const subscription: ActorFollowModel = res.locals.subscription | 125 | const subscription = res.locals.subscription |
127 | 126 | ||
128 | return res.json(subscription.ActorFollowing.VideoChannel.toFormattedJSON()) | 127 | return res.json(subscription.ActorFollowing.VideoChannel.toFormattedJSON()) |
129 | } | 128 | } |
130 | 129 | ||
131 | async function deleteUserSubscription (req: express.Request, res: express.Response) { | 130 | async function deleteUserSubscription (req: express.Request, res: express.Response) { |
132 | const subscription: ActorFollowModel = res.locals.subscription | 131 | const subscription = res.locals.subscription |
133 | 132 | ||
134 | await sequelizeTypescript.transaction(async t => { | 133 | await sequelizeTypescript.transaction(async t => { |
135 | return subscription.destroy({ transaction: t }) | 134 | return subscription.destroy({ transaction: t }) |
@@ -139,7 +138,7 @@ async function deleteUserSubscription (req: express.Request, res: express.Respon | |||
139 | } | 138 | } |
140 | 139 | ||
141 | async function getUserSubscriptions (req: express.Request, res: express.Response) { | 140 | async function getUserSubscriptions (req: express.Request, res: express.Response) { |
142 | const user = res.locals.oauth.token.User as UserModel | 141 | const user = res.locals.oauth.token.User |
143 | const actorId = user.Account.Actor.id | 142 | const actorId = user.Account.Actor.id |
144 | 143 | ||
145 | const resultList = await ActorFollowModel.listSubscriptionsForApi(actorId, req.query.start, req.query.count, req.query.sort) | 144 | const resultList = await ActorFollowModel.listSubscriptionsForApi(actorId, req.query.start, req.query.count, req.query.sort) |
@@ -147,8 +146,8 @@ async function getUserSubscriptions (req: express.Request, res: express.Response | |||
147 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 146 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
148 | } | 147 | } |
149 | 148 | ||
150 | async function getUserSubscriptionVideos (req: express.Request, res: express.Response, next: express.NextFunction) { | 149 | async function getUserSubscriptionVideos (req: express.Request, res: express.Response) { |
151 | const user = res.locals.oauth.token.User as UserModel | 150 | const user = res.locals.oauth.token.User |
152 | const resultList = await VideoModel.listForApi({ | 151 | const resultList = await VideoModel.listForApi({ |
153 | start: req.query.start, | 152 | start: req.query.start, |
154 | count: req.query.count, | 153 | count: req.query.count, |
diff --git a/server/controllers/api/users/my-video-playlists.ts b/server/controllers/api/users/my-video-playlists.ts index 42da02bff..15e92f4f3 100644 --- a/server/controllers/api/users/my-video-playlists.ts +++ b/server/controllers/api/users/my-video-playlists.ts | |||
@@ -1,6 +1,5 @@ | |||
1 | import * as express from 'express' | 1 | import * as express from 'express' |
2 | import { asyncMiddleware, authenticate } from '../../../middlewares' | 2 | import { asyncMiddleware, authenticate } from '../../../middlewares' |
3 | import { UserModel } from '../../../models/account/user' | ||
4 | import { doVideosInPlaylistExistValidator } from '../../../middlewares/validators/videos/video-playlists' | 3 | import { doVideosInPlaylistExistValidator } from '../../../middlewares/validators/videos/video-playlists' |
5 | import { VideoPlaylistModel } from '../../../models/video/video-playlist' | 4 | import { VideoPlaylistModel } from '../../../models/video/video-playlist' |
6 | import { VideoExistInPlaylist } from '../../../../shared/models/videos/playlist/video-exist-in-playlist.model' | 5 | import { VideoExistInPlaylist } from '../../../../shared/models/videos/playlist/video-exist-in-playlist.model' |
@@ -23,7 +22,7 @@ export { | |||
23 | 22 | ||
24 | async function doVideosInPlaylistExist (req: express.Request, res: express.Response) { | 23 | async function doVideosInPlaylistExist (req: express.Request, res: express.Response) { |
25 | const videoIds = req.query.videoIds.map(i => parseInt(i + '', 10)) | 24 | const videoIds = req.query.videoIds.map(i => parseInt(i + '', 10)) |
26 | const user = res.locals.oauth.token.User as UserModel | 25 | const user = res.locals.oauth.token.User |
27 | 26 | ||
28 | const results = await VideoPlaylistModel.listPlaylistIdsOf(user.Account.id, videoIds) | 27 | const results = await VideoPlaylistModel.listPlaylistIdsOf(user.Account.id, videoIds) |
29 | 28 | ||
diff --git a/server/controllers/api/video-channel.ts b/server/controllers/api/video-channel.ts index c13aed4dc..5881cab41 100644 --- a/server/controllers/api/video-channel.ts +++ b/server/controllers/api/video-channel.ts | |||
@@ -30,7 +30,6 @@ import { updateAvatarValidator } from '../../middlewares/validators/avatar' | |||
30 | import { updateActorAvatarFile } from '../../lib/avatar' | 30 | import { updateActorAvatarFile } from '../../lib/avatar' |
31 | import { auditLoggerFactory, getAuditIdFromRes, VideoChannelAuditView } from '../../helpers/audit-logger' | 31 | import { auditLoggerFactory, getAuditIdFromRes, VideoChannelAuditView } from '../../helpers/audit-logger' |
32 | import { resetSequelizeInstance } from '../../helpers/database-utils' | 32 | import { resetSequelizeInstance } from '../../helpers/database-utils' |
33 | import { UserModel } from '../../models/account/user' | ||
34 | import { JobQueue } from '../../lib/job-queue' | 33 | import { JobQueue } from '../../lib/job-queue' |
35 | import { VideoPlaylistModel } from '../../models/video/video-playlist' | 34 | import { VideoPlaylistModel } from '../../models/video/video-playlist' |
36 | import { commonVideoPlaylistFiltersValidator } from '../../middlewares/validators/videos/video-playlists' | 35 | import { commonVideoPlaylistFiltersValidator } from '../../middlewares/validators/videos/video-playlists' |
@@ -109,16 +108,16 @@ export { | |||
109 | 108 | ||
110 | // --------------------------------------------------------------------------- | 109 | // --------------------------------------------------------------------------- |
111 | 110 | ||
112 | async function listVideoChannels (req: express.Request, res: express.Response, next: express.NextFunction) { | 111 | async function listVideoChannels (req: express.Request, res: express.Response) { |
113 | const serverActor = await getServerActor() | 112 | const serverActor = await getServerActor() |
114 | const resultList = await VideoChannelModel.listForApi(serverActor.id, req.query.start, req.query.count, req.query.sort) | 113 | const resultList = await VideoChannelModel.listForApi(serverActor.id, req.query.start, req.query.count, req.query.sort) |
115 | 114 | ||
116 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 115 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
117 | } | 116 | } |
118 | 117 | ||
119 | async function updateVideoChannelAvatar (req: express.Request, res: express.Response, next: express.NextFunction) { | 118 | async function updateVideoChannelAvatar (req: express.Request, res: express.Response) { |
120 | const avatarPhysicalFile = req.files[ 'avatarfile' ][ 0 ] | 119 | const avatarPhysicalFile = req.files[ 'avatarfile' ][ 0 ] |
121 | const videoChannel = res.locals.videoChannel as VideoChannelModel | 120 | const videoChannel = res.locals.videoChannel |
122 | const oldVideoChannelAuditKeys = new VideoChannelAuditView(videoChannel.toFormattedJSON()) | 121 | const oldVideoChannelAuditKeys = new VideoChannelAuditView(videoChannel.toFormattedJSON()) |
123 | 122 | ||
124 | const avatar = await updateActorAvatarFile(avatarPhysicalFile, videoChannel) | 123 | const avatar = await updateActorAvatarFile(avatarPhysicalFile, videoChannel) |
@@ -136,7 +135,7 @@ async function addVideoChannel (req: express.Request, res: express.Response) { | |||
136 | const videoChannelInfo: VideoChannelCreate = req.body | 135 | const videoChannelInfo: VideoChannelCreate = req.body |
137 | 136 | ||
138 | const videoChannelCreated: VideoChannelModel = await sequelizeTypescript.transaction(async t => { | 137 | const videoChannelCreated: VideoChannelModel = await sequelizeTypescript.transaction(async t => { |
139 | const account = await AccountModel.load((res.locals.oauth.token.User as UserModel).Account.id, t) | 138 | const account = await AccountModel.load(res.locals.oauth.token.User.Account.id, t) |
140 | 139 | ||
141 | return createVideoChannel(videoChannelInfo, account, t) | 140 | return createVideoChannel(videoChannelInfo, account, t) |
142 | }) | 141 | }) |
@@ -156,7 +155,7 @@ async function addVideoChannel (req: express.Request, res: express.Response) { | |||
156 | } | 155 | } |
157 | 156 | ||
158 | async function updateVideoChannel (req: express.Request, res: express.Response) { | 157 | async function updateVideoChannel (req: express.Request, res: express.Response) { |
159 | const videoChannelInstance = res.locals.videoChannel as VideoChannelModel | 158 | const videoChannelInstance = res.locals.videoChannel |
160 | const videoChannelFieldsSave = videoChannelInstance.toJSON() | 159 | const videoChannelFieldsSave = videoChannelInstance.toJSON() |
161 | const oldVideoChannelAuditKeys = new VideoChannelAuditView(videoChannelInstance.toFormattedJSON()) | 160 | const oldVideoChannelAuditKeys = new VideoChannelAuditView(videoChannelInstance.toFormattedJSON()) |
162 | const videoChannelInfoToUpdate = req.body as VideoChannelUpdate | 161 | const videoChannelInfoToUpdate = req.body as VideoChannelUpdate |
@@ -196,7 +195,7 @@ async function updateVideoChannel (req: express.Request, res: express.Response) | |||
196 | } | 195 | } |
197 | 196 | ||
198 | async function removeVideoChannel (req: express.Request, res: express.Response) { | 197 | async function removeVideoChannel (req: express.Request, res: express.Response) { |
199 | const videoChannelInstance: VideoChannelModel = res.locals.videoChannel | 198 | const videoChannelInstance = res.locals.videoChannel |
200 | 199 | ||
201 | await sequelizeTypescript.transaction(async t => { | 200 | await sequelizeTypescript.transaction(async t => { |
202 | await VideoPlaylistModel.resetPlaylistsOfChannel(videoChannelInstance.id, t) | 201 | await VideoPlaylistModel.resetPlaylistsOfChannel(videoChannelInstance.id, t) |
@@ -210,7 +209,7 @@ async function removeVideoChannel (req: express.Request, res: express.Response) | |||
210 | return res.type('json').status(204).end() | 209 | return res.type('json').status(204).end() |
211 | } | 210 | } |
212 | 211 | ||
213 | async function getVideoChannel (req: express.Request, res: express.Response, next: express.NextFunction) { | 212 | async function getVideoChannel (req: express.Request, res: express.Response) { |
214 | const videoChannelWithVideos = await VideoChannelModel.loadAndPopulateAccountAndVideos(res.locals.videoChannel.id) | 213 | const videoChannelWithVideos = await VideoChannelModel.loadAndPopulateAccountAndVideos(res.locals.videoChannel.id) |
215 | 214 | ||
216 | if (videoChannelWithVideos.isOutdated()) { | 215 | if (videoChannelWithVideos.isOutdated()) { |
@@ -236,8 +235,8 @@ async function listVideoChannelPlaylists (req: express.Request, res: express.Res | |||
236 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 235 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
237 | } | 236 | } |
238 | 237 | ||
239 | async function listVideoChannelVideos (req: express.Request, res: express.Response, next: express.NextFunction) { | 238 | async function listVideoChannelVideos (req: express.Request, res: express.Response) { |
240 | const videoChannelInstance: VideoChannelModel = res.locals.videoChannel | 239 | const videoChannelInstance = res.locals.videoChannel |
241 | const followerActorId = isUserAbleToSearchRemoteURI(res) ? null : undefined | 240 | const followerActorId = isUserAbleToSearchRemoteURI(res) ? null : undefined |
242 | 241 | ||
243 | const resultList = await VideoModel.listForApi({ | 242 | const resultList = await VideoModel.listForApi({ |
diff --git a/server/controllers/api/video-playlist.ts b/server/controllers/api/video-playlist.ts index c7dfc583b..5b1601c4e 100644 --- a/server/controllers/api/video-playlist.ts +++ b/server/controllers/api/video-playlist.ts | |||
@@ -10,7 +10,6 @@ import { | |||
10 | setDefaultPagination, | 10 | setDefaultPagination, |
11 | setDefaultSort | 11 | setDefaultSort |
12 | } from '../../middlewares' | 12 | } from '../../middlewares' |
13 | import { VideoChannelModel } from '../../models/video/video-channel' | ||
14 | import { videoPlaylistsSortValidator } from '../../middlewares/validators' | 13 | import { videoPlaylistsSortValidator } from '../../middlewares/validators' |
15 | import { buildNSFWFilter, createReqFiles, isUserAbleToSearchRemoteURI } from '../../helpers/express-utils' | 14 | import { buildNSFWFilter, createReqFiles, isUserAbleToSearchRemoteURI } from '../../helpers/express-utils' |
16 | import { CONFIG, MIMETYPES, sequelizeTypescript, THUMBNAILS_SIZE, VIDEO_PLAYLIST_PRIVACIES } from '../../initializers' | 15 | import { CONFIG, MIMETYPES, sequelizeTypescript, THUMBNAILS_SIZE, VIDEO_PLAYLIST_PRIVACIES } from '../../initializers' |
@@ -31,7 +30,6 @@ import { VideoPlaylistCreate } from '../../../shared/models/videos/playlist/vide | |||
31 | import { VideoPlaylistPrivacy } from '../../../shared/models/videos/playlist/video-playlist-privacy.model' | 30 | import { VideoPlaylistPrivacy } from '../../../shared/models/videos/playlist/video-playlist-privacy.model' |
32 | import { processImage } from '../../helpers/image-utils' | 31 | import { processImage } from '../../helpers/image-utils' |
33 | import { join } from 'path' | 32 | import { join } from 'path' |
34 | import { UserModel } from '../../models/account/user' | ||
35 | import { sendCreateVideoPlaylist, sendDeleteVideoPlaylist, sendUpdateVideoPlaylist } from '../../lib/activitypub/send' | 33 | import { sendCreateVideoPlaylist, sendDeleteVideoPlaylist, sendUpdateVideoPlaylist } from '../../lib/activitypub/send' |
36 | import { getVideoPlaylistActivityPubUrl, getVideoPlaylistElementActivityPubUrl } from '../../lib/activitypub/url' | 34 | import { getVideoPlaylistActivityPubUrl, getVideoPlaylistElementActivityPubUrl } from '../../lib/activitypub/url' |
37 | import { VideoPlaylistUpdate } from '../../../shared/models/videos/playlist/video-playlist-update.model' | 35 | import { VideoPlaylistUpdate } from '../../../shared/models/videos/playlist/video-playlist-update.model' |
@@ -142,14 +140,14 @@ async function listVideoPlaylists (req: express.Request, res: express.Response) | |||
142 | } | 140 | } |
143 | 141 | ||
144 | function getVideoPlaylist (req: express.Request, res: express.Response) { | 142 | function getVideoPlaylist (req: express.Request, res: express.Response) { |
145 | const videoPlaylist = res.locals.videoPlaylist as VideoPlaylistModel | 143 | const videoPlaylist = res.locals.videoPlaylist |
146 | 144 | ||
147 | return res.json(videoPlaylist.toFormattedJSON()) | 145 | return res.json(videoPlaylist.toFormattedJSON()) |
148 | } | 146 | } |
149 | 147 | ||
150 | async function addVideoPlaylist (req: express.Request, res: express.Response) { | 148 | async function addVideoPlaylist (req: express.Request, res: express.Response) { |
151 | const videoPlaylistInfo: VideoPlaylistCreate = req.body | 149 | const videoPlaylistInfo: VideoPlaylistCreate = req.body |
152 | const user: UserModel = res.locals.oauth.token.User | 150 | const user = res.locals.oauth.token.User |
153 | 151 | ||
154 | const videoPlaylist = new VideoPlaylistModel({ | 152 | const videoPlaylist = new VideoPlaylistModel({ |
155 | name: videoPlaylistInfo.displayName, | 153 | name: videoPlaylistInfo.displayName, |
@@ -161,7 +159,7 @@ async function addVideoPlaylist (req: express.Request, res: express.Response) { | |||
161 | videoPlaylist.url = getVideoPlaylistActivityPubUrl(videoPlaylist) // We use the UUID, so set the URL after building the object | 159 | videoPlaylist.url = getVideoPlaylistActivityPubUrl(videoPlaylist) // We use the UUID, so set the URL after building the object |
162 | 160 | ||
163 | if (videoPlaylistInfo.videoChannelId) { | 161 | if (videoPlaylistInfo.videoChannelId) { |
164 | const videoChannel = res.locals.videoChannel as VideoChannelModel | 162 | const videoChannel = res.locals.videoChannel |
165 | 163 | ||
166 | videoPlaylist.videoChannelId = videoChannel.id | 164 | videoPlaylist.videoChannelId = videoChannel.id |
167 | videoPlaylist.VideoChannel = videoChannel | 165 | videoPlaylist.VideoChannel = videoChannel |
@@ -194,7 +192,7 @@ async function addVideoPlaylist (req: express.Request, res: express.Response) { | |||
194 | } | 192 | } |
195 | 193 | ||
196 | async function updateVideoPlaylist (req: express.Request, res: express.Response) { | 194 | async function updateVideoPlaylist (req: express.Request, res: express.Response) { |
197 | const videoPlaylistInstance = res.locals.videoPlaylist as VideoPlaylistModel | 195 | const videoPlaylistInstance = res.locals.videoPlaylist |
198 | const videoPlaylistFieldsSave = videoPlaylistInstance.toJSON() | 196 | const videoPlaylistFieldsSave = videoPlaylistInstance.toJSON() |
199 | const videoPlaylistInfoToUpdate = req.body as VideoPlaylistUpdate | 197 | const videoPlaylistInfoToUpdate = req.body as VideoPlaylistUpdate |
200 | const wasPrivatePlaylist = videoPlaylistInstance.privacy === VideoPlaylistPrivacy.PRIVATE | 198 | const wasPrivatePlaylist = videoPlaylistInstance.privacy === VideoPlaylistPrivacy.PRIVATE |
@@ -219,7 +217,7 @@ async function updateVideoPlaylist (req: express.Request, res: express.Response) | |||
219 | if (videoPlaylistInfoToUpdate.videoChannelId === null) { | 217 | if (videoPlaylistInfoToUpdate.videoChannelId === null) { |
220 | videoPlaylistInstance.videoChannelId = null | 218 | videoPlaylistInstance.videoChannelId = null |
221 | } else { | 219 | } else { |
222 | const videoChannel = res.locals.videoChannel as VideoChannelModel | 220 | const videoChannel = res.locals.videoChannel |
223 | 221 | ||
224 | videoPlaylistInstance.videoChannelId = videoChannel.id | 222 | videoPlaylistInstance.videoChannelId = videoChannel.id |
225 | videoPlaylistInstance.VideoChannel = videoChannel | 223 | videoPlaylistInstance.VideoChannel = videoChannel |
@@ -262,7 +260,7 @@ async function updateVideoPlaylist (req: express.Request, res: express.Response) | |||
262 | } | 260 | } |
263 | 261 | ||
264 | async function removeVideoPlaylist (req: express.Request, res: express.Response) { | 262 | async function removeVideoPlaylist (req: express.Request, res: express.Response) { |
265 | const videoPlaylistInstance: VideoPlaylistModel = res.locals.videoPlaylist | 263 | const videoPlaylistInstance = res.locals.videoPlaylist |
266 | 264 | ||
267 | await sequelizeTypescript.transaction(async t => { | 265 | await sequelizeTypescript.transaction(async t => { |
268 | await videoPlaylistInstance.destroy({ transaction: t }) | 266 | await videoPlaylistInstance.destroy({ transaction: t }) |
@@ -277,8 +275,8 @@ async function removeVideoPlaylist (req: express.Request, res: express.Response) | |||
277 | 275 | ||
278 | async function addVideoInPlaylist (req: express.Request, res: express.Response) { | 276 | async function addVideoInPlaylist (req: express.Request, res: express.Response) { |
279 | const body: VideoPlaylistElementCreate = req.body | 277 | const body: VideoPlaylistElementCreate = req.body |
280 | const videoPlaylist: VideoPlaylistModel = res.locals.videoPlaylist | 278 | const videoPlaylist = res.locals.videoPlaylist |
281 | const video: VideoModel = res.locals.video | 279 | const video = res.locals.video |
282 | 280 | ||
283 | const playlistElement: VideoPlaylistElementModel = await sequelizeTypescript.transaction(async t => { | 281 | const playlistElement: VideoPlaylistElementModel = await sequelizeTypescript.transaction(async t => { |
284 | const position = await VideoPlaylistElementModel.getNextPositionOf(videoPlaylist.id, t) | 282 | const position = await VideoPlaylistElementModel.getNextPositionOf(videoPlaylist.id, t) |
@@ -323,8 +321,8 @@ async function addVideoInPlaylist (req: express.Request, res: express.Response) | |||
323 | 321 | ||
324 | async function updateVideoPlaylistElement (req: express.Request, res: express.Response) { | 322 | async function updateVideoPlaylistElement (req: express.Request, res: express.Response) { |
325 | const body: VideoPlaylistElementUpdate = req.body | 323 | const body: VideoPlaylistElementUpdate = req.body |
326 | const videoPlaylist: VideoPlaylistModel = res.locals.videoPlaylist | 324 | const videoPlaylist = res.locals.videoPlaylist |
327 | const videoPlaylistElement: VideoPlaylistElementModel = res.locals.videoPlaylistElement | 325 | const videoPlaylistElement = res.locals.videoPlaylistElement |
328 | 326 | ||
329 | const playlistElement: VideoPlaylistElementModel = await sequelizeTypescript.transaction(async t => { | 327 | const playlistElement: VideoPlaylistElementModel = await sequelizeTypescript.transaction(async t => { |
330 | if (body.startTimestamp !== undefined) videoPlaylistElement.startTimestamp = body.startTimestamp | 328 | if (body.startTimestamp !== undefined) videoPlaylistElement.startTimestamp = body.startTimestamp |
@@ -346,8 +344,8 @@ async function updateVideoPlaylistElement (req: express.Request, res: express.Re | |||
346 | } | 344 | } |
347 | 345 | ||
348 | async function removeVideoFromPlaylist (req: express.Request, res: express.Response) { | 346 | async function removeVideoFromPlaylist (req: express.Request, res: express.Response) { |
349 | const videoPlaylistElement: VideoPlaylistElementModel = res.locals.videoPlaylistElement | 347 | const videoPlaylistElement = res.locals.videoPlaylistElement |
350 | const videoPlaylist: VideoPlaylistModel = res.locals.videoPlaylist | 348 | const videoPlaylist = res.locals.videoPlaylist |
351 | const positionToDelete = videoPlaylistElement.position | 349 | const positionToDelete = videoPlaylistElement.position |
352 | 350 | ||
353 | await sequelizeTypescript.transaction(async t => { | 351 | await sequelizeTypescript.transaction(async t => { |
@@ -368,7 +366,7 @@ async function removeVideoFromPlaylist (req: express.Request, res: express.Respo | |||
368 | } | 366 | } |
369 | 367 | ||
370 | async function reorderVideosPlaylist (req: express.Request, res: express.Response) { | 368 | async function reorderVideosPlaylist (req: express.Request, res: express.Response) { |
371 | const videoPlaylist: VideoPlaylistModel = res.locals.videoPlaylist | 369 | const videoPlaylist = res.locals.videoPlaylist |
372 | const body: VideoPlaylistReorder = req.body | 370 | const body: VideoPlaylistReorder = req.body |
373 | 371 | ||
374 | const start: number = body.startPosition | 372 | const start: number = body.startPosition |
@@ -416,7 +414,7 @@ async function reorderVideosPlaylist (req: express.Request, res: express.Respons | |||
416 | } | 414 | } |
417 | 415 | ||
418 | async function getVideoPlaylistVideos (req: express.Request, res: express.Response) { | 416 | async function getVideoPlaylistVideos (req: express.Request, res: express.Response) { |
419 | const videoPlaylistInstance: VideoPlaylistModel = res.locals.videoPlaylist | 417 | const videoPlaylistInstance = res.locals.videoPlaylist |
420 | const followerActorId = isUserAbleToSearchRemoteURI(res) ? null : undefined | 418 | const followerActorId = isUserAbleToSearchRemoteURI(res) ? null : undefined |
421 | 419 | ||
422 | const resultList = await VideoModel.listForApi({ | 420 | const resultList = await VideoModel.listForApi({ |
diff --git a/server/controllers/api/videos/abuse.ts b/server/controllers/api/videos/abuse.ts index 32f9c4793..ca70230a2 100644 --- a/server/controllers/api/videos/abuse.ts +++ b/server/controllers/api/videos/abuse.ts | |||
@@ -17,10 +17,8 @@ import { | |||
17 | videoAbuseUpdateValidator | 17 | videoAbuseUpdateValidator |
18 | } from '../../../middlewares' | 18 | } from '../../../middlewares' |
19 | import { AccountModel } from '../../../models/account/account' | 19 | import { AccountModel } from '../../../models/account/account' |
20 | import { VideoModel } from '../../../models/video/video' | ||
21 | import { VideoAbuseModel } from '../../../models/video/video-abuse' | 20 | import { VideoAbuseModel } from '../../../models/video/video-abuse' |
22 | import { auditLoggerFactory, VideoAbuseAuditView } from '../../../helpers/audit-logger' | 21 | import { auditLoggerFactory, VideoAbuseAuditView } from '../../../helpers/audit-logger' |
23 | import { UserModel } from '../../../models/account/user' | ||
24 | import { Notifier } from '../../../lib/notifier' | 22 | import { Notifier } from '../../../lib/notifier' |
25 | import { sendVideoAbuse } from '../../../lib/activitypub/send/send-flag' | 23 | import { sendVideoAbuse } from '../../../lib/activitypub/send/send-flag' |
26 | 24 | ||
@@ -69,7 +67,7 @@ async function listVideoAbuses (req: express.Request, res: express.Response) { | |||
69 | } | 67 | } |
70 | 68 | ||
71 | async function updateVideoAbuse (req: express.Request, res: express.Response) { | 69 | async function updateVideoAbuse (req: express.Request, res: express.Response) { |
72 | const videoAbuse: VideoAbuseModel = res.locals.videoAbuse | 70 | const videoAbuse = res.locals.videoAbuse |
73 | 71 | ||
74 | if (req.body.moderationComment !== undefined) videoAbuse.moderationComment = req.body.moderationComment | 72 | if (req.body.moderationComment !== undefined) videoAbuse.moderationComment = req.body.moderationComment |
75 | if (req.body.state !== undefined) videoAbuse.state = req.body.state | 73 | if (req.body.state !== undefined) videoAbuse.state = req.body.state |
@@ -84,7 +82,7 @@ async function updateVideoAbuse (req: express.Request, res: express.Response) { | |||
84 | } | 82 | } |
85 | 83 | ||
86 | async function deleteVideoAbuse (req: express.Request, res: express.Response) { | 84 | async function deleteVideoAbuse (req: express.Request, res: express.Response) { |
87 | const videoAbuse: VideoAbuseModel = res.locals.videoAbuse | 85 | const videoAbuse = res.locals.videoAbuse |
88 | 86 | ||
89 | await sequelizeTypescript.transaction(t => { | 87 | await sequelizeTypescript.transaction(t => { |
90 | return videoAbuse.destroy({ transaction: t }) | 88 | return videoAbuse.destroy({ transaction: t }) |
@@ -96,11 +94,11 @@ async function deleteVideoAbuse (req: express.Request, res: express.Response) { | |||
96 | } | 94 | } |
97 | 95 | ||
98 | async function reportVideoAbuse (req: express.Request, res: express.Response) { | 96 | async function reportVideoAbuse (req: express.Request, res: express.Response) { |
99 | const videoInstance = res.locals.video as VideoModel | 97 | const videoInstance = res.locals.video |
100 | const body: VideoAbuseCreate = req.body | 98 | const body: VideoAbuseCreate = req.body |
101 | 99 | ||
102 | const videoAbuse: VideoAbuseModel = await sequelizeTypescript.transaction(async t => { | 100 | const videoAbuse: VideoAbuseModel = await sequelizeTypescript.transaction(async t => { |
103 | const reporterAccount = await AccountModel.load((res.locals.oauth.token.User as UserModel).Account.id, t) | 101 | const reporterAccount = await AccountModel.load(res.locals.oauth.token.User.Account.id, t) |
104 | 102 | ||
105 | const abuseToCreate = { | 103 | const abuseToCreate = { |
106 | reporterAccountId: reporterAccount.id, | 104 | reporterAccountId: reporterAccount.id, |
diff --git a/server/controllers/api/videos/blacklist.ts b/server/controllers/api/videos/blacklist.ts index b01296200..d0728eb59 100644 --- a/server/controllers/api/videos/blacklist.ts +++ b/server/controllers/api/videos/blacklist.ts | |||
@@ -17,7 +17,6 @@ import { | |||
17 | import { VideoBlacklistModel } from '../../../models/video/video-blacklist' | 17 | import { VideoBlacklistModel } from '../../../models/video/video-blacklist' |
18 | import { sequelizeTypescript } from '../../../initializers' | 18 | import { sequelizeTypescript } from '../../../initializers' |
19 | import { Notifier } from '../../../lib/notifier' | 19 | import { Notifier } from '../../../lib/notifier' |
20 | import { VideoModel } from '../../../models/video/video' | ||
21 | import { sendDeleteVideo } from '../../../lib/activitypub/send' | 20 | import { sendDeleteVideo } from '../../../lib/activitypub/send' |
22 | import { federateVideoIfNeeded } from '../../../lib/activitypub' | 21 | import { federateVideoIfNeeded } from '../../../lib/activitypub' |
23 | 22 | ||
@@ -87,7 +86,7 @@ async function addVideoToBlacklist (req: express.Request, res: express.Response) | |||
87 | } | 86 | } |
88 | 87 | ||
89 | async function updateVideoBlacklistController (req: express.Request, res: express.Response) { | 88 | async function updateVideoBlacklistController (req: express.Request, res: express.Response) { |
90 | const videoBlacklist = res.locals.videoBlacklist as VideoBlacklistModel | 89 | const videoBlacklist = res.locals.videoBlacklist |
91 | 90 | ||
92 | if (req.body.reason !== undefined) videoBlacklist.reason = req.body.reason | 91 | if (req.body.reason !== undefined) videoBlacklist.reason = req.body.reason |
93 | 92 | ||
@@ -105,8 +104,8 @@ async function listBlacklist (req: express.Request, res: express.Response, next: | |||
105 | } | 104 | } |
106 | 105 | ||
107 | async function removeVideoFromBlacklistController (req: express.Request, res: express.Response, next: express.NextFunction) { | 106 | async function removeVideoFromBlacklistController (req: express.Request, res: express.Response, next: express.NextFunction) { |
108 | const videoBlacklist = res.locals.videoBlacklist as VideoBlacklistModel | 107 | const videoBlacklist = res.locals.videoBlacklist |
109 | const video: VideoModel = res.locals.video | 108 | const video = res.locals.video |
110 | 109 | ||
111 | await sequelizeTypescript.transaction(async t => { | 110 | await sequelizeTypescript.transaction(async t => { |
112 | const unfederated = videoBlacklist.unfederated | 111 | const unfederated = videoBlacklist.unfederated |
diff --git a/server/controllers/api/videos/captions.ts b/server/controllers/api/videos/captions.ts index 9b3661368..2694577d8 100644 --- a/server/controllers/api/videos/captions.ts +++ b/server/controllers/api/videos/captions.ts | |||
@@ -5,7 +5,6 @@ import { createReqFiles } from '../../../helpers/express-utils' | |||
5 | import { CONFIG, MIMETYPES, sequelizeTypescript } from '../../../initializers' | 5 | import { CONFIG, MIMETYPES, sequelizeTypescript } from '../../../initializers' |
6 | import { getFormattedObjects } from '../../../helpers/utils' | 6 | import { getFormattedObjects } from '../../../helpers/utils' |
7 | import { VideoCaptionModel } from '../../../models/video/video-caption' | 7 | import { VideoCaptionModel } from '../../../models/video/video-caption' |
8 | import { VideoModel } from '../../../models/video/video' | ||
9 | import { logger } from '../../../helpers/logger' | 8 | import { logger } from '../../../helpers/logger' |
10 | import { federateVideoIfNeeded } from '../../../lib/activitypub' | 9 | import { federateVideoIfNeeded } from '../../../lib/activitypub' |
11 | import { moveAndProcessCaptionFile } from '../../../helpers/captions-utils' | 10 | import { moveAndProcessCaptionFile } from '../../../helpers/captions-utils' |
@@ -52,7 +51,7 @@ async function listVideoCaptions (req: express.Request, res: express.Response) { | |||
52 | 51 | ||
53 | async function addVideoCaption (req: express.Request, res: express.Response) { | 52 | async function addVideoCaption (req: express.Request, res: express.Response) { |
54 | const videoCaptionPhysicalFile = req.files['captionfile'][0] | 53 | const videoCaptionPhysicalFile = req.files['captionfile'][0] |
55 | const video = res.locals.video as VideoModel | 54 | const video = res.locals.video |
56 | 55 | ||
57 | const videoCaption = new VideoCaptionModel({ | 56 | const videoCaption = new VideoCaptionModel({ |
58 | videoId: video.id, | 57 | videoId: video.id, |
@@ -74,8 +73,8 @@ async function addVideoCaption (req: express.Request, res: express.Response) { | |||
74 | } | 73 | } |
75 | 74 | ||
76 | async function deleteVideoCaption (req: express.Request, res: express.Response) { | 75 | async function deleteVideoCaption (req: express.Request, res: express.Response) { |
77 | const video = res.locals.video as VideoModel | 76 | const video = res.locals.video |
78 | const videoCaption = res.locals.videoCaption as VideoCaptionModel | 77 | const videoCaption = res.locals.videoCaption |
79 | 78 | ||
80 | await sequelizeTypescript.transaction(async t => { | 79 | await sequelizeTypescript.transaction(async t => { |
81 | await videoCaption.destroy({ transaction: t }) | 80 | await videoCaption.destroy({ transaction: t }) |
diff --git a/server/controllers/api/videos/comment.ts b/server/controllers/api/videos/comment.ts index 70c1148ba..176ee8bd4 100644 --- a/server/controllers/api/videos/comment.ts +++ b/server/controllers/api/videos/comment.ts | |||
@@ -8,7 +8,8 @@ import { buildFormattedCommentTree, createVideoComment } from '../../../lib/vide | |||
8 | import { | 8 | import { |
9 | asyncMiddleware, | 9 | asyncMiddleware, |
10 | asyncRetryTransactionMiddleware, | 10 | asyncRetryTransactionMiddleware, |
11 | authenticate, optionalAuthenticate, | 11 | authenticate, |
12 | optionalAuthenticate, | ||
12 | paginationValidator, | 13 | paginationValidator, |
13 | setDefaultPagination, | 14 | setDefaultPagination, |
14 | setDefaultSort | 15 | setDefaultSort |
@@ -21,11 +22,9 @@ import { | |||
21 | removeVideoCommentValidator, | 22 | removeVideoCommentValidator, |
22 | videoCommentThreadsSortValidator | 23 | videoCommentThreadsSortValidator |
23 | } from '../../../middlewares/validators' | 24 | } from '../../../middlewares/validators' |
24 | import { VideoModel } from '../../../models/video/video' | ||
25 | import { VideoCommentModel } from '../../../models/video/video-comment' | 25 | import { VideoCommentModel } from '../../../models/video/video-comment' |
26 | import { auditLoggerFactory, CommentAuditView, getAuditIdFromRes } from '../../../helpers/audit-logger' | 26 | import { auditLoggerFactory, CommentAuditView, getAuditIdFromRes } from '../../../helpers/audit-logger' |
27 | import { AccountModel } from '../../../models/account/account' | 27 | import { AccountModel } from '../../../models/account/account' |
28 | import { UserModel } from '../../../models/account/user' | ||
29 | import { Notifier } from '../../../lib/notifier' | 28 | import { Notifier } from '../../../lib/notifier' |
30 | 29 | ||
31 | const auditLogger = auditLoggerFactory('comments') | 30 | const auditLogger = auditLoggerFactory('comments') |
@@ -70,9 +69,9 @@ export { | |||
70 | 69 | ||
71 | // --------------------------------------------------------------------------- | 70 | // --------------------------------------------------------------------------- |
72 | 71 | ||
73 | async function listVideoThreads (req: express.Request, res: express.Response, next: express.NextFunction) { | 72 | async function listVideoThreads (req: express.Request, res: express.Response) { |
74 | const video = res.locals.video as VideoModel | 73 | const video = res.locals.video |
75 | const user: UserModel = res.locals.oauth ? res.locals.oauth.token.User : undefined | 74 | const user = res.locals.oauth ? res.locals.oauth.token.User : undefined |
76 | 75 | ||
77 | let resultList: ResultList<VideoCommentModel> | 76 | let resultList: ResultList<VideoCommentModel> |
78 | 77 | ||
@@ -88,9 +87,9 @@ async function listVideoThreads (req: express.Request, res: express.Response, ne | |||
88 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 87 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
89 | } | 88 | } |
90 | 89 | ||
91 | async function listVideoThreadComments (req: express.Request, res: express.Response, next: express.NextFunction) { | 90 | async function listVideoThreadComments (req: express.Request, res: express.Response) { |
92 | const video = res.locals.video as VideoModel | 91 | const video = res.locals.video |
93 | const user: UserModel = res.locals.oauth ? res.locals.oauth.token.User : undefined | 92 | const user = res.locals.oauth ? res.locals.oauth.token.User : undefined |
94 | 93 | ||
95 | let resultList: ResultList<VideoCommentModel> | 94 | let resultList: ResultList<VideoCommentModel> |
96 | 95 | ||
@@ -110,7 +109,7 @@ async function addVideoCommentThread (req: express.Request, res: express.Respons | |||
110 | const videoCommentInfo: VideoCommentCreate = req.body | 109 | const videoCommentInfo: VideoCommentCreate = req.body |
111 | 110 | ||
112 | const comment = await sequelizeTypescript.transaction(async t => { | 111 | const comment = await sequelizeTypescript.transaction(async t => { |
113 | const account = await AccountModel.load((res.locals.oauth.token.User as UserModel).Account.id, t) | 112 | const account = await AccountModel.load(res.locals.oauth.token.User.Account.id, t) |
114 | 113 | ||
115 | return createVideoComment({ | 114 | return createVideoComment({ |
116 | text: videoCommentInfo.text, | 115 | text: videoCommentInfo.text, |
@@ -132,7 +131,7 @@ async function addVideoCommentReply (req: express.Request, res: express.Response | |||
132 | const videoCommentInfo: VideoCommentCreate = req.body | 131 | const videoCommentInfo: VideoCommentCreate = req.body |
133 | 132 | ||
134 | const comment = await sequelizeTypescript.transaction(async t => { | 133 | const comment = await sequelizeTypescript.transaction(async t => { |
135 | const account = await AccountModel.load((res.locals.oauth.token.User as UserModel).Account.id, t) | 134 | const account = await AccountModel.load(res.locals.oauth.token.User.Account.id, t) |
136 | 135 | ||
137 | return createVideoComment({ | 136 | return createVideoComment({ |
138 | text: videoCommentInfo.text, | 137 | text: videoCommentInfo.text, |
@@ -149,7 +148,7 @@ async function addVideoCommentReply (req: express.Request, res: express.Response | |||
149 | } | 148 | } |
150 | 149 | ||
151 | async function removeVideoComment (req: express.Request, res: express.Response) { | 150 | async function removeVideoComment (req: express.Request, res: express.Response) { |
152 | const videoCommentInstance: VideoCommentModel = res.locals.videoComment | 151 | const videoCommentInstance = res.locals.videoComment |
153 | 152 | ||
154 | await sequelizeTypescript.transaction(async t => { | 153 | await sequelizeTypescript.transaction(async t => { |
155 | await videoCommentInstance.destroy({ transaction: t }) | 154 | await videoCommentInstance.destroy({ transaction: t }) |
diff --git a/server/controllers/api/videos/import.ts b/server/controllers/api/videos/import.ts index 626c81eca..cbd2e8514 100644 --- a/server/controllers/api/videos/import.ts +++ b/server/controllers/api/videos/import.ts | |||
@@ -97,7 +97,7 @@ async function addTorrentImport (req: express.Request, res: express.Response, to | |||
97 | state: VideoImportState.PENDING, | 97 | state: VideoImportState.PENDING, |
98 | userId: user.id | 98 | userId: user.id |
99 | } | 99 | } |
100 | const videoImport: VideoImportModel = await insertIntoDB(video, res.locals.videoChannel, tags, videoImportAttributes) | 100 | const videoImport = await insertIntoDB(video, res.locals.videoChannel, tags, videoImportAttributes) |
101 | 101 | ||
102 | // Create job to import the video | 102 | // Create job to import the video |
103 | const payload = { | 103 | const payload = { |
@@ -139,7 +139,7 @@ async function addYoutubeDLImport (req: express.Request, res: express.Response) | |||
139 | state: VideoImportState.PENDING, | 139 | state: VideoImportState.PENDING, |
140 | userId: user.id | 140 | userId: user.id |
141 | } | 141 | } |
142 | const videoImport: VideoImportModel = await insertIntoDB(video, res.locals.videoChannel, tags, videoImportAttributes) | 142 | const videoImport = await insertIntoDB(video, res.locals.videoChannel, tags, videoImportAttributes) |
143 | 143 | ||
144 | // Create job to import the video | 144 | // Create job to import the video |
145 | const payload = { | 145 | const payload = { |
diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts index 27f67895e..db4f4c96f 100644 --- a/server/controllers/api/videos/index.ts +++ b/server/controllers/api/videos/index.ts | |||
@@ -295,7 +295,7 @@ async function addVideo (req: express.Request, res: express.Response) { | |||
295 | } | 295 | } |
296 | 296 | ||
297 | async function updateVideo (req: express.Request, res: express.Response) { | 297 | async function updateVideo (req: express.Request, res: express.Response) { |
298 | const videoInstance: VideoModel = res.locals.video | 298 | const videoInstance = res.locals.video |
299 | const videoFieldsSave = videoInstance.toJSON() | 299 | const videoFieldsSave = videoInstance.toJSON() |
300 | const oldVideoAuditView = new VideoAuditView(videoInstance.toFormattedDetailsJSON()) | 300 | const oldVideoAuditView = new VideoAuditView(videoInstance.toFormattedDetailsJSON()) |
301 | const videoInfoToUpdate: VideoUpdate = req.body | 301 | const videoInfoToUpdate: VideoUpdate = req.body |
@@ -407,7 +407,7 @@ async function updateVideo (req: express.Request, res: express.Response) { | |||
407 | async function getVideo (req: express.Request, res: express.Response) { | 407 | async function getVideo (req: express.Request, res: express.Response) { |
408 | // We need more attributes | 408 | // We need more attributes |
409 | const userId: number = res.locals.oauth ? res.locals.oauth.token.User.id : null | 409 | const userId: number = res.locals.oauth ? res.locals.oauth.token.User.id : null |
410 | const video: VideoModel = await VideoModel.loadForGetAPI(res.locals.video.id, undefined, userId) | 410 | const video = await VideoModel.loadForGetAPI(res.locals.video.id, undefined, userId) |
411 | 411 | ||
412 | if (video.isOutdated()) { | 412 | if (video.isOutdated()) { |
413 | JobQueue.Instance.createJob({ type: 'activitypub-refresher', payload: { type: 'video', url: video.url } }) | 413 | JobQueue.Instance.createJob({ type: 'activitypub-refresher', payload: { type: 'video', url: video.url } }) |
@@ -472,7 +472,7 @@ async function listVideos (req: express.Request, res: express.Response) { | |||
472 | } | 472 | } |
473 | 473 | ||
474 | async function removeVideo (req: express.Request, res: express.Response) { | 474 | async function removeVideo (req: express.Request, res: express.Response) { |
475 | const videoInstance: VideoModel = res.locals.video | 475 | const videoInstance = res.locals.video |
476 | 476 | ||
477 | await sequelizeTypescript.transaction(async t => { | 477 | await sequelizeTypescript.transaction(async t => { |
478 | await videoInstance.destroy({ transaction: t }) | 478 | await videoInstance.destroy({ transaction: t }) |
diff --git a/server/controllers/api/videos/ownership.ts b/server/controllers/api/videos/ownership.ts index 5ea7d7c6a..fc73856c9 100644 --- a/server/controllers/api/videos/ownership.ts +++ b/server/controllers/api/videos/ownership.ts | |||
@@ -11,8 +11,6 @@ import { | |||
11 | videosChangeOwnershipValidator, | 11 | videosChangeOwnershipValidator, |
12 | videosTerminateChangeOwnershipValidator | 12 | videosTerminateChangeOwnershipValidator |
13 | } from '../../../middlewares' | 13 | } from '../../../middlewares' |
14 | import { AccountModel } from '../../../models/account/account' | ||
15 | import { VideoModel } from '../../../models/video/video' | ||
16 | import { VideoChangeOwnershipModel } from '../../../models/video/video-change-ownership' | 14 | import { VideoChangeOwnershipModel } from '../../../models/video/video-change-ownership' |
17 | import { VideoChangeOwnershipStatus, VideoPrivacy, VideoState } from '../../../../shared/models/videos' | 15 | import { VideoChangeOwnershipStatus, VideoPrivacy, VideoState } from '../../../../shared/models/videos' |
18 | import { VideoChannelModel } from '../../../models/video/video-channel' | 16 | import { VideoChannelModel } from '../../../models/video/video-channel' |
@@ -58,9 +56,9 @@ export { | |||
58 | // --------------------------------------------------------------------------- | 56 | // --------------------------------------------------------------------------- |
59 | 57 | ||
60 | async function giveVideoOwnership (req: express.Request, res: express.Response) { | 58 | async function giveVideoOwnership (req: express.Request, res: express.Response) { |
61 | const videoInstance = res.locals.video as VideoModel | 59 | const videoInstance = res.locals.video |
62 | const initiatorAccountId = (res.locals.oauth.token.User as UserModel).Account.id | 60 | const initiatorAccountId = res.locals.oauth.token.User.Account.id |
63 | const nextOwner = res.locals.nextOwner as AccountModel | 61 | const nextOwner = res.locals.nextOwner |
64 | 62 | ||
65 | await sequelizeTypescript.transaction(t => { | 63 | await sequelizeTypescript.transaction(t => { |
66 | return VideoChangeOwnershipModel.findOrCreate({ | 64 | return VideoChangeOwnershipModel.findOrCreate({ |
@@ -85,7 +83,7 @@ async function giveVideoOwnership (req: express.Request, res: express.Response) | |||
85 | } | 83 | } |
86 | 84 | ||
87 | async function listVideoOwnership (req: express.Request, res: express.Response) { | 85 | async function listVideoOwnership (req: express.Request, res: express.Response) { |
88 | const currentAccountId = (res.locals.oauth.token.User as UserModel).Account.id | 86 | const currentAccountId = res.locals.oauth.token.User.Account.id |
89 | 87 | ||
90 | const resultList = await VideoChangeOwnershipModel.listForApi( | 88 | const resultList = await VideoChangeOwnershipModel.listForApi( |
91 | currentAccountId, | 89 | currentAccountId, |
@@ -99,9 +97,9 @@ async function listVideoOwnership (req: express.Request, res: express.Response) | |||
99 | 97 | ||
100 | async function acceptOwnership (req: express.Request, res: express.Response) { | 98 | async function acceptOwnership (req: express.Request, res: express.Response) { |
101 | return sequelizeTypescript.transaction(async t => { | 99 | return sequelizeTypescript.transaction(async t => { |
102 | const videoChangeOwnership = res.locals.videoChangeOwnership as VideoChangeOwnershipModel | 100 | const videoChangeOwnership = res.locals.videoChangeOwnership |
103 | const targetVideo = videoChangeOwnership.Video | 101 | const targetVideo = videoChangeOwnership.Video |
104 | const channel = res.locals.videoChannel as VideoChannelModel | 102 | const channel = res.locals.videoChannel |
105 | 103 | ||
106 | const oldVideoChannel = await VideoChannelModel.loadByIdAndPopulateAccount(targetVideo.channelId) | 104 | const oldVideoChannel = await VideoChannelModel.loadByIdAndPopulateAccount(targetVideo.channelId) |
107 | 105 | ||
@@ -123,7 +121,7 @@ async function acceptOwnership (req: express.Request, res: express.Response) { | |||
123 | 121 | ||
124 | async function refuseOwnership (req: express.Request, res: express.Response) { | 122 | async function refuseOwnership (req: express.Request, res: express.Response) { |
125 | return sequelizeTypescript.transaction(async t => { | 123 | return sequelizeTypescript.transaction(async t => { |
126 | const videoChangeOwnership = res.locals.videoChangeOwnership as VideoChangeOwnershipModel | 124 | const videoChangeOwnership = res.locals.videoChangeOwnership |
127 | 125 | ||
128 | videoChangeOwnership.set('status', VideoChangeOwnershipStatus.REFUSED) | 126 | videoChangeOwnership.set('status', VideoChangeOwnershipStatus.REFUSED) |
129 | await videoChangeOwnership.save({ transaction: t }) | 127 | await videoChangeOwnership.save({ transaction: t }) |
diff --git a/server/controllers/api/videos/rate.ts b/server/controllers/api/videos/rate.ts index 53952a0a2..914c596c3 100644 --- a/server/controllers/api/videos/rate.ts +++ b/server/controllers/api/videos/rate.ts | |||
@@ -6,7 +6,6 @@ import { getRateUrl, sendVideoRateChange } from '../../../lib/activitypub' | |||
6 | import { asyncMiddleware, asyncRetryTransactionMiddleware, authenticate, videoUpdateRateValidator } from '../../../middlewares' | 6 | import { asyncMiddleware, asyncRetryTransactionMiddleware, authenticate, videoUpdateRateValidator } from '../../../middlewares' |
7 | import { AccountModel } from '../../../models/account/account' | 7 | import { AccountModel } from '../../../models/account/account' |
8 | import { AccountVideoRateModel } from '../../../models/account/account-video-rate' | 8 | import { AccountVideoRateModel } from '../../../models/account/account-video-rate' |
9 | import { VideoModel } from '../../../models/video/video' | ||
10 | 9 | ||
11 | const rateVideoRouter = express.Router() | 10 | const rateVideoRouter = express.Router() |
12 | 11 | ||
@@ -27,8 +26,8 @@ export { | |||
27 | async function rateVideo (req: express.Request, res: express.Response) { | 26 | async function rateVideo (req: express.Request, res: express.Response) { |
28 | const body: UserVideoRateUpdate = req.body | 27 | const body: UserVideoRateUpdate = req.body |
29 | const rateType = body.rating | 28 | const rateType = body.rating |
30 | const videoInstance: VideoModel = res.locals.video | 29 | const videoInstance = res.locals.video |
31 | const userAccount: AccountModel = res.locals.oauth.token.User.Account | 30 | const userAccount = res.locals.oauth.token.User.Account |
32 | 31 | ||
33 | await sequelizeTypescript.transaction(async t => { | 32 | await sequelizeTypescript.transaction(async t => { |
34 | const sequelizeOptions = { transaction: t } | 33 | const sequelizeOptions = { transaction: t } |
diff --git a/server/controllers/api/videos/watching.ts b/server/controllers/api/videos/watching.ts index e8876b47a..6bc60e045 100644 --- a/server/controllers/api/videos/watching.ts +++ b/server/controllers/api/videos/watching.ts | |||
@@ -21,7 +21,7 @@ export { | |||
21 | // --------------------------------------------------------------------------- | 21 | // --------------------------------------------------------------------------- |
22 | 22 | ||
23 | async function userWatchVideo (req: express.Request, res: express.Response) { | 23 | async function userWatchVideo (req: express.Request, res: express.Response) { |
24 | const user = res.locals.oauth.token.User as UserModel | 24 | const user = res.locals.oauth.token.User |
25 | 25 | ||
26 | const body: UserWatchingVideo = req.body | 26 | const body: UserWatchingVideo = req.body |
27 | const { id: videoId } = res.locals.video as { id: number } | 27 | const { id: videoId } = res.locals.video as { id: number } |
diff --git a/server/controllers/feeds.ts b/server/controllers/feeds.ts index 960085af1..cd46b6e0f 100644 --- a/server/controllers/feeds.ts +++ b/server/controllers/feeds.ts | |||
@@ -11,9 +11,7 @@ import { | |||
11 | } from '../middlewares' | 11 | } from '../middlewares' |
12 | import { VideoModel } from '../models/video/video' | 12 | import { VideoModel } from '../models/video/video' |
13 | import * as Feed from 'pfeed' | 13 | import * as Feed from 'pfeed' |
14 | import { AccountModel } from '../models/account/account' | ||
15 | import { cacheRoute } from '../middlewares/cache' | 14 | import { cacheRoute } from '../middlewares/cache' |
16 | import { VideoChannelModel } from '../models/video/video-channel' | ||
17 | import { VideoCommentModel } from '../models/video/video-comment' | 15 | import { VideoCommentModel } from '../models/video/video-comment' |
18 | import { buildNSFWFilter } from '../helpers/express-utils' | 16 | import { buildNSFWFilter } from '../helpers/express-utils' |
19 | 17 | ||
@@ -42,10 +40,10 @@ export { | |||
42 | 40 | ||
43 | // --------------------------------------------------------------------------- | 41 | // --------------------------------------------------------------------------- |
44 | 42 | ||
45 | async function generateVideoCommentsFeed (req: express.Request, res: express.Response, next: express.NextFunction) { | 43 | async function generateVideoCommentsFeed (req: express.Request, res: express.Response) { |
46 | const start = 0 | 44 | const start = 0 |
47 | 45 | ||
48 | const video = res.locals.video as VideoModel | 46 | const video = res.locals.video |
49 | const videoId: number = video ? video.id : undefined | 47 | const videoId: number = video ? video.id : undefined |
50 | 48 | ||
51 | const comments = await VideoCommentModel.listForFeed(start, FEEDS.COUNT, videoId) | 49 | const comments = await VideoCommentModel.listForFeed(start, FEEDS.COUNT, videoId) |
@@ -77,11 +75,11 @@ async function generateVideoCommentsFeed (req: express.Request, res: express.Res | |||
77 | return sendFeed(feed, req, res) | 75 | return sendFeed(feed, req, res) |
78 | } | 76 | } |
79 | 77 | ||
80 | async function generateVideoFeed (req: express.Request, res: express.Response, next: express.NextFunction) { | 78 | async function generateVideoFeed (req: express.Request, res: express.Response) { |
81 | const start = 0 | 79 | const start = 0 |
82 | 80 | ||
83 | const account: AccountModel = res.locals.account | 81 | const account = res.locals.account |
84 | const videoChannel: VideoChannelModel = res.locals.videoChannel | 82 | const videoChannel = res.locals.videoChannel |
85 | const nsfw = buildNSFWFilter(res, req.query.nsfw) | 83 | const nsfw = buildNSFWFilter(res, req.query.nsfw) |
86 | 84 | ||
87 | let name: string | 85 | let name: string |
diff --git a/server/controllers/services.ts b/server/controllers/services.ts index 680c3c37f..cf7a513af 100644 --- a/server/controllers/services.ts +++ b/server/controllers/services.ts | |||
@@ -23,8 +23,8 @@ export { | |||
23 | 23 | ||
24 | // --------------------------------------------------------------------------- | 24 | // --------------------------------------------------------------------------- |
25 | 25 | ||
26 | function generateOEmbed (req: express.Request, res: express.Response, next: express.NextFunction) { | 26 | function generateOEmbed (req: express.Request, res: express.Response) { |
27 | const video = res.locals.video as VideoModel | 27 | const video = res.locals.video |
28 | const webserverUrl = CONFIG.WEBSERVER.URL | 28 | const webserverUrl = CONFIG.WEBSERVER.URL |
29 | const maxHeight = parseInt(req.query.maxheight, 10) | 29 | const maxHeight = parseInt(req.query.maxheight, 10) |
30 | const maxWidth = parseInt(req.query.maxwidth, 10) | 30 | const maxWidth = parseInt(req.query.maxwidth, 10) |
diff --git a/server/controllers/static.ts b/server/controllers/static.ts index 639445b74..7b14320e4 100644 --- a/server/controllers/static.ts +++ b/server/controllers/static.ts | |||
@@ -245,7 +245,7 @@ async function downloadVideoFile (req: express.Request, res: express.Response, n | |||
245 | 245 | ||
246 | function getVideoAndFile (req: express.Request, res: express.Response) { | 246 | function getVideoAndFile (req: express.Request, res: express.Response) { |
247 | const resolution = parseInt(req.params.resolution, 10) | 247 | const resolution = parseInt(req.params.resolution, 10) |
248 | const video: VideoModel = res.locals.video | 248 | const video = res.locals.video |
249 | 249 | ||
250 | const videoFile = video.VideoFiles.find(f => f.resolution === resolution) | 250 | const videoFile = video.VideoFiles.find(f => f.resolution === resolution) |
251 | 251 | ||
diff --git a/server/controllers/webfinger.ts b/server/controllers/webfinger.ts index ed781c21b..f2ba3c826 100644 --- a/server/controllers/webfinger.ts +++ b/server/controllers/webfinger.ts | |||
@@ -1,7 +1,6 @@ | |||
1 | import * as express from 'express' | 1 | import * as express from 'express' |
2 | import { asyncMiddleware } from '../middlewares' | 2 | import { asyncMiddleware } from '../middlewares' |
3 | import { webfingerValidator } from '../middlewares/validators' | 3 | import { webfingerValidator } from '../middlewares/validators' |
4 | import { ActorModel } from '../models/activitypub/actor' | ||
5 | 4 | ||
6 | const webfingerRouter = express.Router() | 5 | const webfingerRouter = express.Router() |
7 | 6 | ||
@@ -18,8 +17,8 @@ export { | |||
18 | 17 | ||
19 | // --------------------------------------------------------------------------- | 18 | // --------------------------------------------------------------------------- |
20 | 19 | ||
21 | function webfingerController (req: express.Request, res: express.Response, next: express.NextFunction) { | 20 | function webfingerController (req: express.Request, res: express.Response) { |
22 | const actor = res.locals.actor as ActorModel | 21 | const actor = res.locals.actor |
23 | 22 | ||
24 | const json = { | 23 | const json = { |
25 | subject: req.query.resource, | 24 | subject: req.query.resource, |
diff --git a/server/helpers/express-utils.ts b/server/helpers/express-utils.ts index 9a72ee96d..fef2da313 100644 --- a/server/helpers/express-utils.ts +++ b/server/helpers/express-utils.ts | |||
@@ -5,7 +5,6 @@ import { logger } from './logger' | |||
5 | import { deleteFileAsync, generateRandomString } from './utils' | 5 | import { deleteFileAsync, generateRandomString } from './utils' |
6 | import { extname } from 'path' | 6 | import { extname } from 'path' |
7 | import { isArray } from './custom-validators/misc' | 7 | import { isArray } from './custom-validators/misc' |
8 | import { UserModel } from '../models/account/user' | ||
9 | 8 | ||
10 | function buildNSFWFilter (res?: express.Response, paramNSFW?: string) { | 9 | function buildNSFWFilter (res?: express.Response, paramNSFW?: string) { |
11 | if (paramNSFW === 'true') return true | 10 | if (paramNSFW === 'true') return true |
@@ -13,7 +12,7 @@ function buildNSFWFilter (res?: express.Response, paramNSFW?: string) { | |||
13 | if (paramNSFW === 'both') return undefined | 12 | if (paramNSFW === 'both') return undefined |
14 | 13 | ||
15 | if (res && res.locals.oauth) { | 14 | if (res && res.locals.oauth) { |
16 | const user: UserModel = res.locals.oauth.token.User | 15 | const user = res.locals.oauth.token.User |
17 | 16 | ||
18 | // User does not want NSFW videos | 17 | // User does not want NSFW videos |
19 | if (user.nsfwPolicy === 'do_not_list') return false | 18 | if (user.nsfwPolicy === 'do_not_list') return false |
@@ -100,7 +99,7 @@ function createReqFiles ( | |||
100 | } | 99 | } |
101 | 100 | ||
102 | function isUserAbleToSearchRemoteURI (res: express.Response) { | 101 | function isUserAbleToSearchRemoteURI (res: express.Response) { |
103 | const user: UserModel = res.locals.oauth ? res.locals.oauth.token.User : undefined | 102 | const user = res.locals.oauth ? res.locals.oauth.token.User : undefined |
104 | 103 | ||
105 | return CONFIG.SEARCH.REMOTE_URI.ANONYMOUS === true || | 104 | return CONFIG.SEARCH.REMOTE_URI.ANONYMOUS === true || |
106 | (CONFIG.SEARCH.REMOTE_URI.USERS === true && user !== undefined) | 105 | (CONFIG.SEARCH.REMOTE_URI.USERS === true && user !== undefined) |
diff --git a/server/middlewares/activitypub.ts b/server/middlewares/activitypub.ts index 5fa10cbfd..c528ee250 100644 --- a/server/middlewares/activitypub.ts +++ b/server/middlewares/activitypub.ts | |||
@@ -4,7 +4,6 @@ import { logger } from '../helpers/logger' | |||
4 | import { isHTTPSignatureVerified, isJsonLDSignatureVerified, parseHTTPSignature } from '../helpers/peertube-crypto' | 4 | import { isHTTPSignatureVerified, isJsonLDSignatureVerified, parseHTTPSignature } from '../helpers/peertube-crypto' |
5 | import { ACCEPT_HEADERS, ACTIVITY_PUB, HTTP_SIGNATURE } from '../initializers' | 5 | import { ACCEPT_HEADERS, ACTIVITY_PUB, HTTP_SIGNATURE } from '../initializers' |
6 | import { getOrCreateActorAndServerAndModel } from '../lib/activitypub' | 6 | import { getOrCreateActorAndServerAndModel } from '../lib/activitypub' |
7 | import { ActorModel } from '../models/activitypub/actor' | ||
8 | import { loadActorUrlOrGetFromWebfinger } from '../helpers/webfinger' | 7 | import { loadActorUrlOrGetFromWebfinger } from '../helpers/webfinger' |
9 | 8 | ||
10 | async function checkSignature (req: Request, res: Response, next: NextFunction) { | 9 | async function checkSignature (req: Request, res: Response, next: NextFunction) { |
@@ -12,7 +11,7 @@ async function checkSignature (req: Request, res: Response, next: NextFunction) | |||
12 | const httpSignatureChecked = await checkHttpSignature(req, res) | 11 | const httpSignatureChecked = await checkHttpSignature(req, res) |
13 | if (httpSignatureChecked !== true) return | 12 | if (httpSignatureChecked !== true) return |
14 | 13 | ||
15 | const actor: ActorModel = res.locals.signature.actor | 14 | const actor = res.locals.signature.actor |
16 | 15 | ||
17 | // Forwarded activity | 16 | // Forwarded activity |
18 | const bodyActor = req.body.actor | 17 | const bodyActor = req.body.actor |
diff --git a/server/middlewares/user-right.ts b/server/middlewares/user-right.ts index 7cea7aa1e..498e3d677 100644 --- a/server/middlewares/user-right.ts +++ b/server/middlewares/user-right.ts | |||
@@ -2,11 +2,10 @@ import * as express from 'express' | |||
2 | import 'express-validator' | 2 | import 'express-validator' |
3 | import { UserRight } from '../../shared' | 3 | import { UserRight } from '../../shared' |
4 | import { logger } from '../helpers/logger' | 4 | import { logger } from '../helpers/logger' |
5 | import { UserModel } from '../models/account/user' | ||
6 | 5 | ||
7 | function ensureUserHasRight (userRight: UserRight) { | 6 | function ensureUserHasRight (userRight: UserRight) { |
8 | return function (req: express.Request, res: express.Response, next: express.NextFunction) { | 7 | return function (req: express.Request, res: express.Response, next: express.NextFunction) { |
9 | const user = res.locals.oauth.token.user as UserModel | 8 | const user = res.locals.oauth.token.user |
10 | if (user.hasRight(userRight) === false) { | 9 | if (user.hasRight(userRight) === false) { |
11 | const message = `User ${user.username} does not have right ${UserRight[userRight]} to access to ${req.path}.` | 10 | const message = `User ${user.username} does not have right ${UserRight[userRight]} to access to ${req.path}.` |
12 | logger.info(message) | 11 | logger.info(message) |
diff --git a/server/middlewares/validators/activitypub/activity.ts b/server/middlewares/validators/activitypub/activity.ts index 3f9057c0c..7582f65e7 100644 --- a/server/middlewares/validators/activitypub/activity.ts +++ b/server/middlewares/validators/activitypub/activity.ts | |||
@@ -2,7 +2,6 @@ import * as express from 'express' | |||
2 | import { isRootActivityValid } from '../../../helpers/custom-validators/activitypub/activity' | 2 | import { isRootActivityValid } from '../../../helpers/custom-validators/activitypub/activity' |
3 | import { logger } from '../../../helpers/logger' | 3 | import { logger } from '../../../helpers/logger' |
4 | import { getServerActor } from '../../../helpers/utils' | 4 | import { getServerActor } from '../../../helpers/utils' |
5 | import { ActorModel } from '../../../models/activitypub/actor' | ||
6 | 5 | ||
7 | async function activityPubValidator (req: express.Request, res: express.Response, next: express.NextFunction) { | 6 | async function activityPubValidator (req: express.Request, res: express.Response, next: express.NextFunction) { |
8 | logger.debug('Checking activity pub parameters') | 7 | logger.debug('Checking activity pub parameters') |
@@ -13,7 +12,7 @@ async function activityPubValidator (req: express.Request, res: express.Response | |||
13 | } | 12 | } |
14 | 13 | ||
15 | const serverActor = await getServerActor() | 14 | const serverActor = await getServerActor() |
16 | const remoteActor = res.locals.signature.actor as ActorModel | 15 | const remoteActor = res.locals.signature.actor |
17 | if (serverActor.id === remoteActor.id) { | 16 | if (serverActor.id === remoteActor.id) { |
18 | logger.error('Receiving request in INBOX by ourselves!', req.body) | 17 | logger.error('Receiving request in INBOX by ourselves!', req.body) |
19 | return res.status(409).end() | 18 | return res.status(409).end() |
diff --git a/server/middlewares/validators/blocklist.ts b/server/middlewares/validators/blocklist.ts index d7ec649b6..f5b295f45 100644 --- a/server/middlewares/validators/blocklist.ts +++ b/server/middlewares/validators/blocklist.ts | |||
@@ -20,7 +20,7 @@ const blockAccountValidator = [ | |||
20 | if (areValidationErrors(req, res)) return | 20 | if (areValidationErrors(req, res)) return |
21 | if (!await doesAccountNameWithHostExist(req.body.accountName, res)) return | 21 | if (!await doesAccountNameWithHostExist(req.body.accountName, res)) return |
22 | 22 | ||
23 | const user = res.locals.oauth.token.User as UserModel | 23 | const user = res.locals.oauth.token.User |
24 | const accountToBlock = res.locals.account | 24 | const accountToBlock = res.locals.account |
25 | 25 | ||
26 | if (user.Account.id === accountToBlock.id) { | 26 | if (user.Account.id === accountToBlock.id) { |
@@ -44,7 +44,7 @@ const unblockAccountByAccountValidator = [ | |||
44 | if (areValidationErrors(req, res)) return | 44 | if (areValidationErrors(req, res)) return |
45 | if (!await doesAccountNameWithHostExist(req.params.accountName, res)) return | 45 | if (!await doesAccountNameWithHostExist(req.params.accountName, res)) return |
46 | 46 | ||
47 | const user = res.locals.oauth.token.User as UserModel | 47 | const user = res.locals.oauth.token.User |
48 | const targetAccount = res.locals.account | 48 | const targetAccount = res.locals.account |
49 | if (!await doesUnblockAccountExist(user.Account.id, targetAccount.id, res)) return | 49 | if (!await doesUnblockAccountExist(user.Account.id, targetAccount.id, res)) return |
50 | 50 | ||
@@ -106,7 +106,7 @@ const unblockServerByAccountValidator = [ | |||
106 | 106 | ||
107 | if (areValidationErrors(req, res)) return | 107 | if (areValidationErrors(req, res)) return |
108 | 108 | ||
109 | const user = res.locals.oauth.token.User as UserModel | 109 | const user = res.locals.oauth.token.User |
110 | if (!await doesUnblockServerExist(user.Account.id, req.params.host, res)) return | 110 | if (!await doesUnblockServerExist(user.Account.id, req.params.host, res)) return |
111 | 111 | ||
112 | return next() | 112 | return next() |
diff --git a/server/middlewares/validators/redundancy.ts b/server/middlewares/validators/redundancy.ts index 419921928..76cf89c40 100644 --- a/server/middlewares/validators/redundancy.ts +++ b/server/middlewares/validators/redundancy.ts | |||
@@ -1,16 +1,12 @@ | |||
1 | import * as express from 'express' | 1 | import * as express from 'express' |
2 | import 'express-validator' | 2 | import 'express-validator' |
3 | import { param, body } from 'express-validator/check' | 3 | import { body, param } from 'express-validator/check' |
4 | import { exists, isBooleanValid, isIdOrUUIDValid, toIntOrNull } from '../../helpers/custom-validators/misc' | 4 | import { exists, isBooleanValid, isIdOrUUIDValid, toIntOrNull } from '../../helpers/custom-validators/misc' |
5 | import { doesVideoExist } from '../../helpers/custom-validators/videos' | 5 | import { doesVideoExist } from '../../helpers/custom-validators/videos' |
6 | import { logger } from '../../helpers/logger' | 6 | import { logger } from '../../helpers/logger' |
7 | import { areValidationErrors } from './utils' | 7 | import { areValidationErrors } from './utils' |
8 | import { VideoModel } from '../../models/video/video' | ||
9 | import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy' | 8 | import { VideoRedundancyModel } from '../../models/redundancy/video-redundancy' |
10 | import { isHostValid } from '../../helpers/custom-validators/servers' | 9 | import { isHostValid } from '../../helpers/custom-validators/servers' |
11 | import { getServerActor } from '../../helpers/utils' | ||
12 | import { ActorFollowModel } from '../../models/activitypub/actor-follow' | ||
13 | import { SERVER_ACTOR_NAME } from '../../initializers' | ||
14 | import { ServerModel } from '../../models/server/server' | 10 | import { ServerModel } from '../../models/server/server' |
15 | 11 | ||
16 | const videoFileRedundancyGetValidator = [ | 12 | const videoFileRedundancyGetValidator = [ |
@@ -29,7 +25,7 @@ const videoFileRedundancyGetValidator = [ | |||
29 | if (areValidationErrors(req, res)) return | 25 | if (areValidationErrors(req, res)) return |
30 | if (!await doesVideoExist(req.params.videoId, res)) return | 26 | if (!await doesVideoExist(req.params.videoId, res)) return |
31 | 27 | ||
32 | const video: VideoModel = res.locals.video | 28 | const video = res.locals.video |
33 | const videoFile = video.VideoFiles.find(f => { | 29 | const videoFile = video.VideoFiles.find(f => { |
34 | return f.resolution === req.params.resolution && (!req.params.fps || f.fps === req.params.fps) | 30 | return f.resolution === req.params.resolution && (!req.params.fps || f.fps === req.params.fps) |
35 | }) | 31 | }) |
@@ -55,7 +51,7 @@ const videoPlaylistRedundancyGetValidator = [ | |||
55 | if (areValidationErrors(req, res)) return | 51 | if (areValidationErrors(req, res)) return |
56 | if (!await doesVideoExist(req.params.videoId, res)) return | 52 | if (!await doesVideoExist(req.params.videoId, res)) return |
57 | 53 | ||
58 | const video: VideoModel = res.locals.video | 54 | const video = res.locals.video |
59 | const videoStreamingPlaylist = video.VideoStreamingPlaylists.find(p => p === req.params.streamingPlaylistType) | 55 | const videoStreamingPlaylist = video.VideoStreamingPlaylists.find(p => p === req.params.streamingPlaylistType) |
60 | 56 | ||
61 | if (!videoStreamingPlaylist) return res.status(404).json({ error: 'Video playlist not found.' }) | 57 | if (!videoStreamingPlaylist) return res.status(404).json({ error: 'Video playlist not found.' }) |
diff --git a/server/middlewares/validators/user-subscriptions.ts b/server/middlewares/validators/user-subscriptions.ts index c5f8d9d4c..fd82ed017 100644 --- a/server/middlewares/validators/user-subscriptions.ts +++ b/server/middlewares/validators/user-subscriptions.ts | |||
@@ -5,7 +5,6 @@ import { logger } from '../../helpers/logger' | |||
5 | import { areValidationErrors } from './utils' | 5 | import { areValidationErrors } from './utils' |
6 | import { ActorFollowModel } from '../../models/activitypub/actor-follow' | 6 | import { ActorFollowModel } from '../../models/activitypub/actor-follow' |
7 | import { areValidActorHandles, isValidActorHandle } from '../../helpers/custom-validators/activitypub/actor' | 7 | import { areValidActorHandles, isValidActorHandle } from '../../helpers/custom-validators/activitypub/actor' |
8 | import { UserModel } from '../../models/account/user' | ||
9 | import { CONFIG } from '../../initializers' | 8 | import { CONFIG } from '../../initializers' |
10 | import { toArray } from '../../helpers/custom-validators/misc' | 9 | import { toArray } from '../../helpers/custom-validators/misc' |
11 | 10 | ||
@@ -46,7 +45,7 @@ const userSubscriptionGetValidator = [ | |||
46 | let [ name, host ] = req.params.uri.split('@') | 45 | let [ name, host ] = req.params.uri.split('@') |
47 | if (host === CONFIG.WEBSERVER.HOST) host = null | 46 | if (host === CONFIG.WEBSERVER.HOST) host = null |
48 | 47 | ||
49 | const user: UserModel = res.locals.oauth.token.User | 48 | const user = res.locals.oauth.token.User |
50 | const subscription = await ActorFollowModel.loadByActorAndTargetNameAndHostForAPI(user.Account.Actor.id, name, host) | 49 | const subscription = await ActorFollowModel.loadByActorAndTargetNameAndHostForAPI(user.Account.Actor.id, name, host) |
51 | 50 | ||
52 | if (!subscription || !subscription.ActorFollowing.VideoChannel) { | 51 | if (!subscription || !subscription.ActorFollowing.VideoChannel) { |
diff --git a/server/middlewares/validators/users.ts b/server/middlewares/validators/users.ts index 5e8c8c29b..e8ade0f97 100644 --- a/server/middlewares/validators/users.ts +++ b/server/middlewares/validators/users.ts | |||
@@ -14,7 +14,8 @@ import { | |||
14 | isUserRoleValid, | 14 | isUserRoleValid, |
15 | isUserUsernameValid, | 15 | isUserUsernameValid, |
16 | isUserVideoQuotaDailyValid, | 16 | isUserVideoQuotaDailyValid, |
17 | isUserVideoQuotaValid, isUserVideosHistoryEnabledValid | 17 | isUserVideoQuotaValid, |
18 | isUserVideosHistoryEnabledValid | ||
18 | } from '../../helpers/custom-validators/users' | 19 | } from '../../helpers/custom-validators/users' |
19 | import { doesVideoExist } from '../../helpers/custom-validators/videos' | 20 | import { doesVideoExist } from '../../helpers/custom-validators/videos' |
20 | import { logger } from '../../helpers/logger' | 21 | import { logger } from '../../helpers/logger' |
@@ -100,7 +101,7 @@ const usersBlockingValidator = [ | |||
100 | 101 | ||
101 | const deleteMeValidator = [ | 102 | const deleteMeValidator = [ |
102 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { | 103 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { |
103 | const user: UserModel = res.locals.oauth.token.User | 104 | const user = res.locals.oauth.token.User |
104 | if (user.username === 'root') { | 105 | if (user.username === 'root') { |
105 | return res.status(400) | 106 | return res.status(400) |
106 | .send({ error: 'You cannot delete your root account.' }) | 107 | .send({ error: 'You cannot delete your root account.' }) |
@@ -159,8 +160,7 @@ const usersUpdateMeValidator = [ | |||
159 | .end() | 160 | .end() |
160 | } | 161 | } |
161 | 162 | ||
162 | const user: UserModel = res.locals.oauth.token.User | 163 | const user= res.locals.oauth.token.User |
163 | |||
164 | if (await user.isPasswordMatch(req.body.currentPassword) !== true) { | 164 | if (await user.isPasswordMatch(req.body.currentPassword) !== true) { |
165 | return res.status(401) | 165 | return res.status(401) |
166 | .send({ error: 'currentPassword is invalid.' }) | 166 | .send({ error: 'currentPassword is invalid.' }) |
@@ -257,7 +257,7 @@ const usersResetPasswordValidator = [ | |||
257 | if (areValidationErrors(req, res)) return | 257 | if (areValidationErrors(req, res)) return |
258 | if (!await checkUserIdExist(req.params.id, res)) return | 258 | if (!await checkUserIdExist(req.params.id, res)) return |
259 | 259 | ||
260 | const user = res.locals.user as UserModel | 260 | const user = res.locals.user |
261 | const redisVerificationString = await Redis.Instance.getResetPasswordLink(user.id) | 261 | const redisVerificationString = await Redis.Instance.getResetPasswordLink(user.id) |
262 | 262 | ||
263 | if (redisVerificationString !== req.body.verificationString) { | 263 | if (redisVerificationString !== req.body.verificationString) { |
@@ -299,7 +299,7 @@ const usersVerifyEmailValidator = [ | |||
299 | if (areValidationErrors(req, res)) return | 299 | if (areValidationErrors(req, res)) return |
300 | if (!await checkUserIdExist(req.params.id, res)) return | 300 | if (!await checkUserIdExist(req.params.id, res)) return |
301 | 301 | ||
302 | const user = res.locals.user as UserModel | 302 | const user = res.locals.user |
303 | const redisVerificationString = await Redis.Instance.getVerifyEmailLink(user.id) | 303 | const redisVerificationString = await Redis.Instance.getVerifyEmailLink(user.id) |
304 | 304 | ||
305 | if (redisVerificationString !== req.body.verificationString) { | 305 | if (redisVerificationString !== req.body.verificationString) { |
diff --git a/server/middlewares/validators/videos/video-blacklist.ts b/server/middlewares/validators/videos/video-blacklist.ts index 77ad29cbb..db318dcdb 100644 --- a/server/middlewares/validators/videos/video-blacklist.ts +++ b/server/middlewares/validators/videos/video-blacklist.ts | |||
@@ -5,7 +5,6 @@ import { doesVideoExist } from '../../../helpers/custom-validators/videos' | |||
5 | import { logger } from '../../../helpers/logger' | 5 | import { logger } from '../../../helpers/logger' |
6 | import { areValidationErrors } from '../utils' | 6 | import { areValidationErrors } from '../utils' |
7 | import { doesVideoBlacklistExist, isVideoBlacklistReasonValid } from '../../../helpers/custom-validators/video-blacklist' | 7 | import { doesVideoBlacklistExist, isVideoBlacklistReasonValid } from '../../../helpers/custom-validators/video-blacklist' |
8 | import { VideoModel } from '../../../models/video/video' | ||
9 | 8 | ||
10 | const videosBlacklistRemoveValidator = [ | 9 | const videosBlacklistRemoveValidator = [ |
11 | param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid videoId'), | 10 | param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid videoId'), |
@@ -37,7 +36,7 @@ const videosBlacklistAddValidator = [ | |||
37 | if (areValidationErrors(req, res)) return | 36 | if (areValidationErrors(req, res)) return |
38 | if (!await doesVideoExist(req.params.videoId, res)) return | 37 | if (!await doesVideoExist(req.params.videoId, res)) return |
39 | 38 | ||
40 | const video: VideoModel = res.locals.video | 39 | const video = res.locals.video |
41 | if (req.body.unfederate === true && video.remote === true) { | 40 | if (req.body.unfederate === true && video.remote === true) { |
42 | return res | 41 | return res |
43 | .status(409) | 42 | .status(409) |
diff --git a/server/middlewares/validators/videos/video-playlists.ts b/server/middlewares/validators/videos/video-playlists.ts index 4bc79f433..55e09e354 100644 --- a/server/middlewares/validators/videos/video-playlists.ts +++ b/server/middlewares/validators/videos/video-playlists.ts | |||
@@ -103,7 +103,7 @@ const videoPlaylistsDeleteValidator = [ | |||
103 | 103 | ||
104 | if (!await doesVideoPlaylistExist(req.params.playlistId, res)) return | 104 | if (!await doesVideoPlaylistExist(req.params.playlistId, res)) return |
105 | 105 | ||
106 | const videoPlaylist: VideoPlaylistModel = res.locals.videoPlaylist | 106 | const videoPlaylist = res.locals.videoPlaylist |
107 | if (videoPlaylist.type === VideoPlaylistType.WATCH_LATER) { | 107 | if (videoPlaylist.type === VideoPlaylistType.WATCH_LATER) { |
108 | return res.status(400) | 108 | return res.status(400) |
109 | .json({ error: 'Cannot delete a watch later playlist.' }) | 109 | .json({ error: 'Cannot delete a watch later playlist.' }) |
@@ -128,7 +128,7 @@ const videoPlaylistsGetValidator = [ | |||
128 | 128 | ||
129 | if (!await doesVideoPlaylistExist(req.params.playlistId, res)) return | 129 | if (!await doesVideoPlaylistExist(req.params.playlistId, res)) return |
130 | 130 | ||
131 | const videoPlaylist: VideoPlaylistModel = res.locals.videoPlaylist | 131 | const videoPlaylist = res.locals.videoPlaylist |
132 | 132 | ||
133 | // Video is unlisted, check we used the uuid to fetch it | 133 | // Video is unlisted, check we used the uuid to fetch it |
134 | if (videoPlaylist.privacy === VideoPlaylistPrivacy.UNLISTED) { | 134 | if (videoPlaylist.privacy === VideoPlaylistPrivacy.UNLISTED) { |
@@ -140,8 +140,7 @@ const videoPlaylistsGetValidator = [ | |||
140 | if (videoPlaylist.privacy === VideoPlaylistPrivacy.PRIVATE) { | 140 | if (videoPlaylist.privacy === VideoPlaylistPrivacy.PRIVATE) { |
141 | await authenticatePromiseIfNeeded(req, res) | 141 | await authenticatePromiseIfNeeded(req, res) |
142 | 142 | ||
143 | const user: UserModel = res.locals.oauth ? res.locals.oauth.token.User : null | 143 | const user = res.locals.oauth ? res.locals.oauth.token.User : null |
144 | |||
145 | if ( | 144 | if ( |
146 | !user || | 145 | !user || |
147 | (videoPlaylist.OwnerAccount.userId !== user.id && !user.hasRight(UserRight.UPDATE_ANY_VIDEO_PLAYLIST)) | 146 | (videoPlaylist.OwnerAccount.userId !== user.id && !user.hasRight(UserRight.UPDATE_ANY_VIDEO_PLAYLIST)) |
@@ -177,8 +176,8 @@ const videoPlaylistsAddVideoValidator = [ | |||
177 | if (!await doesVideoPlaylistExist(req.params.playlistId, res, 'all')) return | 176 | if (!await doesVideoPlaylistExist(req.params.playlistId, res, 'all')) return |
178 | if (!await doesVideoExist(req.body.videoId, res, 'only-video')) return | 177 | if (!await doesVideoExist(req.body.videoId, res, 'only-video')) return |
179 | 178 | ||
180 | const videoPlaylist: VideoPlaylistModel = res.locals.videoPlaylist | 179 | const videoPlaylist = res.locals.videoPlaylist |
181 | const video: VideoModel = res.locals.video | 180 | const video = res.locals.video |
182 | 181 | ||
183 | const videoPlaylistElement = await VideoPlaylistElementModel.loadByPlaylistAndVideo(videoPlaylist.id, video.id) | 182 | const videoPlaylistElement = await VideoPlaylistElementModel.loadByPlaylistAndVideo(videoPlaylist.id, video.id) |
184 | if (videoPlaylistElement) { | 183 | if (videoPlaylistElement) { |
@@ -217,8 +216,8 @@ const videoPlaylistsUpdateOrRemoveVideoValidator = [ | |||
217 | if (!await doesVideoPlaylistExist(req.params.playlistId, res, 'all')) return | 216 | if (!await doesVideoPlaylistExist(req.params.playlistId, res, 'all')) return |
218 | if (!await doesVideoExist(req.params.videoId, res, 'id')) return | 217 | if (!await doesVideoExist(req.params.videoId, res, 'id')) return |
219 | 218 | ||
220 | const videoPlaylist: VideoPlaylistModel = res.locals.videoPlaylist | 219 | const videoPlaylist = res.locals.videoPlaylist |
221 | const video: VideoModel = res.locals.video | 220 | const video = res.locals.video |
222 | 221 | ||
223 | const videoPlaylistElement = await VideoPlaylistElementModel.loadByPlaylistAndVideo(videoPlaylist.id, video.id) | 222 | const videoPlaylistElement = await VideoPlaylistElementModel.loadByPlaylistAndVideo(videoPlaylist.id, video.id) |
224 | if (!videoPlaylistElement) { | 223 | if (!videoPlaylistElement) { |
@@ -284,7 +283,7 @@ const videoPlaylistsReorderVideosValidator = [ | |||
284 | 283 | ||
285 | if (!await doesVideoPlaylistExist(req.params.playlistId, res, 'all')) return | 284 | if (!await doesVideoPlaylistExist(req.params.playlistId, res, 'all')) return |
286 | 285 | ||
287 | const videoPlaylist: VideoPlaylistModel = res.locals.videoPlaylist | 286 | const videoPlaylist = res.locals.videoPlaylist |
288 | if (!checkUserCanManageVideoPlaylist(res.locals.oauth.token.User, videoPlaylist, UserRight.UPDATE_ANY_VIDEO_PLAYLIST, res)) return | 287 | if (!checkUserCanManageVideoPlaylist(res.locals.oauth.token.User, videoPlaylist, UserRight.UPDATE_ANY_VIDEO_PLAYLIST, res)) return |
289 | 288 | ||
290 | const nextPosition = await VideoPlaylistElementModel.getNextPositionOf(videoPlaylist.id) | 289 | const nextPosition = await VideoPlaylistElementModel.getNextPositionOf(videoPlaylist.id) |
diff --git a/server/middlewares/validators/videos/video-shares.ts b/server/middlewares/validators/videos/video-shares.ts index f4514f85c..d5cbdb03e 100644 --- a/server/middlewares/validators/videos/video-shares.ts +++ b/server/middlewares/validators/videos/video-shares.ts | |||
@@ -6,7 +6,6 @@ import { doesVideoExist } from '../../../helpers/custom-validators/videos' | |||
6 | import { logger } from '../../../helpers/logger' | 6 | import { logger } from '../../../helpers/logger' |
7 | import { VideoShareModel } from '../../../models/video/video-share' | 7 | import { VideoShareModel } from '../../../models/video/video-share' |
8 | import { areValidationErrors } from '../utils' | 8 | import { areValidationErrors } from '../utils' |
9 | import { VideoModel } from '../../../models/video/video' | ||
10 | 9 | ||
11 | const videosShareValidator = [ | 10 | const videosShareValidator = [ |
12 | param('id').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'), | 11 | param('id').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'), |
@@ -18,7 +17,7 @@ const videosShareValidator = [ | |||
18 | if (areValidationErrors(req, res)) return | 17 | if (areValidationErrors(req, res)) return |
19 | if (!await doesVideoExist(req.params.id, res)) return | 18 | if (!await doesVideoExist(req.params.id, res)) return |
20 | 19 | ||
21 | const video: VideoModel = res.locals.video | 20 | const video = res.locals.video |
22 | 21 | ||
23 | const share = await VideoShareModel.load(req.params.actorId, video.id) | 22 | const share = await VideoShareModel.load(req.params.actorId, video.id) |
24 | if (!share) { | 23 | if (!share) { |
diff --git a/server/middlewares/validators/videos/video-watch.ts b/server/middlewares/validators/videos/video-watch.ts index a3b70c0cc..a3a800d14 100644 --- a/server/middlewares/validators/videos/video-watch.ts +++ b/server/middlewares/validators/videos/video-watch.ts | |||
@@ -4,7 +4,6 @@ import { isIdOrUUIDValid } from '../../../helpers/custom-validators/misc' | |||
4 | import { doesVideoExist } from '../../../helpers/custom-validators/videos' | 4 | import { doesVideoExist } from '../../../helpers/custom-validators/videos' |
5 | import { areValidationErrors } from '../utils' | 5 | import { areValidationErrors } from '../utils' |
6 | import { logger } from '../../../helpers/logger' | 6 | import { logger } from '../../../helpers/logger' |
7 | import { UserModel } from '../../../models/account/user' | ||
8 | 7 | ||
9 | const videoWatchingValidator = [ | 8 | const videoWatchingValidator = [ |
10 | param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'), | 9 | param('videoId').custom(isIdOrUUIDValid).not().isEmpty().withMessage('Should have a valid id'), |
@@ -18,7 +17,7 @@ const videoWatchingValidator = [ | |||
18 | if (areValidationErrors(req, res)) return | 17 | if (areValidationErrors(req, res)) return |
19 | if (!await doesVideoExist(req.params.videoId, res, 'id')) return | 18 | if (!await doesVideoExist(req.params.videoId, res, 'id')) return |
20 | 19 | ||
21 | const user = res.locals.oauth.token.User as UserModel | 20 | const user = res.locals.oauth.token.User |
22 | if (user.videosHistoryEnabled === false) { | 21 | if (user.videosHistoryEnabled === false) { |
23 | logger.warn('Cannot set videos to watch by user %d: videos history is disabled.', user.id) | 22 | logger.warn('Cannot set videos to watch by user %d: videos history is disabled.', user.id) |
24 | return res.status(409).end() | 23 | return res.status(409).end() |
diff --git a/server/middlewares/validators/videos/videos.ts b/server/middlewares/validators/videos/videos.ts index 92218d4b1..b70abf429 100644 --- a/server/middlewares/validators/videos/videos.ts +++ b/server/middlewares/validators/videos/videos.ts | |||
@@ -130,7 +130,7 @@ const videosUpdateValidator = getCommonVideoEditAttributes().concat([ | |||
130 | ]) | 130 | ]) |
131 | 131 | ||
132 | async function checkVideoFollowConstraints (req: express.Request, res: express.Response, next: express.NextFunction) { | 132 | async function checkVideoFollowConstraints (req: express.Request, res: express.Response, next: express.NextFunction) { |
133 | const video: VideoModel = res.locals.video | 133 | const video = res.locals.video |
134 | 134 | ||
135 | // Anybody can watch local videos | 135 | // Anybody can watch local videos |
136 | if (video.isOwned() === true) return next() | 136 | if (video.isOwned() === true) return next() |
@@ -164,13 +164,13 @@ const videosCustomGetValidator = (fetchType: VideoFetchType) => { | |||
164 | if (areValidationErrors(req, res)) return | 164 | if (areValidationErrors(req, res)) return |
165 | if (!await doesVideoExist(req.params.id, res, fetchType)) return | 165 | if (!await doesVideoExist(req.params.id, res, fetchType)) return |
166 | 166 | ||
167 | const video: VideoModel = res.locals.video | 167 | const video = res.locals.video |
168 | 168 | ||
169 | // Video private or blacklisted | 169 | // Video private or blacklisted |
170 | if (video.privacy === VideoPrivacy.PRIVATE || video.VideoBlacklist) { | 170 | if (video.privacy === VideoPrivacy.PRIVATE || video.VideoBlacklist) { |
171 | await authenticatePromiseIfNeeded(req, res) | 171 | await authenticatePromiseIfNeeded(req, res) |
172 | 172 | ||
173 | const user: UserModel = res.locals.oauth ? res.locals.oauth.token.User : null | 173 | const user = res.locals.oauth ? res.locals.oauth.token.User : null |
174 | 174 | ||
175 | // Only the owner or a user that have blacklist rights can see the video | 175 | // Only the owner or a user that have blacklist rights can see the video |
176 | if ( | 176 | if ( |
@@ -256,7 +256,7 @@ const videosTerminateChangeOwnershipValidator = [ | |||
256 | return next() | 256 | return next() |
257 | }, | 257 | }, |
258 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { | 258 | async (req: express.Request, res: express.Response, next: express.NextFunction) => { |
259 | const videoChangeOwnership = res.locals.videoChangeOwnership as VideoChangeOwnershipModel | 259 | const videoChangeOwnership = res.locals.videoChangeOwnership |
260 | 260 | ||
261 | if (videoChangeOwnership.status === VideoChangeOwnershipStatus.WAITING) { | 261 | if (videoChangeOwnership.status === VideoChangeOwnershipStatus.WAITING) { |
262 | return next() | 262 | return next() |
@@ -275,7 +275,7 @@ const videosAcceptChangeOwnershipValidator = [ | |||
275 | if (!await doesVideoChannelOfAccountExist(body.channelId, res.locals.oauth.token.User, res)) return | 275 | if (!await doesVideoChannelOfAccountExist(body.channelId, res.locals.oauth.token.User, res)) return |
276 | 276 | ||
277 | const user = res.locals.oauth.token.User | 277 | const user = res.locals.oauth.token.User |
278 | const videoChangeOwnership = res.locals.videoChangeOwnership as VideoChangeOwnershipModel | 278 | const videoChangeOwnership = res.locals.videoChangeOwnership |
279 | const isAble = await user.isAbleToUploadVideo(videoChangeOwnership.Video.getOriginalFile()) | 279 | const isAble = await user.isAbleToUploadVideo(videoChangeOwnership.Video.getOriginalFile()) |
280 | if (isAble === false) { | 280 | if (isAble === false) { |
281 | res.status(403) | 281 | res.status(403) |
@@ -395,7 +395,7 @@ const commonVideosFiltersValidator = [ | |||
395 | 395 | ||
396 | if (areValidationErrors(req, res)) return | 396 | if (areValidationErrors(req, res)) return |
397 | 397 | ||
398 | const user: UserModel = res.locals.oauth ? res.locals.oauth.token.User : undefined | 398 | const user = res.locals.oauth ? res.locals.oauth.token.User : undefined |
399 | if (req.query.filter === 'all-local' && (!user || user.hasRight(UserRight.SEE_ALL_VIDEOS) === false)) { | 399 | if (req.query.filter === 'all-local' && (!user || user.hasRight(UserRight.SEE_ALL_VIDEOS) === false)) { |
400 | res.status(401) | 400 | res.status(401) |
401 | .json({ error: 'You are not allowed to see all local videos.' }) | 401 | .json({ error: 'You are not allowed to see all local videos.' }) |
diff --git a/server/typings/express.ts b/server/typings/express.ts new file mode 100644 index 000000000..324d78662 --- /dev/null +++ b/server/typings/express.ts | |||
@@ -0,0 +1,82 @@ | |||
1 | import { VideoChannelModel } from '../models/video/video-channel' | ||
2 | import { VideoPlaylistModel } from '../models/video/video-playlist' | ||
3 | import { VideoPlaylistElementModel } from '../models/video/video-playlist-element' | ||
4 | import { UserModel } from '../models/account/user' | ||
5 | import { VideoModel } from '../models/video/video' | ||
6 | import { AccountModel } from '../models/account/account' | ||
7 | import { VideoChangeOwnershipModel } from '../models/video/video-change-ownership' | ||
8 | import { ActorModel } from '../models/activitypub/actor' | ||
9 | import { VideoCommentModel } from '../models/video/video-comment' | ||
10 | import { VideoShareModel } from '../models/video/video-share' | ||
11 | import { AccountVideoRateModel } from '../models/account/account-video-rate' | ||
12 | import { ActorFollowModel } from '../models/activitypub/actor-follow' | ||
13 | import { ServerModel } from '../models/server/server' | ||
14 | import { VideoFileModel } from '../models/video/video-file' | ||
15 | import { VideoRedundancyModel } from '../models/redundancy/video-redundancy' | ||
16 | import { ServerBlocklistModel } from '../models/server/server-blocklist' | ||
17 | import { AccountBlocklistModel } from '../models/account/account-blocklist' | ||
18 | import { VideoImportModel } from '../models/video/video-import' | ||
19 | import { VideoAbuseModel } from '../models/video/video-abuse' | ||
20 | import { VideoBlacklistModel } from '../models/video/video-blacklist' | ||
21 | import { VideoCaptionModel } from '../models/video/video-caption' | ||
22 | import { VideoStreamingPlaylistModel } from '../models/video/video-streaming-playlist' | ||
23 | |||
24 | declare module 'express' { | ||
25 | |||
26 | interface Response { | ||
27 | locals: { | ||
28 | video?: VideoModel | ||
29 | videoShare?: VideoShareModel | ||
30 | videoFile?: VideoFileModel | ||
31 | |||
32 | videoImport?: VideoImportModel | ||
33 | |||
34 | videoBlacklist?: VideoBlacklistModel | ||
35 | |||
36 | videoCaption?: VideoCaptionModel | ||
37 | |||
38 | videoAbuse?: VideoAbuseModel | ||
39 | |||
40 | videoStreamingPlaylist?: VideoStreamingPlaylistModel | ||
41 | |||
42 | videoChannel?: VideoChannelModel | ||
43 | |||
44 | videoPlaylist?: VideoPlaylistModel | ||
45 | videoPlaylistElement?: VideoPlaylistElementModel | ||
46 | |||
47 | accountVideoRate?: AccountVideoRateModel | ||
48 | |||
49 | videoComment?: VideoCommentModel | ||
50 | videoCommentThread?: VideoCommentModel | ||
51 | |||
52 | follow?: ActorFollowModel | ||
53 | subscription?: ActorFollowModel | ||
54 | |||
55 | nextOwner?: AccountModel | ||
56 | videoChangeOwnership?: VideoChangeOwnershipModel | ||
57 | account?: AccountModel | ||
58 | actor?: ActorModel | ||
59 | user?: UserModel | ||
60 | |||
61 | server?: ServerModel | ||
62 | |||
63 | videoRedundancy?: VideoRedundancyModel | ||
64 | |||
65 | accountBlock?: AccountBlocklistModel | ||
66 | serverBlock?: ServerBlocklistModel | ||
67 | |||
68 | oauth?: { | ||
69 | token: { | ||
70 | User: UserModel | ||
71 | user: UserModel | ||
72 | } | ||
73 | } | ||
74 | |||
75 | signature?: { | ||
76 | actor: ActorModel | ||
77 | } | ||
78 | |||
79 | authenticated?: boolean | ||
80 | } | ||
81 | } | ||
82 | } | ||
diff --git a/tsconfig.json b/tsconfig.json index c84b179cf..5ad4b3e10 100644 --- a/tsconfig.json +++ b/tsconfig.json | |||
@@ -14,11 +14,7 @@ | |||
14 | "es2016", | 14 | "es2016", |
15 | "es2017" | 15 | "es2017" |
16 | ], | 16 | ], |
17 | "types": [ | 17 | "typeRoots": [ "node_modules/@types", "server/typings" ] |
18 | "node", | ||
19 | "chai-xml", | ||
20 | "chai-json-schema" | ||
21 | ] | ||
22 | }, | 18 | }, |
23 | "exclude": [ | 19 | "exclude": [ |
24 | "client/node_modules", | 20 | "client/node_modules", |