Skip to content

Commit c08c8b3

Browse files
committed
Merge branch 'development' of github.com:hammercode-dev/lms-be into BE-10/Database-migrate-and-seeder
2 parents 3900be0 + 5ad026c commit c08c8b3

28 files changed

+492
-141
lines changed

.github/workflows/development.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ jobs:
1111

1212
steps:
1313
- name: Checkout Code
14-
uses: actions/checkout@v2
14+
uses: actions/checkout@v4
1515

1616
- name: Set up Go
17-
uses: actions/setup-go@v2
17+
uses: actions/setup-go@v5
1818
with:
19-
go-version: '1.20'
19+
go-version: '1.24'
2020

2121
- name: Test
2222
run: go test -v ./...
@@ -28,7 +28,7 @@ jobs:
2828
run: tar -czvf main.tar.gz main
2929

3030
- name: Upload Artifact
31-
uses: actions/upload-artifact@v3
31+
uses: actions/upload-artifact@v4
3232
with:
3333
name: build-artifact
3434
path: main.tar.gz
@@ -39,10 +39,10 @@ jobs:
3939
environment: development
4040
steps:
4141
- name: Checkout Code
42-
uses: actions/checkout@v2
42+
uses: actions/checkout@v4
4343

4444
- name: Download Build Artifact
45-
uses: actions/download-artifact@v3
45+
uses: actions/download-artifact@v4
4646
with:
4747
name: build-artifact
4848

app/middlewares/auth_middleware.go

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,64 +5,82 @@ import (
55
"strconv"
66

77
"github.com/hammer-code/lms-be/domain"
8+
"github.com/hammer-code/lms-be/pkg/ngelog"
89
"github.com/hammer-code/lms-be/utils"
910
)
1011

1112
func (m *Middleware) AuthMiddleware(allowedRole string) domain.MiddlewareFunc {
1213
return func(next http.Handler) http.Handler {
1314
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
15+
ctx, span := tracer.Start(request.Context(), "auth middleware")
16+
defer span.End()
17+
1418
token := utils.ExtractBearerToken(request)
1519
if len(*token) < 5 {
20+
ngelog.Error(ctx, "failed to extract bearer token", nil)
1621
utils.Response(domain.HttpResponse{
1722
Code: 401,
1823
Message: "Unauthorized",
1924
Data: nil,
2025
}, writer)
2126
return
2227
}
23-
28+
2429
verifyToken, err := m.Jwt.VerifyToken(*token)
2530
if err != nil {
31+
ngelog.Error(ctx, "failed to verify token", err)
2632
utils.Response(domain.HttpResponse{
2733
Code: 500,
2834
Message: "failed to verify token",
2935
Data: nil,
3036
}, writer)
3137
return
3238
}
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-
39+
40+
logoutToken, err := m.UserRepo.GetToken(request.Context(), *token)
41+
if err != nil {
42+
ngelog.Error(ctx, "failed to get token", err)
43+
utils.Response(domain.HttpResponse{
44+
Code: 401,
45+
Message: "Unauthorized",
46+
Data: nil,
47+
}, writer)
48+
return
49+
}
50+
if logoutToken.Status == 0 {
51+
ngelog.Error(ctx, "unauthorized", nil)
52+
utils.Response(domain.HttpResponse{
53+
Code: 401,
54+
Message: "Unauthorized",
55+
Data: nil,
56+
}, writer)
57+
return
58+
}
59+
4460
user, err := m.UserRepo.FindByEmail(request.Context(), verifyToken.Email)
4561
if err != nil {
62+
ngelog.Error(ctx, "failed to find by email", err)
4663
utils.Response(domain.HttpResponse{
4764
Code: 401,
4865
Message: "Unauthorized",
4966
Data: nil,
5067
}, writer)
5168
return
5269
}
53-
70+
5471
if user.Role != allowedRole {
72+
ngelog.Error(ctx, "role is not the role", nil)
5573
utils.Response(domain.HttpResponse{
5674
Code: 401,
5775
Message: "Unauthorized",
5876
Data: nil,
5977
}, writer)
6078
return
6179
}
62-
80+
6381
writer.Header().Set("x-user-id", strconv.Itoa(user.ID))
6482
writer.Header().Set("x-username", user.Username)
65-
83+
6684
next.ServeHTTP(writer, request)
6785
})
6886
}

app/middlewares/log.go

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,23 @@
11
package middlewares
22

33
import (
4-
"fmt"
54
"net/http"
6-
"time"
7-
8-
"github.com/sirupsen/logrus"
95
)
106

