diff options
| author | syuilo <4439005+syuilo@users.noreply.github.com> | 2025-03-02 20:06:20 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-02 20:06:20 +0900 |
| commit | 616cccf2511337fc181d0b6aa693b7091c7ba57b (patch) | |
| tree | b1971c2c9793628a9005bbc88883068e91fdb344 /packages/frontend/src | |
| parent | Update CHANGELOG.md (diff) | |
| download | sharkey-616cccf2511337fc181d0b6aa693b7091c7ba57b.tar.gz sharkey-616cccf2511337fc181d0b6aa693b7091c7ba57b.tar.bz2 sharkey-616cccf2511337fc181d0b6aa693b7091c7ba57b.zip | |
enhance(backend): refine system account (#15530)
* wip
* wip
* wip
* Update SystemAccountService.ts
* Update 1740121393164-system-accounts.js
* Update DeleteAccountService.ts
* wip
* wip
* wip
* wip
* Update 1740121393164-system-accounts.js
* Update RepositoryModule.ts
* wip
* wip
* wip
* Update ApRendererService.ts
* wip
* wip
* Update SystemAccountService.ts
* fix tests
* fix tests
* fix tests
* fix tests
* fix tests
* fix tests
* add print logs
* ログが長すぎて出てないかもしれない
* fix migration
* refactor
* fix fed-tests
* Update RelayService.ts
* merge
* Update user.test.ts
* chore: emit log
* fix: tweak sleep duration
* fix: exit 1
* fix: wait for misskey processes to become healthy
* fix: longer sleep for user deletion
* fix: make sleep longer again
* デッドロック解消の試み
https://github.com/misskey-dev/misskey/issues/15005
* Revert "デッドロック解消の試み"
This reverts commit 266141f66fb584371bbb56ef7eba04e14bcff94d.
* wip
* Update SystemAccountService.ts
---------
Co-authored-by: おさむのひと <46447427+samunohito@users.noreply.github.com>
Co-authored-by: zyoshoka <107108195+zyoshoka@users.noreply.github.com>
Diffstat (limited to 'packages/frontend/src')
| -rw-r--r-- | packages/frontend/src/pages/admin-user.vue | 44 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin/modlog.ModLog.vue | 5 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin/settings.vue | 32 | ||||
| -rw-r--r-- | packages/frontend/src/pages/user/home.vue | 3 |
4 files changed, 51 insertions, 33 deletions
diff --git a/packages/frontend/src/pages/admin-user.vue b/packages/frontend/src/pages/admin-user.vue index fa08c213e2..578945bf07 100644 --- a/packages/frontend/src/pages/admin-user.vue +++ b/packages/frontend/src/pages/admin-user.vue @@ -22,7 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-only </div> </div> - <MkInfo v-if="['instance.actor', 'relay.actor'].includes(user.username)">{{ i18n.ts.isSystemAccount }}</MkInfo> + <MkInfo v-if="isSystem">{{ i18n.ts.isSystemAccount }}</MkInfo> <FormLink v-if="user.host" :to="`/instance-info/${user.host}`">{{ i18n.ts.instanceInfo }}</FormLink> @@ -37,21 +37,23 @@ SPDX-License-Identifier: AGPL-3.0-only <template #value><span class="_monospace">{{ ips[0].ip }}</span></template> </MkKeyValue> --> - <MkKeyValue oneline> - <template #key>{{ i18n.ts.createdAt }}</template> - <template #value><span class="_monospace"><MkTime :time="user.createdAt" :mode="'detail'"/></span></template> - </MkKeyValue> - <MkKeyValue v-if="info" oneline> - <template #key>{{ i18n.ts.lastActiveDate }}</template> - <template #value><span class="_monospace"><MkTime :time="info.lastActiveDate" :mode="'detail'"/></span></template> - </MkKeyValue> - <MkKeyValue v-if="info" oneline> - <template #key>{{ i18n.ts.email }}</template> - <template #value><span class="_monospace">{{ info.email }}</span></template> - </MkKeyValue> + <template v-if="!isSystem"> + <MkKeyValue oneline> + <template #key>{{ i18n.ts.createdAt }}</template> + <template #value><span class="_monospace"><MkTime :time="user.createdAt" :mode="'detail'"/></span></template> + </MkKeyValue> + <MkKeyValue v-if="info" oneline> + <template #key>{{ i18n.ts.lastActiveDate }}</template> + <template #value><span class="_monospace"><MkTime :time="info.lastActiveDate" :mode="'detail'"/></span></template> + </MkKeyValue> + <MkKeyValue v-if="info" oneline> + <template #key>{{ i18n.ts.email }}</template> + <template #value><span class="_monospace">{{ info.email }}</span></template> + </MkKeyValue> + </template> </div> - <MkTextarea v-model="moderationNote" manualSave> + <MkTextarea v-if="!isSystem" v-model="moderationNote" manualSave> <template #label>{{ i18n.ts.moderationNote }}</template> <template #caption>{{ i18n.ts.moderationNoteDescription }}</template> </MkTextarea> @@ -92,7 +94,7 @@ SPDX-License-Identifier: AGPL-3.0-only </FormSection> --> - <FormSection> + <FormSection v-if="!isSystem"> <div class="_gaps"> <MkSwitch v-model="suspended" @update:modelValue="toggleSuspend">{{ i18n.ts.suspend }}</MkSwitch> @@ -252,6 +254,7 @@ const ap = ref<any>(null); const moderator = ref(false); const silenced = ref(false); const suspended = ref(false); +const isSystem = ref(false); const moderationNote = ref(''); const filesPagination = { endpoint: 'admin/drive/files' as const, @@ -288,6 +291,7 @@ function createFetcher() { silenced.value = info.value.isSilenced; suspended.value = info.value.isSuspended; moderationNote.value = info.value.moderationNote; + isSystem.value = user.value.host == null && user.value.username.includes('.'); watch(moderationNote, async () => { await misskeyApi('admin/update-user-note', { userId: user.value.id, text: moderationNote.value }); @@ -507,7 +511,15 @@ watch(user, () => { const headerActions = computed(() => []); -const headerTabs = computed(() => [{ +const headerTabs = computed(() => isSystem.value ? [{ + key: 'overview', + title: i18n.ts.overview, + icon: 'ti ti-info-circle', +}, { + key: 'raw', + title: 'Raw', + icon: 'ti ti-code', +}] : [{ key: 'overview', title: i18n.ts.overview, icon: 'ti ti-info-circle', diff --git a/packages/frontend/src/pages/admin/modlog.ModLog.vue b/packages/frontend/src/pages/admin/modlog.ModLog.vue index 1e144394fb..9bbe5f2e42 100644 --- a/packages/frontend/src/pages/admin/modlog.ModLog.vue +++ b/packages/frontend/src/pages/admin/modlog.ModLog.vue @@ -170,6 +170,11 @@ SPDX-License-Identifier: AGPL-3.0-only <CodeDiff :context="5" :hideHeader="true" :oldString="log.info.before ?? ''" :newString="log.info.after ?? ''" maxHeight="300px"/> </div> </template> + <template v-else-if="log.type === 'updateProxyAccountDescription'"> + <div :class="$style.diff"> + <CodeDiff :context="5" :hideHeader="true" :oldString="log.info.before ?? ''" :newString="log.info.after ?? ''" maxHeight="300px"/> + </div> + </template> <details> <summary>raw</summary> diff --git a/packages/frontend/src/pages/admin/settings.vue b/packages/frontend/src/pages/admin/settings.vue index ea7603a45a..aed593fc54 100644 --- a/packages/frontend/src/pages/admin/settings.vue +++ b/packages/frontend/src/pages/admin/settings.vue @@ -238,15 +238,17 @@ SPDX-License-Identifier: AGPL-3.0-only <MkFolder> <template #icon><i class="ti ti-ghost"></i></template> <template #label>{{ i18n.ts.proxyAccount }}</template> + <template v-if="proxyAccountForm.modified.value" #footer> + <MkFormFooter :form="proxyAccountForm"/> + </template> <div class="_gaps"> <MkInfo>{{ i18n.ts.proxyAccountDescription }}</MkInfo> - <MkKeyValue> - <template #key>{{ i18n.ts.proxyAccount }}</template> - <template #value>{{ proxyAccount ? `@${proxyAccount.username}` : i18n.ts.none }}</template> - </MkKeyValue> - <MkButton primary @click="chooseProxyAccount">{{ i18n.ts.selectAccount }}</MkButton> + <MkTextarea v-model="proxyAccountForm.state.description" :max="500" tall mfmAutocomplete :mfmPreview="true"> + <template #label>{{ i18n.ts._profile.description }}</template> + <template #caption>{{ i18n.ts._profile.youCanIncludeHashtags }}</template> + </MkTextarea> </div> </MkFolder> </div> @@ -256,7 +258,7 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <script lang="ts" setup> -import { ref, computed } from 'vue'; +import { ref, computed, reactive } from 'vue'; import XHeader from './_header_.vue'; import MkSwitch from '@/components/MkSwitch.vue'; import MkInput from '@/components/MkInput.vue'; @@ -277,7 +279,7 @@ import MkRadios from '@/components/MkRadios.vue'; const meta = await misskeyApi('admin/meta'); -const proxyAccount = ref(meta.proxyAccountId ? await misskeyApi('users/show', { userId: meta.proxyAccountId }) : null); +const proxyAccount = await misskeyApi('users/show', { userId: meta.proxyAccountId }); const infoForm = useForm({ name: meta.name ?? '', @@ -378,16 +380,14 @@ const federationForm = useForm({ fetchInstance(true); }); -function chooseProxyAccount() { - os.selectUser({ localOnly: true }).then(user => { - proxyAccount.value = user; - os.apiWithDialog('admin/update-meta', { - proxyAccountId: user.id, - }).then(() => { - fetchInstance(true); - }); +const proxyAccountForm = useForm({ + description: proxyAccount.description, +}, async (state) => { + await os.apiWithDialog('admin/update-proxy-account', { + description: state.description, }); -} + fetchInstance(true); +}); const headerTabs = computed(() => []); diff --git a/packages/frontend/src/pages/user/home.vue b/packages/frontend/src/pages/user/home.vue index a6a49f0ab9..92a24f99cc 100644 --- a/packages/frontend/src/pages/user/home.vue +++ b/packages/frontend/src/pages/user/home.vue @@ -13,7 +13,8 @@ SPDX-License-Identifier: AGPL-3.0-only <div class="profile _gaps"> <MkAccountMoved v-if="user.movedTo" :movedTo="user.movedTo"/> - <MkRemoteCaution v-if="user.host != null" :href="user.url ?? user.uri!" class="warn"/> + <MkRemoteCaution v-if="user.host != null" :href="user.url ?? user.uri!"/> + <MkInfo v-if="user.host == null && user.username.includes('.')">{{ i18n.ts.isSystemAccount }}</MkInfo> <div :key="user.id" class="main _panel"> <div class="banner-container" :style="style"> |