Merge b8926866f7
into 752606fe88
This commit is contained in:
commit
4784f99289
|
@ -68,6 +68,8 @@
|
||||||
- Fix: アカウント削除のモデレーションログが動作していないのを修正 (#14996)
|
- Fix: アカウント削除のモデレーションログが動作していないのを修正 (#14996)
|
||||||
- Fix: リノートミュートが新規投稿通知に対して作用していなかった問題を修正
|
- Fix: リノートミュートが新規投稿通知に対して作用していなかった問題を修正
|
||||||
- Fix: セキュリティに関する修正
|
- Fix: セキュリティに関する修正
|
||||||
|
- Fix: ユーザーミュートにおいて、ノート内のメンションが考慮されていなかった問題を修正
|
||||||
|
- これにより、第三者から自分に対するノートを意図せず取り逃してしまう可能性があったため、通知欄ではメンションを考慮しないままになっています
|
||||||
|
|
||||||
### Misskey.js
|
### Misskey.js
|
||||||
- Fix: Stream初期化時、別途WebSocketを指定する場合の型定義を修正
|
- Fix: Stream初期化時、別途WebSocketを指定する場合の型定義を修正
|
||||||
|
|
|
@ -127,13 +127,18 @@ export class QueryService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public generateMutedUserQuery(q: SelectQueryBuilder<any>, me: { id: MiUser['id'] }, exclude?: { id: MiUser['id'] }): void {
|
public generateMutedUserQuery(q: SelectQueryBuilder<any>, me: { id: MiUser['id'] }, exclude?: { id: MiUser['id'] }, checkMentions = true): void {
|
||||||
const mutingQuery = this.mutingsRepository.createQueryBuilder('muting')
|
const mutingQuery = this.mutingsRepository.createQueryBuilder('muting')
|
||||||
.select('muting.muteeId')
|
.select('muting.muteeId')
|
||||||
.where('muting.muterId = :muterId', { muterId: me.id });
|
.where('muting.muterId = :muterId', { muterId: me.id });
|
||||||
|
|
||||||
|
const mutingArrayQuery = this.mutingsRepository.createQueryBuilder('muting')
|
||||||
|
.select('array_agg(muting.muteeId)', 'muting.muteeIdArray')
|
||||||
|
.where('muting.muterId = :muterId', { muterId: me.id });
|
||||||
|
|
||||||
if (exclude) {
|
if (exclude) {
|
||||||
mutingQuery.andWhere('muting.muteeId != :excludeId', { excludeId: exclude.id });
|
mutingQuery.andWhere('muting.muteeId != :excludeId', { excludeId: exclude.id });
|
||||||
|
mutingArrayQuery.andWhere('muting.muteeId != :excludeId', { excludeId: exclude.id });
|
||||||
}
|
}
|
||||||
|
|
||||||
const mutingInstanceQuery = this.userProfilesRepository.createQueryBuilder('user_profile')
|
const mutingInstanceQuery = this.userProfilesRepository.createQueryBuilder('user_profile')
|
||||||
|
@ -172,7 +177,18 @@ export class QueryService {
|
||||||
.orWhere(`NOT ((${ mutingInstanceQuery.getQuery() })::jsonb ? note.renoteUserHost)`);
|
.orWhere(`NOT ((${ mutingInstanceQuery.getQuery() })::jsonb ? note.renoteUserHost)`);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
// 投稿に含まれるメンションの相手をミュートしていない
|
||||||
|
if (checkMentions) {
|
||||||
|
q.andWhere(new Brackets(qb => {
|
||||||
|
qb
|
||||||
|
.where('note.mentions IS NULL')
|
||||||
|
.orWhere(`NOT EXISTS (${ mutingQuery.getQuery() })`)
|
||||||
|
.orWhere(`NOT (note.mentions && (${ mutingArrayQuery.getQuery() }))`);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
q.setParameters(mutingQuery.getParameters());
|
q.setParameters(mutingQuery.getParameters());
|
||||||
|
q.setParameters(mutingArrayQuery.getParameters());
|
||||||
q.setParameters(mutingInstanceQuery.getParameters());
|
q.setParameters(mutingInstanceQuery.getParameters());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,10 @@ export function isUserRelated(note: any, userIds: Set<string>, ignoreAuthor = fa
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (note.mentions != null && note.mentions.filter((userId: string) => userId !== note.userId && userIds.has(userId)).length > 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (note.reply != null && note.reply.userId !== note.userId && userIds.has(note.reply.userId)) {
|
if (note.reply != null && note.reply.userId !== note.userId && userIds.has(note.reply.userId)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
.leftJoinAndSelect('renote.user', 'renoteUser');
|
.leftJoinAndSelect('renote.user', 'renoteUser');
|
||||||
|
|
||||||
this.queryService.generateVisibilityQuery(query, me);
|
this.queryService.generateVisibilityQuery(query, me);
|
||||||
this.queryService.generateMutedUserQuery(query, me);
|
this.queryService.generateMutedUserQuery(query, me, undefined, false); // 通知系ではメンションを確認しないようにする
|
||||||
this.queryService.generateMutedNoteThreadQuery(query, me);
|
this.queryService.generateMutedNoteThreadQuery(query, me);
|
||||||
this.queryService.generateBlockedUserQuery(query, me);
|
this.queryService.generateBlockedUserQuery(query, me);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue