Skip to content

Commit 2ea270c

Browse files
authored
Merge pull request #9 from libkush/master
Refactoring
2 parents df6c2e4 + 3ba5f71 commit 2ea270c

File tree

6 files changed

+97
-146
lines changed

6 files changed

+97
-146
lines changed

database/connection.go

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

go.mod

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,21 @@ require (
1010
github.com/golang-jwt/jwt/v5 v5.3.0
1111
github.com/golang-migrate/migrate/v4 v4.19.0
1212
github.com/google/uuid v1.6.0
13-
github.com/jackc/pgx/v5 v5.7.5
13+
github.com/jackc/pgx/v5 v5.7.6
1414
github.com/joho/godotenv v1.5.1
15-
github.com/stretchr/testify v1.10.0
1615
github.com/ulule/limiter/v3 v3.11.2
16+
go.opentelemetry.io/otel/trace v1.38.0
1717
go.uber.org/zap v1.27.0
18-
golang.org/x/crypto v0.41.0
18+
golang.org/x/crypto v0.42.0
1919
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
2020
)
2121

2222
require (
23-
github.com/bytedance/sonic v1.14.0 // indirect
23+
github.com/bytedance/gopkg v0.1.3 // indirect
24+
github.com/bytedance/sonic v1.14.1 // indirect
2425
github.com/bytedance/sonic/loader v0.3.0 // indirect
2526
github.com/cloudwego/base64x v0.1.6 // indirect
26-
github.com/davecgh/go-spew v1.1.1 // indirect
27-
github.com/gabriel-vasile/mimetype v1.4.9 // indirect
27+
github.com/gabriel-vasile/mimetype v1.4.10 // indirect
2828
github.com/gin-contrib/sse v1.1.0 // indirect
2929
github.com/go-playground/locales v0.14.1 // indirect
3030
github.com/go-playground/universal-translator v0.18.1 // indirect
@@ -44,17 +44,17 @@ require (
4444
github.com/modern-go/reflect2 v1.0.2 // indirect
4545
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
4646
github.com/pkg/errors v0.9.1 // indirect
47-
github.com/pmezard/go-difflib v1.0.0 // indirect
4847
github.com/rogpeppe/go-internal v1.14.1 // indirect
4948
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
5049
github.com/ugorji/go/codec v1.3.0 // indirect
50+
go.opentelemetry.io/otel v1.38.0 // indirect
5151
go.uber.org/multierr v1.11.0 // indirect
52-
golang.org/x/arch v0.20.0 // indirect
53-
golang.org/x/net v0.43.0 // indirect
54-
golang.org/x/sync v0.16.0 // indirect
55-
golang.org/x/sys v0.35.0 // indirect
56-
golang.org/x/text v0.28.0 // indirect
57-
google.golang.org/protobuf v1.36.8 // indirect
52+
golang.org/x/arch v0.21.0 // indirect
53+
golang.org/x/net v0.44.0 // indirect
54+
golang.org/x/sync v0.17.0 // indirect
55+
golang.org/x/sys v0.36.0 // indirect
56+
golang.org/x/text v0.29.0 // indirect
57+
google.golang.org/protobuf v1.36.9 // indirect
5858
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
5959
gopkg.in/yaml.v3 v3.0.1 // indirect
6060
)

go.sum

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25
22
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
33
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
44
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
5-
github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ=
6-
github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA=
5+
github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M=
6+
github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM=
7+
github.com/bytedance/sonic v1.14.1 h1:FBMC0zVz5XUmE4z9wF4Jey0An5FueFvOsTKKKtwIl7w=
8+
github.com/bytedance/sonic v1.14.1/go.mod h1:gi6uhQLMbTdeP0muCnrjHLeCUPyb70ujhnNlhOylAFc=
79
github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA=
810
github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
911
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
@@ -27,8 +29,8 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4
2729
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
2830
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
2931
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
30-
github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY=
31-
github.com/gabriel-vasile/mimetype v1.4.9/go.mod h1:WnSQhFKJuBlRyLiKohA/2DtIlPFAbguNaG7QCHcyGok=
32+
github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0=
33+
github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s=
3234
github.com/gin-contrib/cors v1.7.6 h1:3gQ8GMzs1Ylpf70y8bMw4fVpycXIeX1ZemuSQIsnQQY=
3335
github.com/gin-contrib/cors v1.7.6/go.mod h1:Ulcl+xN4jel9t1Ry8vqph23a60FwH9xVLd+3ykmTjOk=
3436
github.com/gin-contrib/requestid v1.0.5 h1:oye4jWPpTmJHLepQWzb36lFZkKzl+gf8R0K/ButxJUY=
@@ -73,8 +75,8 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI
7375
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
7476
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
7577
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
76-
github.com/jackc/pgx/v5 v5.7.5 h1:JHGfMnQY+IEtGM63d+NGMjoRpysB2JBwDr5fsngwmJs=
77-
github.com/jackc/pgx/v5 v5.7.5/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M=
78+
github.com/jackc/pgx/v5 v5.7.6 h1:rWQc5FwZSPX58r1OQmkuaNicxdmExaEz5A2DO2hUuTk=
79+
github.com/jackc/pgx/v5 v5.7.6/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M=
7880
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
7981
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
8082
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
@@ -124,8 +126,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
124126
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
125127
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
126128
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
127-
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
128-
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
129+
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
130+
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
129131
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
130132
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
131133
github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA=
@@ -136,33 +138,33 @@ go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJyS
136138
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
137139
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk=
138140
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8=
139-
go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
140-
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
141-
go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
142-
go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
143-
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
144-
go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
141+
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
142+
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
143+
go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
144+
go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
145+
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
146+
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
145147
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
146148
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
147149
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
148150
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
149151
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
150152
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
151-
golang.org/x/arch v0.20.0 h1:dx1zTU0MAE98U+TQ8BLl7XsJbgze2WnNKF/8tGp/Q6c=
152-
golang.org/x/arch v0.20.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk=
153-
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
154-
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
155-
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
156-
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
157-
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
158-
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
153+
golang.org/x/arch v0.21.0 h1:iTC9o7+wP6cPWpDWkivCvQFGAHDQ59SrSxsLPcnkArw=
154+
golang.org/x/arch v0.21.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A=
155+
golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
156+
golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
157+
golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I=
158+
golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
159+
golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
160+
golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
159161
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
160-
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
161-
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
162-
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
163-
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
164-
google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
165-
google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
162+
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
163+
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
164+
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
165+
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
166+
google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
167+
google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
166168
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
167169
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
168170
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

main.go

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package main
22

33
import (
4+
"bytes"
45
"context"
56
"flag"
67
"fmt"
8+
"io"
79
"log"
810
"net/http"
911
"os"
@@ -17,7 +19,9 @@ import (
1719
"github.com/gin-contrib/requestid"
1820
ginzap "github.com/gin-contrib/zap"
1921
"github.com/gin-gonic/gin"
22+
"go.opentelemetry.io/otel/trace"
2023
"go.uber.org/zap"
24+
"go.uber.org/zap/zapcore"
2125
)
2226

2327
// performHealthCheck performs a health check and exits with appropriate code
@@ -93,6 +97,9 @@ func main() {
9397
// Initialize JWT
9498
utils.InitJWT()
9599

100+
// Initialize middleware logger
101+
middleware.InitLogger(logger)
102+
96103
// Initialize database connection
97104
if err := services.InitDB(logger); err != nil {
98105
logger.Fatal("Failed to initialize database", zap.Error(err))
@@ -115,7 +122,34 @@ func main() {
115122

116123
router := gin.New()
117124

118-
router.Use(ginzap.Ginzap(logger, time.RFC3339, true))
125+
router.Use(ginzap.GinzapWithConfig(logger, &ginzap.Config{
126+
UTC: true,
127+
TimeFormat: time.RFC3339,
128+
Context: ginzap.Fn(func(c *gin.Context) []zapcore.Field {
129+
fields := []zapcore.Field{}
130+
// log request ID
131+
fields = append(fields, zap.String("request_id", requestid.Get(c)))
132+
133+
// log trace and span ID
134+
if trace.SpanFromContext(c.Request.Context()).SpanContext().IsValid() {
135+
fields = append(fields, zap.String("trace_id", trace.SpanFromContext(c.Request.Context()).SpanContext().TraceID().String()))
136+
fields = append(fields, zap.String("span_id", trace.SpanFromContext(c.Request.Context()).SpanContext().SpanID().String()))
137+
}
138+
139+
// log client IP
140+
fields = append(fields, zap.String("client_ip", c.ClientIP()))
141+
142+
// log request body
143+
var body []byte
144+
var buf bytes.Buffer
145+
tee := io.TeeReader(c.Request.Body, &buf)
146+
body, _ = io.ReadAll(tee)
147+
c.Request.Body = io.NopCloser(&buf)
148+
fields = append(fields, zap.String("body", string(body)))
149+
150+
return fields
151+
}),
152+
}))
119153
router.Use(ginzap.RecoveryWithZap(logger, true))
120154
router.Use(requestid.New())
121155
defaultProxies := []string{

middleware/middleware.go

Lines changed: 18 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package middleware
22

33
import (
4-
"log"
5-
"net"
64
"net/http"
75
"slices"
86
"strconv"
@@ -15,13 +13,23 @@ import (
1513
"github.com/google/uuid"
1614
"github.com/ulule/limiter/v3"
1715
"github.com/ulule/limiter/v3/drivers/store/memory"
16+
"go.uber.org/zap"
1817
)
1918

19+
var logger *zap.Logger
20+
21+
// InitLogger initializes the middleware logger
22+
func InitLogger(l *zap.Logger) {
23+
logger = l
24+
}
25+
2026
// JWTAuthMiddleware validates JWT tokens and sets user information in context
2127
func JWTAuthMiddleware() gin.HandlerFunc {
2228
return func(c *gin.Context) {
2329
authHeader := c.GetHeader("Authorization")
24-
log.Println("Authorization Header Received:", authHeader)
30+
if logger != nil {
31+
logger.Info("Authorization Header Received", zap.String("header", authHeader))
32+
}
2533
if authHeader == "" {
2634
c.JSON(http.StatusUnauthorized, gin.H{
2735
"error": "Authorization header is required",
@@ -40,7 +48,9 @@ func JWTAuthMiddleware() gin.HandlerFunc {
4048
}
4149

4250
tokenString := tokenParts[1]
43-
log.Println("Extracted Token:", tokenString)
51+
if logger != nil {
52+
logger.Info("Extracted Token", zap.String("token", tokenString))
53+
}
4454
claims, err := utils.ValidateJWT(tokenString)
4555
if err != nil {
4656
c.JSON(http.StatusUnauthorized, gin.H{
@@ -120,40 +130,6 @@ type RateLimiterConfig struct {
120130
Rate limiter.Rate
121131
}
122132

123-
// getClientIP extracts the real client IP, considering reverse proxy headers
124-
func getClientIP(c *gin.Context) string {
125-
// Check for real IP headers in order of preference
126-
headers := []string{
127-
"X-Real-IP",
128-
"X-Forwarded-For",
129-
"CF-Connecting-IP", // Cloudflare
130-
"True-Client-IP", // Akamai and Cloudflare
131-
}
132-
133-
for _, header := range headers {
134-
ip := c.GetHeader(header)
135-
if ip != "" {
136-
// For X-Forwarded-For, take the first IP (original client)
137-
if header == "X-Forwarded-For" {
138-
ips := strings.Split(ip, ",")
139-
ip = strings.TrimSpace(ips[0])
140-
}
141-
142-
// Validate IP format
143-
if net.ParseIP(ip) != nil {
144-
return ip
145-
}
146-
}
147-
}
148-
149-
// Fall back to RemoteAddr
150-
ip, _, err := net.SplitHostPort(c.Request.RemoteAddr)
151-
if err != nil {
152-
return c.Request.RemoteAddr
153-
}
154-
return ip
155-
}
156-
157133
// RateLimiterMiddleware creates a rate limiting middleware
158134
func RateLimiterMiddleware(config RateLimiterConfig) gin.HandlerFunc {
159135
// Create an in-memory store for rate limiting
@@ -164,12 +140,14 @@ func RateLimiterMiddleware(config RateLimiterConfig) gin.HandlerFunc {
164140

165141
return func(c *gin.Context) {
166142
// Get the real client IP
167-
clientIP := getClientIP(c)
143+
clientIP := c.ClientIP()
168144

169145
// Check rate limit
170146
context, err := instance.Get(c.Request.Context(), clientIP)
171147
if err != nil {
172-
log.Printf("Rate limiter error: %v", err)
148+
if logger != nil {
149+
logger.Error("Rate limiter error", zap.Error(err))
150+
}
173151
c.JSON(http.StatusInternalServerError, gin.H{
174152
"error": "Internal server error",
175153
})

routes/auth.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func Register(c *gin.Context) {
5050
domain := emailParts[1]
5151

5252
// Check if email domain is allowed
53-
allowedDomains := strings.Split(utils.GetEnvWithDefault("ALLOWED_EMAIL_DOMAINS", "vit.ac.in,vitstudent.ac.in"), ",")
53+
allowedDomains := utils.GetEnvAsSlice("ALLOWED_EMAIL_DOMAINS", ",", []string{"vit.ac.in", "vitstudent.ac.in"})
5454
domainAllowed := false
5555
for _, d := range allowedDomains {
5656
if strings.EqualFold(strings.TrimSpace(d), domain) {

0 commit comments

Comments
 (0)