summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2018-08-19 00:55:07 +0900
committerGitHub <noreply@github.com>2018-08-19 00:55:07 +0900
commit0e45d0d47fca2f9cf2caf87a25442d3090bea2fb (patch)
tree4591218074ce73b4f5d3be7582d76a170dc1b672 /src/server/api/endpoints
parentNew translations ja.yml (Japanese (Kansai-ben)) (diff)
parentMerge pull request #2330 from syuilo/patch (diff)
downloadmisskey-0e45d0d47fca2f9cf2caf87a25442d3090bea2fb.tar.gz
misskey-0e45d0d47fca2f9cf2caf87a25442d3090bea2fb.tar.bz2
misskey-0e45d0d47fca2f9cf2caf87a25442d3090bea2fb.zip
Merge branch 'master' into l10n_master
Diffstat (limited to 'src/server/api/endpoints')
-rw-r--r--src/server/api/endpoints/admin/chart.ts101
-rw-r--r--src/server/api/endpoints/admin/invite.ts26
-rw-r--r--src/server/api/endpoints/admin/suspend-user.ts60
-rw-r--r--src/server/api/endpoints/admin/unverify-user.ts46
-rw-r--r--src/server/api/endpoints/admin/verify-user.ts46
-rw-r--r--src/server/api/endpoints/aggregation/posts.ts84
-rw-r--r--src/server/api/endpoints/aggregation/users.ts55
-rw-r--r--src/server/api/endpoints/meta.ts3
-rw-r--r--src/server/api/endpoints/notes/create.ts3
9 files changed, 252 insertions, 172 deletions
diff --git a/src/server/api/endpoints/admin/chart.ts b/src/server/api/endpoints/admin/chart.ts
new file mode 100644
index 0000000000..a0566b11f5
--- /dev/null
+++ b/src/server/api/endpoints/admin/chart.ts
@@ -0,0 +1,101 @@
+import Stats, { IStats } from '../../../../models/stats';
+
+type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
+
+export const meta = {
+ requireCredential: true,
+ requireAdmin: true
+};
+
+export default (params: any) => new Promise(async (res, rej) => {
+ const now = new Date();
+ const y = now.getFullYear();
+ const m = now.getMonth();
+ const d = now.getDate();
+
+ const stats = await Stats.find({
+ date: {
+ $gt: new Date(y - 1, m, d)
+ }
+ }, {
+ sort: {
+ date: -1
+ },
+ fields: {
+ _id: 0
+ }
+ });
+
+ const chart: Array<Omit<IStats, '_id'>> = [];
+
+ for (let i = 364; i >= 0; i--) {
+ const day = new Date(y, m, d - i);
+
+ const stat = stats.find(s => s.date.getTime() == day.getTime());
+
+ if (stat) {
+ chart.unshift(stat);
+ } else { // 隙間埋め
+ const mostRecent = stats.find(s => s.date.getTime() < day.getTime());
+ if (mostRecent) {
+ chart.unshift(Object.assign({}, mostRecent, {
+ date: day
+ }));
+ } else {
+ chart.unshift({
+ date: day,
+ users: {
+ local: {
+ total: 0,
+ diff: 0
+ },
+ remote: {
+ total: 0,
+ diff: 0
+ }
+ },
+ notes: {
+ local: {
+ total: 0,
+ diff: 0,
+ diffs: {
+ normal: 0,
+ reply: 0,
+ renote: 0
+ }
+ },
+ remote: {
+ total: 0,
+ diff: 0,
+ diffs: {
+ normal: 0,
+ reply: 0,
+ renote: 0
+ }
+ }
+ },
+ drive: {
+ local: {
+ totalCount: 0,
+ totalSize: 0,
+ diffCount: 0,
+ diffSize: 0
+ },
+ remote: {
+ totalCount: 0,
+ totalSize: 0,
+ diffCount: 0,
+ diffSize: 0
+ }
+ }
+ });
+ }
+ }
+ }
+
+ chart.forEach(x => {
+ delete x.date;
+ });
+
+ res(chart);
+});
diff --git a/src/server/api/endpoints/admin/invite.ts b/src/server/api/endpoints/admin/invite.ts
new file mode 100644
index 0000000000..77608e715c
--- /dev/null
+++ b/src/server/api/endpoints/admin/invite.ts
@@ -0,0 +1,26 @@
+import rndstr from 'rndstr';
+import RegistrationTicket from '../../../../models/registration-tickets';
+
+export const meta = {
+ desc: {
+ ja: '招待コードを発行します。'
+ },
+
+ requireCredential: true,
+ requireAdmin: true,
+
+ params: {}
+};
+
+export default (params: any) => new Promise(async (res, rej) => {
+ const code = rndstr({ length: 5, chars: '0-9' });
+
+ await RegistrationTicket.insert({
+ createdAt: new Date(),
+ code: code
+ });
+
+ res({
+ code: code
+ });
+});
diff --git a/src/server/api/endpoints/admin/suspend-user.ts b/src/server/api/endpoints/admin/suspend-user.ts
index 8698120cdb..9c32ba987d 100644
--- a/src/server/api/endpoints/admin/suspend-user.ts
+++ b/src/server/api/endpoints/admin/suspend-user.ts
@@ -4,43 +4,43 @@ import getParams from '../../get-params';
import User from '../../../../models/user';
export const meta = {
- desc: {
- ja: '指定したユーザーを凍結します。',
- en: 'Suspend a user.'
- },
+ desc: {
+ ja: '指定したユーザーを凍結します。',
+ en: 'Suspend a user.'
+ },
- requireCredential: true,
- requireAdmin: true,
+ requireCredential: true,
+ requireAdmin: true,
- params: {
- userId: $.type(ID).note({
- desc: {
- ja: '対象のユーザーID',
- en: 'The user ID which you want to suspend'
- }
- }),
- }
+ params: {
+ userId: $.type(ID).note({
+ desc: {
+ ja: '対象のユーザーID',
+ en: 'The user ID which you want to suspend'
+ }
+ }),
+ }
};
export default (params: any) => new Promise(async (res, rej) => {
- const [ps, psErr] = getParams(meta, params);
- if (psErr) return rej(psErr);
+ const [ps, psErr] = getParams(meta, params);
+ if (psErr) return rej(psErr);
- const user = await User.findOne({
- _id: ps.userId
- });
+ const user = await User.findOne({
+ _id: ps.userId
+ });
- if (user == null) {
- return rej('user not found');
- }
+ if (user == null) {
+ return rej('user not found');
+ }
- await User.findOneAndUpdate({
- _id: user._id
- }, {
- $set: {
- isSuspended: true
- }
- });
+ await User.findOneAndUpdate({
+ _id: user._id
+ }, {
+ $set: {
+ isSuspended: true
+ }
+ });
- res();
+ res();
});
diff --git a/src/server/api/endpoints/admin/unverify-user.ts b/src/server/api/endpoints/admin/unverify-user.ts
new file mode 100644
index 0000000000..34653cd78a
--- /dev/null
+++ b/src/server/api/endpoints/admin/unverify-user.ts
@@ -0,0 +1,46 @@
+import $ from 'cafy';
+import ID from '../../../../misc/cafy-id';
+import getParams from '../../get-params';
+import User from '../../../../models/user';
+
+export const meta = {
+ desc: {
+ ja: '指定したユーザーの公式アカウントを解除します。',
+ en: 'Mark a user as unverified.'
+ },
+
+ requireCredential: true,
+ requireAdmin: true,
+
+ params: {
+ userId: $.type(ID).note({
+ desc: {
+ ja: '対象のユーザーID',
+ en: 'The user ID which you want to unverify'
+ }
+ }),
+ }
+};
+
+export default (params: any) => new Promise(async (res, rej) => {
+ const [ps, psErr] = getParams(meta, params);
+ if (psErr) return rej(psErr);
+
+ const user = await User.findOne({
+ _id: ps.userId
+ });
+
+ if (user == null) {
+ return rej('user not found');
+ }
+
+ await User.findOneAndUpdate({
+ _id: user._id
+ }, {
+ $set: {
+ isVerified: false
+ }
+ });
+
+ res();
+});
diff --git a/src/server/api/endpoints/admin/verify-user.ts b/src/server/api/endpoints/admin/verify-user.ts
new file mode 100644
index 0000000000..5b826eb1c3
--- /dev/null
+++ b/src/server/api/endpoints/admin/verify-user.ts
@@ -0,0 +1,46 @@
+import $ from 'cafy';
+import ID from '../../../../misc/cafy-id';
+import getParams from '../../get-params';
+import User from '../../../../models/user';
+
+export const meta = {
+ desc: {
+ ja: '指定したユーザーを公式アカウントにします。',
+ en: 'Mark a user as verified.'
+ },
+
+ requireCredential: true,
+ requireAdmin: true,
+
+ params: {
+ userId: $.type(ID).note({
+ desc: {
+ ja: '対象のユーザーID',
+ en: 'The user ID which you want to verify'
+ }
+ }),
+ }
+};
+
+export default (params: any) => new Promise(async (res, rej) => {
+ const [ps, psErr] = getParams(meta, params);
+ if (psErr) return rej(psErr);
+
+ const user = await User.findOne({
+ _id: ps.userId
+ });
+
+ if (user == null) {
+ return rej('user not found');
+ }
+
+ await User.findOneAndUpdate({
+ _id: user._id
+ }, {
+ $set: {
+ isVerified: true
+ }
+ });
+
+ res();
+});
diff --git a/src/server/api/endpoints/aggregation/posts.ts b/src/server/api/endpoints/aggregation/posts.ts
deleted file mode 100644
index 629bb19108..0000000000
--- a/src/server/api/endpoints/aggregation/posts.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-import $ from 'cafy';
-import Note from '../../../../models/note';
-
-/**
- * Aggregate notes
- */
-export default (params: any) => new Promise(async (res, rej) => {
- // Get 'limit' parameter
- const [limit = 365, limitErr] = $.num.optional.range(1, 365).get(params.limit);
- if (limitErr) return rej('invalid limit param');
-
- const datas = await Note
- .aggregate([
- { $project: {
- renoteId: '$renoteId',
- replyId: '$replyId',
- createdAt: { $add: ['$createdAt', 9 * 60 * 60 * 1000] } // Convert into JST
- }},
- { $project: {
- date: {
- year: { $year: '$createdAt' },
- month: { $month: '$createdAt' },
- day: { $dayOfMonth: '$createdAt' }
- },
- type: {
- $cond: {
- if: { $ne: ['$renoteId', null] },
- then: 'renote',
- else: {
- $cond: {
- if: { $ne: ['$replyId', null] },
- then: 'reply',
- else: 'note'
- }
- }
- }
- }}
- },
- { $group: { _id: {
- date: '$date',
- type: '$type'
- }, count: { $sum: 1 } } },
- { $group: {
- _id: '$_id.date',
- data: { $addToSet: {
- type: '$_id.type',
- count: '$count'
- }}
- } }
- ]);
-
- datas.forEach((data: any) => {
- data.date = data._id;
- delete data._id;
-
- data.notes = (data.data.filter((x: any) => x.type == 'note')[0] || { count: 0 }).count;
- data.renotes = (data.data.filter((x: any) => x.type == 'renote')[0] || { count: 0 }).count;
- data.replies = (data.data.filter((x: any) => x.type == 'reply')[0] || { count: 0 }).count;
-
- delete data.data;
- });
-
- const graph = [];
-
- for (let i = 0; i < limit; i++) {
- const day = new Date(new Date().setDate(new Date().getDate() - i));
-
- const data = datas.filter((d: any) =>
- d.date.year == day.getFullYear() && d.date.month == day.getMonth() + 1 && d.date.day == day.getDate()
- )[0];
-
- if (data) {
- graph.push(data);
- } else {
- graph.push({
- notes: 0,
- renotes: 0,
- replies: 0
- });
- }
- }
-
- res(graph);
-});
diff --git a/src/server/api/endpoints/aggregation/users.ts b/src/server/api/endpoints/aggregation/users.ts
deleted file mode 100644
index f1e41cf170..0000000000
--- a/src/server/api/endpoints/aggregation/users.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import $ from 'cafy';
-import User from '../../../../models/user';
-
-/**
- * Aggregate users
- */
-export default (params: any) => new Promise(async (res, rej) => {
- // Get 'limit' parameter
- const [limit = 365, limitErr] = $.num.optional.range(1, 365).get(params.limit);
- if (limitErr) return rej('invalid limit param');
-
- const users = await User
- .find({}, {
- sort: {
- _id: -1
- },
- fields: {
- _id: false,
- createdAt: true,
- deletedAt: true
- }
- });
-
- const graph = [];
-
- for (let i = 0; i < limit; i++) {
- let dayStart = new Date(new Date().setDate(new Date().getDate() - i));
- dayStart = new Date(dayStart.setMilliseconds(0));
- dayStart = new Date(dayStart.setSeconds(0));
- dayStart = new Date(dayStart.setMinutes(0));
- dayStart = new Date(dayStart.setHours(0));
-
- let dayEnd = new Date(new Date().setDate(new Date().getDate() - i));
- dayEnd = new Date(dayEnd.setMilliseconds(999));
- dayEnd = new Date(dayEnd.setSeconds(59));
- dayEnd = new Date(dayEnd.setMinutes(59));
- dayEnd = new Date(dayEnd.setHours(23));
- // day = day.getTime();
-
- const total = users.filter(u =>
- u.createdAt < dayEnd && (u.deletedAt == null || u.deletedAt > dayEnd)
- ).length;
-
- const created = users.filter(u =>
- u.createdAt < dayEnd && u.createdAt > dayStart
- ).length;
-
- graph.push({
- total: total,
- created: created
- });
- }
-
- res(graph);
-});
diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts
index c2d93997a7..000a56024d 100644
--- a/src/server/api/endpoints/meta.ts
+++ b/src/server/api/endpoints/meta.ts
@@ -28,6 +28,7 @@ export default () => new Promise(async (res, rej) => {
model: os.cpus()[0].model,
cores: os.cpus().length
},
- broadcasts: meta.broadcasts
+ broadcasts: meta.broadcasts,
+ disableRegistration: meta.disableRegistration
});
});
diff --git a/src/server/api/endpoints/notes/create.ts b/src/server/api/endpoints/notes/create.ts
index 66d018618c..9cdbec5270 100644
--- a/src/server/api/endpoints/notes/create.ts
+++ b/src/server/api/endpoints/notes/create.ts
@@ -16,8 +16,7 @@ export const meta = {
limit: {
duration: ms('1hour'),
- max: 300,
- minInterval: ms('1second')
+ max: 300
},
kind: 'note-write',