Skip to content

Commit f25d65b

Browse files
Merge pull request #6 from memphisdev/config
added auth
2 parents d4dc9f9 + bb9d4e9 commit f25d65b

File tree

11 files changed

+316
-21
lines changed

11 files changed

+316
-21
lines changed

go.mod

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,38 @@ require (
1111
require (
1212
github.com/andybalholm/brotli v1.0.4 // indirect
1313
github.com/ghodss/yaml v1.0.0 // indirect
14+
github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
15+
github.com/ghodss/yaml v1.0.0 // indirect
16+
github.com/gin-contrib/sse v0.1.0 // indirect
17+
github.com/gin-gonic/gin v1.8.1 // indirect
18+
github.com/go-playground/locales v0.14.0 // indirect
19+
github.com/go-playground/universal-translator v0.18.0 // indirect
20+
github.com/go-playground/validator/v10 v10.11.1 // indirect
21+
github.com/goccy/go-json v0.9.7 // indirect
22+
github.com/json-iterator/go v1.1.12 // indirect
1423
github.com/klauspost/compress v1.15.9 // indirect
24+
github.com/leodido/go-urn v1.2.1 // indirect
1525
github.com/mattn/go-colorable v0.1.13 // indirect
1626
github.com/mattn/go-isatty v0.0.16 // indirect
1727
github.com/mattn/go-runewidth v0.0.14 // indirect
1828
github.com/minio/highwayhash v1.0.2 // indirect
29+
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
30+
github.com/modern-go/reflect2 v1.0.2 // indirect
1931
github.com/nats-io/jwt/v2 v2.3.0 // indirect
2032
github.com/nats-io/nats.go v1.19.0 // indirect
2133
github.com/nats-io/nkeys v0.3.0 // indirect
2234
github.com/nats-io/nuid v1.0.1 // indirect
35+
github.com/pelletier/go-toml/v2 v2.0.1 // indirect
2336
github.com/rivo/uniseg v0.2.0 // indirect
37+
github.com/tkanos/gonfig v0.0.0-20210106201359-53e13348de2f // indirect
38+
github.com/ugorji/go/codec v1.2.7 // indirect
2439
github.com/valyala/bytebufferpool v1.0.0 // indirect
2540
github.com/valyala/fasthttp v1.41.0 // indirect
2641
github.com/valyala/tcplisten v1.0.0 // indirect
2742
golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be // indirect
43+
golang.org/x/net v0.0.0-20220906165146-f3363e06e74c // indirect
2844
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect
45+
golang.org/x/text v0.3.7 // indirect
2946
golang.org/x/time v0.2.0 // indirect
3047
google.golang.org/protobuf v1.28.1 // indirect
3148
gopkg.in/yaml.v2 v2.4.0 // indirect

go.sum

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,38 @@
11
github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
22
github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
3+
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
4+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
6+
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
7+
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
38
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
49
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
10+
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
11+
github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
12+
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
13+
github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
14+
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
15+
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
16+
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
17+
github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ=
18+
github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
19+
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
520
github.com/gofiber/fiber/v2 v2.40.1 h1:pc7n9VVpGIqNsvg9IPLQhyFEMJL8gCs1kneH5D1pIl4=
621
github.com/gofiber/fiber/v2 v2.40.1/go.mod h1:Gko04sLksnHbzLSRBFWPFdzM9Ws9pRxvvIaohJK1dsk=
7-
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
8-
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
9-
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
22+
1023
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
24+
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
25+
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
1126
github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY=
1227
github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
28+
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
29+
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
30+
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
31+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
32+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
33+
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
34+
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
35+
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
1336
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
1437
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
1538
github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
@@ -18,28 +41,40 @@ github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWV
1841
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
1942
github.com/memphisdev/memphis.go v0.1.6 h1:PWHsq+fFrv2qsxQn7r6nu6JB8VRuhMbfdna5g5vLrY0=
2043
github.com/memphisdev/memphis.go v0.1.6/go.mod h1:uNnhcMfEe7m6XuyBrvs+PjqzY2fGymQcviLs0XNk3K0=
21-
github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g=
2244
github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
23-
github.com/nats-io/jwt/v2 v2.3.0 h1:z2mA1a7tIf5ShggOFlR1oBPgd6hGqcDYsISxZByUzdI=
45+
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
46+
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
2447
github.com/nats-io/jwt/v2 v2.3.0/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k=
25-
github.com/nats-io/nats-server/v2 v2.9.5 h1:TlduKZ9YGoM0n34Lhm6AN0zRFOt/G3jTy9mPxXnE6dU=
2648
github.com/nats-io/nats.go v1.19.0 h1:H6j8aBnTQFoVrTGB6Xjd903UMdE7jz6DS4YkmAqgZ9Q=
2749
github.com/nats-io/nats.go v1.19.0/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA=
2850
github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8=
2951
github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4=
3052
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
3153
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
54+
github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
55+
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
56+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
3257
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
3358
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
59+
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
60+
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
61+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
62+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
63+
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
64+
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
65+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
3466
github.com/tkanos/gonfig v0.0.0-20210106201359-53e13348de2f h1:xDFq4NVQD34ekH5UsedBSgfxsBuPU2aZf7v4t0tH2jY=
3567
github.com/tkanos/gonfig v0.0.0-20210106201359-53e13348de2f/go.mod h1:DaZPBuToMc2eezA9R9nDAnmS2RMwL7yEa5YD36ESQdI=
68+
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
69+
github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
3670
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
3771
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
3872
github.com/valyala/fasthttp v1.41.0 h1:zeR0Z1my1wDHTRiamBCXVglQdbUwgb9uWG3k1HQz6jY=
3973
github.com/valyala/fasthttp v1.41.0/go.mod h1:f6VbjjoI3z1NDOZOv17o6RvtRSWxC77seBFc2uWtgiY=
4074
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
4175
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
4276
golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
77+
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
4378
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
4479
golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be h1:fmw3UbQh+nxngCAHrDCCztao/kbYFnWjoqop8dHx05A=
4580
golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
@@ -50,23 +85,25 @@ golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5h
5085
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
5186
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
5287
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
88+
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5389
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5490
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
5591
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5692
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
5793
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
5894
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
5995
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
96+
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
6097
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
61-
golang.org/x/time v0.2.0 h1:52I/1L54xyEQAYdtcSuxtiT84KGYTBGXwayxmIpNJhE=
6298
golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
6399
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
64100
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
65-
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
66101
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
67102
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
68103
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
69104
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
70105
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
71106
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
72107
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
108+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
109+
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

handlers/auth.go

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package handlers
2+
3+
import (
4+
"http-proxy/conf"
5+
"http-proxy/models"
6+
"http-proxy/utils"
7+
"strings"
8+
"time"
9+
10+
"github.com/dgrijalva/jwt-go"
11+
"github.com/gofiber/fiber/v2"
12+
"github.com/memphisdev/memphis.go"
13+
)
14+
15+
var configuration = conf.GetConfig()
16+
17+
type AuthHandler struct{}
18+
19+
func (ah AuthHandler) Authenticate(c *fiber.Ctx) error {
20+
var body models.AuthSchema
21+
if err := c.BodyParser(&body); err != nil {
22+
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
23+
"message": err.Error(),
24+
})
25+
}
26+
if err := utils.Validate(body); err != nil {
27+
return c.Status(400).JSON(fiber.Map{
28+
"message": err,
29+
})
30+
}
31+
conn, err := memphis.Connect(configuration.MEMPHIS_HOST, body.Username, body.ConnectionToken)
32+
if err != nil {
33+
if strings.Contains(err.Error(), "Authorization Violation") {
34+
return c.Status(401).JSON(fiber.Map{
35+
"message": "Wrong credentials",
36+
})
37+
}
38+
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
39+
"message": "Server error",
40+
})
41+
}
42+
conn.Close()
43+
token, refreshToken, err := createTokens()
44+
if err != nil {
45+
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
46+
"message": "Create tokens error",
47+
})
48+
}
49+
cookie := new(fiber.Cookie)
50+
cookie.Name = "jwt-refresh-token"
51+
cookie.Value = refreshToken
52+
cookie.MaxAge = configuration.REFRESH_JWT_EXPIRES_IN_MINUTES * 60 * 1000
53+
cookie.Path = "/"
54+
cookie.Domain = ""
55+
cookie.Secure = false
56+
cookie.HTTPOnly = true
57+
c.Cookie(cookie)
58+
return c.Status(fiber.StatusOK).JSON(fiber.Map{
59+
"jwt": token,
60+
"expires_in": configuration.JWT_EXPIRES_IN_MINUTES * 60 * 1000,
61+
})
62+
}
63+
64+
func createTokens() (string, string, error) {
65+
atClaims := jwt.MapClaims{}
66+
at := jwt.NewWithClaims(jwt.SigningMethodHS256, atClaims)
67+
token, err := at.SignedString([]byte(configuration.JWT_SECRET))
68+
if err != nil {
69+
return "", "", err
70+
}
71+
72+
atClaims["exp"] = time.Now().Add(time.Minute * time.Duration(configuration.REFRESH_JWT_EXPIRES_IN_MINUTES)).Unix()
73+
at = jwt.NewWithClaims(jwt.SigningMethodHS256, atClaims)
74+
refreshToken, err := at.SignedString([]byte(configuration.REFRESH_JWT_SECRET))
75+
if err != nil {
76+
return "", "", err
77+
}
78+
return token, refreshToken, nil
79+
}
80+
81+
func (ah AuthHandler) RefreshToken(c *fiber.Ctx) error {
82+
token, refreshToken, err := createTokens()
83+
if err != nil {
84+
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
85+
"message": "Create tokens error",
86+
})
87+
}
88+
cookie := new(fiber.Cookie)
89+
cookie.Name = "jwt-refresh-token"
90+
cookie.Value = refreshToken
91+
cookie.MaxAge = configuration.REFRESH_JWT_EXPIRES_IN_MINUTES * 60 * 1000
92+
cookie.Path = "/"
93+
cookie.Domain = ""
94+
cookie.Secure = false
95+
cookie.HTTPOnly = true
96+
c.Cookie(cookie)
97+
return c.Status(fiber.StatusOK).JSON(fiber.Map{
98+
"jwt": token,
99+
"expires_in": configuration.JWT_EXPIRES_IN_MINUTES * 60 * 1000,
100+
})
101+
}

