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  }