No Description

middleware.go 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package main
  2. import (
  3. "errors"
  4. "io/ioutil"
  5. "log"
  6. "net/http"
  7. "strings"
  8. "github.com/codegangsta/negroni"
  9. "github.com/dgrijalva/jwt-go"
  10. "github.com/gorilla/context"
  11. "gopkg.in/mgo.v2"
  12. )
  13. const publicKey = "keys/app.rsa.pub"
  14. var (
  15. verifyKey []byte
  16. )
  17. func init() {
  18. var err error
  19. verifyKey, err = ioutil.ReadFile(publicKey)
  20. if err != nil {
  21. log.Fatal("Error reading Private key")
  22. return
  23. }
  24. }
  25. func JWTMiddleware() negroni.Handler {
  26. return negroni.HandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
  27. if h := r.Header.Get("Authorization"); h != "" {
  28. token, err := jwt.ParseFromRequest(r, func(token *jwt.Token) (interface{}, error) {
  29. return verifyKey, nil
  30. })
  31. switch err.(type) {
  32. case nil:
  33. if !token.Valid {
  34. NotAllowed(w, r)
  35. return
  36. }
  37. context.Set(r, "token", token)
  38. next(w, r)
  39. case *jwt.ValidationError:
  40. vErr := err.(*jwt.ValidationError)
  41. switch vErr.Errors {
  42. case jwt.ValidationErrorExpired:
  43. BR(w, r, errors.New("Token Expired"), http.StatusUnauthorized)
  44. return
  45. default:
  46. ISR(w, r, errors.New(vErr.Error()))
  47. log.Println(vErr.Error())
  48. return
  49. }
  50. default:
  51. ISR(w, r, err)
  52. return
  53. }
  54. } else {
  55. next(w, r)
  56. }
  57. })
  58. }
  59. func DBMiddleware(session *mgo.Session) negroni.Handler {
  60. return negroni.HandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
  61. s := session.Clone()
  62. defer s.Close()
  63. context.Set(r, "dbSession", s)
  64. context.Set(r, "DB", s.DB(DBNAME))
  65. next(w, r)
  66. })
  67. }
  68. func ParseFormMiddleware() negroni.Handler {
  69. return negroni.HandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
  70. err := r.ParseForm()
  71. if err != nil {
  72. ISR(w, r, err)
  73. return
  74. }
  75. next(w, r)
  76. if strings.Contains(r.Header.Get("Content-Type"), "multipart") {
  77. err = r.ParseMultipartForm(1024)
  78. if err != nil {
  79. ISR(w, r, err)
  80. return
  81. }
  82. }
  83. })
  84. }