From 571389d43b8fc8aaf27e77c06f19b320b08dbbc9 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 10 Nov 2017 17:27:49 +0100 Subject: Make it compile at least --- server/controllers/activitypub/index.ts | 2 + server/controllers/api/index.ts | 4 -- server/controllers/api/pods.ts | 66 +-------------------- server/controllers/api/request-schedulers.ts | 53 ----------------- server/controllers/api/users.ts | 42 ++++++------- server/controllers/api/videos/abuse.ts | 4 +- server/controllers/api/videos/channel.ts | 37 ++++-------- server/controllers/api/videos/index.ts | 88 +++++++++------------------- server/controllers/api/videos/rate.ts | 80 +++++-------------------- 9 files changed, 80 insertions(+), 296 deletions(-) delete mode 100644 server/controllers/api/request-schedulers.ts (limited to 'server/controllers') diff --git a/server/controllers/activitypub/index.ts b/server/controllers/activitypub/index.ts index 7a4602b37..2b0e2a489 100644 --- a/server/controllers/activitypub/index.ts +++ b/server/controllers/activitypub/index.ts @@ -2,10 +2,12 @@ import * as express from 'express' import { badRequest } from '../../helpers' import { inboxRouter } from './inbox' +import { activityPubClientRouter } from './client' const remoteRouter = express.Router() remoteRouter.use('/inbox', inboxRouter) +remoteRouter.use('/', activityPubClientRouter) remoteRouter.use('/*', badRequest) // --------------------------------------------------------------------------- diff --git a/server/controllers/api/index.ts b/server/controllers/api/index.ts index a9205b33c..2e949d531 100644 --- a/server/controllers/api/index.ts +++ b/server/controllers/api/index.ts @@ -5,8 +5,6 @@ import { badRequest } from '../../helpers' import { oauthClientsRouter } from './oauth-clients' import { configRouter } from './config' import { podsRouter } from './pods' -import { remoteRouter } from './remote' -import { requestSchedulerRouter } from './request-schedulers' import { usersRouter } from './users' import { videosRouter } from './videos' @@ -15,8 +13,6 @@ const apiRouter = express.Router() apiRouter.use('/oauth-clients', oauthClientsRouter) apiRouter.use('/config', configRouter) apiRouter.use('/pods', podsRouter) -apiRouter.use('/remote', remoteRouter) -apiRouter.use('/request-schedulers', requestSchedulerRouter) apiRouter.use('/users', usersRouter) apiRouter.use('/videos', videosRouter) apiRouter.use('/ping', pong) diff --git a/server/controllers/api/pods.ts b/server/controllers/api/pods.ts index b44cd6b83..43df3f66f 100644 --- a/server/controllers/api/pods.ts +++ b/server/controllers/api/pods.ts @@ -1,26 +1,7 @@ import * as express from 'express' - +import { getFormattedObjects } from '../../helpers' import { database as db } from '../../initializers/database' -import { logger, getFormattedObjects } from '../../helpers' -import { - makeFriends, - quitFriends, - removeFriend -} from '../../lib' -import { - authenticate, - ensureUserHasRight, - makeFriendsValidator, - setBodyHostsPort, - podRemoveValidator, - paginationValidator, - setPagination, - setPodsSort, - podsSortValidator, - asyncMiddleware -} from '../../middlewares' -import { PodInstance } from '../../models' -import { UserRight } from '../../../shared' +import { asyncMiddleware, paginationValidator, podsSortValidator, setPagination, setPodsSort } from '../../middlewares' const podsRouter = express.Router() @@ -31,24 +12,6 @@ podsRouter.get('/', setPagination, asyncMiddleware(listPods) ) -podsRouter.post('/make-friends', - authenticate, - ensureUserHasRight(UserRight.MANAGE_PODS), - makeFriendsValidator, - setBodyHostsPort, - asyncMiddleware(makeFriendsController) -) -podsRouter.get('/quit-friends', - authenticate, - ensureUserHasRight(UserRight.MANAGE_PODS), - asyncMiddleware(quitFriendsController) -) -podsRouter.delete('/:id', - authenticate, - ensureUserHasRight(UserRight.MANAGE_PODS), - podRemoveValidator, - asyncMiddleware(removeFriendController) -) // --------------------------------------------------------------------------- @@ -63,28 +26,3 @@ async function listPods (req: express.Request, res: express.Response, next: expr return res.json(getFormattedObjects(resultList.data, resultList.total)) } - -async function makeFriendsController (req: express.Request, res: express.Response, next: express.NextFunction) { - const hosts = req.body.hosts as string[] - - // Don't wait the process that could be long - makeFriends(hosts) - .then(() => logger.info('Made friends!')) - .catch(err => logger.error('Could not make friends.', err)) - - return res.type('json').status(204).end() -} - -async function quitFriendsController (req: express.Request, res: express.Response, next: express.NextFunction) { - await quitFriends() - - return res.type('json').status(204).end() -} - -async function removeFriendController (req: express.Request, res: express.Response, next: express.NextFunction) { - const pod = res.locals.pod as PodInstance - - await removeFriend(pod) - - return res.type('json').status(204).end() -} diff --git a/server/controllers/api/request-schedulers.ts b/server/controllers/api/request-schedulers.ts deleted file mode 100644 index 4c8fbe18b..000000000 --- a/server/controllers/api/request-schedulers.ts +++ /dev/null @@ -1,53 +0,0 @@ -import * as express from 'express' -import * as Bluebird from 'bluebird' - -import { - AbstractRequestScheduler, - getRequestScheduler, - getRequestVideoQaduScheduler, - getRequestVideoEventScheduler -} from '../../lib' -import { authenticate, ensureUserHasRight, asyncMiddleware } from '../../middlewares' -import { RequestSchedulerStatsAttributes, UserRight } from '../../../shared' - -const requestSchedulerRouter = express.Router() - -requestSchedulerRouter.get('/stats', - authenticate, - ensureUserHasRight(UserRight.MANAGE_REQUEST_SCHEDULERS), - asyncMiddleware(getRequestSchedulersStats) -) - -// --------------------------------------------------------------------------- - -export { - requestSchedulerRouter -} - -// --------------------------------------------------------------------------- - -async function getRequestSchedulersStats (req: express.Request, res: express.Response, next: express.NextFunction) { - const result = await Bluebird.props({ - requestScheduler: buildRequestSchedulerStats(getRequestScheduler()), - requestVideoQaduScheduler: buildRequestSchedulerStats(getRequestVideoQaduScheduler()), - requestVideoEventScheduler: buildRequestSchedulerStats(getRequestVideoEventScheduler()) - }) - - return res.json(result) -} - -// --------------------------------------------------------------------------- - -async function buildRequestSchedulerStats (requestScheduler: AbstractRequestScheduler) { - const count = await requestScheduler.remainingRequestsCount() - - const result: RequestSchedulerStatsAttributes = { - totalRequests: count, - requestsLimitPods: requestScheduler.limitPods, - requestsLimitPerPod: requestScheduler.limitPerPod, - remainingMilliSeconds: requestScheduler.remainingMilliSeconds(), - milliSecondsInterval: requestScheduler.requestInterval - } - - return result -} diff --git a/server/controllers/api/users.ts b/server/controllers/api/users.ts index 9ec6feb57..41ffb64cb 100644 --- a/server/controllers/api/users.ts +++ b/server/controllers/api/users.ts @@ -1,37 +1,29 @@ import * as express from 'express' - -import { database as db, CONFIG } from '../../initializers' -import { logger, getFormattedObjects, retryTransactionWrapper } from '../../helpers' +import { UserCreate, UserRight, UserRole, UserUpdate, UserUpdateMe, UserVideoRate as FormattedUserVideoRate } from '../../../shared' +import { getFormattedObjects, logger, retryTransactionWrapper } from '../../helpers' +import { CONFIG, database as db } from '../../initializers' +import { createUserAccountAndChannel } from '../../lib' import { + asyncMiddleware, authenticate, ensureUserHasRight, ensureUserRegistrationAllowed, - usersAddValidator, - usersRegisterValidator, - usersUpdateValidator, - usersUpdateMeValidator, - usersRemoveValidator, - usersVideoRatingValidator, - usersGetValidator, paginationValidator, setPagination, - usersSortValidator, setUsersSort, token, - asyncMiddleware + usersAddValidator, + usersGetValidator, + usersRegisterValidator, + usersRemoveValidator, + usersSortValidator, + usersUpdateMeValidator, + usersUpdateValidator, + usersVideoRatingValidator } from '../../middlewares' -import { - UserVideoRate as FormattedUserVideoRate, - UserCreate, - UserUpdate, - UserUpdateMe, - UserRole, - UserRight -} from '../../../shared' -import { createUserAccountAndChannel } from '../../lib' -import { UserInstance } from '../../models' -import { videosSortValidator } from '../../middlewares/validators/sort' import { setVideosSort } from '../../middlewares/sort' +import { videosSortValidator } from '../../middlewares/validators/sort' +import { UserInstance } from '../../models' const usersRouter = express.Router() @@ -176,9 +168,9 @@ function getUser (req: express.Request, res: express.Response, next: express.Nex async function getUserVideoRating (req: express.Request, res: express.Response, next: express.NextFunction) { const videoId = +req.params.videoId - const userId = +res.locals.oauth.token.User.id + const accountId = +res.locals.oauth.token.User.Account.id - const ratingObj = await db.UserVideoRate.load(userId, videoId, null) + const ratingObj = await db.AccountVideoRate.load(accountId, videoId, null) const rating = ratingObj ? ratingObj.type : 'none' const json: FormattedUserVideoRate = { diff --git a/server/controllers/api/videos/abuse.ts b/server/controllers/api/videos/abuse.ts index 04349042b..7a3471116 100644 --- a/server/controllers/api/videos/abuse.ts +++ b/server/controllers/api/videos/abuse.ts @@ -1,7 +1,6 @@ import * as express from 'express' import { database as db } from '../../../initializers/database' -import * as friends from '../../../lib/friends' import { logger, getFormattedObjects, @@ -84,7 +83,8 @@ async function reportVideoAbuse (req: express.Request, res: express.Response) { videoUUID: videoInstance.uuid } - await friends.reportAbuseVideoToFriend(reportData, videoInstance, t) + // await friends.reportAbuseVideoToFriend(reportData, videoInstance, t) + // TODO: send abuse to origin pod } }) diff --git a/server/controllers/api/videos/channel.ts b/server/controllers/api/videos/channel.ts index 4d1f03903..656bc3129 100644 --- a/server/controllers/api/videos/channel.ts +++ b/server/controllers/api/videos/channel.ts @@ -1,31 +1,23 @@ import * as express from 'express' - +import { VideoChannelCreate, VideoChannelUpdate } from '../../../../shared' +import { getFormattedObjects, logger, resetSequelizeInstance, retryTransactionWrapper } from '../../../helpers' import { database as db } from '../../../initializers' +import { createVideoChannel } from '../../../lib' import { - logger, - getFormattedObjects, - retryTransactionWrapper, - resetSequelizeInstance -} from '../../../helpers' -import { + asyncMiddleware, authenticate, + listVideoAccountChannelsValidator, paginationValidator, - videoChannelsSortValidator, - videoChannelsAddValidator, - setVideoChannelsSort, setPagination, - videoChannelsRemoveValidator, + setVideoChannelsSort, videoChannelGetValidator, - videoChannelsUpdateValidator, - listVideoAccountChannelsValidator, - asyncMiddleware + videoChannelsAddValidator, + videoChannelsRemoveValidator, + videoChannelsSortValidator, + videoChannelsUpdateValidator } from '../../../middlewares' -import { - createVideoChannel, - updateVideoChannelToFriends -} from '../../../lib' -import { VideoChannelInstance, AccountInstance } from '../../../models' -import { VideoChannelCreate, VideoChannelUpdate } from '../../../../shared' +import { AccountInstance, VideoChannelInstance } from '../../../models' +import { sendUpdateVideoChannel } from '../../../lib/activitypub/send-request' const videoChannelRouter = express.Router() @@ -137,11 +129,8 @@ async function updateVideoChannel (req: express.Request, res: express.Response) if (videoChannelInfoToUpdate.description !== undefined) videoChannelInstance.set('description', videoChannelInfoToUpdate.description) await videoChannelInstance.save(sequelizeOptions) - const json = videoChannelInstance.toUpdateRemoteJSON() - - // Now we'll update the video channel's meta data to our friends - return updateVideoChannelToFriends(json, t) + await sendUpdateVideoChannel(videoChannelInstance, t) }) logger.info('Video channel with name %s and uuid %s updated.', videoChannelInstance.name, videoChannelInstance.uuid) diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts index 9ad84609f..063839223 100644 --- a/server/controllers/api/videos/index.ts +++ b/server/controllers/api/videos/index.ts @@ -1,57 +1,41 @@ import * as express from 'express' import * as multer from 'multer' import { extname, join } from 'path' - -import { database as db } from '../../../initializers/database' +import { VideoCreate, VideoPrivacy, VideoUpdate } from '../../../../shared' import { - CONFIG, - REQUEST_VIDEO_QADU_TYPES, - REQUEST_VIDEO_EVENT_TYPES, - VIDEO_CATEGORIES, - VIDEO_LICENCES, - VIDEO_LANGUAGES, - VIDEO_PRIVACIES, - VIDEO_MIMETYPE_EXT -} from '../../../initializers' -import { - addEventToRemoteVideo, - quickAndDirtyUpdateVideoToFriends, - addVideoToFriends, - updateVideoToFriends, - JobScheduler, - fetchRemoteDescription -} from '../../../lib' + fetchRemoteVideoDescription, + generateRandomString, + getFormattedObjects, + getVideoFileHeight, + logger, + renamePromise, + resetSequelizeInstance, + retryTransactionWrapper +} from '../../../helpers' +import { getActivityPubUrl } from '../../../helpers/activitypub' +import { CONFIG, VIDEO_CATEGORIES, VIDEO_LANGUAGES, VIDEO_LICENCES, VIDEO_MIMETYPE_EXT, VIDEO_PRIVACIES } from '../../../initializers' +import { database as db } from '../../../initializers/database' +import { sendAddVideo, sendUpdateVideoChannel } from '../../../lib/activitypub/send-request' +import { transcodingJobScheduler } from '../../../lib/jobs/transcoding-job-scheduler/transcoding-job-scheduler' import { + asyncMiddleware, authenticate, paginationValidator, - videosSortValidator, - setVideosSort, setPagination, setVideosSearch, - videosUpdateValidator, - videosSearchValidator, + setVideosSort, videosAddValidator, videosGetValidator, videosRemoveValidator, - asyncMiddleware + videosSearchValidator, + videosSortValidator, + videosUpdateValidator } from '../../../middlewares' -import { - logger, - retryTransactionWrapper, - generateRandomString, - getFormattedObjects, - renamePromise, - getVideoFileHeight, - resetSequelizeInstance -} from '../../../helpers' import { VideoInstance } from '../../../models' -import { VideoCreate, VideoUpdate, VideoPrivacy } from '../../../../shared' - import { abuseVideoRouter } from './abuse' import { blacklistRouter } from './blacklist' -import { rateVideoRouter } from './rate' import { videoChannelRouter } from './channel' -import { getActivityPubUrl } from '../../../helpers/activitypub' +import { rateVideoRouter } from './rate' const videosRouter = express.Router() @@ -225,7 +209,7 @@ async function addVideo (req: express.Request, res: express.Response, videoPhysi } tasks.push( - JobScheduler.Instance.createJob(t, 'videoFileOptimizer', dataInput) + transcodingJobScheduler.createJob(t, 'videoFileOptimizer', dataInput) ) } await Promise.all(tasks) @@ -252,9 +236,7 @@ async function addVideo (req: express.Request, res: express.Response, videoPhysi // Don't send video to remote pods, it is private if (video.privacy === VideoPrivacy.PRIVATE) return undefined - const remoteVideo = await video.toAddRemoteJSON() - // Now we'll add the video's meta data to our friends - return addVideoToFriends(remoteVideo, t) + await sendAddVideo(video, t) }) logger.info('Video with name %s and uuid %s created.', videoInfo.name, videoUUID) @@ -302,14 +284,12 @@ async function updateVideo (req: express.Request, res: express.Response) { // Now we'll update the video's meta data to our friends if (wasPrivateVideo === false) { - const json = videoInstance.toUpdateRemoteJSON() - return updateVideoToFriends(json, t) + await sendUpdateVideoChannel(videoInstance, t) } // Video is not private anymore, send a create action to remote pods if (wasPrivateVideo === true && videoInstance.privacy !== VideoPrivacy.PRIVATE) { - const remoteVideo = await videoInstance.toAddRemoteJSON() - return addVideoToFriends(remoteVideo, t) + await sendAddVideo(videoInstance, t) } }) @@ -324,7 +304,7 @@ async function updateVideo (req: express.Request, res: express.Response) { } } -function getVideo (req: express.Request, res: express.Response) { +async function getVideo (req: express.Request, res: express.Response) { const videoInstance = res.locals.video if (videoInstance.isOwned()) { @@ -333,21 +313,11 @@ function getVideo (req: express.Request, res: express.Response) { // For example, only add a view when a user watch a video during 30s etc videoInstance.increment('views') .then(() => { - const qaduParams = { - videoId: videoInstance.id, - type: REQUEST_VIDEO_QADU_TYPES.VIEWS - } - return quickAndDirtyUpdateVideoToFriends(qaduParams) + // TODO: send to followers a notification }) .catch(err => logger.error('Cannot add view to video %s.', videoInstance.uuid, err)) } else { - // Just send the event to our friends - const eventParams = { - videoId: videoInstance.id, - type: REQUEST_VIDEO_EVENT_TYPES.VIEWS - } - addEventToRemoteVideo(eventParams) - .catch(err => logger.error('Cannot add event to remote video %s.', videoInstance.uuid, err)) + // TODO: send view event to followers } // Do not wait the view system @@ -361,7 +331,7 @@ async function getVideoDescription (req: express.Request, res: express.Response) if (videoInstance.isOwned()) { description = videoInstance.description } else { - description = await fetchRemoteDescription(videoInstance) + description = await fetchRemoteVideoDescription(videoInstance) } return res.json({ description }) diff --git a/server/controllers/api/videos/rate.ts b/server/controllers/api/videos/rate.ts index 727984506..955277d25 100644 --- a/server/controllers/api/videos/rate.ts +++ b/server/controllers/api/videos/rate.ts @@ -1,25 +1,11 @@ import * as express from 'express' - -import { database as db } from '../../../initializers/database' -import { - logger, - retryTransactionWrapper -} from '../../../helpers' -import { - VIDEO_RATE_TYPES, - REQUEST_VIDEO_EVENT_TYPES, - REQUEST_VIDEO_QADU_TYPES -} from '../../../initializers' -import { - addEventsToRemoteVideo, - quickAndDirtyUpdatesVideoToFriends -} from '../../../lib' -import { - authenticate, - videoRateValidator, - asyncMiddleware -} from '../../../middlewares' import { UserVideoRateUpdate } from '../../../../shared' +import { logger, retryTransactionWrapper } from '../../../helpers' +import { VIDEO_RATE_TYPES } from '../../../initializers' +import { database as db } from '../../../initializers/database' +import { asyncMiddleware, authenticate, videoRateValidator } from '../../../middlewares' +import { AccountInstance } from '../../../models/account/account-interface' +import { VideoInstance } from '../../../models/video/video-interface' const rateVideoRouter = express.Router() @@ -51,12 +37,12 @@ async function rateVideoRetryWrapper (req: express.Request, res: express.Respons async function rateVideo (req: express.Request, res: express.Response) { const body: UserVideoRateUpdate = req.body const rateType = body.rating - const videoInstance = res.locals.video - const userInstance = res.locals.oauth.token.User + const videoInstance: VideoInstance = res.locals.video + const accountInstance: AccountInstance = res.locals.oauth.token.User.Account await db.sequelize.transaction(async t => { const sequelizeOptions = { transaction: t } - const previousRate = await db.UserVideoRate.load(userInstance.id, videoInstance.id, t) + const previousRate = await db.AccountVideoRate.load(accountInstance.id, videoInstance.id, t) let likesToIncrement = 0 let dislikesToIncrement = 0 @@ -79,12 +65,12 @@ async function rateVideo (req: express.Request, res: express.Response) { } } else if (rateType !== 'none') { // There was not a previous rate, insert a new one if there is a rate const query = { - userId: userInstance.id, + accountId: accountInstance.id, videoId: videoInstance.id, type: rateType } - await db.UserVideoRate.create(query, sequelizeOptions) + await db.AccountVideoRate.create(query, sequelizeOptions) } const incrementQuery = { @@ -96,48 +82,12 @@ async function rateVideo (req: express.Request, res: express.Response) { // It is useful for the user to have a feedback await videoInstance.increment(incrementQuery, sequelizeOptions) - // Send a event to original pod if (videoInstance.isOwned() === false) { - - const eventsParams = [] - - if (likesToIncrement !== 0) { - eventsParams.push({ - videoId: videoInstance.id, - type: REQUEST_VIDEO_EVENT_TYPES.LIKES, - count: likesToIncrement - }) - } - - if (dislikesToIncrement !== 0) { - eventsParams.push({ - videoId: videoInstance.id, - type: REQUEST_VIDEO_EVENT_TYPES.DISLIKES, - count: dislikesToIncrement - }) - } - - await addEventsToRemoteVideo(eventsParams, t) - } else { // We own the video, we need to send a quick and dirty update to friends to notify the counts changed - const qadusParams = [] - - if (likesToIncrement !== 0) { - qadusParams.push({ - videoId: videoInstance.id, - type: REQUEST_VIDEO_QADU_TYPES.LIKES - }) - } - - if (dislikesToIncrement !== 0) { - qadusParams.push({ - videoId: videoInstance.id, - type: REQUEST_VIDEO_QADU_TYPES.DISLIKES - }) - } - - await quickAndDirtyUpdatesVideoToFriends(qadusParams, t) + // TODO: Send a event to original pod + } else { + // TODO: Send update to followers } }) - logger.info('User video rate for video %s of user %s updated.', videoInstance.name, userInstance.username) + logger.info('Account video rate for video %s of account %s updated.', videoInstance.name, accountInstance.name) } -- cgit v1.2.3