util.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package back
  2. import (
  3. "crypto/rand"
  4. "crypto/sha256"
  5. "encoding/base64"
  6. "encoding/hex"
  7. "time"
  8. )
  9. // GenerateBytes генерирует рандомный массив байтов из n элементов
  10. func GenerateBytes(n int) ([]byte, error) {
  11. b := make([]byte, n)
  12. _, err := rand.Read(b)
  13. if err != nil {
  14. return nil, err
  15. }
  16. return b, nil
  17. }
  18. // GenerateString генерирует рандомную строку из n символов
  19. func GenerateString(n int) (string, error) {
  20. b, err := GenerateBytes(n)
  21. return base64.URLEncoding.EncodeToString(b), err
  22. }
  23. // GenerateHash генерирует 256 битный хэш
  24. func GenerateHash(value string) (string, error) {
  25. str, err := GenerateString(16)
  26. if err != nil {
  27. return "", err
  28. }
  29. hash := sha256.New()
  30. _, err = hash.Write([]byte(time.Now().String() + str + value))
  31. if err != nil {
  32. return "", err
  33. }
  34. return hex.EncodeToString(hash.Sum(nil)), nil
  35. }
  36. func getDate(dbFormat string) string {
  37. if len(dbFormat) < 19 {
  38. if len(dbFormat) < 10 {
  39. return "?дата?"
  40. }
  41. return dbFormat[8:10] + month[dbFormat[5:7]] + dbFormat[0:4]
  42. }
  43. return (dbFormat[8:10] + month[dbFormat[5:7]] + dbFormat[0:4] + " " + dbFormat[11:19])
  44. }