diff options
| author | Hazelnoot <acomputerdog@gmail.com> | 2025-06-14 17:30:17 +0000 |
|---|---|---|
| committer | Hazelnoot <acomputerdog@gmail.com> | 2025-06-14 17:30:17 +0000 |
| commit | f6964f6e27d91a7f172bf3cca6f48074d9cca26d (patch) | |
| tree | 2cad26ff1cff8e98f67ff0ec22b2cd51896f35af | |
| parent | merge: Don't unfollow suspended users (!1122) (diff) | |
| parent | fix TS errors (diff) | |
| download | sharkey-f6964f6e27d91a7f172bf3cca6f48074d9cca26d.tar.gz sharkey-f6964f6e27d91a7f172bf3cca6f48074d9cca26d.tar.bz2 sharkey-f6964f6e27d91a7f172bf3cca6f48074d9cca26d.zip | |
merge: Show signup reason in user admin screen (resolves #1090) (!1114)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1114
Closes #1090
Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
| -rw-r--r-- | locales/index.d.ts | 4 | ||||
| -rw-r--r-- | packages/backend/src/core/WebhookTestService.ts | 4 | ||||
| -rw-r--r-- | packages/backend/src/models/json-schema/user.ts | 20 | ||||
| -rw-r--r-- | packages/backend/src/server/api/endpoints/admin/show-user.ts | 4 | ||||
| -rw-r--r-- | packages/backend/test/utils.ts | 2 | ||||
| -rw-r--r-- | packages/frontend/src/components/SkApprovalUser.vue | 2 | ||||
| -rw-r--r-- | packages/frontend/src/pages/admin-user.vue | 5 | ||||
| -rw-r--r-- | packages/misskey-js/src/autogen/types.ts | 9 | ||||
| -rw-r--r-- | sharkey-locales/en-US.yml | 2 |
9 files changed, 36 insertions, 16 deletions
diff --git a/locales/index.d.ts b/locales/index.d.ts index f9fcbdb238..a22a8e893e 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -13257,6 +13257,10 @@ export interface Locale extends ILocale { * ActivityPub user data in its raw form. These fields are public and accessible to other instances. */ "rawApDescription": string; + /** + * Signup Reason + */ + "signupReason": string; } declare const locales: { [lang: string]: Locale; diff --git a/packages/backend/src/core/WebhookTestService.ts b/packages/backend/src/core/WebhookTestService.ts index c4b01d535b..8dc42e45c0 100644 --- a/packages/backend/src/core/WebhookTestService.ts +++ b/packages/backend/src/core/WebhookTestService.ts @@ -13,6 +13,7 @@ import { type WebhookEventTypes } from '@/models/Webhook.js'; import { CustomEmojiService } from '@/core/CustomEmojiService.js'; import { type UserWebhookPayload, UserWebhookService } from '@/core/UserWebhookService.js'; import { QueueService } from '@/core/QueueService.js'; +import { IdService } from '@/core/IdService.js'; import { ModeratorInactivityRemainingTime } from '@/queue/processors/CheckModeratorsActivityProcessorService.js'; const oneDayMillis = 24 * 60 * 60 * 1000; @@ -166,6 +167,7 @@ export class WebhookTestService { private userWebhookService: UserWebhookService, private systemWebhookService: SystemWebhookService, private queueService: QueueService, + private readonly idService: IdService, ) { } @@ -449,6 +451,8 @@ export class WebhookTestService { offsetX: it.offsetX, offsetY: it.offsetY, })), + createdAt: this.idService.parse(user.id).date.toISOString(), + description: '', isBot: user.isBot, isCat: user.isCat, emojis: await this.customEmojiService.populateEmojis(user.emojis, user.host), diff --git a/packages/backend/src/models/json-schema/user.ts b/packages/backend/src/models/json-schema/user.ts index 2e5364f404..1678cab067 100644 --- a/packages/backend/src/models/json-schema/user.ts +++ b/packages/backend/src/models/json-schema/user.ts @@ -73,6 +73,16 @@ export const packedUserLiteSchema = { type: 'string', nullable: true, optional: false, }, + description: { + type: 'string', + nullable: true, optional: false, + example: 'Hi masters, I am Ai!', + }, + createdAt: { + type: 'string', + nullable: false, optional: false, + format: 'date-time', + }, avatarDecorations: { type: 'array', nullable: false, optional: false, @@ -278,11 +288,6 @@ export const packedUserDetailedNotMeOnlySchema = { nullable: false, optional: false, }, }, - createdAt: { - type: 'string', - nullable: false, optional: false, - format: 'date-time', - }, updatedAt: { type: 'string', nullable: true, optional: false, @@ -324,11 +329,6 @@ export const packedUserDetailedNotMeOnlySchema = { nullable: false, optional: false, example: false, }, - description: { - type: 'string', - nullable: true, optional: false, - example: 'Hi masters, I am Ai!', - }, location: { type: 'string', nullable: true, optional: false, diff --git a/packages/backend/src/server/api/endpoints/admin/show-user.ts b/packages/backend/src/server/api/endpoints/admin/show-user.ts index 6a77fc177f..6f0081f1f7 100644 --- a/packages/backend/src/server/api/endpoints/admin/show-user.ts +++ b/packages/backend/src/server/api/endpoints/admin/show-user.ts @@ -221,6 +221,10 @@ export const meta = { }, }, }, + signupReason: { + type: 'string', + optional: false, nullable: true, + }, }, }, } as const; diff --git a/packages/backend/test/utils.ts b/packages/backend/test/utils.ts index 5da5353e09..52cfb8ac93 100644 --- a/packages/backend/test/utils.ts +++ b/packages/backend/test/utils.ts @@ -652,7 +652,7 @@ export async function sendEnvResetRequest() { // 与えられた値を強制的にエラーとみなす。この関数は型安全性を破壊するため、異常系のアサーション以外で用いられるべきではない。 // FIXME(misskey-js): misskey-jsがエラー情報を公開するようになったらこの関数を廃止する -export function castAsError(obj: Record<string, unknown>): { error: ApiError } { +export function castAsError(obj: object | null | undefined): { error: ApiError } { return obj as { error: ApiError }; } diff --git a/packages/frontend/src/components/SkApprovalUser.vue b/packages/frontend/src/components/SkApprovalUser.vue index 310d044387..3f5bd345f2 100644 --- a/packages/frontend/src/components/SkApprovalUser.vue +++ b/packages/frontend/src/components/SkApprovalUser.vue @@ -19,7 +19,7 @@ SPDX-License-Identifier: AGPL-3.0-only <div>{{ email }}</div> </div> <div> - <div :class="$style.label">Reason</div> + <div :class="$style.label">{{ i18n.ts.signupReason }}</div> <div>{{ reason }}</div> </div> </div> diff --git a/packages/frontend/src/pages/admin-user.vue b/packages/frontend/src/pages/admin-user.vue index 840eff77dd..dc29ae2f80 100644 --- a/packages/frontend/src/pages/admin-user.vue +++ b/packages/frontend/src/pages/admin-user.vue @@ -130,6 +130,11 @@ SPDX-License-Identifier: AGPL-3.0-only </div> </FormSection> + <FormSection v-else-if="info.signupReason"> + <template #label>{{ i18n.ts.signupReason }}</template> + {{ info.signupReason }} + </FormSection> + <FormSection v-if="!isSystem && user && iAmModerator"> <div class="_gaps"> <MkSwitch v-model="silenced" @update:modelValue="toggleSilence">{{ i18n.ts.silence }}</MkSwitch> diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index 6cb52fcbea..8debdec9c1 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -4246,6 +4246,10 @@ export type components = { /** Format: url */ avatarUrl: string | null; avatarBlurhash: string | null; + /** @example Hi masters, I am Ai! */ + description: string | null; + /** Format: date-time */ + createdAt: string; avatarDecorations: { /** Format: id */ id: string; @@ -4304,8 +4308,6 @@ export type components = { movedTo: string | null; alsoKnownAs: string[] | null; /** Format: date-time */ - createdAt: string; - /** Format: date-time */ updatedAt: string | null; /** Format: date-time */ lastFetchedAt: string | null; @@ -4319,8 +4321,6 @@ export type components = { isSilenced: boolean; /** @example false */ isSuspended: boolean; - /** @example Hi masters, I am Ai! */ - description: string | null; location: string | null; /** @example 2018-03-12 */ birthday: string | null; @@ -11236,6 +11236,7 @@ export type operations = { remoteFollowing: number; remoteFollowers: number; }; + signupReason: string | null; }; }; }; diff --git a/sharkey-locales/en-US.yml b/sharkey-locales/en-US.yml index 5ea562d262..3f5c82f2dc 100644 --- a/sharkey-locales/en-US.yml +++ b/sharkey-locales/en-US.yml @@ -628,3 +628,5 @@ noteFooterLabel: "Note controls" rawUserDescription: "Packed user data in its raw form. Most of these fields are public and visible to all users." rawInfoDescription: "Extended user data in its raw form. These fields are private and can only be accessed by moderators." rawApDescription: "ActivityPub user data in its raw form. These fields are public and accessible to other instances." + +signupReason: "Signup Reason" |