package utils import ( "crypto/rand" "fmt" "log" "math/big" ) func GenerateToken() string { const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" const length = 8 charLen := big.NewInt(int64(len(charset))) b := make([]byte, length) for i := range b { n, err := rand.Int(rand.Reader, charLen) if err != nil { log.Fatalf("Could not generate random number: %s\n", err) } b[i] = charset[n.Int64()] } return string(b) } type PhotoviewError struct { message string original error } func (e PhotoviewError) Error() string { return fmt.Sprintf("%s: %s", e.message, e.original) } func HandleError(message string, err error) PhotoviewError { log.Printf("ERROR: %s: %s", message, err) return PhotoviewError{ message: message, original: err, } }