mirror of https://github.com/gorilla/mux
Mirror of https://github.com/gorilla/mux
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.
46 lines
1.1 KiB
46 lines
1.1 KiB
package mux_test |
|
|
|
import ( |
|
"log" |
|
"net/http" |
|
|
|
"github.com/gorilla/mux" |
|
) |
|
|
|
// Define our struct |
|
type authenticationMiddleware struct { |
|
tokenUsers map[string]string |
|
} |
|
|
|
// Initialize it somewhere |
|
func (amw *authenticationMiddleware) Populate() { |
|
amw.tokenUsers["00000000"] = "user0" |
|
amw.tokenUsers["aaaaaaaa"] = "userA" |
|
amw.tokenUsers["05f717e5"] = "randomUser" |
|
amw.tokenUsers["deadbeef"] = "user0" |
|
} |
|
|
|
// Middleware function, which will be called for each request |
|
func (amw *authenticationMiddleware) Middleware(next http.Handler) http.Handler { |
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
|
token := r.Header.Get("X-Session-Token") |
|
|
|
if user, found := amw.tokenUsers[token]; found { |
|
// We found the token in our map |
|
log.Printf("Authenticated user %s\n", user) |
|
next.ServeHTTP(w, r) |
|
} else { |
|
http.Error(w, "Forbidden", http.StatusForbidden) |
|
} |
|
}) |
|
} |
|
|
|
func Example_authenticationMiddleware() { |
|
r := mux.NewRouter() |
|
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { |
|
// Do something here |
|
}) |
|
amw := authenticationMiddleware{make(map[string]string)} |
|
amw.Populate() |
|
r.Use(amw.Middleware) |
|
}
|
|
|