Skip to content

Commit 9170ca6

Browse files
committed
Handle Token is expired and change module jwt-go to golang-jwt
1 parent 703e630 commit 9170ca6

11 files changed

Lines changed: 109 additions & 101 deletions

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
language: go
22
go:
3-
- 1.14.x
3+
- 1.15.x
44
- tip
55
env:
66
- GO111MODULE=on

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,15 @@ func NewRedisAdapter() fibercasbinrest.Adapter {
112112

113113
const mockAdminToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
114114

115-
func (r *redisAdapter) GetRoleByToken(reqToken string) []string {
115+
func (r *redisAdapter) GetRoleByToken(reqToken string) ([]string, error) {
116116
// Validate example not use on production
117117
role := "anonymous"
118118
if reqToken == mockAdminToken {
119119
role = "admin"
120120
} else if reqToken == "TOKEN_DBA" {
121121
role = "dba"
122122
}
123-
return []string{role}
123+
return []string{role}, nil
124124
}
125125

126126
func main() {

adapter.go

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,5 @@ const (
99

1010
// Adapter interface for implements GetRoleByToken
1111
type Adapter interface {
12-
GetRoleByToken(reqToken string) []string
13-
}
14-
15-
type roleAdapter struct {
16-
Secret []byte
17-
}
18-
19-
func (r *roleAdapter) GetRoleByToken(reqToken string) []string {
20-
t := GetValue(reqToken, RoleKey, r.Secret)
21-
return ParseRoles(t)
22-
}
23-
24-
// NewRoleAdapter create adapter
25-
func NewRoleAdapter(secret string) Adapter {
26-
return &roleAdapter{
27-
Secret: []byte(secret),
28-
}
12+
GetRoleByToken(reqToken string) ([]string, error)
2913
}

common.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ package fibercasbinrest
33
import (
44
"encoding/json"
55
"fmt"
6-
"log"
7-
8-
"github.com/dgrijalva/jwt-go"
6+
"github.com/golang-jwt/jwt"
97
)
108

119
// Verify JWT
@@ -27,18 +25,16 @@ func ParseToken(token string, secret []byte) (*jwt.Token, error) {
2725
}
2826

2927
// GetValue for get payload from JWT
30-
func GetValue(reqToken string, key string, secretKey []byte) interface{} {
28+
func GetValue(reqToken string, key string, secretKey []byte) (interface{}, error) {
3129
token, err := ParseToken(reqToken, secretKey)
3230
if err != nil {
33-
log.Println(err)
34-
return ""
31+
return "", err
3532
}
3633
claims, ok := token.Claims.(jwt.MapClaims)
3734
if ok && token.Valid {
38-
return claims[key]
35+
return claims[key], nil
3936
}
40-
log.Println(claims.Valid().Error())
41-
return ""
37+
return "", claims.Valid()
4238
}
4339

4440
// ParseRoles interface to string array

common_test.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func TestGetValueSuccess(t *testing.T) {
2626
secret := []byte("test")
2727

2828
// When
29-
actual := fibercasbinrest.GetValue(token, key, secret)
29+
actual, _ := fibercasbinrest.GetValue(token, key, secret)
3030

3131
// Then
3232
assert.Equal(t, actual, expect)
@@ -40,7 +40,7 @@ func TestGetValueError(t *testing.T) {
4040
secret := []byte("invalid-secret")
4141

4242
// When
43-
actual := fibercasbinrest.GetValue(token, key, secret)
43+
actual, _ := fibercasbinrest.GetValue(token, key, secret)
4444

4545
// Then
4646
assert.Equal(t, actual, expect)
@@ -69,4 +69,3 @@ func TestVerifyFalse(t *testing.T) {
6969
// Then
7070
assert.Equal(t, actual, false)
7171
}
72-

go.mod

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,23 @@
11
module github.com/prongbang/fiber-casbinrest
22

3-
go 1.15
3+
go 1.17
44

55
require (
6-
github.com/casbin/casbin/v2 v2.23.0
7-
github.com/davecgh/go-spew v1.1.1 // indirect
8-
github.com/dgrijalva/jwt-go v3.2.0+incompatible
9-
github.com/gofiber/fiber/v2 v2.5.0
10-
github.com/kr/pretty v0.2.1 // indirect
6+
github.com/casbin/casbin/v2 v2.40.6
7+
github.com/gofiber/fiber/v2 v2.24.0
8+
github.com/golang-jwt/jwt v3.2.2+incompatible
119
github.com/stretchr/testify v1.7.0
12-
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
10+
)
11+
12+
require (
13+
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect
14+
github.com/andybalholm/brotli v1.0.2 // indirect
15+
github.com/davecgh/go-spew v1.1.0 // indirect
16+
github.com/klauspost/compress v1.13.4 // indirect
17+
github.com/pmezard/go-difflib v1.0.0 // indirect
18+
github.com/valyala/bytebufferpool v1.0.0 // indirect
19+
github.com/valyala/fasthttp v1.31.0 // indirect
20+
github.com/valyala/tcplisten v1.0.0 // indirect
21+
golang.org/x/sys v0.0.0-20210514084401-e8d321eab015 // indirect
22+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
1323
)

go.sum

Lines changed: 27 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,49 @@
11
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
22
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
3-
github.com/andybalholm/brotli v1.0.0 h1:7UCwP93aiSfvWpapti8g88vVVGp2qqtGyePsSuDafo4=
4-
github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
5-
github.com/casbin/casbin/v2 v2.13.1 h1:K2ChfTOlEgCd9H6J3efOCatqLPyBj2ZCKwyhVRq4XSg=
6-
github.com/casbin/casbin/v2 v2.13.1/go.mod h1:XXtYGrs/0zlOsJMeRteEdVi/FsB0ph7KgNfjoCoJUD8=
7-
github.com/casbin/casbin/v2 v2.23.0 h1:V6TSSwplERP/KP6aEXm6C1Sg29bofM1aH1y01Hm+y0I=
8-
github.com/casbin/casbin/v2 v2.23.0/go.mod h1:wUgota0cQbTXE6Vd+KWpg41726jFRi7upxio0sR+Xd0=
3+
github.com/andybalholm/brotli v1.0.2 h1:JKnhI/XQ75uFBTiuzXpzFrUriDPiZjlOSzh6wXogP0E=
4+
github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
5+
github.com/casbin/casbin/v2 v2.40.6 h1:Fy8UmYaLst1zjyQ7Uw/Kq9Vxgyk91EtZO/cUUSm3kpQ=
6+
github.com/casbin/casbin/v2 v2.40.6/go.mod h1:sEL80qBYTbd+BPeL4iyvwYzFT3qwLaESq5aFKVLbLfA=
7+
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
98
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
10-
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
11-
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
12-
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
13-
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
14-
github.com/gofiber/fiber v1.14.6 h1:QRUPvPmr8ijQuGo1MgupHBn8E+wW0IKqiOvIZPtV70o=
15-
github.com/gofiber/fiber/v2 v2.0.6 h1:eq1LGUM8arRCWxjQPvQzJJIRKDsc7Up/kxaSCUP6PIo=
16-
github.com/gofiber/fiber/v2 v2.0.6/go.mod h1:VyfrlfcUCW0TcO5uaLHVlxZ8N25BgwnP6YjkzJmJP24=
17-
github.com/gofiber/fiber/v2 v2.5.0 h1:yml405Um7b98EeMjx63OjSFTATLmX985HPWFfNUPV0w=
18-
github.com/gofiber/fiber/v2 v2.5.0/go.mod h1:f8BRRIMjMdRyt2qmJ/0Sea3j3rwwfufPrh9WNBRiVZ0=
9+
github.com/gofiber/fiber/v2 v2.24.0 h1:18rpLoQMJBVlLtX/PwgHj3hIxPSeWfN1YeDJ2lEnzjU=
10+
github.com/gofiber/fiber/v2 v2.24.0/go.mod h1:MR1usVH3JHYRyQwMe2eZXRSZHRX38fkV+A7CPB+DlDQ=
11+
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
12+
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
13+
github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc=
1914
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
20-
github.com/klauspost/compress v1.10.7 h1:7rix8v8GpI3ZBb0nSozFRgbtXKv+hOe+qfEpZqybrAg=
21-
github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
22-
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
23-
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
24-
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
25-
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
26-
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
27-
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
28-
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
15+
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
16+
github.com/klauspost/compress v1.13.4 h1:0zhec2I8zGnjWcKyLl6i3gPqKANCCn5e9xmviEEeX6s=
17+
github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
2918
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
3019
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
31-
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
3220
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
33-
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
34-
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
3521
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
3622
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
3723
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
3824
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
39-
github.com/valyala/fasthttp v1.16.0 h1:9zAqOYLl8Tuy3E5R6ckzGDJ1g8+pw15oQp2iL9Jl6gQ=
40-
github.com/valyala/fasthttp v1.16.0/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl6TwOBhHCA=
41-
github.com/valyala/fasthttp v1.18.0 h1:IV0DdMlatq9QO1Cr6wGJPVW1sV1Q8HvZXAIcjorylyM=
42-
github.com/valyala/fasthttp v1.18.0/go.mod h1:jjraHZVbKOXftJfsOYoAjaeygpj5hr8ermTRJNroD7A=
43-
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a h1:0R4NLDRDZX6JcmhJgXi5E4b8Wg84ihbmUKp/GvSPEzc=
44-
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
25+
github.com/valyala/fasthttp v1.31.0 h1:lrauRLII19afgCs2fnWRJ4M5IkV0lo2FqA61uGkNBfE=
26+
github.com/valyala/fasthttp v1.31.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus=
27+
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
28+
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
4529
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
46-
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
30+
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
4731
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
48-
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
49-
golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
50-
golang.org/x/net v0.0.0-20201016165138-7b1cca2348c0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
32+
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
33+
golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
5134
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
5235
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
53-
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
54-
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
55-
golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
56-
golang.org/x/sys v0.0.0-20200929083018-4d22bbb62b3c h1:/h0vtH0PyU0xAoZJVcRw1k0Ng+U0JAy3QDiFmppIlIE=
57-
golang.org/x/sys v0.0.0-20200929083018-4d22bbb62b3c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
58-
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
59-
golang.org/x/sys v0.0.0-20201210223839-7e3030f88018 h1:XKi8B/gRBuTZN1vU9gFsLMm6zVz5FSCDzm8JYACnjy8=
60-
golang.org/x/sys v0.0.0-20201210223839-7e3030f88018/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
36+
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
37+
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
38+
golang.org/x/sys v0.0.0-20210514084401-e8d321eab015 h1:hZR0X1kPW+nwyJ9xRxqZk1vx5RUObAPBdKVvXPDUH/E=
39+
golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
40+
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
6141
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
6242
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
43+
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
6344
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
6445
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
46+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
6547
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
66-
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
67-
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
6848
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
6949
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

middleware.go

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package fibercasbinrest
22

33
import (
4-
"log"
54
"net/http"
65
"strings"
76

@@ -53,35 +52,38 @@ func middlewareWithConfig(config Config) fiber.Handler {
5352
config.Skipper = DefaultConfig.Skipper
5453
}
5554
return func(c *fiber.Ctx) error {
56-
if config.Skipper(c) || config.CheckPermissions(c) {
55+
pass, err := config.CheckPermissions(c)
56+
if config.Skipper(c) || (pass && err == nil) {
5757
return c.Next()
5858
}
59+
if err != nil && strings.ToLower(err.Error()) == "token is expired" {
60+
return c.Status(http.StatusUnauthorized).
61+
JSON(fiber.Map{"message": err.Error()})
62+
}
5963
return c.Status(http.StatusForbidden).
60-
JSON(fiber.Map{"message": "Forbidden"})
64+
JSON(fiber.Map{"message": http.StatusText(http.StatusForbidden)})
6165
}
6266
}
6367

6468
// GetRole gets the roles name from the request.
65-
func (a *Config) GetRole(c *fiber.Ctx) []string {
69+
func (a *Config) GetRole(c *fiber.Ctx) ([]string, error) {
6670
token := c.Get(fiber.HeaderAuthorization)
6771
authorization := strings.Split(token, "Bearer")
6872
if len(authorization) == 2 {
6973
return a.Adapter.GetRoleByToken(strings.TrimSpace(authorization[1]))
7074
}
71-
return []string{RoleAnonymous}
75+
return []string{RoleAnonymous}, nil
7276
}
7377

7478
// CheckPermissions checks the role/path/method combination from the request.
75-
func (a *Config) CheckPermissions(c *fiber.Ctx) bool {
76-
roles := a.GetRole(c)
79+
func (a *Config) CheckPermissions(c *fiber.Ctx) (bool, error) {
80+
roles, err := a.GetRole(c)
7781
allowed := false
7882
for _, role := range roles {
79-
result, err := a.Enforcer.Enforce(strings.ToLower(role), c.Path(), c.Method())
80-
if result && err == nil {
83+
result, e := a.Enforcer.Enforce(strings.ToLower(role), c.Path(), c.Method())
84+
if result && e == nil {
8185
allowed = true
82-
} else {
83-
log.Println(err)
8486
}
8587
}
86-
return allowed
88+
return allowed, err
8789
}

middleware_test.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ func NewRedisAdapter() fibercasbinrest.Adapter {
2020

2121
const mockAdminToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
2222

23-
func (r *redisAdapter) GetRoleByToken(reqToken string) []string {
23+
func (r *redisAdapter) GetRoleByToken(reqToken string) ([]string, error) {
2424
role := "anonymous"
2525
if reqToken == mockAdminToken {
2626
role = "admin"
2727
} else if reqToken == "TOKEN_DBA" {
2828
role = "dba"
2929
}
30-
return []string{role}
30+
return []string{role}, nil
3131
}
3232

3333
var adapter fibercasbinrest.Adapter
@@ -144,3 +144,23 @@ func TestRoleAdminByJWTStatusOK(t *testing.T) {
144144
// Then
145145
assert.Equal(t, http.StatusOK, res.StatusCode)
146146
}
147+
148+
func TestRoleAdminByJWTTokenExpired(t *testing.T) {
149+
// Given
150+
secret := "secret"
151+
token := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDEsInJvbGVzIjpbIkFETUlOIiwiVVNFUiJdfQ.P7B4nnVuw6FUscVtKLUn011Q0iZssO7LEr_o7d8nprE"
152+
ce, _ := casbin.NewEnforcer("example/auth_model.conf", "example/policy.csv")
153+
e := fiber.New()
154+
e.Use(fibercasbinrest.NewDefault(ce, secret))
155+
e.Get("/", func(c *fiber.Ctx) error {
156+
return c.Status(http.StatusOK).JSON("OK")
157+
})
158+
req := httptest.NewRequest(http.MethodGet, "/", nil)
159+
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
160+
161+
// When
162+
res, _ := e.Test(req, 10000)
163+
164+
// Then
165+
assert.Equal(t, http.StatusUnauthorized, res.StatusCode)
166+
}

role_adapter.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package fibercasbinrest
2+
3+
type roleAdapter struct {
4+
Secret []byte
5+
}
6+
7+
func (r *roleAdapter) GetRoleByToken(reqToken string) ([]string, error) {
8+
t, err := GetValue(reqToken, RoleKey, r.Secret)
9+
return ParseRoles(t), err
10+
}
11+
12+
// NewRoleAdapter create adapter
13+
func NewRoleAdapter(secret string) Adapter {
14+
return &roleAdapter{
15+
Secret: []byte(secret),
16+
}
17+
}

0 commit comments

Comments
 (0)