summaryrefslogtreecommitdiff
path: root/vendor/github.com/mitchellh/packer/builder/azure/common/randomstring.go
blob: a81f5b3c40f70a65fbc2ecbcfc2fc3559fdf63a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package common

import (
	"math/rand"
	"os"
	"time"
)

var pwSymbols = []string{
	"abcdefghijklmnopqrstuvwxyz",
	"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
	"0123456789",
}

var rnd = rand.New(rand.NewSource(time.Now().UnixNano() + int64(os.Getpid())))

func RandomString(chooseFrom string, length int) (randomString string) {
	cflen := len(chooseFrom)
	for i := 0; i < length; i++ {
		randomString += string(chooseFrom[rnd.Intn(cflen)])
	}
	return
}

func RandomPassword() (password string) {
	pwlen := 15
	batchsize := pwlen / len(pwSymbols)
	pw := make([]byte, 0, pwlen)
	// choose character set
	for c := 0; len(pw) < pwlen; c++ {
		s := RandomString(pwSymbols[c%len(pwSymbols)], rnd.Intn(batchsize-1)+1)
		pw = append(pw, []byte(s)...)
	}
	// truncate
	pw = pw[:pwlen]

	// permute
	for c := 0; c < pwlen-1; c++ {
		i := rnd.Intn(pwlen-c) + c
		x := pw[c]
		pw[c] = pw[i]
		pw[i] = x
	}
	return string(pw)
}