25 lines
651 B
Go
25 lines
651 B
Go
package server
|
|
|
|
import (
|
|
"net/http"
|
|
"path"
|
|
)
|
|
|
|
// Logout chooses the correct provider logout route and redirects to it
|
|
func Logout(nextURL, basepath string, routes AuthRoutes) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
ctx := r.Context()
|
|
principal, err := getPrincipal(ctx)
|
|
if err != nil {
|
|
http.Redirect(w, r, path.Join(basepath, nextURL), http.StatusTemporaryRedirect)
|
|
return
|
|
}
|
|
route, ok := routes.Lookup(principal.Issuer)
|
|
if !ok {
|
|
http.Redirect(w, r, path.Join(basepath, nextURL), http.StatusTemporaryRedirect)
|
|
return
|
|
}
|
|
http.Redirect(w, r, route.Logout, http.StatusTemporaryRedirect)
|
|
}
|
|
}
|