summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/api/endpoints')
-rw-r--r--src/server/api/endpoints/ap/show.ts10
-rw-r--r--src/server/api/endpoints/drive/files/check_existence.ts3
-rw-r--r--src/server/api/endpoints/drive/files/show.ts3
-rw-r--r--src/server/api/endpoints/meta.ts20
-rw-r--r--src/server/api/endpoints/notes/global-timeline.ts2
-rw-r--r--src/server/api/endpoints/notes/hybrid-timeline.ts2
-rw-r--r--src/server/api/endpoints/notes/local-timeline.ts2
-rw-r--r--src/server/api/endpoints/notes/mentions.ts2
-rw-r--r--src/server/api/endpoints/notes/timeline.ts2
-rw-r--r--src/server/api/endpoints/notes/user-list-timeline.ts2
-rw-r--r--src/server/api/endpoints/users/notes.ts1
-rw-r--r--src/server/api/endpoints/users/recommendation.ts94
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 }))));
+ }
});