48 lines
952 B
Go
48 lines
952 B
Go
package security
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"crypto/sha256"
|
|
"encoding/base64"
|
|
"encoding/hex"
|
|
)
|
|
|
|
func GenerateToken(byteLength int) (string, error) {
|
|
raw := make([]byte, byteLength)
|
|
if _, err := rand.Read(raw); err != nil {
|
|
return "", err
|
|
}
|
|
return base64.RawURLEncoding.EncodeToString(raw), nil
|
|
}
|
|
|
|
func GenerateNumericCode(length int) (string, error) {
|
|
if length <= 0 {
|
|
length = 6
|
|
}
|
|
|
|
const digits = "0123456789"
|
|
raw := make([]byte, length)
|
|
if _, err := rand.Read(raw); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
code := make([]byte, length)
|
|
for i := range raw {
|
|
code[i] = digits[int(raw[i])%len(digits)]
|
|
}
|
|
return string(code), nil
|
|
}
|
|
|
|
func HashText(value string) string {
|
|
sum := sha256.Sum256([]byte(value))
|
|
return hex.EncodeToString(sum[:])
|
|
}
|
|
|
|
func GeneratePublicID(prefix string) (string, error) {
|
|
raw := make([]byte, 8)
|
|
if _, err := rand.Read(raw); err != nil {
|
|
return "", err
|
|
}
|
|
return prefix + "_" + hex.EncodeToString(raw), nil
|
|
}
|