Crate threema_gateway

source ·
Expand description

Threema Gateway SDK for Rust

CircleCI Crates.io Rust

This library makes it easy to use the Threema Gateway from Rust programs.

Documentation of the HTTP API can be found at gateway.threema.ch.

Example: Send simple (transport encrypted) message

use threema_gateway::{ApiBuilder, Recipient};

let from = "*YOUR_ID";
let to = Recipient::new_email("user@example.com");
let secret = "your-gateway-secret";
let text = "Very secret message!";

// Send
let api = ApiBuilder::new(from, secret).into_simple();
match api.send(&to, &text) {
    Ok(msg_id) => println!("Sent. Message id is {}.", msg_id),
    Err(e) => println!("Could not send message: {:?}", e),
}

Example: Send end-to-end encrypted message

use threema_gateway::{ApiBuilder, RecipientKey};

let from = "*YOUR_ID";
let to = "ECHOECHO";
let secret = "your-gateway-secret";
let private_key = "your-private-key";
let text = "Very secret message!";

// Create E2eApi instance
let api = ApiBuilder::new(from, secret)
                     .with_private_key_str(private_key)
                     .and_then(|builder| builder.into_e2e())
                     .unwrap();

// Fetch public key
// Note: In a real application, you should cache the public key
let public_key = api.lookup_pubkey(to).unwrap();

// Encrypt
let recipient_key = RecipientKey::from_str(&public_key).unwrap();
let encrypted = api.encrypt_text_msg(text, &recipient_key);

// Send
match api.send(&to, &encrypted) {
    Ok(msg_id) => println!("Sent. Message id is {}.", msg_id),
    Err(e) => println!("Could not send message: {:?}", e),
}

For more examples, see the examples/ directory.

Modules

Error types used in this library.

Structs

A convenient way to set up the API object.
A blob ID. Must contain exactly 16 lowercase hexadecimal characters.
A struct containing flags according to the capabilities of a Threema ID.
Struct to talk to the E2E API (with end-to-end encryption).
An encrypted message. Contains both the ciphertext and the nonce.
The public key of a recipient.
Struct to talk to the simple API (without end-to-end encryption).

Enums

Different ways to look up a Threema ID in the directory.
A message type.
Different ways to specify a message recipient in basic mode.