summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/users
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/api/endpoints/users')
-rw-r--r--src/server/api/endpoints/users/lists/delete.ts6
-rw-r--r--src/server/api/endpoints/users/lists/update.ts2
-rw-r--r--src/server/api/endpoints/users/notes.ts20
-rw-r--r--src/server/api/endpoints/users/recommendation.ts92
-rw-r--r--src/server/api/endpoints/users/show.ts8
5 files changed, 90 insertions, 38 deletions
diff --git a/src/server/api/endpoints/users/lists/delete.ts b/src/server/api/endpoints/users/lists/delete.ts
index 906534922e..c56963aab6 100644
--- a/src/server/api/endpoints/users/lists/delete.ts
+++ b/src/server/api/endpoints/users/lists/delete.ts
@@ -1,6 +1,6 @@
import $ from 'cafy';
import ID from '../../../../../misc/cafy-id';
-import UserList, { deleteUserList } from '../../../../../models/user-list';
+import UserList from '../../../../../models/user-list';
import { ILocalUser } from '../../../../../models/user';
import getParams from '../../../get-params';
@@ -37,7 +37,9 @@ export default (params: any, user: ILocalUser) => new Promise(async (res, rej) =
return rej('list not found');
}
- deleteUserList(userList);
+ await UserList.remove({
+ _id: userList._id
+ });
res();
});
diff --git a/src/server/api/endpoints/users/lists/update.ts b/src/server/api/endpoints/users/lists/update.ts
index e6577eca4f..e39f66fb5b 100644
--- a/src/server/api/endpoints/users/lists/update.ts
+++ b/src/server/api/endpoints/users/lists/update.ts
@@ -32,7 +32,7 @@ export const meta = {
export default (params: any, user: ILocalUser) => new Promise(async (res, rej) => {
const [ps, psErr] = getParams(meta, params);
- if (psErr) throw psErr;
+ if (psErr) return rej(psErr);
// Fetch the list
const userList = await UserList.findOne({
diff --git a/src/server/api/endpoints/users/notes.ts b/src/server/api/endpoints/users/notes.ts
index 1bfe832c51..8605a32dee 100644
--- a/src/server/api/endpoints/users/notes.ts
+++ b/src/server/api/endpoints/users/notes.ts
@@ -99,12 +99,18 @@ export const meta = {
'ja-JP': 'true にすると、ファイルが添付された投稿だけ取得します (このパラメータは廃止予定です。代わりに withFiles を使ってください。)'
}
}),
+
+ fileType: $.arr($.str).optional.note({
+ desc: {
+ 'ja-JP': '指定された種類のファイルが添付された投稿のみを取得します'
+ }
+ }),
}
};
export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
const [ps, psErr] = getParams(meta, params);
- if (psErr) throw psErr;
+ if (psErr) return rej(psErr);
if (ps.userId === undefined && ps.username === undefined) {
return rej('userId or username is required');
@@ -136,7 +142,9 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
};
const query = {
- userId: user._id
+ deletedAt: null,
+ userId: user._id,
+ visibility: { $in: ['public', 'home'] }
} as any;
if (ps.sinceId) {
@@ -171,6 +179,14 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
$ne: []
};
}
+
+ if (ps.fileType) {
+ query.fileIds = { $exists: true, $ne: [] };
+
+ query['_files.contentType'] = {
+ $in: ps.fileType
+ };
+ }
//#endregion
// Issue query
diff --git a/src/server/api/endpoints/users/recommendation.ts b/src/server/api/endpoints/users/recommendation.ts
index e0a5cb9e36..df85343f0f 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,70 @@ 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,
+ proxy: config.proxy,
+ 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');
+
+ // Get 'offset' parameter
+ const [offset = 0, offsetErr] = $.num.optional.min(0).get(params.offset);
+ if (offsetErr) return rej('invalid offset param');
- // ID list of the user itself and other users who the user follows
- const followingIds = await getFriendIds(me._id);
+ // ID list of the user itself and other users who the user follows
+ const followingIds = await getFriendIds(me._id);
- // ミュートしているユーザーを取得
- const mutedUserIds = (await Mute.find({
- muterId: me._id
- })).map(m => m.muteeId);
+ // ミュートしているユーザーを取得
+ const mutedUserIds = (await Mute.find({
+ muterId: me._id
+ })).map(m => m.muteeId);
- const users = await User
- .find({
- _id: {
- $nin: followingIds.concat(mutedUserIds)
- },
- isLocked: false,
- $or: [{
+ 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 }))));
+ }
});
diff --git a/src/server/api/endpoints/users/show.ts b/src/server/api/endpoints/users/show.ts
index 8ec0eb8dd9..dd09bd5b91 100644
--- a/src/server/api/endpoints/users/show.ts
+++ b/src/server/api/endpoints/users/show.ts
@@ -1,5 +1,5 @@
import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
-import User, { pack, ILocalUser } from '../../../../models/user';
+import User, { pack, ILocalUser, isRemoteUser } from '../../../../models/user';
import resolveRemoteUser from '../../../../remote/resolve-user';
const cursorOption = { fields: { data: false } };
@@ -61,5 +61,11 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
res(await pack(user, me, {
detail: true
}));
+
+ if (isRemoteUser(user)) {
+ if (user.updatedAt == null || Date.now() - user.updatedAt.getTime() > 1000 * 60 * 60 * 24) {
+ resolveRemoteUser(username, host, { }, true);
+ }
+ }
}
});