From c2d5ab14c50ab9812d2a3532611c84d99381606a Mon Sep 17 00:00:00 2001 From: Sujit Date: Tue, 20 Oct 2020 09:48:44 +0545 Subject: [PATCH] Bump Fiber 1.4 to 2.1.0 --- README.md | 2 +- app/app.go | 6 +- auth/user.go | 11 ++-- config/app.go | 25 ++++---- config/auth.go | 17 +++--- config/headers.go | 10 ++-- config/mail.go | 2 +- config/role.go | 94 ++++++++++++++---------------- config/session.go | 6 +- controllers/api/auth_controller.go | 22 +++---- controllers/api/user_controller.go | 2 +- controllers/auth_controller.go | 22 +++---- controllers/file_controller.go | 29 ++++----- controllers/landing_controller.go | 10 ++-- controllers/payment_controller.go | 70 +++++++++------------- controllers/register_controller.go | 59 +++++++------------ controllers/user_controller.go | 6 +- go.mod | 44 +++++++------- go.sum | 69 +++++++++++++++++++--- libraries/temporary_routes.go | 12 ++-- main.go | 8 +-- middlewares/auth.go | 32 +++++----- middlewares/log.go | 17 +++--- middlewares/login.go | 22 +++---- middlewares/password_reset.go | 15 +++-- middlewares/register.go | 22 +++---- routes/api.go | 2 +- routes/web.go | 11 ++-- 28 files changed, 319 insertions(+), 328 deletions(-) diff --git a/README.md b/README.md index 1e5cb16..e678f09 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ The features include: Thanks to following libraries: -* [Fiber](https://github.com/gofiber/fiber) +* [Fiber](https://github.com/gofiber/fiber/v2) * [Xopen](https://github.com/brentp/xopen) * [Gorm](https://github.com/go-gorm/gorm) * [Zerolog](https://github.com/edersohe/zflogger) diff --git a/app/app.go b/app/app.go index 862f0a8..d112b67 100644 --- a/app/app.go +++ b/app/app.go @@ -5,11 +5,11 @@ import ( "github.com/casbin/casbin/v2" gormadapter "github.com/casbin/gorm-adapter/v2" "github.com/go-redis/redis" - "github.com/gofiber/fiber" - "github.com/gofiber/session" + "github.com/gofiber/fiber/v2" + "github.com/gofiber/session/v2" "github.com/gofiber/template/html" - "github.com/itsursujit/flash" "github.com/itsursujit/fiber-boilerplate/mail" + "github.com/itsursujit/flash" "github.com/jinzhu/gorm" "github.com/plutov/paypal/v3" "github.com/rs/zerolog" diff --git a/auth/user.go b/auth/user.go index ea46171..245115c 100644 --- a/auth/user.go +++ b/auth/user.go @@ -3,7 +3,7 @@ package auth import ( "errors" "fmt" - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/config" "github.com/itsursujit/fiber-boilerplate/models" @@ -55,7 +55,7 @@ func Login(c *fiber.Ctx, userID uint, secret string) (config.Token, error) { return token, err } -func Logout(c *fiber.Ctx) { +func Logout(c *fiber.Ctx) error { store := Session.Get(c) store.Delete("user_id") err := store.Save() @@ -63,11 +63,10 @@ func Logout(c *fiber.Ctx) { panic(err) } c.ClearCookie() - c.Send("You are now logged out.") - return + return c.SendString("You are now logged out.") } -func AuthCookie(c *fiber.Ctx) { +func AuthCookie(c *fiber.Ctx) error { IsLoggedIn(c) - c.Next() + return c.Next() } diff --git a/config/app.go b/config/app.go index 8a31460..fe5dc62 100644 --- a/config/app.go +++ b/config/app.go @@ -3,9 +3,10 @@ package config import ( "crypto/rand" "fmt" - "github.com/gofiber/fiber" - "github.com/gofiber/fiber/middleware" - "github.com/gofiber/pprof" + "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/middleware/compress" + "github.com/gofiber/fiber/v2/middleware/pprof" + "github.com/gofiber/fiber/v2/middleware/recover" "github.com/gofiber/template/html" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/flash" @@ -62,7 +63,7 @@ func GenerateAppKey(length int) { func BootApp() { LoadAppConfig() TemplateEngine = html.NewFileSystem(pkger.Dir("/resources/views"), ".html") - App = fiber.New(&fiber.Settings{ + App = fiber.New(fiber.Config{ ErrorHandler: CustomErrorHandler, ServerHeader: "fiber-boilerplate", Prefork: true, @@ -73,9 +74,11 @@ func BootApp() { App.Use(pprof.New()) App.Use(LoadHeaders) - App.Use(middleware.Favicon()) - App.Use(middleware.Recover()) - App.Use(middleware.Compress(middleware.CompressLevelBestSpeed)) + App.Use(recover.New()) + App.Use(compress.New(compress.Config{ + Next: nil, + Level: compress.LevelBestSpeed, + })) /*App.Use(csrf.New(csrf.Config{ CookieSecure: true, }))*/ @@ -97,7 +100,7 @@ func BootApp() { } } -func CustomErrorHandler(c *fiber.Ctx, err error) { +func CustomErrorHandler(c *fiber.Ctx, err error) error { // StatusCode defaults to 500 code := fiber.StatusInternalServerError //nolint:misspell // Retrieve the custom statuscode if it's an fiber.*Error @@ -105,11 +108,9 @@ func CustomErrorHandler(c *fiber.Ctx, err error) { code = e.Code } //nolint:gofmt,wsl if c.Is("json") { - c.SendStatus(code) - _ = c.JSON(err) + return c.Status(code).JSON(err) } else { - c.SendStatus(code) - _ = c.Render(fmt.Sprintf("errors/%d", code), fiber.Map{ //nolint:nolintlint,errcheck + return c.Status(code).Render(fmt.Sprintf("errors/%d", code), fiber.Map{ //nolint:nolintlint,errcheck "error": err, }) } diff --git a/config/auth.go b/config/auth.go index 2f7a784..3dfedc3 100644 --- a/config/auth.go +++ b/config/auth.go @@ -7,7 +7,7 @@ import ( gormadapter "github.com/casbin/gorm-adapter/v2" "github.com/dgrijalva/jwt-go" _ "github.com/go-sql-driver/mysql" - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" . "github.com/itsursujit/fiber-boilerplate/app" "time" ) @@ -54,15 +54,15 @@ func SetupPermission() { //nolint:whitespace Lookup: func(ctx *fiber.Ctx) string { return "sujit" }, - Unauthorized: func(c *fiber.Ctx) { + Unauthorized: func(c *fiber.Ctx) error { var err fiber.Error err.Code = fiber.StatusUnauthorized - CustomErrorHandler(c, &err) + return CustomErrorHandler(c, &err) }, - Forbidden: func(c *fiber.Ctx) { + Forbidden: func(c *fiber.Ctx) error { var err fiber.Error err.Code = fiber.StatusForbidden - CustomErrorHandler(c, &err) + return CustomErrorHandler(c, &err) }, } } @@ -127,12 +127,13 @@ func DeleteToken(c *fiber.Ctx) { } //RefreshToken refreshes the token -func RefreshToken(c *fiber.Ctx, secret string) { +func RefreshToken(c *fiber.Ctx, secret string) (Token, error) { + var t Token u, err := ParseToken(c, secret) if err != nil { - return + return t, err } - CreateToken(c, u, secret) + return CreateToken(c, u, secret) } diff --git a/config/headers.go b/config/headers.go index b4f8c96..4e9cc6b 100644 --- a/config/headers.go +++ b/config/headers.go @@ -1,21 +1,21 @@ package config -import "github.com/gofiber/fiber" +import "github.com/gofiber/fiber/v2" -func LoadHeaders(c *fiber.Ctx) { +func LoadHeaders(c *fiber.Ctx) error { // Set some security headers: c.Set("X-XSS-Protection", "1; mode=block") c.Set("X-Content-Type-Options", "nosniff") c.Set("X-Download-Options", "noopen") c.Set("Strict-Transport-Security", "max-age=5184000") c.Set("X-Frame-Options", "SAMEORIGIN") - c.Next() + return c.Next() } -func LoadCacheHeaders(c *fiber.Ctx) { +func LoadCacheHeaders(c *fiber.Ctx) error { c.Set("X-DNS-Prefetch-Control", "off") c.Set("Pragma", "no-cache") c.Set("Expires", "Fri, 01 Jan 1990 00:00:00 GMT") c.Set("Cache-Control", "no-cache, must-revalidate, no-store, max-age=0, private") - c.Next() + return c.Next() } diff --git a/config/mail.go b/config/mail.go index 984ca6d..6b0233a 100644 --- a/config/mail.go +++ b/config/mail.go @@ -1,7 +1,7 @@ package config import ( - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/mail" "github.com/valyala/bytebufferpool" diff --git a/config/role.go b/config/role.go index 0fe91ee..7f2c371 100644 --- a/config/role.go +++ b/config/role.go @@ -5,7 +5,7 @@ import ( "github.com/casbin/casbin/v2" gormadapter "github.com/casbin/gorm-adapter/v2" - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" ) // Config holds the configuration for the middleware @@ -25,11 +25,11 @@ type PermissionMiddleware struct { // Unauthorized defines the response body for unauthorized responses. // Optional. Default: func(c *fiber.Ctx) string { c.SendStatus(401) } - Unauthorized func(*fiber.Ctx) + Unauthorized func(*fiber.Ctx) error // Forbidden defines the response body for forbidden responses. // Optional. Default: func(c *fiber.Ctx) string { c.SendStatus(403) } - Forbidden func(*fiber.Ctx) + Forbidden func(*fiber.Ctx) error } type validationRule int @@ -77,7 +77,7 @@ type Options struct { // RequiresPermissions tries to find the current subject and determine if the // subject has the required permissions according to predefined Casbin policies. -func (cm *PermissionMiddleware) RequiresPermissions(permissions []string, opts ...func(o *Options)) func(*fiber.Ctx) { +func (cm *PermissionMiddleware) RequiresPermissions(permissions []string, opts ...func(o *Options)) func(*fiber.Ctx) error { options := &Options{ ValidationRule: matchAll, @@ -88,76 +88,73 @@ func (cm *PermissionMiddleware) RequiresPermissions(permissions []string, opts . o(options) } - return func(c *fiber.Ctx) { + return func(c *fiber.Ctx) error { if len(permissions) == 0 { - c.Next() - return + return c.Next() } sub := cm.Lookup(c) if len(sub) == 0 { - cm.Unauthorized(c) - return + return cm.Unauthorized(c) } if options.ValidationRule == matchAll { for _, permission := range permissions { vals := append([]string{sub}, options.PermissionParser(permission)...) if ok, err := cm.Enforcer.Enforce(convertToInterface(vals)...); err != nil { - c.SendStatus(fiber.StatusInternalServerError) - return + return c.SendStatus(fiber.StatusInternalServerError) } else if !ok { - cm.Forbidden(c) - return + return cm.Forbidden(c) + } } - c.Next() - return + return c.Next() + } else if options.ValidationRule == atLeastOne { for _, permission := range permissions { vals := append([]string{sub}, options.PermissionParser(permission)...) if ok, err := cm.Enforcer.Enforce(convertToInterface(vals)...); err != nil { - c.SendStatus(fiber.StatusInternalServerError) - return + return c.SendStatus(fiber.StatusInternalServerError) + } else if ok { - c.Next() - return + return c.Next() + } } - cm.Forbidden(c) - return + return cm.Forbidden(c) + } - c.Next() + return c.Next() } } // RoutePermission tries to find the current subject and determine if the // subject has the required permissions according to predefined Casbin policies. // This method uses http Path and Method as object and action. -func (cm *PermissionMiddleware) RoutePermission() func(*fiber.Ctx) { - return func(c *fiber.Ctx) { +func (cm *PermissionMiddleware) RoutePermission() func(*fiber.Ctx) error { + return func(c *fiber.Ctx) error { sub := cm.Lookup(c) if len(sub) == 0 { - cm.Unauthorized(c) - return + return cm.Unauthorized(c) + } if ok, err := cm.Enforcer.Enforce(sub, c.Path(), c.Method()); err != nil { - c.SendStatus(fiber.StatusInternalServerError) - return + return c.SendStatus(fiber.StatusInternalServerError) + } else if !ok { - cm.Forbidden(c) - return + return cm.Forbidden(c) + } - c.Next() - return + return c.Next() + } } // RequiresRoles tries to find the current subject and determine if the // subject has the required roles according to predefined Casbin policies. -func (cm *PermissionMiddleware) RequiresRoles(roles []string, opts ...func(o *Options)) func(*fiber.Ctx) { +func (cm *PermissionMiddleware) RequiresRoles(roles []string, opts ...func(o *Options)) func(*fiber.Ctx) error { options := &Options{ ValidationRule: matchAll, PermissionParser: permissionParserWithSeperator(":"), @@ -166,45 +163,44 @@ func (cm *PermissionMiddleware) RequiresRoles(roles []string, opts ...func(o *Op for _, o := range opts { o(options) } - return func(c *fiber.Ctx) { //nolint:wsl + return func(c *fiber.Ctx) error { //nolint:wsl if len(roles) == 0 { - c.Next() - return + return c.Next() } sub := cm.Lookup(c) if len(sub) == 0 { - cm.Unauthorized(c) - return + return cm.Unauthorized(c) + } userRoles, err := cm.Enforcer.GetRolesForUser(sub) if err != nil { - c.SendStatus(fiber.StatusInternalServerError) - return + return c.SendStatus(fiber.StatusInternalServerError) + } if options.ValidationRule == matchAll { for _, role := range roles { if !contains(userRoles, role) { - cm.Forbidden(c) - return + return cm.Forbidden(c) + } } - c.Next() //nolint:wsl - return + return c.Next() //nolint:wsl + } else if options.ValidationRule == atLeastOne { for _, role := range roles { if contains(userRoles, role) { - c.Next() - return + return c.Next() + } } - cm.Forbidden(c) - return + return cm.Forbidden(c) + } - c.Next() + return c.Next() } } diff --git a/config/session.go b/config/session.go index 053e4e7..2fbee9e 100644 --- a/config/session.go +++ b/config/session.go @@ -1,8 +1,8 @@ package config import ( - "github.com/gofiber/session" - "github.com/gofiber/session/provider/redis" + "github.com/gofiber/session/v2" + "github.com/gofiber/session/v2/provider/redis" . "github.com/itsursujit/fiber-boilerplate/app" "time" ) @@ -28,7 +28,7 @@ func loadDefaultSessionConfig() { func LoadSession() { LoadSessionConfig() - provider := redis.New(redis.Config{ + provider, _ := redis.New(redis.Config{ KeyPrefix: "fiber_boilerplate", Addr: SessionConfig.Session_DSN, PoolSize: 8, //nolint:gomnd diff --git a/controllers/api/auth_controller.go b/controllers/api/auth_controller.go index 6773450..2fa7a1e 100644 --- a/controllers/api/auth_controller.go +++ b/controllers/api/auth_controller.go @@ -1,52 +1,44 @@ package controllers import ( - "github.com/gofiber/fiber" //nolint:goimports + "github.com/gofiber/fiber/v2" //nolint:goimports "github.com/gookit/validate" "github.com/itsursujit/fiber-boilerplate/auth" "github.com/itsursujit/fiber-boilerplate/config" "github.com/itsursujit/fiber-boilerplate/models" ) -func OAuthToken(c *fiber.Ctx) { //nolint:wsl +func OAuthToken(c *fiber.Ctx) error { //nolint:wsl var login models.Login if err := c.BodyParser(&login); err != nil { - c.SendStatus(401) - c.JSON(fiber.Map{ + return c.Status(401).JSON(fiber.Map{ "error": true, "message": "Invalid Credentials", }) - return } v := validate.Struct(login) if !v.Validate() { - c.SendStatus(401) - c.JSON(fiber.Map{ + return c.Status(401).JSON(fiber.Map{ "error": true, "message": v.Errors.All(), }) - return } user, err := login.CheckLogin() //nolint:wsl if err != nil { - c.SendStatus(401) - c.JSON(fiber.Map{ + return c.Status(401).JSON(fiber.Map{ "error": true, "message": err.Error(), }) - return } token, err := auth.Login(c, user.ID, config.AuthConfig.Api_Jwt_Secret) //nolint:wsl if err != nil { - c.SendStatus(401) - c.JSON(fiber.Map{ + return c.Status(401).JSON(fiber.Map{ "error": true, "message": err.Error(), }) - return } - c.JSON(fiber.Map{ + return c.JSON(fiber.Map{ "token": token.Hash, "expires_in": token.Expire, }) diff --git a/controllers/api/user_controller.go b/controllers/api/user_controller.go index 9f177be..68daf27 100644 --- a/controllers/api/user_controller.go +++ b/controllers/api/user_controller.go @@ -1,6 +1,6 @@ package controllers -import "github.com/gofiber/fiber" +import "github.com/gofiber/fiber/v2" func Me(c *fiber.Ctx) { diff --git a/controllers/auth_controller.go b/controllers/auth_controller.go index e703796..07ce993 100644 --- a/controllers/auth_controller.go +++ b/controllers/auth_controller.go @@ -1,31 +1,27 @@ package controllers import ( - "github.com/gofiber/fiber" //nolint:goimports + "github.com/gofiber/fiber/v2" //nolint:goimports . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/auth" "github.com/itsursujit/fiber-boilerplate/config" "github.com/itsursujit/fiber-boilerplate/models" ) -func LoginGet(c *fiber.Ctx) { +func LoginGet(c *fiber.Ctx) error { Flash.Get(c) - if err := c.Render("auth/login", Flash.Data, "layouts/auth"); err != nil { //nolint:wsl - panic(err.Error()) - } + return c.Render("auth/login", Flash.Data, "layouts/auth") } -func LoginPost(c *fiber.Ctx) { //nolint:wsl +func LoginPost(c *fiber.Ctx) error { //nolint:wsl user := c.Locals("user").(*models.User) - auth.Login(c, user.ID, config.AuthConfig.App_Jwt_Secret) //nolint:wsl - c.Redirect("/") - return + _, _ = auth.Login(c, user.ID, config.AuthConfig.App_Jwt_Secret) //nolint:wsl + return c.Redirect("/") } -func LogoutPost(c *fiber.Ctx) { //nolint:nolintlint,wsl +func LogoutPost(c *fiber.Ctx) error { //nolint:nolintlint,wsl if auth.IsLoggedIn(c) { - auth.Logout(c) + _ = auth.Logout(c) } - c.Redirect("/login") - return + return c.Redirect("/login") } diff --git a/controllers/file_controller.go b/controllers/file_controller.go index 93c3b06..495e8ba 100644 --- a/controllers/file_controller.go +++ b/controllers/file_controller.go @@ -4,7 +4,7 @@ import ( "bufio" "bytes" "fmt" - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" "github.com/hashicorp/go-uuid" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/auth" @@ -21,7 +21,7 @@ import ( "time" ) -func FileIndex(c *fiber.Ctx) { +func FileIndex(c *fiber.Ctx) error { user, _ := auth.User(c) layout := "layouts/main" view := "file-manager" @@ -30,15 +30,13 @@ func FileIndex(c *fiber.Ctx) { view = "landing" } - if err := c.Render(view, fiber.Map{ + return c.Render(view, fiber.Map{ "auth": user != nil, "user": user, - }, layout); err != nil { - // panic(err.Error()) - } + }, layout) } -func ViewFile(c *fiber.Ctx) { +func ViewFile(c *fiber.Ctx) error { user, _ := auth.User(c) layout := "layouts/main" view := "file-view" @@ -46,16 +44,13 @@ func ViewFile(c *fiber.Ctx) { layout = "layouts/auth" view = "landing" } - - if err := c.Render(view, fiber.Map{ + return c.Render(view, fiber.Map{ "auth": user != nil, "user": user, - }, layout); err != nil { - // panic(err.Error()) - } + }, layout) } -func Upload(c *fiber.Ctx) { +func Upload(c *fiber.Ctx) error { start := time.Now() log.SetOutput(ioutil.Discard) // Parse the multipart form: @@ -71,7 +66,7 @@ func Upload(c *fiber.Ctx) { } } fmt.Printf("\n%2fs", time.Since(start).Seconds()) - + return c.JSON("Uploaded") } func LineCounter(r io.Reader) (int64, error) { @@ -104,7 +99,7 @@ func LineCounter(r io.Reader) (int64, error) { return count, nil } -func handleUploadIndividualFile(c *fiber.Ctx, file *multipart.FileHeader, user *models.User) { +func handleUploadIndividualFile(c *fiber.Ctx, file *multipart.FileHeader, user *models.User) error { var f models.File var uf models.UserFile fmt.Println(file.Filename, file.Size, file.Header["Content-Type"][0]) @@ -115,8 +110,7 @@ func handleUploadIndividualFile(c *fiber.Ctx, file *multipart.FileHeader, user * err := c.SaveFile(file, fileName) // Check for errors if err != nil { - c.Next(err) - return + return err // c.Status(500).Send("Something went wrong 😭") } fileInfo, _ := os.Stat(fileName) @@ -134,4 +128,5 @@ func handleUploadIndividualFile(c *fiber.Ctx, file *multipart.FileHeader, user * uf.UserID = user.ID uf.IsActive = true DB.Save(&uf) + return c.Next() } diff --git a/controllers/landing_controller.go b/controllers/landing_controller.go index 403f74b..d440349 100644 --- a/controllers/landing_controller.go +++ b/controllers/landing_controller.go @@ -1,11 +1,11 @@ package controllers import ( - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" "github.com/itsursujit/fiber-boilerplate/auth" ) -func Landing(c *fiber.Ctx) { +func Landing(c *fiber.Ctx) error { user, _ := auth.User(c) layout := "layouts/main" view := "index" @@ -14,10 +14,8 @@ func Landing(c *fiber.Ctx) { view = "landing" } - if err := c.Render(view, fiber.Map{ + return c.Render(view, fiber.Map{ "auth": user != nil, "user": user, - }, layout); err != nil { - panic(err.Error()) - } + }, layout) } diff --git a/controllers/payment_controller.go b/controllers/payment_controller.go index 4db1788..7dec015 100644 --- a/controllers/payment_controller.go +++ b/controllers/payment_controller.go @@ -1,7 +1,7 @@ package controllers import ( - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/auth" "github.com/itsursujit/fiber-boilerplate/libraries" @@ -9,41 +9,34 @@ import ( "strconv" ) -func PlaceOrderFromPaypal(c *fiber.Ctx) { +func PlaceOrderFromPaypal(c *fiber.Ctx) error { var order models.Payment - c.BodyParser(&order) + _ = c.BodyParser(&order) if amount, err := strconv.ParseFloat(order.Amount, 32); err != nil || order.Amount == "" || amount < 5 { - c.SendStatus(400) - c.JSON(fiber.Map{ + return c.Status(400).JSON(fiber.Map{ "validationError": true, }) - return } - c.JSON(fiber.Map{ - "validationError": false, - }) pm, err := models.GetPaymentMethodBySlug("paypal") if err != nil { Flash.WithError(c, fiber.Map{ "message": "Cannot make order at the moment", }) - c.Redirect("/") - return + return c.Redirect("/") + } user, _ := auth.User(c) if user.EmailVerified != true { - c.SendStatus(400) - c.JSON(fiber.Map{ + return c.Status(400).JSON(fiber.Map{ "validationError": true, "message": "Email is not verified, ", }) - return } order.PaymentMethodID = pm.ID order.Currency = pm.Currency order.UserID = user.ID order.Status = "PENDING" - order.Create() + _, _ = order.Create() err = libraries.CreateOrder(&order, user) DB.Save(&order) @@ -51,10 +44,9 @@ func PlaceOrderFromPaypal(c *fiber.Ctx) { Flash.WithError(c, fiber.Map{ "message": "Cannot make order at the moment", }) - c.Redirect("/") - return + return c.Redirect("/") } - c.JSON(fiber.Map{ + return c.JSON(fiber.Map{ "ack": true, "data": fiber.Map{ "id": order.PayPalOrderDetail.ID, @@ -66,74 +58,70 @@ func PostOrderResponseFromPaypal(c *fiber.Ctx) { } -func ValidateOrderFromPaypal(c *fiber.Ctx) { +func ValidateOrderFromPaypal(c *fiber.Ctx) error { amount := c.Params("amount") if _, err := strconv.ParseFloat(amount, 32); err != nil || amount == "" { - c.SendStatus(400) - c.JSON(fiber.Map{ + return c.Status(400).JSON(fiber.Map{ "validationError": true, }) - return } - c.JSON(fiber.Map{ + return c.JSON(fiber.Map{ "validationError": false, }) } -func GetOrderDetailFromPaypal(c *fiber.Ctx) { +func GetOrderDetailFromPaypal(c *fiber.Ctx) error { order, err := libraries.GetOrder(c.Params("id")) if err != nil { - c.SendStatus(500) - c.JSON(fiber.Map{ + return c.Status(500).JSON(fiber.Map{ "error": true, "message": err, }) - return } - c.JSON(order) + return c.JSON(order) } -func PostOrderCancelResponseFromPaypal(c *fiber.Ctx) { +func PostOrderCancelResponseFromPaypal(c *fiber.Ctx) error { order, err := libraries.GetOrder(c.Params("id")) if err != nil { - c.SendStatus(500) - c.JSON(fiber.Map{ + return c.Status(500).JSON(fiber.Map{ "error": true, "message": err, }) - return } p, err := models.GetPaymentByGatewayOrderID(order.ID) if err != nil { - c.SendStatus(500) - c.JSON(fiber.Map{ + return c.Status(500).JSON(fiber.Map{ "error": true, "message": err, }) - return } p.PayPalOrderDetail = order p.GatewayOrderID = order.ID p.UpdatePaymentStatusByGatewayOrderID("CANCELED") - c.JSON(order) + return c.JSON(order) } -func PostOrderSuccessResponseFromPaypal(c *fiber.Ctx) { +func PostOrderSuccessResponseFromPaypal(c *fiber.Ctx) error { order, err := libraries.GetOrder(c.Params("id")) if err != nil { - c.SendStatus(500) - c.JSON(fiber.Map{ + return c.Status(500).JSON(fiber.Map{ "error": true, "message": err, }) - return } p, err := models.GetPaymentByGatewayOrderID(order.ID) + if err != nil { + return c.Status(500).JSON(fiber.Map{ + "error": true, + "message": err, + }) + } p.PayPalOrderDetail = order p.GatewayOrderID = order.ID p.UpdatePaymentStatusByGatewayOrderID("APPROVED") user, _ := models.GetUserById(p.UserID) user.AddAmount(p.Amount) - c.JSON(p) + return c.JSON(p) } diff --git a/controllers/register_controller.go b/controllers/register_controller.go index 560c824..ac24898 100644 --- a/controllers/register_controller.go +++ b/controllers/register_controller.go @@ -2,7 +2,7 @@ package controllers import ( "fmt" - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/auth" "github.com/itsursujit/fiber-boilerplate/config" @@ -11,18 +11,15 @@ import ( "time" ) -func RegisterGet(c *fiber.Ctx) { - if err := c.Render("auth/register", fiber.Map{"Title": "Register"}, "layouts/auth"); err != nil { //nolint:wsl - panic(err.Error()) - } +func RegisterGet(c *fiber.Ctx) error { + return c.Render("auth/register", fiber.Map{"Title": "Register"}, "layouts/auth") } -func RegisterPost(c *fiber.Ctx) { +func RegisterPost(c *fiber.Ctx) error { register := c.Locals("register").(models.RegisterForm) user, err := register.Signup() if err != nil { - _ = c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": true, "message": "Error on register request", "data": err.Error()}) //nolint:errcheck - return + return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": true, "message": "Error on register request", "data": err.Error()}) //nolint:errcheck } store := Session.Get(c) // get/create new session store.Set("user_id", user.ID) // save to storage @@ -30,20 +27,17 @@ func RegisterPost(c *fiber.Ctx) { go SendConfirmationEmail(user.Email, c.BaseURL()) _ = c.JSON(user) - c.Redirect("/") - return + return c.Redirect("/") } -func VerifyRegisteredEmail(c *fiber.Ctx) { - c.Redirect("/") - return +func VerifyRegisteredEmail(c *fiber.Ctx) error { + return c.Redirect("/") } -func ResendConfirmEmail(c *fiber.Ctx) { +func ResendConfirmEmail(c *fiber.Ctx) error { user, _ := auth.User(c) go SendConfirmationEmail(user.Email, c.BaseURL()) - c.Redirect("/") - return + return c.Redirect("/") } func SendPasswordResetEmail(email string, baseURL string) { @@ -55,50 +49,41 @@ func SendPasswordResetEmail(email string, baseURL string) { config.Send(email, "You asked to reset? Please click here!", htmlBody, "", "") } -func RequestPasswordReset(c *fiber.Ctx) { - if err := c.Render("auth/request-password-reset", fiber.Map{"Title": "Reset Password"}, "layouts/auth"); err != nil { //nolint:wsl - panic(err.Error()) - } +func RequestPasswordReset(c *fiber.Ctx) error { + return c.Render("auth/request-password-reset", fiber.Map{"Title": "Reset Password"}, "layouts/auth") } -func RequestPasswordResetPost(c *fiber.Ctx) { +func RequestPasswordResetPost(c *fiber.Ctx) error { email := c.FormValue("email") _, err := models.GetUserByEmail(email) if err != nil { - c.Redirect("/request-password-reset") - return + return c.Redirect("/request-password-reset") } go SendPasswordResetEmail(email, c.BaseURL()) + return nil } -func PasswordReset(c *fiber.Ctx) { +func PasswordReset(c *fiber.Ctx) error { token := c.Query("t") - if err := c.Render("auth/password-reset", fiber.Map{ + return c.Render("auth/password-reset", fiber.Map{ "Title": "Password Reset", "Token": token, - }, "layouts/auth"); err != nil { //nolint:wsl - panic(err.Error()) - } + }, "layouts/auth") } -func PasswordResetPost(c *fiber.Ctx) { +func PasswordResetPost(c *fiber.Ctx) error { register := c.Locals("register").(models.RegisterForm) email := c.Locals("email").(string) user, err := models.GetUserByEmail(email) if err != nil { - c.SendStatus(401) - c.Send("Invalid Password Reset Token") - return + return c.Status(401).SendString("Invalid Password Reset Token") } register.ID = user.ID _, err = register.ResetPassword() if err != nil { - c.SendStatus(400) - c.Send("Oops!! Can't update password at the moment") - return + return c.Status(400).SendString("Oops!! Can't update password at the moment") } - c.Redirect("/login") - return + return c.Redirect("/login") } func SendConfirmationEmail(email string, baseURL string) { diff --git a/controllers/user_controller.go b/controllers/user_controller.go index 2e1fef0..d4bc17c 100644 --- a/controllers/user_controller.go +++ b/controllers/user_controller.go @@ -1,13 +1,13 @@ package controllers import ( - "github.com/gofiber/fiber" //nolint:goimports + "github.com/gofiber/fiber/v2" //nolint:goimports . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/models" ) -func Index(c *fiber.Ctx) { +func Index(c *fiber.Ctx) error { var users []models.User DB.Find(&users) //nolint:wsl - _ = c.JSON(users) //nolint:errcheck + return c.JSON(users) //nolint:errcheck } diff --git a/go.mod b/go.mod index 4a64ce9..b0c6b81 100644 --- a/go.mod +++ b/go.mod @@ -4,58 +4,60 @@ go 1.14 require ( github.com/alexedwards/argon2id v0.0.0-20200802152012-2464efd3196b + github.com/andybalholm/brotli v1.0.1 // indirect github.com/araddon/dateparse v0.0.0-20200409225146-d820a6159ab1 - github.com/casbin/casbin/v2 v2.11.2 + github.com/casbin/casbin/v2 v2.14.2 github.com/casbin/gorm-adapter/v2 v2.1.0 github.com/cosmtrek/air v1.12.1 // indirect github.com/creack/pty v1.1.11 // indirect github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/digitalocean/go-workers2 v0.9.2 - github.com/fasthttp/session/v2 v2.2.2 // indirect github.com/francoispqt/gojay v1.2.13 github.com/fsnotify/fsnotify v1.4.9 // indirect + github.com/go-check/check v0.0.0-20180628173108-788fd7840127 // indirect github.com/go-redis/redis v6.15.9+incompatible - github.com/go-redis/redis/v8 v8.0.0-beta.9 // indirect + github.com/go-redis/redis/v8 v8.3.2 // indirect github.com/go-sql-driver/mysql v1.5.0 github.com/gobuffalo/here v0.6.2 // indirect - github.com/gofiber/fiber v1.14.5 + github.com/gofiber/fiber v1.14.6 // indirect + github.com/gofiber/fiber/v2 v2.1.0 github.com/gofiber/pprof v0.1.1 - github.com/gofiber/session v1.2.5 - github.com/gofiber/template v1.5.5 + github.com/gofiber/session/v2 v2.0.2 + github.com/gofiber/template v1.6.4 github.com/google/btree v1.0.0 github.com/google/uuid v1.1.2 github.com/gookit/filter v1.1.1 // indirect - github.com/gookit/validate v1.2.2 + github.com/gookit/validate v1.2.4 github.com/gorilla/schema v1.2.0 // indirect github.com/gorilla/websocket v1.4.2 github.com/hashicorp/go-uuid v1.0.2 - github.com/imdario/mergo v0.3.10 // indirect - github.com/itsursujit/flash v0.0.0-20200725121419-28c0ec5f8f33 + github.com/itsursujit/flash v0.0.3 github.com/itsursujit/phonenumbers v1.0.57-0.20200723112245-859f2e508673 github.com/jinzhu/gorm v1.9.16 github.com/json-iterator/go v1.1.10 - github.com/klauspost/compress v1.10.11 // indirect + github.com/klauspost/compress v1.11.1 // indirect github.com/klauspost/pgzip v1.2.5 github.com/lib/pq v1.8.0 // indirect - github.com/magiconair/properties v1.8.2 // indirect - github.com/markbates/pkger v0.17.0 + github.com/magiconair/properties v1.8.4 // indirect + github.com/markbates/pkger v0.17.1 + github.com/mattn/go-colorable v0.1.8 // indirect github.com/mitchellh/mapstructure v1.3.3 // indirect - github.com/pelletier/go-toml v1.8.0 // indirect - github.com/plutov/paypal/v3 v3.0.24 - github.com/rs/zerolog v1.19.0 - github.com/spf13/afero v1.3.5 // indirect + github.com/pelletier/go-toml v1.8.1 // indirect + github.com/plutov/paypal/v3 v3.0.25 + github.com/rs/zerolog v1.20.0 + github.com/spf13/afero v1.4.1 // indirect github.com/spf13/cast v1.3.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/viper v1.7.1 github.com/streadway/amqp v1.0.0 github.com/valyala/bytebufferpool v1.0.0 github.com/valyala/fasthttp v1.16.0 // indirect - golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a + golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 golang.org/x/exp v0.0.0-20200901203048-c4f52b2c50aa // indirect - golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a // indirect + golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13 // indirect golang.org/x/text v0.3.3 // indirect - google.golang.org/grpc v1.31.1 // indirect - gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f - gopkg.in/ini.v1 v1.60.2 // indirect + google.golang.org/grpc v1.31.0 // indirect + gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b + gopkg.in/ini.v1 v1.62.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 ) diff --git a/go.sum b/go.sum index 9b9fad2..2b3aa43 100644 --- a/go.sum +++ b/go.sum @@ -23,6 +23,7 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= +github.com/CloudyKit/jet/v3 v3.0.1/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DataDog/sketches-go v0.0.0-20190923095040-43f19ad77ff7 h1:qELHH0AWCvf98Yf+CNIJx9vOZOfHFDDzgDRYsnNk/vs= github.com/DataDog/sketches-go v0.0.0-20190923095040-43f19ad77ff7/go.mod h1:Q5DbzQ+3AkgGwymQO7aZFNP7ns2lZKGtvRBzRXfdi60= github.com/Djarvur/go-err113 v0.0.0-20200511133814-5174e21577d5/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= @@ -45,6 +46,7 @@ github.com/alexedwards/argon2id v0.0.0-20200802152012-2464efd3196b h1:rcCpjI1OMG github.com/alexedwards/argon2id v0.0.0-20200802152012-2464efd3196b/go.mod h1:GFtu6vaWaRJV5EvSFaVqgq/3Iq95xyYElBV/aupGzUo= github.com/andybalholm/brotli v1.0.0 h1:7UCwP93aiSfvWpapti8g88vVVGp2qqtGyePsSuDafo4= github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/araddon/dateparse v0.0.0-20200409225146-d820a6159ab1 h1:TEBmxO80TM04L8IuMWk77SGL1HomBmKTdzdJLLWznxI= @@ -75,6 +77,8 @@ github.com/casbin/casbin/v2 v2.10.0 h1:hBGwn5dnOiA2agPwpedz0a3ke/OVnWksyoHm7dW/b github.com/casbin/casbin/v2 v2.10.0/go.mod h1:XXtYGrs/0zlOsJMeRteEdVi/FsB0ph7KgNfjoCoJUD8= github.com/casbin/casbin/v2 v2.11.2 h1:kdJ3ZMfPtz6uzKwAaW4G4NIld0U2KeHrgFcEhi40evc= github.com/casbin/casbin/v2 v2.11.2/go.mod h1:XXtYGrs/0zlOsJMeRteEdVi/FsB0ph7KgNfjoCoJUD8= +github.com/casbin/casbin/v2 v2.14.2 h1:j29dbpZsVBL7GsBdoSev4nME/24YOircZXRpfd3wAl0= +github.com/casbin/casbin/v2 v2.14.2/go.mod h1:XXtYGrs/0zlOsJMeRteEdVi/FsB0ph7KgNfjoCoJUD8= github.com/casbin/gorm-adapter/v2 v2.1.0 h1:wBimcRJ4V/Dq5o95OIBzeM6vvxNfjzCV235biWoSO4I= github.com/casbin/gorm-adapter/v2 v2.1.0/go.mod h1:Sy5LYivXiUVRvPZFasa6puLle0RaxNpV2TJ7yzlQkZc= github.com/cbroglie/mustache v1.2.0/go.mod h1:gomHsVlF4zTcsY2H8d7U9SipCYbbrAks5breARbqAM0= @@ -127,10 +131,12 @@ github.com/fasthttp/session/v2 v2.2.1 h1:c6fGgqnXiI8jZyYPko3r5PQeNVsHPcN7W7j/uei github.com/fasthttp/session/v2 v2.2.1/go.mod h1:Q6hI0arAJDQ7+TP1np5I+nwjlovg8vxlfCZ2EUm9TZ8= github.com/fasthttp/session/v2 v2.2.2 h1:pKFsV2XfHE3D8Ww0XHdRJEBCqC+8E+AD6GkiJRFpS9w= github.com/fasthttp/session/v2 v2.2.2/go.mod h1:UWdfqPC/IQqhqF6pTONIE60wQbPXVbAOovnrITMv3Rs= +github.com/fasthttp/session/v2 v2.2.4/go.mod h1:fm44lI2CHat4Hv8i09CcIaPVHOI/tfwD23IHslLDRWM= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/flosch/pongo2 v0.0.0-20200529170236-5abacdfa4915/go.mod h1:fB4mx6dzqFinCxIf3a7Mf5yLk+18Bia9mPAnuejcvDA= +github.com/flosch/pongo2 v0.0.0-20200913210552-0d938eb266f3/go.mod h1:bJWSKrZyQvfTnb2OudyUjurSG4/edverV7n82+K3JiM= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= @@ -162,6 +168,9 @@ github.com/go-redis/redis/v8 v8.0.0-beta.7/go.mod h1:FGJAWDWFht1sQ4qxyJHZZbVyvnV github.com/go-redis/redis/v8 v8.0.0-beta.8/go.mod h1:ZIhquluuA2M8NM+0sIq1kmlG0pqzgH+Ud6bI6nveXh8= github.com/go-redis/redis/v8 v8.0.0-beta.9 h1:gcRNXZvs4PFi/mptho1D3hXant8JsbQKQxQ+0W3QGPw= github.com/go-redis/redis/v8 v8.0.0-beta.9/go.mod h1:CCWlPAL3uftOyyBOGpJ+A0ps2WpG3+hqo14fVs5aQ6A= +github.com/go-redis/redis/v8 v8.3.0/go.mod h1:a2xkpBM7NJUN5V5kiF46X5Ltx4WeXJ9757X/ScKUBdE= +github.com/go-redis/redis/v8 v8.3.1/go.mod h1:a2xkpBM7NJUN5V5kiF46X5Ltx4WeXJ9757X/ScKUBdE= +github.com/go-redis/redis/v8 v8.3.2/go.mod h1:jszGxBCez8QA1HWSmQxJO9Y82kNibbUmeYhKWrBejTU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= @@ -187,23 +196,28 @@ github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PL github.com/gobuffalo/here v0.6.2 h1:ZtCqC7F9ou3moLbYfHM1Tj+gwHGgWhjyRjVjsir9BE0= github.com/gobuffalo/here v0.6.2/go.mod h1:D75Sq0p2BVHdgQu3vCRsXbg85rx943V19urJpqAVWjI= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gofiber/fiber v1.12.4/go.mod h1:e+Ur2pP2rb5xKtiHATgfQpSwBR0z9q8Mar9+XfYxpOY= -github.com/gofiber/fiber v1.13.3 h1:14kBTW1+n5mNIJZqibsbIdb+yQdC5argcbe9vE7Nz+o= github.com/gofiber/fiber v1.13.3/go.mod h1:KxRvVkqzfZOO6A7mBu+j7ncX2AcT6Sm6F7oeGR3Kgmw= -github.com/gofiber/fiber v1.14.1 h1:KZvXiWeBdjT7/wT2C+cH4eN1zVRgve2xVQlCwPTmkVE= -github.com/gofiber/fiber v1.14.1/go.mod h1:KxRvVkqzfZOO6A7mBu+j7ncX2AcT6Sm6F7oeGR3Kgmw= -github.com/gofiber/fiber v1.14.2 h1:JRm2REz1TVNt9ZXErTKhVV4y3u4QSmsQ2UU6LB6I6Ic= -github.com/gofiber/fiber v1.14.2/go.mod h1:KxRvVkqzfZOO6A7mBu+j7ncX2AcT6Sm6F7oeGR3Kgmw= -github.com/gofiber/fiber v1.14.5 h1:O+O6izufOW7bTmWxcSwaM4BB3Nn7gCNUdkiZLjP4qvM= -github.com/gofiber/fiber v1.14.5/go.mod h1:Yw2ekF1YDPreO9V6TMYjynu94xRxZBdaa8X5HhHsjCM= +github.com/gofiber/fiber v1.14.6/go.mod h1:Yw2ekF1YDPreO9V6TMYjynu94xRxZBdaa8X5HhHsjCM= +github.com/gofiber/fiber/v2 v1.12.4/go.mod h1:e+Ur2pP2rb5xKtiHATgfQpSwBR0z9q8Mar9+XfYxpOY= +github.com/gofiber/fiber/v2 v1.13.3 h1:14kBTW1+n5mNIJZqibsbIdb+yQdC5argcbe9vE7Nz+o= +github.com/gofiber/fiber/v2 v1.13.3/go.mod h1:KxRvVkqzfZOO6A7mBu+j7ncX2AcT6Sm6F7oeGR3Kgmw= +github.com/gofiber/fiber/v2 v1.14.1 h1:KZvXiWeBdjT7/wT2C+cH4eN1zVRgve2xVQlCwPTmkVE= +github.com/gofiber/fiber/v2 v1.14.1/go.mod h1:KxRvVkqzfZOO6A7mBu+j7ncX2AcT6Sm6F7oeGR3Kgmw= +github.com/gofiber/fiber/v2 v1.14.2 h1:JRm2REz1TVNt9ZXErTKhVV4y3u4QSmsQ2UU6LB6I6Ic= +github.com/gofiber/fiber/v2 v1.14.2/go.mod h1:KxRvVkqzfZOO6A7mBu+j7ncX2AcT6Sm6F7oeGR3Kgmw= +github.com/gofiber/fiber/v2 v1.14.5 h1:O+O6izufOW7bTmWxcSwaM4BB3Nn7gCNUdkiZLjP4qvM= +github.com/gofiber/fiber/v2 v1.14.5/go.mod h1:Yw2ekF1YDPreO9V6TMYjynu94xRxZBdaa8X5HhHsjCM= +github.com/gofiber/fiber/v2 v2.1.0/go.mod h1:aG+lMkwy3LyVit4CnmYUbUdgjpc3UYOltvlJZ78rgQ0= github.com/gofiber/pprof v0.1.1 h1:ayyDx+Iu1cuM2BNpfjEXQ32D/pATkuQMOm3jmI6qofw= github.com/gofiber/pprof v0.1.1/go.mod h1:RpCd4EDLeYEs2r7xI3K45dTMSFpvaxqGOxPDukPSi9A= github.com/gofiber/session v1.2.5 h1:8+WSMgUNEZmywVIG1CudDeSuvKH+UJt1EHx54GL+WpQ= github.com/gofiber/session v1.2.5/go.mod h1:qCqWPZK8cv558WlmrvtHoTReVPfEm79HtwpB2SxEV4I= +github.com/gofiber/session/v2 v2.0.2/go.mod h1:H+M+PENuiMTQJf9cTx+DJ7Jw8IqBAJ3QSbS6PbmvA78= github.com/gofiber/template v1.5.4 h1:fEiyUJSfoo8747iQc3mTvi549eUK7px5JW34nJ4KGJM= github.com/gofiber/template v1.5.4/go.mod h1:3CCUu/cQ1KC3NeY+dLmOR3y9EHeAgSCd0rDjmM6eQJg= github.com/gofiber/template v1.5.5 h1:6FWzGH4PB1qjV8MY4wOO5m45aq6I/Zqn4HmDsIWRi+I= github.com/gofiber/template v1.5.5/go.mod h1:3CCUu/cQ1KC3NeY+dLmOR3y9EHeAgSCd0rDjmM6eQJg= +github.com/gofiber/template v1.6.4/go.mod h1:IsW5D1qMTskGQjromCxs9PNYIdoRWqEYMj04Ff93k9Q= github.com/gofiber/utils v0.0.9 h1:Bu4grjEB4zof1TtpmPCG6MeX5nGv8SaQfzaUgjkf3H8= github.com/gofiber/utils v0.0.9/go.mod h1:9J5aHFUIjq0XfknT4+hdSMG6/jzfaAgCu4HEbWDeBlo= github.com/gofiber/utils v0.0.10 h1:3Mr7X7JdCUo7CWf/i5sajSaDmArEDtti8bM1JUVso2U= @@ -258,6 +272,7 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= @@ -281,6 +296,7 @@ github.com/gookit/color v1.2.4 h1:xOYBan3Fwlrqj1M1UN2TlHOCRiek3bGzWf/vPnJ1roE= github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= github.com/gookit/color v1.2.6/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= github.com/gookit/color v1.2.8/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= +github.com/gookit/color v1.2.9/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= github.com/gookit/filter v1.1.0 h1:K7RTF0miQpkwLThkcbuDDebtVNGeXoYgG7+dOsoZHkA= github.com/gookit/filter v1.1.0/go.mod h1:goEI07jAkSf3wAoa7IWi6Ex8qzLHx9R5/Phv3opvKh4= github.com/gookit/filter v1.1.1 h1:kR0Kkh6IzwiH3zzOffU6P0H3Xipxg4TU/85iV+5Vpbw= @@ -296,8 +312,10 @@ github.com/gookit/goutil v0.3.1 h1:VpWkYhJ4tHqhTwa1DV7JeVK0TNdw6pNh8HB06XxQx4c= github.com/gookit/goutil v0.3.1/go.mod h1:avL1wnSRDLyY4lC2FPAq5vNLwUB9JYaKWoUxx9lISNs= github.com/gookit/goutil v0.3.2 h1:PdZyBYjY/PDpO0UjYFa9GNjaYOlNK0NAXnrfGMOm+D4= github.com/gookit/goutil v0.3.2/go.mod h1:GDiBL9sTX3GnzNhXWLYNpmeKlHsHEb9XodyXniOnWgk= +github.com/gookit/goutil v0.3.5/go.mod h1:OHs5W5Xmfj4pCMXHnMxsDPrCc0SRbHLgJ2qs6wr5fxM= github.com/gookit/validate v1.2.2 h1:GB7cr46BMgkUzxBZBK/305ESocFwzVJaeTgCt1PhXjw= github.com/gookit/validate v1.2.2/go.mod h1:67NcxMm6YhAfmAeChmaevnI2b5dcZvu/+AIAdRYcu7k= +github.com/gookit/validate v1.2.4/go.mod h1:GZ4dNwWWXVu8UVR7mPy7k9Vh6QoVn/RDn3CfU/NUzmA= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY= @@ -348,6 +366,10 @@ github.com/itsursujit/flash v0.0.0-20200706060944-c4f9cbcfc292 h1:JgMDpfuKvXVeJT github.com/itsursujit/flash v0.0.0-20200706060944-c4f9cbcfc292/go.mod h1:23l5/GL0VuQAVnMosHkdn7eLCnSdQzgiXzVlFp/aFXA= github.com/itsursujit/flash v0.0.0-20200725121419-28c0ec5f8f33 h1:B/sSSqAE0OaXfGcw5felCS+Le0x5lsSn0ZIZo8zJnGc= github.com/itsursujit/flash v0.0.0-20200725121419-28c0ec5f8f33/go.mod h1:Mef6Ls2njMLaOcS0j7xBdvvP7/OKa2v8Cbw9bDE2drw= +github.com/itsursujit/flash v0.0.0-20201020032513-13e625c55707 h1:cX9iUpQ6uI9QrLCfaH97vhpU00aNkwJGplaCgbNayHM= +github.com/itsursujit/flash v0.0.0-20201020032513-13e625c55707/go.mod h1:dxWGI6tJ7tmnn4We6/SIX34mZvXhNOUzmeLVi+rWuL4= +github.com/itsursujit/flash v0.0.3 h1:KEm49ws/3L1GdPDo6cBX+0FD7oSyUS7XJAx6c/bSIEY= +github.com/itsursujit/flash v0.0.3/go.mod h1:dxWGI6tJ7tmnn4We6/SIX34mZvXhNOUzmeLVi+rWuL4= github.com/itsursujit/phonenumbers v1.0.57-0.20200723112245-859f2e508673 h1:Yr67H8a1JEdCbibeZGNMkPBecqrLSDfUcF/HRKWDYZc= github.com/itsursujit/phonenumbers v1.0.57-0.20200723112245-859f2e508673/go.mod h1:Z0zVt2IgYh7OA2Lcuhw4l3iH+N/6fekSL65CLm2DhmU= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= @@ -382,6 +404,7 @@ github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.10.11 h1:K9z59aO18Aywg2b/WSgBaUX99mHy2BES18Cr5lBKZHk= github.com/klauspost/compress v1.10.11/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.1/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/pgzip v1.2.4 h1:TQ7CNpYKovDOmqzRHKxJh0BeaBI7UdQZYc6p7pMQh1A= github.com/klauspost/pgzip v1.2.4/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= @@ -415,15 +438,19 @@ github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzR github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.2 h1:znVR8Q4g7/WlcvsxLBRWvo+vtFJUAbDn3w+Yak2xVMI= github.com/magiconair/properties v1.8.2/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= github.com/markbates/pkger v0.17.0 h1:RFfyBPufP2V6cddUyyEVSHBpaAnM1WzaMNyqomeT+iY= github.com/markbates/pkger v0.17.0/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= +github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= @@ -434,6 +461,7 @@ github.com/mattn/go-slim v0.0.0-20200618151855-bde33eecb5ee/go.mod h1:ma9TUJeni8 github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mattn/go-sqlite3 v1.14.1/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= +github.com/mattn/go-sqlite3 v1.14.4/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= github.com/mattn/go-sqlite3 v2.0.1+incompatible h1:xQ15muvnzGBHpIpdrNi1DA5x0+TcBZzsIDwmw9uTHzw= github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= @@ -467,18 +495,25 @@ github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nishanths/exhaustive v0.0.0-20200525081945-8e46705b6132/go.mod h1:wBEpHwM2OdmeNpdCvRPUlkEbBuaFmcK4Wv8Q7FuGW3c= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= @@ -489,6 +524,7 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys= github.com/pelletier/go-toml v1.8.0 h1:Keo9qb7iRJs2voHvunFtuuYFsbWeOBh8/P9v/kVMFtw= github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= +github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= @@ -502,6 +538,7 @@ github.com/plutov/paypal/v3 v3.0.23 h1:In/p3EFDr88Y67mSPP4PJtoaLeyjy2nxGZHl2uZSi github.com/plutov/paypal/v3 v3.0.23/go.mod h1:H42teFlAId2v0wGo0eIpx3ufQJKfDv+bJWk5O5v8lNI= github.com/plutov/paypal/v3 v3.0.24 h1:sZiWBH1xnGvNcThfxUghKFvksxYpr/YUiPzlMJgXbxg= github.com/plutov/paypal/v3 v3.0.24/go.mod h1:H42teFlAId2v0wGo0eIpx3ufQJKfDv+bJWk5O5v8lNI= +github.com/plutov/paypal/v3 v3.0.25/go.mod h1:H42teFlAId2v0wGo0eIpx3ufQJKfDv+bJWk5O5v8lNI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -527,6 +564,7 @@ github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.19.0 h1:hYz4ZVdUgjXTBUmrkrw55j1nHx68LfOKIQk5IYtyScg= github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= +github.com/rs/zerolog v1.20.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryancurrah/gomodguard v1.1.0/go.mod h1:4O8tr7hBODaGE6VIhfJDHcwzh5GUccKSJBU0UMXJFVM= @@ -534,10 +572,12 @@ github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0K github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/savsgio/dictpool v0.0.0-20200608150529-6a3c1a8f6ab2 h1:V+VG/pzeMdwBlS21mJmNkBnQQmZWyuBgYRoz0SVxaVk= github.com/savsgio/dictpool v0.0.0-20200608150529-6a3c1a8f6ab2/go.mod h1:LTEdLD+Y+KR4yx9eRMIgciXZo4Od0doGWP/hjgfOlE0= +github.com/savsgio/dictpool v0.0.0-20200914121634-61efc2e36e16/go.mod h1:tMqFqOOZyCLiNIUl3vtsJj2mFkKjfwKs61e3tdfLBjw= github.com/savsgio/gotils v0.0.0-20200608150037-a5f6f5aef16c h1:2nF5+FZ4/qp7pZVL7fR6DEaSTzuDmNaFTyqp92/hwF8= github.com/savsgio/gotils v0.0.0-20200608150037-a5f6f5aef16c/go.mod h1:TWNAOTaVzGOXq8RbEvHnhzA/A2sLZzgn0m6URjnukY8= github.com/savsgio/gotils v0.0.0-20200616100644-13ff1fd2c28c h1:KKqhycXW1WVNkX7r4ekTV2gFkbhdyihlWD8c0/FiWmk= github.com/savsgio/gotils v0.0.0-20200616100644-13ff1fd2c28c/go.mod h1:TWNAOTaVzGOXq8RbEvHnhzA/A2sLZzgn0m6URjnukY8= +github.com/savsgio/gotils v0.0.0-20200909101946-939aa3fc74fb/go.mod h1:TWNAOTaVzGOXq8RbEvHnhzA/A2sLZzgn0m6URjnukY8= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/securego/gosec/v2 v2.3.0/go.mod h1:UzeVyUXbxukhLeHKV3VVqo7HdoQR9MrRfFmZYotn8ME= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= @@ -587,6 +627,7 @@ github.com/spf13/afero v1.3.4 h1:8q6vk3hthlpb2SouZcnBVKboxWQWMDNF38bwholZrJc= github.com/spf13/afero v1.3.4/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.3.5 h1:AWZ/w4lcfxuh52NVL78p9Eh8j6r1mCTEGSRFBJyIHAE= github.com/spf13/afero v1.3.5/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.4.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= @@ -662,6 +703,7 @@ go.opentelemetry.io/otel v0.10.0 h1:2y/HYj1dIfG1nPh0Z15X4se8WwYWuTyKHLSgRb/mbQ0= go.opentelemetry.io/otel v0.10.0/go.mod h1:n3v1JGUBpn5DafiF1UeoDs5fr5XZMG+43kigDtFB8Vk= go.opentelemetry.io/otel v0.11.0 h1:IN2tzQa9Gc4ZVKnTaMbPVcHjvzOdg5n9QfnmlqiET7E= go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0= +go.opentelemetry.io/otel v0.13.0/go.mod h1:dlSNewoRYikTkotEnxdmuBHgzT+k/idJSfDv/FxEnOY= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -679,12 +721,14 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -741,8 +785,10 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -774,6 +820,7 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -784,6 +831,7 @@ golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= @@ -798,6 +846,9 @@ golang.org/x/sys v0.0.0-20200817155316-9781c653f443 h1:X18bCaipMcoJGm27Nv7zr4XYP golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a h1:i47hUS795cOydZI4AwJQCKXOr4BvxzvikwDoDtHhP2Y= golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= @@ -919,6 +970,7 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -933,6 +985,7 @@ gopkg.in/ini.v1 v1.60.0 h1:P5ZzC7RJO04094NJYlEnBdFK2wwmnCAy/+7sAzvWs60= gopkg.in/ini.v1 v1.60.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.60.2 h1:7i8mqModL63zqi8nQn8Q3+0zvSCZy1AxhBgthKfi4WU= gopkg.in/ini.v1 v1.60.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= diff --git a/libraries/temporary_routes.go b/libraries/temporary_routes.go index ab5b580..9e89ed0 100644 --- a/libraries/temporary_routes.go +++ b/libraries/temporary_routes.go @@ -2,7 +2,7 @@ package libraries import ( fmt "fmt" - "github.com/gofiber/fiber" //nolint:goimports + "github.com/gofiber/fiber/v2" //nolint:goimports "time" ) @@ -40,10 +40,12 @@ func (u *URL) TemporarySignedUrl(path string, config URLConfig) string { } func (u *URL) validateExistingRoute(path string) bool { - routes := u.App.Routes() - for _, r := range routes { - if r.Path == path { - return true + routes := u.App.Stack() + for _, paths := range routes { + for _, r := range paths { + if r.Path == path { + return true + } } } return false diff --git a/main.go b/main.go index e25d63e..50283f7 100644 --- a/main.go +++ b/main.go @@ -2,7 +2,7 @@ package main import ( "flag" - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/config" "github.com/itsursujit/fiber-boilerplate/libraries" @@ -26,13 +26,13 @@ func Serve() { Boot() App.Use(middlewares.LogMiddleware) routes.Load() - App.Use(func(c *fiber.Ctx) { + App.Use(func(c *fiber.Ctx) error { var err fiber.Error err.Code = fiber.StatusNotFound - config.CustomErrorHandler(c, &err) + return config.CustomErrorHandler(c, &err) }) // go libraries.Consume("webhook-callback") //nolint:wsl - err := App.Listen(config.AppConfig.App_Port) //nolint:wsl + err := App.Listen(":" + config.AppConfig.App_Port) //nolint:wsl if err != nil { panic("App not starting: " + err.Error() + "on Port: " + config.AppConfig.App_Port) } diff --git a/middlewares/auth.go b/middlewares/auth.go index 85b7827..a39834a 100644 --- a/middlewares/auth.go +++ b/middlewares/auth.go @@ -9,7 +9,7 @@ import ( "strings" "github.com/dgrijalva/jwt-go" - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" ) // Config defines the config for BasicAuth middleware @@ -20,12 +20,12 @@ type AuthConfig struct { // SuccessHandler defines a function which is executed for a valid token. // Optional. Default: nil - SuccessHandler func(*fiber.Ctx) + SuccessHandler func(*fiber.Ctx) error // ErrorHandler defines a function which is executed for an invalid token. // It may be used to define a custom JWT error. // Optional. Default: 401 Invalid or expired JWT - ErrorHandler func(*fiber.Ctx, error) + ErrorHandler func(*fiber.Ctx, error) error // Signing key to validate token. Used as fallback if SigningKeys has length 0. // Required. This or SigningKeys. @@ -66,28 +66,28 @@ type AuthConfig struct { } // New ... -func Authenticate(config ...AuthConfig) func(*fiber.Ctx) { +func Authenticate(config ...AuthConfig) func(*fiber.Ctx) error { // Init config var cfg AuthConfig if len(config) > 0 { cfg = config[0] } if cfg.SuccessHandler == nil { - cfg.SuccessHandler = func(c *fiber.Ctx) { - c.Next() + cfg.SuccessHandler = func(c *fiber.Ctx) error { + return c.Next() } } if cfg.ErrorHandler == nil { - cfg.ErrorHandler = func(c *fiber.Ctx, err error) { + cfg.ErrorHandler = func(c *fiber.Ctx, err error) error { var er fiber.Error if err.Error() == "Missing or malformed JWT" { er.Code = fiber.StatusBadRequest } else { er.Code = fiber.StatusUnauthorized - c.SendString("Invalid or expired JWT") + return c.SendString("Invalid or expired JWT") } er.Message = err.Error() - config2.CustomErrorHandler(c, &er) + return config2.CustomErrorHandler(c, &er) /*if err.Error() == "Missing or malformed JWT" { c.Status(fiber.StatusBadRequest) c.SendString("Missing or malformed JWT") @@ -142,16 +142,14 @@ func Authenticate(config ...AuthConfig) func(*fiber.Ctx) { extractor = jwtFromCookie(parts[1]) } // Return middleware handler - return func(c *fiber.Ctx) { + return func(c *fiber.Ctx) error { // Filter request to skip middleware if cfg.Filter != nil && cfg.Filter(c) { - c.Next() - return + return c.Next() } auth, err := extractor(c) if err != nil { - cfg.ErrorHandler(c, err) - return + return cfg.ErrorHandler(c, err) } token := new(jwt.Token) if _, ok := cfg.Claims.(jwt.MapClaims); ok { @@ -164,11 +162,9 @@ func Authenticate(config ...AuthConfig) func(*fiber.Ctx) { if err == nil && token.Valid { // Store user information from token into context. c.Locals(cfg.ContextKey, token) - cfg.SuccessHandler(c) - return + return cfg.SuccessHandler(c) } - cfg.ErrorHandler(c, err) - return + return cfg.ErrorHandler(c, err) } } diff --git a/middlewares/log.go b/middlewares/log.go index 61c7991..feeb779 100644 --- a/middlewares/log.go +++ b/middlewares/log.go @@ -2,7 +2,7 @@ package middlewares import ( "fmt" - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" "github.com/google/uuid" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/libraries" @@ -12,7 +12,7 @@ import ( ) //Middleware requestid + logger + recover for request traceability -func LogMiddleware(c *fiber.Ctx) { +func LogMiddleware(c *fiber.Ctx) error { start := time.Now() rid := c.Get(fiber.HeaderXRequestID) if rid == "" { @@ -29,7 +29,7 @@ func LogMiddleware(c *fiber.Ctx) { Protocol: c.Protocol(), } - defer func() { + defer func() error { rvr := recover() if rvr != nil { @@ -40,14 +40,10 @@ func LogMiddleware(c *fiber.Ctx) { fields.Error = err fields.Stack = debug.Stack() - - c.Status(http.StatusInternalServerError) - c.JSON(map[string]interface{}{ - "status": http.StatusText(http.StatusInternalServerError), - }) + fields.StatusCode = http.StatusInternalServerError } - fields.StatusCode = c.Fasthttp.Response.StatusCode() + fields.StatusCode = c.Response().StatusCode() fields.Latency = time.Since(start).Seconds() switch { @@ -66,6 +62,7 @@ func LogMiddleware(c *fiber.Ctx) { default: Log.Warn().EmbedObject(fields).Msg("unknown status") } + return nil }() - c.Next() + return c.Next() } diff --git a/middlewares/login.go b/middlewares/login.go index eab4fee..cb89630 100644 --- a/middlewares/login.go +++ b/middlewares/login.go @@ -1,44 +1,40 @@ package middlewares import ( - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" "github.com/gookit/validate" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/auth" "github.com/itsursujit/fiber-boilerplate/models" ) -func RedirectToHomePageOnLogin(c *fiber.Ctx) { +func RedirectToHomePageOnLogin(c *fiber.Ctx) error { if auth.IsLoggedIn(c) { - c.Redirect("/") - return + return c.Redirect("/") } - c.Next() + return c.Next() } -func ValidateLoginPost(c *fiber.Ctx) { +func ValidateLoginPost(c *fiber.Ctx) error { var login models.Login if err := c.BodyParser(&login); err != nil { - Flash.WithError(c, fiber.Map{ + return Flash.WithError(c, fiber.Map{ "message": err.Error(), }).Redirect("/login") - return } v := validate.Struct(login) if !v.Validate() { - Flash.WithError(c, fiber.Map{ + return Flash.WithError(c, fiber.Map{ "message": v.Errors.One(), }).Redirect("/login") - return } user, err := login.CheckLogin() //nolint:wsl if err != nil { - Flash.WithError(c, fiber.Map{ + return Flash.WithError(c, fiber.Map{ "message": err.Error(), }).Redirect("/login") - return } c.Locals("user", user) - c.Next() + return c.Next() } diff --git a/middlewares/password_reset.go b/middlewares/password_reset.go index d4516b6..0e3c5c8 100644 --- a/middlewares/password_reset.go +++ b/middlewares/password_reset.go @@ -2,7 +2,7 @@ package middlewares import ( "errors" - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/config" "github.com/itsursujit/fiber-boilerplate/libraries" @@ -11,27 +11,26 @@ import ( "time" ) -func ValidatePasswordReset(c *fiber.Ctx) { +func ValidatePasswordReset(c *fiber.Ctx) error { token := c.Query("t") err := _validatePasswordReset(c, token) if err != nil { - Flash.WithError(c, fiber.Map{ + return Flash.WithError(c, fiber.Map{ "message": err.Error(), }).Redirect("/login") - return } - c.Next() + return c.Next() } -func ValidatePasswordResetPost(c *fiber.Ctx) { +func ValidatePasswordResetPost(c *fiber.Ctx) error { token := c.Params("token") err := _validatePasswordReset(c, token) if err != nil { - Flash.WithError(c, fiber.Map{ + return Flash.WithError(c, fiber.Map{ "message": err.Error(), }).Redirect("/login") } - c.Next() + return c.Next() } func _validatePasswordReset(c *fiber.Ctx, t string) error { diff --git a/middlewares/register.go b/middlewares/register.go index 2cb6ead..1373999 100644 --- a/middlewares/register.go +++ b/middlewares/register.go @@ -2,7 +2,7 @@ package middlewares import ( "fmt" - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" "github.com/gookit/validate" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/auth" @@ -11,47 +11,43 @@ import ( "github.com/itsursujit/fiber-boilerplate/models" ) -func ValidateRegisterPost(c *fiber.Ctx) { +func ValidateRegisterPost(c *fiber.Ctx) error { var register models.RegisterForm if err := c.BodyParser(®ister); err != nil { fmt.Println(err) - Flash.WithError(c, fiber.Map{ + return Flash.WithError(c, fiber.Map{ "message": err.Error(), }).Redirect("/register") - return } v := validate.Struct(register) if !v.Validate() { fmt.Println(v.Errors) - Flash.WithError(c, fiber.Map{ + return Flash.WithError(c, fiber.Map{ "message": v.Errors.One(), }).Redirect("/register") - return } c.Locals("register", register) - c.Next() + return c.Next() } -func ValidateConfirmToken(c *fiber.Ctx) { +func ValidateConfirmToken(c *fiber.Ctx) error { t := libraries.Decrypt(c.Query("t"), config.AppConfig.App_Key) user, err := models.GetUserByEmail(t) if err != nil { - Flash.WithError(c, fiber.Map{ + return Flash.WithError(c, fiber.Map{ "message": err.Error(), }).Redirect("/login") - return } if user.EmailVerified { - Flash.WithError(c, fiber.Map{ + return Flash.WithError(c, fiber.Map{ "message": "Email was already validated", }).Redirect("/login") - return } user.EmailVerified = true DB.Save(&user) auth.Login(c, user.ID, config.AuthConfig.App_Jwt_Secret) //nolint:wsl c.Locals("user", user) - c.Next() + return c.Next() } diff --git a/routes/api.go b/routes/api.go index 67ea729..53b3ef4 100644 --- a/routes/api.go +++ b/routes/api.go @@ -1,7 +1,7 @@ package routes import ( - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/config" "github.com/itsursujit/fiber-boilerplate/controllers" diff --git a/routes/web.go b/routes/web.go index 8743cdb..be2cee0 100644 --- a/routes/web.go +++ b/routes/web.go @@ -1,7 +1,7 @@ package routes import ( - "github.com/gofiber/fiber" + "github.com/gofiber/fiber/v2" . "github.com/itsursujit/fiber-boilerplate/app" "github.com/itsursujit/fiber-boilerplate/auth" "github.com/itsursujit/fiber-boilerplate/config" @@ -20,9 +20,9 @@ func LandingRoutes(app fiber.Router) { app.Use(middlewares.Authenticate(middlewares.AuthConfig{ SigningKey: []byte(config.AuthConfig.App_Jwt_Secret), TokenLookup: "cookie:fiber-boilerplate-Token", - ErrorHandler: func(ctx *fiber.Ctx, err error) { + ErrorHandler: func(ctx *fiber.Ctx, err error) error { auth.Logout(ctx) - ctx.Next() + return ctx.Next() }, })) app.Get("/", controllers.Landing) @@ -33,10 +33,9 @@ func UserRoutes(app fiber.Router) { account.Use(middlewares.Authenticate(middlewares.AuthConfig{ SigningKey: []byte(config.AuthConfig.App_Jwt_Secret), TokenLookup: "cookie:fiber-boilerplate-Token", - ErrorHandler: func(ctx *fiber.Ctx, err error) { + ErrorHandler: func(ctx *fiber.Ctx, err error) error { auth.Logout(ctx) - ctx.Redirect("/login") - return + return ctx.Redirect("/login") }, })) // account.Get("/users", controllers.Index)