Bienvenue dans notre parcours de création d'un gestionnaire de mots de passe dans Go ! Dans ce deuxième volet, nous explorerons les progrès que nous avons réalisés depuis notre engagement initial. Nous avons ajouté de nouvelles fonctionnalités, amélioré la structure du code et implémenté des tests. Allons-y !
L'un des premiers changements que vous remarquerez est la structure améliorée du projet. Nous avons séparé notre code en plusieurs fichiers et packages, conformément aux meilleures pratiques de Go :
dost/ . ├── LICENSE ├── README.md ├── go.mod ├── go.sum ├── internal │ ├── internal_test.go │ └── passgen.go └── main.go
Cette structure permet une meilleure organisation et maintenabilité à mesure que notre projet se développe.
Nous avons considérablement amélioré notre CLI, la rendant plus flexible et plus conviviale. Voici un extrait de notre main.go :
func main() { generateCmd := flag.NewFlagSet("generate", flag.ExitOnError) flag.Parse() switch os.Args[1] { case "generate": internal.Generate(generateCmd) } }
Cette configuration autorise les sous-commandes, prenant actuellement en charge la commande generate. Les utilisateurs peuvent désormais interagir avec notre outil comme ceci :
go run main.go generate email/[email protected] 15
Nous avons ajouté des options pour personnaliser la génération de mots de passe. Les utilisateurs peuvent désormais spécifier la longueur du mot de passe et choisir d'exclure les caractères spéciaux :
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) }
Cette fonction permet aux utilisateurs d'utiliser des indicateurs tels que -n pour exclure les symboles et -c pour copier le mot de passe dans le presse-papiers au lieu de l'afficher.
Nous avons affiné notre fonction de génération de mot de passe pour gérer les nouvelles options de personnalisation :
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; iCette fonction respecte désormais l'indicateur noSymbols, permettant une génération de mot de passe plus flexible.
Implémentation des tests
Nous avons franchi une étape importante pour garantir la fiabilité de notre code en mettant en œuvre des tests. Voici un extrait de notre fichier de test :
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) } }Ces tests vérifient la longueur correcte du mot de passe et l'inclusion de caractères spéciaux. Il est intéressant de noter que notre test des caractères spéciaux a révélé un point à améliorer : sur 10 000 mots de passe générés, 234 ne contenaient pas de caractères spéciaux. Cela nous donne une direction claire pour notre prochain raffinement.
Quelle est la prochaine étape ?
Même si nous avons réalisé des progrès significatifs, il reste encore des progrès à faire :
- Affinez l'algorithme de génération de mot de passe pour garantir l'inclusion cohérente des caractères spéciaux.
- Implémentez la fonctionnalité de stockage des mots de passe.
- Ajoutez le cryptage pour les mots de passe stockés.
- Développer des fonctionnalités de recherche et de récupération.
Restez à l'écoute pour la prochaine partie de notre série, où nous relèverons ces défis et continuerons à faire évoluer notre gestionnaire de mots de passe !
N'oubliez pas que le code source complet est disponible sur GitHub. N'hésitez pas à cloner, bifurquer et contribuer au projet. Vos commentaires et contributions sont toujours les bienvenus !
Bon codage et restez en sécurité ! ??
svemaraju / faire
gestionnaire de mots de passe en ligne de commande dost écrit en Go
faire
dost est un gestionnaire de mots de passe CLI écrit en Go.
Inspiré par (Pass)[https://www.passwordstore.org/]
Caractéristiques
- Générer des mots de passe aléatoires de longueur configurable
- Copier automatiquement les mots de passe générés dans le presse-papiers
- Passer à l'aide de symboles
Usage
> go build -o dost main.goGénération du mot de passe :
> ./dost generate email/[email protected] Generated Password: );XE,7-Dv?)Aa &Génération d'un mot de passe avec une longueur spécifiée (la valeur par défaut est 25) :
> ./dost generate email/[email protected] 12 Generated Password: siCopier le mot de passe généré dans le presse-papiers sans imprimer :
> ./dost generate -c email/[email protected] Copied to clipboard! ✅Évitez les symboles pour générer des mots de passe :
> ./dost generate -n email/[email protected] Generated Password: E2UST}^{Ac[Fb&D|cD%;Eij>HEn cours de développement
- Insérer un nouveau mot de passe manuellement
- Afficher un mot de passe existant
- Liste de toutes les entrées
- Stockage du mot de passe
- Cryptage basé sur la clé GPG
Licence
MIT
Voir sur GitHub
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3