utils.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. return path
  26. }
  27. func Err(err error) {
  28. _, fp, line, _ := runtime.Caller(1)
  29. errStr := fmt.Sprintf("Error at %s:%d: %s\n", fp, line, err)
  30. fmt.Printf("%s", errStr)
  31. log, _ := os.OpenFile("error.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0655)
  32. defer log.Close()
  33. errLogStr := fmt.Sprintf("%s %s", time.Now(), errStr)
  34. log.WriteString(errLogStr)
  35. }
  36. func Hash(key string, data string) string {
  37. bKey := []byte(key)
  38. bData := []byte(data)
  39. h := hmac.New(sha256.New, bKey)
  40. h.Write(bData)
  41. return hex.EncodeToString(h.Sum(nil))
  42. }
  43. func Salt(length int) string {
  44. const charset = "1234567890-=!@#$%^&*()_+abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  45. b := make([]byte, length)
  46. for i := range b {
  47. b[i] = charset[rand.Intn(len(charset))]
  48. }
  49. return string(b)
  50. }
  51. func CheckArgs() {
  52. if len(os.Args) < 2 {
  53. log.Fatalf("ERROR: port number required: eg ./bin 3000")
  54. os.Exit(1)
  55. }
  56. _, err := strconv.Atoi(os.Args[1])
  57. if err != nil {
  58. log.Fatalf("ERROR: port must be a number")
  59. os.Exit(1)
  60. }
  61. }