aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--backend/ts/api/login.ts49
-rw-r--r--backend/ts/helpers.ts18
-rw-r--r--backend/ts/index.ts22
-rw-r--r--backend/tsconfig.json (renamed from src/backend/tsconfig.json)2
-rw-r--r--frontend/ts/login.ts26
-rw-r--r--frontend/ts/startGame.ts27
-rw-r--r--frontend/tsconfig.json (renamed from src/frontend/tsconfig.json)5
-rw-r--r--package.json8
-rw-r--r--public/map.html43
-rw-r--r--src/backend/ts/api/login.ts19
-rw-r--r--src/backend/ts/index.ts15
-rw-r--r--src/frontend/ts/login.ts12
-rw-r--r--yarn.lock51
13 files changed, 244 insertions, 53 deletions
diff --git a/backend/ts/api/login.ts b/backend/ts/api/login.ts
new file mode 100644
index 0000000..5b38c62
--- /dev/null
+++ b/backend/ts/api/login.ts
@@ -0,0 +1,49 @@
+import { Request, Response } from "express";
+import { makeQuery } from "../helpers";
+
+interface Colors {
+ blue: number;
+ red: number;
+ green: number;
+ yellow: number;
+ 0: number;
+ 1: number;
+ 2: number;
+ 3: number;
+}
+
+interface fiaTable {
+ id: number;
+ data: Array<object>;
+ started: boolean;
+}
+
+const Color: Colors = {
+ blue: 0,
+ red: 1,
+ green: 2,
+ yellow: 3,
+ 0: 0, 1: 1, 2: 2, 3: 3
+}
+
+export default async function apiLogin(req: Request, res: Response) {
+ if (req.session === undefined) {
+ res.send(/* html */`<script>alert("Something went wrong, try to reload the page")</script>`);
+ return;
+ }
+ req.session.uid = req.session.id;
+ let c = await makeQuery("SELECT * FROM `fia` WHERE `started`= false LIMIT 1", []),
+ row: fiaTable;
+ if (c === "") {
+ let data = { id: req.session.uid, color: Color.blue };
+ makeQuery("INSERT INTO `fia`(`data`, `started`) VALUES (?, ?)", [JSON.stringify(data), "0"]);
+ }
+ else {
+ row = JSON.parse(c);
+ row.data.push({ id: req.session.uid, color: Color[row.data.length as keyof Colors] });
+ makeQuery("UPDATE `fia` SET `data`=? WHERE `id`=?", [JSON.stringify(row.data), row.id.toString()]);
+ if(row.data.length === 4)
+ makeQuery("UPDATE `fia` SET `started` = 1 WHERE `id`=?", [row.id.toString()]);
+ }
+ res.send("[1, 2, 3]");
+}
diff --git a/backend/ts/helpers.ts b/backend/ts/helpers.ts
new file mode 100644
index 0000000..984ce2d
--- /dev/null
+++ b/backend/ts/helpers.ts
@@ -0,0 +1,18 @@
+import fetch from "node-fetch";
+
+export async function makeQuery (query: string, params: Array<string>): Promise<string> {
+ return await (
+ await fetch("https://jopek.eu/maks/szkola/apkKli/fiaFiles/fia.php", {
+ method: "POST",
+ headers: {
+ Accept: "application/json",
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ apiKey: process.env.API_KEY,
+ stmt: query,
+ params: params
+ })
+ })
+ ).text();
+} \ No newline at end of file
diff --git a/backend/ts/index.ts b/backend/ts/index.ts
new file mode 100644
index 0000000..fd8f8e1
--- /dev/null
+++ b/backend/ts/index.ts
@@ -0,0 +1,22 @@
+import express from "express";
+import login from "./api/login";
+import session from "express-session";
+import * as dotenv from "dotenv";
+
+dotenv.config();
+const app = express();
+const PORT = 8000;
+
+if (!process.env.SESSION_KEY)
+ throw Error("SESSION_KEY is undefined");
+
+app.use(session({ secret: process.env.SESSION_KEY, cookie: { maxAge: 60000 } }))
+app.use("/", express.static("./public"));
+
+app.get("/favicon.ico", (req, res) => res.redirect("https://lukesmith.xyz/favicon.ico"));
+app.get("/blank", (req, res) => res.send(""));
+app.post("/login", (req, res, next) => login(req, res));
+
+app.listen(PORT, () => {
+ console.log(`[server]: Server is running at https://localhost:${PORT}`);
+});
diff --git a/src/backend/tsconfig.json b/backend/tsconfig.json
index 760fd4c..bb9a7dd 100644
--- a/src/backend/tsconfig.json
+++ b/backend/tsconfig.json
@@ -1,5 +1,5 @@
{
- "extends": "../../tsconfig.json",
+ "extends": "../tsconfig.json",
"include": [
"ts/**/*"
],
diff --git a/frontend/ts/login.ts b/frontend/ts/login.ts
new file mode 100644
index 0000000..4ef46ab
--- /dev/null
+++ b/frontend/ts/login.ts
@@ -0,0 +1,26 @@
+import startGame from "./startGame.js";
+
+let html = /* html */ `
+ <div class="container text-center fs-1" style="margin-top: 45vh;">
+ <label for="username">Vad heter du?</label>
+ <input type="text" name="username" required>
+ <button type="button" class="btn btn-light btn-lg" onclick="login">Starta spelet</button>
+ </div>
+`;
+
+async function login() {
+ let username = document.getElementsByTagName("input")[0].innerHTML,
+ res = await fetch("/login", {
+ method: "POST",
+ headers: {
+ Accept: "application/json",
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({ username: username })
+ });
+ res = await res.json();
+ startGame(res);
+}
+
+document.body.innerHTML = html;
+document.getElementsByTagName("button")[0].onclick = login;
diff --git a/frontend/ts/startGame.ts b/frontend/ts/startGame.ts
new file mode 100644
index 0000000..50ef068
--- /dev/null
+++ b/frontend/ts/startGame.ts
@@ -0,0 +1,27 @@
+function getCanvasAndCtx(): [HTMLCanvasElement, CanvasRenderingContext2D] {
+ let canvas = document.getElementsByTagName("canvas")[0],
+ ctx = canvas.getContext("2d");
+ if (ctx === null) {
+ document.write("ur muther is fat, stop using IE");
+ throw new Error("PLayer is using browser older that his mom");
+ } else return [canvas, ctx];
+}
+function setOpponents(data: object, body: string) {
+ let a = [
+ {
+ id: 1,
+ color: "red",
+ }
+ ]
+ document.body.innerHTML = body;
+}
+export default async function startGame (data: object) {
+ let body = await (await fetch("/map.html")).text();
+ setOpponents(data, body);
+ let [canvas, ctx] = getCanvasAndCtx();
+ let img = new Image(600, 600);
+ img.width = 600;
+ img.height = 600;
+ img.src = "https://www.egierki.pl/app/uploads/2020/05/Ludo-Play.jpg";
+ img.onload = () => ctx.drawImage(img, 0, 0);
+}
diff --git a/src/frontend/tsconfig.json b/frontend/tsconfig.json
index b0975f3..0d131bd 100644
--- a/src/frontend/tsconfig.json
+++ b/frontend/tsconfig.json
@@ -1,10 +1,11 @@
{
- "extends": "../../tsconfig.json",
+ "extends": "../tsconfig.json",
"compilerOptions": {
+ "module": "ES2020",
"lib": [
"DOM"
],
- "outDir": "../../public/js"
+ "outDir": "../public/js"
},
"include": [
"ts/**/*"
diff --git a/package.json b/package.json
index 82eb636..920f7f1 100644
--- a/package.json
+++ b/package.json
@@ -7,20 +7,22 @@
"main": "./src/backend/js/index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
- "start:build-front": "tsc -p ./src/frontend/tsconfig.json --watch",
- "start:build-back": "tsc -p ./src/backend/tsconfig.json --watch",
- "start:run": "nodemon ./src/backend/js/index.js",
+ "start:build-front": "tsc -p ./frontend/tsconfig.json --watch",
+ "start:build-back": "tsc -p ./backend/tsconfig.json --watch",
+ "start:run": "nodemon ./backend/js/index.js",
"start": "concurrently \"yarn:start:*\""
},
"dependencies": {
"dotenv": "^8.2.0",
"express": "^4.17.1",
+ "express-session": "^1.17.1",
"node-fetch": "^2.6.1"
},
"devDependencies": {
"@types/concurrently": "^6.0.1",
"@types/dotenv": "^8.2.0",
"@types/express": "^4.17.11",
+ "@types/express-session": "1.17.0",
"@types/node-fetch": "^2.5.8",
"@types/nodemon": "^1.19.0",
"concurrently": "^6.0.0",
diff --git a/public/map.html b/public/map.html
new file mode 100644
index 0000000..d38a015
--- /dev/null
+++ b/public/map.html
@@ -0,0 +1,43 @@
+<div class="container">
+ <table class="table table-dark table-sm">
+ <tbody>
+ <tr>
+ <td class="bg-primary rounded-pill text-center">
+ {{ player.name }}
+ </td>
+ <td></td>
+ <td class="bg-danger rounded-pill text-center">
+ {{ player.name }}
+ </td>
+ <td></td>
+ <td class="bg-success rounded-pill text-center">
+ {{ player.name }}
+ </td>
+ <td></td>
+ <td class="bg-warning rounded-pill text-center">
+ {{ player.name }}
+ </td>
+ <td></td>
+ <td class="text-center rounded-pill">
+ <div class="form-check form-switch text-center">
+ <input
+ class="form-check-input"
+ type="checkbox"
+ id="flexSwitchCheckDefault"
+ />
+ <label class="form-check-label" for="flexSwitchCheckDefault">
+ Jag är redo
+ </label>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="container-flex text-center">
+ <canvas id="map" width="600" height="600" class="border border-danger">
+ Din webbläsare stöder inte canvas, vilket betyder att du inte kan spela
+ fia</canvas
+ >
+ </div>
+ </div>
+ \ No newline at end of file
diff --git a/src/backend/ts/api/login.ts b/src/backend/ts/api/login.ts
deleted file mode 100644
index 045f408..0000000
--- a/src/backend/ts/api/login.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-"use strict";
-import { Request, Response } from 'express';
-import fetch from "node-fetch";
-export default async function apiLogin(req: Request, res: Response) {
- let response = await fetch("https://jopek.eu/maks/szkola/apkKli/fiaFiles/fia.php", {
- method: "POST",
- headers: {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- apiKey: process.env.API_KEY,
- stmt: "SELECT `data` FROM `fia` WHERE `started`= ?",
- params: [false]
- }),
- });
- let resText = await response.text()
- res.send(resText);
-} \ No newline at end of file
diff --git a/src/backend/ts/index.ts b/src/backend/ts/index.ts
deleted file mode 100644
index a6dab5b..0000000
--- a/src/backend/ts/index.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import express from 'express';
-import login from './api/login';
-import * as dotenv from 'dotenv';
-
-dotenv.config();
-const app = express();
-const PORT = 8000;
-
-app.use("/", express.static("./public"));
-
-app.get('/login', (req, res) => login(req, res));
-
-app.listen(PORT, () => {
- console.log(`[server]: Server is running at https://localhost:${PORT}`);
-}); \ No newline at end of file
diff --git a/src/frontend/ts/login.ts b/src/frontend/ts/login.ts
deleted file mode 100644
index 6ff53cd..0000000
--- a/src/frontend/ts/login.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-let html = /* html */`
- <div class="container text-center fs-1" style="margin-top: 45vh;">
- <label for="username">Vad heter du?</label>
- <input type="text" name="username" required>
- <button type="button" class="btn btn-light btn-lg" onclick="login">Starta spelet</button>
- </div>
-`;
-document.body.innerHTML = html;
-
-function login() {
-
-} \ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index b2a0d68..97092a5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -73,7 +73,15 @@
"@types/qs" "*"
"@types/range-parser" "*"
-"@types/express@^4.17.11":
+"@types/express-session@1.17.0":
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/@types/express-session/-/express-session-1.17.0.tgz#770daf81368f6278e3e40dd894e1e52abbdca0cd"
+ integrity sha512-OQEHeBFE1UhChVIBhRh9qElHUvTp4BzKKHxMDkGHT7WuYk5eL93hPG7D8YAIkoBSbhNEY0RjreF15zn+U0eLjA==
+ dependencies:
+ "@types/express" "*"
+ "@types/node" "*"
+
+"@types/express@*", "@types/express@^4.17.11":
version "4.17.11"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545"
integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==
@@ -473,6 +481,11 @@ depd@~1.1.2:
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+depd@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
@@ -554,6 +567,20 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
+express-session@^1.17.1:
+ version "1.17.1"
+ resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.17.1.tgz#36ecbc7034566d38c8509885c044d461c11bf357"
+ integrity sha512-UbHwgqjxQZJiWRTMyhvWGvjBQduGCSBDhhZXYenziMFjxst5rMV+aJZ6hKPHZnPyHGsrqRICxtX8jtEbm/z36Q==
+ dependencies:
+ cookie "0.4.0"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "~2.0.0"
+ on-headers "~1.0.2"
+ parseurl "~1.3.3"
+ safe-buffer "5.2.0"
+ uid-safe "~2.1.5"
+
express@^4.17.1:
version "4.17.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
@@ -1061,6 +1088,11 @@ on-finished@~2.3.0:
dependencies:
ee-first "1.1.1"
+on-headers@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
+ integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+
once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
@@ -1151,6 +1183,11 @@ qs@6.7.0:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
+random-bytes@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b"
+ integrity sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=
+
range-parser@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
@@ -1239,6 +1276,11 @@ safe-buffer@5.1.2:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+safe-buffer@5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
+ integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+
"safer-buffer@>= 2.1.2 < 3":
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
@@ -1463,6 +1505,13 @@ typescript@^4.2.3:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3"
integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==
+uid-safe@~2.1.5:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a"
+ integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==
+ dependencies:
+ random-bytes "~1.0.0"
+
undefsafe@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae"