Skip to content

Commit b457994

Browse files
jechSean-Der
authored andcommitted
Fix the zero value of ICECredentialType
Ensure that the zero value of ICECredentialType is password.
1 parent 37a145a commit b457994

5 files changed

+36
-25
lines changed

icecredentialtype.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ type ICECredentialType int
1212
const (
1313
// ICECredentialTypePassword describes username and password based
1414
// credentials as described in https://tools.ietf.org/html/rfc5389.
15-
ICECredentialTypePassword ICECredentialType = iota + 1
15+
ICECredentialTypePassword ICECredentialType = iota
1616

1717
// ICECredentialTypeOauth describes token based credential as described
1818
// in https://tools.ietf.org/html/rfc7635.
@@ -25,21 +25,19 @@ const (
2525
iceCredentialTypeOauthStr = "oauth"
2626
)
2727

28-
func newICECredentialType(raw string) ICECredentialType {
28+
func newICECredentialType(raw string) (ICECredentialType, error) {
2929
switch raw {
3030
case iceCredentialTypePasswordStr:
31-
return ICECredentialTypePassword
31+
return ICECredentialTypePassword, nil
3232
case iceCredentialTypeOauthStr:
33-
return ICECredentialTypeOauth
33+
return ICECredentialTypeOauth, nil
3434
default:
35-
return ICECredentialType(Unknown)
35+
return ICECredentialTypePassword, errInvalidICECredentialTypeString
3636
}
3737
}
3838

3939
func (t ICECredentialType) String() string {
4040
switch t {
41-
case Unknown:
42-
return ""
4341
case ICECredentialTypePassword:
4442
return iceCredentialTypePasswordStr
4543
case ICECredentialTypeOauth:
@@ -52,15 +50,13 @@ func (t ICECredentialType) String() string {
5250
// UnmarshalJSON parses the JSON-encoded data and stores the result
5351
func (t *ICECredentialType) UnmarshalJSON(b []byte) error {
5452
var val string
55-
var tmp ICECredentialType
5653
if err := json.Unmarshal(b, &val); err != nil {
5754
return err
5855
}
5956

60-
tmp = newICECredentialType(val)
61-
62-
if (tmp == ICECredentialType(Unknown)) && (val != "") {
63-
return fmt.Errorf("%w: (%s)", errInvalidICECredentialTypeString, val)
57+
tmp, err := newICECredentialType(val)
58+
if err != nil {
59+
return fmt.Errorf("%w: (%s)", err, val)
6460
}
6561

6662
*t = tmp

icecredentialtype_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ func TestNewICECredentialType(t *testing.T) {
1717
}
1818

1919
for i, testCase := range testCases {
20+
tpe, err := newICECredentialType(testCase.credentialTypeString)
21+
assert.NoError(t, err)
2022
assert.Equal(t,
21-
testCase.expectedCredentialType,
22-
newICECredentialType(testCase.credentialTypeString),
23+
testCase.expectedCredentialType, tpe,
2324
"testCase: %d %v", i, testCase,
2425
)
2526
}
@@ -53,9 +54,10 @@ func TestICECredentialType_new(t *testing.T) {
5354
}
5455

5556
for i, testCase := range testCases {
57+
tpe, err := newICECredentialType(testCase.expectedString)
58+
assert.NoError(t, err)
5659
assert.Equal(t,
57-
newICECredentialType(testCase.expectedString),
58-
testCase.credentialType,
60+
tpe, testCase.credentialType,
5961
"testCase: %d %v", i, testCase,
6062
)
6163
}

iceserver.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,17 +123,19 @@ func (s *ICEServer) iceserverUnmarshalFields(m map[string]interface{}) error {
123123
}
124124
if val, ok := m["credentialType"]; ok {
125125
ct, ok := val.(string)
126-
if !ok || (newICECredentialType(ct) == ICECredentialType(Unknown)) {
126+
if !ok {
127127
return errInvalidICEServer
128128
}
129-
s.CredentialType = newICECredentialType(ct)
129+
tpe, err := newICECredentialType(ct)
130+
if err != nil {
131+
return err
132+
}
133+
s.CredentialType = tpe
130134
} else {
131-
s.CredentialType = ICECredentialType(Unknown)
135+
s.CredentialType = ICECredentialTypePassword
132136
}
133137
if val, ok := m["credential"]; ok {
134138
switch s.CredentialType {
135-
case ICECredentialType(Unknown):
136-
s.Credential = val
137139
case ICECredentialTypePassword:
138140
s.Credential = val
139141
case ICECredentialTypeOauth:
@@ -172,8 +174,6 @@ func (s ICEServer) MarshalJSON() ([]byte, error) {
172174
if s.Credential != nil {
173175
m["credential"] = s.Credential
174176
}
175-
if s.CredentialType != ICECredentialType(Unknown) {
176-
m["credentialType"] = s.CredentialType
177-
}
177+
m["credentialType"] = s.CredentialType
178178
return json.Marshal(m)
179179
}

iceserver_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,12 @@ func TestICEServer_validate(t *testing.T) {
112112
}
113113
})
114114
}
115+
116+
func TestICEServerZeroValue(t *testing.T) {
117+
server := ICEServer{
118+
URLs: []string{"turn:galene.org:1195"},
119+
Username: "galene",
120+
Credential: "secret",
121+
}
122+
assert.Equal(t, server.CredentialType, ICECredentialTypePassword)
123+
}

peerconnection_js.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -640,12 +640,16 @@ func valueToICECredential(iceCredentialValue js.Value) interface{} {
640640
}
641641

642642
func valueToICEServer(iceServerValue js.Value) ICEServer {
643+
tpe, err := newICECredentialType(valueToStringOrZero(iceServerValue.Get("credentialType")))
644+
if err != nil {
645+
tpe = ICECredentialTypePassword
646+
}
643647
s := ICEServer{
644648
URLs: valueToStrings(iceServerValue.Get("urls")), // required
645649
Username: valueToStringOrZero(iceServerValue.Get("username")),
646650
// Note: Credential and CredentialType are not currently supported.
647651
Credential: valueToICECredential(iceServerValue.Get("credential")),
648-
CredentialType: newICECredentialType(valueToStringOrZero(iceServerValue.Get("credentialType"))),
652+
CredentialType: tpe,
649653
}
650654

651655
// default to password

0 commit comments

Comments
 (0)