Ghid de utilizare

Română

Început rapid

# Trimite fișier — parola este generată automat, link + parolă afișate
$ ttl send secret.pdf
No password provided. Generate one? [Y/n]:
Generated password: aB3kL9mX
·✧★◉ Thank goodness, secret.pdf is in orbit (1.2 MB)
IMPORTANT! Save your password — required to download and decrypt the file.
Password: aB3kL9mX
https://ttl.space/aBcDeFgHiJ

# Descarcă — parola este cerută interactiv
$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, secret.pdf landed safe and sound (1.2 MB)

CLI-ul criptează, încarcă, descarcă și decriptează automat. Serverul nu îți vede niciodată parola sau datele necriptate.

Instalare

Homebrew (macOS)

$ brew install tweenietomatoes/ttl/ttl

Scoop (Windows)

$ scoop bucket add ttl https://github.com/tweenietomatoes/scoop-ttl
$ scoop install ttl

Binar precompilat

# Descarcă pentru platforma ta din pagina de versiuni
$ curl -Lo ttl.tar.gz \
  https://github.com/tweenietomatoes/ttl/releases/latest/download/ttl_linux_amd64.tar.gz
$ tar xzf ttl.tar.gz && sudo mv ttl /usr/local/bin/

Go install

$ go install github.com/tweenietomatoes/ttl/cmd/ttl@latest

Din sursă

$ git clone https://github.com/tweenietomatoes/ttl
$ cd ttl && go build -o ttl ./cmd/ttl/
$ sudo mv ttl /usr/local/bin/

Verificare

$ ttl version
ttl v1.3.0

Trimitere fișiere

Trimitere simplă

# Generare automată a parolei, TTL implicit 7 zile
$ ttl send report.xlsx

Dacă în terminal nu este furnizată o parolă, CLI-ul întreabă:

No password provided. Generate one? [Y/n]:

Apasă Enter sau scrie y pentru generare automată.

Parolă proprie

$ ttl send -p mySecretPass -t 1h document.pdf

Distrugere după citire

# Fișierul este șters definitiv după prima descărcare
$ ttl send -b photo.jpg

TTL personalizat

$ ttl send -t 5m temp-credentials.txt   # expiră în 5 minute
$ ttl send -t 30m meeting-link.txt      # expiră în 30 de minute
$ ttl send -t 6h backup.tar.gz          # expiră în 6 ore
$ ttl send -t 1d daily-report.pdf       # expiră într-o zi
$ ttl send -t 3d project-archive.zip    # expiră în 3 zile
$ ttl send -t 5d design-assets.zip      # expiră în 5 zile
$ ttl send report.xlsx                  # expiră în 7 zile (implicit)

Descărcare fișiere

Interactiv (terminal)

$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)

Parola este citită în siguranță — nu este afișată în terminal. Numele original al fișierului este restaurat.

Doar token

# Poți folosi doar tokenul de 10 caractere în loc de URL-ul complet
$ ttl get aBcDeFgHiJ
Enter password: ********
Password verified
◉★✧· Phew, document.pdf landed safe and sound (4.2 MB)

Director de ieșire

$ ttl get -o ~/Downloads aBcDeFgHiJ

În mod implicit, fișierele sunt salvate în directorul curent. Folosește -o / --output pentru a specifica un alt director.

Cu opțiune de parolă

$ ttl get -p mySecretPass https://ttl.space/aBcDeFgHiJ

Browser

Poți descărca și decripta fișiere și în browser, vizitând linkul direct. Interfața web folosește aceeași bibliotecă de criptare și îți cere parola. Nu este necesară instalarea de software.

Gestionarea parolei

Parola este folosită ca intrare pentru cheia de criptare. Nu îți părăsește niciodată dispozitivul și nu este trimisă niciodată către server. Există șase moduri de a o furniza:

1. Generare automată (doar la trimitere)

$ ttl send notes.txt
No password provided. Generate one? [Y/n]: y
Generated password: aB3kL9mX

Generează o parolă aleatoare din punct de vedere criptografic, de 8 caractere, din [0-9A-Za-z]. Disponibilă doar la send în terminal.

2. Introducere interactivă

$ ttl send notes.txt
No password provided. Generate one? [Y/n]: n
Enter password: ********
Confirm password: ********

$ ttl get https://ttl.space/aBcDeFgHiJ
Enter password: ********

Parola nu este afișată și nu se salvează în istoricul shell-ului. La send alegi mai întâi dacă să fie generată automat. La get ești invitat direct să o introduci.

