Make cookies send back from router secure, if router is secured by ssl
This commit is contained in:
13
router.go
13
router.go
@@ -157,11 +157,15 @@ func applyResponseHeader(w http.ResponseWriter, res *http.Response) {
|
|||||||
w.Header().Set(name, value)
|
w.Header().Set(name, value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
w.WriteHeader(res.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyCookies(w http.ResponseWriter, res *http.Response) {
|
func (router *Router) applyCookies(w http.ResponseWriter, res *http.Response) {
|
||||||
cookies := res.Cookies()
|
cookies := res.Cookies()
|
||||||
for _, cookie := range cookies {
|
for _, cookie := range cookies {
|
||||||
|
if router.config.Server.Ssl.Enabled {
|
||||||
|
cookie.Secure = true
|
||||||
|
}
|
||||||
http.SetCookie(w, cookie)
|
http.SetCookie(w, cookie)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -222,7 +226,8 @@ func (router *Router) Route(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
applyCookies(w, res)
|
router.applyCookies(w, res)
|
||||||
|
applyResponseHeader(w, res)
|
||||||
|
|
||||||
// Exit early because its a redirect
|
// Exit early because its a redirect
|
||||||
// Maybe this should be before applying cookies or after applying headers
|
// Maybe this should be before applying cookies or after applying headers
|
||||||
@@ -230,8 +235,6 @@ func (router *Router) Route(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
applyResponseHeader(w, res)
|
|
||||||
|
|
||||||
err = applyBody(w, res)
|
err = applyBody(w, res)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("Could not apply body")
|
log.Error().Err(err).Msg("Could not apply body")
|
||||||
@@ -242,7 +245,7 @@ func (router *Router) Route(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
func handleLocation(w http.ResponseWriter, r *http.Request, res *http.Response) bool {
|
func handleLocation(w http.ResponseWriter, r *http.Request, res *http.Response) bool {
|
||||||
if loc, err := res.Location(); err == nil {
|
if loc, err := res.Location(); err == nil {
|
||||||
http.Redirect(w, r, loc.RequestURI(), http.StatusFound)
|
http.Redirect(w, r, loc.String(), http.StatusFound)
|
||||||
return false
|
return false
|
||||||
} else if !errors.Is(err, http.ErrNoLocation) {
|
} else if !errors.Is(err, http.ErrNoLocation) {
|
||||||
log.Error().Err(err).Msg("Could not extract location")
|
log.Error().Err(err).Msg("Could not extract location")
|
||||||
|
|||||||
Reference in New Issue
Block a user