summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/admin
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/api/endpoints/admin')
-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
5 files changed, 249 insertions, 30 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();
+});