From c3e73543a7aaca14b0b1c3810553465219d6d479 Mon Sep 17 00:00:00 2001 From: Shubhrajyoti Dey Date: Tue, 6 Feb 2024 18:11:03 +0530 Subject: [PATCH] Fiber middleware --- constants/error.go | 2 +- go.mod | 17 ++++++++--- go.sum | 33 +++++++++++++++++---- handler/fiber-middleware.go | 58 +++++++++++++++++++++++++++++++++++++ handler/gin-middleware.go | 38 ++++++++++++++++++++++-- handler/init.go | 3 +- handler/verify.go | 41 +++----------------------- 7 files changed, 142 insertions(+), 50 deletions(-) create mode 100644 handler/fiber-middleware.go diff --git a/constants/error.go b/constants/error.go index 3a30911..e9348db 100644 --- a/constants/error.go +++ b/constants/error.go @@ -13,4 +13,4 @@ var ERROR_FAILED_FETCH_FROM_DB string = "ERROR_FAILED_FETCH_FROM_DB" var ERROR_NOT_A_STUDENT string = "ERROR_NOT_A_STUDENT" -var ERROR_ROLE_CHECK_FAILED string = "ERROR_ROLE_CHECKED_FAILED" \ No newline at end of file +var ERROR_ROLE_CHECK_FAILED string = "ERROR_ROLE_CHECKED_FAILED" diff --git a/go.mod b/go.mod index c062703..b06a331 100644 --- a/go.mod +++ b/go.mod @@ -12,19 +12,28 @@ require ( ) require ( + github.com/andybalholm/brotli v1.0.5 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/gofiber/fiber/v2 v2.52.0 // indirect github.com/golang/snappy v0.0.3 // indirect - github.com/klauspost/compress v1.13.6 // indirect + github.com/google/uuid v1.5.0 // indirect + github.com/klauspost/compress v1.17.0 // indirect github.com/lestrrat-go/blackmagic v1.0.2 // indirect github.com/lestrrat-go/httpcc v1.0.1 // indirect github.com/lestrrat-go/httprc v1.0.4 // indirect github.com/lestrrat-go/iter v1.0.2 // indirect github.com/lestrrat-go/option v1.0.1 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect github.com/redis/go-redis/v9 v9.4.0 // indirect + github.com/rivo/uniseg v0.2.0 // indirect github.com/segmentio/asm v1.2.0 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasthttp v1.51.0 // indirect + github.com/valyala/tcplisten v1.0.0 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect @@ -45,7 +54,7 @@ require ( github.com/json-iterator/go v1.1.12 github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/leodido/go-urn v1.2.2 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.0.6 // indirect @@ -53,8 +62,8 @@ require ( github.com/ugorji/go/codec v1.2.10 // indirect golang.org/x/arch v0.2.0 // indirect golang.org/x/crypto v0.14.0 // indirect - golang.org/x/net v0.10.0 // indirect - golang.org/x/sys v0.13.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sys v0.15.0 // indirect golang.org/x/text v0.13.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index bd6e4c4..214f766 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ github.com/FrosTiK-SD/mongik v0.1.18 h1:kDhGDEhgDyfEG4lEkVRfe2mVrtDB9QDsY9g2HOAS github.com/FrosTiK-SD/mongik v0.1.18/go.mod h1:AjFFmUGUAix1sf24uxh0Wxq5fNIpykx4EEd44AMYhfw= github.com/allegro/bigcache/v3 v3.1.0 h1:H2Vp8VOvxcrB91o86fUSVJFqeuz8kpyyB02eH3bSzwk= github.com/allegro/bigcache/v3 v3.1.0/go.mod h1:aPyh7jEvrog9zAwx5N7+JUQX5dZTSGpxF1LAR4dr35I= +github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= +github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= @@ -45,6 +47,8 @@ github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVL github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/gofiber/fiber/v2 v2.52.0 h1:S+qXi7y+/Pgvqq4DrSmREGiFwtB7Bu6+QFLuIHYw/UE= +github.com/gofiber/fiber/v2 v2.52.0/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= @@ -54,12 +58,15 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= +github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= @@ -87,9 +94,14 @@ github.com/lestrrat-go/jwx/v2 v2.0.16/go.mod h1:jBHyESp4e7QxfERM0UKkQ80/94paqNIE github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -105,6 +117,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/redis/go-redis/v9 v9.4.0 h1:Yzoz33UZw9I/mFhx4MNrB6Fk+XHO1VukNcCa1+lwyKk= github.com/redis/go-redis/v9 v9.4.0/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= @@ -129,6 +143,12 @@ github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6 github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ugorji/go/codec v1.2.10 h1:eimT6Lsr+2lzmSZxPhLFoOWFmQqwk0fllJJ5hEbTXtQ= github.com/ugorji/go/codec v1.2.10/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= +github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= +github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= @@ -156,8 +176,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= @@ -174,9 +195,11 @@ golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= diff --git a/handler/fiber-middleware.go b/handler/fiber-middleware.go new file mode 100644 index 0000000..3f51754 --- /dev/null +++ b/handler/fiber-middleware.go @@ -0,0 +1,58 @@ +package handler + +import ( + "errors" + + "github.com/FrosTiK-SD/auth/constants" + "github.com/FrosTiK-SD/auth/interfaces" + "github.com/FrosTiK-SD/auth/util" + "github.com/gin-gonic/gin" + "github.com/gofiber/fiber/v2" +) + +// For Gin based middlewares +func (h *Handler) FiberVerifyStudent(ctx *fiber.Ctx) error { + + // Create a new session + currentHandler := Handler{ + MongikClient: h.MongikClient, + JwkSet: h.JwkSet, + Session: &Session{}, + Config: Config{ + Mode: MIDDLEWARE, + }, + } + + context := gin.Context{} + + currentHandler.HandlerVerifyStudentIdToken(&context) + student := currentHandler.Session.Student + + if student != nil { + ctx.Locals(constants.SESSION, student) + ctx.Next() + } else { + return currentHandler.Session.Error + } + + return nil +} + +func (h *RoleCheckerHandler) FiberVerifyRole(ctx *fiber.Ctx) error { + entity := ctx.Locals(constants.SESSION) + var entityGroups *interfaces.Groups + entityBytes, err := json.Marshal(entity) + if err != nil { + return err + } + err = json.Unmarshal(entityBytes, &entityGroups) + if err != nil { + return err + } + if !util.CheckRoleExists(&entityGroups.Groups, h.Role) { + return errors.New(constants.ERROR_ROLE_CHECK_FAILED) + } + + ctx.Next() + return nil +} diff --git a/handler/gin-middleware.go b/handler/gin-middleware.go index 545ddf1..1eafa64 100644 --- a/handler/gin-middleware.go +++ b/handler/gin-middleware.go @@ -2,6 +2,8 @@ package handler import ( "github.com/FrosTiK-SD/auth/constants" + "github.com/FrosTiK-SD/auth/interfaces" + "github.com/FrosTiK-SD/auth/util" "github.com/gin-gonic/gin" ) @@ -17,7 +19,7 @@ func (h *Handler) GinVerifyStudent(ctx *gin.Context) { Mode: MIDDLEWARE, }, } - + currentHandler.HandlerVerifyStudentIdToken(ctx) student := currentHandler.Session.Student @@ -30,6 +32,38 @@ func (h *Handler) GinVerifyStudent(ctx *gin.Context) { } func (h *RoleCheckerHandler) GinVerifyRole(ctx *gin.Context) { - h.CheckRoleInGroup(ctx) + entity, exists := ctx.Get(constants.SESSION) + if exists != true { + ctx.AbortWithStatusJSON(200, gin.H{ + "message": constants.ERROR_ROLE_CHECK_FAILED, + "error": "Entity does not exist", + }) + return + } + var entityGroups *interfaces.Groups + entityBytes, err := json.Marshal(entity) + if err != nil { + ctx.AbortWithStatusJSON(200, gin.H{ + "message": constants.ERROR_ROLE_CHECK_FAILED, + "error": err, + }) + return + } + err = json.Unmarshal(entityBytes, &entityGroups) + if err != nil { + ctx.AbortWithStatusJSON(200, gin.H{ + "message": constants.ERROR_ROLE_CHECK_FAILED, + "error": err, + }) + return + } + if !util.CheckRoleExists(&entityGroups.Groups, h.Role) { + ctx.AbortWithStatusJSON(200, gin.H{ + "message": constants.ERROR_ROLE_CHECK_FAILED, + "error": "Role does not exist", + }) + return + } + ctx.Next() } diff --git a/handler/init.go b/handler/init.go index 13af656..3bf3904 100644 --- a/handler/init.go +++ b/handler/init.go @@ -18,6 +18,7 @@ const ( ) type Session struct { + Error error Student *model.StudentPopulated } @@ -47,7 +48,7 @@ func NewAuthClient(mongik *mongik.Mongik) *Handler { } } -func NewRoleCheckerClient(mongik *mongik.Mongik, role *string) *RoleCheckerHandler { +func NewRoleCheckerClient(role *string) *RoleCheckerHandler { return &RoleCheckerHandler{ Role: *role, } diff --git a/handler/verify.go b/handler/verify.go index 3c165cb..6e7c17f 100644 --- a/handler/verify.go +++ b/handler/verify.go @@ -1,10 +1,10 @@ package handler import ( + "errors" + "github.com/FrosTiK-SD/auth/constants" "github.com/FrosTiK-SD/auth/controller" - "github.com/FrosTiK-SD/auth/interfaces" - "github.com/FrosTiK-SD/auth/util" "github.com/gin-gonic/gin" ) @@ -19,6 +19,7 @@ func (h *Handler) HandlerVerifyStudentIdToken(ctx *gin.Context) { email, exp, err := controller.VerifyToken(h.MongikClient.CacheClient, idToken, h.JwkSet, noCache) if err != nil { + h.Session.Error = errors.New(*err) ctx.JSON(200, gin.H{ "student": nil, "expire": exp, @@ -29,6 +30,7 @@ func (h *Handler) HandlerVerifyStudentIdToken(ctx *gin.Context) { if h.Config.Mode == MIDDLEWARE { h.Session.Student = student } else { + h.Session.Error = errors.New(*err) ctx.JSON(200, gin.H{ "data": student, "error": err, @@ -36,7 +38,6 @@ func (h *Handler) HandlerVerifyStudentIdToken(ctx *gin.Context) { }) } } - } func (h *Handler) InvalidateCache(ctx *gin.Context) { @@ -45,37 +46,3 @@ func (h *Handler) InvalidateCache(ctx *gin.Context) { "message": "Successfully invalidated cache", }) } - -func (h *RoleCheckerHandler) CheckRoleInGroup(ctx *gin.Context) { - entity, exists := ctx.Get(constants.SESSION) - if exists != true { - ctx.AbortWithStatusJSON(200, gin.H{ - "message": constants.ERROR_ROLE_CHECK_FAILED, - "error": "Entity does not exist", - }) - return - } - var entityGroups *interfaces.Groups - entityBytes, err := json.Marshal(entity) - if err != nil { - ctx.AbortWithStatusJSON(200, gin.H{ - "message": constants.ERROR_ROLE_CHECK_FAILED, - "error": err, - }) - return - } - err = json.Unmarshal(entityBytes, &entityGroups) - if err != nil { - ctx.AbortWithStatusJSON(200, gin.H{ - "message": constants.ERROR_ROLE_CHECK_FAILED, - "error": err, - }) - return - } - if !util.CheckRoleExists(&entityGroups.Groups, h.Role) { - ctx.AbortWithStatusJSON(200, gin.H{ - "message": constants.ERROR_ROLE_CHECK_FAILED, - "error": "Role does not exist", - }) - } -}