From a8dbb30795f914cefe13f359c6aeea25011cfc28 Mon Sep 17 00:00:00 2001 From: aronmal Date: Tue, 14 Feb 2023 22:18:46 +0100 Subject: [PATCH] Nicely working ws --- leaky-ships/pages/api/ws.ts | 35 ++++++++++++++++++++++++++++---- leaky-ships/pages/dev/socket.tsx | 35 +++++++++++++++++++++++++------- 2 files changed, 59 insertions(+), 11 deletions(-) diff --git a/leaky-ships/pages/api/ws.ts b/leaky-ships/pages/api/ws.ts index f6f5a11..f47686b 100644 --- a/leaky-ships/pages/api/ws.ts +++ b/leaky-ships/pages/api/ws.ts @@ -1,6 +1,8 @@ import type { NextApiRequest } from "next" import { Server } from "socket.io" import { NextApiResponseWithSocket } from "../../interfaces/NextApiSocket" +import checkTokenIsValid from "../../lib/backend/components/checkTokenIsValid" +import prisma from "../../lib/prisma" const SocketHandler = (req: NextApiRequest, res: NextApiResponseWithSocket) => { if (res.socket.server.io) { @@ -11,12 +13,37 @@ const SocketHandler = (req: NextApiRequest, res: NextApiResponseWithSocket) => { res.socket.server.io = io io.on("connection", (socket) => { + const connection = { id: socket.id, authenticated: false } + socket.on("input-change", (msg) => { - socket.broadcast.emit("update-input", msg) + if (!connection.authenticated) socket.emit("unauthenticated") + // socket.broadcast.emit("update-input", msg) + io.emit("update-input", msg) + }) + + socket.on("authenticate", (payload) => { + // console.log("warst", payload) + // console.log(payload()) + checkTokenIsValid({ + token: payload.token, + tokenType: "ACCESS", + }) + .then(async ({ tokenBody }) => { + // console.log(tokenBody) + const token = await prisma.token.findUnique({ + where: { id: tokenBody.id }, + }) + // console.log(!token , token.used) + if (!token || token.used) { + socket.emit("unauthenticated") + // console.log(token) + } else { + socket.emit("authenticated") + connection.authenticated = true + } + }) + .catch((err) => console.log("cat", err.message)) }) - // console.log(socket.id) - // console.log(socket) - // ... socket.on("test", (payload) => { console.log("Got test:", payload) diff --git a/leaky-ships/pages/dev/socket.tsx b/leaky-ships/pages/dev/socket.tsx index 31e3be2..6cce6ad 100644 --- a/leaky-ships/pages/dev/socket.tsx +++ b/leaky-ships/pages/dev/socket.tsx @@ -1,24 +1,41 @@ import { ChangeEventHandler, useEffect, useState } from "react" import { io } from "socket.io-client" +import getAccessToken from "../../lib/frontend/getAccessToken" let socket: ReturnType const Home = () => { const [input, setInput] = useState("") + const [data, setData] = useState("") useEffect(() => { socketInitializer() }, []) - const socketInitializer = async () => { + async function socketInitializer() { await fetch("/api/ws") socket = io() + await fetch("/api/login", { + method: "POST", + body: JSON.stringify({ username: "warst", password: "warst" }), + }) + getAccessToken().then((token) => { + socket.emit("authenticate", { token }) + }) socket.on("connect", () => { console.log("connected") }) + socket.on("authenticated", () => { + console.log("Yay!") + }) + + socket.on("unauthenticated", () => { + console.log("No... pls work") + }) + socket.on("update-input", (msg) => { - setInput(msg) + setData(msg) }) } @@ -28,11 +45,15 @@ const Home = () => { } return ( - + <> + setInput(data)} + /> +

{data}

+ ) }