summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-09-22 22:53:41 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-09-22 22:53:41 +0900
commit338793d891d1657f158cd4dc83f998e124bd7e45 (patch)
treed47080ad4fcff61ad5eafdb8eb1e3ca997739115 /src/server/api/endpoints
parentMerge branch 'develop' (diff)
parent12.91.0 (diff)
downloadmisskey-338793d891d1657f158cd4dc83f998e124bd7e45.tar.gz
misskey-338793d891d1657f158cd4dc83f998e124bd7e45.tar.bz2
misskey-338793d891d1657f158cd4dc83f998e124bd7e45.zip
Merge branch 'develop'
Diffstat (limited to 'src/server/api/endpoints')
-rw-r--r--src/server/api/endpoints/admin/accounts/delete.ts58
-rw-r--r--src/server/api/endpoints/antennas/notes.ts5
-rw-r--r--src/server/api/endpoints/i/delete-account.ts4
-rw-r--r--src/server/api/endpoints/reset-db.ts2
4 files changed, 68 insertions, 1 deletions
diff --git a/src/server/api/endpoints/admin/accounts/delete.ts b/src/server/api/endpoints/admin/accounts/delete.ts
new file mode 100644
index 0000000000..4e8a559805
--- /dev/null
+++ b/src/server/api/endpoints/admin/accounts/delete.ts
@@ -0,0 +1,58 @@
+import $ from 'cafy';
+import define from '../../../define';
+import { Users } from '@/models/index';
+import { doPostSuspend } from '@/services/suspend-user';
+import { publishUserEvent } from '@/services/stream';
+import { createDeleteAccountJob } from '@/queue';
+import { ID } from '@/misc/cafy-id';
+
+export const meta = {
+ tags: ['admin'],
+
+ requireCredential: true as const,
+ requireModerator: true,
+
+ params: {
+ userId: {
+ validator: $.type(ID),
+ },
+ }
+};
+
+export default define(meta, async (ps, me) => {
+ const user = await Users.findOne(ps.userId);
+
+ if (user == null) {
+ throw new Error('user not found');
+ }
+
+ if (user.isAdmin) {
+ throw new Error('cannot suspend admin');
+ }
+
+ if (user.isModerator) {
+ throw new Error('cannot suspend moderator');
+ }
+
+ if (Users.isLocalUser(user)) {
+ // 物理削除する前にDelete activityを送信する
+ await doPostSuspend(user).catch(e => {});
+
+ createDeleteAccountJob(user, {
+ soft: false
+ });
+ } else {
+ createDeleteAccountJob(user, {
+ soft: true // リモートユーザーの削除は、完全にDBから物理削除してしまうと再度連合してきてアカウントが復活する可能性があるため、soft指定する
+ });
+ }
+
+ await Users.update(user.id, {
+ isDeleted: true,
+ });
+
+ if (Users.isLocalUser(user)) {
+ // Terminate streaming
+ publishUserEvent(user.id, 'terminate', {});
+ }
+});
diff --git a/src/server/api/endpoints/antennas/notes.ts b/src/server/api/endpoints/antennas/notes.ts
index 3c8a4fbdae..1759e95b4c 100644
--- a/src/server/api/endpoints/antennas/notes.ts
+++ b/src/server/api/endpoints/antennas/notes.ts
@@ -1,6 +1,7 @@
import $ from 'cafy';
import { ID } from '@/misc/cafy-id';
import define from '../../define';
+import readNote from '@/services/note/read';
import { Antennas, Notes, AntennaNotes } from '@/models/index';
import { makePaginationQuery } from '../../common/make-pagination-query';
import { generateVisibilityQuery } from '../../common/generate-visibility-query';
@@ -84,5 +85,9 @@ export default define(meta, async (ps, user) => {
.take(ps.limit!)
.getMany();
+ if (notes.length > 0) {
+ readNote(user.id, notes);
+ }
+
return await Notes.packMany(notes, user);
});
diff --git a/src/server/api/endpoints/i/delete-account.ts b/src/server/api/endpoints/i/delete-account.ts
index 77f11925cd..10e5adf64a 100644
--- a/src/server/api/endpoints/i/delete-account.ts
+++ b/src/server/api/endpoints/i/delete-account.ts
@@ -35,7 +35,9 @@ export default define(meta, async (ps, user) => {
// 物理削除する前にDelete activityを送信する
await doPostSuspend(user).catch(e => {});
- createDeleteAccountJob(user);
+ createDeleteAccountJob(user, {
+ soft: false
+ });
await Users.update(user.id, {
isDeleted: true,
diff --git a/src/server/api/endpoints/reset-db.ts b/src/server/api/endpoints/reset-db.ts
index f430869302..f0a9dae4ff 100644
--- a/src/server/api/endpoints/reset-db.ts
+++ b/src/server/api/endpoints/reset-db.ts
@@ -18,4 +18,6 @@ export default define(meta, async (ps, user) => {
if (process.env.NODE_ENV !== 'test') throw 'NODE_ENV is not a test';
await resetDb();
+
+ await new Promise(resolve => setTimeout(resolve, 1000));
});