An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          


go2fa totp manager

Храните и используйте свои TOTP ключи в терминале

---

Мне надоело постоянно использовать Google Authentificator и переключаться между ПК и телефоном для подтверждения двухфакторной аутентификации. Поэтому я сделал эту TUI, которая позволит хранить, управлять, просматривать, копировать 2FA ключ в пару нажатий.


animated

---

# Описание

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).