Willkommen zurück auf unserer Reise zum Erstellen eines Passwort-Managers in Go! In dieser zweiten Folge werden wir die Fortschritte untersuchen, die wir seit unserem ersten Commit gemacht haben. Wir haben neue Funktionen hinzugefügt, die Codestruktur verbessert und Tests implementiert. Lass uns eintauchen!
Eine der ersten Änderungen, die Sie bemerken werden, ist die verbesserte Projektstruktur. Wir haben unseren Code gemäß den Best Practices von Go in mehrere Dateien und Pakete aufgeteilt:
dost/ . ├── LICENSE ├── README.md ├── go.mod ├── go.sum ├── internal │ ├── internal_test.go │ └── passgen.go └── main.go
Diese Struktur ermöglicht eine bessere Organisation und Wartbarkeit, wenn unser Projekt wächst.
Wir haben unsere CLI erheblich verbessert und sie flexibler und benutzerfreundlicher gemacht. Hier ist ein Ausschnitt aus unserem main.go:
func main() { generateCmd := flag.NewFlagSet("generate", flag.ExitOnError) flag.Parse() switch os.Args[1] { case "generate": internal.Generate(generateCmd) } }
Dieses Setup ermöglicht Unterbefehle und unterstützt derzeit den Befehl „generate“. Benutzer können jetzt wie folgt mit unserem Tool interagieren:
go run main.go generate email/[email protected] 15
Wir haben Optionen zum Anpassen der Passwortgenerierung hinzugefügt. Benutzer können jetzt die Passwortlänge angeben und Sonderzeichen ausschließen:
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) }
Mit dieser Funktion können Benutzer Flags wie -n zum Ausschließen von Symbolen und -c verwenden, um das Passwort in die Zwischenablage zu kopieren, anstatt es anzuzeigen.
Wir haben unsere Funktion zur Passwortgenerierung verfeinert, um die neuen Anpassungsoptionen zu berücksichtigen:
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; iDiese Funktion berücksichtigt jetzt das noSymbols-Flag und ermöglicht so eine flexiblere Passwortgenerierung.
Tests durchführen
Wir haben durch die Implementierung von Tests einen wichtigen Schritt zur Sicherstellung der Zuverlässigkeit unseres Codes gemacht. Hier ist ein Ausschnitt aus unserer Testdatei:
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) } }Diese Tests prüfen die korrekte Passwortlänge und die Einbeziehung von Sonderzeichen. Interessanterweise hat unser Sonderzeichentest einen Bereich mit Verbesserungspotenzial aufgedeckt: Von 10.000 generierten Passwörtern enthielten 234 keine Sonderzeichen. Dies gibt uns eine klare Richtung für unsere nächste Verfeinerung.
Was kommt als nächstes?
Obwohl wir erhebliche Fortschritte gemacht haben, gibt es noch Raum für Verbesserungen:
- Verfeinern Sie den Passwortgenerierungsalgorithmus, um eine konsistente Einbeziehung von Sonderzeichen sicherzustellen.
- Passwortspeicherfunktion implementieren.
- Verschlüsselung für gespeicherte Passwörter hinzufügen.
- Such- und Abruffunktionen entwickeln.
Seien Sie gespannt auf den nächsten Teil unserer Serie, in dem wir uns diesen Herausforderungen stellen und unseren Passwort-Manager weiterentwickeln!
Denken Sie daran, dass der vollständige Quellcode auf GitHub verfügbar ist. Fühlen Sie sich frei, das Projekt zu klonen, zu forken und dazu beizutragen. Ihr Feedback und Ihre Beiträge sind immer willkommen!
Viel Spaß beim Codieren und bleiben Sie sicher! ??
svemaraju / dost
dost-Befehlszeilen-Passwort-Manager, geschrieben in Go
dost
dost ist ein in Go geschriebener CLI-Passwort-Manager.
Inspiriert von (Pass)[https://www.passwordstore.org/]
Merkmale
- Zufällige Passwörter konfigurierbarer Länge generieren
- Generierte Passwörter automatisch in die Zwischenablage kopieren
- Mit Symbolen überspringen
Verwendung
> go build -o dost main.goPasswort wird generiert:
> ./dost generate email/[email protected] Generated Password: );XE,7-Dv?)Aa &Passwort mit angegebener Länge wird generiert (Standard ist 25):
> ./dost generate email/[email protected] 12 Generated Password: siGeneriertes Passwort ohne Ausdruck in die Zwischenablage kopieren:
> ./dost generate -c email/[email protected] Copied to clipboard! ✅Vermeiden Sie Symbole zum Generieren von Passwörtern:
> ./dost generate -n email/[email protected] Generated Password: E2UST}^{Ac[Fb&D|cD%;Eij>HIn Entwicklung
- Geben Sie manuell ein neues Passwort ein
- Vorhandenes Passwort anzeigen
- Alle Einträge auflisten
- Passwortspeicher
- GPG-Schlüsselbasierte Verschlüsselung
Lizenz
MIT
Ansicht auf GitHub
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3