utils.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package utils
  2. import (
  3. "crypto/hmac"
  4. "crypto/sha256"
  5. "encoding/hex"
  6. "fmt"
  7. "log"
  8. "math/rand"
  9. "os"
  10. "runtime"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. var root string
  16. func SetDevRoot(path string) {
  17. root = path + "/"
  18. }
  19. func Cwd(i int) string {
  20. _, fp, _, _ := runtime.Caller(i)
  21. slice := strings.Split(fp, "/")
  22. slice = slice[:len(slice)-1]
  23. path := strings.Join(slice, "/")
  24. path = strings.Replace(path, root, "", 1)
  25. fmt.Println("root", root)
  26. fmt.Println("path", path)
  27. return path
  28. }
  29. func Err(err error) {
  30. _, fp, line, _ := runtime.Caller(1)
  31. errStr := fmt.Sprintf("Error at %s:%d: %s\n", fp, line, err)
  32. fmt.Printf("%s", errStr)
  33. log, _ := os.OpenFile("error.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0655)
  34. defer log.Close()
  35. errLogStr := fmt.Sprintf("%s %s", time.Now(), errStr)
  36. log.WriteString(errLogStr)
  37. }
  38. func Hash(key string, data string) string {
  39. bKey := []byte(key)
  40. bData := []byte(data)
  41. h := hmac.New(sha256.New, bKey)
  42. h.Write(bData)
  43. return hex.EncodeToString(h.Sum(nil))
  44. }
  45. func Salt(length int) string {
  46. const charset = "1234567890-=!@#$%^&*()_+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  47. b := make([]byte, length)
  48. for i := range b {
  49. b[i] = charset[rand.Intn(len(charset))]
  50. }
  51. return string(b)
  52. }
  53. func CheckArgs() {
  54. if len(os.Args) < 2 {
  55. log.Fatalf("ERROR: port number required: eg ./bin 3000")
  56. os.Exit(1)
  57. }
  58. _, err := strconv.Atoi(os.Args[1])
  59. if err != nil {
  60. log.Fatalf("ERROR: port must be a number")
  61. os.Exit(1)
  62. }
  63. }