This commit is contained in:
syuilo 2025-05-04 14:46:40 +09:00
parent 3cbe8edc1d
commit 4237284c18
10 changed files with 36 additions and 36 deletions

10
locales/index.d.ts vendored
View File

@ -6381,18 +6381,18 @@ export interface Locale extends ILocale {
*/
"deliverSuspendedSoftwareDescription": string;
/**
*
*
*/
"visibleUserGeneratedContentsForNonLoggedInVisitors": string;
"userGeneratedContentsVisibilityForVisitor": string;
/**
*
*/
"visibleUserGeneratedContentsForNonLoggedInVisitors_description": string;
"userGeneratedContentsVisibilityForVisitor_description": string;
/**
*
*/
"visibleUserGeneratedContentsForNonLoggedInVisitors_description2": string;
"_visibleUserGeneratedContentsForNonLoggedInVisitors": {
"userGeneratedContentsVisibilityForVisitor_description2": string;
"_userGeneratedContentsVisibilityForVisitor": {
/**
*
*/

View File

@ -1621,11 +1621,11 @@ _serverSettings:
thisSettingWillAutomaticallyOffWhenModeratorsInactive: "一定期間モデレーターのアクティビティが検出されなかった場合、スパム防止のためこの設定は自動でオフになります。"
deliverSuspendedSoftware: "配信停止中のソフトウェア"
deliverSuspendedSoftwareDescription: "脆弱性などの理由で、サーバーのソフトウェアの名前及びバージョンの範囲を指定して配信を停止できます。このバージョン情報はサーバーが提供したものであり、信頼性は保証されません。バージョン指定には semver の範囲指定が使用できますが、>= 2024.3.1 と指定すると 2024.3.1-custom.0 のようなカスタムバージョンが含まれないため、>= 2024.3.1-0 のように prerelease の指定を行うことを推奨します。"
visibleUserGeneratedContentsForNonLoggedInVisitors: "非ログイン訪問者に対するユーザー作成コンテンツの公開範囲"
visibleUserGeneratedContentsForNonLoggedInVisitors_description: "モデレーションが行き届きにくい不適切なリモートコンテンツなどが、自サーバー経由で図らずもインターネットに公開されてしまうことによるトラブル防止などに役立ちます。"
visibleUserGeneratedContentsForNonLoggedInVisitors_description2: "サーバーで受信したリモートのコンテンツを含め、サーバー内の全てのコンテンツを無条件でインターネットに公開することはリスクが伴います。特に、分散型の特性を知らない閲覧者にとっては、リモートのコンテンツであってもサーバー内で作成されたコンテンツであると誤って認識してしまう可能性があるため、注意が必要です。"
userGeneratedContentsVisibilityForVisitor: "非利用者に対するユーザー作成コンテンツの公開範囲"
userGeneratedContentsVisibilityForVisitor_description: "モデレーションが行き届きにくい不適切なリモートコンテンツなどが、自サーバー経由で図らずもインターネットに公開されてしまうことによるトラブル防止などに役立ちます。"
userGeneratedContentsVisibilityForVisitor_description2: "サーバーで受信したリモートのコンテンツを含め、サーバー内の全てのコンテンツを無条件でインターネットに公開することはリスクが伴います。特に、分散型の特性を知らない閲覧者にとっては、リモートのコンテンツであってもサーバー内で作成されたコンテンツであると誤って認識してしまう可能性があるため、注意が必要です。"
_visibleUserGeneratedContentsForNonLoggedInVisitors:
_userGeneratedContentsVisibilityForVisitor:
all: "全て公開"
localOnly: "ローカルコンテンツのみ公開し、リモートコンテンツは非公開"
none: "全て非公開"

View File

@ -7,10 +7,10 @@ export class VisibleUserGeneratedContentsForNonLoggedInVisitors1746330901644 {
name = 'VisibleUserGeneratedContentsForNonLoggedInVisitors1746330901644'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" ADD "visibleUserGeneratedContentsForNonLoggedInVisitors" character varying(128) NOT NULL DEFAULT 'local'`);
await queryRunner.query(`ALTER TABLE "meta" ADD "ugcVisibilityForVisitor" character varying(128) NOT NULL DEFAULT 'local'`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "visibleUserGeneratedContentsForNonLoggedInVisitors"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "ugcVisibilityForVisitor"`);
}
}

View File

@ -663,7 +663,7 @@ export class MiMeta {
length: 128,
default: 'local',
})
public visibleUserGeneratedContentsForNonLoggedInVisitors: 'all' | 'local' | 'none';
public ugcVisibilityForVisitor: 'all' | 'local' | 'none';
@Column('varchar', {
length: 64,

View File

@ -546,7 +546,7 @@ export const meta = {
},
},
},
visibleUserGeneratedContentsForNonLoggedInVisitors: {
ugcVisibilityForVisitor: {
type: 'string',
enum: ['all', 'local', 'none'],
optional: false, nullable: false,
@ -696,7 +696,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
federation: instance.federation,
federationHosts: instance.federationHosts,
deliverSuspendedSoftware: instance.deliverSuspendedSoftware,
visibleUserGeneratedContentsForNonLoggedInVisitors: instance.visibleUserGeneratedContentsForNonLoggedInVisitors,
ugcVisibilityForVisitor: instance.ugcVisibilityForVisitor,
};
});
}

View File

@ -196,7 +196,7 @@ export const paramDef = {
required: ['software', 'versionRange'],
},
},
visibleUserGeneratedContentsForNonLoggedInVisitors: {
ugcVisibilityForVisitor: {
type: 'string',
enum: ['all', 'local', 'none'],
},
@ -694,8 +694,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
set.federationHosts = ps.federationHosts.filter(Boolean).map(x => x.toLowerCase());
}
if (ps.visibleUserGeneratedContentsForNonLoggedInVisitors !== undefined) {
set.visibleUserGeneratedContentsForNonLoggedInVisitors = ps.visibleUserGeneratedContentsForNonLoggedInVisitors;
if (ps.ugcVisibilityForVisitor !== undefined) {
set.ugcVisibilityForVisitor = ps.ugcVisibilityForVisitor;
}
const before = await this.metaService.fetch(true);

View File

@ -64,11 +64,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
throw new ApiError(meta.errors.signinRequired);
}
if (this.serverSettings.visibleUserGeneratedContentsForNonLoggedInVisitors === 'none' && me == null) {
if (this.serverSettings.ugcVisibilityForVisitor === 'none' && me == null) {
throw new ApiError(meta.errors.signinRequired);
}
if (this.serverSettings.visibleUserGeneratedContentsForNonLoggedInVisitors === 'local' && note.userHost != null && me == null) {
if (this.serverSettings.ugcVisibilityForVisitor === 'local' && note.userHost != null && me == null) {
throw new ApiError(meta.errors.signinRequired);
}

View File

@ -515,8 +515,8 @@ export class ClientServerService {
if (
user != null && (
this.meta.visibleUserGeneratedContentsForNonLoggedInVisitors === 'all' ||
(this.meta.visibleUserGeneratedContentsForNonLoggedInVisitors === 'local' && user.host == null)
this.meta.ugcVisibilityForVisitor === 'all' ||
(this.meta.ugcVisibilityForVisitor === 'local' && user.host == null)
)
) {
const profile = await this.userProfilesRepository.findOneByOrFail({ userId: user.id });
@ -585,8 +585,8 @@ export class ClientServerService {
if (
note &&
!note.user!.requireSigninToViewContents &&
(this.meta.visibleUserGeneratedContentsForNonLoggedInVisitors === 'all' ||
(this.meta.visibleUserGeneratedContentsForNonLoggedInVisitors === 'local' && note.userHost == null)
(this.meta.ugcVisibilityForVisitor === 'all' ||
(this.meta.ugcVisibilityForVisitor === 'local' && note.userHost == null)
)
) {
const _note = await this.noteEntityService.pack(note);

View File

@ -20,14 +20,14 @@ SPDX-License-Identifier: AGPL-3.0-only
<template #label>{{ i18n.ts.emailRequiredForSignup }} ({{ i18n.ts.recommended }})</template>
</MkSwitch>
<MkSelect v-model="visibleUserGeneratedContentsForNonLoggedInVisitors" @update:modelValue="onChange_visibleUserGeneratedContentsForNonLoggedInVisitors">
<template #label>{{ i18n.ts._serverSettings.visibleUserGeneratedContentsForNonLoggedInVisitors }}</template>
<option value="all">{{ i18n.ts._serverSettings._visibleUserGeneratedContentsForNonLoggedInVisitors.all }}</option>
<option value="local">{{ i18n.ts._serverSettings._visibleUserGeneratedContentsForNonLoggedInVisitors.localOnly }} ({{ i18n.ts.recommended }})</option>
<option value="none">{{ i18n.ts._serverSettings._visibleUserGeneratedContentsForNonLoggedInVisitors.none }}</option>
<MkSelect v-model="ugcVisibilityForVisitor" @update:modelValue="onChange_ugcVisibilityForVisitor">
<template #label>{{ i18n.ts._serverSettings.userGeneratedContentsVisibilityForVisitor }}</template>
<option value="all">{{ i18n.ts._serverSettings._userGeneratedContentsVisibilityForVisitor.all }}</option>
<option value="local">{{ i18n.ts._serverSettings._userGeneratedContentsVisibilityForVisitor.localOnly }} ({{ i18n.ts.recommended }})</option>
<option value="none">{{ i18n.ts._serverSettings._userGeneratedContentsVisibilityForVisitor.none }}</option>
<template #caption>
<div>{{ i18n.ts._serverSettings.visibleUserGeneratedContentsForNonLoggedInVisitors_description }}</div>
<div><i class="ti ti-alert-triangle" style="color: var(--MI_THEME-warn);"></i> {{ i18n.ts._serverSettings.visibleUserGeneratedContentsForNonLoggedInVisitors_description2 }}</div>
<div>{{ i18n.ts._serverSettings.userGeneratedContentsVisibilityForVisitor_description }}</div>
<div><i class="ti ti-alert-triangle" style="color: var(--MI_THEME-warn);"></i> {{ i18n.ts._serverSettings.userGeneratedContentsVisibilityForVisitor_description2 }}</div>
</template>
</MkSelect>
@ -152,7 +152,7 @@ import MkSelect from '@/components/MkSelect.vue';
const enableRegistration = ref<boolean>(false);
const emailRequiredForSignup = ref<boolean>(false);
const visibleUserGeneratedContentsForNonLoggedInVisitors = ref<string>('all');
const ugcVisibilityForVisitor = ref<string>('all');
const sensitiveWords = ref<string>('');
const prohibitedWords = ref<string>('');
const prohibitedWordsForNameOfUser = ref<string>('');
@ -166,7 +166,7 @@ async function init() {
const meta = await misskeyApi('admin/meta');
enableRegistration.value = !meta.disableRegistration;
emailRequiredForSignup.value = meta.emailRequiredForSignup;
visibleUserGeneratedContentsForNonLoggedInVisitors.value = meta.visibleUserGeneratedContentsForNonLoggedInVisitors;
ugcVisibilityForVisitor.value = meta.ugcVisibilityForVisitor;
sensitiveWords.value = meta.sensitiveWords.join('\n');
prohibitedWords.value = meta.prohibitedWords.join('\n');
prohibitedWordsForNameOfUser.value = meta.prohibitedWordsForNameOfUser.join('\n');
@ -203,9 +203,9 @@ function onChange_emailRequiredForSignup(value: boolean) {
});
}
function onChange_visibleUserGeneratedContentsForNonLoggedInVisitors(value: string) {
function onChange_ugcVisibilityForVisitor(value: string) {
os.apiWithDialog('admin/update-meta', {
visibleUserGeneratedContentsForNonLoggedInVisitors: value,
ugcVisibilityForVisitor: value,
}).then(() => {
fetchInstance(true);
});

View File

@ -8770,7 +8770,7 @@ export type operations = {
versionRange: string;
}[];
/** @enum {string} */
visibleUserGeneratedContentsForNonLoggedInVisitors: 'all' | 'local' | 'none';
ugcVisibilityForVisitor: 'all' | 'local' | 'none';
};
};
};
@ -11442,7 +11442,7 @@ export type operations = {
versionRange: string;
}[];
/** @enum {string} */
visibleUserGeneratedContentsForNonLoggedInVisitors?: 'all' | 'local' | 'none';
ugcVisibilityForVisitor?: 'all' | 'local' | 'none';
};
};
};