https://github.com/curkan/go2fa
TUI Менеджер TOTP ключей (2FA Manager). Сохраняй, управляй, копируй TOTP.
https://github.com/curkan/go2fa
2fa 2factor golang password-manager totp totp-generator tui
Last synced: 3 months ago
JSON representation
TUI Менеджер TOTP ключей (2FA Manager). Сохраняй, управляй, копируй TOTP.
- Host: GitHub
- URL: https://github.com/curkan/go2fa
- Owner: curkan
- License: other
- Created: 2024-06-25T05:49:24.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2025-08-07T11:35:13.000Z (9 months ago)
- Last Synced: 2025-08-07T13:29:30.174Z (9 months ago)
- Topics: 2fa, 2factor, golang, password-manager, totp, totp-generator, tui
- Language: Go
- Homepage:
- Size: 564 KB
- Stars: 67
- Watchers: 1
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Храните и используйте свои TOTP ключи в терминале
---
Мне надоело постоянно использовать Google Authentificator и переключаться между ПК и телефоном для подтверждения двухфакторной аутентификации. Поэтому я сделал эту TUI, которая позволит хранить, управлять, просматривать, копировать 2FA ключ в пару нажатий.
---
# Описание
Go2FA TOTP - это легковесное, терминальное приложение, предназначенное для безопасного хранения и управления вашими ключами Time-Based One-Time Password (TOTP).
TUI основан на [bubbletea](https://github.com/charmbracelet/bubbletea)
## Функции
- **Безопасное хранение**: Хранилище TOTP хранит ваши секретные в зашифрованном виде, гарантируя безопасность вашей чувствительной информации.
- **Быстрый доступ**: Легко копируйте коды TOTP с помощью одной команды, устраняя необходимость ручного ввода кодов или переключения между приложениями.
- **Фильтрация**: Организуйте свои TOTP-коды с помощью пользовательских имен, описание, что позволяет легко найти и получить доступ к кодам, которые вам нужны.
- **Легковесность**: Хранилище TOTP - это терминальное приложение, требующее минимальных системных ресурсов и не имеющее зависимостей, написанное на Go.
## Установка
### [Homebrew](https://brew.sh) (Linux/MacOS)
> Убедитесь, что стоит **Xclip** или **Xsel**. Иначе не будет работать копирование.
```shell
brew install curkan/public/go2fa
```
### Из исходника
```shell
go install github.com/curkan/go2fa@latest
```
### Ручная установка
Скачайте [последний релиз](https://github.com/curkan/go2fa/releases/latest) и добавьте бинарник в ваш PATH.
Запустите с помощью команды `go2fa`
### Просмотр ключей
На экране просмотра ключей вы можете фильтровать, удалять и копировать нужный TOTP ключ.
- `d` - вызвать удаление (Enter - подтвердить, Esc - вернуться назад)
- `enter` - скопировать в буфер обмена. При копировании левая граница становится толще.
- `/` - фильтрация по имени
### Добавление ключей
Чтобы добавить новый ключ, введите **Имя** и **SecretKey**, Описание по желанию.\
SecretKey формата base32 иначе отобьет ошибку.
## Vault
Используется хранилище в формате JSON для дополнительной информации `vault.json`\
При первом запуске приложение создаст *publicKey* и *privateKey* для шифрования вашего Vault.
```json
{
"iterator": 4,
"db": "CtSRXlMkbXrMmLh/IeMiJCzRbzJkTMagWGVwnvaOkqroDUViVJaBaMbih258o..."
}
```
`db` - зашифрованное поле, к котором хранится структура name, description, secretKey\
`iterator` - дополнительное поле, которое инкрементируется при каждом изменении хранилища. По iterator можно быстро понять, какая версия была предыдущая и восстановить его из бекапа.
JSON структура с открытым форматом была выбрана для удобного расширения приложения. Не все дополнительные поля должны быть зашифрованы.
## Структура файлов
Все используемые файлы хранятся в пути: `$HOME/.local/share/go2fa`
```sheel
go2fa
├── backups
├── keys
└── stores
```
`backups` - при добавлении/удалении ключей создаются бекапы с временем, когда произошло изменение. Это позволит вам восстановить нужную версию. Файлы бекапов шифрвуются, как и основной файл `vault.json`
`keys` - хранятся privateKey и publicKey
```sheel
└── 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`.
- Базовый шаблон для тестов:
```go
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`](https://github.com/curkan/go2fa/blob/master/LICENSE).