117
func (m *Middleware) LogMiddleware(next http.Handler) http.Handler {
128
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
13-
fmt.Println("hiteed")
14-
start := time.Now()
9+
ctx, span := tracer.Start(r.Context(), "HTTP "+r.Method+" "+r.URL.Path)
10+
defer span.End()
11+
12+
// Replace request context with the new one
13+
r = r.WithContext(ctx)
1514

1615
// Call the next handler
1716
next.ServeHTTP(w, r)
18-
19-
// Log request details with Logrus
20-
logrus.WithFields(logrus.Fields{
21-
"method": r.Method,
22-
"url": r.URL.Path,
23-
"duration": time.Since(start).String(),
24-
}).Info("Request processed")
17+
// ngelog.Info(ctx, "request process", ngelog.AddFields{
18+
// "method": r.Method,
19+
// "url": r.URL.Path,
20+
// "duration": time.Since(time.Now()).String(),
21+
// })
2522
})
2623
}

app/middlewares/middleware.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,18 @@ package middlewares
33
import (
44
"github.com/hammer-code/lms-be/domain"
55
"github.com/hammer-code/lms-be/pkg/jwt"
6+
"go.opentelemetry.io/otel"
67
)
78

89
type Middleware struct {
910
Jwt jwt.JWT
1011
UserRepo domain.UserRepository
1112
}
1213

14+
var (
15+
tracer = otel.Tracer("Start Trace")
16+
)
17+
1318
func InitMiddleware(jwt jwt.JWT, userRepo domain.UserRepository) domain.Middleware {
1419
return &Middleware{
1520
Jwt: jwt,

app/users/delivery/http/logout_users.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,8 @@ func (h Handler) Logout(w http.ResponseWriter, r *http.Request) {
2222

2323
err := h.usecase.Logout(r.Context(), *token)
2424
if err != nil {
25-
utils.Response(domain.HttpResponse{
26-
Code: 500,
27-
Message: err.Error(),
28-
Data: nil,
29-
}, w)
25+
resp := utils.CostumErr(err.Error())
26+
utils.Response(resp, w)
3027
return
3128
}
3229

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package repository
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"github.com/hammer-code/lms-be/domain"
8+
)
9+
10+
func (repo *repository) CleanupLogoutToken(ctx context.Context) error {
11+
token := &domain.LogoutToken{}
12+
if err := repo.db.DB(ctx).Delete(token, "expired_at < ?", time.Now()).Error; err != nil {
13+
return err
14+
}
15+
16+
return nil
17+
}

app/users/repository/expired_token.go

Lines changed: 0 additions & 22 deletions
This file was deleted.

app/users/repository/get_token.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package repository
2+
3+
import (
4+
"context"
5+
6+
"github.com/hammer-code/lms-be/domain"
7+
)
8+
9+
func (repo *repository) GetToken(ctx context.Context, token string) (logoutToken domain.LogoutToken, err error) {
10+
if err = repo.db.DB(ctx).Find(&logoutToken, "token = ?", token).Error; err != nil {
11+
return
12+
}
13+
return
14+
}

app/users/repository/logout_users.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,13 @@ package repository
22

33
import (
44
"context"
5-
"github.com/hammer-code/lms-be/domain"
65
"time"
6+
7+
"github.com/hammer-code/lms-be/domain"
78
)
89

910
func (repo *repository) LogoutUser(ctx context.Context, token string, expiredAt time.Time) error {
10-
err := repo.db.DB(ctx).Create(&domain.LogoutToken{
11-
Token: token,
12-
ExpiredAt: expiredAt,
13-
CreatedAt: time.Now(),
14-
}).Error
15-
16-
if err != nil {
11+
if err := repo.db.DB(ctx).Model(&domain.LogoutToken{}).Where("token = ?", token).Update("status", 0).Error; err != nil {
1712
return err
1813
}
1914

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package repository
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"github.com/hammer-code/lms-be/domain"
8+
)
9+
10+
func (repo *repository) StoreToken(ctx context.Context, token string, expiredAt time.Time, uid int) error {
11+
err := repo.db.DB(ctx).Create(&domain.LogoutToken{
12+
Token: token,
13+
ExpiredAt: expiredAt,
14+
CreatedAt: time.Now(),
15+
UserId: uid,
16+
Status: 1,
17+
}).Error
18+
19+
if err != nil {
20+
return err
21+
}
22+
23+
return nil
24+
}

0 commit comments

Comments
 (0)