"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Créer un gestionnaire de mots de passe dans Go : partie 2

Créer un gestionnaire de mots de passe dans Go : partie 2

Publié le 2024-11-01
Parcourir:260

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 !

Faire évoluer la structure du projet

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.

Interface de ligne de commande améliorée

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

Génération de mot de passe personnalisable

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(&copyToClipBoard, "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.

Algorithme de génération de mot de passe amélioré

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; i 


Cette 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 :

  1. Affinez l'algorithme de génération de mot de passe pour garantir l'inclusion cohérente des caractères spéciaux.
  2. Implémentez la fonctionnalité de stockage des mots de passe.
  3. Ajoutez le cryptage pour les mots de passe stockés.
  4. 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é ! ??

Building a Password Manager in Go: Part 2 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.go
Passer en mode plein écranQuitter le mode plein écran

Gé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: si

Copier 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>H

En 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


Déclaration de sortie Cet article est reproduit sur : https://dev.to/svemaraju/building-a-password-manager-in-go-part-2-5adf?1 En cas d'infraction, veuillez contacter [email protected] pour supprimer il
Dernier tutoriel Plus>

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