|
|
@@ -4,6 +4,7 @@ import (
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
"github.com/gorilla/websocket"
|
|
|
+ "goseg/auth"
|
|
|
"goseg/broadcast"
|
|
|
"goseg/structs"
|
|
|
"log/slog"
|
|
|
@@ -20,6 +21,26 @@ var (
|
|
|
}
|
|
|
)
|
|
|
|
|
|
+// func handleConnection(c *websocket.Conn) {
|
|
|
+// // Read the first message from the client which should be the token
|
|
|
+// messageType, p, err := c.ReadMessage()
|
|
|
+// if err != nil {
|
|
|
+// logger.Error(fmt.Errorf("%v",err))
|
|
|
+// return
|
|
|
+// }
|
|
|
+// token := string(p)
|
|
|
+// // Verify the token
|
|
|
+// isValid, _, err := CheckToken(token, c, false) // 'false' assumes it's not a setup
|
|
|
+// if !isValid || err != nil {
|
|
|
+// logger.Info("Invalid token provided by client.")
|
|
|
+// c.Close()
|
|
|
+// return
|
|
|
+// }
|
|
|
+
|
|
|
+// // rest of logic
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
// switch on ws event cases
|
|
|
func WsHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
conn, err := upgrader.Upgrade(w, r, nil)
|
|
|
@@ -53,12 +74,38 @@ func WsHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
- var payload structs.WsPayload
|
|
|
- if err := json.Unmarshal(msg, &payload); err != nil {
|
|
|
+ var prelim structs.WsType
|
|
|
+ if err := json.Unmarshal(msg, &prelim); err != nil {
|
|
|
fmt.Println("Error unmarshalling message:", err)
|
|
|
continue
|
|
|
}
|
|
|
- switch payload.Type {
|
|
|
+ switch prelim.Payload.Type {
|
|
|
+ case "login":
|
|
|
+ var payload structs.WsPayload
|
|
|
+ payload.Payload = structs.LoginPayload{}
|
|
|
+ if err := json.Unmarshal(msg, &payload); err != nil {
|
|
|
+ fmt.Println("Error unmarshalling message:", err)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ loginPayload, ok := payload.Payload.(structs.LoginPayload)
|
|
|
+ if !ok {
|
|
|
+ fmt.Println("Error casting to LoginPayload")
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ isAuthenticated := auth.AuthenticateLogin(loginPayload.Password)
|
|
|
+ if isAuthenticated {
|
|
|
+ _, err := auth.CreateToken(conn, false)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error creating token:", err)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ auth.AuthenticatedClients.Lock()
|
|
|
+ auth.AuthenticatedClients.Conns[conn] = true
|
|
|
+ auth.AuthenticatedClients.Unlock()
|
|
|
+ } else {
|
|
|
+ // Handle invalid login
|
|
|
+ fmt.Println("Invalid login attempt")
|
|
|
+ }
|
|
|
case "setup":
|
|
|
logger.Info("Setup")
|
|
|
// setup.Setup(payload)
|
|
|
@@ -82,7 +129,7 @@ func WsHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
logger.Error(errmsg)
|
|
|
}
|
|
|
default:
|
|
|
- errmsg := fmt.Sprintf("Unknown request type:", payload.Type)
|
|
|
+ errmsg := fmt.Sprintf("Unknown request type: %s", prelim.Payload.Type)
|
|
|
logger.Warn(errmsg)
|
|
|
}
|
|
|
}
|