diff options
author | Chocobozzz <me@florianbigard.com> | 2018-04-24 15:10:54 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2018-04-24 15:13:19 +0200 |
commit | 0626e7af82e02f8a5bd1e74a7d4d8c916d073ceb (patch) | |
tree | 79b5befbc6a04c007e5919805f1514d065b30e11 /server/controllers | |
parent | b4d1af3dd8cdab2d58927e671d62194ca383cd75 (diff) | |
download | PeerTube-0626e7af82e02f8a5bd1e74a7d4d8c916d073ceb.tar.gz PeerTube-0626e7af82e02f8a5bd1e74a7d4d8c916d073ceb.tar.zst PeerTube-0626e7af82e02f8a5bd1e74a7d4d8c916d073ceb.zip |
Add account view
Diffstat (limited to 'server/controllers')
-rw-r--r-- | server/controllers/api/accounts.ts | 37 | ||||
-rw-r--r-- | server/controllers/api/index.ts | 2 | ||||
-rw-r--r-- | server/controllers/api/users.ts | 3 | ||||
-rw-r--r-- | server/controllers/api/videos/index.ts | 19 | ||||
-rw-r--r-- | server/controllers/feeds.ts | 29 |
5 files changed, 49 insertions, 41 deletions
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 @@ | |||
1 | import * as express from 'express' | 1 | import * as express from 'express' |
2 | import { getFormattedObjects } from '../../helpers/utils' | 2 | import { getFormattedObjects } from '../../helpers/utils' |
3 | import { asyncMiddleware, paginationValidator, setDefaultSort, setDefaultPagination } from '../../middlewares' | 3 | import { asyncMiddleware, optionalAuthenticate, paginationValidator, setDefaultPagination, setDefaultSort } from '../../middlewares' |
4 | import { accountsGetValidator, accountsSortValidator } from '../../middlewares/validators' | 4 | import { accountsGetValidator, accountsSortValidator, videosSortValidator } from '../../middlewares/validators' |
5 | import { AccountModel } from '../../models/account/account' | 5 | import { AccountModel } from '../../models/account/account' |
6 | import { VideoModel } from '../../models/video/video' | ||
7 | import { VideoSortField } from '../../../client/src/app/shared/video/sort-field.type' | ||
8 | import { isNSFWHidden } from '../../helpers/express-utils' | ||
6 | 9 | ||
7 | const accountsRouter = express.Router() | 10 | const accountsRouter = express.Router() |
8 | 11 | ||
@@ -19,6 +22,16 @@ accountsRouter.get('/:id', | |||
19 | getAccount | 22 | getAccount |
20 | ) | 23 | ) |
21 | 24 | ||
25 | accountsRouter.get('/:id/videos', | ||
26 | asyncMiddleware(accountsGetValidator), | ||
27 | paginationValidator, | ||
28 | videosSortValidator, | ||
29 | setDefaultSort, | ||
30 | setDefaultPagination, | ||
31 | optionalAuthenticate, | ||
32 | asyncMiddleware(getAccountVideos) | ||
33 | ) | ||
34 | |||
22 | // --------------------------------------------------------------------------- | 35 | // --------------------------------------------------------------------------- |
23 | 36 | ||
24 | export { | 37 | export { |
@@ -28,7 +41,9 @@ export { | |||
28 | // --------------------------------------------------------------------------- | 41 | // --------------------------------------------------------------------------- |
29 | 42 | ||
30 | function getAccount (req: express.Request, res: express.Response, next: express.NextFunction) { | 43 | function getAccount (req: express.Request, res: express.Response, next: express.NextFunction) { |
31 | return res.json(res.locals.account.toFormattedJSON()) | 44 | const account: AccountModel = res.locals.account |
45 | |||
46 | return res.json(account.toFormattedJSON()) | ||
32 | } | 47 | } |
33 | 48 | ||
34 | async function listAccounts (req: express.Request, res: express.Response, next: express.NextFunction) { | 49 | 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: | |||
36 | 51 | ||
37 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 52 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
38 | } | 53 | } |
54 | |||
55 | async function getAccountVideos (req: express.Request, res: express.Response, next: express.NextFunction) { | ||
56 | const account: AccountModel = res.locals.account | ||
57 | |||
58 | const resultList = await VideoModel.listForApi( | ||
59 | req.query.start as number, | ||
60 | req.query.count as number, | ||
61 | req.query.sort as VideoSortField, | ||
62 | isNSFWHidden(res), | ||
63 | null, | ||
64 | false, | ||
65 | account.id | ||
66 | ) | ||
67 | |||
68 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | ||
69 | } | ||
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 @@ | |||
1 | import * as express from 'express' | 1 | import * as express from 'express' |
2 | import { badRequest } from '../../helpers/utils' | ||
3 | import { configRouter } from './config' | 2 | import { configRouter } from './config' |
4 | import { jobsRouter } from './jobs' | 3 | import { jobsRouter } from './jobs' |
5 | import { oauthClientsRouter } from './oauth-clients' | 4 | import { oauthClientsRouter } from './oauth-clients' |
@@ -7,6 +6,7 @@ import { serverRouter } from './server' | |||
7 | import { usersRouter } from './users' | 6 | import { usersRouter } from './users' |
8 | import { accountsRouter } from './accounts' | 7 | import { accountsRouter } from './accounts' |
9 | import { videosRouter } from './videos' | 8 | import { videosRouter } from './videos' |
9 | import { badRequest } from '../../helpers/express-utils' | ||
10 | 10 | ||
11 | const apiRouter = express.Router() | 11 | const apiRouter = express.Router() |
12 | 12 | ||
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 | |||
7 | import { retryTransactionWrapper } from '../../helpers/database-utils' | 7 | import { retryTransactionWrapper } from '../../helpers/database-utils' |
8 | import { processImage } from '../../helpers/image-utils' | 8 | import { processImage } from '../../helpers/image-utils' |
9 | import { logger } from '../../helpers/logger' | 9 | import { logger } from '../../helpers/logger' |
10 | import { createReqFiles, getFormattedObjects } from '../../helpers/utils' | 10 | import { getFormattedObjects } from '../../helpers/utils' |
11 | import { AVATARS_SIZE, CONFIG, IMAGE_MIMETYPE_EXT, RATES_LIMIT, sequelizeTypescript } from '../../initializers' | 11 | import { AVATARS_SIZE, CONFIG, IMAGE_MIMETYPE_EXT, RATES_LIMIT, sequelizeTypescript } from '../../initializers' |
12 | import { updateActorAvatarInstance } from '../../lib/activitypub' | 12 | import { updateActorAvatarInstance } from '../../lib/activitypub' |
13 | import { sendUpdateActor } from '../../lib/activitypub/send' | 13 | import { sendUpdateActor } from '../../lib/activitypub/send' |
@@ -43,6 +43,7 @@ import { UserModel } from '../../models/account/user' | |||
43 | import { OAuthTokenModel } from '../../models/oauth/oauth-token' | 43 | import { OAuthTokenModel } from '../../models/oauth/oauth-token' |
44 | import { VideoModel } from '../../models/video/video' | 44 | import { VideoModel } from '../../models/video/video' |
45 | import { VideoSortField } from '../../../client/src/app/shared/video/sort-field.type' | 45 | import { VideoSortField } from '../../../client/src/app/shared/video/sort-field.type' |
46 | import { createReqFiles } from '../../helpers/express-utils' | ||
46 | 47 | ||
47 | const reqAvatarFile = createReqFiles([ 'avatarfile' ], IMAGE_MIMETYPE_EXT, { avatarfile: CONFIG.STORAGE.AVATARS_DIR }) | 48 | const reqAvatarFile = createReqFiles([ 'avatarfile' ], IMAGE_MIMETYPE_EXT, { avatarfile: CONFIG.STORAGE.AVATARS_DIR }) |
48 | const loginRateLimiter = new RateLimit({ | 49 | 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' | |||
6 | import { getVideoFileResolution } from '../../../helpers/ffmpeg-utils' | 6 | import { getVideoFileResolution } from '../../../helpers/ffmpeg-utils' |
7 | import { processImage } from '../../../helpers/image-utils' | 7 | import { processImage } from '../../../helpers/image-utils' |
8 | import { logger } from '../../../helpers/logger' | 8 | import { logger } from '../../../helpers/logger' |
9 | import { createReqFiles, getFormattedObjects, getServerActor, resetSequelizeInstance } from '../../../helpers/utils' | 9 | import { getFormattedObjects, getServerActor, resetSequelizeInstance } from '../../../helpers/utils' |
10 | import { | 10 | import { |
11 | CONFIG, | 11 | CONFIG, |
12 | IMAGE_MIMETYPE_EXT, | 12 | IMAGE_MIMETYPE_EXT, |
@@ -19,11 +19,7 @@ import { | |||
19 | VIDEO_MIMETYPE_EXT, | 19 | VIDEO_MIMETYPE_EXT, |
20 | VIDEO_PRIVACIES | 20 | VIDEO_PRIVACIES |
21 | } from '../../../initializers' | 21 | } from '../../../initializers' |
22 | import { | 22 | import { fetchRemoteVideoDescription, getVideoActivityPubUrl, shareVideoByServerAndChannel } from '../../../lib/activitypub' |
23 | fetchRemoteVideoDescription, | ||
24 | getVideoActivityPubUrl, | ||
25 | shareVideoByServerAndChannel | ||
26 | } from '../../../lib/activitypub' | ||
27 | import { sendCreateVideo, sendCreateView, sendUpdateVideo } from '../../../lib/activitypub/send' | 23 | import { sendCreateVideo, sendCreateView, sendUpdateVideo } from '../../../lib/activitypub/send' |
28 | import { JobQueue } from '../../../lib/job-queue' | 24 | import { JobQueue } from '../../../lib/job-queue' |
29 | import { Redis } from '../../../lib/redis' | 25 | import { Redis } from '../../../lib/redis' |
@@ -49,9 +45,9 @@ import { blacklistRouter } from './blacklist' | |||
49 | import { videoChannelRouter } from './channel' | 45 | import { videoChannelRouter } from './channel' |
50 | import { videoCommentRouter } from './comment' | 46 | import { videoCommentRouter } from './comment' |
51 | import { rateVideoRouter } from './rate' | 47 | import { rateVideoRouter } from './rate' |
52 | import { User } from '../../../../shared/models/users' | ||
53 | import { VideoFilter } from '../../../../shared/models/videos/video-query.type' | 48 | import { VideoFilter } from '../../../../shared/models/videos/video-query.type' |
54 | import { VideoSortField } from '../../../../client/src/app/shared/video/sort-field.type' | 49 | import { VideoSortField } from '../../../../client/src/app/shared/video/sort-field.type' |
50 | import { isNSFWHidden, createReqFiles } from '../../../helpers/express-utils' | ||
55 | 51 | ||
56 | const videosRouter = express.Router() | 52 | const videosRouter = express.Router() |
57 | 53 | ||
@@ -444,12 +440,3 @@ async function searchVideos (req: express.Request, res: express.Response, next: | |||
444 | 440 | ||
445 | return res.json(getFormattedObjects(resultList.data, resultList.total)) | 441 | return res.json(getFormattedObjects(resultList.data, resultList.total)) |
446 | } | 442 | } |
447 | |||
448 | function isNSFWHidden (res: express.Response) { | ||
449 | if (res.locals.oauth) { | ||
450 | const user: User = res.locals.oauth.token.User | ||
451 | if (user) return user.nsfwPolicy === 'do_not_list' | ||
452 | } | ||
453 | |||
454 | return CONFIG.INSTANCE.DEFAULT_NSFW_POLICY === 'do_not_list' | ||
455 | } | ||
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: | |||
30 | let feed = initFeed() | 30 | let feed = initFeed() |
31 | const start = 0 | 31 | const start = 0 |
32 | 32 | ||
33 | let resultList: ResultList<VideoModel> | ||
34 | const account: AccountModel = res.locals.account | 33 | const account: AccountModel = res.locals.account |
35 | const hideNSFW = CONFIG.INSTANCE.DEFAULT_NSFW_POLICY === 'do_not_list' | 34 | const hideNSFW = CONFIG.INSTANCE.DEFAULT_NSFW_POLICY === 'do_not_list' |
36 | 35 | ||
37 | if (account) { | 36 | const resultList = await VideoModel.listForApi( |
38 | resultList = await VideoModel.listAccountVideosForApi( | 37 | start, |
39 | account.id, | 38 | FEEDS.COUNT, |
40 | start, | 39 | req.query.sort as VideoSortField, |
41 | FEEDS.COUNT, | 40 | hideNSFW, |
42 | req.query.sort as VideoSortField, | 41 | req.query.filter, |
43 | hideNSFW, | 42 | true, |
44 | true | 43 | account ? account.id : null |
45 | ) | 44 | ) |
46 | } else { | ||
47 | resultList = await VideoModel.listForApi( | ||
48 | start, | ||
49 | FEEDS.COUNT, | ||
50 | req.query.sort as VideoSortField, | ||
51 | hideNSFW, | ||
52 | req.query.filter, | ||
53 | true | ||
54 | ) | ||
55 | } | ||
56 | 45 | ||
57 | // Adding video items to the feed, one at a time | 46 | // Adding video items to the feed, one at a time |
58 | resultList.data.forEach(video => { | 47 | resultList.data.forEach(video => { |