handlers/producer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package handler
1+
package handlers
22

33
import (
44
"encoding/json"

main.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,19 @@ import (
77

88
"os"
99

10-
"github.com/gofiber/fiber/v2"
11-
"github.com/gofiber/fiber/v2/middleware/cors"
1210
"github.com/memphisdev/memphis.go"
1311
)
1412

15-
func main() {
16-
app := fiber.New()
17-
app.Use(cors.New())
13+
var configuration = conf.GetConfig()
1814

15+
func main() {
1916
configuration := conf.GetConfig()
2017
conn, err := memphis.Connect(configuration.MEMPHIS_HOST, configuration.ROOT_USER, configuration.CONNECTION_TOKEN)
2118
if err != nil {
2219
fmt.Println(err.Error())
2320
os.Exit(1)
2421
}
2522

26-
router.SetupRoutes(app, conn)
23+
app := router.SetupRoutes(conn)
2724
app.Listen(":" + configuration.HTTP_PORT)
2825
}

middlewares/auth.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package middlewares
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
"http-proxy/conf"
7+
"strings"
8+
9+
"github.com/dgrijalva/jwt-go"
10+
"github.com/gofiber/fiber/v2"
11+
)
12+
13+
var configuration = conf.GetConfig()
14+
15+
func extractToken(authHeader string) (string, error) {
16+
if authHeader == "" {
17+
return "", errors.New("unsupported auth header")
18+
}
19+
20+
splited := strings.Split(authHeader, " ")
21+
if len(splited) != 2 {
22+
return "", errors.New("unsupported auth header")
23+
}
24+
25+
tokenString := splited[1]
26+
return tokenString, nil
27+
}
28+
29+
func verifyToken(tokenString string, secret string) error {
30+
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
31+
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
32+
return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
33+
}
34+
return []byte(secret), nil
35+
})
36+
if err != nil {
37+
return errors.New("f")
38+
}
39+
40+
_, ok := token.Claims.(jwt.MapClaims)
41+
if !ok && !token.Valid {
42+
return errors.New("f")
43+
}
44+
45+
return nil
46+
}
47+
48+
func Authenticate(c *fiber.Ctx) error {
49+
path := strings.ToLower(string(c.Context().URI().RequestURI()))
50+
if path != "/auth/authenticate" {
51+
headers := c.GetReqHeaders()
52+
tokenString, err := extractToken(headers["Authorization"])
53+
if err != nil || tokenString == "" {
54+
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
55+
"message": "Unauthorized",
56+
})
57+
}
58+
err = verifyToken(tokenString, configuration.JWT_SECRET)
59+
if err != nil {
60+
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
61+
"message": "Unauthorized",
62+
})
63+
}
64+
}
65+
66+
return c.Next()
67+
}

models/auth.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package models
2+
3+
type AuthSchema struct {
4+
Username string `json:"username" validate:"required"`
5+
ConnectionToken string `json:"connection_token" validate:"required"`
6+
}

router/auth.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package router
2+
3+
import (
4+
"http-proxy/handlers"
5+
6+
"github.com/gofiber/fiber/v2"
7+
"github.com/gofiber/fiber/v2/middleware/logger"
8+
)
9+
10+
func InitilizeAuthRoutes(app *fiber.App) {
11+
authHandler := handlers.AuthHandler{}
12+
api := app.Group("/auth", logger.New())
13+
api.Post("/authenticate", authHandler.Authenticate)
14+
api.Post("/refreshToken", authHandler.RefreshToken)
15+
}

0 commit comments

Comments
 (0)