Skip to content

Commit 4203c0a

Browse files
refactor: AuthMiddleware is no longer token-specific
1 parent 37b2b43 commit 4203c0a

File tree

2 files changed

+29
-23
lines changed

2 files changed

+29
-23
lines changed

authController.go

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -54,34 +54,40 @@ func (a authController) getAuthToken(w http.ResponseWriter, r *http.Request) {
5454
w.Write(httpJson)
5555
}
5656

57-
func tokenAuthMiddleware(jwtSecret string, next http.Handler) http.Handler {
57+
func authMiddleware(jwtSecret string, next http.Handler) http.Handler {
5858
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
59-
var tokenString string
59+
var bearerTokenString string
6060
for _, headerValue := range r.Header["Authorization"] {
6161
if strings.HasPrefix(headerValue, "Bearer ") {
62-
tokenString, _ = strings.CutPrefix(headerValue, "Bearer ")
62+
bearerTokenString, _ = strings.CutPrefix(headerValue, "Bearer ")
6363
}
6464
}
6565

66-
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
67-
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
68-
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
66+
if bearerTokenString != "" {
67+
token, err := jwt.Parse(bearerTokenString, func(token *jwt.Token) (interface{}, error) {
68+
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
69+
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
70+
}
71+
return []byte(jwtSecret), nil
72+
})
73+
if err != nil {
74+
log.Printf("JWT parsing failed: %s", err)
75+
w.WriteHeader(http.StatusUnauthorized)
76+
return
6977
}
70-
return []byte(jwtSecret), nil
71-
})
72-
if err != nil {
73-
log.Printf("JWT parsing failed: %s", err)
74-
w.WriteHeader(http.StatusUnauthorized)
75-
return
76-
}
7778

78-
claims, ok := token.Claims.(jwt.MapClaims)
79-
if !ok {
80-
log.Printf("JWT claims failed: %s", err)
81-
}
82-
exp, _ := claims.GetExpirationTime()
83-
if exp.Before(time.Now()) {
84-
log.Printf("JWT expired at: %s", exp)
79+
claims, ok := token.Claims.(jwt.MapClaims)
80+
if !ok {
81+
log.Printf("JWT claims failed: %s", err)
82+
}
83+
exp, _ := claims.GetExpirationTime()
84+
if exp.Before(time.Now()) {
85+
log.Printf("JWT expired at: %s", exp)
86+
w.WriteHeader(http.StatusUnauthorized)
87+
return
88+
}
89+
} else {
90+
log.Printf("Authorization scheme not supported")
8591
w.WriteHeader(http.StatusUnauthorized)
8692
return
8793
}

server.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ func NewServer(serverConfig ServerConfig) (http.Handler, error) {
4949
handleFunc(tokenAuth, "DELETE /api/recs/{pointId}/history", hisController.deleteHis)
5050
handleFunc(tokenAuth, "GET /api/recs/{pointId}/current", currentController.getCurrent)
5151
handleFunc(tokenAuth, "POST /api/recs/{pointId}/current", currentController.postCurrent)
52-
server.Handle("/api/his/", tokenAuthMiddleware(serverConfig.jwtSecret, tokenAuth))
53-
server.Handle("/api/recs", tokenAuthMiddleware(serverConfig.jwtSecret, tokenAuth))
54-
server.Handle("/api/recs/", tokenAuthMiddleware(serverConfig.jwtSecret, tokenAuth))
52+
server.Handle("/api/his/", authMiddleware(serverConfig.jwtSecret, tokenAuth))
53+
server.Handle("/api/recs", authMiddleware(serverConfig.jwtSecret, tokenAuth))
54+
server.Handle("/api/recs/", authMiddleware(serverConfig.jwtSecret, tokenAuth))
5555

5656
// Catch all others with public files. Not found fallback is app index for browser router.
5757
server.Handle("/app/", fileServerWithFallback(http.Dir("./public"), "./public/app/index.html"))

0 commit comments

Comments
 (0)