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 }