Files
gortsplib/pkg/auth/www_authenticate.go

52 lines
1.2 KiB
Go

package auth
import (
"github.com/bluenviron/gortsplib/v4/pkg/base"
"github.com/bluenviron/gortsplib/v4/pkg/headers"
)
// GenerateWWWAuthenticate generates a WWW-Authenticate header.
func GenerateWWWAuthenticate(methods []ValidateMethod, realm string, nonce string) base.HeaderValue {
if methods == nil {
// disable VerifyMethodDigestSHA256 unless explicitly set
// since it prevents FFmpeg from authenticating
methods = []VerifyMethod{VerifyMethodBasic, VerifyMethodDigestMD5}
}
var ret base.HeaderValue
for _, m := range methods {
var a base.HeaderValue
switch m {
case ValidateMethodBasic:
a = headers.Authenticate{
Method: headers.AuthMethodBasic,
Realm: realm,
}.Marshal()
case ValidateMethodDigestMD5:
aa := headers.AuthAlgorithmMD5
a = headers.Authenticate{
Method: headers.AuthMethodDigest,
Realm: realm,
Nonce: nonce,
Algorithm: &aa,
}.Marshal()
default: // sha256
aa := headers.AuthAlgorithmSHA256
a = headers.Authenticate{
Method: headers.AuthMethodDigest,
Realm: realm,
Nonce: nonce,
Algorithm: &aa,
}.Marshal()
}
ret = append(ret, a...)
}
return ret
}