@@ -7,42 +7,51 @@ import (
7
7
"github.com/bluenviron/gortsplib/v4/pkg/headers"
8
8
)
9
9
10
- // Sender allows to send credentials.
11
- type Sender struct {
12
- user string
13
- pass string
14
- authHeader * headers.Authenticate
10
+ // NewSender allocates a Sender.
11
+ //
12
+ // Deprecated: replaced by Sender.Initialize().
13
+ func NewSender (wwwAuth base.HeaderValue , user string , pass string ) (* Sender , error ) {
14
+ s := & Sender {
15
+ WWWAuth : wwwAuth ,
16
+ User : user ,
17
+ Pass : pass ,
18
+ }
19
+ err := s .Initialize ()
20
+ return s , err
15
21
}
16
22
17
- // NewSender allocates a Sender .
23
+ // Sender allows to send credentials .
18
24
// It requires a WWW-Authenticate header (provided by the server)
19
25
// and a set of credentials.
20
- func NewSender (wwwAuth base.HeaderValue , user string , pass string ) (* Sender , error ) {
21
- var bestAuthHeader * headers.Authenticate
26
+ type Sender struct {
27
+ WWWAuth base.HeaderValue
28
+ User string
29
+ Pass string
30
+
31
+ authHeader * headers.Authenticate
32
+ }
22
33
23
- for _ , v := range wwwAuth {
34
+ // Initialize initializes a Sender.
35
+ func (se * Sender ) Initialize () error {
36
+ for _ , v := range se .WWWAuth {
24
37
var auth headers.Authenticate
25
38
err := auth .Unmarshal (base.HeaderValue {v })
26
39
if err != nil {
27
40
continue // ignore unrecognized headers
28
41
}
29
42
30
- if bestAuthHeader == nil ||
43
+ if se . authHeader == nil ||
31
44
(auth .Algorithm != nil && * auth .Algorithm == headers .AuthAlgorithmSHA256 ) ||
32
- (bestAuthHeader .Method == headers .AuthMethodBasic ) {
33
- bestAuthHeader = & auth
45
+ (se . authHeader .Method == headers .AuthMethodBasic ) {
46
+ se . authHeader = & auth
34
47
}
35
48
}
36
49
37
- if bestAuthHeader == nil {
38
- return nil , fmt .Errorf ("no authentication methods available" )
50
+ if se . authHeader == nil {
51
+ return fmt .Errorf ("no authentication methods available" )
39
52
}
40
53
41
- return & Sender {
42
- user : user ,
43
- pass : pass ,
44
- authHeader : bestAuthHeader ,
45
- }, nil
54
+ return nil
46
55
}
47
56
48
57
// AddAuthorization adds the Authorization header to a Request.
@@ -53,21 +62,21 @@ func (se *Sender) AddAuthorization(req *base.Request) {
53
62
Method : se .authHeader .Method ,
54
63
}
55
64
56
- h .Username = se .user
65
+ h .Username = se .User
57
66
58
67
if se .authHeader .Method == headers .AuthMethodBasic {
59
- h .BasicPass = se .pass
68
+ h .BasicPass = se .Pass
60
69
} else { // digest
61
70
h .Realm = se .authHeader .Realm
62
71
h .Nonce = se .authHeader .Nonce
63
72
h .URI = urStr
64
73
h .Algorithm = se .authHeader .Algorithm
65
74
66
75
if se .authHeader .Algorithm == nil || * se .authHeader .Algorithm == headers .AuthAlgorithmMD5 {
67
- h .Response = md5Hex (md5Hex (se .user + ":" + se .authHeader .Realm + ":" + se .pass ) + ":" +
76
+ h .Response = md5Hex (md5Hex (se .User + ":" + se .authHeader .Realm + ":" + se .Pass ) + ":" +
68
77
se .authHeader .Nonce + ":" + md5Hex (string (req .Method )+ ":" + urStr ))
69
78
} else { // sha256
70
- h .Response = sha256Hex (sha256Hex (se .user + ":" + se .authHeader .Realm + ":" + se .pass ) + ":" +
79
+ h .Response = sha256Hex (sha256Hex (se .User + ":" + se .authHeader .Realm + ":" + se .Pass ) + ":" +
71
80
se .authHeader .Nonce + ":" + sha256Hex (string (req .Method )+ ":" + urStr ))
72
81
}
73
82
}
0 commit comments