reid 2 роки тому
батько
коміт
8540f19140
2 змінених файлів з 16 додано та 6 видалено
  1. 1 0
      structs/ws.go
  2. 15 6
      ws/ws.go

+ 1 - 0
structs/ws.go

@@ -21,6 +21,7 @@ type WsTokenStruct struct {
 type WsLoginPayload struct {
 	Type     string `json:"type"`
 	Password string `json:"password"`
+	Token   WsTokenStruct `json:"token"`
 }
 
 type WsResponsePayload struct {

+ 15 - 6
ws/ws.go

@@ -106,7 +106,6 @@ func WsHandler(w http.ResponseWriter, r *http.Request) {
 		if err != nil {
 			config.Logger.Warn(fmt.Sprintf("Error marshalling token: %v", err))
 		}
-		payload.Payload = structs.WsLoginPayload{}
 		token := map[string]string{
 			"id":    payload.Token.ID,
 			"token": payload.Token.Token,
@@ -162,13 +161,23 @@ func WsHandler(w http.ResponseWriter, r *http.Request) {
 // validate password and add to auth session map
 func loginHandler(conn *websocket.Conn, msg []byte, payload structs.WsPayload) error {
 	config.Logger.Info("Login")
-	payload.Payload = structs.WsLoginPayload{}
-	if err := json.Unmarshal(msg, &payload); err != nil {
-		return fmt.Errorf("Error unmarshalling message: %v", err)
+	var msgMap map[string]interface{}
+	err := json.Unmarshal(msg, &msgMap)
+	if err != nil {
+		return fmt.Errorf("Couldn't unmarshal login bytes: %v",err)
 	}
-	loginPayload, ok := payload.Payload.(structs.WsLoginPayload)
+	payloadData, ok := msgMap["payload"].(map[string]interface{})
 	if !ok {
-		return fmt.Errorf("Error casting to LoginPayload")
+		return fmt.Errorf("Couldn't extract payload: %v",err)
+	}
+	payloadBytes, err := json.Marshal(payloadData)
+	if err != nil {
+		return fmt.Errorf("Couldn't remarshal login data: %v",err)
+	}
+	var loginPayload structs.WsLoginPayload
+	err = json.Unmarshal(payloadBytes, &loginPayload)
+	if err != nil {
+		return fmt.Errorf("Couldn't unmarshal login payload: %v",err)
 	}
 	isAuthenticated := auth.AuthenticateLogin(loginPayload.Password)
 	if isAuthenticated {