Короткоживущая публикация артефактов cnet, публичного PEM и ключей SSH. Публикуйте один раз, делитесь короткой ссылкой или QR-кодом, получайте до трёх раз.
3 полученияTTL 1–168 чcnet · pem · ssh
cdrop — только транспорт. Он не проверяет подписи и цепочки сертификатов: проверяются формат текста и общий размер, затем текст хранится ограниченное время и отдаётся по короткой ссылке. Получатель обязан проверить артефакт заново своими средствами.
https://lab917.ftp.shAuthorization: Bearer <token> для публикации и удаленияОбласть (scope) определяется классом артефакта: cnet, pem или ssh. Токен с областями ограничен перечисленными в его настройке областями.
CNET INVITATION, CNET REQUEST, CNET PASS. Проверяется armor, но не подпись, сеть и срок действия.authorized_keys, по одному в строке. Приватные ключи отклоняются.| Блок | Содержимое |
|---|---|
CERTIFICATE, TRUSTED CERTIFICATE | сертификат X.509 |
CERTIFICATE REQUEST, NEW CERTIFICATE REQUEST | CSR (PKCS#10) |
X509 CRL | список отзыва |
PUBLIC KEY, RSA PUBLIC KEY | открытый ключ |
PKCS7 | публичный набор сертификатов |
Допустимые типы SSH: ssh-rsa, ssh-ed25519, ecdsa-sha2-nistp256/384/521, sk-ssh-ed25519@openssh.com, sk-ecdsa-sha2-nistp256@openssh.com и их сертификатные формы -cert-v01@openssh.com; ключи ГОСТ 2012 ssh-gost2012-256 и ssh-gost2012-512 (без сертификатных форм).
Блокируются: приватные ключи и контейнеры с ними — RSA PRIVATE KEY (PKCS#1), PRIVATE KEY (PKCS#8), ENCRYPTED PRIVATE KEY, EC PRIVATE KEY, DSA PRIVATE KEY, OPENSSH PRIVATE KEY — а также произвольный текст. Бинарные контейнеры PKCS#12/PFX не принимаются. В одной публикации не более 16 блоков или строк SSH; действует общий предел размера тела.
Тело запроса — armored-текст в text/plain; charset=utf-8. Тип определяется по armor.
| Заголовок | Значение |
|---|---|
Authorization | Bearer <token> (обязателен) |
Content-Type | text/plain; charset=utf-8 |
X-CDROP-TTL | Необязательный срок жизни, например 24h. Диапазон 1h–168h. |
X-CDROP-GRANT | Необязательно: выдать ограниченный грант, например request=3. Только с publish-токеном. |
curl -X POST https://lab917.ftp.sh/api/v1/objects \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: text/plain; charset=utf-8" \ -H "X-CDROP-GRANT: request=3" \ -H "X-CDROP-TTL: 24h" \ --data-binary @invite.txt
Ответ 201 Created:
{
"id": "7Q2M9K4TABCD",
"url": "https://lab917.ftp.sh/o/7Q2M9K4TABCD",
"expires_at": "2026-11-05T12:00:00Z",
"remaining": 3,
"sha256": "9f2c...",
"grant": {
"kind": "request",
"url": "https://lab917.ftp.sh/p/cdg_...",
"remaining": 3,
"expires_at": "2026-11-05T12:00:00Z"
}
}
remaining фиксируется при публикации (1–3, по умолчанию 3). sha256 — хеш сохранённого текста. grant присутствует, только если грант запрошен или запрос выполнен токеном гранта.
Веб-форма без токена, с captcha: /publish.
Publish-токен может выдать грант — полную ссылку на этот же сервис, например https://lab917.ftp.sh/p/cdg_.... Ссылка позволяет получателю опубликовать следующий артефакт ограниченное число раз без publish-токена. Полная ссылка встраивается в сам опубликованный артефакт: заголовком X-CDROP-GRANT в armor cnet или PEM либо комментарием # X-CDROP-GRANT: ... в SSH.
| Заголовок / URL | Значение |
|---|---|
X-CDROP-GRANT | <kind> или <kind>=<uses>; kind должен соответствовать области артефакта |
GET /p/<token> | HTML-форма: публикация без captcha и без токена |
POST /p/<token> | Публикация артефакта типа гранта |
Допустимые kind: request (и другие типы cnet) для cnet, pem для PEM, ssh-key/ssh-cert для SSH. Гранты не привязаны к cnet. Грант привязан к строке публикации-родителя и исчезает вместе с ней; он не даёт метаданных, удаления, панели и не позволяет выдать новый грант. Истёкший или исчерпанный грант — 410 Gone.
В форме с captcha /ru/publish есть чек-бокс «выдать грант»; число публикаций берётся из серверного значения grants.uses.
HTML-страница показывает артефакт, кнопку копирования, строку состояния и ссылку на текстовую версию. Эндпоинт .txt отдаёт точный armored-текст как text/plain.
.txt) уменьшает remaining на единицу.HEAD остаток не уменьшает и получением не считается.remaining достигает нуля или истекает TTL, оба эндпоинта возвращают 410 Gone.404 Not Found.Страницы отдают Cache-Control: no-store, X-Robots-Tag: noindex, Referrer-Policy: no-referrer и строгий Content-Security-Policy.
curl https://lab917.ftp.sh/o/7Q2M9K4TABCD.txt
Возвращает метаданные публикации без списания получения. Требуется publish-токен.
curl https://lab917.ftp.sh/api/v1/objects/7Q2M9K4TABCD \ -H "Authorization: Bearer $TOKEN"
{
"id": "7Q2M9K4TABCD",
"kind": "invite",
"scope": "cnet",
"size": 1302,
"sha256": "9f2c...",
"created_at": "2026-11-04T12:00:00Z",
"expires_at": "2026-11-05T12:00:00Z",
"remaining": 2
}
kind — одно из invite, request, passport, pem, ssh-key, ssh-cert; scope — cnet, pem или ssh. Истёкшие, исчерпанные и удалённые объекты возвращают 410 Gone; неизвестные ID — 404.
Требуется publish-токен. Удаление немедленное, но мягкое: остаток обнуляется, объект отдаёт 410 Gone до цикла очистки.
| Статус | Значение |
|---|---|
204 | Удалено. |
401 | Токен отсутствует или неверен. |
403 | Токену не разрешена область объекта. |
404 | Неизвестный ID. |
410 | Уже истекло, исчерпано или удалено. |
curl -X DELETE https://lab917.ftp.sh/api/v1/objects/7Q2M9K4TABCD \ -H "Authorization: Bearer $TOKEN"
200 ok, если БД доступна, иначе 503.
Эксплуатационные метрики доступны только операторам.
Эта страница. Корень сайта — free lab, отдельная домашняя страница.
| Параметр | По умолчанию | Диапазон / примечания |
|---|---|---|
| Размер артефакта | 16 КиБ | Максимум сервера 64 КиБ; больше — 413. |
| TTL | 24ч | 1h–168h; выше максимума сервера — 400. |
| Получений | 3 | 1–3, фиксируется при публикации. |
| Лимиты запросов | на IP | 429 с Retry-After. |
| Очистка | периодически | Истёкшие строки удаляются; затем ID отдаёт 404. |
API возвращает компактный JSON:
{"error": "object not found"}
| Статус | Когда |
|---|---|
400 | Не armored-артефакт, пустое тело или неверный X-CDROP-TTL. |
401 | Publish-токен отсутствует или неверен. |
403 | Токену не разрешена эта область. |
404 | Неизвестный ID объекта. |
410 | Объект истёк, исчерпан или удалён. |
413 | Артефакт больше максимума сервера. |
422 | Приватный ключ, недопустимый тип блока, смешение классов или слишком много блоков. |
429 | Превышен лимит запросов. |
500 | Внутренняя ошибка или ошибка БД. |
Исполняемый файл cdrop читает конфиг по пути из флага
-config (или переменной CDROP_CONFIG), а
publish-токен — из CDROP_TOKEN (или поля
publish_token в конфиге).
# Публикация и вывод короткой ссылки cdrop publish -config cdrop.yaml -file invite.txt # Публикация с QR в консоли и PNG-копией cdrop publish -config cdrop.yaml -file invite.txt -qr -qr-out invite.png # Получение текста cdrop get -config cdrop.yaml 7Q2M9K4TABCD # Метаданные cdrop status -config cdrop.yaml 7Q2M9K4TABCD # QR в консоли или PNG-файлом cdrop qr -config cdrop.yaml 7Q2M9K4TABCD cdrop qr -config cdrop.yaml -out link.png 7Q2M9K4TABCD
В примерах -qr печатает QR в консоль; -qr-out и -out пишут PNG-файл.