From 59eec67cd431843af88aa2dedded63a167cd97e3 Mon Sep 17 00:00:00 2001 From: nipil Date: Sun, 18 Oct 2026 18:02:58 +0200 Subject: [PATCH] FIX: update models from vaultwarden 1.37.2 api response What is included: - Identity / IdentityData - CipherType.SshKey / SshKeyCipher - SshKeyData - _CipherBase - add bankAccount - add driversLicense - add passport - fix sshKey type Patch derived from the following cipher summary === Cipher type 1 (47 unique keys) === attachments -> values: ['NoneType', 'list'] bankAccount -> values: ['NoneType'] card -> values: ['NoneType'] collectionIds -> values: ['list'] creationDate -> values: ['str'] deletedDate -> values: ['NoneType', 'str'] driversLicense -> values: ['NoneType'] fields -> values: ['list'] id -> values: ['str'] identity -> values: ['NoneType'] key -> values: ['NoneType'] login -> values: ['dict'] name -> values: ['str'] notes -> values: ['NoneType', 'str'] object -> values: ['str'] organizationId -> values: ['str'] organizationUseTotp -> values: ['bool'] passport -> values: ['NoneType'] passwordHistory -> values: ['list'] reprompt -> values: ['int'] revisionDate -> values: ['str'] secureNote -> values: ['NoneType'] sshKey -> values: ['NoneType'] type -> values: ['int'] attachments.fileName -> values: ['str'] attachments.id -> values: ['str'] attachments.key -> values: ['str'] attachments.object -> values: ['str'] attachments.size -> values: ['str'] attachments.sizeName -> values: ['str'] attachments.url -> values: ['str'] fields.name -> values: ['str'] fields.type -> values: ['int'] fields.value -> values: ['str'] login.autofillOnPageLoad -> values: ['NoneType'] login.fido2Credentials -> values: ['list'] login.password -> values: ['NoneType', 'str'] login.passwordRevisionDate -> values: ['NoneType', 'str'] login.totp -> values: ['NoneType', 'str'] login.uri -> values: ['NoneType', 'str'] login.uris -> values: ['list'] login.username -> values: ['NoneType', 'str'] passwordHistory.lastUsedDate -> values: ['str'] passwordHistory.password -> values: ['str'] login.uris.match -> values: ['NoneType', 'int'] login.uris.uri -> values: ['str'] login.uris.uriChecksum -> values: ['str'] === Cipher type 5 (27 unique keys) === attachments -> values: ['NoneType'] bankAccount -> values: ['NoneType'] card -> values: ['NoneType'] collectionIds -> values: ['list'] creationDate -> values: ['str'] deletedDate -> values: ['NoneType', 'str'] driversLicense -> values: ['NoneType'] fields -> values: ['list'] id -> values: ['str'] identity -> values: ['NoneType'] key -> values: ['NoneType'] login -> values: ['NoneType'] name -> values: ['str'] notes -> values: ['NoneType'] object -> values: ['str'] organizationId -> values: ['str'] organizationUseTotp -> values: ['bool'] passport -> values: ['NoneType'] passwordHistory -> values: ['list'] reprompt -> values: ['int'] revisionDate -> values: ['str'] secureNote -> values: ['NoneType'] sshKey -> values: ['dict'] type -> values: ['int'] sshKey.keyFingerprint -> values: ['str'] sshKey.privateKey -> values: ['str'] sshKey.publicKey -> values: ['str'] --- src/vaultwarden/models/bitwarden.py | 48 +++++++++++++++++++++++++++-- src/vaultwarden/models/enum.py | 1 + 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/vaultwarden/models/bitwarden.py b/src/vaultwarden/models/bitwarden.py index 8e81b68..3f0506b 100644 --- a/src/vaultwarden/models/bitwarden.py +++ b/src/vaultwarden/models/bitwarden.py @@ -186,6 +186,36 @@ class Config: type: int +class IdentityData(BitwardenBaseModel): + class Config: + extra = "forbid" + + middleName: str | None = None + address1: str | None = None + address2: str | None = None + city: str | None = None + state: str | None = None + postalCode: str | None = None + country: str | None = None + company: str | None = None + email: str | None = None + phone: str | None = None + ssn: str | None = None + nationality: str | None = None + citizenId: str | None = None + licenseNumber: str | None = None + passportNumber: str | None = None + + +class SshKeyData(BitwardenBaseModel): + class Config: + extra = "forbid" + + keyFingerprint: Annotated[str, WrapValidator(decode_string)] | None = None + privateKey: Annotated[str, WrapValidator(decode_string)] | None = None + publicKey: Annotated[str, WrapValidator(decode_string)] | None = None + + class Attachment(BitwardenBaseModel): class Config: extra = "forbid" @@ -220,8 +250,11 @@ class Config: notes: Annotated[str, WrapValidator(decode_string)] | None = None reprompt: int revisionDate: str - sshKey: str | None + sshKey: SshKeyData | None = None passwordHistory: list[PasswordChange] + bankAccount: dict | None = None + driversLicense: dict | None = None + passport: dict | None = None object: str | None = None attachments: list[Attachment] | None = None @@ -331,11 +364,22 @@ class Identity(_CipherBase): card: None = None identity: None = None + data: IdentityData | None = None + + +class SshKeyCipher(_CipherBase): + Type: Literal[CipherType.SshKey] + + login: None = None + secureNote: None = None + card: None = None + identity: None = None + data: None = None CipherDetails = Annotated[ - Union[Login, SecureNote, Card, Identity], Field(discriminator="Type") + Union[Login, SecureNote, Card, Identity, SshKeyCipher], Field(discriminator="Type") ] diff --git a/src/vaultwarden/models/enum.py b/src/vaultwarden/models/enum.py index ece782e..e04e10e 100644 --- a/src/vaultwarden/models/enum.py +++ b/src/vaultwarden/models/enum.py @@ -21,6 +21,7 @@ class CipherType(IntEnum): SecureNote = 2 Card = 3 Identity = 4 + SshKey = 5 class VaultwardenUserStatus(IntEnum):