@@ -7,17 +7,19 @@ import (
77 "time"
88
99 "github.com/golang-jwt/jwt/v5"
10+ "github.com/google/uuid"
1011
1112 "github.com/PythonHacker24/linux-acl-management-backend/config"
1213)
1314
1415/* generating jwt token for user identification with specified configs */
15- func GenerateJWT (username string ) (string , error ) {
16+ func GenerateJWT (username string , sessionID uuid. UUID ) (string , error ) {
1617 expiryHours := config .BackendConfig .BackendSecurity .JWTExpiry
1718
1819 /* generate JWT token with claims */
1920 token := jwt .NewWithClaims (jwt .SigningMethodHS256 , jwt.MapClaims {
2021 "username" : username ,
22+ "sessionID" : sessionID ,
2123 "exp" : time .Now ().Add (time .Hour * time .Duration (expiryHours )).Unix (),
2224 })
2325
@@ -47,37 +49,42 @@ func ValidateJWT(tokenString string) (jwt.MapClaims, error) {
4749 return nil , fmt .Errorf ("invalid token" )
4850}
4951
50- /* extracts username from JWT token */
51- func GetUsernameFromJWT (tokenString string ) (string , error ) {
52+ /* extracts username and sessionID from JWT token */
53+ func GetDataFromJWT (tokenString string ) (string , string , error ) {
5254 /* get claims from JWT Token */
5355 claims , err := ValidateJWT (tokenString )
5456 if err != nil {
55- return "" , fmt .Errorf ("JWT validation error: %w" , err )
57+ return "" , "" , fmt .Errorf ("JWT validation error: %w" , err )
5658 }
5759
5860 /* extract username from JWT Token */
5961 username , ok := claims ["username" ].(string )
6062 if ! ok {
61- return "" , fmt .Errorf ("username not found in token" )
63+ return "" , "" , fmt .Errorf ("username not found in token" )
6264 }
6365
64- return username , nil
66+ /* extract sessionID from JWT Token */
67+ sessionID , ok := claims ["sessionID" ].(string )
68+ if ! ok {
69+ return "" , "" , fmt .Errorf ("sessionID not found in token" )
70+ }
71+ return username , sessionID , nil
6572}
6673
67- /* extract username from http request (wrapper around GetUsernameFromJWT for http requests) */
68- func ExtractUsernameFromRequest (r * http.Request ) (string , error ) {
74+ /* extract username and sessionID from http request (wrapper around GetUsernameFromJWT for http requests) */
75+ func ExtractDataFromRequest (r * http.Request ) (string , string , error ) {
6976 /* get the authorization header */
7077 authHeader := r .Header .Get ("Authorization" )
7178 if authHeader == "" {
72- return "" , fmt .Errorf ("authorization header not found" )
79+ return "" , "" , fmt .Errorf ("authorization header not found" )
7380 }
7481
7582 /* check if the header is in the correct format */
7683 parts := strings .Split (authHeader , " " )
7784 if len (parts ) != 2 || parts [0 ] != "Bearer" {
78- return "" , fmt .Errorf ("invalid authorization header format" )
85+ return "" ,"" , fmt .Errorf ("invalid authorization header format" )
7986 }
8087
81- /* extract username from JWT token */
82- return GetUsernameFromJWT (parts [1 ])
88+ /* extract username and sessionID from JWT token */
89+ return GetDataFromJWT (parts [1 ])
8390}
0 commit comments