mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 07:24:13 +00:00 
			
		
		
		
	fix(backend/ApRendererService): allow announces with visibility: followers (#10291)
* fix(backend/ApRendererService): allow announces with visibility: followers * Update CHANGELOG.md --------- Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
This commit is contained in:
		
							parent
							
								
									31488da40c
								
							
						
					
					
						commit
						57cac0aa23
					
				
					 4 changed files with 42 additions and 0 deletions
				
			
		| 
						 | 
					@ -28,6 +28,7 @@ You should also include the user name that made the change.
 | 
				
			||||||
- ロールで広告を無効にするとadmin/adsでプレビューがでてこない問題を修正
 | 
					- ロールで広告を無効にするとadmin/adsでプレビューがでてこない問題を修正
 | 
				
			||||||
- /api-consoleページにアクセスすると404が出る問題を修正
 | 
					- /api-consoleページにアクセスすると404が出る問題を修正
 | 
				
			||||||
- SMTP Login id length is too short
 | 
					- SMTP Login id length is too short
 | 
				
			||||||
 | 
					- API上で`visibility`を`followers`に設定してrenoteすると連合や削除で不具合が発生する問題を修正
 | 
				
			||||||
- AWS S3からのファイル削除でNoSuchKeyエラーが出ると進めらない状態になる問題を修正
 | 
					- AWS S3からのファイル削除でNoSuchKeyエラーが出ると進めらない状態になる問題を修正
 | 
				
			||||||
- fix(frontend): Safariでプラグインが複数ある場合に正常に読み込まれない問題を修正
 | 
					- fix(frontend): Safariでプラグインが複数ある場合に正常に読み込まれない問題を修正
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -91,6 +91,9 @@ export class ApRendererService {
 | 
				
			||||||
		} else if (note.visibility === 'home') {
 | 
							} else if (note.visibility === 'home') {
 | 
				
			||||||
			to = [`${attributedTo}/followers`];
 | 
								to = [`${attributedTo}/followers`];
 | 
				
			||||||
			cc = ['https://www.w3.org/ns/activitystreams#Public'];
 | 
								cc = ['https://www.w3.org/ns/activitystreams#Public'];
 | 
				
			||||||
 | 
							} else if (note.visibility === 'followers') {
 | 
				
			||||||
 | 
								to = [`${attributedTo}/followers`];
 | 
				
			||||||
 | 
								cc = [];
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			throw new Error('renderAnnounce: cannot render non-public note');
 | 
								throw new Error('renderAnnounce: cannot render non-public note');
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -136,6 +136,31 @@ describe('Note', () => {
 | 
				
			||||||
		assert.strictEqual(res.body.createdNote.renote.text, bobPost.text);
 | 
							assert.strictEqual(res.body.createdNote.renote.text, bobPost.text);
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						test('visibility: followersでrenoteできる', async () => {
 | 
				
			||||||
 | 
							const createRes = await api('/notes/create', {
 | 
				
			||||||
 | 
								text: 'test',
 | 
				
			||||||
 | 
								visibility: 'followers',
 | 
				
			||||||
 | 
							}, alice);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							assert.strictEqual(createRes.status, 200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							const renoteId = createRes.body.createdNote.id;
 | 
				
			||||||
 | 
							const renoteRes = await api('/notes/create', {
 | 
				
			||||||
 | 
								visibility: 'followers',
 | 
				
			||||||
 | 
								renoteId,
 | 
				
			||||||
 | 
							}, alice);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							assert.strictEqual(renoteRes.status, 200);
 | 
				
			||||||
 | 
							assert.strictEqual(renoteRes.body.createdNote.renoteId, renoteId);
 | 
				
			||||||
 | 
							assert.strictEqual(renoteRes.body.createdNote.visibility, 'followers');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							const deleteRes = await api('/notes/delete', {
 | 
				
			||||||
 | 
								noteId: renoteRes.body.createdNote.id,
 | 
				
			||||||
 | 
							}, alice);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							assert.strictEqual(deleteRes.status, 204);
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	test('文字数ぎりぎりで怒られない', async () => {
 | 
						test('文字数ぎりぎりで怒られない', async () => {
 | 
				
			||||||
		const post = {
 | 
							const post = {
 | 
				
			||||||
			text: '!'.repeat(3000),
 | 
								text: '!'.repeat(3000),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,12 +7,14 @@ import { jest } from '@jest/globals';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { ApNoteService } from '@/core/activitypub/models/ApNoteService.js';
 | 
					import { ApNoteService } from '@/core/activitypub/models/ApNoteService.js';
 | 
				
			||||||
import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
 | 
					import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
 | 
				
			||||||
 | 
					import { ApRendererService } from '@/core/activitypub/ApRendererService.js';
 | 
				
			||||||
import { GlobalModule } from '@/GlobalModule.js';
 | 
					import { GlobalModule } from '@/GlobalModule.js';
 | 
				
			||||||
import { CoreModule } from '@/core/CoreModule.js';
 | 
					import { CoreModule } from '@/core/CoreModule.js';
 | 
				
			||||||
import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
 | 
					import { FederatedInstanceService } from '@/core/FederatedInstanceService.js';
 | 
				
			||||||
import { LoggerService } from '@/core/LoggerService.js';
 | 
					import { LoggerService } from '@/core/LoggerService.js';
 | 
				
			||||||
import type { IActor } from '@/core/activitypub/type.js';
 | 
					import type { IActor } from '@/core/activitypub/type.js';
 | 
				
			||||||
import { MockResolver } from '../misc/mock-resolver.js';
 | 
					import { MockResolver } from '../misc/mock-resolver.js';
 | 
				
			||||||
 | 
					import { Note } from '@/models/index.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const host = 'https://host1.test';
 | 
					const host = 'https://host1.test';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,6 +35,7 @@ function createRandomActor(): IActor & { id: string } {
 | 
				
			||||||
describe('ActivityPub', () => {
 | 
					describe('ActivityPub', () => {
 | 
				
			||||||
	let noteService: ApNoteService;
 | 
						let noteService: ApNoteService;
 | 
				
			||||||
	let personService: ApPersonService;
 | 
						let personService: ApPersonService;
 | 
				
			||||||
 | 
						let rendererService: ApRendererService;
 | 
				
			||||||
	let resolver: MockResolver;
 | 
						let resolver: MockResolver;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	beforeEach(async () => {
 | 
						beforeEach(async () => {
 | 
				
			||||||
| 
						 | 
					@ -45,6 +48,7 @@ describe('ActivityPub', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		noteService = app.get<ApNoteService>(ApNoteService);
 | 
							noteService = app.get<ApNoteService>(ApNoteService);
 | 
				
			||||||
		personService = app.get<ApPersonService>(ApPersonService);
 | 
							personService = app.get<ApPersonService>(ApPersonService);
 | 
				
			||||||
 | 
							rendererService = app.get<ApRendererService>(ApRendererService);
 | 
				
			||||||
		resolver = new MockResolver(await app.resolve<LoggerService>(LoggerService));
 | 
							resolver = new MockResolver(await app.resolve<LoggerService>(LoggerService));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Prevent ApPersonService from fetching instance, as it causes Jest import-after-test error
 | 
							// Prevent ApPersonService from fetching instance, as it causes Jest import-after-test error
 | 
				
			||||||
| 
						 | 
					@ -113,4 +117,13 @@ describe('ActivityPub', () => {
 | 
				
			||||||
			assert.strictEqual(user.name, null);
 | 
								assert.strictEqual(user.name, null);
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						describe('Renderer', () => {
 | 
				
			||||||
 | 
							test('Render an announce with visibility: followers', () => {
 | 
				
			||||||
 | 
								rendererService.renderAnnounce(null, {
 | 
				
			||||||
 | 
									createdAt: new Date(0),
 | 
				
			||||||
 | 
									visibility: 'followers',
 | 
				
			||||||
 | 
								} as Note);
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue