// Nightly backups encrypted to the admins' public keys: the server can write them, never read them.
//
//   quillo run age.qwe      then open http://localhost:8080/backup

use "age.qwer"

// Each admin keeps an identity of their own (`age-keygen`) and gives the server only the public key.
let ada = age_keypair()
let grace = age_keypair()
let ADMINS = [ada.public, grace.public]

route GET /backup {
    write_file("data/backup.sql", "INSERT INTO orders VALUES (1, 'Ada', 120.50);")
    let size = age_encrypt_file("data/backup.sql", "data/backup.sql.age", ADMINS)?
    age_decrypt_file("data/backup.sql.age", "data/restored.sql", grace.identity)?
    { encrypted_bytes: size, restored_by_grace: read_file("data/restored.sql")? }
}

route GET /note {
    let sealed = age_encrypt("The safe's code is 4521.", [ada.public])
    {
        sealed: sealed?,
        ada_reads: age_decrypt(sealed?, ada.identity)?,
        grace_cannot: is_err(age_decrypt(sealed?, grace.identity)),
    }
}
