bitwarden-estensione-browser/src/services/audit.service.ts

24 lines
901 B
TypeScript
Raw Normal View History

import { AuditService as AuditServiceAbstraction } from '../abstractions/audit.service';
import { CryptoService } from '../abstractions/crypto.service';
const PwnedPasswordsApi = 'https://api.pwnedpasswords.com/range/';
export class AuditService implements AuditServiceAbstraction {
2018-04-14 05:55:07 +02:00
constructor(private cryptoService: CryptoService) { }
async passwordLeaked(password: string): Promise<number> {
const hash = (await this.cryptoService.sha1(password)).toUpperCase();
2018-02-28 16:58:34 +01:00
const hashStart = hash.substr(0, 5);
const hashEnding = hash.substr(5);
2018-02-28 16:58:34 +01:00
const response = await fetch(PwnedPasswordsApi + hashStart);
const leakedHashes = await response.text();
2018-02-28 16:58:34 +01:00
const match = leakedHashes.split(/\r?\n/).find((v) => {
return v.split(':')[0] === hashEnding;
});
2018-02-28 16:58:34 +01:00
return match != null ? parseInt(match.split(':')[1], 10) : 0;
}
}