From 556ddc319242aafef51bae9301423ecf8701a3af Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 25 Aug 2017 18:36:49 +0200 Subject: Upgrade common server dependencies --- server/controllers/api/remote/videos.ts | 2 +- server/controllers/api/videos/index.ts | 53 ++++++++++----------- server/helpers/core-utils.ts | 2 +- server/helpers/custom-validators/misc.ts | 10 ++-- server/helpers/custom-validators/pods.ts | 23 ++++++--- server/helpers/custom-validators/remote/videos.ts | 12 ++--- server/helpers/custom-validators/users.ts | 14 +++--- server/helpers/custom-validators/videos.ts | 58 +++++++++++------------ server/middlewares/validators/pods.ts | 2 +- server/middlewares/validators/videos.ts | 2 +- server/models/pod/pod-interface.ts | 2 +- server/models/pod/pod.ts | 6 +-- server/models/user/user-video-rate-interface.ts | 2 + server/models/user/user-video-rate.ts | 2 +- server/models/user/user.ts | 5 +- server/models/video/video-interface.ts | 2 +- server/models/video/video.ts | 4 +- server/tests/api/config.js | 2 +- 18 files changed, 102 insertions(+), 101 deletions(-) (limited to 'server') diff --git a/server/controllers/api/remote/videos.ts b/server/controllers/api/remote/videos.ts index e7edff606..0a90549af 100644 --- a/server/controllers/api/remote/videos.ts +++ b/server/controllers/api/remote/videos.ts @@ -17,7 +17,7 @@ import { } from '../../../middlewares' import { logger, retryTransactionWrapper } from '../../../helpers' import { quickAndDirtyUpdatesVideoToFriends } from '../../../lib' -import { PodInstance, VideoInstance } from '../../../models' +import { PodInstance } from '../../../models' import { RemoteVideoRequest, RemoteVideoCreateData, diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts index f639df098..3ec9d97bb 100644 --- a/server/controllers/api/videos/index.ts +++ b/server/controllers/api/videos/index.ts @@ -61,8 +61,7 @@ const storage = multer.diskStorage({ else if (file.mimetype === 'video/ogg') extension = 'ogv' generateRandomString(16) .then(randomString => { - const filename = randomString - cb(null, filename + '.' + extension) + cb(null, randomString + '.' + extension) }) .catch(err => { logger.error('Cannot generate random string for file name.', err) @@ -128,15 +127,15 @@ export { // --------------------------------------------------------------------------- -function listVideoCategories (req: express.Request, res: express.Response, next: express.NextFunction) { +function listVideoCategories (req: express.Request, res: express.Response) { res.json(VIDEO_CATEGORIES) } -function listVideoLicences (req: express.Request, res: express.Response, next: express.NextFunction) { +function listVideoLicences (req: express.Request, res: express.Response) { res.json(VIDEO_LICENCES) } -function listVideoLanguages (req: express.Request, res: express.Response, next: express.NextFunction) { +function listVideoLanguages (req: express.Request, res: express.Response) { res.json(VIDEO_LANGUAGES) } @@ -144,7 +143,7 @@ function listVideoLanguages (req: express.Request, res: express.Response, next: // We need this because we run the transaction in SERIALIZABLE isolation that can fail function addVideoRetryWrapper (req: express.Request, res: express.Response, next: express.NextFunction) { const options = { - arguments: [ req, res, req.files.videofile[0] ], + arguments: [ req, res, req.files['videofile'][0] ], errorMessage: 'Cannot insert the video with many retries.' } @@ -157,7 +156,7 @@ function addVideoRetryWrapper (req: express.Request, res: express.Response, next } function addVideo (req: express.Request, res: express.Response, videoPhysicalFile: Express.Multer.File) { - const videoInfos: VideoCreate = req.body + const videoInfo: VideoCreate = req.body return db.sequelize.transaction(t => { const user = res.locals.oauth.token.User @@ -169,21 +168,21 @@ function addVideo (req: express.Request, res: express.Response, videoPhysicalFil return db.Author.findOrCreateAuthor(name, podId, userId, t) .then(author => { - const tags = videoInfos.tags + const tags = videoInfo.tags if (!tags) return { author, tagInstances: undefined } return db.Tag.findOrCreateTags(tags, t).then(tagInstances => ({ author, tagInstances })) }) .then(({ author, tagInstances }) => { const videoData = { - name: videoInfos.name, + name: videoInfo.name, remote: false, extname: extname(videoPhysicalFile.filename), - category: videoInfos.category, - licence: videoInfos.licence, - language: videoInfos.language, - nsfw: videoInfos.nsfw, - description: videoInfos.description, + category: videoInfo.category, + licence: videoInfo.licence, + language: videoInfo.language, + nsfw: videoInfo.nsfw, + description: videoInfo.description, duration: videoPhysicalFile['duration'], // duration was added by a previous middleware authorId: author.id } @@ -240,7 +239,7 @@ function addVideo (req: express.Request, res: express.Response, videoPhysicalFil return video.save(options) .then(videoCreated => { - // Do not forget to add Author informations to the created video + // Do not forget to add Author information to the created video videoCreated.Author = author return { tagInstances, video: videoCreated, videoFile } @@ -265,7 +264,7 @@ function addVideo (req: express.Request, res: express.Response, videoPhysicalFil }) }) .then(video => { - // Let transcoding job send the video to friends because the videofile extension might change + // Let transcoding job send the video to friends because the video file extension might change if (CONFIG.TRANSCODING.ENABLED === true) return undefined return video.toAddRemoteJSON() @@ -275,7 +274,7 @@ function addVideo (req: express.Request, res: express.Response, videoPhysicalFil }) }) }) - .then(() => logger.info('Video with name %s created.', videoInfos.name)) + .then(() => logger.info('Video with name %s created.', videoInfo.name)) .catch((err: Error) => { logger.debug('Cannot insert the video.', err) throw err @@ -299,14 +298,14 @@ function updateVideoRetryWrapper (req: express.Request, res: express.Response, n function updateVideo (req: express.Request, res: express.Response) { const videoInstance = res.locals.video const videoFieldsSave = videoInstance.toJSON() - const videoInfosToUpdate: VideoUpdate = req.body + const videoInfoToUpdate: VideoUpdate = req.body return db.sequelize.transaction(t => { let tagsPromise: Promise - if (!videoInfosToUpdate.tags) { + if (!videoInfoToUpdate.tags) { tagsPromise = Promise.resolve(null) } else { - tagsPromise = db.Tag.findOrCreateTags(videoInfosToUpdate.tags, t) + tagsPromise = db.Tag.findOrCreateTags(videoInfoToUpdate.tags, t) } return tagsPromise @@ -315,12 +314,12 @@ function updateVideo (req: express.Request, res: express.Response) { transaction: t } - if (videoInfosToUpdate.name !== undefined) videoInstance.set('name', videoInfosToUpdate.name) - if (videoInfosToUpdate.category !== undefined) videoInstance.set('category', videoInfosToUpdate.category) - if (videoInfosToUpdate.licence !== undefined) videoInstance.set('licence', videoInfosToUpdate.licence) - if (videoInfosToUpdate.language !== undefined) videoInstance.set('language', videoInfosToUpdate.language) - if (videoInfosToUpdate.nsfw !== undefined) videoInstance.set('nsfw', videoInfosToUpdate.nsfw) - if (videoInfosToUpdate.description !== undefined) videoInstance.set('description', videoInfosToUpdate.description) + if (videoInfoToUpdate.name !== undefined) videoInstance.set('name', videoInfoToUpdate.name) + if (videoInfoToUpdate.category !== undefined) videoInstance.set('category', videoInfoToUpdate.category) + if (videoInfoToUpdate.licence !== undefined) videoInstance.set('licence', videoInfoToUpdate.licence) + if (videoInfoToUpdate.language !== undefined) videoInstance.set('language', videoInfoToUpdate.language) + if (videoInfoToUpdate.nsfw !== undefined) videoInstance.set('nsfw', videoInfoToUpdate.nsfw) + if (videoInfoToUpdate.description !== undefined) videoInstance.set('description', videoInfoToUpdate.description) return videoInstance.save(options).then(() => tagInstances) }) @@ -360,7 +359,7 @@ function updateVideo (req: express.Request, res: express.Response) { }) } -function getVideo (req: express.Request, res: express.Response, next: express.NextFunction) { +function getVideo (req: express.Request, res: express.Response) { const videoInstance = res.locals.video if (videoInstance.isOwned()) { diff --git a/server/helpers/core-utils.ts b/server/helpers/core-utils.ts index d28c97f09..f8dd45533 100644 --- a/server/helpers/core-utils.ts +++ b/server/helpers/core-utils.ts @@ -74,7 +74,7 @@ const readFilePromise = promisify2(readFile) const readFileBufferPromise = promisify1(readFile) const unlinkPromise = promisify1WithVoid(unlink) const renamePromise = promisify2WithVoid(rename) -const writeFilePromise = promisify2(writeFile) +const writeFilePromise = promisify2WithVoid(writeFile) const readdirPromise = promisify1(readdir) const mkdirpPromise = promisify1(mkdirp) const pseudoRandomBytesPromise = promisify1(pseudoRandomBytes) diff --git a/server/helpers/custom-validators/misc.ts b/server/helpers/custom-validators/misc.ts index b1291ba7a..f6bb02c8e 100644 --- a/server/helpers/custom-validators/misc.ts +++ b/server/helpers/custom-validators/misc.ts @@ -13,11 +13,9 @@ export { isArray } -declare global { - namespace ExpressValidator { - export interface Validator { - exists, - isArray - } +declare module 'express-validator' { + export interface Validator { + exists, + isArray } } diff --git a/server/helpers/custom-validators/pods.ts b/server/helpers/custom-validators/pods.ts index 0519def52..f2ca520c0 100644 --- a/server/helpers/custom-validators/pods.ts +++ b/server/helpers/custom-validators/pods.ts @@ -1,9 +1,20 @@ import * as validator from 'validator' import { isArray, exists } from './misc' +import { isTestInstance } from '../core-utils' function isHostValid (host: string) { - return exists(host) && validator.isURL(host) && host.split('://').length === 1 + const isURLOptions = { + require_host: true, + require_tld: true + } + + // We validate 'localhost', so we don't have the top level domain + if (isTestInstance()) { + isURLOptions.require_tld = false + } + + return exists(host) && validator.isURL(host, isURLOptions) && host.split('://').length === 1 } function isEachUniqueHostValid (hosts: string[]) { @@ -21,11 +32,9 @@ export { isHostValid } -declare global { - namespace ExpressValidator { - export interface Validator { - isEachUniqueHostValid - isHostValid - } +declare module 'express-validator' { + export interface Validator { + isEachUniqueHostValid + isHostValid } } diff --git a/server/helpers/custom-validators/remote/videos.ts b/server/helpers/custom-validators/remote/videos.ts index 091cd2186..49f76e909 100644 --- a/server/helpers/custom-validators/remote/videos.ts +++ b/server/helpers/custom-validators/remote/videos.ts @@ -101,13 +101,11 @@ export { isEachRemoteRequestVideosEventsValid } -declare global { - namespace ExpressValidator { - export interface Validator { - isEachRemoteRequestVideosValid, - isEachRemoteRequestVideosQaduValid, - isEachRemoteRequestVideosEventsValid - } +declare module 'express-validator' { + export interface Validator { + isEachRemoteRequestVideosValid, + isEachRemoteRequestVideosQaduValid, + isEachRemoteRequestVideosEventsValid } } diff --git a/server/helpers/custom-validators/users.ts b/server/helpers/custom-validators/users.ts index 750563ada..2b37bdde8 100644 --- a/server/helpers/custom-validators/users.ts +++ b/server/helpers/custom-validators/users.ts @@ -34,13 +34,11 @@ export { isUserDisplayNSFWValid } -declare global { - namespace ExpressValidator { - export interface Validator { - isUserPasswordValid, - isUserRoleValid, - isUserUsernameValid, - isUserDisplayNSFWValid - } +declare module 'express-validator' { + export interface Validator { + isUserPasswordValid, + isUserRoleValid, + isUserUsernameValid, + isUserDisplayNSFWValid } } diff --git a/server/helpers/custom-validators/videos.ts b/server/helpers/custom-validators/videos.ts index 139fa760f..8b3a26644 100644 --- a/server/helpers/custom-validators/videos.ts +++ b/server/helpers/custom-validators/videos.ts @@ -168,35 +168,33 @@ export { isVideoFileResolutionValid } -declare global { - namespace ExpressValidator { - export interface Validator { - isVideoIdOrUUIDValid, - isVideoAuthorValid, - isVideoDateValid, - isVideoCategoryValid, - isVideoLicenceValid, - isVideoLanguageValid, - isVideoNSFWValid, - isVideoDescriptionValid, - isVideoDurationValid, - isVideoInfoHashValid, - isVideoNameValid, - isVideoTagsValid, - isVideoThumbnailValid, - isVideoThumbnailDataValid, - isVideoExtnameValid, - isVideoUUIDValid, - isVideoAbuseReasonValid, - isVideoAbuseReporterUsernameValid, - isVideoFile, - isVideoViewsValid, - isVideoLikesValid, - isVideoRatingTypeValid, - isVideoDislikesValid, - isVideoEventCountValid, - isVideoFileSizeValid, - isVideoFileResolutionValid - } +declare module 'express-validator' { + export interface Validator { + isVideoIdOrUUIDValid, + isVideoAuthorValid, + isVideoDateValid, + isVideoCategoryValid, + isVideoLicenceValid, + isVideoLanguageValid, + isVideoNSFWValid, + isVideoDescriptionValid, + isVideoDurationValid, + isVideoInfoHashValid, + isVideoNameValid, + isVideoTagsValid, + isVideoThumbnailValid, + isVideoThumbnailDataValid, + isVideoExtnameValid, + isVideoUUIDValid, + isVideoAbuseReasonValid, + isVideoAbuseReporterUsernameValid, + isVideoFile, + isVideoViewsValid, + isVideoLikesValid, + isVideoRatingTypeValid, + isVideoDislikesValid, + isVideoEventCountValid, + isVideoFileSizeValid, + isVideoFileResolutionValid } } diff --git a/server/middlewares/validators/pods.ts b/server/middlewares/validators/pods.ts index d0981cd57..4d0e054b0 100644 --- a/server/middlewares/validators/pods.ts +++ b/server/middlewares/validators/pods.ts @@ -11,7 +11,7 @@ import { isTestInstance } from '../../helpers' function makeFriendsValidator (req: express.Request, res: express.Response, next: express.NextFunction) { // Force https if the administrator wants to make friends if (isTestInstance() === false && CONFIG.WEBSERVER.SCHEME === 'http') { - return res.status(400).send('Cannot make friends with a non HTTPS webserver.') + return res.status(400).send('Cannot make friends with a non HTTPS web server.') } req.checkBody('hosts', 'Should have an array of unique hosts').isEachUniqueHostValid() diff --git a/server/middlewares/validators/videos.ts b/server/middlewares/validators/videos.ts index bd223a1cb..29c1ee0ef 100644 --- a/server/middlewares/validators/videos.ts +++ b/server/middlewares/validators/videos.ts @@ -24,7 +24,7 @@ function videosAddValidator (req: express.Request, res: express.Response, next: logger.debug('Checking videosAdd parameters', { parameters: req.body, files: req.files }) checkErrors(req, res, () => { - const videoFile = req.files.videofile[0] + const videoFile = req.files['videofile'][0] db.Video.getDurationFromFile(videoFile.path) .then(duration => { diff --git a/server/models/pod/pod-interface.ts b/server/models/pod/pod-interface.ts index 8b0b72167..fc763acac 100644 --- a/server/models/pod/pod-interface.ts +++ b/server/models/pod/pod-interface.ts @@ -42,6 +42,7 @@ export interface PodClass { } export interface PodAttributes { + id?: number host?: string publicKey?: string score?: number | Sequelize.literal // Sequelize literal for 'score +' + value @@ -49,7 +50,6 @@ export interface PodAttributes { } export interface PodInstance extends PodClass, PodAttributes, Sequelize.Instance { - id: number createdAt: Date updatedAt: Date diff --git a/server/models/pod/pod.ts b/server/models/pod/pod.ts index 56918e358..df6412721 100644 --- a/server/models/pod/pod.ts +++ b/server/models/pod/pod.ts @@ -143,7 +143,7 @@ list = function () { } listAllIds = function (transaction: Sequelize.Transaction) { - const query: Sequelize.FindOptions = { + const query = { attributes: [ 'id' ], transaction } @@ -170,9 +170,7 @@ listRandomPodIdsWithRequest = function (limit: number, tableWithPods: string, ta limit: limit, where: { id: { - $in: [ - Sequelize.literal(`SELECT DISTINCT "${tableWithPods}"."podId" FROM "${tableWithPods}" ${tableWithPodsJoins}`) - ] + $in: Sequelize.literal(`(SELECT DISTINCT "${tableWithPods}"."podId" FROM "${tableWithPods}" ${tableWithPodsJoins})`) } } } diff --git a/server/models/user/user-video-rate-interface.ts b/server/models/user/user-video-rate-interface.ts index 4e6efc01a..ea0fdc4d9 100644 --- a/server/models/user/user-video-rate-interface.ts +++ b/server/models/user/user-video-rate-interface.ts @@ -13,6 +13,8 @@ export interface UserVideoRateClass { export interface UserVideoRateAttributes { type: VideoRateType + userId: number + videoId: number } export interface UserVideoRateInstance extends UserVideoRateClass, UserVideoRateAttributes, Sequelize.Instance { diff --git a/server/models/user/user-video-rate.ts b/server/models/user/user-video-rate.ts index c14598650..7d6dd7281 100644 --- a/server/models/user/user-video-rate.ts +++ b/server/models/user/user-video-rate.ts @@ -66,7 +66,7 @@ function associate (models) { } load = function (userId: number, videoId: number, transaction: Sequelize.Transaction) { - const options: Sequelize.FindOptions = { + const options: Sequelize.FindOptions = { where: { userId, videoId diff --git a/server/models/user/user.ts b/server/models/user/user.ts index e1b933988..d481fa13c 100644 --- a/server/models/user/user.ts +++ b/server/models/user/user.ts @@ -198,7 +198,7 @@ loadById = function (id: number) { loadByUsername = function (username: string) { const query = { where: { - username: username + username } } @@ -212,5 +212,6 @@ loadByUsernameOrEmail = function (username: string, email: string) { } } - return User.findOne(query) + // FIXME: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18387 + return (User as any).findOne(query) } diff --git a/server/models/video/video-interface.ts b/server/models/video/video-interface.ts index cc214fd60..fb31c6a8f 100644 --- a/server/models/video/video-interface.ts +++ b/server/models/video/video-interface.ts @@ -121,6 +121,7 @@ export interface VideoClass { } export interface VideoAttributes { + id?: number uuid?: string name: string category: number @@ -140,7 +141,6 @@ export interface VideoAttributes { } export interface VideoInstance extends VideoClass, VideoAttributes, Sequelize.Instance { - id: number createdAt: Date updatedAt: Date diff --git a/server/models/video/video.ts b/server/models/video/video.ts index b3ca1e668..7dfea8ac9 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts @@ -643,7 +643,7 @@ list = function () { } listForApi = function (start: number, count: number, sort: string) { - // Exclude Blakclisted videos from the list + // Exclude blacklisted videos from the list const query = { distinct: true, offset: start, @@ -807,7 +807,7 @@ searchAndPopulateAuthorAndPodAndTags = function (value: string, field: string, s model: Video['sequelize'].models.VideoFile } - const query: Sequelize.FindOptions = { + const query: Sequelize.FindOptions = { distinct: true, where: createBaseVideosWhere(), offset: start, diff --git a/server/tests/api/config.js b/server/tests/api/config.js index 052b3f036..dc3cce052 100644 --- a/server/tests/api/config.js +++ b/server/tests/api/config.js @@ -35,7 +35,7 @@ describe('Test config', function () { const data = res.body - expect(data.signup.allowed).to.be.truthy + expect(data.signup.allowed).to.be.true done() }) -- cgit v1.2.3