Go에서 비밀번호 관리자를 구축하는 여정에 다시 오신 것을 환영합니다! 이번 두 번째 기사에서는 초기 커밋 이후 진행 상황을 살펴보겠습니다. 새로운 기능을 추가하고, 코드 구조를 개선하고, 테스트를 구현했습니다. 뛰어들어 보세요!
가장 먼저 눈에 띄는 변화 중 하나는 향상된 프로젝트 구조입니다. 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 비밀번호 관리자입니다.
(Pass)에서 영감을 얻음[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 키 기반 암호화
특허
MIT
GitHub에서 보기
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3