github.com/influxdata/influxdb/v2@v2.7.6/rand/token.go (about)

     1  package rand
     2  
     3  import (
     4  	"crypto/rand"
     5  	"encoding/base64"
     6  
     7  	platform "github.com/influxdata/influxdb/v2"
     8  )
     9  
    10  // TODO: rename to token.go
    11  
    12  // TokenGenerator implements platform.TokenGenerator.
    13  type TokenGenerator struct {
    14  	size int
    15  }
    16  
    17  // NewTokenGenerator creates an instance of an platform.TokenGenerator.
    18  func NewTokenGenerator(n int) platform.TokenGenerator {
    19  	return &TokenGenerator{
    20  		size: n,
    21  	}
    22  }
    23  
    24  // Token returns a new string token of size t.size.
    25  func (t *TokenGenerator) Token() (string, error) {
    26  	return generateRandomString(t.size)
    27  }
    28  
    29  func generateRandomString(s int) (string, error) {
    30  	b, err := generateRandomBytes(s)
    31  	return base64.URLEncoding.EncodeToString(b), err
    32  }
    33  
    34  func generateRandomBytes(n int) ([]byte, error) {
    35  	b := make([]byte, n)
    36  	if _, err := rand.Read(b); err != nil {
    37  		return nil, err
    38  	}
    39  
    40  	return b, nil
    41  }