@@ -8,51 +8,62 @@ import (
88 "github.com/hammer-code/lms-be/utils"
99)
1010
11- func (m * Middleware ) AuthMiddleware (next http.Handler ) http.Handler {
12- return http .HandlerFunc (func (writer http.ResponseWriter , request * http.Request ) {
13- token := utils .ExtractBearerToken (request )
14- if len (* token ) < 5 {
15- utils .Response (domain.HttpResponse {
16- Code : 401 ,
17- Message : "Forbidden" ,
18- Data : nil ,
19- }, writer )
20- return
21- }
22-
23- verifyToken , err := m .Jwt .VerifyToken (* token )
24- if err != nil {
25- utils .Response (domain.HttpResponse {
26- Code : 500 ,
27- Message : err .Error (),
28- Data : nil ,
29- }, writer )
30- return
31- }
32-
33- // tokenLogoutErr := m.UserRepo.ExpiredToken(request.Context(), *token)
34- // if tokenLogoutErr == nil {
35- // utils.Response(domain.HttpResponse{
36- // Code: 401,
37- // Message: "Token expired",
38- // Data: nil,
39- // }, writer)
40- // return
41- // }
42-
43- user , err := m .UserRepo .FindByEmail (request .Context (), verifyToken .Email )
44- if err != nil {
45- utils .Response (domain.HttpResponse {
46- Code : 401 ,
47- Message : "Forbidden" ,
48- Data : nil ,
49- }, writer )
50- return
51- }
52-
53- writer .Header ().Set ("x-user-id" , strconv .Itoa (user .ID ))
54- writer .Header ().Set ("x-username" , user .Username )
55-
56- next .ServeHTTP (writer , request )
57- })
11+ func (m * Middleware ) AuthMiddleware (allowedRole string ) domain.MiddlewareFunc {
12+ return func (next http.Handler ) http.Handler {
13+ return http .HandlerFunc (func (writer http.ResponseWriter , request * http.Request ) {
14+ token := utils .ExtractBearerToken (request )
15+ if len (* token ) < 5 {
16+ utils .Response (domain.HttpResponse {
17+ Code : 401 ,
18+ Message : "Unauthorized" ,
19+ Data : nil ,
20+ }, writer )
21+ return
22+ }
23+
24+ verifyToken , err := m .Jwt .VerifyToken (* token )
25+ if err != nil {
26+ utils .Response (domain.HttpResponse {
27+ Code : 500 ,
28+ Message : "failed to verify token" ,
29+ Data : nil ,
30+ }, writer )
31+ return
32+ }
33+
34+ // tokenLogoutErr := m.UserRepo.ExpiredToken(request.Context(), *token)
35+ // if tokenLogoutErr == nil {
36+ // utils.Response(domain.HttpResponse{
37+ // Code: 401,
38+ // Message: "Token expired",
39+ // Data: nil,
40+ // }, writer)
41+ // return
42+ // }
43+
44+ user , err := m .UserRepo .FindByEmail (request .Context (), verifyToken .Email )
45+ if err != nil {
46+ utils .Response (domain.HttpResponse {
47+ Code : 401 ,
48+ Message : "Unauthorized" ,
49+ Data : nil ,
50+ }, writer )
51+ return
52+ }
53+
54+ if user .Role != allowedRole {
55+ utils .Response (domain.HttpResponse {
56+ Code : 401 ,
57+ Message : "Unauthorized" ,
58+ Data : nil ,
59+ }, writer )
60+ return
61+ }
62+
63+ writer .Header ().Set ("x-user-id" , strconv .Itoa (user .ID ))
64+ writer .Header ().Set ("x-username" , user .Username )
65+
66+ next .ServeHTTP (writer , request )
67+ })
68+ }
5869}
0 commit comments