Postman · Manuel

Guide de l'opérateur · API & télégraphe en ligne de commande
Trois postes, un seul bureau

Le bureau expose une seule et même API. Trois manières de s'y raccorder, selon vos moyens et vos droits :

Qui peut faire quoi

ProfilPeutComment
Invité Écouter le trafic ; émettre un message public en clair (40 caractères, bande fixe). Depuis le site web uniquement. Pas d'API, pas de chiffrement.
Inscrit Tout ce qui précède + API & CLI, messages privés chiffrés, 100 caractères, toute la bande étendue. Publie sa clé publique (annuaire) et reçoit une clé d'API.
Admin Back-office : modération, comptes, réglages (TTL, quotas), révocation de clés. Page /admin.
Le morse n'est pas un secret. Tout le monde entend et lit le morse du flux ; la confidentialité d'un message privé tient entièrement au chiffrement RSA. La clé privée ne quitte jamais votre poste ; le serveur ne déchiffre rien.
L'API

Se raccorder à l'API

Base : https://postman.oversas.org. Réponses en JSON. La documentation interactive (Swagger, essai en direct) est servie sur /api/v1/docs (schéma brut : /api/v1/openapi.json, version ReDoc : /api/v1/redoc).

Authentification

Les points de lecture (le morse est public) sont ouverts à tous. Émettre par l'API exige une clé d'API, transmise dans l'en-tête X-API-Key. On l'obtient à l'inscription (montrée une seule fois) ou via POST /auth/keys. Chaque clé porte un quota d'envois, une validité et un rate-limit réglés par l'administrateur.

Une clé que vous émettez vous-même est plafonnée à ces réglages : demander plus que le quota ou la validité de l'office vous rend le plafond (demander moins reste possible). Le nombre de clés actives par compte est limité · révoquez-en une avant d'en émettre une nouvelle. Enfin le rate-limit se compte par compte, pas par clé : changer de clé ne rouvre pas la fenêtre.

Principaux points d'accès

