diff options
| author | Hazelnoot <acomputerdog@gmail.com> | 2024-10-06 21:33:39 +0000 |
|---|---|---|
| committer | Hazelnoot <acomputerdog@gmail.com> | 2024-10-06 21:33:39 +0000 |
| commit | 934e007698aeef90b89ca41857817aa4e079696c (patch) | |
| tree | 2731c25215245ba6c9cf4b8738f6868cf33afb78 /packages | |
| parent | merge: Add option to reject reports from an instance (Resolves #579, #715, #7... (diff) | |
| parent | Merge branch 'develop' of https://activitypub.software/TransFem-org/Sharkey i... (diff) | |
| download | sharkey-934e007698aeef90b89ca41857817aa4e079696c.tar.gz sharkey-934e007698aeef90b89ca41857817aa4e079696c.tar.bz2 sharkey-934e007698aeef90b89ca41857817aa4e079696c.zip | |
merge: Add controls to delete all files or sever all relations with a remote instance (!654)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/654
Approved-by: Marie <github@yuugi.dev>
Approved-by: Hazelnoot <acomputerdog@gmail.com>
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts | 13 | ||||
| -rw-r--r-- | packages/frontend/src/pages/instance-info.vue | 45 |
2 files changed, 52 insertions, 6 deletions
diff --git a/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts b/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts index 9e93310746..601c898f52 100644 --- a/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts +++ b/packages/backend/src/server/api/endpoints/admin/federation/remove-all-following.ts @@ -31,15 +31,20 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- @Inject(DI.usersRepository) private usersRepository: UsersRepository, - @Inject(DI.notesRepository) + @Inject(DI.followingsRepository) private followingsRepository: FollowingsRepository, private queueService: QueueService, ) { super(meta, paramDef, async (ps, me) => { - const followings = await this.followingsRepository.findBy({ - followerHost: ps.host, - }); + const followings = await this.followingsRepository.findBy([ + { + followeeHost: ps.host, + }, + { + followerHost: ps.host, + }, + ]); const pairs = await Promise.all(followings.map(f => Promise.all([ this.usersRepository.findOneByOrFail({ id: f.followerId }), diff --git a/packages/frontend/src/pages/instance-info.vue b/packages/frontend/src/pages/instance-info.vue index 5401ea51e0..95371036aa 100644 --- a/packages/frontend/src/pages/instance-info.vue +++ b/packages/frontend/src/pages/instance-info.vue @@ -43,8 +43,12 @@ SPDX-License-Identifier: AGPL-3.0-only {{ i18n.ts._delivery._type[suspensionState] }} </template> </MkKeyValue> - <MkButton v-if="suspensionState === 'none'" :disabled="!instance" danger @click="stopDelivery">{{ i18n.ts._delivery.stop }}</MkButton> - <MkButton v-if="suspensionState !== 'none'" :disabled="!instance" @click="resumeDelivery">{{ i18n.ts._delivery.resume }}</MkButton> + <div class="_buttons"> + <MkButton inline :disabled="!instance" danger @click="deleteAllFiles">{{ i18n.ts.deleteAllFiles }}</MkButton> + <MkButton inline :disabled="!instance" danger @click="severAllFollowRelations">{{ i18n.ts.severAllFollowRelations }}</MkButton> + <MkButton v-if="suspensionState === 'none'" inline :disabled="!instance" danger @click="stopDelivery">{{ i18n.ts._delivery.stop }}</MkButton> + <MkButton v-if="suspensionState !== 'none'" inline :disabled="!instance" @click="resumeDelivery">{{ i18n.ts._delivery.resume }}</MkButton> + </div> <MkInfo v-if="isBaseBlocked" warn>{{ i18n.ts.blockedByBase }}</MkInfo> <MkSwitch v-model="isBlocked" :disabled="!meta || !instance || isBaseBlocked" @update:modelValue="toggleBlock">{{ i18n.ts.blockThisInstance }}</MkSwitch> <MkInfo v-if="isBaseSilenced" warn>{{ i18n.ts.silencedByBase }}</MkInfo> @@ -300,6 +304,43 @@ function refreshMetadata(): void { }); } +async function deleteAllFiles(): void { + const confirm = await os.confirm({ + type: 'danger', + text: i18n.ts.deleteAllFilesConfirm, + }); + if (confirm.canceled) return; + + if (!instance.value) throw new Error('No instance?'); + await misskeyApi('admin/federation/delete-all-files', { + host: instance.value.host, + }); + await os.alert({ + text: i18n.ts.deleteAllFilesQueued, + }); +} + +async function severAllFollowRelations(): void { + if (!instance.value) throw new Error('No instance?'); + + const confirm = await os.confirm({ + type: 'danger', + text: i18n.tsx.severAllFollowRelationsConfirm({ + instanceName: meta.value.shortName ?? meta.value.name, + followingCount: instance.value.followingCount, + followersCount: instance.value.followersCount, + }), + }); + if (confirm.canceled) return; + + await misskeyApi('admin/federation/remove-all-following', { + host: instance.value.host, + }); + await os.alert({ + text: i18n.tsx.severAllFollowRelationsQueued({ host: instance.value.host }), + }); +} + fetch(); const headerActions = computed(() => [{ |