fix(server): ノート翻訳時に公開範囲が考慮されていない問題を修正
This commit is contained in:
		
							parent
							
								
									65d9c304df
								
							
						
					
					
						commit
						1cd8bfaded
					
				
					 3 changed files with 61 additions and 0 deletions
				
			
		|  | @ -7,6 +7,12 @@ | ||||||
| 
 | 
 | ||||||
| --> | --> | ||||||
| 
 | 
 | ||||||
|  | ## 12.x.x (unreleased) | ||||||
|  | 
 | ||||||
|  | ### Bugfixes | ||||||
|  | - Dockerfileを修正 | ||||||
|  | - ノート翻訳時に公開範囲が考慮されていない問題を修正 | ||||||
|  | 
 | ||||||
| ## 12.90.0 (2021/09/04) | ## 12.90.0 (2021/09/04) | ||||||
| 
 | 
 | ||||||
| ### Improvements | ### Improvements | ||||||
|  |  | ||||||
|  | @ -18,7 +18,57 @@ export class NoteRepository extends Repository<Note> { | ||||||
| 		return x.trim().length <= 100; | 		return x.trim().length <= 100; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	public async isVisibleForMe(note: Note, meId: User['id'] | null): Promise<boolean> { | ||||||
|  | 		// visibility が specified かつ自分が指定されていなかったら非表示
 | ||||||
|  | 		if (note.visibility === 'specified') { | ||||||
|  | 			if (meId == null) { | ||||||
|  | 				return false; | ||||||
|  | 			} else if (meId === note.userId) { | ||||||
|  | 				return true; | ||||||
|  | 			} else { | ||||||
|  | 				// 指定されているかどうか
 | ||||||
|  | 				const specified = note.visibleUserIds.some((id: any) => meId === id); | ||||||
|  | 
 | ||||||
|  | 				if (specified) { | ||||||
|  | 					return true; | ||||||
|  | 				} else { | ||||||
|  | 					return false; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// visibility が followers かつ自分が投稿者のフォロワーでなかったら非表示
 | ||||||
|  | 		if (note.visibility === 'followers') { | ||||||
|  | 			if (meId == null) { | ||||||
|  | 				return false; | ||||||
|  | 			} else if (meId === note.userId) { | ||||||
|  | 				return true; | ||||||
|  | 			} else if (note.reply && (meId === note.reply.userId)) { | ||||||
|  | 				// 自分の投稿に対するリプライ
 | ||||||
|  | 				return true; | ||||||
|  | 			} else if (note.mentions && note.mentions.some(id => meId === id)) { | ||||||
|  | 				// 自分へのメンション
 | ||||||
|  | 				return true; | ||||||
|  | 			} else { | ||||||
|  | 				// フォロワーかどうか
 | ||||||
|  | 				const following = await Followings.findOne({ | ||||||
|  | 					followeeId: note.userId, | ||||||
|  | 					followerId: meId | ||||||
|  | 				}); | ||||||
|  | 
 | ||||||
|  | 				if (following == null) { | ||||||
|  | 					return false; | ||||||
|  | 				} else { | ||||||
|  | 					return true; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	private async hideNote(packedNote: PackedNote, meId: User['id'] | null) { | 	private async hideNote(packedNote: PackedNote, meId: User['id'] | null) { | ||||||
|  | 		// TODO: isVisibleForMe を使うようにしても良さそう(型違うけど)
 | ||||||
| 		let hide = false; | 		let hide = false; | ||||||
| 
 | 
 | ||||||
| 		// visibility が specified かつ自分が指定されていなかったら非表示
 | 		// visibility が specified かつ自分が指定されていなかったら非表示
 | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ import config from '@/config/index'; | ||||||
| import { getAgentByUrl } from '@/misc/fetch'; | import { getAgentByUrl } from '@/misc/fetch'; | ||||||
| import { URLSearchParams } from 'url'; | import { URLSearchParams } from 'url'; | ||||||
| import { fetchMeta } from '@/misc/fetch-meta'; | import { fetchMeta } from '@/misc/fetch-meta'; | ||||||
|  | import { Notes } from '@/models'; | ||||||
| 
 | 
 | ||||||
| export const meta = { | export const meta = { | ||||||
| 	tags: ['notes'], | 	tags: ['notes'], | ||||||
|  | @ -43,6 +44,10 @@ export default define(meta, async (ps, user) => { | ||||||
| 		throw e; | 		throw e; | ||||||
| 	}); | 	}); | ||||||
| 
 | 
 | ||||||
|  | 	if (!(await Notes.isVisibleForMe(note, user ? user.id : null))) { | ||||||
|  | 		return 204; // TODO: 良い感じのエラー返す
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if (note.text == null) { | 	if (note.text == null) { | ||||||
| 		return 204; | 		return 204; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue