Skip to main content

totpkit — одноразовые коды (TOTP) для любых сервисов

Одно шифрованное хранилище вторых факторов на все сервисы: PyPI, GitHub, Bitrix24, что угодно. Код можно получить командой, а можно кнопкой в Telegram, когда ноутбука под рукой нет. Другие проекты берут коды из того же стора одной строкой, не заводя собственных копий секретов.

Установка

uv add s-totpkit            # как зависимость
uv sync --extra bot         # с Telegram-ботом
uv run python scripts/self_check.py

Быстрый старт

totp entry add --uri "otpauth://totp/PyPI:alice?secret=…&issuer=PyPI"
totp list
totp code pypi              # {"code": "366845", "seconds_left": 20}

Вывод — JSON по умолчанию; --text переключает на человекочитаемый.

Из своего кода

from totpkit import provider_for

login(username, password, totp_provider=provider_for("pypi"))

Провайдер отдаёт код по сигнатуре (попытка, прошлая ошибка) -> код и сам разбирается с границей 30-секундного окна: ждёт ротацию, когда коду осталось жить меньше трёх секунд, и никогда не отдаёт дважды один и тот же код — иначе повторная попытка входа сгорает на коде, который сервис уже отверг.

Модель хранения

Запись — это сервис + аккаунт + иконка + группа. Ключ строится как сервис или сервис:аккаунт и служит тем, что вы набираете руками: пока аккаунт один, работает короткое totp code pypi; когда их стало два, короткая форма даёт ошибку со списком вариантов, а не выдаёт код наугад.

Групп по умолчанию нет — всё лежит одним плоским списком, пока группу не задали.

Секреты пишутся в системное хранилище (keyring). Если рабочего бэкенда нет, кит честно предупреждает и уходит в файл — проверить можно командой totp store status. Длинные сторы режутся на куски: у Windows Credential Manager есть жёсткий потолок на размер значения, и без нарезки хранилище молча деградировало бы в открытый файл ровно тогда, когда записей стало много.

Telegram-бот

totp bot setup            # токен бота и первый разрешённый аккаунт
totp bot run

Бот отдаёт коды только аккаунтам из белого списка: бот, отвечающий кому угодно, — это утечка второго фактора. Карточка показывает код, остаток жизни окна и кнопку «Обновить».

Лицензия

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

s_totpkit-0.1.2.tar.gz (136.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

s_totpkit-0.1.2-py3-none-any.whl (44.5 kB view details)

Uploaded Python 3

File details

Details for the file s_totpkit-0.1.2.tar.gz.

File metadata

  • Download URL: s_totpkit-0.1.2.tar.gz
  • Upload date:
  • Size: 136.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for s_totpkit-0.1.2.tar.gz
Algorithm Hash digest
SHA256 b5e9cdf4a7d537ea9d7925f4d6456a72bf84cf5da68e50ebc7a6199f57b04554
MD5 7658ab6d4ed4a1a21320eefc99ee37d9
BLAKE2b-256 41ec37ef2af655c6958f65786bc7d6f710f2184cd59aa4f1d77fcd3a45ff41dc

See more details on using hashes here.

File details

Details for the file s_totpkit-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: s_totpkit-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 44.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for s_totpkit-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2b9a7af52d910cebcc02dcb0d9ce07545e8e43e7005c179edcf2ce0c32aed1ab
MD5 7be5fcba8be32851084e41ae6cb31192
BLAKE2b-256 62f058c8d307576a42e35444c6440895e5d5bcc208693849c2ccfa7d06bd76bd

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.0

2 files

0.1.4

2 files

0.1.3

2 files

This release

0.1.2 This release

2 files

0.1.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page