Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(backend): meUpdatedイベントに更新後のアカウント情報を含まないように #15063

Draft
wants to merge 5 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@
- Fix: サーバー情報メニューに区切り線が不足していたのを修正

### Server
- Enhance: WebSocketの`meUpdated`イベントに更新後のアカウント情報を含まないように
(Cherry-picked from https://github.com/okayurisotto/wisteria/commit/0d4cf43e61887c110a840f108ea5fea9afb1263b)
- Fix: ユーザーのプロフィール画面をアドレス入力などで直接表示した際に概要タブの描画に失敗する問題の修正( #15032 )
- Fix: 起動前の疎通チェックが機能しなくなっていた問題を修正
(Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/737)


## 2024.11.0

### Note
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/core/AccountMoveService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ export class AccountMoveService {

// Publish meUpdated event
const iObj = await this.userEntityService.pack(src.id, src, { schema: 'MeDetailed', includeSecrets: true });
this.globalEventService.publishMainStream(src.id, 'meUpdated', iObj);
this.globalEventService.publishMainStream(src.id, 'meUpdated');

// Unfollow after 24 hours
const followings = await this.followingsRepository.findBy({
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/core/GlobalEventService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ export interface MainEventTypes {
follow: Packed<'UserDetailedNotMe'>;
followed: Packed<'UserLite'>;
unfollow: Packed<'UserDetailedNotMe'>;
meUpdated: Packed<'MeDetailed'>;
meUpdated: undefined;
pageEvent: {
pageId: MiPage['id'];
event: string;
Expand Down
4 changes: 1 addition & 3 deletions packages/backend/src/core/UserBlockingService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,7 @@ export class UserBlockingService implements OnModuleInit {
});

if (this.userEntityService.isLocalUser(followee)) {
this.userEntityService.pack(followee, followee, {
schema: 'MeDetailed',
}).then(packed => this.globalEventService.publishMainStream(followee.id, 'meUpdated', packed));
this.globalEventService.publishMainStream(followee.id, 'meUpdated');
}

if (this.userEntityService.isLocalUser(follower) && !silent) {
Expand Down
12 changes: 3 additions & 9 deletions packages/backend/src/core/UserFollowingService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -544,9 +544,7 @@ export class UserFollowingService implements OnModuleInit {
if (this.userEntityService.isLocalUser(followee)) {
this.userEntityService.pack(follower.id, followee).then(packed => this.globalEventService.publishMainStream(followee.id, 'receiveFollowRequest', packed));

this.userEntityService.pack(followee.id, followee, {
schema: 'MeDetailed',
}).then(packed => this.globalEventService.publishMainStream(followee.id, 'meUpdated', packed));
this.globalEventService.publishMainStream(followee.id, 'meUpdated');

// 通知を作成
this.notificationService.createNotification(followee.id, 'receiveFollowRequest', {
Expand Down Expand Up @@ -592,9 +590,7 @@ export class UserFollowingService implements OnModuleInit {
followerId: follower.id,
});

this.userEntityService.pack(followee.id, followee, {
schema: 'MeDetailed',
}).then(packed => this.globalEventService.publishMainStream(followee.id, 'meUpdated', packed));
this.globalEventService.publishMainStream(followee.id, 'meUpdated');
}

@bindThis
Expand All @@ -619,9 +615,7 @@ export class UserFollowingService implements OnModuleInit {
this.deliverAccept(follower, followee as MiPartialLocalUser, request.requestId ?? undefined);
}

this.userEntityService.pack(followee.id, followee, {
schema: 'MeDetailed',
}).then(packed => this.globalEventService.publishMainStream(followee.id, 'meUpdated', packed));
this.globalEventService.publishMainStream(followee.id, 'meUpdated');
}

@bindThis
Expand Down
5 changes: 1 addition & 4 deletions packages/backend/src/server/ServerService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -212,10 +212,7 @@ export class ServerService implements OnApplicationShutdown {
emailVerifyCode: null,
});

this.globalEventService.publishMainStream(profile.userId, 'meUpdated', await this.userEntityService.pack(profile.userId, { id: profile.userId }, {
schema: 'MeDetailed',
includeSecrets: true,
}));
this.globalEventService.publishMainStream(profile.userId, 'meUpdated');

reply.code(200).send('Verification succeeded! メールアドレスの認証に成功しました。');
return;
Expand Down
7 changes: 1 addition & 6 deletions packages/backend/src/server/api/endpoints/i/2fa/done.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import * as OTPAuth from 'otpauth';
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import type { UserProfilesRepository } from '@/models/_.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { DI } from '@/di-symbols.js';
Expand Down Expand Up @@ -44,7 +43,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
@Inject(DI.userProfilesRepository)
private userProfilesRepository: UserProfilesRepository,

private userEntityService: UserEntityService,
private globalEventService: GlobalEventService,
) {
super(meta, paramDef, async (ps, me) => {
Expand Down Expand Up @@ -76,10 +74,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
});

// Publish meUpdated event
this.globalEventService.publishMainStream(me.id, 'meUpdated', await this.userEntityService.pack(me.id, me, {
schema: 'MeDetailed',
includeSecrets: true,
}));
this.globalEventService.publishMainStream(me.id, 'meUpdated');

return {
backupCodes: backupCodes,
Expand Down
7 changes: 1 addition & 6 deletions packages/backend/src/server/api/endpoints/i/2fa/key-done.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import bcrypt from 'bcryptjs';
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { DI } from '@/di-symbols.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import type { UserProfilesRepository, UserSecurityKeysRepository } from '@/models/_.js';
Expand Down Expand Up @@ -67,7 +66,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {

private webAuthnService: WebAuthnService,
private userAuthService: UserAuthService,
private userEntityService: UserEntityService,
private globalEventService: GlobalEventService,
) {
super(meta, paramDef, async (ps, me) => {
Expand Down Expand Up @@ -110,10 +108,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
});

// Publish meUpdated event
this.globalEventService.publishMainStream(me.id, 'meUpdated', await this.userEntityService.pack(me.id, me, {
schema: 'MeDetailed',
includeSecrets: true,
}));
this.globalEventService.publishMainStream(me.id, 'meUpdated');

return {
id: keyId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import type { UserProfilesRepository, UserSecurityKeysRepository } from '@/models/_.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { DI } from '@/di-symbols.js';
Expand Down Expand Up @@ -42,7 +41,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
@Inject(DI.userSecurityKeysRepository)
private userSecurityKeysRepository: UserSecurityKeysRepository,

private userEntityService: UserEntityService,
private globalEventService: GlobalEventService,
) {
super(meta, paramDef, async (ps, me) => {
Expand Down Expand Up @@ -73,10 +71,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
});

// Publish meUpdated event
this.globalEventService.publishMainStream(me.id, 'meUpdated', await this.userEntityService.pack(me.id, me, {
schema: 'MeDetailed',
includeSecrets: true,
}));
this.globalEventService.publishMainStream(me.id, 'meUpdated');
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import bcrypt from 'bcryptjs';
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { UserProfilesRepository, UserSecurityKeysRepository } from '@/models/_.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { DI } from '@/di-symbols.js';
import { ApiError } from '@/server/api/error.js';
Expand Down Expand Up @@ -46,7 +45,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
@Inject(DI.userProfilesRepository)
private userProfilesRepository: UserProfilesRepository,

private userEntityService: UserEntityService,
private userAuthService: UserAuthService,
private globalEventService: GlobalEventService,
) {
Expand Down Expand Up @@ -96,10 +94,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
}

// Publish meUpdated event
this.globalEventService.publishMainStream(me.id, 'meUpdated', await this.userEntityService.pack(me.id, me, {
schema: 'MeDetailed',
includeSecrets: true,
}));
this.globalEventService.publishMainStream(me.id, 'meUpdated');

return {};
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import bcrypt from 'bcryptjs';
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import type { UserProfilesRepository } from '@/models/_.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { DI } from '@/di-symbols.js';
Expand Down Expand Up @@ -42,7 +41,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
@Inject(DI.userProfilesRepository)
private userProfilesRepository: UserProfilesRepository,

private userEntityService: UserEntityService,
private userAuthService: UserAuthService,
private globalEventService: GlobalEventService,
) {
Expand Down Expand Up @@ -75,10 +73,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
});

// Publish meUpdated event
this.globalEventService.publishMainStream(me.id, 'meUpdated', await this.userEntityService.pack(me.id, me, {
schema: 'MeDetailed',
includeSecrets: true,
}));
this.globalEventService.publishMainStream(me.id, 'meUpdated');
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import bcrypt from 'bcryptjs';
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { UserSecurityKeysRepository } from '@/models/_.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { DI } from '@/di-symbols.js';
import { ApiError } from '../../../error.js';
Expand Down Expand Up @@ -47,7 +46,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
@Inject(DI.userSecurityKeysRepository)
private userSecurityKeysRepository: UserSecurityKeysRepository,

private userEntityService: UserEntityService,
private globalEventService: GlobalEventService,
) {
super(meta, paramDef, async (ps, me) => {
Expand All @@ -68,10 +66,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
});

// Publish meUpdated event
this.globalEventService.publishMainStream(me.id, 'meUpdated', await this.userEntityService.pack(me.id, me, {
schema: 'MeDetailed',
includeSecrets: true,
}));
this.globalEventService.publishMainStream(me.id, 'meUpdated');

return {};
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
});

// Publish meUpdated event
this.globalEventService.publishMainStream(me.id, 'meUpdated', iObj);
this.globalEventService.publishMainStream(me.id, 'meUpdated');

if (ps.email != null) {
const code = secureRndstr(16, { chars: L_CHARS });
Expand Down
2 changes: 1 addition & 1 deletion packages/backend/src/server/api/endpoints/i/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
this.cacheService.userProfileCache.set(user.id, updatedProfile);

// Publish meUpdated event
this.globalEventService.publishMainStream(user.id, 'meUpdated', iObj);
this.globalEventService.publishMainStream(user.id, 'meUpdated');

// 鍵垢を解除したとき、溜まっていたフォローリクエストがあるならすべて承認
if (user.isLocked && ps.isLocked === false) {
Expand Down
6 changes: 3 additions & 3 deletions packages/frontend/src/boot/main-boot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { i18n } from '@/i18n.js';
import { alert, confirm, popup, post, toast } from '@/os.js';
import { useStream } from '@/stream.js';
import * as sound from '@/scripts/sound.js';
import { $i, signout, updateAccountPartial } from '@/account.js';
import { $i, refreshAccount, signout, updateAccountPartial } from '@/account.js';
import { instance } from '@/instance.js';
import { ColdDeviceStorage, defaultStore } from '@/store.js';
import { reactionPicker } from '@/scripts/reaction-picker.js';
Expand Down Expand Up @@ -320,8 +320,8 @@ export async function mainBoot() {
const main = markRaw(stream.useChannel('main', null, 'System'));

// 自分の情報が更新されたとき
main.on('meUpdated', i => {
updateAccountPartial(i);
main.on('meUpdated', () => {
refreshAccount();
});

main.on('readAllNotifications', () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/misskey-js/etc/misskey-js.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -598,7 +598,7 @@ export type Channels = {
follow: (payload: UserDetailedNotMe) => void;
followed: (payload: UserDetailed | UserLite) => void;
unfollow: (payload: UserDetailed) => void;
meUpdated: (payload: UserDetailed) => void;
meUpdated: () => void;
pageEvent: (payload: PageEvent) => void;
urlUploadFinished: (payload: {
marker: string;
Expand Down
2 changes: 1 addition & 1 deletion packages/misskey-js/src/streaming.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export type Channels = {
follow: (payload: UserDetailedNotMe) => void; // 自分が他人をフォローしたとき
followed: (payload: UserDetailed | UserLite) => void; // 他人が自分をフォローしたとき
unfollow: (payload: UserDetailed) => void; // 自分が他人をフォロー解除したとき
meUpdated: (payload: UserDetailed) => void;
meUpdated: () => void;
pageEvent: (payload: PageEvent) => void;
urlUploadFinished: (payload: { marker: string; file: DriveFile; }) => void;
readAllNotifications: () => void;
Expand Down
Loading