utils.go 1.3 KB

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