Skip to main content

AttachmentsClient

Struct AttachmentsClient 

Source
pub struct AttachmentsClient {
    pub(crate) key_store: KeyStore<KeySlotIds>,
    pub(crate) api_configurations: Arc<ApiConfigurations>,
    pub(crate) repository: Option<Arc<dyn Repository<Cipher>>>,
    pub(crate) http_client: Client,
}
Expand description

Wrapper for attachment-specific cipher operations.

Fields§

§key_store: KeyStore<KeySlotIds>§api_configurations: Arc<ApiConfigurations>§repository: Option<Arc<dyn Repository<Cipher>>>§http_client: Client

Implementations§

Source§

impl AttachmentsClient

Source

pub async fn create_attachment( &self, cipher_id: CipherId, request: CreateAttachmentRequest, ) -> Result<CreatedAttachment, CipherCreateAttachmentError>

Creates a new attachment slot on the server and updates local repository state with the merged cipher returned by the server.

The caller must upload the encrypted bytes to CreatedAttachment::upload_url using the transport in CreatedAttachment::file_upload_type.

If a later step fails after slot creation, the SDK best-effort deletes the orphaned slot and returns the original error.

Source

async fn finalize_create( &self, response: AttachmentUploadDataResponseModel, existing_cipher: Option<Cipher>, cipher_id: CipherId, as_admin: bool, ) -> Result<CreatedAttachment, CipherCreateAttachmentError>

Source§

impl AttachmentsClient

Source

pub async fn delete_attachment( &self, cipher_id: CipherId, attachment_id: String, ) -> Result<Cipher, CipherDeleteAttachmentError>

Deletes an attachment from a cipher, and updates the local repository with the new cipher data returned from the API.

Source§

impl AttachmentsClient

Source

pub async fn get_attachment_download_url( &self, cipher_id: CipherId, attachment_id: String, emergency_access_id: Option<String>, ) -> Result<String, CipherGetAttachmentDownloadUrlError>

Returns the attachment download URL.

With emergency_access_id, uses the emergency-access endpoint and never falls back. Otherwise uses the cipher endpoint and falls back to the local repository on 404.

Source§

impl AttachmentsClient

Source

async fn get_emergency_access_attachment_download_url( &self, emergency_access_id: &str, cipher_id: CipherId, attachment_id: &str, ) -> Result<String, CipherGetAttachmentDownloadUrlError>

Fetches an attachment download URL via the emergency-access endpoint.

Source§

impl AttachmentsClient

Source

pub async fn renew_file_upload_url( &self, cipher_id: CipherId, attachment_id: String, ) -> Result<String, CipherRenewFileUploadUrlError>

Returns a renewed upload URL for an attachment. Does not modify the attachment slot.

Source§

impl AttachmentsClient

Source

pub async fn upgrade_attachment( &self, cipher_id: CipherId, attachment_id: String, ) -> Result<CipherView, CipherUpgradeAttachmentError>

Upgrades a legacy v1 attachment to CipherKey(AttachmentKey(Contents)).

Downloads and re-encrypts the attachment, creates a new slot, uploads the new bytes, then deletes the old attachment. If the upload fails, it tries to delete the new slot before returning the error. Returns the decrypted cipher view.

Source§

impl AttachmentsClient

Source

async fn download_and_reencrypt( &self, legacy_key_slot: SymmetricKeySlotId, new_attachment_key: SymmetricCryptoKey, plaintext_size_hint: u64, download_url: &str, ) -> Result<Vec<u8>, CipherUpgradeAttachmentError>

Downloads the legacy ciphertext and re-encrypts it into memory.

Wasm reqwest only supports buffered request bodies so the output is buffered.

Source

async fn upload_reencrypted( &self, cipher_id: CipherId, created: &CreatedAttachment, reencrypted: Vec<u8>, ) -> Result<(), CipherUpgradeAttachmentError>

Uploads the re-encrypted bytes to the newly created attachment slot.

Transport depends on AttachmentFileUploadType: Azure PUTs to the presigned blob URL on the unauthenticated client (the SAS token in the URL authorizes it; a Bearer token must not be attached), while Direct POSTs to the authenticated Bitwarden API endpoint (POST /ciphers/{id}/attachment/{attachmentId}) using the configured API client.

Source§

impl AttachmentsClient

Source

pub fn admin(&self) -> AttachmentAdminClient

Returns a new client for performing attachment admin operations. Uses the admin server API endpoints and does not modify local state.

Source

pub fn decrypt_buffer( &self, cipher: Cipher, attachment: AttachmentView, encrypted_buffer: &[u8], ) -> Result<Vec<u8>, DecryptError>

Source§

impl AttachmentsClient

Source

pub fn encrypt_buffer( &self, cipher: Cipher, attachment: AttachmentView, buffer: &[u8], ) -> Result<AttachmentEncryptResult, EncryptError>

Source

pub fn encrypt_file( &self, cipher: Cipher, attachment: AttachmentView, decrypted_file_path: &Path, encrypted_file_path: &Path, ) -> Result<Attachment, EncryptFileError>

