This commit is contained in:
syuilo 2025-02-21 21:00:38 +09:00
parent 4e9f22a045
commit 8c20c79cde
3 changed files with 32 additions and 16 deletions

View File

@ -9,6 +9,7 @@ import { MetaService } from '@/core/MetaService.js';
import type { Config } from '@/config.js'; import type { Config } from '@/config.js';
import { DI } from '@/di-symbols.js'; import { DI } from '@/di-symbols.js';
import { DEFAULT_POLICIES } from '@/core/RoleService.js'; import { DEFAULT_POLICIES } from '@/core/RoleService.js';
import { SystemAccountService } from '@/core/SystemAccountService.js';
export const meta = { export const meta = {
tags: ['meta'], tags: ['meta'],
@ -231,6 +232,11 @@ export const meta = {
type: 'boolean', type: 'boolean',
optional: false, nullable: false, optional: false, nullable: false,
}, },
proxyAccountId: {
type: 'string',
optional: false, nullable: true,
format: 'id',
},
email: { email: {
type: 'string', type: 'string',
optional: false, nullable: true, optional: false, nullable: true,
@ -536,10 +542,13 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private config: Config, private config: Config,
private metaService: MetaService, private metaService: MetaService,
private systemAccountService: SystemAccountService,
) { ) {
super(meta, paramDef, async () => { super(meta, paramDef, async () => {
const instance = await this.metaService.fetch(true); const instance = await this.metaService.fetch(true);
const proxy = await this.systemAccountService.fetch('proxy');
return { return {
maintainerName: instance.maintainerName, maintainerName: instance.maintainerName,
maintainerEmail: instance.maintainerEmail, maintainerEmail: instance.maintainerEmail,
@ -603,6 +612,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
sensitiveMediaDetectionSensitivity: instance.sensitiveMediaDetectionSensitivity, sensitiveMediaDetectionSensitivity: instance.sensitiveMediaDetectionSensitivity,
setSensitiveFlagAutomatically: instance.setSensitiveFlagAutomatically, setSensitiveFlagAutomatically: instance.setSensitiveFlagAutomatically,
enableSensitiveMediaDetectionForVideos: instance.enableSensitiveMediaDetectionForVideos, enableSensitiveMediaDetectionForVideos: instance.enableSensitiveMediaDetectionForVideos,
proxyAccountId: proxy.id,
email: instance.email, email: instance.email,
smtpSecure: instance.smtpSecure, smtpSecure: instance.smtpSecure,
smtpHost: instance.smtpHost, smtpHost: instance.smtpHost,

View File

@ -238,15 +238,17 @@ SPDX-License-Identifier: AGPL-3.0-only
<MkFolder> <MkFolder>
<template #icon><i class="ti ti-ghost"></i></template> <template #icon><i class="ti ti-ghost"></i></template>
<template #label>{{ i18n.ts.proxyAccount }}</template> <template #label>{{ i18n.ts.proxyAccount }}</template>
<template v-if="proxyAccountForm.modified.value" #footer>
<MkFormFooter :form="proxyAccountForm"/>
</template>
<div class="_gaps"> <div class="_gaps">
<MkInfo>{{ i18n.ts.proxyAccountDescription }}</MkInfo> <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> </div>
</MkFolder> </MkFolder>
</div> </div>
@ -256,7 +258,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, computed } from 'vue'; import { ref, computed, reactive } from 'vue';
import XHeader from './_header_.vue'; import XHeader from './_header_.vue';
import MkSwitch from '@/components/MkSwitch.vue'; import MkSwitch from '@/components/MkSwitch.vue';
import MkInput from '@/components/MkInput.vue'; import MkInput from '@/components/MkInput.vue';
@ -277,7 +279,11 @@ import MkRadios from '@/components/MkRadios.vue';
const meta = await misskeyApi('admin/meta'); 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 proxyAccountProfile = reactive({
description: proxyAccount.description,
});
const infoForm = useForm({ const infoForm = useForm({
name: meta.name ?? '', name: meta.name ?? '',
@ -378,16 +384,14 @@ const federationForm = useForm({
fetchInstance(true); fetchInstance(true);
}); });
function chooseProxyAccount() { const proxyAccountForm = useForm({
os.selectUser({ localOnly: true }).then(user => { description: proxyAccountProfile.description,
proxyAccount.value = user; }, async (state) => {
os.apiWithDialog('admin/update-meta', { await os.apiWithDialog('admin/update-proxy-account', {
proxyAccountId: user.id, description: state.description,
}).then(() => { });
fetchInstance(true); fetchInstance(true);
}); });
});
}
const headerTabs = computed(() => []); const headerTabs = computed(() => []);

View File

@ -8282,6 +8282,8 @@ export type operations = {
sensitiveMediaDetectionSensitivity: string; sensitiveMediaDetectionSensitivity: string;
setSensitiveFlagAutomatically: boolean; setSensitiveFlagAutomatically: boolean;
enableSensitiveMediaDetectionForVideos: boolean; enableSensitiveMediaDetectionForVideos: boolean;
/** Format: id */
proxyAccountId: string | null;
email: string | null; email: string | null;
smtpSecure: boolean; smtpSecure: boolean;
smtpHost: string | null; smtpHost: string | null;