github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/internal/domain/onetimetoken/generator.go (about) 1 package onetimetoken 2 3 import ( 4 "crypto/rand" 5 "encoding/base64" 6 "fmt" 7 ) 8 9 // TokenGenerator missing godoc 10 //go:generate mockery --name=TokenGenerator --output=automock --outpkg=automock --case=underscore --disable-version-string 11 type TokenGenerator interface { 12 NewToken() (string, error) 13 } 14 15 type tokenGenerator struct { 16 tokenLength int 17 } 18 19 // NewTokenGenerator missing godoc 20 func NewTokenGenerator(tokenLength int) TokenGenerator { 21 return &tokenGenerator{tokenLength: tokenLength} 22 } 23 24 // NewToken missing godoc 25 func (tg *tokenGenerator) NewToken() (string, error) { 26 return generateRandomString(tg.tokenLength) 27 } 28 29 func generateRandomBytes(number int) ([]byte, error) { 30 bytes := make([]byte, number) 31 if _, err := rand.Read(bytes); err != nil { 32 return nil, fmt.Errorf("failed to generate random bytes: %s", err) 33 } 34 35 return bytes, nil 36 } 37 38 func generateRandomString(length int) (string, error) { 39 bytes, err := generateRandomBytes(length) 40 return base64.URLEncoding.EncodeToString(bytes), err 41 }