Signup from game

This commit is contained in:
KGrzeg 2021-10-17 22:17:18 +02:00
parent 60c2da0429
commit 33b47dcb67
6 changed files with 88 additions and 18 deletions

25
game/src/api.ts Normal file
View file

@ -0,0 +1,25 @@
const baseApiPath = "http://localhost:3000"
export default {
async post(path: string, data: any) {
let response;
try {
response = await fetch(`${baseApiPath}/${path}`, {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
} catch (err) {
console.error(err)
}
return response.json()
},
async signup(name: string) {
return this.post("signup", { name })
}
}

View file

@ -1,4 +1,14 @@
declare interface Window { myStuff: any } import API from './api'
declare global {
interface Window {
myStuff: {
name?: String | null,
token?: String | null,
password?: String | null,
}
}
}
(() => { (() => {
const elements = { const elements = {
@ -60,7 +70,7 @@ declare interface Window { myStuff: any }
elements.key!.innerText = response.token elements.key!.innerText = response.token
} }
function signup() { async function signup() {
const nickname = prompt("Your nickname:") const nickname = prompt("Your nickname:")
if (!nickname) { if (!nickname) {
@ -68,29 +78,18 @@ declare interface Window { myStuff: any }
return return
} }
// TODO: Fetch data from server const response = await API.signup(nickname)
//mock bad request
if (nickname == 'Hgs') {
alert("The name is occupied by someone else, try again with another nickname")
return
}
const response = {
token: Math.random().toString() + '.abc',
name: nickname!
}
localStorage.setItem('token', response.token) localStorage.setItem('token', response.token)
localStorage.setItem('name', response.name)
window.myStuff.token = response.token window.myStuff.token = response.token
window.myStuff.name = response.name window.myStuff.name = response.name
window.myStuff.password = response.password
elements.bar.logged!.style.display = '' elements.bar.logged!.style.display = ''
elements.bar.loggedout!.style.display = 'none' elements.bar.loggedout!.style.display = 'none'
elements.name!.innerText = response.name elements.name!.innerText = response.name
elements.key!.innerText = response.token elements.key!.innerText = response.password
} }
function logout() { function logout() {

View file

@ -1,8 +1,12 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "es2016", "target": "es5",
"module": "es6", "module": "es6",
"strict": true, "strict": true,
"lib": [
"es2015",
"dom"
],
"noImplicitAny": false, "noImplicitAny": false,
"noEmit": true, "noEmit": true,
"allowJs": true, "allowJs": true,
@ -15,7 +19,9 @@
"sourceMap": true, "sourceMap": true,
"baseUrl": "./src", "baseUrl": "./src",
"paths": { "paths": {
"~/*": ["./*"] "~/*": [
"./*"
]
}, },
"typeRoots": [ "typeRoots": [
"node_modules/@types", "node_modules/@types",

View file

@ -13,6 +13,7 @@
"@babel/core": "^7.15.5", "@babel/core": "^7.15.5",
"@babel/node": "^7.15.4", "@babel/node": "^7.15.4",
"@babel/preset-env": "^7.15.6", "@babel/preset-env": "^7.15.6",
"cors": "^2.8.5",
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"express": "^4.17.1", "express": "^4.17.1",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
@ -2258,6 +2259,18 @@
"semver": "bin/semver.js" "semver": "bin/semver.js"
} }
}, },
"node_modules/cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"dependencies": {
"object-assign": "^4",
"vary": "^1"
},
"engines": {
"node": ">= 0.10"
}
},
"node_modules/crypto-random-string": { "node_modules/crypto-random-string": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
@ -3681,6 +3694,14 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-inspect": { "node_modules/object-inspect": {
"version": "1.11.0", "version": "1.11.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
@ -6282,6 +6303,15 @@
} }
} }
}, },
"cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"requires": {
"object-assign": "^4",
"vary": "^1"
}
},
"crypto-random-string": { "crypto-random-string": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
@ -7342,6 +7372,11 @@
"integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
"dev": true "dev": true
}, },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"object-inspect": { "object-inspect": {
"version": "1.11.0", "version": "1.11.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",

View file

@ -15,6 +15,7 @@
"@babel/core": "^7.15.5", "@babel/core": "^7.15.5",
"@babel/node": "^7.15.4", "@babel/node": "^7.15.4",
"@babel/preset-env": "^7.15.6", "@babel/preset-env": "^7.15.6",
"cors": "^2.8.5",
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"express": "^4.17.1", "express": "^4.17.1",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",

View file

@ -3,6 +3,7 @@ import 'dotenv/config'
import express from 'express' import express from 'express'
import jwt from 'jsonwebtoken' import jwt from 'jsonwebtoken'
import morgan from 'morgan' import morgan from 'morgan'
import cors from 'cors'
import auth from './Auth.js' import auth from './Auth.js'
import db from './Database.js' import db from './Database.js'
@ -28,6 +29,7 @@ const protect = (req, res, next) => {
const app = express() const app = express()
app.use(morgan('combined')) app.use(morgan('combined'))
app.use(express.json()) app.use(express.json())
app.use(cors())
app.get("/", (_, res) => { app.get("/", (_, res) => {
res.json({ message: "Hello! API here" }) res.json({ message: "Hello! API here" })
@ -39,6 +41,8 @@ app.get("/secured", protect, (req, res) => {
}) })
app.post("/signup", async (req, res) => { app.post("/signup", async (req, res) => {
console.log("No co jest??", req.body)
if (!req.body.name) if (!req.body.name)
return res.status(400).json({ return res.status(400).json({
error: "missing argument name" error: "missing argument name"