@@ -11,19 +11,23 @@ import (
11
11
"github.com/gorilla/mux"
12
12
authenticationv1 "k8s.io/api/authentication/v1"
13
13
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14
+ "k8s.io/apimachinery/pkg/util/sets"
14
15
"sigs.k8s.io/controller-runtime/pkg/client"
15
16
16
17
"github.com/projectcapsule/capsule-proxy/internal/webserver/errors"
17
18
)
18
19
19
20
func CheckJWTMiddleware (client client.Writer ) mux.MiddlewareFunc {
21
+ invalidatedToken := sets .New [string ]()
22
+
20
23
return func (next http.Handler ) http.Handler {
21
24
return http .HandlerFunc (func (writer http.ResponseWriter , request * http.Request ) {
22
25
var err error
23
26
24
27
token := strings .ReplaceAll (request .Header .Get ("Authorization" ), "Bearer " , "" )
25
28
26
- if len (token ) > 0 {
29
+ switch {
30
+ case len (token ) > 0 && ! invalidatedToken .Has (token ):
27
31
tr := authenticationv1.TokenReview {
28
32
TypeMeta : metav1.TypeMeta {
29
33
Kind : "TokenReview" ,
@@ -37,8 +41,12 @@ func CheckJWTMiddleware(client client.Writer) mux.MiddlewareFunc {
37
41
errors .HandleError (writer , err , "cannot create TokenReview" )
38
42
}
39
43
if statusErr := tr .Status .Error ; len (statusErr ) > 0 {
44
+ invalidatedToken .Insert (token )
45
+
40
46
errors .HandleUnauthorized (writer , fmt .Errorf (statusErr ), "cannot authenticate the token due to error" )
41
47
}
48
+ case invalidatedToken .Has (token ):
49
+ errors .HandleUnauthorized (writer , fmt .Errorf ("token is invalid" ), "cannot authenticate the token due to error" )
42
50
}
43
51
44
52
next .ServeHTTP (writer , request )
0 commit comments