fix(backend): use atomic command to improve security
Co-Authored-By: Acid Chicken <root@acid-chicken.com>
This commit is contained in:
		@@ -246,14 +246,12 @@ export class WebAuthnService {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	@bindThis
 | 
						@bindThis
 | 
				
			||||||
	public async verifyAuthentication(userId: MiUser['id'], response: AuthenticationResponseJSON): Promise<boolean> {
 | 
						public async verifyAuthentication(userId: MiUser['id'], response: AuthenticationResponseJSON): Promise<boolean> {
 | 
				
			||||||
		const challenge = await this.redisClient.get(`webauthn:challenge:${userId}`);
 | 
							const challenge = await this.redisClient.getdel(`webauthn:challenge:${userId}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (!challenge) {
 | 
							if (!challenge) {
 | 
				
			||||||
			throw new IdentifiableError('2d16e51c-007b-4edd-afd2-f7dd02c947f6', 'challenge not found');
 | 
								throw new IdentifiableError('2d16e51c-007b-4edd-afd2-f7dd02c947f6', 'challenge not found');
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		await this.redisClient.del(`webauthn:challenge:${userId}`);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		const key = await this.userSecurityKeysRepository.findOneBy({
 | 
							const key = await this.userSecurityKeysRepository.findOneBy({
 | 
				
			||||||
			id: response.id,
 | 
								id: response.id,
 | 
				
			||||||
			userId: userId,
 | 
								userId: userId,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user