diff options
author | Rigel Kent <sendmemail@rigelk.eu> | 2021-06-01 01:36:53 +0200 |
---|---|---|
committer | Chocobozzz <chocobozzz@cpy.re> | 2021-06-02 16:57:07 +0200 |
commit | 76148b27f7501bac061992136852be4303370c8d (patch) | |
tree | fc0559253e833c9252fa14ebaec5321d88bfb4e8 /server/controllers | |
parent | 5ed25fb76e920dac364cb9ef46f14ec4bd372949 (diff) | |
download | PeerTube-76148b27f7501bac061992136852be4303370c8d.tar.gz PeerTube-76148b27f7501bac061992136852be4303370c8d.tar.zst PeerTube-76148b27f7501bac061992136852be4303370c8d.zip |
refactor API errors to standard error format
Diffstat (limited to 'server/controllers')
25 files changed, 117 insertions, 76 deletions
diff --git a/server/controllers/api/abuse.ts b/server/controllers/api/abuse.ts index 0ab74bdff..108627f81 100644 --- a/server/controllers/api/abuse.ts +++ b/server/controllers/api/abuse.ts | |||
@@ -142,7 +142,7 @@ async function updateAbuse (req: express.Request, res: express.Response) { | |||
142 | 142 | ||
143 | // Do not send the delete to other instances, we updated OUR copy of this abuse | 143 | // Do not send the delete to other instances, we updated OUR copy of this abuse |
144 | 144 | ||
145 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 145 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
146 | } | 146 | } |
147 | 147 | ||
148 | async function deleteAbuse (req: express.Request, res: express.Response) { | 148 | async function deleteAbuse (req: express.Request, res: express.Response) { |
@@ -154,7 +154,7 @@ async function deleteAbuse (req: express.Request, res: express.Response) { | |||
154 | 154 | ||
155 | // Do not send the delete to other instances, we delete OUR copy of this abuse | 155 | // Do not send the delete to other instances, we delete OUR copy of this abuse |
156 | 156 | ||
157 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 157 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
158 | } | 158 | } |
159 | 159 | ||
160 | async function reportAbuse (req: express.Request, res: express.Response) { | 160 | async function reportAbuse (req: express.Request, res: express.Response) { |
@@ -244,5 +244,5 @@ async function deleteAbuseMessage (req: express.Request, res: express.Response) | |||
244 | return abuseMessage.destroy({ transaction: t }) | 244 | return abuseMessage.destroy({ transaction: t }) |
245 | }) | 245 | }) |
246 | 246 | ||
247 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 247 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
248 | } | 248 | } |
diff --git a/server/controllers/api/bulk.ts b/server/controllers/api/bulk.ts index 649351029..192daccde 100644 --- a/server/controllers/api/bulk.ts +++ b/server/controllers/api/bulk.ts | |||
@@ -34,7 +34,7 @@ async function bulkRemoveCommentsOf (req: express.Request, res: express.Response | |||
34 | const comments = await VideoCommentModel.listForBulkDelete(account, filter) | 34 | const comments = await VideoCommentModel.listForBulkDelete(account, filter) |
35 | 35 | ||
36 | // Don't wait result | 36 | // Don't wait result |
37 | res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 37 | res.status(HttpStatusCode.NO_CONTENT_204).end() |
38 | 38 | ||
39 | for (const comment of comments) { | 39 | for (const comment of comments) { |
40 | await removeComment(comment) | 40 | await removeComment(comment) |
diff --git a/server/controllers/api/custom-page.ts b/server/controllers/api/custom-page.ts index 3c47f7b9a..c19f03c56 100644 --- a/server/controllers/api/custom-page.ts +++ b/server/controllers/api/custom-page.ts | |||
@@ -27,7 +27,12 @@ export { | |||
27 | 27 | ||
28 | async function getInstanceHomepage (req: express.Request, res: express.Response) { | 28 | async function getInstanceHomepage (req: express.Request, res: express.Response) { |
29 | const page = await ActorCustomPageModel.loadInstanceHomepage() | 29 | const page = await ActorCustomPageModel.loadInstanceHomepage() |
30 | if (!page) return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 30 | if (!page) { |
31 | return res.fail({ | ||
32 | status: HttpStatusCode.NOT_FOUND_404, | ||
33 | message: 'Instance homepage could not be found' | ||
34 | }) | ||
35 | } | ||
31 | 36 | ||
32 | return res.json(page.toFormattedJSON()) | 37 | return res.json(page.toFormattedJSON()) |
33 | } | 38 | } |
@@ -38,5 +43,5 @@ async function updateInstanceHomepage (req: express.Request, res: express.Respon | |||
38 | await ActorCustomPageModel.updateInstanceHomepage(content) | 43 | await ActorCustomPageModel.updateInstanceHomepage(content) |
39 | ServerConfigManager.Instance.updateHomepageState(content) | 44 | ServerConfigManager.Instance.updateHomepageState(content) |
40 | 45 | ||
41 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 46 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
42 | } | 47 | } |
diff --git a/server/controllers/api/oauth-clients.ts b/server/controllers/api/oauth-clients.ts index c21e2298d..48a10d31f 100644 --- a/server/controllers/api/oauth-clients.ts +++ b/server/controllers/api/oauth-clients.ts | |||
@@ -24,7 +24,10 @@ async function getLocalClient (req: express.Request, res: express.Response, next | |||
24 | // Don't make this check if this is a test instance | 24 | // Don't make this check if this is a test instance |
25 | if (process.env.NODE_ENV !== 'test' && req.get('host') !== headerHostShouldBe) { | 25 | if (process.env.NODE_ENV !== 'test' && req.get('host') !== headerHostShouldBe) { |
26 | logger.info('Getting client tokens for host %s is forbidden (expected %s).', req.get('host'), headerHostShouldBe) | 26 | logger.info('Getting client tokens for host %s is forbidden (expected %s).', req.get('host'), headerHostShouldBe) |
27 | return res.type('json').status(HttpStatusCode.FORBIDDEN_403).end() | 27 | return res.fail({ |
28 | status: HttpStatusCode.FORBIDDEN_403, | ||
29 | message: `Getting client tokens for host ${req.get('host')} is forbidden` | ||
30 | }) | ||
28 | } | 31 | } |
29 | 32 | ||
30 | const client = await OAuthClientModel.loadFirstClient() | 33 | const client = await OAuthClientModel.loadFirstClient() |
diff --git a/server/controllers/api/plugins.ts b/server/controllers/api/plugins.ts index e18eed332..b64062287 100644 --- a/server/controllers/api/plugins.ts +++ b/server/controllers/api/plugins.ts | |||
@@ -144,7 +144,7 @@ async function installPlugin (req: express.Request, res: express.Response) { | |||
144 | return res.json(plugin.toFormattedJSON()) | 144 | return res.json(plugin.toFormattedJSON()) |
145 | } catch (err) { | 145 | } catch (err) { |
146 | logger.warn('Cannot install plugin %s.', toInstall, { err }) | 146 | logger.warn('Cannot install plugin %s.', toInstall, { err }) |
147 | return res.sendStatus(HttpStatusCode.BAD_REQUEST_400) | 147 | return res.fail({ message: 'Cannot install plugin ' + toInstall }) |
148 | } | 148 | } |
149 | } | 149 | } |
150 | 150 | ||
@@ -159,7 +159,7 @@ async function updatePlugin (req: express.Request, res: express.Response) { | |||
159 | return res.json(plugin.toFormattedJSON()) | 159 | return res.json(plugin.toFormattedJSON()) |
160 | } catch (err) { | 160 | } catch (err) { |
161 | logger.warn('Cannot update plugin %s.', toUpdate, { err }) | 161 | logger.warn('Cannot update plugin %s.', toUpdate, { err }) |
162 | return res.sendStatus(HttpStatusCode.BAD_REQUEST_400) | 162 | return res.fail({ message: 'Cannot update plugin ' + toUpdate }) |
163 | } | 163 | } |
164 | } | 164 | } |
165 | 165 | ||
@@ -168,7 +168,7 @@ async function uninstallPlugin (req: express.Request, res: express.Response) { | |||
168 | 168 | ||
169 | await PluginManager.Instance.uninstall(body.npmName) | 169 | await PluginManager.Instance.uninstall(body.npmName) |
170 | 170 | ||
171 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 171 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
172 | } | 172 | } |
173 | 173 | ||
174 | function getPublicPluginSettings (req: express.Request, res: express.Response) { | 174 | function getPublicPluginSettings (req: express.Request, res: express.Response) { |
@@ -197,7 +197,7 @@ async function updatePluginSettings (req: express.Request, res: express.Response | |||
197 | 197 | ||
198 | await PluginManager.Instance.onSettingsChanged(plugin.name, plugin.settings) | 198 | await PluginManager.Instance.onSettingsChanged(plugin.name, plugin.settings) |
199 | 199 | ||
200 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 200 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
201 | } | 201 | } |
202 | 202 | ||
203 | async function listAvailablePlugins (req: express.Request, res: express.Response) { | 203 | async function listAvailablePlugins (req: express.Request, res: express.Response) { |
@@ -206,8 +206,10 @@ async function listAvailablePlugins (req: express.Request, res: express.Response | |||
206 | const resultList = await listAvailablePluginsFromIndex(query) | 206 | const resultList = await listAvailablePluginsFromIndex(query) |
207 | 207 | ||
208 | if (!resultList) { | 208 | if (!resultList) { |
209 | return res.status(HttpStatusCode.SERVICE_UNAVAILABLE_503) | 209 | return res.fail({ |
210 | .json({ error: 'Plugin index unavailable. Please retry later' }) | 210 | status: HttpStatusCode.SERVICE_UNAVAILABLE_503, |
211 | message: 'Plugin index unavailable. Please retry later' | ||
212 | }) | ||
211 | } | 213 | } |
212 | 214 | ||
213 | return res.json(resultList) | 215 | return res.json(resultList) |
diff --git a/server/controllers/api/search.ts b/server/controllers/api/search.ts index f0cdf3a89..77e3a024d 100644 --- a/server/controllers/api/search.ts +++ b/server/controllers/api/search.ts | |||
@@ -102,7 +102,10 @@ async function searchVideoChannelsIndex (query: VideoChannelsSearchQuery, res: e | |||
102 | } catch (err) { | 102 | } catch (err) { |
103 | logger.warn('Cannot use search index to make video channels search.', { err }) | 103 | logger.warn('Cannot use search index to make video channels search.', { err }) |
104 | 104 | ||
105 | return res.sendStatus(HttpStatusCode.INTERNAL_SERVER_ERROR_500) | 105 | return res.fail({ |
106 | status: HttpStatusCode.INTERNAL_SERVER_ERROR_500, | ||
107 | message: 'Cannot use search index to make video channels search' | ||
108 | }) | ||
106 | } | 109 | } |
107 | } | 110 | } |
108 | 111 | ||
@@ -202,7 +205,10 @@ async function searchVideosIndex (query: VideosSearchQuery, res: express.Respons | |||
202 | } catch (err) { | 205 | } catch (err) { |
203 | logger.warn('Cannot use search index to make video search.', { err }) | 206 | logger.warn('Cannot use search index to make video search.', { err }) |
204 | 207 | ||
205 | return res.sendStatus(HttpStatusCode.INTERNAL_SERVER_ERROR_500) | 208 | return res.fail({ |
209 | status: HttpStatusCode.INTERNAL_SERVER_ERROR_500, | ||
210 | message: 'Cannot use search index to make video search' | ||
211 | }) | ||
206 | } | 212 | } |
207 | } | 213 | } |
208 | 214 | ||
diff --git a/server/controllers/api/server/debug.ts b/server/controllers/api/server/debug.ts index ff0d9ca3c..a6e9147f3 100644 --- a/server/controllers/api/server/debug.ts +++ b/server/controllers/api/server/debug.ts | |||
@@ -1,5 +1,6 @@ | |||
1 | import { InboxManager } from '@server/lib/activitypub/inbox-manager' | 1 | import { InboxManager } from '@server/lib/activitypub/inbox-manager' |
2 | import { RemoveDanglingResumableUploadsScheduler } from '@server/lib/schedulers/remove-dangling-resumable-uploads-scheduler' | 2 | import { RemoveDanglingResumableUploadsScheduler } from '@server/lib/schedulers/remove-dangling-resumable-uploads-scheduler' |
3 | import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' | ||
3 | import { SendDebugCommand } from '@shared/models' | 4 | import { SendDebugCommand } from '@shared/models' |
4 | import * as express from 'express' | 5 | import * as express from 'express' |
5 | import { UserRight } from '../../../../shared/models/users' | 6 | import { UserRight } from '../../../../shared/models/users' |
@@ -41,5 +42,5 @@ async function runCommand (req: express.Request, res: express.Response) { | |||
41 | await RemoveDanglingResumableUploadsScheduler.Instance.execute() | 42 | await RemoveDanglingResumableUploadsScheduler.Instance.execute() |
42 | } | 43 | } |
43 | 44 | ||
44 | return res.sendStatus(204) | 45 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
45 | } | 46 | } |
diff --git a/server/controllers/api/server/redundancy.ts b/server/controllers/api/server/redundancy.ts index 7c13dc21b..bc593ad43 100644 --- a/server/controllers/api/server/redundancy.ts +++ b/server/controllers/api/server/redundancy.ts | |||
@@ -90,13 +90,13 @@ async function addVideoRedundancy (req: express.Request, res: express.Response) | |||
90 | payload | 90 | payload |
91 | }) | 91 | }) |
92 | 92 | ||
93 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 93 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
94 | } | 94 | } |
95 | 95 | ||
96 | async function removeVideoRedundancyController (req: express.Request, res: express.Response) { | 96 | async function removeVideoRedundancyController (req: express.Request, res: express.Response) { |
97 | await removeVideoRedundancy(res.locals.videoRedundancy) | 97 | await removeVideoRedundancy(res.locals.videoRedundancy) |
98 | 98 | ||
99 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 99 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
100 | } | 100 | } |
101 | 101 | ||
102 | async function updateRedundancy (req: express.Request, res: express.Response) { | 102 | async function updateRedundancy (req: express.Request, res: express.Response) { |
@@ -110,5 +110,5 @@ async function updateRedundancy (req: express.Request, res: express.Response) { | |||
110 | removeRedundanciesOfServer(server.id) | 110 | removeRedundanciesOfServer(server.id) |
111 | .catch(err => logger.error('Cannot remove redundancy of %s.', server.host, { err })) | 111 | .catch(err => logger.error('Cannot remove redundancy of %s.', server.host, { err })) |
112 | 112 | ||
113 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 113 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
114 | } | 114 | } |
diff --git a/server/controllers/api/users/index.ts b/server/controllers/api/users/index.ts index f384f0f28..d907b49bf 100644 --- a/server/controllers/api/users/index.ts +++ b/server/controllers/api/users/index.ts | |||
@@ -314,7 +314,7 @@ async function removeUser (req: express.Request, res: express.Response) { | |||
314 | 314 | ||
315 | Hooks.runAction('action:api.user.deleted', { user }) | 315 | Hooks.runAction('action:api.user.deleted', { user }) |
316 | 316 | ||
317 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 317 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
318 | } | 318 | } |
319 | 319 | ||
320 | async function updateUser (req: express.Request, res: express.Response) { | 320 | async function updateUser (req: express.Request, res: express.Response) { |
@@ -349,7 +349,7 @@ async function updateUser (req: express.Request, res: express.Response) { | |||
349 | 349 | ||
350 | // Don't need to send this update to followers, these attributes are not federated | 350 | // Don't need to send this update to followers, these attributes are not federated |
351 | 351 | ||
352 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 352 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
353 | } | 353 | } |
354 | 354 | ||
355 | async function askResetUserPassword (req: express.Request, res: express.Response) { | 355 | async function askResetUserPassword (req: express.Request, res: express.Response) { |
diff --git a/server/controllers/api/users/me.ts b/server/controllers/api/users/me.ts index a609abaa6..810e4295e 100644 --- a/server/controllers/api/users/me.ts +++ b/server/controllers/api/users/me.ts | |||
@@ -183,7 +183,7 @@ async function deleteMe (req: express.Request, res: express.Response) { | |||
183 | 183 | ||
184 | await user.destroy() | 184 | await user.destroy() |
185 | 185 | ||
186 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 186 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
187 | } | 187 | } |
188 | 188 | ||
189 | async function updateMe (req: express.Request, res: express.Response) { | 189 | async function updateMe (req: express.Request, res: express.Response) { |
@@ -237,7 +237,7 @@ async function updateMe (req: express.Request, res: express.Response) { | |||
237 | await sendVerifyUserEmail(user, true) | 237 | await sendVerifyUserEmail(user, true) |
238 | } | 238 | } |
239 | 239 | ||
240 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 240 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
241 | } | 241 | } |
242 | 242 | ||
243 | async function updateMyAvatar (req: express.Request, res: express.Response) { | 243 | async function updateMyAvatar (req: express.Request, res: express.Response) { |
@@ -257,5 +257,5 @@ async function deleteMyAvatar (req: express.Request, res: express.Response) { | |||
257 | const userAccount = await AccountModel.load(user.Account.id) | 257 | const userAccount = await AccountModel.load(user.Account.id) |
258 | await deleteLocalActorImageFile(userAccount, ActorImageType.AVATAR) | 258 | await deleteLocalActorImageFile(userAccount, ActorImageType.AVATAR) |
259 | 259 | ||
260 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 260 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
261 | } | 261 | } |
diff --git a/server/controllers/api/users/token.ts b/server/controllers/api/users/token.ts index 694bb0a92..863a3d74c 100644 --- a/server/controllers/api/users/token.ts +++ b/server/controllers/api/users/token.ts | |||
@@ -78,9 +78,10 @@ async function handleToken (req: express.Request, res: express.Response, next: e | |||
78 | } catch (err) { | 78 | } catch (err) { |
79 | logger.warn('Login error', { err }) | 79 | logger.warn('Login error', { err }) |
80 | 80 | ||
81 | return res.status(err.code || 400).json({ | 81 | return res.fail({ |
82 | code: err.name, | 82 | status: err.code, |
83 | error: err.message | 83 | message: err.message, |
84 | type: err.name | ||
84 | }) | 85 | }) |
85 | } | 86 | } |
86 | } | 87 | } |
diff --git a/server/controllers/api/video-channel.ts b/server/controllers/api/video-channel.ts index 859d8b3c0..34207ea8a 100644 --- a/server/controllers/api/video-channel.ts +++ b/server/controllers/api/video-channel.ts | |||
@@ -180,7 +180,7 @@ async function deleteVideoChannelAvatar (req: express.Request, res: express.Resp | |||
180 | 180 | ||
181 | await deleteLocalActorImageFile(videoChannel, ActorImageType.AVATAR) | 181 | await deleteLocalActorImageFile(videoChannel, ActorImageType.AVATAR) |
182 | 182 | ||
183 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 183 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
184 | } | 184 | } |
185 | 185 | ||
186 | async function deleteVideoChannelBanner (req: express.Request, res: express.Response) { | 186 | async function deleteVideoChannelBanner (req: express.Request, res: express.Response) { |
@@ -188,7 +188,7 @@ async function deleteVideoChannelBanner (req: express.Request, res: express.Resp | |||
188 | 188 | ||
189 | await deleteLocalActorImageFile(videoChannel, ActorImageType.BANNER) | 189 | await deleteLocalActorImageFile(videoChannel, ActorImageType.BANNER) |
190 | 190 | ||
191 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 191 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
192 | } | 192 | } |
193 | 193 | ||
194 | async function addVideoChannel (req: express.Request, res: express.Response) { | 194 | async function addVideoChannel (req: express.Request, res: express.Response) { |
diff --git a/server/controllers/api/videos/blacklist.ts b/server/controllers/api/videos/blacklist.ts index fa8448c86..ca2b85ea5 100644 --- a/server/controllers/api/videos/blacklist.ts +++ b/server/controllers/api/videos/blacklist.ts | |||
@@ -70,7 +70,7 @@ async function addVideoToBlacklistController (req: express.Request, res: express | |||
70 | 70 | ||
71 | logger.info('Video %s blacklisted.', videoInstance.uuid) | 71 | logger.info('Video %s blacklisted.', videoInstance.uuid) |
72 | 72 | ||
73 | return res.type('json').sendStatus(HttpStatusCode.NO_CONTENT_204) | 73 | return res.type('json').status(HttpStatusCode.NO_CONTENT_204).end() |
74 | } | 74 | } |
75 | 75 | ||
76 | async function updateVideoBlacklistController (req: express.Request, res: express.Response) { | 76 | async function updateVideoBlacklistController (req: express.Request, res: express.Response) { |
@@ -82,7 +82,7 @@ async function updateVideoBlacklistController (req: express.Request, res: expres | |||
82 | return videoBlacklist.save({ transaction: t }) | 82 | return videoBlacklist.save({ transaction: t }) |
83 | }) | 83 | }) |
84 | 84 | ||
85 | return res.type('json').sendStatus(HttpStatusCode.NO_CONTENT_204) | 85 | return res.type('json').status(HttpStatusCode.NO_CONTENT_204).end() |
86 | } | 86 | } |
87 | 87 | ||
88 | async function listBlacklist (req: express.Request, res: express.Response) { | 88 | async function listBlacklist (req: express.Request, res: express.Response) { |
@@ -105,5 +105,5 @@ async function removeVideoFromBlacklistController (req: express.Request, res: ex | |||
105 | 105 | ||
106 | logger.info('Video %s removed from blacklist.', video.uuid) | 106 | logger.info('Video %s removed from blacklist.', video.uuid) |
107 | 107 | ||
108 | return res.type('json').sendStatus(HttpStatusCode.NO_CONTENT_204) | 108 | return res.type('json').status(HttpStatusCode.NO_CONTENT_204).end() |
109 | } | 109 | } |
diff --git a/server/controllers/api/videos/comment.ts b/server/controllers/api/videos/comment.ts index cfdf2773f..e6f28c1cb 100644 --- a/server/controllers/api/videos/comment.ts +++ b/server/controllers/api/videos/comment.ts | |||
@@ -166,7 +166,10 @@ async function listVideoThreadComments (req: express.Request, res: express.Respo | |||
166 | } | 166 | } |
167 | 167 | ||
168 | if (resultList.data.length === 0) { | 168 | if (resultList.data.length === 0) { |
169 | return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 169 | return res.fail({ |
170 | status: HttpStatusCode.NOT_FOUND_404, | ||
171 | message: 'No comments were found' | ||
172 | }) | ||
170 | } | 173 | } |
171 | 174 | ||
172 | return res.json(buildFormattedCommentTree(resultList)) | 175 | return res.json(buildFormattedCommentTree(resultList)) |
diff --git a/server/controllers/api/videos/import.ts b/server/controllers/api/videos/import.ts index 0d5d7a962..6ee109a8f 100644 --- a/server/controllers/api/videos/import.ts +++ b/server/controllers/api/videos/import.ts | |||
@@ -18,7 +18,6 @@ import { | |||
18 | } from '@server/types/models' | 18 | } from '@server/types/models' |
19 | import { MVideoImportFormattable } from '@server/types/models/video/video-import' | 19 | import { MVideoImportFormattable } from '@server/types/models/video/video-import' |
20 | import { ServerErrorCode, VideoImportCreate, VideoImportState, VideoPrivacy, VideoState } from '../../../../shared' | 20 | import { ServerErrorCode, VideoImportCreate, VideoImportState, VideoPrivacy, VideoState } from '../../../../shared' |
21 | import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes' | ||
22 | import { ThumbnailType } from '../../../../shared/models/videos/thumbnail.type' | 21 | import { ThumbnailType } from '../../../../shared/models/videos/thumbnail.type' |
23 | import { auditLoggerFactory, getAuditIdFromRes, VideoImportAuditView } from '../../../helpers/audit-logger' | 22 | import { auditLoggerFactory, getAuditIdFromRes, VideoImportAuditView } from '../../../helpers/audit-logger' |
24 | import { moveAndProcessCaptionFile } from '../../../helpers/captions-utils' | 23 | import { moveAndProcessCaptionFile } from '../../../helpers/captions-utils' |
@@ -143,10 +142,12 @@ async function addYoutubeDLImport (req: express.Request, res: express.Response) | |||
143 | } catch (err) { | 142 | } catch (err) { |
144 | logger.info('Cannot fetch information from import for URL %s.', targetUrl, { err }) | 143 | logger.info('Cannot fetch information from import for URL %s.', targetUrl, { err }) |
145 | 144 | ||
146 | return res.status(HttpStatusCode.BAD_REQUEST_400) | 145 | return res.fail({ |
147 | .json({ | 146 | message: 'Cannot fetch remote information of this URL.', |
148 | error: 'Cannot fetch remote information of this URL.' | 147 | data: { |
149 | }) | 148 | targetUrl |
149 | } | ||
150 | }) | ||
150 | } | 151 | } |
151 | 152 | ||
152 | const video = buildVideo(res.locals.videoChannel.id, body, youtubeDLInfo) | 153 | const video = buildVideo(res.locals.videoChannel.id, body, youtubeDLInfo) |
@@ -333,12 +334,10 @@ async function processTorrentOrAbortRequest (req: express.Request, res: express. | |||
333 | if (parsedTorrent.files.length !== 1) { | 334 | if (parsedTorrent.files.length !== 1) { |
334 | cleanUpReqFiles(req) | 335 | cleanUpReqFiles(req) |
335 | 336 | ||
336 | res.status(HttpStatusCode.BAD_REQUEST_400) | 337 | res.fail({ |
337 | .json({ | 338 | type: ServerErrorCode.INCORRECT_FILES_IN_TORRENT.toString(), |
338 | code: ServerErrorCode.INCORRECT_FILES_IN_TORRENT, | 339 | message: 'Torrents with only 1 file are supported.' |
339 | error: 'Torrents with only 1 file are supported.' | 340 | }) |
340 | }) | ||
341 | |||
342 | return undefined | 341 | return undefined |
343 | } | 342 | } |
344 | 343 | ||
diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts index 6483d2e8a..47ab098ef 100644 --- a/server/controllers/api/videos/index.ts +++ b/server/controllers/api/videos/index.ts | |||
@@ -146,7 +146,7 @@ async function viewVideo (req: express.Request, res: express.Response) { | |||
146 | const exists = await Redis.Instance.doesVideoIPViewExist(ip, immutableVideoAttrs.uuid) | 146 | const exists = await Redis.Instance.doesVideoIPViewExist(ip, immutableVideoAttrs.uuid) |
147 | if (exists) { | 147 | if (exists) { |
148 | logger.debug('View for ip %s and video %s already exists.', ip, immutableVideoAttrs.uuid) | 148 | logger.debug('View for ip %s and video %s already exists.', ip, immutableVideoAttrs.uuid) |
149 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 149 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
150 | } | 150 | } |
151 | 151 | ||
152 | const video = await VideoModel.load(immutableVideoAttrs.id) | 152 | const video = await VideoModel.load(immutableVideoAttrs.id) |
@@ -179,7 +179,7 @@ async function viewVideo (req: express.Request, res: express.Response) { | |||
179 | 179 | ||
180 | Hooks.runAction('action:api.video.viewed', { video, ip }) | 180 | Hooks.runAction('action:api.video.viewed', { video, ip }) |
181 | 181 | ||
182 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 182 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
183 | } | 183 | } |
184 | 184 | ||
185 | async function getVideoDescription (req: express.Request, res: express.Response) { | 185 | async function getVideoDescription (req: express.Request, res: express.Response) { |
diff --git a/server/controllers/api/videos/live.ts b/server/controllers/api/videos/live.ts index 04d2494ce..6b733c577 100644 --- a/server/controllers/api/videos/live.ts +++ b/server/controllers/api/videos/live.ts | |||
@@ -76,7 +76,7 @@ async function updateLiveVideo (req: express.Request, res: express.Response) { | |||
76 | 76 | ||
77 | await federateVideoIfNeeded(video, false) | 77 | await federateVideoIfNeeded(video, false) |
78 | 78 | ||
79 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 79 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
80 | } | 80 | } |
81 | 81 | ||
82 | async function addLiveVideo (req: express.Request, res: express.Response) { | 82 | async function addLiveVideo (req: express.Request, res: express.Response) { |
diff --git a/server/controllers/api/videos/ownership.ts b/server/controllers/api/videos/ownership.ts index 6102f28dc..2d6ca60a8 100644 --- a/server/controllers/api/videos/ownership.ts +++ b/server/controllers/api/videos/ownership.ts | |||
@@ -122,7 +122,7 @@ function acceptOwnership (req: express.Request, res: express.Response) { | |||
122 | videoChangeOwnership.status = VideoChangeOwnershipStatus.ACCEPTED | 122 | videoChangeOwnership.status = VideoChangeOwnershipStatus.ACCEPTED |
123 | await videoChangeOwnership.save({ transaction: t }) | 123 | await videoChangeOwnership.save({ transaction: t }) |
124 | 124 | ||
125 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 125 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
126 | }) | 126 | }) |
127 | } | 127 | } |
128 | 128 | ||
@@ -133,6 +133,6 @@ function refuseOwnership (req: express.Request, res: express.Response) { | |||
133 | videoChangeOwnership.status = VideoChangeOwnershipStatus.REFUSED | 133 | videoChangeOwnership.status = VideoChangeOwnershipStatus.REFUSED |
134 | await videoChangeOwnership.save({ transaction: t }) | 134 | await videoChangeOwnership.save({ transaction: t }) |
135 | 135 | ||
136 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | 136 | return res.status(HttpStatusCode.NO_CONTENT_204).end() |
137 | }) | 137 | }) |
138 | } | 138 | } |
diff --git a/server/controllers/api/videos/upload.ts b/server/controllers/api/videos/upload.ts index ebc17c760..c33d7fcb9 100644 --- a/server/controllers/api/videos/upload.ts +++ b/server/controllers/api/videos/upload.ts | |||
@@ -97,8 +97,11 @@ export async function addVideoLegacy (req: express.Request, res: express.Respons | |||
97 | // Uploading the video could be long | 97 | // Uploading the video could be long |
98 | // Set timeout to 10 minutes, as Express's default is 2 minutes | 98 | // Set timeout to 10 minutes, as Express's default is 2 minutes |
99 | req.setTimeout(1000 * 60 * 10, () => { | 99 | req.setTimeout(1000 * 60 * 10, () => { |
100 | logger.error('Upload video has timed out.') | 100 | logger.error('Video upload has timed out.') |
101 | return res.sendStatus(HttpStatusCode.REQUEST_TIMEOUT_408) | 101 | return res.fail({ |
102 | status: HttpStatusCode.REQUEST_TIMEOUT_408, | ||
103 | message: 'Video upload has timed out.' | ||
104 | }) | ||
102 | }) | 105 | }) |
103 | 106 | ||
104 | const videoPhysicalFile = req.files['videofile'][0] | 107 | const videoPhysicalFile = req.files['videofile'][0] |
diff --git a/server/controllers/client.ts b/server/controllers/client.ts index fcccc48e0..eb1ee6cbd 100644 --- a/server/controllers/client.ts +++ b/server/controllers/client.ts | |||
@@ -78,7 +78,7 @@ clientsRouter.use('/client', express.static(distPath, { maxAge: STATIC_MAX_AGE.C | |||
78 | 78 | ||
79 | // 404 for static files not found | 79 | // 404 for static files not found |
80 | clientsRouter.use('/client/*', (req: express.Request, res: express.Response) => { | 80 | clientsRouter.use('/client/*', (req: express.Request, res: express.Response) => { |
81 | res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 81 | res.status(HttpStatusCode.NOT_FOUND_404).end() |
82 | }) | 82 | }) |
83 | 83 | ||
84 | // Always serve index client page (the client is a single page application, let it handle routing) | 84 | // Always serve index client page (the client is a single page application, let it handle routing) |
@@ -105,7 +105,7 @@ function serveServerTranslations (req: express.Request, res: express.Response) { | |||
105 | return res.sendFile(path, { maxAge: STATIC_MAX_AGE.SERVER }) | 105 | return res.sendFile(path, { maxAge: STATIC_MAX_AGE.SERVER }) |
106 | } | 106 | } |
107 | 107 | ||
108 | return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 108 | return res.status(HttpStatusCode.NOT_FOUND_404).end() |
109 | } | 109 | } |
110 | 110 | ||
111 | async function generateEmbedHtmlPage (req: express.Request, res: express.Response) { | 111 | async function generateEmbedHtmlPage (req: express.Request, res: express.Response) { |
diff --git a/server/controllers/download.ts b/server/controllers/download.ts index 9a8194c5c..4293a32e2 100644 --- a/server/controllers/download.ts +++ b/server/controllers/download.ts | |||
@@ -41,7 +41,12 @@ export { | |||
41 | 41 | ||
42 | async function downloadTorrent (req: express.Request, res: express.Response) { | 42 | async function downloadTorrent (req: express.Request, res: express.Response) { |
43 | const result = await VideosTorrentCache.Instance.getFilePath(req.params.filename) | 43 | const result = await VideosTorrentCache.Instance.getFilePath(req.params.filename) |
44 | if (!result) return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 44 | if (!result) { |
45 | return res.fail({ | ||
46 | status: HttpStatusCode.NOT_FOUND_404, | ||
47 | message: 'Torrent file not found' | ||
48 | }) | ||
49 | } | ||
45 | 50 | ||
46 | const allowParameters = { torrentPath: result.path, downloadName: result.downloadName } | 51 | const allowParameters = { torrentPath: result.path, downloadName: result.downloadName } |
47 | 52 | ||
@@ -60,7 +65,12 @@ async function downloadVideoFile (req: express.Request, res: express.Response) { | |||
60 | const video = res.locals.videoAll | 65 | const video = res.locals.videoAll |
61 | 66 | ||
62 | const videoFile = getVideoFile(req, video.VideoFiles) | 67 | const videoFile = getVideoFile(req, video.VideoFiles) |
63 | if (!videoFile) return res.status(HttpStatusCode.NOT_FOUND_404).end() | 68 | if (!videoFile) { |
69 | return res.fail({ | ||
70 | status: HttpStatusCode.NOT_FOUND_404, | ||
71 | message: 'Video file not found' | ||
72 | }) | ||
73 | } | ||
64 | 74 | ||
65 | const allowParameters = { video, videoFile } | 75 | const allowParameters = { video, videoFile } |
66 | 76 | ||
@@ -81,7 +91,12 @@ async function downloadHLSVideoFile (req: express.Request, res: express.Response | |||
81 | if (!streamingPlaylist) return res.status(HttpStatusCode.NOT_FOUND_404).end | 91 | if (!streamingPlaylist) return res.status(HttpStatusCode.NOT_FOUND_404).end |
82 | 92 | ||
83 | const videoFile = getVideoFile(req, streamingPlaylist.VideoFiles) | 93 | const videoFile = getVideoFile(req, streamingPlaylist.VideoFiles) |
84 | if (!videoFile) return res.status(HttpStatusCode.NOT_FOUND_404).end() | 94 | if (!videoFile) { |
95 | return res.fail({ | ||
96 | status: HttpStatusCode.NOT_FOUND_404, | ||
97 | message: 'Video file not found' | ||
98 | }) | ||
99 | } | ||
85 | 100 | ||
86 | const allowParameters = { video, streamingPlaylist, videoFile } | 101 | const allowParameters = { video, streamingPlaylist, videoFile } |
87 | 102 | ||
@@ -131,9 +146,11 @@ function isVideoDownloadAllowed (_object: { | |||
131 | function checkAllowResult (res: express.Response, allowParameters: any, result?: AllowedResult) { | 146 | function checkAllowResult (res: express.Response, allowParameters: any, result?: AllowedResult) { |
132 | if (!result || result.allowed !== true) { | 147 | if (!result || result.allowed !== true) { |
133 | logger.info('Download is not allowed.', { result, allowParameters }) | 148 | logger.info('Download is not allowed.', { result, allowParameters }) |
134 | res.status(HttpStatusCode.FORBIDDEN_403) | ||
135 | .json({ error: result?.errorMessage || 'Refused download' }) | ||
136 | 149 | ||
150 | res.fail({ | ||
151 | status: HttpStatusCode.FORBIDDEN_403, | ||
152 | message: result?.errorMessage || 'Refused download' | ||
153 | }) | ||
137 | return false | 154 | return false |
138 | } | 155 | } |
139 | 156 | ||
diff --git a/server/controllers/lazy-static.ts b/server/controllers/lazy-static.ts index 25d3b49b4..9f260cef0 100644 --- a/server/controllers/lazy-static.ts +++ b/server/controllers/lazy-static.ts | |||
@@ -56,10 +56,10 @@ async function getActorImage (req: express.Request, res: express.Response) { | |||
56 | } | 56 | } |
57 | 57 | ||
58 | const image = await ActorImageModel.loadByName(filename) | 58 | const image = await ActorImageModel.loadByName(filename) |
59 | if (!image) return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 59 | if (!image) return res.status(HttpStatusCode.NOT_FOUND_404).end() |
60 | 60 | ||
61 | if (image.onDisk === false) { | 61 | if (image.onDisk === false) { |
62 | if (!image.fileUrl) return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 62 | if (!image.fileUrl) return res.status(HttpStatusCode.NOT_FOUND_404).end() |
63 | 63 | ||
64 | logger.info('Lazy serve remote actor image %s.', image.fileUrl) | 64 | logger.info('Lazy serve remote actor image %s.', image.fileUrl) |
65 | 65 | ||
@@ -67,7 +67,7 @@ async function getActorImage (req: express.Request, res: express.Response) { | |||
67 | await pushActorImageProcessInQueue({ filename: image.filename, fileUrl: image.fileUrl, type: image.type }) | 67 | await pushActorImageProcessInQueue({ filename: image.filename, fileUrl: image.fileUrl, type: image.type }) |
68 | } catch (err) { | 68 | } catch (err) { |
69 | logger.warn('Cannot process remote actor image %s.', image.fileUrl, { err }) | 69 | logger.warn('Cannot process remote actor image %s.', image.fileUrl, { err }) |
70 | return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 70 | return res.status(HttpStatusCode.NOT_FOUND_404).end() |
71 | } | 71 | } |
72 | 72 | ||
73 | image.onDisk = true | 73 | image.onDisk = true |
@@ -83,21 +83,21 @@ async function getActorImage (req: express.Request, res: express.Response) { | |||
83 | 83 | ||
84 | async function getPreview (req: express.Request, res: express.Response) { | 84 | async function getPreview (req: express.Request, res: express.Response) { |
85 | const result = await VideosPreviewCache.Instance.getFilePath(req.params.filename) | 85 | const result = await VideosPreviewCache.Instance.getFilePath(req.params.filename) |
86 | if (!result) return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 86 | if (!result) return res.status(HttpStatusCode.NOT_FOUND_404).end() |
87 | 87 | ||
88 | return res.sendFile(result.path, { maxAge: STATIC_MAX_AGE.LAZY_SERVER }) | 88 | return res.sendFile(result.path, { maxAge: STATIC_MAX_AGE.LAZY_SERVER }) |
89 | } | 89 | } |
90 | 90 | ||
91 | async function getVideoCaption (req: express.Request, res: express.Response) { | 91 | async function getVideoCaption (req: express.Request, res: express.Response) { |
92 | const result = await VideosCaptionCache.Instance.getFilePath(req.params.filename) | 92 | const result = await VideosCaptionCache.Instance.getFilePath(req.params.filename) |
93 | if (!result) return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 93 | if (!result) return res.status(HttpStatusCode.NOT_FOUND_404).end() |
94 | 94 | ||
95 | return res.sendFile(result.path, { maxAge: STATIC_MAX_AGE.LAZY_SERVER }) | 95 | return res.sendFile(result.path, { maxAge: STATIC_MAX_AGE.LAZY_SERVER }) |
96 | } | 96 | } |
97 | 97 | ||
98 | async function getTorrent (req: express.Request, res: express.Response) { | 98 | async function getTorrent (req: express.Request, res: express.Response) { |
99 | const result = await VideosTorrentCache.Instance.getFilePath(req.params.filename) | 99 | const result = await VideosTorrentCache.Instance.getFilePath(req.params.filename) |
100 | if (!result) return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 100 | if (!result) return res.status(HttpStatusCode.NOT_FOUND_404).end() |
101 | 101 | ||
102 | // Torrents still use the old naming convention (video uuid + .torrent) | 102 | // Torrents still use the old naming convention (video uuid + .torrent) |
103 | return res.sendFile(result.path, { maxAge: STATIC_MAX_AGE.SERVER }) | 103 | return res.sendFile(result.path, { maxAge: STATIC_MAX_AGE.SERVER }) |
diff --git a/server/controllers/live.ts b/server/controllers/live.ts index ff48b0e21..cfb4741b7 100644 --- a/server/controllers/live.ts +++ b/server/controllers/live.ts | |||
@@ -25,7 +25,7 @@ function getSegmentsSha256 (req: express.Request, res: express.Response) { | |||
25 | const result = LiveManager.Instance.getSegmentsSha256(videoUUID) | 25 | const result = LiveManager.Instance.getSegmentsSha256(videoUUID) |
26 | 26 | ||
27 | if (!result) { | 27 | if (!result) { |
28 | return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 28 | return res.status(HttpStatusCode.NOT_FOUND_404).end() |
29 | } | 29 | } |
30 | 30 | ||
31 | return res.json(mapToJSON(result)) | 31 | return res.json(mapToJSON(result)) |
diff --git a/server/controllers/plugins.ts b/server/controllers/plugins.ts index 105f51518..7213e3f15 100644 --- a/server/controllers/plugins.ts +++ b/server/controllers/plugins.ts | |||
@@ -100,7 +100,7 @@ function getPluginTranslations (req: express.Request, res: express.Response) { | |||
100 | return res.json(json) | 100 | return res.json(json) |
101 | } | 101 | } |
102 | 102 | ||
103 | return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 103 | return res.status(HttpStatusCode.NOT_FOUND_404).end() |
104 | } | 104 | } |
105 | 105 | ||
106 | function servePluginStaticDirectory (req: express.Request, res: express.Response) { | 106 | function servePluginStaticDirectory (req: express.Request, res: express.Response) { |
@@ -110,7 +110,7 @@ function servePluginStaticDirectory (req: express.Request, res: express.Response | |||
110 | const [ directory, ...file ] = staticEndpoint.split('/') | 110 | const [ directory, ...file ] = staticEndpoint.split('/') |
111 | 111 | ||
112 | const staticPath = plugin.staticDirs[directory] | 112 | const staticPath = plugin.staticDirs[directory] |
113 | if (!staticPath) return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 113 | if (!staticPath) return res.status(HttpStatusCode.NOT_FOUND_404).end() |
114 | 114 | ||
115 | const filepath = file.join('/') | 115 | const filepath = file.join('/') |
116 | return res.sendFile(join(plugin.path, staticPath, filepath), sendFileOptions) | 116 | return res.sendFile(join(plugin.path, staticPath, filepath), sendFileOptions) |
@@ -120,7 +120,7 @@ function servePluginCustomRoutes (req: express.Request, res: express.Response, n | |||
120 | const plugin: RegisteredPlugin = res.locals.registeredPlugin | 120 | const plugin: RegisteredPlugin = res.locals.registeredPlugin |
121 | const router = PluginManager.Instance.getRouter(plugin.npmName) | 121 | const router = PluginManager.Instance.getRouter(plugin.npmName) |
122 | 122 | ||
123 | if (!router) return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 123 | if (!router) return res.status(HttpStatusCode.NOT_FOUND_404).end() |
124 | 124 | ||
125 | return router(req, res, next) | 125 | return router(req, res, next) |
126 | } | 126 | } |
@@ -130,7 +130,7 @@ function servePluginClientScripts (req: express.Request, res: express.Response) | |||
130 | const staticEndpoint = req.params.staticEndpoint | 130 | const staticEndpoint = req.params.staticEndpoint |
131 | 131 | ||
132 | const file = plugin.clientScripts[staticEndpoint] | 132 | const file = plugin.clientScripts[staticEndpoint] |
133 | if (!file) return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 133 | if (!file) return res.status(HttpStatusCode.NOT_FOUND_404).end() |
134 | 134 | ||
135 | return res.sendFile(join(plugin.path, staticEndpoint), sendFileOptions) | 135 | return res.sendFile(join(plugin.path, staticEndpoint), sendFileOptions) |
136 | } | 136 | } |
@@ -140,7 +140,7 @@ function serveThemeCSSDirectory (req: express.Request, res: express.Response) { | |||
140 | const staticEndpoint = req.params.staticEndpoint | 140 | const staticEndpoint = req.params.staticEndpoint |
141 | 141 | ||
142 | if (plugin.css.includes(staticEndpoint) === false) { | 142 | if (plugin.css.includes(staticEndpoint) === false) { |
143 | return res.sendStatus(HttpStatusCode.NOT_FOUND_404) | 143 | return res.status(HttpStatusCode.NOT_FOUND_404).end() |
144 | } | 144 | } |
145 | 145 | ||
146 | return res.sendFile(join(plugin.path, staticEndpoint), sendFileOptions) | 146 | return res.sendFile(join(plugin.path, staticEndpoint), sendFileOptions) |
diff --git a/server/controllers/static.ts b/server/controllers/static.ts index 3870ebfe9..52e104346 100644 --- a/server/controllers/static.ts +++ b/server/controllers/static.ts | |||
@@ -160,10 +160,9 @@ async function generateNodeinfo (req: express.Request, res: express.Response) { | |||
160 | const { totalVideos } = await VideoModel.getStats() | 160 | const { totalVideos } = await VideoModel.getStats() |
161 | const { totalLocalVideoComments } = await VideoCommentModel.getStats() | 161 | const { totalLocalVideoComments } = await VideoCommentModel.getStats() |
162 | const { totalUsers, totalMonthlyActiveUsers, totalHalfYearActiveUsers } = await UserModel.getStats() | 162 | const { totalUsers, totalMonthlyActiveUsers, totalHalfYearActiveUsers } = await UserModel.getStats() |
163 | let json = {} | ||
164 | 163 | ||
165 | if (req.params.version && (req.params.version === '2.0')) { | 164 | if (req.params.version && (req.params.version === '2.0')) { |
166 | json = { | 165 | const json = { |
167 | version: '2.0', | 166 | version: '2.0', |
168 | software: { | 167 | software: { |
169 | name: 'peertube', | 168 | name: 'peertube', |
@@ -291,12 +290,14 @@ async function generateNodeinfo (req: express.Request, res: express.Response) { | |||
291 | } | 290 | } |
292 | } as HttpNodeinfoDiasporaSoftwareNsSchema20 | 291 | } as HttpNodeinfoDiasporaSoftwareNsSchema20 |
293 | res.contentType('application/json; profile="http://nodeinfo.diaspora.software/ns/schema/2.0#"') | 292 | res.contentType('application/json; profile="http://nodeinfo.diaspora.software/ns/schema/2.0#"') |
294 | } else { | 293 | .send(json) |
295 | json = { error: 'Nodeinfo schema version not handled' } | 294 | .end() |
296 | res.status(HttpStatusCode.NOT_FOUND_404) | ||
297 | } | 295 | } |
298 | 296 | ||
299 | return res.send(json).end() | 297 | return res.fail({ |
298 | status: HttpStatusCode.NOT_FOUND_404, | ||
299 | message: 'Nodeinfo schema version not handled' | ||
300 | }) | ||
300 | } | 301 | } |
301 | 302 | ||
302 | function getCup (req: express.Request, res: express.Response, next: express.NextFunction) { | 303 | function getCup (req: express.Request, res: express.Response, next: express.NextFunction) { |