feat: ノートの閲覧にログイン必須にする設定 (#14799)
* wip * wip * wip * Update packages/frontend/src/pages/note.vue Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> * wip * Update WebhookTestService.ts * Update privacy.vue * wip * rename * Update locales/ja-JP.yml Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com> * 🎨 * wip --------- Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com>
This commit is contained in:
		| @@ -39,6 +39,17 @@ export class GetterService { | ||||
| 		return note; | ||||
| 	} | ||||
|  | ||||
| 	@bindThis | ||||
| 	public async getNoteWithUser(noteId: MiNote['id']) { | ||||
| 		const note = await this.notesRepository.findOne({ where: { id: noteId }, relations: ['user'] }); | ||||
|  | ||||
| 		if (note == null) { | ||||
| 			throw new IdentifiableError('9725d0ce-ba28-4dde-95a7-2cbb2c15de24', 'No such note.'); | ||||
| 		} | ||||
|  | ||||
| 		return note; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Get user for API processing | ||||
| 	 */ | ||||
|   | ||||
| @@ -179,6 +179,7 @@ export const paramDef = { | ||||
| 		autoAcceptFollowed: { type: 'boolean' }, | ||||
| 		noCrawle: { type: 'boolean' }, | ||||
| 		preventAiLearning: { type: 'boolean' }, | ||||
| 		requireSigninToViewContents: { type: 'boolean' }, | ||||
| 		isBot: { type: 'boolean' }, | ||||
| 		isCat: { type: 'boolean' }, | ||||
| 		injectFeaturedNote: { type: 'boolean' }, | ||||
| @@ -334,6 +335,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 			if (typeof ps.autoAcceptFollowed === 'boolean') profileUpdates.autoAcceptFollowed = ps.autoAcceptFollowed; | ||||
| 			if (typeof ps.noCrawle === 'boolean') profileUpdates.noCrawle = ps.noCrawle; | ||||
| 			if (typeof ps.preventAiLearning === 'boolean') profileUpdates.preventAiLearning = ps.preventAiLearning; | ||||
| 			if (typeof ps.requireSigninToViewContents === 'boolean') updates.requireSigninToViewContents = ps.requireSigninToViewContents; | ||||
| 			if (typeof ps.isCat === 'boolean') updates.isCat = ps.isCat; | ||||
| 			if (typeof ps.injectFeaturedNote === 'boolean') profileUpdates.injectFeaturedNote = ps.injectFeaturedNote; | ||||
| 			if (typeof ps.receiveAnnouncementEmail === 'boolean') profileUpdates.receiveAnnouncementEmail = ps.receiveAnnouncementEmail; | ||||
|   | ||||
| @@ -26,6 +26,12 @@ export const meta = { | ||||
| 			code: 'NO_SUCH_NOTE', | ||||
| 			id: '24fcbfc6-2e37-42b6-8388-c29b3861a08d', | ||||
| 		}, | ||||
|  | ||||
| 		signinRequired: { | ||||
| 			message: 'Signin required.', | ||||
| 			code: 'SIGNIN_REQUIRED', | ||||
| 			id: '8e75455b-738c-471d-9f80-62693f33372e', | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
|  | ||||
| @@ -44,11 +50,15 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint- | ||||
| 		private getterService: GetterService, | ||||
| 	) { | ||||
| 		super(meta, paramDef, async (ps, me) => { | ||||
| 			const note = await this.getterService.getNote(ps.noteId).catch(err => { | ||||
| 			const note = await this.getterService.getNoteWithUser(ps.noteId).catch(err => { | ||||
| 				if (err.id === '9725d0ce-ba28-4dde-95a7-2cbb2c15de24') throw new ApiError(meta.errors.noSuchNote); | ||||
| 				throw err; | ||||
| 			}); | ||||
|  | ||||
| 			if (note.user!.requireSigninToViewContents && me == null) { | ||||
| 				throw new ApiError(meta.errors.signinRequired); | ||||
| 			} | ||||
|  | ||||
| 			return await this.noteEntityService.pack(note, me, { | ||||
| 				detail: true, | ||||
| 			}); | ||||
|   | ||||
| @@ -42,6 +42,12 @@ export const meta = { | ||||
| 			code: 'BOTH_WITH_REPLIES_AND_WITH_FILES', | ||||
| 			id: '91c8cb9f-36ed-46e7-9ca2-7df96ed6e222', | ||||
| 		}, | ||||
|  | ||||
| 		signinRequired: { | ||||
| 			message: 'Signin required.', | ||||
| 			code: 'SIGNIN_REQUIRED', | ||||
| 			id: 'd1588a9e-4b4d-4c07-807f-16f1486577a2', | ||||
| 		}, | ||||
| 	}, | ||||
| } as const; | ||||
|  | ||||
|   | ||||
| @@ -601,12 +601,15 @@ export class ClientServerService { | ||||
| 		fastify.get<{ Params: { note: string; } }>('/notes/:note', async (request, reply) => { | ||||
| 			vary(reply.raw, 'Accept'); | ||||
|  | ||||
| 			const note = await this.notesRepository.findOneBy({ | ||||
| 				id: request.params.note, | ||||
| 				visibility: In(['public', 'home']), | ||||
| 			const note = await this.notesRepository.findOne({ | ||||
| 				where: { | ||||
| 					id: request.params.note, | ||||
| 					visibility: In(['public', 'home']), | ||||
| 				}, | ||||
| 				relations: ['user'], | ||||
| 			}); | ||||
|  | ||||
| 			if (note) { | ||||
| 			if (note && !note.user!.requireSigninToViewContents) { | ||||
| 				const _note = await this.noteEntityService.pack(note); | ||||
| 				const profile = await this.userProfilesRepository.findOneByOrFail({ userId: note.userId }); | ||||
| 				reply.header('Cache-Control', 'public, max-age=15'); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo