Go2fa
TUI Менеджер TOTP ключей (2FA Manager). Сохраняй, управляй, копируй TOTP.
Install / Use
/learn @curkan/Go2faREADME
Мне надоело постоянно использовать Google Authentificator и переключаться между ПК и телефоном для подтверждения двухфакторной аутентификации. Поэтому я сделал эту TUI, которая позволит хранить, управлять, просматривать, копировать 2FA ключ в пару нажатий.
<p align="center"> <img src="docs/present.gif" alt="animated" /> </p>Описание
Go2FA TOTP - это легковесное, терминальное приложение, предназначенное для безопасного хранения и управления вашими ключами Time-Based One-Time Password (TOTP).
TUI основан на bubbletea
Функции
- Безопасное хранение: Хранилище TOTP хранит ваши секретные в зашифрованном виде, гарантируя безопасность вашей чувствительной информации.
- Быстрый доступ: Легко копируйте коды TOTP с помощью одной команды, устраняя необходимость ручного ввода кодов или переключения между приложениями.
- Фильтрация: Организуйте свои TOTP-коды с помощью пользовательских имен, описание, что позволяет легко найти и получить доступ к кодам, которые вам нужны.
- Легковесность: Хранилище TOTP - это терминальное приложение, требующее минимальных системных ресурсов и не имеющее зависимостей, написанное на Go.
Установка
Homebrew (Linux/MacOS)
Убедитесь, что стоит Xclip или Xsel. Иначе не будет работать копирование.
brew install curkan/public/go2fa
Из исходника
go install github.com/curkan/go2fa@latest
Ручная установка
Скачайте последний релиз и добавьте бинарник в ваш PATH.
Запустите с помощью команды go2fa
Просмотр ключей
На экране просмотра ключей вы можете фильтровать, удалять и копировать нужный TOTP ключ.
d- вызвать удаление (Enter - подтвердить, Esc - вернуться назад)enter- скопировать в буфер обмена. При копировании левая граница становится толще./- фильтрация по имени
Добавление ключей
Чтобы добавить новый ключ, введите Имя и SecretKey, Описание по желанию.
SecretKey формата base32 иначе отобьет ошибку.
Vault
Используется хранилище в формате JSON для дополнительной информации vault.json
При первом запуске приложение создаст publicKey и privateKey для шифрования вашего Vault.
{
"iterator": 4,
"db": "CtSRXlMkbXrMmLh/IeMiJCzRbzJkTMagWGVwnvaOkqroDUViVJaBaMbih258o..."
}
db - зашифрованное поле, к котором хранится структура name, description, secretKey
iterator - дополнительное поле, которое инкрементируется при каждом изменении хранилища. По iterator можно быстро понять, какая версия была предыдущая и восстановить его из бекапа.
JSON структура с открытым форматом была выбрана для удобного расширения приложения. Не все дополнительные поля должны быть зашифрованы.
Структура файлов
Все используемые файлы хранятся в пути: $HOME/.local/share/go2fa
go2fa
├── backups
├── keys
└── stores
backups - при добавлении/удалении ключей создаются бекапы с временем, когда произошло изменение. Это позволит вам восстановить нужную версию. Файлы бекапов шифрвуются, как и основной файл vault.json
keys - хранятся privateKey и publicKey
└── keys
├── private.pem
└── public.pem
stores - хранилища, на текущий момент только vault.json
Тестирование
-
Запуск всех тестов:
go test ./...- с покрытием:
go test ./... -cover
-
Где писать тесты:
- Рядом с кодом, в файлах вида
*_test.goвнутри соответствующих пакетов, например:internal/crypto/crypto_test.go,internal/addkey/addkey_test.go,internal/deletekey/deletekey_test.go,internal/twofactor/generate_test.go.
- Рядом с кодом, в файлах вида
-
Изоляция от реальной среды:
- Для тестов используется in-memory файловая система через
afero. Это исключает любые изменения в реальном$HOME/.local/share/go2fa. - Базовый шаблон для тестов:
- Для тестов используется in-memory файловая система через
import (
"testing"
"go2fa/internal/crypto"
"github.com/spf13/afero"
)
func TestSomething(t *testing.T) {
crypto.FS = afero.NewMemMapFs() // изолированный FS
t.Setenv("HOME", "/home/test") // детерминированные пути
crypto.CreateDirs()
crypto.GeneratePublicPrivateKeys()
// ... тестовая логика ...
}
TODO:
- Добавить синхронизацию в Git репозиторием
- Добавить короткие команды, для быстрого получения в clipboard нужного TOTP
- Экран восстановления из бекапа
Авторское право и лицензия
GO2FA лицензирован в соответствии с условиями лицензии MIT. Полный текст лицензии можно найти в файле LICENSE.
Related Skills
node-connect
339.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
xurl
339.3kA CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
frontend-design
83.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
