From 0626e7af82e02f8a5bd1e74a7d4d8c916d073ceb Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 24 Apr 2018 15:10:54 +0200 Subject: Add account view --- server/controllers/api/accounts.ts | 37 +++++++++++++++++++++++++++++++--- server/controllers/api/index.ts | 2 +- server/controllers/api/users.ts | 3 ++- server/controllers/api/videos/index.ts | 19 +++-------------- server/controllers/feeds.ts | 29 +++++++++----------------- 5 files changed, 49 insertions(+), 41 deletions(-) (limited to 'server/controllers') diff --git a/server/controllers/api/accounts.ts b/server/controllers/api/accounts.ts index 4dc0cc16d..06ab04033 100644 --- a/server/controllers/api/accounts.ts +++ b/server/controllers/api/accounts.ts @@ -1,8 +1,11 @@ import * as express from 'express' import { getFormattedObjects } from '../../helpers/utils' -import { asyncMiddleware, paginationValidator, setDefaultSort, setDefaultPagination } from '../../middlewares' -import { accountsGetValidator, accountsSortValidator } from '../../middlewares/validators' +import { asyncMiddleware, optionalAuthenticate, paginationValidator, setDefaultPagination, setDefaultSort } from '../../middlewares' +import { accountsGetValidator, accountsSortValidator, videosSortValidator } from '../../middlewares/validators' import { AccountModel } from '../../models/account/account' +import { VideoModel } from '../../models/video/video' +import { VideoSortField } from '../../../client/src/app/shared/video/sort-field.type' +import { isNSFWHidden } from '../../helpers/express-utils' const accountsRouter = express.Router() @@ -19,6 +22,16 @@ accountsRouter.get('/:id', getAccount ) +accountsRouter.get('/:id/videos', + asyncMiddleware(accountsGetValidator), + paginationValidator, + videosSortValidator, + setDefaultSort, + setDefaultPagination, + optionalAuthenticate, + asyncMiddleware(getAccountVideos) +) + // --------------------------------------------------------------------------- export { @@ -28,7 +41,9 @@ export { // --------------------------------------------------------------------------- function getAccount (req: express.Request, res: express.Response, next: express.NextFunction) { - return res.json(res.locals.account.toFormattedJSON()) + const account: AccountModel = res.locals.account + + return res.json(account.toFormattedJSON()) } async function listAccounts (req: express.Request, res: express.Response, next: express.NextFunction) { @@ -36,3 +51,19 @@ async function listAccounts (req: express.Request, res: express.Response, next: return res.json(getFormattedObjects(resultList.data, resultList.total)) } + +async function getAccountVideos (req: express.Request, res: express.Response, next: express.NextFunction) { + const account: AccountModel = res.locals.account + + const resultList = await VideoModel.listForApi( + req.query.start as number, + req.query.count as number, + req.query.sort as VideoSortField, + isNSFWHidden(res), + null, + false, + account.id + ) + + return res.json(getFormattedObjects(resultList.data, resultList.total)) +} diff --git a/server/controllers/api/index.ts b/server/controllers/api/index.ts index 3b499f3b7..964d5d04c 100644 --- a/server/controllers/api/index.ts +++ b/server/controllers/api/index.ts @@ -1,5 +1,4 @@ import * as express from 'express' -import { badRequest } from '../../helpers/utils' import { configRouter } from './config' import { jobsRouter } from './jobs' import { oauthClientsRouter } from './oauth-clients' @@ -7,6 +6,7 @@ import { serverRouter } from './server' import { usersRouter } from './users' import { accountsRouter } from './accounts' import { videosRouter } from './videos' +import { badRequest } from '../../helpers/express-utils' const apiRouter = express.Router() diff --git a/server/controllers/api/users.ts b/server/controllers/api/users.ts index 6540adb1c..474329b58 100644 --- a/server/controllers/api/users.ts +++ b/server/controllers/api/users.ts @@ -7,7 +7,7 @@ import { UserCreate, UserRight, UserRole, UserUpdate, UserUpdateMe, UserVideoRat import { retryTransactionWrapper } from '../../helpers/database-utils' import { processImage } from '../../helpers/image-utils' import { logger } from '../../helpers/logger' -import { createReqFiles, getFormattedObjects } from '../../helpers/utils' +import { getFormattedObjects } from '../../helpers/utils' import { AVATARS_SIZE, CONFIG, IMAGE_MIMETYPE_EXT, RATES_LIMIT, sequelizeTypescript } from '../../initializers' import { updateActorAvatarInstance } from '../../lib/activitypub' import { sendUpdateActor } from '../../lib/activitypub/send' @@ -43,6 +43,7 @@ import { UserModel } from '../../models/account/user' import { OAuthTokenModel } from '../../models/oauth/oauth-token' import { VideoModel } from '../../models/video/video' import { VideoSortField } from '../../../client/src/app/shared/video/sort-field.type' +import { createReqFiles } from '../../helpers/express-utils' const reqAvatarFile = createReqFiles([ 'avatarfile' ], IMAGE_MIMETYPE_EXT, { avatarfile: CONFIG.STORAGE.AVATARS_DIR }) const loginRateLimiter = new RateLimit({ diff --git a/server/controllers/api/videos/index.ts b/server/controllers/api/videos/index.ts index 6e8601fa1..61b6c5826 100644 --- a/server/controllers/api/videos/index.ts +++ b/server/controllers/api/videos/index.ts @@ -6,7 +6,7 @@ import { retryTransactionWrapper } from '../../../helpers/database-utils' import { getVideoFileResolution } from '../../../helpers/ffmpeg-utils' import { processImage } from '../../../helpers/image-utils' import { logger } from '../../../helpers/logger' -import { createReqFiles, getFormattedObjects, getServerActor, resetSequelizeInstance } from '../../../helpers/utils' +import { getFormattedObjects, getServerActor, resetSequelizeInstance } from '../../../helpers/utils' import { CONFIG, IMAGE_MIMETYPE_EXT, @@ -19,11 +19,7 @@ import { VIDEO_MIMETYPE_EXT, VIDEO_PRIVACIES } from '../../../initializers' -import { - fetchRemoteVideoDescription, - getVideoActivityPubUrl, - shareVideoByServerAndChannel -} from '../../../lib/activitypub' +import { fetchRemoteVideoDescription, getVideoActivityPubUrl, shareVideoByServerAndChannel } from '../../../lib/activitypub' import { sendCreateVideo, sendCreateView, sendUpdateVideo } from '../../../lib/activitypub/send' import { JobQueue } from '../../../lib/job-queue' import { Redis } from '../../../lib/redis' @@ -49,9 +45,9 @@ import { blacklistRouter } from './blacklist' import { videoChannelRouter } from './channel' import { videoCommentRouter } from './comment' import { rateVideoRouter } from './rate' -import { User } from '../../../../shared/models/users' import { VideoFilter } from '../../../../shared/models/videos/video-query.type' import { VideoSortField } from '../../../../client/src/app/shared/video/sort-field.type' +import { isNSFWHidden, createReqFiles } from '../../../helpers/express-utils' const videosRouter = express.Router() @@ -444,12 +440,3 @@ async function searchVideos (req: express.Request, res: express.Response, next: return res.json(getFormattedObjects(resultList.data, resultList.total)) } - -function isNSFWHidden (res: express.Response) { - if (res.locals.oauth) { - const user: User = res.locals.oauth.token.User - if (user) return user.nsfwPolicy === 'do_not_list' - } - - return CONFIG.INSTANCE.DEFAULT_NSFW_POLICY === 'do_not_list' -} diff --git a/server/controllers/feeds.ts b/server/controllers/feeds.ts index 4a4dc3820..6a6af3e09 100644 --- a/server/controllers/feeds.ts +++ b/server/controllers/feeds.ts @@ -30,29 +30,18 @@ async function generateFeed (req: express.Request, res: express.Response, next: let feed = initFeed() const start = 0 - let resultList: ResultList const account: AccountModel = res.locals.account const hideNSFW = CONFIG.INSTANCE.DEFAULT_NSFW_POLICY === 'do_not_list' - if (account) { - resultList = await VideoModel.listAccountVideosForApi( - account.id, - start, - FEEDS.COUNT, - req.query.sort as VideoSortField, - hideNSFW, - true - ) - } else { - resultList = await VideoModel.listForApi( - start, - FEEDS.COUNT, - req.query.sort as VideoSortField, - hideNSFW, - req.query.filter, - true - ) - } + const resultList = await VideoModel.listForApi( + start, + FEEDS.COUNT, + req.query.sort as VideoSortField, + hideNSFW, + req.query.filter, + true, + account ? account.id : null + ) // Adding video items to the feed, one at a time resultList.data.forEach(video => { -- cgit v1.2.3