diff options
Diffstat (limited to 'src/server/api/endpoints')
| -rw-r--r-- | src/server/api/endpoints/ap/show.ts | 10 | ||||
| -rw-r--r-- | src/server/api/endpoints/drive/files/check_existence.ts | 3 | ||||
| -rw-r--r-- | src/server/api/endpoints/drive/files/show.ts | 3 | ||||
| -rw-r--r-- | src/server/api/endpoints/meta.ts | 20 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/global-timeline.ts | 2 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/hybrid-timeline.ts | 2 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/local-timeline.ts | 2 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/mentions.ts | 2 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/timeline.ts | 2 | ||||
| -rw-r--r-- | src/server/api/endpoints/notes/user-list-timeline.ts | 2 | ||||
| -rw-r--r-- | src/server/api/endpoints/users/notes.ts | 1 | ||||
| -rw-r--r-- | src/server/api/endpoints/users/recommendation.ts | 94 |
12 files changed, 98 insertions, 45 deletions
diff --git a/src/server/api/endpoints/ap/show.ts b/src/server/api/endpoints/ap/show.ts index 1f390d01aa..6cbd4ef87e 100644 --- a/src/server/api/endpoints/ap/show.ts +++ b/src/server/api/endpoints/ap/show.ts @@ -24,15 +24,15 @@ export const meta = { }, }; -export default (params: any) => new Promise(async (res, rej) => { +export default async (params: any) => { const [ps, psErr] = getParams(meta, params); - if (psErr) return rej(psErr); + if (psErr) throw psErr; const object = await fetchAny(ps.uri); - if (object !== null) return res(object); + if (object !== null) return object; - return rej('object not found'); -}); + throw new Error('object not found'); +}; /*** * URIからUserかNoteを解決する diff --git a/src/server/api/endpoints/drive/files/check_existence.ts b/src/server/api/endpoints/drive/files/check_existence.ts index 73d75b7caf..a024701655 100644 --- a/src/server/api/endpoints/drive/files/check_existence.ts +++ b/src/server/api/endpoints/drive/files/check_existence.ts @@ -27,7 +27,8 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = const file = await DriveFile.findOne({ md5: md5, - 'metadata.userId': user._id + 'metadata.userId': user._id, + 'metadata.deletedAt': { $exists: false } }); if (file === null) { diff --git a/src/server/api/endpoints/drive/files/show.ts b/src/server/api/endpoints/drive/files/show.ts index 718fb8c2d7..e35c5e3ca2 100644 --- a/src/server/api/endpoints/drive/files/show.ts +++ b/src/server/api/endpoints/drive/files/show.ts @@ -22,7 +22,8 @@ export default async (params: any, user: ILocalUser) => { const file = await DriveFile .findOne({ _id: fileId, - 'metadata.userId': user._id + 'metadata.userId': user._id, + 'metadata.deletedAt': { $exists: false } }); if (file === null) { diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts index c76d7f2e8f..152559337d 100644 --- a/src/server/api/endpoints/meta.ts +++ b/src/server/api/endpoints/meta.ts @@ -1,6 +1,3 @@ -/** - * Module dependencies - */ import * as os from 'os'; import config from '../../../config'; import Meta from '../../../models/meta'; @@ -9,9 +6,17 @@ import { ILocalUser } from '../../../models/user'; const pkg = require('../../../../package.json'); const client = require('../../../../built/client/meta.json'); -/** - * Show core info - */ +export const meta = { + desc: { + 'ja-JP': 'インスタンス情報を取得します。', + 'en-US': 'Get the information of this instance.' + }, + + requireCredential: false, + + params: {}, +}; + export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => { const meta: any = (await Meta.findOne()) || {}; @@ -28,10 +33,12 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => machine: os.hostname(), os: os.platform(), node: process.version, + cpu: { model: os.cpus()[0].model, cores: os.cpus().length }, + broadcasts: meta.broadcasts || [], disableRegistration: meta.disableRegistration, disableLocalTimeline: meta.disableLocalTimeline, @@ -40,6 +47,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => swPublickey: config.sw ? config.sw.public_key : null, hidedTags: (me && me.isAdmin) ? meta.hidedTags : undefined, bannerUrl: meta.bannerUrl, + features: { registration: !meta.disableRegistration, localTimeLine: !meta.disableLocalTimeline, diff --git a/src/server/api/endpoints/notes/global-timeline.ts b/src/server/api/endpoints/notes/global-timeline.ts index 8362143bb2..8a6c848943 100644 --- a/src/server/api/endpoints/notes/global-timeline.ts +++ b/src/server/api/endpoints/notes/global-timeline.ts @@ -58,6 +58,8 @@ export default async (params: any, user: ILocalUser) => { }; const query = { + deletedAt: null, + // public only visibility: 'public', diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts index 14b4432b33..b2ea9c60ac 100644 --- a/src/server/api/endpoints/notes/hybrid-timeline.ts +++ b/src/server/api/endpoints/notes/hybrid-timeline.ts @@ -129,6 +129,8 @@ export default async (params: any, user: ILocalUser) => { const query = { $and: [{ + deletedAt: null, + $or: [{ // フォローしている人の投稿 $or: followQuery diff --git a/src/server/api/endpoints/notes/local-timeline.ts b/src/server/api/endpoints/notes/local-timeline.ts index 8ab07d8ea7..510564129c 100644 --- a/src/server/api/endpoints/notes/local-timeline.ts +++ b/src/server/api/endpoints/notes/local-timeline.ts @@ -71,6 +71,8 @@ export default async (params: any, user: ILocalUser) => { }; const query = { + deletedAt: null, + // public only visibility: 'public', diff --git a/src/server/api/endpoints/notes/mentions.ts b/src/server/api/endpoints/notes/mentions.ts index 592a94263d..27b6245eb6 100644 --- a/src/server/api/endpoints/notes/mentions.ts +++ b/src/server/api/endpoints/notes/mentions.ts @@ -45,6 +45,8 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) = // Construct query const query = { + deletedAt: null, + $or: [{ mentions: user._id }, { diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts index 44a504eb18..31a4978407 100644 --- a/src/server/api/endpoints/notes/timeline.ts +++ b/src/server/api/endpoints/notes/timeline.ts @@ -132,6 +132,8 @@ export default async (params: any, user: ILocalUser) => { const query = { $and: [{ + deletedAt: null, + // フォローしている人の投稿 $or: followQuery, diff --git a/src/server/api/endpoints/notes/user-list-timeline.ts b/src/server/api/endpoints/notes/user-list-timeline.ts index 6758b4eb73..7dddc4834e 100644 --- a/src/server/api/endpoints/notes/user-list-timeline.ts +++ b/src/server/api/endpoints/notes/user-list-timeline.ts @@ -137,6 +137,8 @@ export default async (params: any, user: ILocalUser) => { const query = { $and: [{ + deletedAt: null, + // リストに入っている人のタイムラインへの投稿 $or: listQuery, diff --git a/src/server/api/endpoints/users/notes.ts b/src/server/api/endpoints/users/notes.ts index 1bfe832c51..002ddf23e5 100644 --- a/src/server/api/endpoints/users/notes.ts +++ b/src/server/api/endpoints/users/notes.ts @@ -136,6 +136,7 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => }; const query = { + deletedAt: null, userId: user._id } as any; diff --git a/src/server/api/endpoints/users/recommendation.ts b/src/server/api/endpoints/users/recommendation.ts index e0a5cb9e36..f54326b566 100644 --- a/src/server/api/endpoints/users/recommendation.ts +++ b/src/server/api/endpoints/users/recommendation.ts @@ -3,6 +3,8 @@ import $ from 'cafy'; import User, { pack, ILocalUser } from '../../../../models/user'; import { getFriendIds } from '../../common/get-friends'; import Mute from '../../../../models/mute'; +import * as request from 'request'; +import config from '../../../../config'; export const meta = { desc: { @@ -15,44 +17,72 @@ export const meta = { }; export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => { - // Get 'limit' parameter - const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit); - if (limitErr) return rej('invalid limit param'); + if (config.user_recommendation && config.user_recommendation.external) { + const userName = me.username; + const hostName = config.hostname; + const limit = params.limit; + const offset = params.offset; + const timeout = config.user_recommendation.timeout; + const engine = config.user_recommendation.engine; + const url = engine + .replace('{{host}}', hostName) + .replace('{{user}}', userName) + .replace('{{limit}}', limit) + .replace('{{offset}}', offset); - // Get 'offset' parameter - const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset); - if (offsetErr) return rej('invalid offset param'); + request( + { + url: url, + timeout: timeout, + json: true, + followRedirect: true, + followAllRedirects: true + }, + (error: any, response: any, body: any) => { + if (!error && response.statusCode == 200) { + res(body); + } else { + res([]); + } + } + ); + } else { + // Get 'limit' parameter + const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit); + if (limitErr) return rej('invalid limit param'); - // ID list of the user itself and other users who the user follows - const followingIds = await getFriendIds(me._id); + // Get 'offset' parameter + const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset); + if (offsetErr) return rej('invalid offset param'); - // ミュートしているユーザーを取得 - const mutedUserIds = (await Mute.find({ - muterId: me._id - })).map(m => m.muteeId); + // ID list of the user itself and other users who the user follows + const followingIds = await getFriendIds(me._id); - const users = await User - .find({ - _id: { - $nin: followingIds.concat(mutedUserIds) - }, - isLocked: false, - $or: [{ + // ミュートしているユーザーを取得 + const mutedUserIds = (await Mute.find({ + muterId: me._id + })).map(m => m.muteeId); + + const users = await User + .find({ + _id: { + $nin: followingIds.concat(mutedUserIds) + }, + isLocked: { $ne: true }, lastUsedAt: { $gte: new Date(Date.now() - ms('7days')) - } - }, { + }, host: null - }] - }, { - limit: limit, - skip: offset, - sort: { - followersCount: -1 - } - }); + }, { + limit: limit, + skip: offset, + sort: { + followersCount: -1 + } + }); - // Serialize - res(await Promise.all(users.map(async user => - await pack(user, me, { detail: true })))); + // Serialize + res(await Promise.all(users.map(async user => + await pack(user, me, { detail: true })))); + } }); |