3. Opțiune: -p / --password

$ ttl send -p mySecretPass file.zip
$ ttl get --password mySecretPass https://ttl.space/aBcDeFgHiJ
-p / --password este vizibil în ieșirea ps aux și poate fi salvat în istoricul shell-ului (~/.bash_history). Evită în medii partajate și scripturi. Folosește --password-stdin sau --password-file în schimb.

4. Stdin: --password-stdin

# Trimite prin echo
$ echo "mySecretPass" | ttl send --password-stdin backup.tar.gz

# Trimite dintr-un manager de parole
$ pass show ttl/key | ttl send --password-stdin data.zip

# Trimite dintr-o variabilă de mediu
$ printenv MY_SECRET | ttl get --password-stdin https://ttl.space/aBcDeFgHiJ

# Heredoc
$ ttl send --password-stdin report.pdf <<<"mySecretPass"

Citește prima linie din stdin. Util în scripturi, pipeline-uri CI/CD și automatizare. Dacă stdin nu este un terminal și nu este furnizată o sursă de parolă, CLI-ul iese cu o eroare (cu excepția --json, care generează automat o parolă).

5. Fișier: --password-file

$ ttl send --password-file /run/secrets/key report.xlsx
$ ttl get --password-file ~/.ttl-key https://ttl.space/aBcDeFgHiJ

Citește prima linie a fișierului (caracterul de linie nouă final este eliminat). Compatibil cu Docker Secrets (/run/secrets/), fișierele Vault agent și modele similare.

6. Fișier detectat automat: ttl.password

Dacă nu este furnizată o parolă explicită, CLI-ul caută un fișier ttl.password lângă executabil, apoi ~/.ttl/password. Prima linie este folosită ca parolă.

Doar o singură sursă de parolă explicită poate fi folosită odată. -p / --password, --password-stdin și --password-file nu pot fi combinate. Fișierul ttl.password detectat automat este verificat doar dacă niciuna dintre acestea nu este specificată. Lungime minimă: 8 caractere.

Referință opțiuni

Opțiuni send

OpțiuneDescriereImplicit
-p, --password PParolă de criptareinteractiv
--password-stdinCitește parola de la stdin
--password-file FCitește parola dintr-un fișier
-t, --ttl DURDurată de valabilitate7d
-b, --burnDistrugere după citire (descărcare unică)oprit
--timeout DURTimeout pentru transferauto
--server URLURL-ul serveruluihttps://ttl.space
-h3, --http3Încearcă HTTP/3 (QUIC), cu revenire la TCPoprit
--jsonIeșire JSON la stdout (pentru scripturi și agenți AI)oprit

Opțiuni get

OpțiuneDescriereImplicit
-p, --password PParolă de decriptareinteractiv
--password-stdinCitește parola de la stdin
--password-file FCitește parola dintr-un fișier
-o, --output DIRDirector de ieșiredirectorul curent
--timeout DURTimeout pentru transferauto
-h3, --http3Încearcă HTTP/3 (QUIC), cu revenire la TCPoprit
--jsonIeșire JSON la stdout (pentru scripturi și agenți AI)oprit

Valori TTL

Gratuit: 5m 10m 15m 30m 1h 2h 3h 6h 12h 24h 1d 2d 3d 4d 5d 6d 7d

Orbit adaugă: 14d 15d 28d 30d

Timeout

Implicit: auto — estimat în funcție de dimensiunea fișierului presupunând 1 Mbps + 2 minute marjă (minim 5 minute). Setează manual cu --timeout 10m sau --timeout 1h.

Exemple

Script: Backup și încărcare

#!/bin/bash
tar czf /tmp/backup.tar.gz /data
echo "$BACKUP_KEY" | ttl send --password-stdin -t 6h /tmp/backup.tar.gz
rm /tmp/backup.tar.gz

Copiere link în clipboard (macOS)

$ ttl send -p mypass123 file.pdf | pbcopy

Copiere link în clipboard (Linux)

$ ttl send -p mypass123 file.pdf | xclip -sel clip

Secret unic cu autodistrugere

$ echo "$DB_PASSWORD" | ttl send --password-stdin -b -t 5m credentials.env
# Linkul funcționează exact o singură dată, expiră după 5 minute

Mod JSON (scripturi și agenți AI)

