78 lines
2.6 KiB
Rust
78 lines
2.6 KiB
Rust
use std::process;
|
|
|
|
use kuska_ssb::api::dto::content::PubAddress;
|
|
|
|
use golgi::{messages::SsbMessageContent, sbot::Keystore, GolgiError, Sbot};
|
|
|
|
// Golgi is an asynchronous library so we must call it from within an
|
|
// async function. The `GolgiError` type encapsulates all possible
|
|
// error variants for the library.
|
|
async fn run() -> Result<(), GolgiError> {
|
|
// Attempt to initialise a connection to an sbot instance using the
|
|
// secret file at the Patchwork path and the default IP address, port
|
|
// and network key (aka. capabilities key).
|
|
let mut sbot_client = Sbot::init(Keystore::Patchwork, None, None).await?;
|
|
|
|
// Call the `whoami` RPC method to retrieve the public key for the sbot
|
|
// identity. This is our 'local' public key.
|
|
let id = sbot_client.whoami().await?;
|
|
|
|
// Print the public key (identity) to `stdout`.
|
|
println!("whoami: {}", id);
|
|
|
|
// Compose a `pub` address type message.
|
|
let pub_address_msg = SsbMessageContent::Pub {
|
|
address: Some(PubAddress {
|
|
// IP address.
|
|
host: Some("127.0.0.1".to_string()),
|
|
// Port.
|
|
port: 8009,
|
|
// Public key.
|
|
key: id,
|
|
}),
|
|
};
|
|
|
|
// Publish the `pub` address message.
|
|
// This step is required for successful invite code creation.
|
|
let pub_msg_ref = sbot_client.publish(pub_address_msg).await?;
|
|
|
|
// Print the message reference to `stdout`.
|
|
println!("pub_msg_ref: {}", pub_msg_ref);
|
|
|
|
// Generate an invite code that can be used 1 time.
|
|
let invite_code = sbot_client.invite_create(1).await?;
|
|
|
|
// Print the invite code to `stdout`.
|
|
println!("invite (1 use): {:?}", invite_code);
|
|
|
|
// Generate an invite code that can be used 7 times.
|
|
let invite_code_2 = sbot_client.invite_create(7).await?;
|
|
|
|
// Print the invite code to `stdout`.
|
|
println!("invite (7 uses): {:?}", invite_code_2);
|
|
|
|
// Define an invite code.
|
|
let test_invite =
|
|
"net:ssbroom2.commoninternet.net:8009~shs:wm8a1zHWjtESv4XSKMWU/rPRhnAoAiSAe4hQSY0UF5A=";
|
|
|
|
// Redeem an invite code (initiating a mutual follow between the local
|
|
// identity and the identity which generated the code (`wm8a1z...`).
|
|
let mref = sbot_client.invite_use(test_invite).await?;
|
|
|
|
// Print the message reference to `stdout`.
|
|
println!("mref: {:?}", mref);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
// Enable an async main function and execute the `run()` function,
|
|
// catching any errors and printing them to `stderr` before exiting the
|
|
// process.
|
|
#[async_std::main]
|
|
async fn main() {
|
|
if let Err(e) = run().await {
|
|
eprintln!("Application error: {}", e);
|
|
process::exit(1);
|
|
}
|
|
}
|