diff --git a/Dockerfile b/Dockerfile
index 8f113c4..dd44c71 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,6 +3,6 @@ WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
-RUN sed -i '1i\' ./public/index.html
-EXPOSE 8081
+#RUN sed -i '1i\' ./public/index.html
+EXPOSE 8080
CMD ["node", "index.js"]
\ No newline at end of file
diff --git a/database.js b/database.js
new file mode 100644
index 0000000..1fdb3ed
--- /dev/null
+++ b/database.js
@@ -0,0 +1,18 @@
+const mysql = require("mysql");
+
+const connection = mysql.createConnection({
+ host: process.env.DB_HOST || 'localhost',
+ user: process.env.DB_USER || 'vinz',
+ password: process.env.DB_PASSWORD || '19735',
+ database: process.env.DB_NAME || 'maettleship'
+});
+
+connection.connect((err) => {
+ if (err) {
+ console.error('Error connecting to the database:', err);
+ return;
+ }
+ console.log('Connected to the MySQL database');
+});
+
+module.exports = connection;
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 9f5e786..5af5cb8 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -5,9 +5,30 @@ services:
context: .
dockerfile: Dockerfile
ports:
- - "8081:8081"
+ - "8080:8080"
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules
environment:
- - NODE_ENV=production
\ No newline at end of file
+ - NODE_ENV=production
+ - DB_HOST=db
+ - DB_USER=root
+ - DB_PASSWORD=password
+ - DB_NAME=myapp
+ depends_on:
+ - db
+
+ db:
+ platform: linux/x86_64
+ image: mysql:5.7
+ restart: always
+ environment:
+ MYSQL_ROOT_PASSWORD: password
+ MYSQL_DATABASE: myapp
+ ports:
+ - "3306:3306"
+ volumes:
+ - db_data:/var/lib/mysql
+
+volumes:
+ db_data:
\ No newline at end of file
diff --git a/index.js b/index.js
index a8c2edf..ca3e8c8 100644
--- a/index.js
+++ b/index.js
@@ -3,11 +3,42 @@ const app = express();
const http = require("http").Server(app);
const io = require("socket.io")(http);
const port = 8080;
+const db = require("./database.js")
-app.use(express.static("public"));
+const bodyParser = require("body-parser");
+const path = require("path");
+
+app.use(express.static("public"))
+app.use(express.json());
const { Player } = require(`${__dirname}/businesses/Player.js`);
+app.get('/', (req, res) => {
+ res.sendFile(path.join(__dirname, '/public/index.html'))
+})
+
+app.get('/register', (req, res) => {
+ res.sendFile(path.join(__dirname, '/public/pages/connectionView.html'))
+})
+
+app.post('/register', (req, res) => {
+ const { pseudo, password } = req.body;
+
+ if (!pseudo || !password) {
+ return res.status(400).send('Email and password are required.');
+ }
+
+ const query = 'INSERT INTO users (pseudo, password) VALUES (?, ?)';
+ db.execute(query, [pseudo, password], (err, results) => {
+ if (err) {
+ console.error('Error inserting user into the database:', err);
+ return res.status(500).send('Internal server error.');
+ }
+
+ res.status(201).send('User registered successfully.');
+ })
+});
+
let rooms = [];
let players = [];
@@ -240,7 +271,6 @@ class Room {
}
}
-
http.listen(port, () => {
console.log(`Listening on http://localhost:${port}`);
});
diff --git a/package-lock.json b/package-lock.json
index 8098202..1847c6b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,9 @@
"version": "1.0.0",
"license": "ISC",
"dependencies": {
+ "body-parser": "^1.20.2",
"express": "^4.19.2",
+ "mysql": "^2.18.1",
"socket.io": "^4.7.5",
"uuid": "^9.0.1"
}
@@ -65,6 +67,14 @@
"node": "^4.5.0 || >= 5.9"
}
},
+ "node_modules/bignumber.js": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
+ "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/body-parser": {
"version": "1.20.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
@@ -146,6 +156,11 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
"node_modules/cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
@@ -495,6 +510,11 @@
"node": ">= 0.10"
}
},
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -551,6 +571,25 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
+ "node_modules/mysql": {
+ "version": "2.18.1",
+ "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
+ "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
+ "dependencies": {
+ "bignumber.js": "9.0.0",
+ "readable-stream": "2.3.7",
+ "safe-buffer": "5.1.2",
+ "sqlstring": "2.3.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mysql/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
"node_modules/negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -599,6 +638,11 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -647,6 +691,25 @@
"node": ">= 0.8"
}
},
+ "node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -852,6 +915,14 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "node_modules/sqlstring": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
+ "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -860,6 +931,19 @@
"node": ">= 0.8"
}
},
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
"node_modules/toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -893,6 +977,11 @@
"node": ">= 0.8"
}
},
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
"node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
diff --git a/package.json b/package.json
index e8a0236..4cf596b 100644
--- a/package.json
+++ b/package.json
@@ -5,12 +5,14 @@
"main": "index.js",
"scripts": {
"dev": "nodemon app.js",
- "start": "node app.js"
+ "start": "node index.js"
},
"author": "Vincent Astolfi",
"license": "ISC",
"dependencies": {
+ "body-parser": "^1.20.2",
"express": "^4.19.2",
+ "mysql": "^2.18.1",
"socket.io": "^4.7.5",
"uuid": "^9.0.1"
}
diff --git a/public/pages/connectionView.html b/public/pages/connectionView.html
new file mode 100644
index 0000000..259f909
--- /dev/null
+++ b/public/pages/connectionView.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+ Connection View
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/scripts/connection.js b/public/scripts/connection.js
new file mode 100644
index 0000000..c972af8
--- /dev/null
+++ b/public/scripts/connection.js
@@ -0,0 +1,31 @@
+document.getElementById('registerForm').addEventListener('submit', async function (event) {
+ event.preventDefault(); // Prevent the default form submission
+
+ const pseudo = document.getElementById('pseudo').value;
+ const password = document.getElementById('password').value;
+ const messageDiv = document.getElementById('message');
+
+ console.log("test")
+
+ try {
+ const response = await fetch('/register', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({ pseudo, password }),
+ });
+
+ if (response.ok) {
+ messageDiv.textContent = 'User registered successfully!';
+ messageDiv.style.color = 'green';
+ } else {
+ const errorText = await response.text();
+ messageDiv.textContent = `Error: ${errorText}`;
+ messageDiv.style.color = 'red';
+ }
+ } catch (error) {
+ messageDiv.textContent = `Error: ${error.message}`;
+ messageDiv.style.color = 'red';
+ }
+});
\ No newline at end of file
diff --git a/public/scripts/index.js b/public/scripts/index.js
index 0d3c985..c9ca81e 100644
--- a/public/scripts/index.js
+++ b/public/scripts/index.js
@@ -129,4 +129,4 @@ document.getElementById('closeModalButton').addEventListener('click', () => {
drawGrid()
});
-setTimeout(startConnection, 100);
+setTimeout(startConnection, 100);
\ No newline at end of file