Go でパスワード マネージャーを構築する旅へようこそ!この 2 回目の記事では、最初のコミット以降の進捗状況を見ていきます。新しい機能を追加し、コード構造を改善し、テストを実装しました。飛び込んでみましょう!
最初に気づく変更の 1 つは、プロジェクト構造の改善です。 Go のベスト プラクティスに従って、コードを複数のファイルとパッケージに分割しました:
dost/ . ├── LICENSE ├── README.md ├── go.mod ├── go.sum ├── internal │ ├── internal_test.go │ └── passgen.go └── main.go
この構造により、プロジェクトが成長するにつれて組織化と保守性が向上します。
CLI が大幅に改善され、より柔軟でユーザーフレンドリーになりました。以下は main.go のスニペットです:
func main() { generateCmd := flag.NewFlagSet("generate", flag.ExitOnError) flag.Parse() switch os.Args[1] { case "generate": internal.Generate(generateCmd) } }
このセットアップではサブコマンドが可能になり、現在はgenerateコマンドをサポートしています。ユーザーは次のようにツールを操作できるようになりました:
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 で入手できることを覚えておいてください。自由にクローン、フォーク、プロジェクトに貢献してください。フィードバックや貢献はいつでも大歓迎です!
コーディングを楽しんで、安全を確保してください! ??
スベマラジュ / ドスト
Go で書かれた dost コマンド ライン パスワード マネージャー
ドスト
dost は Go で書かれた CLI パスワード マネージャーです。
(パス)[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