Добро пожаловать обратно в наше путешествие по созданию менеджера паролей на Go! Во второй части мы рассмотрим прогресс, которого мы достигли с момента нашего первоначального коммита. Мы добавили новые функции, улучшили структуру кода и реализовали тестирование. Давайте погрузимся!
Одним из первых изменений, которые вы заметите, является улучшенная структура проекта. Мы разделили наш код на несколько файлов и пакетов, следуя лучшим практикам Go:
dost/ . ├── LICENSE ├── README.md ├── go.mod ├── go.sum ├── internal │ ├── internal_test.go │ └── passgen.go └── main.go
Эта структура позволяет улучшить организацию и удобство обслуживания по мере роста нашего проекта.
Мы значительно улучшили наш интерфейс командной строки, сделав его более гибким и удобным для пользователя. Вот фрагмент нашего main.go:
func main() { generateCmd := flag.NewFlagSet("generate", flag.ExitOnError) flag.Parse() switch os.Args[1] { case "generate": internal.Generate(generateCmd) } }
Эта настройка позволяет использовать подкоманды, в настоящее время поддерживающие команду генерации. Теперь пользователи могут взаимодействовать с нашим инструментом следующим образом:
go run main.go generate email/[email protected] 15
Мы добавили опции для настройки генерации паролей. Теперь пользователи могут указывать длину пароля и исключать специальные символы:
func Generate(generateFlags *flag.FlagSet) { generateFlags.BoolVar(&noSymbols, "n", false, "Skip symbols while generating password") generateFlags.BoolVar(©ToClipBoard, "c", false, "Copy to clipboard.") generateFlags.Parse(os.Args[2:]) passwordLength := 25 // ... (code to parse custom length) password, err := generatePassword(passwordLength, noSymbols) // ... (code to handle password output) }
Эта функция позволяет пользователям использовать такие флаги, как -n для исключения символов и -c для копирования пароля в буфер обмена вместо его отображения.
Мы усовершенствовали нашу функцию генерации паролей для поддержки новых параметров настройки:
func generatePassword(length int, noSymbols bool) (string, error) { const ( uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" lowercaseLetters = "abcdefghijklmnopqrstuvwxyz" digits = "0123456789" specialChars = "!@#$%^&*()-_= []{}|;:'\",./?" ) allChars := uppercaseLetters lowercaseLetters digits if !noSymbols { allChars = specialChars } var password string for i := 0; iЭта функция теперь учитывает флаг noSymbols, что позволяет более гибко генерировать пароли.
Реализация тестов
Мы сделали значительный шаг к обеспечению надежности нашего кода, внедрив тесты. Вот фрагмент нашего тестового файла:
func TestPasswordLength(t *testing.T) { password, err := generatePassword(10, true) if err != nil { t.Errorf("Expected no error, got %v", err) } else { if len(password) != 10 { t.Errorf("Expected 10 character password, got %d", len(password)) } } } func TestSpecialCharacter10K(t *testing.T) { splCharMissing := 0 for i := 1; i 0 { t.Errorf("Special character was missing in %d / 10000 instances.", splCharMissing) } }Эти тесты проверяют правильную длину пароля и наличие специальных символов. Интересно, что наш тест специальных символов выявил области для улучшения: из 10 000 сгенерированных паролей 234 не содержали специальных символов. Это дает нам четкое направление для нашей следующей доработки.
Что дальше?
Несмотря на значительный прогресс, нам еще есть куда совершенствоваться:
- Уточнить алгоритм генерации пароля, чтобы обеспечить постоянное включение специальных символов.
- Реализовать функцию хранения паролей.
- Добавьте шифрование для сохраненных паролей.
- Разработать функции поиска и извлечения данных.
Следите за обновлениями в следующей части нашей серии, где мы решим эти проблемы и продолжим развивать наш менеджер паролей!
Помните, что полный исходный код доступен на GitHub. Не стесняйтесь клонировать, разветвлять и вносить свой вклад в проект. Ваши отзывы и вклад всегда приветствуются!
Удачного программирования и будьте в безопасности! ??
Свемараджу / дост
менеджер паролей командной строки dost, написанный на Go
дост
dost — это менеджер паролей CLI, написанный на Go.
На основе (Pass)[https://www.passwordstore.org/]
Функции
- Создание случайных паролей настраиваемой длины
- Автоматическое копирование сгенерированных паролей в буфер обмена
- Пропустить использование символов
Использование
> go build -o dost main.goГенерация пароля:
> ./dost generate email/[email protected] Generated Password: );XE,7-Dv?)Aa &Генерация пароля указанной длины (по умолчанию 25):
> ./dost generate email/[email protected] 12 Generated Password: siСкопировать сгенерированный пароль в буфер обмена, не распечатывая:
> ./dost generate -c email/[email protected] Copied to clipboard! ✅Избегайте символов для создания паролей:
> ./dost generate -n email/[email protected] Generated Password: E2UST}^{Ac[Fb&D|cD%;Eij>HВ разработке
- Введите новый пароль вручную
- Показать существующий пароль
- Показать все записи
- Хранение пароля
- Шифрование на основе ключа GPG
Лицензия
МТИ
Просмотреть на GitHub
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3