Skip to content

Commit 0115d18

Browse files
authored
Merge pull request #40 from luizfonseca/fix/backwards-compatibility
fix: backwards compatibility when missing `teams: []string{}` in the JWT
2 parents ad79731 + d770eb7 commit 0115d18

2 files changed

Lines changed: 40 additions & 2 deletions

File tree

internal/pkg/jwt/jwt.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,21 @@ func ParseTokenString(tokenString, key string) (*PayloadUser, error) {
3232
return nil, err
3333
}
3434
if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
35-
teamFromClaims := claims["teams"].([]interface{})
35+
var teamFromClaims []interface{}
36+
37+
switch claims["teams"].(type) {
38+
case []interface{}:
39+
teamFromClaims = claims["teams"].([]interface{})
40+
case nil:
41+
// Backwards compatible with previous tokens, nothing to do
42+
}
43+
3644
teams := make([]string, len(teamFromClaims))
3745

3846
for i, v := range teamFromClaims {
39-
teams[i] = v.(string)
47+
if stringValue, ok := v.(string); ok {
48+
teams[i] = stringValue
49+
}
4050
}
4151

4252
return &PayloadUser{

internal/pkg/jwt/jwt_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,34 @@ func TestParseTokenString(t *testing.T) {
3737
assert.Equal(t, testTeams, payload.Teams)
3838
}
3939

40+
func TestParseTokenString_EmptyTeams(t *testing.T) {
41+
// setup
42+
tokenString, _ := GenerateJwtTokenString(id, login, []string{}, key)
43+
44+
// execution
45+
payload, err := ParseTokenString(tokenString, key)
46+
47+
// assertion
48+
assert.NoError(t, err)
49+
assert.Equal(t, id, payload.Id)
50+
assert.Equal(t, login, payload.Login)
51+
assert.Equal(t, payload.Teams, []string{})
52+
}
53+
54+
func TestParseTokenString_NoTeams(t *testing.T) {
55+
// setup
56+
tokenString, _ := GenerateJwtTokenString(id, login, nil, key)
57+
58+
// execution
59+
payload, err := ParseTokenString(tokenString, key)
60+
61+
// assertion
62+
assert.NoError(t, err)
63+
assert.Equal(t, id, payload.Id)
64+
assert.Equal(t, login, payload.Login)
65+
assert.Equal(t, payload.Teams, []string{})
66+
}
67+
4068
func TestParseTokenString_InvalidToken(t *testing.T) {
4169
// setup
4270
tokenString := "invalidtoken"

0 commit comments

Comments
 (0)