Mercurial > gemma
view pkg/common/random.go @ 804:21609ba97357
client: improve legendelements for layerselection
* Add a special hint to the layer data, so that we can detect
points and specify which resolution we want for the legend.
* Improve LineString to have a bend.
* Actually take styles of the layer into account.
* Do not act on TILE layers.
author | Bernhard Reiter <bernhard@intevation.de> |
---|---|
date | Thu, 27 Sep 2018 15:00:52 +0200 |
parents | c1047fd04a3a |
children | a244b18cb916 |
line wrap: on
line source
package common import ( "bytes" "crypto/rand" "io" "log" "math/big" ) func GenerateRandomKey(length int) []byte { k := make([]byte, length) if _, err := io.ReadFull(rand.Reader, k); err != nil { return nil } return k } func RandomString(n int) string { const ( special = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + special ) max := big.NewInt(int64(len(alphabet))) out := make([]byte, n) for i := 0; i < 1000; i++ { for i := range out { v, err := rand.Int(rand.Reader, max) if err != nil { log.Panicf("error: %v\n", err) } out[i] = alphabet[v.Int64()] } // Ensure at least one special char. if bytes.IndexAny(out, special) >= 0 { return string(out) } } log.Println("warn: Your random generator may be broken.") out[0] = special[0] return string(out) }