Server: - POST /v1/alias/register — claim an alias (one per fingerprint) - GET /v1/alias/resolve/:name — alias → fingerprint - GET /v1/alias/whois/:fingerprint — fingerprint → alias (reverse) - GET /v1/alias/list — list all aliases - Bidirectional mapping in sled (a:name→fp, fp:fp→name) - One alias per person, re-registering replaces old alias Web client: - /alias <name> — register your alias - /aliases — list all registered aliases - /info — now shows alias alongside fingerprint - Peer input accepts @alias (resolved before sending) - Received messages show @alias instead of fingerprint - DM: paste @alias or fingerprint in peer input CLI TUI: - /alias <name> — register alias - /aliases — list all aliases - /peer @alias — resolves alias to fingerprint - Alias resolution displayed in system messages Addressing model: - @manwe (local) → server resolves → fingerprint - @manwe.b1.example.com (federated) → DNS resolve (Phase 3) - Raw fingerprint → always works, no resolution Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
27 lines
613 B
Rust
27 lines
613 B
Rust
use anyhow::Result;
|
|
|
|
pub struct Database {
|
|
pub keys: sled::Tree,
|
|
pub messages: sled::Tree,
|
|
pub groups: sled::Tree,
|
|
pub aliases: sled::Tree,
|
|
_db: sled::Db,
|
|
}
|
|
|
|
impl Database {
|
|
pub fn open(data_dir: &str) -> Result<Self> {
|
|
let db = sled::open(data_dir)?;
|
|
let keys = db.open_tree("keys")?;
|
|
let messages = db.open_tree("messages")?;
|
|
let groups = db.open_tree("groups")?;
|
|
let aliases = db.open_tree("aliases")?;
|
|
Ok(Database {
|
|
keys,
|
|
messages,
|
|
groups,
|
|
aliases,
|
|
_db: db,
|
|
})
|
|
}
|
|
}
|