# trimitere — parola este generată automat în modul JSON
$ ttl --json send report.pdf
{"ok":true,"link":"https://ttl.space/xK9mQ2vLpA","filename":"report.pdf","size":2097152,"ttl":"7d","burn":false,"password":"aB3kL9mX"}

# descărcare
$ ttl --json get -p aB3kL9mX xK9mQ2vLpA
{"ok":true,"filename":"report.pdf","size":2097152,"saved_to":"/home/user/report.pdf"}

# erorile returnează ok:false
{"ok":false,"error":"Link not found"}

În modul --json toată ieșirea este JSON structurat la stdout. Dacă la trimitere nu este furnizată o parolă, una este generată automat și inclusă în răspuns. Codul de ieșire este 0 la succes, 1 la eroare.

Planul Orbit

Features · Orbit oferă acces la fișiere mai mari (10 GB), păstrare mai îndelungată (30 de zile) și gestionare a fișierelor (listare și ștergere).

Cheia API este detectată automat: variabila de mediu TTL_API_KEY, ttl.key lângă executabil sau ~/.ttl/key. Folosește ttl activate pentru a salva cheia sau scrie-o manual într-una dintre aceste locații.

# activează cheia ta
$ ttl activate ttl_orbit_aBcDeFgHiJ...
Orbit plan activated. Key saved to /usr/local/bin/ttl.key

# verifică planul și utilizarea
$ ttl plan
Plan: orbit
Max file size: 10.0 GB
Max TTL: 30 days
Uploads per day: Unlimited

Usage:
  Uploads today: 3
  Active storage: 1.2 GB / 500.0 GB

# trimite cu TTL extins
$ ttl send -t 30d large-backup.tar.gz

# listează încărcările recente
$ ttl list
  xK9mQ2vLpA    4.2 MB  2026-03-16 10:30 → 2026-04-15 10:30  [active]
  https://ttl.space/xK9mQ2vLpA
  rT7bNw3KpF  912.0 KB  2026-03-15 14:20 → 2026-03-17 14:20  [active (burn)]
  https://ttl.space/rT7bNw3KpF

# șterge un fișier
$ ttl delete xK9mQ2vLpA
Deleted: xK9mQ2vLpA

# elimină cheia salvată
$ ttl deactivate
Key file removed: /usr/local/bin/ttl.key

API HTTP

Încărcarea și descărcarea necesită pipeline-ul criptografic al CLI-ului (Argon2id + XChaCha20-Poly1305 + chunk-AEAD). Pentru scripturi, folosește ttl send / ttl get sau modul --json. Endpoint-urile de mai jos sunt pentru gestionarea fișierelor Orbit.

Listare fișiere (Orbit)

$ curl https://ttl.space/v1/files -H "X-API-Key: ttl_orbit_..."
{"files":[{"token":"xK9mQ2vLpA","link":"https://ttl.space/xK9mQ2vLpA","size_bytes":1048576,"created_at":1711800600,"expires_at":1714392600,"burn":false,"expired":false}]}

Returnează toate fișierele încărcate cu această cheie. Necesită planul Orbit.

Ștergere fișier (Orbit)

$ curl -X DELETE https://ttl.space/v1/files/xK9mQ2vLpA -H "X-API-Key: ttl_orbit_..."

Returnează 204 No Content la succes. Necesită planul Orbit. Fișierul trebuie să aparțină acestei chei.

Răspunsuri de eroare

StatusSemnificație
401Cheie API nevalidă sau expirată
403Funcționalitatea necesită planul Orbit
404Fișierul nu a fost găsit sau nu aparține acestei chei
429Limita de cereri a fost depășită

Limite

LimităGratuitOrbit
Dimensiune maximă a fișierului2 GB10 GB
TTL maxim7 zile30 de zile
Încărcări pe zi1050
Cotă de stocare500 GB
Listare și ștergere
Lungime minimă a parolei8 caractere
Cereri pe IP30 la 10 secunde
Conexiuni pe IP10 simultane

Criptare

Fișierele sunt criptate pe dispozitivul tău înainte de a fi încărcate. Serverul stochează doar text cifrat și nu poate decripta fișierele tale.

ComponentăAlgoritm / Valoare
Derivare cheieArgon2id (time=3, memory=64 MB, parallelism=1)
CifruXChaCha20-Poly1305 AEAD

Orice modificare a textului cifrat duce la eșecul decriptării. Serverul verifică faptul că cel care descarcă cunoaște parola corectă înainte de a livra textul cifrat, prin intermediul unui token unidirecțional derivat din cheia de criptare.