Bem-vindo de volta à nossa jornada de construção de um gerenciador de senhas no Go! Nesta segunda parte, exploraremos o progresso que fizemos desde o nosso compromisso inicial. Adicionamos novos recursos, melhoramos a estrutura do código e implementamos testes. Vamos mergulhar!
Uma das primeiras mudanças que você notará é a melhoria na estrutura do projeto. Separamos nosso código em vários arquivos e pacotes, seguindo as práticas recomendadas do Go:
dost/ . ├── LICENSE ├── README.md ├── go.mod ├── go.sum ├── internal │ ├── internal_test.go │ └── passgen.go └── main.go
Essa estrutura permite melhor organização e manutenção à medida que nosso projeto cresce.
Melhoramos significativamente nossa CLI, tornando-a mais flexível e fácil de usar. Aqui está um trecho do nosso main.go:
func main() { generateCmd := flag.NewFlagSet("generate", flag.ExitOnError) flag.Parse() switch os.Args[1] { case "generate": internal.Generate(generateCmd) } }
Esta configuração permite subcomandos, atualmente suportando o comando generate. Os usuários agora podem interagir com nossa ferramenta assim:
go run main.go generate email/[email protected] 15
Adicionamos opções para personalizar a geração de senha. Os usuários agora podem especificar o comprimento da senha e optar por excluir caracteres especiais:
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) }
Esta função permite que os usuários usem sinalizadores como -n para excluir símbolos e -c para copiar a senha para a área de transferência em vez de exibi-la.
Refinamos nossa função de geração de senha para lidar com as novas opções de personalização:
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; iEsta função agora respeita o sinalizador noSymbols, permitindo uma geração de senha mais flexível.
Implementando Testes
Demos um passo significativo para garantir a confiabilidade do nosso código através da implementação de testes. Aqui está um trecho do nosso arquivo de teste:
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) } }Esses testes verificam o comprimento correto da senha e a inclusão de caracteres especiais. Curiosamente, nosso teste de caracteres especiais revelou uma área que precisa ser melhorada: em 10.000 senhas geradas, 234 não continham caracteres especiais. Isso nos dá uma direção clara para nosso próximo refinamento.
O que vem a seguir?
Embora tenhamos feito progressos significativos, ainda há espaço para melhorias:
- Refine o algoritmo de geração de senha para garantir a inclusão consistente de caracteres especiais.
- Implemente a funcionalidade de armazenamento de senhas.
- Adicione criptografia para senhas armazenadas.
- Desenvolva recursos de pesquisa e recuperação.
Fique ligado na próxima parte da nossa série, onde enfrentaremos esses desafios e continuaremos a evoluir nosso gerenciador de senhas!
Lembre-se, o código-fonte completo está disponível no GitHub. Sinta-se à vontade para clonar, bifurcar e contribuir com o projeto. Seus comentários e contribuições são sempre bem-vindos!
Boa codificação e fique seguro! ??
svemaraju / dost
gerenciador de senhas de linha de comando dost escrito em Go
dost
dost é um gerenciador de senhas CLI escrito em Go.
Inspirado por (Passe)[https://www.passwordstore.org/]
Características
- Gere senhas aleatórias de tamanho configurável
- Copiar senhas geradas para a área de transferência automaticamente
- Ignorar o uso de símbolos
Uso
> go build -o dost main.goGerando senha:
> ./dost generate email/[email protected] Generated Password: );XE,7-Dv?)Aa &Gerando senha com comprimento especificado (o padrão é 25):
> ./dost generate email/[email protected] 12 Generated Password: siCopiar a senha gerada para a área de transferência sem imprimir:
> ./dost generate -c email/[email protected] Copied to clipboard! ✅Evite símbolos para geração de senhas:
> ./dost generate -n email/[email protected] Generated Password: E2UST}^{Ac[Fb&D|cD%;Eij>HEm desenvolvimento
- Insira uma nova senha manualmente
- Mostrar uma senha existente
- Listar todas as entradas
- Armazenamento de senha
- Criptografia baseada em chave GPG
Licença
MIT
Ver no GitHub
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3