@@ -8,51 +8,62 @@ import (
8
8
"github.com/hammer-code/lms-be/utils"
9
9
)
10
10
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
+ }
58
69
}
0 commit comments