Méthode & cheminAccèsRôle
GET /api/infopublic Bandes de fréquences, limites de taille et répétitions en vigueur.
GET /messages?freq=public Le trafic en vie (filtré par fréquence si freq est fourni).
GET /stream/now?freq=public État de la ligne : message en cours + position (pour rejoindre l'émission).
GET /stream/listen?freq=&seconds=public Écoute continue en SSE : chaque message qui passe est poussé (fenêtre bornée, ≤ 300 s). all=true multiplexe toute la bande en un flux.
POST /messagesclé d'API Émettre : public en clair, privé chiffré (recipient) ou morse brut.
GET /rss?freq=public Flux RSS 2.0 / podcast (alias /feed, /podcast.xml).
GET /feed/{id}.mp3public Audio morse pré-rendu d'un message (canal « humain » du podcast).
GET /directory, /directory/{u}/keypublic Annuaire des clés publiques (PEM brut par opérateur).
POST /auth/registerpublic Créer un compte, publier sa clé, recevoir sa 1ʳᵉ clé d'API.
GET /auth/keys, POST /auth/keysclé/session Lister / émettre ses clés d'API.
GET /download/postman.pyclé/session Télécharger le client CLI (voir plus bas).

Fréquences & limites

Une ligne de diffusion par fréquence : émetteur et auditeur doivent être sur la même fréquence pour se croiser. Bande fixe des invités : 410, 425, 440, 455, 470, 485, 500 kHz (défaut 440). Les inscrits accordent n'importe quel kHz entier de 400 à 500 kHz. La lecture accepte toute la bande ; seul le choix d'émission (et le cadran invité) est un privilège de compte.

La ligne est partagée : le nombre d'envois par minute est borné pour chaque émetteur (plus généreusement pour un inscrit que pour un invité). Au-delà, l'office répond 429 avec un en-tête Retry-After qui dit combien de secondes patienter · un envoi ainsi refusé ne consomme pas le quota de votre clé.

Exemples avec curl

# Découvrir bandes et limites
$ curl https://postman.oversas.org/api/info

# Trafic d'une fréquence : ATTENTION, un curl unique n'est qu'un INSTANTANÉ.
# Le fil est éphémère (un message est répété puis disparaît) : à un instant t,
# la fréquence est souvent vide. Pour capter au vol, il faut écouter DANS LA DURÉE.
$ curl "https://postman.oversas.org/messages?freq=440"

# a) écoute continue en UN appel : flux SSE borné (-N = pas de tampon)
$ curl -N "https://postman.oversas.org/stream/listen?freq=440&seconds=30"
#    ...ou toute la bande d'un coup (chaque événement porte sa fréquence)
$ curl -N "https://postman.oversas.org/stream/listen?all=true&seconds=30"

# b) ou sonder /messages en boucle, en dédupliquant par id
$ while true; do curl -s "https://postman.oversas.org/messages?freq=440"; sleep 2; done

# Émettre un message public en clair (clé d'API requise)
$ curl -X POST https://postman.oversas.org/messages \
       -H "X-API-Key: pk_votre_cle" \
       -H "Content-Type: application/json" \
       -d '{"text":"RENDEZ VOUS A MIDI STOP","frequency":440}'

# Émettre un message PRIVÉ chiffré pour « bob » (sa clé publique vient de l'annuaire)
$ curl -X POST https://postman.oversas.org/messages \
       -H "X-API-Key: pk_votre_cle" \
       -H "Content-Type: application/json" \
       -d '{"text":"message secret","recipient":"bob","is_public":false}'
Écouter, c'est durer. GET /messages ne rend que le trafic vivant à l'instant t : sur une fréquence calme, vous tomberez le plus souvent sur une liste vide. Le flux SSE /stream/listen pousse chaque message au moment où il passe (fenêtre ≤ 300 s, à renouveler pour une écoute sans fin) ; c'est ce que fait le client avec postman listen --follow.
Le chiffrement d'un privé se fait côté serveur avec la clé publique du destinataire (elle est publique). Le déchiffrement, lui, ne peut se faire que chez le destinataire avec sa clé privée, d'où le client CLI ci-dessous, ou la salle d'écoute (Web Crypto). Le serveur n'a aucune route de déchiffrement.
Le client · postman

Le télégraphe en ligne de commande

postman est le troisième poste : il passe par la même API mais garde la crypto en local. Il génère votre paire de clés, chiffre à l'envoi, et déchiffre vos messages privés sur votre machine : votre clé privée (~/.postman/id_rsa.pem) n'est jamais transmise.

1 · Télécharger le client

Un fichier unique auto-suffisant : il embarque le cœur (crypto, morse, pipeline). Réservé aux opérateurs inscrits.

Vérification de votre session…

2 · Installer la seule dépendance

Le fichier ne dépend que de la bibliothèque de cryptographie :

$ pip install cryptography
$ python postman.py --help

3 · Générer ses clés & s'inscrire

# Crée ~/.postman/id_rsa.pem (clé privée, chmod 600) + affiche la clé publique
$ python postman.py keygen

# Crée le compte, publie la clé publique, enregistre la clé d'API localement.
# --server est une option globale : elle se place AVANT la commande. L'URL est
# ensuite mémorisée dans config.json, inutile de la répéter par la suite.
$ python postman.py --server https://postman.oversas.org register --name alice
Gardez votre clé privée. Elle seule déchiffre vos messages privés et n'est stockée nulle part ailleurs. La passphrase (optionnelle) la protège au repos.

4 · S'accorder, émettre, écouter

# S'accorder sur une fréquence (persistée dans ~/.postman/config.json)
$ python postman.py tune 440

# Émettre un message public en clair
$ python postman.py send "RENDEZ VOUS A MIDI STOP"

# Émettre un privé chiffré pour bob, sur une autre fréquence
$ python postman.py send "message secret" --to bob --freq 400

# Écouter : la fréquence accordée, une précise, ou toute la bande
$ python postman.py listen
$ python postman.py listen --freq 440
$ python postman.py listen --all

# Écoute CONTINUE (flux SSE) : le serveur pousse chaque message qui passe,
# le client se raccorde tout seul. Idéal pour ne rien rater sur une fréquence.
$ python postman.py listen --follow
# ...ou toute la bande multiplexée en un seul flux
$ python postman.py listen --follow --all

À l'écoute, un message public est traduit du morse vers le texte ; un privé qui vous est destiné est déchiffré à la volée avec votre clé privée (🔓), les autres restent chiffrés. Par défaut listen sonde la ligne toutes les quelques secondes ; --follow ouvre plutôt un flux continu (SSE) et affiche chaque message dès qu'il passe.

5 · Ses clés, l'annuaire, son identité

$ python postman.py keys list              # ses clés d'API (quota, validité)
$ python postman.py keys new --quota 50     # émettre une nouvelle clé
$ python postman.py directory               # l'annuaire des correspondants
$ python postman.py directory bob           # la clé publique de bob (PEM)
$ python postman.py whoami                  # l'identité authentifiée

Configuration locale