Skip to content

Commit 7093787

Browse files
committed
fix: incorrect jwt parsing
1 parent 6577db8 commit 7093787

3 files changed

Lines changed: 15 additions & 5 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/luizfonseca/traefik-github-oauth-plugin
22

3-
go 1.21.4
3+
go 1.22.1
44

55
require (
66
github.com/go-chi/render v1.0.3

internal/pkg/jwt/jwt.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,17 @@ 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{})
36+
teams := make([]string, len(teamFromClaims))
37+
38+
for i, v := range teamFromClaims {
39+
teams[i] = v.(string)
40+
}
41+
3542
return &PayloadUser{
3643
Id: claims["id"].(string),
3744
Login: claims["login"].(string),
38-
Teams: claims["teams"].([]string),
45+
Teams: teams,
3946
}, nil
4047
} else {
4148
return nil, fmt.Errorf("invalid token")

internal/pkg/jwt/jwt_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"github.com/stretchr/testify/assert"
77
)
88

9+
var testTeams = []string{"team1", "team2"}
10+
911
const (
1012
id = "12345"
1113
login = "testuser"
@@ -14,7 +16,7 @@ const (
1416

1517
func TestGenerateJwtTokenString(t *testing.T) {
1618
// execution
17-
tokenString, err := GenerateJwtTokenString(id, login, key)
19+
tokenString, err := GenerateJwtTokenString(id, login, testTeams, key)
1820

1921
// assertion
2022
assert.NoError(t, err)
@@ -23,7 +25,7 @@ func TestGenerateJwtTokenString(t *testing.T) {
2325

2426
func TestParseTokenString(t *testing.T) {
2527
// setup
26-
tokenString, _ := GenerateJwtTokenString(id, login, key)
28+
tokenString, _ := GenerateJwtTokenString(id, login, testTeams, key)
2729

2830
// execution
2931
payload, err := ParseTokenString(tokenString, key)
@@ -32,6 +34,7 @@ func TestParseTokenString(t *testing.T) {
3234
assert.NoError(t, err)
3335
assert.Equal(t, id, payload.Id)
3436
assert.Equal(t, login, payload.Login)
37+
assert.Equal(t, testTeams, payload.Teams)
3538
}
3639

3740
func TestParseTokenString_InvalidToken(t *testing.T) {
@@ -48,7 +51,7 @@ func TestParseTokenString_InvalidToken(t *testing.T) {
4851

4952
func TestParseTokenString_InvalidKey(t *testing.T) {
5053
// setup
51-
tokenString, _ := GenerateJwtTokenString(id, login, key)
54+
tokenString, _ := GenerateJwtTokenString(id, login, testTeams, key)
5255
invalidKey := "invalidkey"
5356

5457
// execution

0 commit comments

Comments
 (0)