| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package main
- import (
- "errors"
- "io/ioutil"
- "log"
- "net/http"
- "strings"
- "github.com/codegangsta/negroni"
- "github.com/dgrijalva/jwt-go"
- "github.com/gorilla/context"
- "gopkg.in/mgo.v2"
- )
- const publicKey = "keys/app.rsa.pub"
- var (
- verifyKey []byte
- )
- func init() {
- var err error
- verifyKey, err = ioutil.ReadFile(publicKey)
- if err != nil {
- log.Fatal("Error reading Private key")
- return
- }
- }
- func JWTMiddleware() negroni.Handler {
- return negroni.HandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
- if h := r.Header.Get("Authorization"); h != "" {
- token, err := jwt.ParseFromRequest(r, func(token *jwt.Token) (interface{}, error) {
- return verifyKey, nil
- })
- switch err.(type) {
- case nil:
- if !token.Valid {
- NotAllowed(w, r)
- return
- }
- context.Set(r, "token", token)
- next(w, r)
- case *jwt.ValidationError:
- vErr := err.(*jwt.ValidationError)
- switch vErr.Errors {
- case jwt.ValidationErrorExpired:
- BR(w, r, errors.New("Token Expired"), http.StatusUnauthorized)
- return
- default:
- ISR(w, r, errors.New(vErr.Error()))
- log.Println(vErr.Error())
- return
- }
- default:
- ISR(w, r, err)
- return
- }
- } else {
- next(w, r)
- }
- })
- }
- func DBMiddleware(session *mgo.Session) negroni.Handler {
- return negroni.HandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
- s := session.Clone()
- defer s.Close()
- context.Set(r, "dbSession", s)
- context.Set(r, "DB", s.DB(DBNAME))
- next(w, r)
- })
- }
- func ParseFormMiddleware() negroni.Handler {
- return negroni.HandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
- err := r.ParseForm()
- if err != nil {
- ISR(w, r, err)
- return
- }
- next(w, r)
- if strings.Contains(r.Header.Get("Content-Type"), "multipart") {
- err = r.ParseMultipartForm(1024)
- if err != nil {
- ISR(w, r, err)
- return
- }
- }
- })
- }
|