support hashed credentials

This commit is contained in:
aler9
2020-12-31 19:27:41 +01:00
parent b2f56c9814
commit 9bd587e576
4 changed files with 178 additions and 50 deletions

View File

@@ -9,39 +9,70 @@ import (
"github.com/aler9/gortsplib/pkg/headers"
)
var casesAuth = []struct {
name string
methods []headers.AuthMethod
}{
{
"basic",
[]headers.AuthMethod{headers.AuthBasic},
},
{
"digest",
[]headers.AuthMethod{headers.AuthDigest},
},
{
"both",
[]headers.AuthMethod{headers.AuthBasic, headers.AuthDigest},
},
}
func TestAuth(t *testing.T) {
for _, c1 := range []struct {
name string
methods []headers.AuthMethod
}{
{
"basic",
[]headers.AuthMethod{headers.AuthBasic},
},
{
"digest",
[]headers.AuthMethod{headers.AuthDigest},
},
{
"both",
[]headers.AuthMethod{headers.AuthBasic, headers.AuthDigest},
},
} {
for _, conf := range []string{
"nofail",
"wronguser",
"wrongpass",
"wrongurl",
} {
if conf == "wrongurl" && c1.name == "basic" {
continue
}
func TestAuthMethods(t *testing.T) {
for _, c := range casesAuth {
t.Run(c.name, func(t *testing.T) {
va := NewValidator("testuser", "testpass", c.methods)
wwwAuthenticate := va.GenerateHeader()
t.Run(c1.name+"_"+conf, func(t *testing.T) {
va := NewValidator("testuser", "testpass", c1.methods)
wwwAuthenticate := va.GenerateHeader()
se, err := NewSender(wwwAuthenticate, "testuser", "testpass")
require.NoError(t, err)
authorization := se.GenerateHeader(base.Announce,
base.MustParseURL("rtsp://myhost/mypath"))
se, err := NewSender(wwwAuthenticate,
func() string {
if conf == "wronguser" {
return "test1user"
}
return "testuser"
}(),
func() string {
if conf == "wrongpass" {
return "test1pass"
}
return "testpass"
}())
require.NoError(t, err)
authorization := se.GenerateHeader(base.Announce,
base.MustParseURL(func() string {
if conf == "wrongurl" {
return "rtsp://myhost/my1path"
}
return "rtsp://myhost/mypath"
}()))
err = va.ValidateHeader(authorization, base.Announce,
base.MustParseURL("rtsp://myhost/mypath"))
require.NoError(t, err)
})
err = va.ValidateHeader(authorization, base.Announce,
base.MustParseURL("rtsp://myhost/mypath"))
if conf != "nofail" {
require.Error(t, err)
} else {
require.NoError(t, err)
}
})
}
}
}
@@ -59,16 +90,56 @@ func TestAuthVLC(t *testing.T) {
"rtsp://myhost/mypath/test?testing/trackID=0",
},
} {
se := NewValidator("testuser", "testpass",
va := NewValidator("testuser", "testpass",
[]headers.AuthMethod{headers.AuthBasic, headers.AuthDigest})
va, err := NewSender(se.GenerateHeader(), "testuser", "testpass")
se, err := NewSender(va.GenerateHeader(), "testuser", "testpass")
require.NoError(t, err)
authorization := va.GenerateHeader(base.Announce,
authorization := se.GenerateHeader(base.Announce,
base.MustParseURL(ca.clientURL))
err = se.ValidateHeader(authorization, base.Announce,
err = va.ValidateHeader(authorization, base.Announce,
base.MustParseURL(ca.serverURL))
require.NoError(t, err)
}
}
func TestAuthHashed(t *testing.T) {
for _, conf := range []string{
"nofail",
"wronguser",
"wrongpass",
} {
t.Run(conf, func(t *testing.T) {
se := NewValidator("sha256:rl3rgi4NcZkpAEcacZnQ2VuOfJ0FxAqCRaKB/SwdZoQ=",
"sha256:E9JJ8stBJ7QM+nV4ZoUCeHk/gU3tPFh/5YieiJp6n2w=",
[]headers.AuthMethod{headers.AuthBasic, headers.AuthDigest})
va, err := NewSender(se.GenerateHeader(),
func() string {
if conf == "wronguser" {
return "test1user"
}
return "testuser"
}(),
func() string {
if conf == "wrongpass" {
return "test1pass"
}
return "testpass"
}())
require.NoError(t, err)
authorization := va.GenerateHeader(base.Announce,
base.MustParseURL("rtsp://myhost/mypath"))
err = se.ValidateHeader(authorization, base.Announce,
base.MustParseURL("rtsp://myhost/mypath"))
if conf != "nofail" {
require.Error(t, err)
} else {
require.NoError(t, err)
}
})
}
}