Struct Biscuit

pub struct Biscuit { /* private fields */ }
Expand description

This structure represents a valid Biscuit token

It contains multiple Block elements, the associated symbol table, and a serialized version of this data

extern crate biscuit_auth as biscuit;

use biscuit::{KeyPair, Biscuit, builder::*, builder_ext::*};

fn main() -> Result<(), biscuit::error::Token> {
  let root = KeyPair::new();

  // first we define the authority block for global data,
  // like access rights
  // data from the authority block cannot be created in any other block
  let token1 = Biscuit::builder()
      .fact(fact("right", &[string("/a/file1.txt"), string("read")]))?

      // facts and rules can also be parsed from a string
      .fact("right(\"/a/file1.txt\", \"read\")")?
      .build(&root)?;

  // we can create a new block builder from that token
  let builder2 = BlockBuilder::new()
      .check_operation("read");

  let token2 = token1.append(builder2)?;

  Ok(())
}

Implementations§

§

impl Biscuit

pub fn builder() -> BiscuitBuilder

create the first block’s builder

call [builder::BiscuitBuilder::build] to create the token

pub fn from<T, KP>(slice: T, key_provider: KP) -> Result<Biscuit, Token>
where T: AsRef<[u8]>, KP: RootKeyProvider,

deserializes a token and validates the signature using the root public key

pub fn from_base64<T, KP>(slice: T, key_provider: KP) -> Result<Biscuit, Token>
where T: AsRef<[u8]>, KP: RootKeyProvider,

deserializes a token and validates the signature using the root public key

pub fn unsafe_deprecated_deserialize<T, KP>( slice: T, key_provider: KP, ) -> Result<Biscuit, Token>
where T: AsRef<[u8]>, KP: RootKeyProvider,

deserializes a token and validates the signature using the root public key

This allows the deprecated 3rd party block format

pub fn to_vec(&self) -> Result<Vec<u8>, Token>

serializes the token

pub fn to_base64(&self) -> Result<String, Token>

serializes the token and encode it to a (URL safe) base64 string

pub fn serialized_size(&self) -> Result<usize, Token>

serializes the token

pub fn seal(&self) -> Result<Biscuit, Token>

creates a sealed version of the token

sealed tokens cannot be attenuated

pub fn authorizer(&self) -> Result<Authorizer, Token>

creates an authorizer from this token

Such an authorizer can only be used for querying, since it will contain no authorization policy.

pub fn append(&self, block_builder: BlockBuilder) -> Result<Biscuit, Token>

adds a new block to the token

since the public key is integrated into the token, the keypair can be discarded right after calling this function

pub fn context(&self) -> Vec<Option<String>>

returns the list of context elements of each block

the context is a free form text field in which application specific data can be stored

pub fn root_key_id(&self) -> Option<u32>

returns an (optional) root key identifier. It provides a hint for public key selection during verification

pub fn revocation_identifiers(&self) -> Vec<Vec<u8>>

returns a list of revocation identifiers for each block, in order

revocation identifiers are unique: tokens generated separately with the same contents will have different revocation ids

pub fn external_public_keys(&self) -> Vec<Option<PublicKey>>

returns a list of external key for each block, in order

Blocks carrying an external public key are third-party blocks and their contents can be trusted as coming from the holder of the corresponding private key

pub fn print(&self) -> String

pretty printer for this token

pub fn print_block_source(&self, index: usize) -> Result<String, Token>

prints the content of a block as Datalog source code

pub fn block_version(&self, index: usize) -> Result<u32, Token>

gets the datalog version for a given block

pub fn container(&self) -> &SerializedBiscuit

returns the internal representation of the token

pub fn append_with_keypair( &self, keypair: &KeyPair, block_builder: BlockBuilder, ) -> Result<Biscuit, Token>

adds a new block to the token, using the provided CSPRNG

since the public key is integrated into the token, the keypair can be discarded right after calling this function

pub fn third_party_request(&self) -> Result<ThirdPartyRequest, Token>

pub fn append_third_party( &self, external_key: PublicKey, response: ThirdPartyBlock, ) -> Result<Biscuit, Token>

pub fn append_third_party_with_keypair( &self, external_key: PublicKey, response: ThirdPartyBlock, next_keypair: KeyPair, ) -> Result<Biscuit, Token>

pub fn block_symbols(&self, index: usize) -> Result<Vec<String>, Token>

gets the list of symbols from a block

pub fn block_public_keys(&self, index: usize) -> Result<PublicKeys, Token>

gets the list of public keys from a block

pub fn block_external_key( &self, index: usize, ) -> Result<Option<PublicKey>, Token>

gets the list of public keys from a block

pub fn block_count(&self) -> usize

returns the number of blocks (at least 1)

Trait Implementations§

§

impl Clone for Biscuit

§

fn clone(&self) -> Biscuit

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for Biscuit

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl Display for Biscuit

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

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
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
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

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<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T