mirror of
https://github.com/bitwarden/browser.git
synced 2025-01-31 22:51:28 +01:00
[EC-598] fix: properly convert credentials to guid raw format
This commit is contained in:
parent
c882c37f82
commit
80fbfc9d13
@ -618,7 +618,11 @@ export class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Convert raw 16 byte array to standard format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) UUID. */
|
/** Convert raw 16 byte array to standard format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) UUID. */
|
||||||
static guidToStandardFormat(arr: Uint8Array) {
|
static guidToStandardFormat(bufferSource: BufferSource) {
|
||||||
|
const arr =
|
||||||
|
bufferSource instanceof ArrayBuffer
|
||||||
|
? new Uint8Array(bufferSource)
|
||||||
|
: new Uint8Array(bufferSource.buffer);
|
||||||
// Note: Be careful editing this code! It's been tuned for performance
|
// Note: Be careful editing this code! It's been tuned for performance
|
||||||
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
||||||
const guid = (
|
const guid = (
|
||||||
|
@ -103,7 +103,7 @@ describe("FidoAuthenticatorService", () => {
|
|||||||
params = await createParams({
|
params = await createParams({
|
||||||
excludeCredentialDescriptorList: [
|
excludeCredentialDescriptorList: [
|
||||||
{
|
{
|
||||||
id: Fido2Utils.stringToBuffer(excludedCipherView.fido2Key.nonDiscoverableId),
|
id: Utils.guidToRawFormat(excludedCipherView.fido2Key.nonDiscoverableId),
|
||||||
type: "public-key",
|
type: "public-key",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -161,7 +161,7 @@ describe("FidoAuthenticatorService", () => {
|
|||||||
excludedCipherView = await excludedCipher.decrypt();
|
excludedCipherView = await excludedCipher.decrypt();
|
||||||
params = await createParams({
|
params = await createParams({
|
||||||
excludeCredentialDescriptorList: [
|
excludeCredentialDescriptorList: [
|
||||||
{ id: Fido2Utils.stringToBuffer(excludedCipher.id), type: "public-key" },
|
{ id: Utils.guidToRawFormat(excludedCipher.id), type: "public-key" },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
cipherService.get.mockImplementation(async (id) =>
|
cipherService.get.mockImplementation(async (id) =>
|
||||||
|
@ -53,13 +53,10 @@ export class Fido2AuthenticatorService implements Fido2AuthenticatorServiceAbstr
|
|||||||
throw new Fido2AutenticatorError(Fido2AutenticatorErrorCode.Constraint);
|
throw new Fido2AutenticatorError(Fido2AutenticatorErrorCode.Constraint);
|
||||||
}
|
}
|
||||||
|
|
||||||
const isExcluded = await this.vaultContainsId(
|
const isExcluded = await this.vaultContainsCredentials(params.excludeCredentialDescriptorList);
|
||||||
params.excludeCredentialDescriptorList.map((key) => Fido2Utils.bufferToString(key.id))
|
|
||||||
);
|
|
||||||
|
|
||||||
if (isExcluded) {
|
if (isExcluded) {
|
||||||
await this.userInterface.informExcludedCredential(
|
await this.userInterface.informExcludedCredential(
|
||||||
[Fido2Utils.bufferToString(params.excludeCredentialDescriptorList[0].id)],
|
[Utils.guidToStandardFormat(params.excludeCredentialDescriptorList[0].id)],
|
||||||
{
|
{
|
||||||
credentialName: params.rpEntity.name,
|
credentialName: params.rpEntity.name,
|
||||||
userName: params.userEntity.name,
|
userName: params.userEntity.name,
|
||||||
@ -152,9 +149,23 @@ export class Fido2AuthenticatorService implements Fido2AuthenticatorServiceAbstr
|
|||||||
throw new Error("Not implemented");
|
throw new Error("Not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
private async vaultContainsId(ids: string[]): Promise<boolean> {
|
private async vaultContainsCredentials(
|
||||||
const ciphers = await this.cipherService.getAllDecrypted();
|
credentials: PublicKeyCredentialDescriptor[]
|
||||||
|
): Promise<boolean> {
|
||||||
|
const ids: string[] = [];
|
||||||
|
|
||||||
|
for (const credential of credentials) {
|
||||||
|
try {
|
||||||
|
ids.push(Utils.guidToStandardFormat(credential.id));
|
||||||
|
// eslint-disable-next-line no-empty
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ids.length === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ciphers = await this.cipherService.getAllDecrypted();
|
||||||
return ciphers.some(
|
return ciphers.some(
|
||||||
(cipher) =>
|
(cipher) =>
|
||||||
(cipher.type === CipherType.Fido2Key && ids.includes(cipher.id)) ||
|
(cipher.type === CipherType.Fido2Key && ids.includes(cipher.id)) ||
|
||||||
|
Loading…
Reference in New Issue
Block a user