honour blocks and "signing required" for note versions

This commit is contained in:
dakkar 2024-11-23 12:37:15 +00:00
parent a019f9766a
commit c4334bff81
1 changed files with 17 additions and 4 deletions

View File

@ -27,6 +27,12 @@ export const meta = {
code: 'NO_SUCH_NOTE', code: 'NO_SUCH_NOTE',
id: '24fcbfc6-2e37-42b6-8388-c29b3861a08d', id: '24fcbfc6-2e37-42b6-8388-c29b3861a08d',
}, },
signinRequired: {
message: 'Signin required.',
code: 'SIGNIN_REQUIRED',
id: '8e75455b-738c-471d-9f80-62693f33372e',
},
}, },
} as const; } as const;
@ -43,23 +49,30 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
constructor( constructor(
@Inject(DI.notesRepository) @Inject(DI.notesRepository)
private notesRepository: NotesRepository, private notesRepository: NotesRepository,
private getterService: GetterService, private getterService: GetterService,
private queryService: QueryService, private queryService: QueryService,
) { ) {
super(meta, paramDef, async (ps, me) => { super(meta, paramDef, async (ps, me) => {
const query = await this.notesRepository.createQueryBuilder('note') const query = await this.notesRepository.createQueryBuilder('note')
.select('note.id') .where('note.id = :noteId', { noteId: ps.noteId })
.where('note.id = :noteId', { noteId: ps.noteId }); .innerJoinAndSelect('note.user', 'user');
this.queryService.generateVisibilityQuery(query, me); this.queryService.generateVisibilityQuery(query, me);
if (me) {
this.queryService.generateBlockedUserQuery(query, me);
}
const note = await query.getOne(); const note = await query.getOne();
if (note === null) { if (note === null) {
throw new ApiError(meta.errors.noSuchNote); throw new ApiError(meta.errors.noSuchNote);
} }
if (note.user!.requireSigninToViewContents && me == null) {
throw new ApiError(meta.errors.signinRequired);
}
const edits = await this.getterService.getEdits(ps.noteId).catch(err => { const edits = await this.getterService.getEdits(ps.noteId).catch(err => {
if (err.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') throw new ApiError(meta.errors.noSuchNote); if (err.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') throw new ApiError(meta.errors.noSuchNote);
throw err; throw err;