CORS stuff
This commit is contained in:
parent
9d4468d3cf
commit
64862388de
3 changed files with 18 additions and 6 deletions
|
@ -11,6 +11,6 @@ auth:
|
||||||
domain: example.com
|
domain: example.com
|
||||||
# this allows the JWT cookie to be served over plain HTTP only for these Host: header values
|
# this allows the JWT cookie to be served over plain HTTP only for these Host: header values
|
||||||
allowInsecureFor:
|
allowInsecureFor:
|
||||||
"localhost:3050": true
|
"localhost": true
|
||||||
listen: ':3050'
|
listen: ':3050'
|
||||||
public: true
|
public: true
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
|
@ -102,7 +103,8 @@ func (a *authenticator) PrivateRoutes(r chi.Router) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *authenticator) allowInsecureCookie(r *http.Request) bool {
|
func (a *authenticator) allowInsecureCookie(r *http.Request) bool {
|
||||||
v, has := a.cfg.AllowInsecure[r.Host]
|
host := strings.Split(r.Host, ":")
|
||||||
|
v, has := a.cfg.AllowInsecure[host[0]]
|
||||||
return has && v
|
return has && v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,7 +132,13 @@ func (a *authenticator) routeRefresh(w http.ResponseWriter, r *http.Request) {
|
||||||
Name: "jwt",
|
Name: "jwt",
|
||||||
Value: tok,
|
Value: tok,
|
||||||
HttpOnly: true,
|
HttpOnly: true,
|
||||||
Secure: !a.allowInsecureCookie(r),
|
Secure: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
if a.allowInsecureCookie(r) {
|
||||||
|
cookie.Secure = false
|
||||||
|
cookie.SameSite = http.SameSiteNoneMode
|
||||||
|
log.Debug().Msg("same site none")
|
||||||
}
|
}
|
||||||
|
|
||||||
if cookie.Secure {
|
if cookie.Secure {
|
||||||
|
@ -168,12 +176,16 @@ func (a *authenticator) routeAuth(w http.ResponseWriter, r *http.Request) {
|
||||||
Name: "jwt",
|
Name: "jwt",
|
||||||
Value: tok,
|
Value: tok,
|
||||||
HttpOnly: true,
|
HttpOnly: true,
|
||||||
Secure: !a.allowInsecureCookie(r),
|
Secure: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
if cookie.Secure {
|
if a.allowInsecureCookie(r) {
|
||||||
|
cookie.Secure = false
|
||||||
|
cookie.SameSite = http.SameSiteNoneMode
|
||||||
|
} else {
|
||||||
cookie.Domain = a.cfg.Domain
|
cookie.Domain = a.cfg.Domain
|
||||||
}
|
}
|
||||||
|
|
||||||
http.SetCookie(w, cookie)
|
http.SetCookie(w, cookie)
|
||||||
|
|
||||||
jr := struct {
|
jr := struct {
|
||||||
|
|
|
@ -54,7 +54,7 @@ func New(cfg *config.Config) (*Server, error) {
|
||||||
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
|
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
|
||||||
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token", "Upgrade"},
|
AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token", "Upgrade"},
|
||||||
ExposedHeaders: []string{"Link"},
|
ExposedHeaders: []string{"Link"},
|
||||||
AllowCredentials: false,
|
AllowCredentials: true,
|
||||||
MaxAge: 300, // Maximum value not ignored by any of major browsers
|
MaxAge: 300, // Maximum value not ignored by any of major browsers
|
||||||
}))
|
}))
|
||||||
srv.setupRoutes()
|
srv.setupRoutes()
|
||||||
|
|
Loading…
Reference in a new issue