Nenhuma Descrição

auth.go 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package main
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "io/ioutil"
  6. "log"
  7. "net/http"
  8. "time"
  9. "github.com/dgrijalva/jwt-go"
  10. )
  11. const (
  12. privateKey = "./keys/app.rsa"
  13. )
  14. var (
  15. signKey []byte
  16. )
  17. func init() {
  18. var err error
  19. signKey, err = ioutil.ReadFile(privateKey)
  20. if err != nil {
  21. log.Fatal("Error reading Private Key")
  22. }
  23. }
  24. func Login(w http.ResponseWriter, r *http.Request) {
  25. type UserData struct {
  26. Email string `json:"email"`
  27. Password string `json:"password"`
  28. }
  29. decoder := json.NewDecoder(r.Body)
  30. var userData UserData
  31. err := decoder.Decode(&userData)
  32. if err != nil {
  33. log.Println(err)
  34. return
  35. }
  36. if userData.Email == "" || userData.Password == "" {
  37. BR(w, r, errors.New("Missing credentials"), http.StatusBadRequest)
  38. return
  39. }
  40. db := GetDB(w, r)
  41. user, errM := AuthUser(db, userData.Email, userData.Password)
  42. if errM != nil {
  43. HandleModelError(w, r, errM)
  44. return
  45. }
  46. SetToken(w, r, user)
  47. }
  48. func SignUp(w http.ResponseWriter, r *http.Request) {
  49. type UserData struct {
  50. Email string `json:"email"`
  51. Password string `json:"password"`
  52. }
  53. decoder := json.NewDecoder(r.Body)
  54. var userData UserData
  55. err := decoder.Decode(&userData)
  56. if err != nil {
  57. log.Println(err)
  58. return
  59. }
  60. if userData.Email == "" || userData.Password == "" {
  61. BR(w, r, errors.New("Missing information"), http.StatusBadRequest)
  62. return
  63. }
  64. db := GetDB(w, r)
  65. user := &User{Email: userData.Email, Password: userData.Password}
  66. errM := CreateUser(db, user)
  67. if errM != nil {
  68. HandleModelError(w, r, errM)
  69. return
  70. }
  71. SetToken(w, r, user)
  72. }
  73. func SetToken(w http.ResponseWriter, r *http.Request, user *User) {
  74. t := jwt.New(jwt.GetSigningMethod("RS256"))
  75. t.Claims["ID"] = user.ID.Hex()
  76. t.Claims["iat"] = time.Now().Unix()
  77. t.Claims["exp"] = time.Now().Add(time.Minute * 60 * 24 * 14).Unix()
  78. tokenString, err := t.SignedString(signKey)
  79. if err != nil {
  80. ISR(w, r, err)
  81. return
  82. }
  83. ServeJSON(w, r, &Response{"token": tokenString}, http.StatusOK)
  84. return
  85. }