Skip to content

Commit

Permalink
emptied and removed "utils" folder | fixed jwt auth by removing jwtwa…
Browse files Browse the repository at this point in the history
…re middleware for go-jwt
  • Loading branch information
the-real-i9 committed Aug 28, 2024
1 parent 7ab0f18 commit 8b2ea30
Show file tree
Hide file tree
Showing 28 changed files with 146 additions and 158 deletions.
File renamed without changes.
39 changes: 35 additions & 4 deletions controllers/authControllers/authControllers.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package authControllers

import (
"fmt"
"i9chat/appTypes"
"i9chat/helpers"
"i9chat/services/authServices"
"i9chat/utils/appTypes"
"i9chat/utils/helpers"
"log"
"os"

"github.com/gofiber/contrib/websocket"
"github.com/gofiber/fiber/v2"
Expand Down Expand Up @@ -53,7 +54,22 @@ var RequestNewAccount = websocket.New(func(c *websocket.Conn) {
})

var VerifyEmail = websocket.New(func(c *websocket.Conn) {
sessionData := c.Locals("signupSessionData").(appTypes.SignupSessionData)
sessionToken := c.Headers("Authorization")

sessionData, err := helpers.JwtVerify[appTypes.SignupSessionData](sessionToken, os.Getenv("SIGNUP_SESSION_JWT_SECRET"))
if err != nil {
if w_err := c.WriteJSON(helpers.ErrResp(fiber.StatusUnauthorized, err)); w_err != nil {
log.Println(w_err)
}
return
}

if sessionData.State != "verify email" {
if w_err := c.WriteJSON(helpers.ErrResp(fiber.StatusUnauthorized, fiber.ErrUnauthorized)); w_err != nil {
log.Println(w_err)
}
return
}

var w_err error

Expand Down Expand Up @@ -94,7 +110,22 @@ var VerifyEmail = websocket.New(func(c *websocket.Conn) {
})

var RegisterUser = websocket.New(func(c *websocket.Conn) {
sessionData := c.Locals("signupSessionData").(appTypes.SignupSessionData)
sessionToken := c.Headers("Authorization")

sessionData, err := helpers.JwtVerify[appTypes.SignupSessionData](sessionToken, os.Getenv("SIGNUP_SESSION_JWT_SECRET"))
if err != nil {
if w_err := c.WriteJSON(helpers.ErrResp(fiber.StatusUnauthorized, err)); w_err != nil {
log.Println(w_err)
}
return
}

if sessionData.State != "register user" {
if w_err := c.WriteJSON(helpers.ErrResp(fiber.StatusUnauthorized, fiber.ErrUnauthorized)); w_err != nil {
log.Println(w_err)
}
return
}

var w_err error

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ package dmChatControllers

import (
"fmt"
"i9chat/appTypes"
"i9chat/helpers"
dmChat "i9chat/models/chatModel/dmChatModel"
user "i9chat/models/userModel"
"i9chat/services/appObservers"
"i9chat/services/appServices"
"i9chat/services/chatService/dmChatService"
"i9chat/utils/appTypes"
"i9chat/utils/helpers"
"log"

"github.com/gofiber/contrib/websocket"
Expand Down Expand Up @@ -55,7 +55,7 @@ var GetChatHistory = helpers.WSHandlerProtected(func(c *websocket.Conn) {
// this handler receives message acknowlegement for messages sent in an active chat,
// and in turn changes the delivery status of messages sent by the child goroutine
var OpenMessagingStream = helpers.WSHandlerProtected(func(c *websocket.Conn) {
clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

var dmChatId int

Expand Down
4 changes: 2 additions & 2 deletions controllers/chatControllers/dmChatControllers/bodyTypes.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package dmChatControllers

import (
"i9chat/utils/appTypes"
"i9chat/utils/helpers"
"i9chat/appTypes"
"i9chat/helpers"
"time"

validation "github.com/go-ozzo/ozzo-validation/v4"
Expand Down
4 changes: 2 additions & 2 deletions controllers/chatControllers/groupChatControllers/bodyTypes.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package groupChatControllers

import (
"i9chat/utils/appTypes"
"i9chat/utils/helpers"
"i9chat/appTypes"
"i9chat/helpers"
"time"

validation "github.com/go-ozzo/ozzo-validation/v4"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ package groupChatControllers

import (
"fmt"
"i9chat/appTypes"
"i9chat/helpers"
groupChat "i9chat/models/chatModel/groupChatModel"
user "i9chat/models/userModel"
"i9chat/services/appObservers"
"i9chat/services/appServices"
"i9chat/services/chatService/groupChatService"
"i9chat/utils/appTypes"
"i9chat/utils/helpers"
"log"

"github.com/gofiber/contrib/websocket"
Expand Down Expand Up @@ -55,7 +55,7 @@ var GetChatHistory = helpers.WSHandlerProtected(func(c *websocket.Conn) {
// this goroutine receives message acknowlegement for sent messages,
// and in turn changes the delivery status of messages sent by the child goroutine
var OpenMessagingStream = helpers.WSHandlerProtected(func(c *websocket.Conn) {
clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

var groupChatId int

Expand Down Expand Up @@ -144,7 +144,7 @@ func sendMessages(c *websocket.Conn, clientUser *appTypes.ClientUser, groupChatI
}

var ExecuteAction = helpers.WSHandlerProtected(func(c *websocket.Conn) {
clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

type handler func(clientUser []string, data map[string]any) error

Expand Down
4 changes: 2 additions & 2 deletions controllers/userControllers/bodyTypes.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package userControllers

import (
"i9chat/utils/appTypes"
"i9chat/utils/helpers"
"i9chat/appTypes"
"i9chat/helpers"
"regexp"
"time"

Expand Down
22 changes: 11 additions & 11 deletions controllers/userControllers/userControllers.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@ package userControllers

import (
"fmt"
"i9chat/appTypes"
"i9chat/helpers"
user "i9chat/models/userModel"
"i9chat/services/appObservers"
"i9chat/services/appServices"
"i9chat/services/chatService/dmChatService"
"i9chat/services/chatService/groupChatService"
"i9chat/services/userService"
"i9chat/utils/appTypes"
"i9chat/utils/helpers"
"log"

"github.com/gofiber/contrib/websocket"
"github.com/gofiber/fiber/v2"
)

var ChangeProfilePicture = helpers.WSHandlerProtected(func(c *websocket.Conn) {
clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

var w_err error

Expand Down Expand Up @@ -61,7 +61,7 @@ var ChangeProfilePicture = helpers.WSHandlerProtected(func(c *websocket.Conn) {
//
// 2. Lets the client: "initiate a new dm chat" and "acknowledge received dm messages"
var OpenDMChatStream = helpers.WSHandlerProtected(func(c *websocket.Conn) {
clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

// a channel for streaming data to client
var myMailbox = make(chan map[string]any, 5)
Expand Down Expand Up @@ -213,7 +213,7 @@ func createNewDMChatAndAckMessages(c *websocket.Conn, clientUser *appTypes.Clien
//
// 2. Lets the client: "initiate a new group chat" and "acknowledge received group messages"
var OpenGroupChatStream = helpers.WSHandlerProtected(func(c *websocket.Conn) {
clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

// a channel for streaming data to client
var myMailbox = make(chan map[string]any, 5)
Expand Down Expand Up @@ -343,7 +343,7 @@ func createNewGroupChatAndAckMessages(c *websocket.Conn, clientUser *appTypes.Cl
// After closing this, we must immediately access "Open[DM|Group]ChatStream"
var GetMyChats = helpers.WSHandlerProtected(func(c *websocket.Conn) {

clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

myChats, app_err := user.GetChats(clientUser.Id)

Expand Down Expand Up @@ -374,7 +374,7 @@ var GetMyChats = helpers.WSHandlerProtected(func(c *websocket.Conn) {
})

var GetAllUsers = helpers.WSHandlerProtected(func(c *websocket.Conn) {
clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

allUsers, app_err := user.GetAll(clientUser.Id)

Expand Down Expand Up @@ -405,7 +405,7 @@ var GetAllUsers = helpers.WSHandlerProtected(func(c *websocket.Conn) {
})

var SearchUser = helpers.WSHandlerProtected(func(c *websocket.Conn) {
clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

var w_err error

Expand Down Expand Up @@ -440,7 +440,7 @@ var SearchUser = helpers.WSHandlerProtected(func(c *websocket.Conn) {
})

var FindNearbyUsers = helpers.WSHandlerProtected(func(c *websocket.Conn) {
clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

var w_err error

Expand Down Expand Up @@ -478,7 +478,7 @@ var FindNearbyUsers = helpers.WSHandlerProtected(func(c *websocket.Conn) {
})

var SwitchMyPresence = helpers.WSHandlerProtected(func(c *websocket.Conn) {
clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

var w_err error

Expand Down Expand Up @@ -519,7 +519,7 @@ var SwitchMyPresence = helpers.WSHandlerProtected(func(c *websocket.Conn) {
})

var UpdateMyGeolocation = helpers.WSHandlerProtected(func(c *websocket.Conn) {
clientUser := c.Locals("auth").(*appTypes.ClientUser)
clientUser := c.Locals("user").(*appTypes.ClientUser)

var body updateMyGeolocationBody

Expand Down
4 changes: 0 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@ go 1.22.0
require (
cloud.google.com/go/storage v1.39.1
github.com/go-ozzo/ozzo-validation/v4 v4.3.0
github.com/gofiber/contrib/jwt v1.0.10
github.com/gofiber/contrib/websocket v1.3.0
github.com/gofiber/fiber/v2 v2.52.5
github.com/gofiber/storage/postgres v1.3.4
github.com/golang-jwt/jwt/v5 v5.2.1
github.com/jackc/pgx/v5 v5.5.4
github.com/joho/godotenv v1.5.1
Expand All @@ -22,7 +20,6 @@ require (
cloud.google.com/go/compute v1.24.0 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
cloud.google.com/go/iam v1.1.6 // indirect
github.com/MicahParks/keyfunc/v2 v2.1.0 // indirect
github.com/andybalholm/brotli v1.1.0 // indirect
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 // indirect
github.com/fasthttp/websocket v1.5.7 // indirect
Expand All @@ -39,7 +36,6 @@ require (
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
github.com/jackc/puddle/v2 v2.2.1 // indirect
github.com/klauspost/compress v1.17.7 // indirect
github.com/lib/pq v1.10.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
Expand Down
10 changes: 0 additions & 10 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWO
cloud.google.com/go/storage v1.39.1 h1:MvraqHKhogCOTXTlct/9C3K3+Uy2jBmFYb3/Sp6dVtY=
cloud.google.com/go/storage v1.39.1/go.mod h1:xK6xZmxZmo+fyP7+DEF6FhNc24/JAe95OLyOHCXFH1o=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/MicahParks/keyfunc/v2 v2.1.0 h1:6ZXKb9Rp6qp1bDbJefnG7cTH8yMN1IC/4nf+GVjO99k=
github.com/MicahParks/keyfunc/v2 v2.1.0/go.mod h1:rW42fi+xgLJ2FRRXAfNx9ZA8WpD4OeE/yHVMteCkw9k=
github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0=
Expand Down Expand Up @@ -41,16 +39,10 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es=
github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew=
github.com/gofiber/contrib/jwt v1.0.10 h1:/ilGepl6i0Bntl0Zcd+lAzagY8BiS1+fEiAj32HMApk=
github.com/gofiber/contrib/jwt v1.0.10/go.mod h1:1qBENE6sZ6PPT4xIpBzx1VxeyROQO7sj48OlM1I9qdU=
github.com/gofiber/contrib/websocket v1.3.0 h1:XADFAGorer1VJ1bqC4UkCjqS37kwRTV0415+050NrMk=
github.com/gofiber/contrib/websocket v1.3.0/go.mod h1:xguaOzn2ZZ759LavtosEP+rcxIgBEE/rdumPINhR+Xo=
github.com/gofiber/fiber/v2 v2.52.5 h1:tWoP1MJQjGEe4GB5TUGOi7P2E0ZMMRx5ZTG4rT+yGMo=
github.com/gofiber/fiber/v2 v2.52.5/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
github.com/gofiber/storage/postgres v1.3.4 h1:A0UEqP23XEzf5Rapfq1lgIuKQ/MNEZxUewwvLrGV9Ko=
github.com/gofiber/storage/postgres v1.3.4/go.mod h1:kZK6VIPXSMp2/C/Cm2DPeeFEgYFZj7zEQu9Ri9tqKWY=
github.com/gofiber/utils v1.0.1 h1:knct4cXwBipWQqFrOy1Pv6UcgPM+EXo9jDgc66V1Qio=
github.com/gofiber/utils v1.0.1/go.mod h1:pacRFtghAE3UoknMOUiXh2Io/nLWSUHtQCi/3QASsOc=
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
Expand Down Expand Up @@ -103,8 +95,6 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
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.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
Expand Down
69 changes: 69 additions & 0 deletions helpers/authHelpers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package helpers

import (
"fmt"
"i9chat/appTypes"
"log"
"os"
"time"

"github.com/gofiber/contrib/websocket"
"github.com/gofiber/fiber/v2"
"github.com/golang-jwt/jwt/v5"
)

func JwtSign(data any, secret string, expires time.Time) string {
// create token -> (header.payload)
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"data": data,
"exp": expires.Unix(),
})

// sign token with secret -> (header.payload.signature)
jwt, err := token.SignedString([]byte(secret))
if err != nil {
panic(err)
}

return jwt
}

func JwtVerify[T any](tokenString, secret string) (*T, error) {
parser := jwt.NewParser()
token, err := parser.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {

if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("unexpected signing method: %v", t.Header["alg"])
}

return []byte(secret), nil
})

if err != nil {
return nil, err
}

var data T

MapToStruct(token.Claims.(jwt.MapClaims)["data"].(map[string]any), &data)

return &data, nil
}

func WSHandlerProtected(handler func(*websocket.Conn), config ...websocket.Config) func(*fiber.Ctx) error {
return websocket.New(func(c *websocket.Conn) {
sessionToken := c.Headers("Authorization")

clientUser, err := JwtVerify[appTypes.ClientUser](sessionToken, os.Getenv("AUTH_JWT_SECRET"))
if err != nil {
if w_err := c.WriteJSON(ErrResp(fiber.StatusUnauthorized, err)); w_err != nil {
log.Println(w_err)
}
return
}

c.Locals("user", clientUser)

handler(c)
}, config...)
}
File renamed without changes.
2 changes: 1 addition & 1 deletion utils/helpers/helpers.go → helpers/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import (
"encoding/json"
"errors"
"fmt"
"i9chat/appTypes"
"i9chat/globals"
"i9chat/utils/appTypes"
)

func MapToStruct(val map[string]any, structData any) {
Expand Down
Loading

0 comments on commit 8b2ea30

Please sign in to comment.