Crate threema_gateway[][src]

Threema Gateway SDK for Rust

CircleCI Crates.io

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.

Note: This library is fully asynchronous (because the underlying HTTP client is async as well). To call the async methods, either call them from an async context, or wrap the returned future in a block_on method provided by an executor like tokio, async-std or smol.

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).await {
    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).await.unwrap();

// Encrypt
let encrypted = api.encrypt_text_msg(text, &public_key.into());

// Send
match api.send(&to, &encrypted, false).await {
    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

errors

Error types used in this library.

Structs

ApiBuilder

A convenient way to set up the API object.

BlobId

A 16-byte blob ID.

Capabilities

A struct containing flags according to the capabilities of a Threema ID.

E2eApi

Struct to talk to the E2E API (with end-to-end encryption).

EncryptedMessage

An encrypted message. Contains both the ciphertext and the nonce.

FileMessage

A file message.

FileMessageBuilder

Builder for FileMessage.

IncomingMessage

An incoming message received from Threema Gateway.

Key

Key for symmetric authenticated encryption

Mime

A parsed mime or media type.

PublicKey

PublicKey for asymmetric authenticated encryption

RecipientKey

The public key of a recipient.

SecretKey

SecretKey for asymmetric authenticated encryption

SimpleApi

Struct to talk to the simple API (without end-to-end encryption).

Enums

LookupCriterion

Different ways to look up a Threema ID in the directory.

MessageType

A message type.

Recipient

Different ways to specify a message recipient in basic mode.

RenderingType

The rendering type influences how a file message is displayed on the device of the recipient.

Functions

encrypt_file_data

Encrypt file data and an optional thumbnail using a randomly generated symmetric key.