08_persisted_right/
08_persisted_right.rs1use localauthentication::prelude::*;
2use std::time::{SystemTime, UNIX_EPOCH};
3
4fn unique_identifier(prefix: &str) -> String {
5 let now = SystemTime::now()
6 .duration_since(UNIX_EPOCH)
7 .unwrap_or_default()
8 .as_nanos();
9 format!("dev.doomfish.localauthentication.{prefix}.{now}")
10}
11
12fn main() -> Result<(), Box<dyn std::error::Error>> {
13 let store = LARightStore::shared()?;
14 let right = LARight::new()?;
15 let identifier = unique_identifier("persisted");
16
17 match store.save_right_with_secret(&right, &identifier, b"top-secret") {
18 Ok(persisted) => {
19 persisted.set_tag(7)?;
20 println!("persisted state: {:?}", persisted.state()?);
21 println!("persisted tag: {}", persisted.tag()?);
22 println!("persisted preflight: {:?}", persisted.check_can_authorize());
23 println!("secret bytes: {}", persisted.secret()?.load_data()?.len());
24 store.remove_right(&persisted)?;
25 }
26 Err(error) => {
27 println!("persisted-right APIs need entitlements on many systems: {error}");
28 }
29 }
30
31 println!("✅ persisted-right smoke OK");
32 Ok(())
33}