Source

pub fn decrypt_file( &self, cipher: Cipher, attachment: AttachmentView, encrypted_file_path: &Path, decrypted_file_path: &Path, ) -> Result<(), DecryptFileError>

Trait Implementations§

Source§

impl From<AttachmentsClient> for JsValue

Source§

fn from(value: AttachmentsClient) -> Self

Converts to this type from the input type.
Source§

impl FromClient for AttachmentsClient

Source§

fn from_client(client: &Client) -> Self

Construct this type from a [Client] reference.
Source§

impl FromWasmAbi for AttachmentsClient

Source§

type Abi = u32

The Wasm ABI type that this converts from when coming back out from the ABI boundary.
Source§

unsafe fn from_abi(js: u32) -> Self

Recover a Self from Self::Abi. Read more
Source§

impl IntoWasmAbi for AttachmentsClient

Source§

type Abi = u32

The Wasm ABI type that this converts into when crossing the ABI boundary.
Source§

fn into_abi(self) -> u32

Convert self into Self::Abi so that it can be sent across the wasm ABI boundary.
Source§

impl LongRefFromWasmAbi for AttachmentsClient

Source§

type Abi = u32

Same as RefFromWasmAbi::Abi
Source§

type Anchor = RcRef<AttachmentsClient>

Same as RefFromWasmAbi::Anchor
Source§

unsafe fn long_ref_from_abi(js: Self::Abi) -> Self::Anchor

Same as RefFromWasmAbi::ref_from_abi
Source§

impl OptionFromWasmAbi for AttachmentsClient

Source§

fn is_none(abi: &Self::Abi) -> bool

Tests whether the argument is a “none” instance. If so it will be deserialized as None, and otherwise it will be passed to FromWasmAbi.
Source§

impl OptionIntoWasmAbi for AttachmentsClient

Source§

fn none() -> Self::Abi

Returns an ABI instance indicating “none”, which JS will interpret as the None branch of this option. Read more
Source§

impl RefFromWasmAbi for AttachmentsClient

Source§

type Abi = u32

The Wasm ABI type references to Self are recovered from.
Source§

type Anchor = RcRef<AttachmentsClient>

The type that holds the reference to Self for the duration of the invocation of the function that has an &Self parameter. This is required to ensure that the lifetimes don’t persist beyond one function call, and so that they remain anonymous.
Source§

unsafe fn ref_from_abi(js: Self::Abi) -> Self::Anchor

Recover a Self::Anchor from Self::Abi. Read more
Source§

impl RefMutFromWasmAbi for AttachmentsClient

Source§

type Abi = u32

Same as RefFromWasmAbi::Abi
Source§

type Anchor = RcRefMut<AttachmentsClient>

Same as RefFromWasmAbi::Anchor
Source§

unsafe fn ref_mut_from_abi(js: Self::Abi) -> Self::Anchor

Same as RefFromWasmAbi::ref_from_abi
Source§

impl TryFromJsValue for AttachmentsClient

Source§

fn try_from_js_value(value: JsValue) -> Result<Self, JsValue>

Performs the conversion.
Source§

fn try_from_js_value_ref(value: &JsValue) -> Option<Self>

Performs the conversion.
Source§

impl VectorFromWasmAbi for AttachmentsClient

Source§

impl VectorIntoWasmAbi for AttachmentsClient

Source§

impl WasmDescribe for AttachmentsClient

Source§

impl WasmDescribeVector for AttachmentsClient

Source§

impl SupportsConstructor for AttachmentsClient

Source§

impl SupportsInstanceProperty for AttachmentsClient

Source§

impl SupportsStaticProperty for AttachmentsClient

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Any for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

§

fn type_name(&self) -> &'static str

§

impl<T> AnySync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CompatExt for T

§

fn compat(self) -> Compat<T>

Applies the [Compat] adapter by value. Read more
§

fn compat_ref(&self) -> Compat<&T>

Applies the [Compat] adapter by shared reference. Read more
§

fn compat_mut(&mut self) -> Compat<&mut T>

Applies the [Compat] adapter by mutable reference. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, UT> HandleAlloc<UT> for T
where T: Send + Sync,

§

fn new_handle(value: Arc<T>) -> Handle

Create a new handle for an Arc value Read more
§

unsafe fn clone_handle(handle: Handle) -> Handle

Clone a handle Read more
§

unsafe fn consume_handle(handle: Handle) -> Arc<T>

Consume a handle, getting back the initial Arc<> Read more
§

unsafe fn get_arc(handle: Handle) -> Arc<Self>

Get a clone of the Arc<> using a “borrowed” handle. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> ReturnWasmAbi for T
where T: IntoWasmAbi,

Source§

type Abi = <T as IntoWasmAbi>::Abi

Same as IntoWasmAbi::Abi
Source§

fn return_abi(self) -> <T as ReturnWasmAbi>::Abi

Same as IntoWasmAbi::into_abi, except that it may throw and never return in the case of Err.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,