135 lines
2.8 KiB
Go
135 lines
2.8 KiB
Go
package utilities
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
tst "testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/supabase/auth/internal/conf"
|
|
)
|
|
|
|
func TestGetIPAddress(t *tst.T) {
|
|
examples := []func(r *http.Request) string{
|
|
func(r *http.Request) string {
|
|
r.Header = nil
|
|
r.RemoteAddr = "127.0.0.1:8080"
|
|
|
|
return "127.0.0.1"
|
|
},
|
|
|
|
func(r *http.Request) string {
|
|
r.Header = nil
|
|
r.RemoteAddr = "incorrect"
|
|
|
|
return "incorrect"
|
|
},
|
|
|
|
func(r *http.Request) string {
|
|
r.Header = make(http.Header)
|
|
r.RemoteAddr = "127.0.0.1:8080"
|
|
|
|
return "127.0.0.1"
|
|
},
|
|
|
|
func(r *http.Request) string {
|
|
r.Header = make(http.Header)
|
|
r.RemoteAddr = "[::1]:8080"
|
|
|
|
return "::1"
|
|
},
|
|
|
|
func(r *http.Request) string {
|
|
r.Header = make(http.Header)
|
|
r.RemoteAddr = "127.0.0.1:8080"
|
|
r.Header.Add("X-Forwarded-For", "127.0.0.2")
|
|
|
|
return "127.0.0.2"
|
|
},
|
|
|
|
func(r *http.Request) string {
|
|
r.Header = make(http.Header)
|
|
r.RemoteAddr = "127.0.0.1:8080"
|
|
r.Header.Add("X-Forwarded-For", "127.0.0.2")
|
|
|
|
return "127.0.0.2"
|
|
},
|
|
|
|
func(r *http.Request) string {
|
|
r.Header = make(http.Header)
|
|
r.RemoteAddr = "127.0.0.1:8080"
|
|
r.Header.Add("X-Forwarded-For", "127.0.0.2,")
|
|
|
|
return "127.0.0.2"
|
|
},
|
|
|
|
func(r *http.Request) string {
|
|
r.Header = make(http.Header)
|
|
r.RemoteAddr = "127.0.0.1:8080"
|
|
r.Header.Add("X-Forwarded-For", "127.0.0.2,127.0.0.3")
|
|
|
|
return "127.0.0.2"
|
|
},
|
|
|
|
func(r *http.Request) string {
|
|
r.Header = make(http.Header)
|
|
r.RemoteAddr = "127.0.0.1:8080"
|
|
r.Header.Add("X-Forwarded-For", "::1,127.0.0.2")
|
|
|
|
return "::1"
|
|
},
|
|
}
|
|
|
|
for _, example := range examples {
|
|
req := &http.Request{}
|
|
expected := example(req)
|
|
|
|
require.Equal(t, GetIPAddress(req), expected)
|
|
}
|
|
}
|
|
|
|
func TestGetReferrer(t *tst.T) {
|
|
config := conf.GlobalConfiguration{
|
|
SiteURL: "https://example.com",
|
|
URIAllowList: []string{"http://localhost:8000/*"},
|
|
JWT: conf.JWTConfiguration{
|
|
Secret: "testsecret",
|
|
},
|
|
}
|
|
require.NoError(t, config.ApplyDefaults())
|
|
cases := []struct {
|
|
desc string
|
|
redirectURL string
|
|
expected string
|
|
}{
|
|
{
|
|
desc: "valid redirect url",
|
|
redirectURL: "http://localhost:8000/path",
|
|
expected: "http://localhost:8000/path",
|
|
},
|
|
{
|
|
desc: "invalid redirect url",
|
|
redirectURL: "http://localhost:3000",
|
|
expected: config.SiteURL,
|
|
},
|
|
{
|
|
desc: "no / separator",
|
|
redirectURL: "http://localhost:8000",
|
|
expected: config.SiteURL,
|
|
},
|
|
{
|
|
desc: "* respects separator",
|
|
redirectURL: "http://localhost:8000/path/to/page",
|
|
expected: config.SiteURL,
|
|
},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
t.Run(c.desc, func(t *tst.T) {
|
|
r := httptest.NewRequest("GET", "http://localhost?redirect_to="+c.redirectURL, nil)
|
|
referrer := GetReferrer(r, &config)
|
|
require.Equal(t, c.expected, referrer)
|
|
})
|
|
}
|
|
}
|