1
0
mirror of https://github.com/bitwarden/browser.git synced 2025-01-30 22:41:33 +01:00

[PM-3155] CLI: Editing a cipher with a non-discoverable passkey causes the passkey to be removed (#6055)

* Added fido2keyexport for the CLI and added the fido2key field to the login response for the CLI

* Added fido2keyexport for the CLI and added the fido2key field to the login response for the CLI

* Removed unneccesary code

* Added non discoverable passkey to template
This commit is contained in:
SmithThe4th 2023-08-29 12:57:01 -04:00 committed by GitHub
parent fb4655a770
commit 419737d293
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 102 additions and 0 deletions

View File

@ -0,0 +1,91 @@
import { EncString } from "../../platform/models/domain/enc-string";
import { Fido2KeyView } from "../../vault/models/view/fido2-key.view";
import { Fido2Key as Fido2KeyDomain } from "./../../vault/models/domain/fido2-key";
export class Fido2KeyExport {
static template(): Fido2KeyExport {
const req = new Fido2KeyExport();
req.nonDiscoverableId = "keyId";
req.keyType = "keyType";
req.keyAlgorithm = "keyAlgorithm";
req.keyCurve = "keyCurve";
req.keyValue = "keyValue";
req.rpId = "rpId";
req.userHandle = "userHandle";
req.counter = "counter";
req.rpName = "rpName";
req.userName = "userName";
return req;
}
static toView(req: Fido2KeyExport, view = new Fido2KeyView()) {
view.nonDiscoverableId = req.nonDiscoverableId;
view.keyType = req.keyType as "public-key";
view.keyAlgorithm = req.keyAlgorithm as "ECDSA";
view.keyCurve = req.keyCurve as "P-256";
view.keyValue = req.keyValue;
view.rpId = req.rpId;
view.userHandle = req.userHandle;
view.counter = parseInt(req.counter);
view.rpName = req.rpName;
view.userName = req.userName;
return view;
}
static toDomain(req: Fido2KeyExport, domain = new Fido2KeyDomain()) {
domain.nonDiscoverableId =
req.nonDiscoverableId != null ? new EncString(req.nonDiscoverableId) : null;
domain.keyType = req.keyType != null ? new EncString(req.keyType) : null;
domain.keyAlgorithm = req.keyAlgorithm != null ? new EncString(req.keyAlgorithm) : null;
domain.keyCurve = req.keyCurve != null ? new EncString(req.keyCurve) : null;
domain.keyValue = req.keyValue != null ? new EncString(req.keyValue) : null;
domain.rpId = req.rpId != null ? new EncString(req.rpId) : null;
domain.userHandle = req.userHandle != null ? new EncString(req.userHandle) : null;
domain.counter = req.counter != null ? new EncString(req.counter) : null;
domain.rpName = req.rpName != null ? new EncString(req.rpName) : null;
domain.userName = req.userName != null ? new EncString(req.userName) : null;
return domain;
}
nonDiscoverableId: string;
keyType: string;
keyAlgorithm: string;
keyCurve: string;
keyValue: string;
rpId: string;
userHandle: string;
counter: string;
rpName: string;
userName: string;
constructor(o?: Fido2KeyView | Fido2KeyDomain) {
if (o == null) {
return;
}
if (o instanceof Fido2KeyView) {
this.nonDiscoverableId = o.nonDiscoverableId;
this.keyType = o.keyType;
this.keyAlgorithm = o.keyAlgorithm;
this.keyCurve = o.keyCurve;
this.keyValue = o.keyValue;
this.rpId = o.rpId;
this.userHandle = o.userHandle;
this.counter = String(o.counter);
this.rpName = o.rpName;
this.userName = o.userName;
} else {
this.nonDiscoverableId = o.nonDiscoverableId?.encryptedString;
this.keyType = o.keyType?.encryptedString;
this.keyAlgorithm = o.keyAlgorithm?.encryptedString;
this.keyCurve = o.keyCurve?.encryptedString;
this.keyValue = o.keyValue?.encryptedString;
this.rpId = o.rpId?.encryptedString;
this.userHandle = o.userHandle?.encryptedString;
this.counter = o.counter?.encryptedString;
this.rpName = o.rpName?.encryptedString;
this.userName = o.userName?.encryptedString;
}
}
}

View File

@ -2,6 +2,7 @@ import { EncString } from "../../platform/models/domain/enc-string";
import { Login as LoginDomain } from "../../vault/models/domain/login";
import { LoginView } from "../../vault/models/view/login.view";
import { Fido2KeyExport } from "./fido2key.export";
import { LoginUriExport } from "./login-uri.export";
export class LoginExport {
@ -11,6 +12,7 @@ export class LoginExport {
req.username = "jdoe";
req.password = "myp@ssword123";
req.totp = "JBSWY3DPEHPK3PXP";
req.fido2Key = Fido2KeyExport.template();
return req;
}
@ -21,6 +23,9 @@ export class LoginExport {
view.username = req.username;
view.password = req.password;
view.totp = req.totp;
if (req.fido2Key != null) {
view.fido2Key = Fido2KeyExport.toView(req.fido2Key);
}
return view;
}
@ -31,6 +36,7 @@ export class LoginExport {
domain.username = req.username != null ? new EncString(req.username) : null;
domain.password = req.password != null ? new EncString(req.password) : null;
domain.totp = req.totp != null ? new EncString(req.totp) : null;
//left out fido2Key for now
return domain;
}
@ -38,6 +44,7 @@ export class LoginExport {
username: string;
password: string;
totp: string;
fido2Key: Fido2KeyExport = null;
constructor(o?: LoginView | LoginDomain) {
if (o == null) {
@ -52,6 +59,10 @@ export class LoginExport {
}
}
if (o.fido2Key != null) {
this.fido2Key = new Fido2KeyExport(o.fido2Key);
}
if (o instanceof LoginView) {
this.username = o.username;
this.password = o.password;