summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api
diff options
context:
space:
mode:
authorMarie <Marie@kaifa.ch>2023-12-21 22:24:23 +0100
committerMarie <Marie@kaifa.ch>2023-12-21 22:24:23 +0100
commit90f8d8e575fadd60792514151610305bfb52a77b (patch)
treef836d1f597e0dc13e46c0b1ad78496f8cbd845b9 /packages/backend/src/server/api
parentupd: show reload dialog for note design (diff)
downloadsharkey-90f8d8e575fadd60792514151610305bfb52a77b.tar.gz
sharkey-90f8d8e575fadd60792514151610305bfb52a77b.tar.bz2
sharkey-90f8d8e575fadd60792514151610305bfb52a77b.zip
upd: fix tag view not respecting blocks and suspensions
Closes #234
Diffstat (limited to 'packages/backend/src/server/api')
-rw-r--r--packages/backend/src/server/api/endpoints/notes/search-by-tag.ts25
1 files changed, 22 insertions, 3 deletions
diff --git a/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts b/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts
index bc33d6948c..89e05fd57e 100644
--- a/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts
+++ b/packages/backend/src/server/api/endpoints/notes/search-by-tag.ts
@@ -13,6 +13,8 @@ import { QueryService } from '@/core/QueryService.js';
import { NoteEntityService } from '@/core/entities/NoteEntityService.js';
import { DI } from '@/di-symbols.js';
import { MetaService } from '@/core/MetaService.js';
+import { CacheService } from '@/core/CacheService.js';
+import { UtilityService } from '@/core/UtilityService.js';
export const meta = {
tags: ['notes', 'hashtags'],
@@ -73,23 +75,32 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private noteEntityService: NoteEntityService,
private queryService: QueryService,
private metaService: MetaService,
+ private cacheService: CacheService,
+ private utilityService: UtilityService,
) {
super(meta, paramDef, async (ps, me) => {
+ const meta = await this.metaService.fetch(true);
+
const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), ps.sinceId, ps.untilId)
+ .andWhere('note.visibility = \'public\'')
.innerJoinAndSelect('note.user', 'user')
.leftJoinAndSelect('note.reply', 'reply')
.leftJoinAndSelect('note.renote', 'renote')
.leftJoinAndSelect('reply.user', 'replyUser')
.leftJoinAndSelect('renote.user', 'renoteUser');
- const meta = await this.metaService.fetch(true);
-
if (!meta.enableBotTrending) query.andWhere('user.isBot = FALSE');
this.queryService.generateVisibilityQuery(query, me);
if (me) this.queryService.generateMutedUserQuery(query, me);
if (me) this.queryService.generateBlockedUserQuery(query, me);
+ const [
+ followings,
+ ] = me ? await Promise.all([
+ this.cacheService.userFollowingsCache.fetch(me.id),
+ ]) : [undefined];
+
try {
if (ps.tag) {
if (!safeForSql(normalizeForSearch(ps.tag))) throw new Error('Injection');
@@ -140,7 +151,15 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
}
// Search notes
- const notes = await query.limit(ps.limit).getMany();
+ let notes = await query.limit(ps.limit).getMany();
+
+ notes = notes.filter(note => {
+ if (note.user?.isSilenced && me && followings && note.userId !== me.id && !followings[note.userId]) return false;
+ if (note.user?.isSuspended) return false;
+ if (this.utilityService.isBlockedHost(meta.blockedHosts, note.userHost)) return false;
+ if (this.utilityService.isSilencedHost(meta.silencedHosts, note.userHost)) return false;
+ return true;
+ });
return await this.noteEntityService.packMany(notes, me);
});