]>
Commit | Line | Data |
---|---|---|
9593a78a C |
1 | import express from 'express' |
2 | import { query } from 'express-validator' | |
3 | import { logger } from '@server/helpers/logger' | |
74dc3bca | 4 | import { SORTABLE_COLUMNS } from '../../initializers/constants' |
9593a78a | 5 | import { areValidationErrors } from './shared' |
a877d5ac | 6 | |
9593a78a C |
7 | function checkSortFactory (columns: string[], tags: string[] = []) { |
8 | return checkSort(createSortableColumns(columns), tags) | |
9 | } | |
10 | ||
11 | function checkSort (sortableColumns: string[], tags: string[] = []) { | |
12 | return [ | |
396f6f01 C |
13 | query('sort') |
14 | .optional() | |
15 | .isIn(sortableColumns), | |
9593a78a C |
16 | |
17 | (req: express.Request, res: express.Response, next: express.NextFunction) => { | |
18 | logger.debug('Checking sort parameters', { parameters: req.query, tags }) | |
19 | ||
20 | if (areValidationErrors(req, res)) return | |
21 | ||
22 | return next() | |
23 | } | |
24 | ] | |
25 | } | |
26 | ||
27 | function createSortableColumns (sortableColumns: string[]) { | |
28 | const sortableColumnDesc = sortableColumns.map(sortableColumn => '-' + sortableColumn) | |
29 | ||
30 | return sortableColumns.concat(sortableColumnDesc) | |
31 | } | |
5c39adb7 | 32 | |
87a0cac6 | 33 | const adminUsersSortValidator = checkSortFactory(SORTABLE_COLUMNS.ADMIN_USERS) |
9593a78a C |
34 | const accountsSortValidator = checkSortFactory(SORTABLE_COLUMNS.ACCOUNTS) |
35 | const jobsSortValidator = checkSortFactory(SORTABLE_COLUMNS.JOBS, [ 'jobs' ]) | |
36 | const abusesSortValidator = checkSortFactory(SORTABLE_COLUMNS.ABUSES) | |
37 | const videosSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEOS) | |
38 | const videoImportsSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_IMPORTS) | |
39 | const videosSearchSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEOS_SEARCH) | |
40 | const videoChannelsSearchSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_CHANNELS_SEARCH) | |
41 | const videoPlaylistsSearchSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_PLAYLISTS_SEARCH) | |
42 | const videoCommentsValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_COMMENTS) | |
43 | const videoCommentThreadsSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_COMMENT_THREADS) | |
44 | const videoRatesSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_RATES) | |
45 | const blacklistSortValidator = checkSortFactory(SORTABLE_COLUMNS.BLACKLISTS) | |
46 | const videoChannelsSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_CHANNELS) | |
47 | const instanceFollowersSortValidator = checkSortFactory(SORTABLE_COLUMNS.INSTANCE_FOLLOWERS) | |
48 | const instanceFollowingSortValidator = checkSortFactory(SORTABLE_COLUMNS.INSTANCE_FOLLOWING) | |
49 | const userSubscriptionsSortValidator = checkSortFactory(SORTABLE_COLUMNS.USER_SUBSCRIPTIONS) | |
50 | const accountsBlocklistSortValidator = checkSortFactory(SORTABLE_COLUMNS.ACCOUNTS_BLOCKLIST) | |
51 | const serversBlocklistSortValidator = checkSortFactory(SORTABLE_COLUMNS.SERVERS_BLOCKLIST) | |
52 | const userNotificationsSortValidator = checkSortFactory(SORTABLE_COLUMNS.USER_NOTIFICATIONS) | |
53 | const videoPlaylistsSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_PLAYLISTS) | |
54 | const pluginsSortValidator = checkSortFactory(SORTABLE_COLUMNS.PLUGINS) | |
55 | const availablePluginsSortValidator = checkSortFactory(SORTABLE_COLUMNS.AVAILABLE_PLUGINS) | |
56 | const videoRedundanciesSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_REDUNDANCIES) | |
2a491182 | 57 | const videoChannelSyncsSortValidator = checkSortFactory(SORTABLE_COLUMNS.VIDEO_CHANNEL_SYNCS) |
55fa55a9 | 58 | |
4beda9e1 C |
59 | const accountsFollowersSortValidator = checkSortFactory(SORTABLE_COLUMNS.ACCOUNT_FOLLOWERS) |
60 | const videoChannelsFollowersSortValidator = checkSortFactory(SORTABLE_COLUMNS.CHANNEL_FOLLOWERS) | |
61 | ||
55fa55a9 C |
62 | // --------------------------------------------------------------------------- |
63 | ||
65fcc311 | 64 | export { |
87a0cac6 | 65 | adminUsersSortValidator, |
d95d1559 | 66 | abusesSortValidator, |
72c7248b | 67 | videoChannelsSortValidator, |
ed31c059 | 68 | videoImportsSortValidator, |
0f8d00e3 | 69 | videoCommentsValidator, |
57c36b27 | 70 | videosSearchSortValidator, |
792dbaf0 | 71 | videosSortValidator, |
7a7724e6 | 72 | blacklistSortValidator, |
265ba139 | 73 | accountsSortValidator, |
9593a78a C |
74 | instanceFollowersSortValidator, |
75 | instanceFollowingSortValidator, | |
bf1f6508 | 76 | jobsSortValidator, |
06a05d5f | 77 | videoCommentThreadsSortValidator, |
c100a614 | 78 | videoRatesSortValidator, |
f37dc0dd | 79 | userSubscriptionsSortValidator, |
6702a1b2 | 80 | availablePluginsSortValidator, |
7ad9b984 C |
81 | videoChannelsSearchSortValidator, |
82 | accountsBlocklistSortValidator, | |
cef534ed | 83 | serversBlocklistSortValidator, |
418d092a | 84 | userNotificationsSortValidator, |
ad91e700 | 85 | videoPlaylistsSortValidator, |
b764380a | 86 | videoRedundanciesSortValidator, |
37a44fc9 | 87 | videoPlaylistsSearchSortValidator, |
4beda9e1 C |
88 | accountsFollowersSortValidator, |
89 | videoChannelsFollowersSortValidator, | |
2a491182 | 90 | videoChannelSyncsSortValidator, |
ad91e700 | 91 | pluginsSortValidator |
65fcc311 | 92 | } |