summaryrefslogtreecommitdiff
path: root/packages/backend/src/core
diff options
context:
space:
mode:
authorおさむのひと <46447427+samunohito@users.noreply.github.com>2024-07-29 21:31:32 +0900
committerGitHub <noreply@github.com>2024-07-29 21:31:32 +0900
commit72bc78974657b22ab6b1f5a36f6144c294e36de3 (patch)
treeb2d25d52e254f91e1b718123c25e73afea2039bb /packages/backend/src/core
parentNew Crowdin updates (#13916) (diff)
downloadsharkey-72bc78974657b22ab6b1f5a36f6144c294e36de3.tar.gz
sharkey-72bc78974657b22ab6b1f5a36f6144c294e36de3.tar.bz2
sharkey-72bc78974657b22ab6b1f5a36f6144c294e36de3.zip
feature: ユーザ作成時にSystemWebhookを発信できるようにする (#14321)
* feature: ユーザ作成時にSystemWebhookを発信できるようにする * fix CHANGELOG.md
Diffstat (limited to 'packages/backend/src/core')
-rw-r--r--packages/backend/src/core/AbuseReportNotificationService.ts2
-rw-r--r--packages/backend/src/core/SignupService.ts5
-rw-r--r--packages/backend/src/core/UserService.ts24
3 files changed, 28 insertions, 3 deletions
diff --git a/packages/backend/src/core/AbuseReportNotificationService.ts b/packages/backend/src/core/AbuseReportNotificationService.ts
index 42e5931212..7be5335885 100644
--- a/packages/backend/src/core/AbuseReportNotificationService.ts
+++ b/packages/backend/src/core/AbuseReportNotificationService.ts
@@ -44,7 +44,7 @@ export class AbuseReportNotificationService implements OnApplicationShutdown {
/**
* 管理者用Redisイベントを用いて{@link abuseReports}の内容を管理者各位に通知する.
- * 通知先ユーザは{@link RoleService.getModeratorIds}の取得結果に依る.
+ * 通知先ユーザは{@link getModeratorIds}の取得結果に依る.
*
* @see RoleService.getModeratorIds
* @see GlobalEventService.publishAdminStream
diff --git a/packages/backend/src/core/SignupService.ts b/packages/backend/src/core/SignupService.ts
index 5522ecd6cc..de45898328 100644
--- a/packages/backend/src/core/SignupService.ts
+++ b/packages/backend/src/core/SignupService.ts
@@ -21,6 +21,7 @@ import { bindThis } from '@/decorators.js';
import UsersChart from '@/core/chart/charts/users.js';
import { UtilityService } from '@/core/UtilityService.js';
import { MetaService } from '@/core/MetaService.js';
+import { UserService } from '@/core/UserService.js';
@Injectable()
export class SignupService {
@@ -35,6 +36,7 @@ export class SignupService {
private usedUsernamesRepository: UsedUsernamesRepository,
private utilityService: UtilityService,
+ private userService: UserService,
private userEntityService: UserEntityService,
private idService: IdService,
private metaService: MetaService,
@@ -148,7 +150,8 @@ export class SignupService {
}));
});
- this.usersChart.update(account, true);
+ this.usersChart.update(account, true).then();
+ this.userService.notifySystemWebhook(account, 'userCreated').then();
return { account, secret };
}
diff --git a/packages/backend/src/core/UserService.ts b/packages/backend/src/core/UserService.ts
index 72fa4d928d..9b1961c631 100644
--- a/packages/backend/src/core/UserService.ts
+++ b/packages/backend/src/core/UserService.ts
@@ -8,15 +8,18 @@ import type { FollowingsRepository, UsersRepository } from '@/models/_.js';
import type { MiUser } from '@/models/User.js';
import { DI } from '@/di-symbols.js';
import { bindThis } from '@/decorators.js';
+import { SystemWebhookService } from '@/core/SystemWebhookService.js';
+import { UserEntityService } from '@/core/entities/UserEntityService.js';
@Injectable()
export class UserService {
constructor(
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
-
@Inject(DI.followingsRepository)
private followingsRepository: FollowingsRepository,
+ private systemWebhookService: SystemWebhookService,
+ private userEntityService: UserEntityService,
) {
}
@@ -50,4 +53,23 @@ export class UserService {
});
}
}
+
+ /**
+ * SystemWebhookを用いてユーザに関する操作内容を管理者各位に通知する.
+ * ここではJobQueueへのエンキューのみを行うため、即時実行されない.
+ *
+ * @see SystemWebhookService.enqueueSystemWebhook
+ */
+ @bindThis
+ public async notifySystemWebhook(user: MiUser, type: 'userCreated') {
+ const packedUser = await this.userEntityService.pack(user, null, { schema: 'UserLite' });
+ const recipientWebhookIds = await this.systemWebhookService.fetchSystemWebhooks({ isActive: true, on: [type] });
+ for (const webhookId of recipientWebhookIds) {
+ await this.systemWebhookService.enqueueSystemWebhook(
+ webhookId,
+ type,
+ packedUser,
+ );
+ }
+ }
}