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.
45 lines
760 B
45 lines
760 B
package ticket
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
type Finder func(r *http.Request) string
|
|
|
|
func DefaultFinder(r *http.Request) string {
|
|
if s := FromHeader(r); s != "" {
|
|
return s
|
|
}
|
|
if s := FromCookie(r); s != "" {
|
|
return s
|
|
}
|
|
return FromQuery(r)
|
|
}
|
|
|
|
func FromCookie(r *http.Request) string {
|
|
cookie, err := r.Cookie("ticket")
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return cookie.Value
|
|
}
|
|
|
|
func FromHeader(r *http.Request) string {
|
|
bearer := r.Header.Get("Authorization")
|
|
if len(bearer) > 7 && strings.ToUpper(bearer[0:6]) == "BEARER" {
|
|
return bearer[7:]
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func FromQuery(r *http.Request, keys ...string) string {
|
|
q := r.URL.Query()
|
|
for _, key := range keys {
|
|
s := q.Get(key)
|
|
if s != "" {
|
|
return s
|
|
}
|
|
}
|
|
return q.Get("ticket")
|
|
}
|
|
|