summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/dgrijalva/jwt-go/request
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/dgrijalva/jwt-go/request')
-rw-r--r--vendor/github.com/dgrijalva/jwt-go/request/doc.go7
-rw-r--r--vendor/github.com/dgrijalva/jwt-go/request/extractor.go81
-rw-r--r--vendor/github.com/dgrijalva/jwt-go/request/oauth2.go28
-rw-r--r--vendor/github.com/dgrijalva/jwt-go/request/request.go24
4 files changed, 140 insertions, 0 deletions
diff --git a/vendor/github.com/dgrijalva/jwt-go/request/doc.go b/vendor/github.com/dgrijalva/jwt-go/request/doc.go
new file mode 100644
index 00000000..c01069c9
--- /dev/null
+++ b/vendor/github.com/dgrijalva/jwt-go/request/doc.go
@@ -0,0 +1,7 @@
+// Utility package for extracting JWT tokens from
+// HTTP requests.
+//
+// The main function is ParseFromRequest and it's WithClaims variant.
+// See examples for how to use the various Extractor implementations
+// or roll your own.
+package request
diff --git a/vendor/github.com/dgrijalva/jwt-go/request/extractor.go b/vendor/github.com/dgrijalva/jwt-go/request/extractor.go
new file mode 100644
index 00000000..14414fe2
--- /dev/null
+++ b/vendor/github.com/dgrijalva/jwt-go/request/extractor.go
@@ -0,0 +1,81 @@
+package request
+
+import (
+ "errors"
+ "net/http"
+)
+
+// Errors
+var (
+ ErrNoTokenInRequest = errors.New("no token present in request")
+)
+
+// Interface for extracting a token from an HTTP request.
+// The ExtractToken method should return a token string or an error.
+// If no token is present, you must return ErrNoTokenInRequest.
+type Extractor interface {
+ ExtractToken(*http.Request) (string, error)
+}
+
+// Extractor for finding a token in a header. Looks at each specified
+// header in order until there's a match
+type HeaderExtractor []string
+
+func (e HeaderExtractor) ExtractToken(req *http.Request) (string, error) {
+ // loop over header names and return the first one that contains data
+ for _, header := range e {
+ if ah := req.Header.Get(header); ah != "" {
+ return ah, nil
+ }
+ }
+ return "", ErrNoTokenInRequest
+}
+
+// Extract token from request arguments. This includes a POSTed form or
+// GET URL arguments. Argument names are tried in order until there's a match.
+// This extractor calls `ParseMultipartForm` on the request
+type ArgumentExtractor []string
+
+func (e ArgumentExtractor) ExtractToken(req *http.Request) (string, error) {
+ // Make sure form is parsed
+ req.ParseMultipartForm(10e6)
+
+ // loop over arg names and return the first one that contains data
+ for _, arg := range e {
+ if ah := req.Form.Get(arg); ah != "" {
+ return ah, nil
+ }
+ }
+
+ return "", ErrNoTokenInRequest
+}
+
+// Tries Extractors in order until one returns a token string or an error occurs
+type MultiExtractor []Extractor
+
+func (e MultiExtractor) ExtractToken(req *http.Request) (string, error) {
+ // loop over header names and return the first one that contains data
+ for _, extractor := range e {
+ if tok, err := extractor.ExtractToken(req); tok != "" {
+ return tok, nil
+ } else if err != ErrNoTokenInRequest {
+ return "", err
+ }
+ }
+ return "", ErrNoTokenInRequest
+}
+
+// Wrap an Extractor in this to post-process the value before it's handed off.
+// See AuthorizationHeaderExtractor for an example
+type PostExtractionFilter struct {
+ Extractor
+ Filter func(string) (string, error)
+}
+
+func (e *PostExtractionFilter) ExtractToken(req *http.Request) (string, error) {
+ if tok, err := e.Extractor.ExtractToken(req); tok != "" {
+ return e.Filter(tok)
+ } else {
+ return "", err
+ }
+}
diff --git a/vendor/github.com/dgrijalva/jwt-go/request/oauth2.go b/vendor/github.com/dgrijalva/jwt-go/request/oauth2.go
new file mode 100644
index 00000000..5948694a
--- /dev/null
+++ b/vendor/github.com/dgrijalva/jwt-go/request/oauth2.go
@@ -0,0 +1,28 @@
+package request
+
+import (
+ "strings"
+)
+
+// Strips 'Bearer ' prefix from bearer token string
+func stripBearerPrefixFromTokenString(tok string) (string, error) {
+ // Should be a bearer token
+ if len(tok) > 6 && strings.ToUpper(tok[0:7]) == "BEARER " {
+ return tok[7:], nil
+ }
+ return tok, nil
+}
+
+// Extract bearer token from Authorization header
+// Uses PostExtractionFilter to strip "Bearer " prefix from header
+var AuthorizationHeaderExtractor = &PostExtractionFilter{
+ HeaderExtractor{"Authorization"},
+ stripBearerPrefixFromTokenString,
+}
+
+// Extractor for OAuth2 access tokens. Looks in 'Authorization'
+// header then 'access_token' argument for a token.
+var OAuth2Extractor = &MultiExtractor{
+ AuthorizationHeaderExtractor,
+ ArgumentExtractor{"access_token"},
+}
diff --git a/vendor/github.com/dgrijalva/jwt-go/request/request.go b/vendor/github.com/dgrijalva/jwt-go/request/request.go
new file mode 100644
index 00000000..1807b396
--- /dev/null
+++ b/vendor/github.com/dgrijalva/jwt-go/request/request.go
@@ -0,0 +1,24 @@
+package request
+
+import (
+ "github.com/dgrijalva/jwt-go"
+ "net/http"
+)
+
+// Extract and parse a JWT token from an HTTP request.
+// This behaves the same as Parse, but accepts a request and an extractor
+// instead of a token string. The Extractor interface allows you to define
+// the logic for extracting a token. Several useful implementations are provided.
+func ParseFromRequest(req *http.Request, extractor Extractor, keyFunc jwt.Keyfunc) (token *jwt.Token, err error) {
+ return ParseFromRequestWithClaims(req, extractor, jwt.MapClaims{}, keyFunc)
+}
+
+// ParseFromRequest but with custom Claims type
+func ParseFromRequestWithClaims(req *http.Request, extractor Extractor, claims jwt.Claims, keyFunc jwt.Keyfunc) (token *jwt.Token, err error) {
+ // Extract token from request
+ if tokStr, err := extractor.ExtractToken(req); err == nil {
+ return jwt.ParseWithClaims(tokStr, claims, keyFunc)
+ } else {
+ return nil, err
+ }
+}