Kepler core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

53 lines
1.7 KiB

package restlet
import (
"fmt"
log "github.com/Sirupsen/logrus"
"github.com/dgrijalva/jwt-go"
"github.com/dgrijalva/jwt-go/request"
"net/http"
)
func GetSession(ctx RequestContext, secret, cookiename string, claims jwt.Claims) error {
if e := ExtractClaimsViaHeader(ctx.Request(), secret, claims); nil == e {
log.Debugln("> GetSession via Header:>", claims)
return nil
} else {
log.Debugln("> GetSession via Header failed:>", e)
}
if e := ExtractClaimsViaCookie(ctx.Request(), cookiename, secret, claims); nil == e {
log.Debugln("> GetSession via Cookie:>", claims)
return nil
} else {
log.Debugln("> GetSession via Cookie failed:>", e)
}
return fmt.Errorf("can not read session token")
}
func ExtractClaimsViaHeader(r *http.Request, secret string, o jwt.Claims) error {
if token, err := request.ParseFromRequestWithClaims(r, request.AuthorizationHeaderExtractor, o,
func(token *jwt.Token) (interface{}, error) {
return []byte(secret), nil
}); nil != err {
return err
} else if ! token.Valid {
return fmt.Errorf("token invalid")
}
return nil
}
func ExtractClaimsViaCookie(r *http.Request, ckname string, secret string, o jwt.Claims) error {
for _, x := range r.Cookies() {
if x.Name == ckname {
if token, e := jwt.ParseWithClaims(x.Value, o, func(token *jwt.Token) (interface{}, error) {
return []byte(secret), nil
}); nil != e {
return e
} else if token.Valid {
return nil
}
break
}
}
return fmt.Errorf("not found")
}