Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/benpate/password
https://github.com/benpate/password
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/benpate/password
- Owner: benpate
- License: mit
- Created: 2022-07-06T20:13:18.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-07-06T20:16:55.000Z (over 2 years ago)
- Last Synced: 2024-10-28T20:49:22.772Z (3 months ago)
- Language: Go
- Size: 10.7 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
## Golang Password Generator
[![GoDoc](https://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://pkg.go.dev/github.com/benpate/password)
[![Build Status](https://img.shields.io/github/workflow/status/benpate/password/Go/main)](https://github.com/benpate/password/actions/workflows/go.yml)
[![Codecov](https://img.shields.io/codecov/c/github/benpate/password.svg?style=flat-square)](https://codecov.io/gh/benpate/password)
[![Go Report Card](https://goreportcard.com/badge/github.com/benpate/benpate?style=flat-square)](https://goreportcard.com/report/github.com/benpate/password)
[![Version](https://img.shields.io/github/v/release/benpate/password?include_prereleases&style=flat-square&color=brightgreen)](https://github.com/benpate/password/releases)[![GitHub Actions](https://img.shields.io/github/workflow/status/sethvargo/go-password/Test?style=flat-square)](https://github.com/sethvargo/go-password/actions?query=workflow%3ATest)
This library implements generation of random passwords with provided
requirements as described by [AgileBits
1Password](https://discussions.agilebits.com/discussion/23842/how-random-are-the-generated-passwords)
in pure Golang. The algorithm is commonly used when generating website
passwords.The library uses crypto/rand for added randomness.
Sample example passwords this library may generate:
```text
0N[k9PhDqmmfaO`p_XHjVv`HTq|zsH4XiH8umjg9JAGJ#\Qm6lZ,28XF4{X?3sHj
7@90|0H7!4p\,c Since these are completely randomized, it's possible that they may generate passwords that don't comply with some custom password policies, such as ones that require both upper case AND lower case letters. If your particular use case needs a mix of casing, then you can either increase the number of characters in the password or check the output and regenerate if it fails a particular constraint, such as requiring both upper and lower case.## Installation
```sh
$ go get -u github.com/sethvargo/go-password/password
```## Usage
```golang
package mainimport (
"log""github.com/sethvargo/go-password/password"
)func main() {
// Generate a password that is 64 characters long with 10 digits, 10 symbols,
// allowing upper and lower case letters, disallowing repeat characters.
res, err := password.Generate(64, 10, 10, false, false)
if err != nil {
log.Fatal(err)
}
log.Printf(res)
}
```See the [GoDoc](https://godoc.org/github.com/sethvargo/go-password) for more
information.## Testing
For testing purposes, instead of accepted a `*password.Generator` struct, accept
a `password.PasswordGenerator` interface:```go
// func MyFunc(p *password.Generator)
func MyFunc(p password.PasswordGenerator) {
// ...
}
```Then, in tests, use a mocked password generator with stubbed data:
```go
func TestMyFunc(t *testing.T) {
gen := password.NewMockGenerator("canned-response", false)
MyFunc(gen)
}
```In this example, the mock generator will always return the value
"canned-response", regardless of the provided parameters.## License
This code is licensed under the MIT license.