tiny_twilio_stripe

Crates.iotiny_twilio_stripe
lib.rstiny_twilio_stripe
version0.1.1
created_at2025-04-09 09:38:15.422827+00
updated_at2025-04-09 09:42:09.703552+00
descriptionA simple Actix-Web server providing Twilio Video access tokens and optional Stripe Checkout sessions.
homepagehttps://github.com/holg/tiny_twilio_stripe
repositoryhttps://github.com/holg/tiny_twilio_stripe
max_upload_size
id1626474
size91,717
Holger Trahe (holg)

documentation

https://docs.rs/tiny_twilio_stripe

README

๐Ÿ› ๏ธ Twilio Rust Video Token & Stripe Checkout Server

This is a lightweight, production-ready Rust-based Actix Web server that:

  • ๐Ÿ” Generates Twilio Video JWT tokens for secure room access.
  • ๐Ÿ’ณ Optionally integrates with Stripe Checkout for paid video sessions.
  • ๐ŸŒฑ Uses .env for configuration and supports feature flags for flexible builds.

๐Ÿš€ Features

  • โœ… Twilio Video token endpoint (/api/generate-token)
  • โœ… Optional Stripe checkout endpoint (/api/create-checkout-session)
  • ๐Ÿงฉ Modular structure (Twilio & Stripe code separated)
  • ๐Ÿ” JWTs with video grants & expiration
  • โš™๏ธ Configurable via .env
  • ๐Ÿ“ฆ Single-binary friendly (no Redis required)
  • ๐ŸŒ Ready to deploy behind Nginx, Caddy, etc.
  • ๐Ÿ” Uses rusttls instead of openssl, as such it is easy to cross-compile
  • โš™๏ธ generate the Debian x86_64 binaries e.g. macos)

๐Ÿ“ฆ Requirements

  • Rust 2021+
  • Twilio account (API SID, secret)
  • Optional: Stripe account (secret key)

๐Ÿ”ง Setup

  1. Clone this repo

  2. Create .env file:

    SERVER_PORT=8888
    USE_STRIPE=false
    
    GOVERNOR_BURST=5
    GOVERNOR_PER_SECOND=2
    # 60*60s = 3,600s => 1h
    TOKEN_EXPIRY=3600
    
    # Twilio configuration
    TWILIO_ACCOUNT_SID=ACxxx...
    TWILIO_API_KEY_SID=SKxxx...
    TWILIO_API_KEY_SECRET=your_secret
    
    # Stripe (optional)
    USE_STRIPE=true
    STRIPE_SECRET_KEY=sk_test_xxx
    STRIPE_CURRENCY=EUR
    STRIPE_AMOUNT=1000
    STRIPE_PRODUCT_NAME=Private Video Session
    STRIPE_SUCCESS_URL=https://yourdomain.com/success
    STRIPE_CANCEL_URL=https://yourdomain.com/cancel
    

โ–ถ๏ธ Run the Server

  • Without Stripe support:
    cargo run
    
  • With Stripe support:
    cargo run --features stripe
    
    optional pass the .env file e.g. .env.production

๐Ÿ”ธ With Stripe support

cargo run --features stripe optional pass the .env file e.g. .env.production

๐Ÿ“˜ API

GET /api/generate-token

Generates a Twilio JWT token for the given identity and room.

Query Parameters: โ€ข identity โ€“ The user name โ€ข roomName โ€“ Room to join

Example: GET /api/generate-token?identity=alice&roomName=room1

Optional Stripe support

POST /api/create-checkout-session (requires Stripe + USE_STRIPE=true)

Creates a Stripe Checkout session.

JSON Body:

{
  "identity": "alice",
  "room_name": "room1"
}

Returns:

{ "url": "https://checkout.stripe.com/session/..." }

๐Ÿงช Testing

You can test endpoints using Postman or curl:

curl "http://localhost:6666/api/generate-token?identity=test&roomName=myroom"

๐Ÿ›ก๏ธ Security

โ€ข Tokens expire after 1 hour default, but configurable in seconds in .env TOKEN_EXPIRY โ€ข Rate-limiting can be added via actix-governor

๐Ÿ“ Project Structure

tiny_twilio_stripe/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ main.rs            # Actix server entry point
โ”‚   โ”œโ”€โ”€ twilio/
โ”‚   โ”‚   โ”œโ”€โ”€ mod.rs
โ”‚   โ”‚   โ””โ”€โ”€ twilio_token.rs
โ”‚   โ””โ”€โ”€ stripe/
โ”‚       โ”œโ”€โ”€ mod.rs
โ”‚       โ””โ”€โ”€ stripe_checkout.rs
โ”œโ”€โ”€ .env
โ”œโ”€โ”€ Cargo.toml
โ””โ”€โ”€ README.md

๐Ÿ“œ License

MIT

Commit count: 31

cargo fmt