use Prettier, add Pool

This commit is contained in:
Mario Peters
2022-05-06 18:27:22 +02:00
parent f55befc8b7
commit 057e6ee1c6
15 changed files with 3674 additions and 1480 deletions

View File

@@ -3,7 +3,7 @@
"es6": true,
"node": true
},
"extends": "eslint:recommended",
"extends": ["eslint:recommended", "plugin:prettier/recommended"],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"

1
.nvmrc Normal file
View File

@@ -0,0 +1 @@
12

7
.prettierrc Normal file
View File

@@ -0,0 +1,7 @@
{
"trailingComma": "all",
"tabWidth": 4,
"semi": false,
"singleQuote": true,
"printWidth": 200
}

48
auth.js
View File

@@ -1,50 +1,48 @@
// auth.js
const jwtPlugin = require('hapi-auth-jwt2').plugin;
const jwt = require('jsonwebtoken');
const crypto = require('crypto');
const jwtPlugin = require('hapi-auth-jwt2').plugin
const jwt = require('jsonwebtoken')
const crypto = require('crypto')
const validate = function (credentials) {
// Run any checks here to confirm we want to grant these credentials access
return {
isValid: true,
credentials // request.auth.credentials
credentials, // request.auth.credentials
}
};
}
exports.configureAuth = async (server) => {
await server.register(jwtPlugin);
await server.register(jwtPlugin)
server.auth.strategy('admin', 'jwt', {
key: process.env.JWT_KEY,
validate,
verifyOptions: { algorithms: [ 'HS256' ] }
});
verifyOptions: { algorithms: ['HS256'] },
})
// Default all routes to require JWT and opt out for public routes
server.auth.default('admin')
};
}
// TODO: save login timestemp
// TODO: save login timestamp
exports.login = async (email, password, request) => {
return new Promise((resolve, reject) => {
const sql = 'SELECT id, login, pass, adminstatus FROM accounts WHERE login = \'' + email + '\'';
const sql = "SELECT id, login, pass, adminstatus FROM accounts WHERE login = '" + email + "'"
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
if (err) console.error(err)
if (email === results[0].login) {
const md5pw = crypto.createHash('md5').update(password).digest("hex");
const md5pw = crypto.createHash('md5').update(password).digest('hex')
if (md5pw === results[0].pass) {
const accountId = results[0].id;
const adminstatus = results[0].adminstatus;
const credentials = { email , "id": accountId, "admin": adminstatus};
const token = jwt.sign(credentials, process.env.JWT_KEY, { algorithm: 'HS256', expiresIn: '24 hours' });
return resolve({token, accountId, adminstatus});
}
else {
return reject("wrong credentials");
const accountId = results[0].id
const adminstatus = results[0].adminstatus
const credentials = { email, id: accountId, admin: adminstatus }
const token = jwt.sign(credentials, process.env.JWT_KEY, { algorithm: 'HS256', expiresIn: '24 hours' })
return resolve({ token, accountId, adminstatus })
} else {
return reject('wrong credentials')
}
} else {
return reject("wrong credentials");
return reject('wrong credentials')
}
});
})
})
// if (!(email === 'mario@wattsche.de' && password === 'mmario')) return Boom.notAcceptable();
};
}

2045
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -24,6 +24,7 @@
"jsonwebtoken": "^8.5.1"
},
"devDependencies": {
"eslint": "^8.3.0"
"eslint": "^8.3.0",
"eslint-config-prettier": "^8.5.0"
}
}

View File

@@ -1,63 +1,64 @@
const jwt = require('jsonwebtoken');
const jwt = require('jsonwebtoken')
exports.configureAccountRoutes = (server) => {
// server.route accepts an object or an array
return server.route([
{
// Alle Accountdaten
method: 'GET',
path: '/getAccount',
handler: async (request, h) => {
return new Promise((resolve) => {
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
const aid = decoded.id;
const sql = 'SELECT login, name, vorname, verein, anrede, strasse, plz, ort, telefon FROM accounts WHERE id = ' + aid;
{
// Alle Accountdaten
method: 'GET',
path: '/getAccount',
handler: async (request, h) => {
return new Promise((resolve) => {
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const aid = decoded.id
const sql = 'SELECT login, name, vorname, verein, anrede, strasse, plz, ort, telefon FROM accounts WHERE id = ' + aid
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
return resolve(results);
});
});
},
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log('result', results)
return resolve(results)
})
})
},
auth: 'admin'
}
},
{
// Alle Vereine
method: 'GET',
path: '/getClubs',
handler: async (request, h) => {
return new Promise((resolve) => {
const sql = 'SELECT verein FROM accounts WHERE verein != "" GROUP By verein';
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
auth: 'admin',
},
},
{
// Alle Vereine
method: 'GET',
path: '/getClubs',
handler: async (request, h) => {
return new Promise((resolve) => {
const sql = 'SELECT verein FROM accounts WHERE verein != "" GROUP By verein'
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
let clubs = [];
results.forEach((item) => {
clubs.push(item.verein);
});
// console.log('result', results);
// console.log('clubs', clubs);
return resolve(clubs);
});
});
},
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
let clubs = []
results.forEach((item) => {
clubs.push(item.verein)
})
// console.log('result', results);
// console.log('clubs', clubs);
return resolve(clubs)
})
})
},
auth: false,
}
},
])};
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
auth: false,
},
},
])
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,94 +1,92 @@
const {login} = require('../auth');
const jwt = require('jsonwebtoken');
const { login } = require('../auth')
const jwt = require('jsonwebtoken')
exports.configureLoginRoutes = (server) => {
// server.route accepts an object or an array
return server.route([
{
method: "GET", path: "/", options: {auth: false},
handler: function () {
return {text: 'Token not required'};
}
},
{
method: 'GET', path: '/checkToken',
handler: function (request, h) {
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
return h
.response({text: 'You used a Token!'})
.type('text/html')
.header("Authorization", request.headers.authorization)
.header("x-kt-account",decoded.id)
.header("x-kt-admin", decoded.admin)
.code(201);
},
options: {
// TODO CORS ENTFERNE
// cors: {
// origin: ['*'],
// headers: ["Access-Control-Allow-Headers", "Access-Control-Allow-Origin","Accept", "Authorization", "Content-Type", "If-None-Match", "Accept-language"],
// credentials: true
// },
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin']
{
method: 'GET',
path: '/',
options: { auth: false },
handler: function () {
return { text: 'Token not required' }
},
auth: false
}
},
{
method: 'GET', path: '/token', options: {auth: 'admin',},
handler: async (request, h) => {
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
console.log(decoded); // bar
return h
.response({text: 'You used a Token!'})
.type('text/html')
.header("Authorization", request.headers.authorization)
.code(201);
},
},
{
// {"login":{"email": "mario@wattsche.de", "password": "mmario"}}
method: 'POST',
path: '/authentications',
handler: async (request,h) => {
const {email, password} = request.payload.login;
const result = await login(email, password, request);
console.log(result);
if (result.token === "wrong credentials"){
{
method: 'GET',
path: '/checkToken',
handler: function (request, h) {
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
return h
.response({ text: 'You used a Token!' })
.type('text/html')
.code(403);
} else {
return h
.response(result.token)
.type('text/html')
.header("Authorization", request.headers.authorization)
.header("x-kt-account", result.accountId)
.header("x-kt-admin", result.adminstatus)
.header("x-kt-token", result.token)
.code(200);
}
},
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
.header('Authorization', request.headers.authorization)
.header('x-kt-account', decoded.id)
.header('x-kt-admin', decoded.admin)
.code(201)
},
auth: false
}
}
options: {
// TODO CORS ENTFERNE
// cors: {
// origin: ['*'],
// headers: ["Access-Control-Allow-Headers", "Access-Control-Allow-Origin","Accept", "Authorization", "Content-Type", "If-None-Match", "Accept-language"],
// credentials: true
// },
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin'],
},
auth: false,
},
},
{
method: 'GET',
path: '/token',
options: { auth: 'admin' },
handler: async (request, h) => {
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
console.log(decoded) // bar
return h.response({ text: 'You used a Token!' }).type('text/html').header('Authorization', request.headers.authorization).code(201)
},
},
{
// {"login":{"email": "mario@wattsche.de", "password": "mmario"}}
method: 'POST',
path: '/authentications',
handler: async (request, h) => {
const { email, password } = request.payload.login
const result = await login(email, password, request)
console.log(result)
if (result.token === 'wrong credentials') {
return h.type('text/html').code(403)
} else {
return h
.response(result.token)
.type('text/html')
.header('Authorization', request.headers.authorization)
.header('x-kt-account', result.accountId)
.header('x-kt-admin', result.adminstatus)
.header('x-kt-token', result.token)
.code(200)
}
},
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
},
auth: false,
},
},
])
};
}

View File

@@ -1,397 +1,392 @@
const Joi = require('joi');
const jwt = require('jsonwebtoken');
const Joi = require('joi')
const jwt = require('jsonwebtoken')
const utils = require('../utils')
exports.configureParticipantRoutes = (server) => {
// server.route accepts an object or an array
return server.route([
{
// Alle Teilnehmer eines $Turniers
method: 'GET',
path: '/tournament/{tid}/participants',
handler: async (request, h) => {
return new Promise((resolve) => {
const tid = request.params.tid;
const sql = `SELECT turniergruppen.id AS gid, turniergruppen.turnier_id, encounters.begegnung, encounters.aka, encounters.shiro, teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein
{
// Alle Teilnehmer eines $Turniers
method: 'GET',
path: '/tournament/{tid}/participants',
handler: async (request, h) => {
return new Promise((resolve) => {
const tid = request.params.tid
const sql = `SELECT turniergruppen.id AS gid, turniergruppen.turnier_id, encounters.begegnung, encounters.aka, encounters.shiro, teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein
FROM turniergruppen, encounters, teilnehmer
WHERE turniergruppen.turnier_id = ${tid}
AND turniergruppen.id = encounters.gruppen_id
AND (encounters.aka = teilnehmer.id OR encounters.shiro = teilnehmer.id)`;
AND (encounters.aka = teilnehmer.id OR encounters.shiro = teilnehmer.id)`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
// console.log('result', results);
return resolve(results);
});
});
},
options: {
auth: false,
validate: {
params: {
tid: Joi.number().integer().min(0)
}
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
// console.log('result', results);
return resolve(results)
})
})
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
}
}
},
{
// Alle Teilnehmer der Gruppe
method: 'GET',
path: '/group/{gid}/participants',
handler: async (request, h) => {
return new Promise((resolve) => {
const gid = request.params.gid;
const sql = "SELECT teilnehmer.id, teilnehmer.name, teilnehmer.vorname, teilnehmer.verein FROM teilnehmer_turniergruppe, teilnehmer WHERE turniergruppe_id = " + gid + " AND teilnehmer_id = teilnehmer.id";
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
// console.log('result', results);
return resolve(results);
});
// db().query('SELECT id, gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer FROM turniergruppen WHERE turnier_id = "' + tid + '" ORDER BY gid', function (error, results, fields) {
});
},
options: {
validate: {
params: {
gid: Joi.number().integer().min(0)
}
options: {
auth: false,
validate: {
params: {
tid: Joi.number().integer().min(0),
},
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
}
}
},
{
// Alle Teilnehmer_ids der $Gruppe - Daten kommen aus der Auslosung
method: 'GET',
path: '/group/encounters/{gid}',
handler: async (request, h) => {
return new Promise((resolve) => {
const gid = request.params.gid;
// db().query('SELECT begegnungen.id FROM wettkampfbaeume, korunden, begegnungen WHERE wettkampfbaeume.gruppen_id = "' + gid + '" AND wettkampfbaeume.id = korunden.wettkampfbaum_id AND korunden.id = begegnungen.runden_id', function (error, results, fields) {
// db().query('SELECT * FROM wettkampfbaeume, korunden, begegnungen WHERE wettkampfbaeume.gruppen_id = "' + gid + '" AND wettkampfbaeume.id = korunden.wettkampfbaum_id AND korunden.id = begegnungen.runden_id', function (error, results, fields) {
// db().query('SELECT * FROM encounters WHERE gruppen_id = ' + gid, function (error, results, fields) {
const sql = 'SELECT * FROM encounters WHERE gruppen_id = ' + gid + ' ORDER BY begegnung DESC';
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
// console.log('result', results);
return resolve(results);
});
});
},
options: {
validate: {
params: {
gid: Joi.number().integer().min(0)
}
{
// Alle Teilnehmer der Gruppe
method: 'GET',
path: '/group/{gid}/participants',
handler: async (request, h) => {
return new Promise((resolve) => {
const gid = request.params.gid
const sql =
'SELECT teilnehmer.id, teilnehmer.name, teilnehmer.vorname, teilnehmer.verein FROM teilnehmer_turniergruppe, teilnehmer WHERE turniergruppe_id = ' +
gid +
' AND teilnehmer_id = teilnehmer.id'
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
// console.log('result', results);
return resolve(results)
})
// db().query('SELECT id, gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer FROM turniergruppen WHERE turnier_id = "' + tid + '" ORDER BY gid', function (error, results, fields) {
})
},
options: {
validate: {
params: {
gid: Joi.number().integer().min(0),
},
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
}
}
},
{
// Teilnehmer zu ID
method: 'GET',
path: '/participant/{id}',
handler: async (request, h) => {
return new Promise((resolve) => {
const id = request.params.id;
const sql = 'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein FROM starter, teilnehmer, begegnungen WHERE begegnungen.id = "' + id + '" AND begegnungen.id = starter.begegnungs_id AND starter.teilnehmer_id = teilnehmer.id';
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
// console.log('result', results);
return resolve(results);
});
});
},
options: {
validate: {
params: {
id: Joi.number().integer().min(0)
}
{
// Alle Teilnehmer_ids der $Gruppe - Daten kommen aus der Auslosung
method: 'GET',
path: '/group/encounters/{gid}',
handler: async (request, h) => {
return new Promise((resolve) => {
const gid = request.params.gid
// db().query('SELECT begegnungen.id FROM wettkampfbaeume, korunden, begegnungen WHERE wettkampfbaeume.gruppen_id = "' + gid + '" AND wettkampfbaeume.id = korunden.wettkampfbaum_id AND korunden.id = begegnungen.runden_id', function (error, results, fields) {
// db().query('SELECT * FROM wettkampfbaeume, korunden, begegnungen WHERE wettkampfbaeume.gruppen_id = "' + gid + '" AND wettkampfbaeume.id = korunden.wettkampfbaum_id AND korunden.id = begegnungen.runden_id', function (error, results, fields) {
// db().query('SELECT * FROM encounters WHERE gruppen_id = ' + gid, function (error, results, fields) {
const sql = 'SELECT * FROM encounters WHERE gruppen_id = ' + gid + ' ORDER BY begegnung DESC'
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
// console.log('result', results);
return resolve(results)
})
})
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
}
}
},
{
// Alle gemeldeten Einzel registrationen (teilnehmer.id, disziplin) des Turniers x
method: 'GET',
path: '/getSingleRegistrations/{tid}',
handler: async (request, h) => {
return new Promise((resolve) => {
const tid = request.params.tid;
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
const aid = decoded.id;
const sql = `SELECT turniergruppen.disziplin, turniergruppen.gid, turniergruppen.pool, teilnehmer_turniergruppe.teilnehmer_id, teilnehmer.name, teilnehmer.vorname, teilnehmer.verein, teilnehmer.gurt, teilnehmer.geschlecht
options: {
validate: {
params: {
gid: Joi.number().integer().min(0),
},
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
},
},
{
// Teilnehmer zu ID
method: 'GET',
path: '/participant/{id}',
handler: async (request, h) => {
return new Promise((resolve) => {
const id = request.params.id
const sql =
'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein FROM starter, teilnehmer, begegnungen WHERE begegnungen.id = "' +
id +
'" AND begegnungen.id = starter.begegnungs_id AND starter.teilnehmer_id = teilnehmer.id'
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
// console.log('result', results);
return resolve(results)
})
})
},
options: {
validate: {
params: {
id: Joi.number().integer().min(0),
},
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
},
},
{
// Alle gemeldeten Einzel registrationen (teilnehmer.id, disziplin) des Turniers x
method: 'GET',
path: '/getSingleRegistrations/{tid}',
handler: async (request, h) => {
return new Promise((resolve) => {
const tid = request.params.tid
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const aid = decoded.id
const sql = `SELECT turniergruppen.disziplin, turniergruppen.gid, turniergruppen.pool, teilnehmer_turniergruppe.teilnehmer_id, teilnehmer.name, teilnehmer.vorname, teilnehmer.verein, teilnehmer.gurt, teilnehmer.geschlecht
FROM turniergruppen, teilnehmer_turniergruppe, teilnehmer
WHERE turnier_id = ${tid}
AND teilnehmer_turniergruppe.turniergruppe_id = turniergruppen.id
AND teilnehmer_turniergruppe.teilnehmer_id = teilnehmer.id
AND (turniergruppen.disziplin = 'Kumite-Einzel' OR turniergruppen.disziplin = 'Kata-Einzel')
AND teilnehmer.account_id = ${aid}`;
AND teilnehmer.account_id = ${aid}`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
return resolve(results);
});
});
},
options: {
validate: {
params: {
tid: Joi.number().integer().min(0)
}
},
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
},
auth: 'admin'
}
},
{
// Alle Teilnehmer des Accounts
method: 'GET',
path: '/participants',
handler: async (request, h) => {
return new Promise((resolve) => {
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
const id = decoded.id;
const sql = 'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer WHERE teilnehmer.account_id =' + id;
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
// console.log('result', results);
return resolve(results);
});
});
},
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
},
auth: 'admin'
}
},
{
// Alle Teilnehmer
// todo: ADMINCHECK ODER TURNIERERSTELLER
method: 'GET',
path: '/allParticipants',
handler: async (request, h) => {
const p = new Promise((resolve, reject) => {
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
if (decoded.admin === 'y') {
const sql = 'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer';
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
if (err) console.error(err)
console.log('result', results)
return resolve(results)
})
})
},
options: {
validate: {
params: {
tid: Joi.number().integer().min(0),
},
},
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
},
auth: 'admin',
},
},
{
// Alle Teilnehmer des Accounts
method: 'GET',
path: '/participants',
handler: async (request, h) => {
return new Promise((resolve) => {
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const id = decoded.id
const sql =
'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer WHERE teilnehmer.account_id =' +
id
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
// console.log('result', results);
return resolve(results);
});
// db().query('SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer', function (error, results) {
// if (error) throw error;
// // console.log(results);
// db().end();
// return resolve(results);
// });
} else {
return reject(new Error('allParticipants: not allowed accountID: ' + decoded.id));
}
});
console.log(p);
return p;
},
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
return resolve(results)
})
})
},
auth: 'admin',
}
},
{
// Teilnehmer hinzufügen
method: 'PUT',
path: '/registerParticipant',
handler: async (request, h) => {
return new Promise((resolve) => {
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
const aid = decoded.id;
const d = new Date(Date.now());
const now = d.getFullYear() + "-" +
("00" + (d.getMonth() + 1)).slice(-2) + "-" +
("00" + d.getDate()).slice(-2) + " " +
("00" + d.getHours()).slice(-2) + ":" +
("00" + d.getMinutes()).slice(-2) + ":" +
("00" + d.getSeconds()).slice(-2)
// const utc_timestamp = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());
const {teilnehmerId, turniergruppeId} = request.payload;
console.log('teilnehmerId', teilnehmerId , 'turniergruppeId', turniergruppeId[0].id, 'now', now);
const sql = `INSERT INTO teilnehmer_turniergruppe (id, teilnehmer_id, turniergruppe_id, timestamp) VALUES (NULL, ${teilnehmerId}, ${turniergruppeId[0].id}, '${now}');`;
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
return resolve(results);
});
});
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
auth: 'admin',
},
auth: 'admin'
}
},
{
// Teilnehmer abmelden
method: 'PUT',
path: '/deregisterParticipant',
handler: async (request, h) => {
return new Promise((resolve) => {
const d = new Date(Date.now());
const now = d.getFullYear() + "-" +
("00" + (d.getMonth() + 1)).slice(-2) + "-" +
("00" + d.getDate()).slice(-2) + " " +
("00" + d.getHours()).slice(-2) + ":" +
("00" + d.getMinutes()).slice(-2) + ":" +
("00" + d.getSeconds()).slice(-2)
const {teilnehmerId, turniergruppeId} = request.payload;
console.log('teilnehmerId', teilnehmerId , 'turniergruppeId', turniergruppeId[0].id, 'now', now);
const sql = `DELETE FROM teilnehmer_turniergruppe WHERE teilnehmer_id = ${teilnehmerId} AND turniergruppe_id = ${turniergruppeId[0].id}`;
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
return resolve(results);
});
});
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
},
auth: 'admin'
}
},
{
// Teilnehmer hinzufügen
method: 'POST',
path: '/addParticipant',
handler: async (request, h) => {
const p = new Promise((resolve) => {
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
const aid = decoded.id;
const {name, vorname, verein, gurt, gebDatum, geschlecht} = request.payload;
let birthDate = gebDatum.split('.');
birthDate = birthDate.reverse().join('-');
const sql = `INSERT INTO teilnehmer (name, vorname, verein, gurt, gebDatum, geschlecht, account_id) VALUES ("${name}","${vorname}","${verein}","${gurt}","${birthDate}","${geschlecht}","${aid}");`;
{
// Alle Teilnehmer
// todo: ADMINCHECK ODER TURNIERERSTELLER
method: 'GET',
path: '/allParticipants',
handler: async (request, h) => {
const p = new Promise((resolve, reject) => {
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
return resolve(results);
});
});
return p;
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
},
auth: 'admin',
}
},
{
// Teilnehmer editieren
//TODO use PUT
method: 'POST',
path: '/editParticipant',
handler: async (request, h) => {
return new Promise((resolve) => {
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
const aid = decoded.id;
const {id, name, vorname, verein, gurt, gebDatum, geschlecht} = request.payload;
let birthDate = gebDatum.split('.');
birthDate = birthDate.reverse().join('-');
const sql =`Update teilnehmer SET name = '${name}', vorname = '${vorname}', verein = '${verein}', gurt = '${gurt}', gebDatum = '${birthDate}', geschlecht = '${geschlecht}'
WHERE id= '${id}' AND account_id = ${aid}`;
if (decoded.admin === 'y') {
const sql = 'SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer'
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
// console.log('result', results);
return resolve(results)
})
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
return resolve(results);
});
});
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
// db().query('SELECT teilnehmer.id, teilnehmer.vorname, teilnehmer.name, teilnehmer.verein, teilnehmer.gurt, teilnehmer.gebDatum, teilnehmer.geschlecht FROM teilnehmer', function (error, results) {
// if (error) throw error;
// // console.log(results);
// db().end();
// return resolve(results);
// });
} else {
return reject(new Error('allParticipants: not allowed accountID: ' + decoded.id))
}
})
console.log(p)
return p
},
auth: 'admin'
}
},
{
// Teilnehmer löschen (aus eigenen Account)
method: 'DELETE',
path: '/participant/{id}',
handler: async (request, h) => {
return new Promise((resolve) => {
const id = request.params.id;
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
const aid = decoded.id;
const sql = 'DELETE FROM teilnehmer WHERE account_id =' + aid + ' AND id =' + id;
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
auth: 'admin',
},
},
{
// Teilnehmer hinzufügen
method: 'PUT',
path: '/registerParticipant',
handler: async (request, h) => {
return new Promise((resolve) => {
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const aid = decoded.id
const { teilnehmerId, turniergruppeId } = request.payload
console.log('teilnehmerId', teilnehmerId, 'turniergruppeId', turniergruppeId[0].id, 'now', utils.timestamp())
const sql = `INSERT INTO teilnehmer_turniergruppe (id, teilnehmer_id, turniergruppe_id, timestamp) VALUES (NULL, ${teilnehmerId}, ${
turniergruppeId[0].id
}, '${utils.timestamp()}');`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
return resolve(results);
});
});
},
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log('result', results)
return resolve(results)
})
})
},
auth: 'admin'
}
},
])};
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
},
auth: 'admin',
},
},
{
// Teilnehmer abmelden
method: 'PUT',
path: '/deregisterParticipant',
handler: async (request, h) => {
return new Promise((resolve) => {
const { teilnehmerId, turniergruppeId } = request.payload
console.log('teilnehmerId', teilnehmerId, 'turniergruppeId', turniergruppeId[0].id)
const sql = `DELETE FROM teilnehmer_turniergruppe WHERE teilnehmer_id = ${teilnehmerId} AND turniergruppe_id = ${turniergruppeId[0].id}`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log('result', results)
return resolve(results)
})
})
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
},
auth: 'admin',
},
},
{
// Teilnehmer hinzufügen
method: 'POST',
path: '/addParticipant',
handler: async (request, h) => {
const p = new Promise((resolve) => {
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const aid = decoded.id
const { name, vorname, verein, gurt, gebDatum, geschlecht } = request.payload
let birthDate = gebDatum.split('.')
birthDate = birthDate.reverse().join('-')
const sql = `INSERT INTO teilnehmer (name, vorname, verein, gurt, gebDatum, geschlecht, account_id) VALUES ("${name}","${vorname}","${verein}","${gurt}","${birthDate}","${geschlecht}","${aid}");`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log('result', results)
return resolve(results)
})
})
return p
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
},
auth: 'admin',
},
},
{
// Teilnehmer editieren
//TODO use PUT
method: 'POST',
path: '/editParticipant',
handler: async (request, h) => {
return new Promise((resolve) => {
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const aid = decoded.id
const { id, name, vorname, verein, gurt, gebDatum, geschlecht } = request.payload
let birthDate = gebDatum.split('.')
birthDate = birthDate.reverse().join('-')
const sql = `Update teilnehmer SET name = '${name}', vorname = '${vorname}', verein = '${verein}', gurt = '${gurt}', gebDatum = '${birthDate}', geschlecht = '${geschlecht}'
WHERE id= '${id}' AND account_id = ${aid}`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log('result', results)
return resolve(results)
})
})
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
},
auth: 'admin',
},
},
{
// Teilnehmer löschen (aus eigenen Account)
method: 'DELETE',
path: '/participant/{id}',
handler: async (request, h) => {
return new Promise((resolve) => {
const id = request.params.id
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const aid = decoded.id
const sql = 'DELETE FROM teilnehmer WHERE account_id =' + aid + ' AND id =' + id
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log('result', results)
return resolve(results)
})
})
},
options: {
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
auth: 'admin',
},
},
])
}

182
routes/pool.js Normal file
View File

@@ -0,0 +1,182 @@
const Joi = require('joi')
const db = require('../db')
const jwt = require('jsonwebtoken')
const utils = require('../utils')
exports.configurePoolRoutes = (server) => {
// server.route accepts an object or an array
return server.route([
{
// Pools erstellen
// TODO: edit admincheck
method: 'POST',
path: '/pools/create',
handler: async (request, h) => {
const p = new Promise((resolve, reject) => {
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const { groups } = request.payload
// TODO: aid = turnier ersteller 1. über tid die accountid abfragen = acountid from turnier (|| acountid from turnier === decoded.id)
if (decoded.admin !== 'y') {
return reject(new Error('/createPools: not allowed accountID: ' + decoded.id))
}
// console.log(JSON.stringify(request.payload, null, 4));
// console.log('groups',groups);
// Für Alle Gruppen des Turniers
let pools = {
B: { id: null, participants: [] },
C: { id: null, participants: [] },
D: { id: null, participants: [] },
}
for (let i = 0; i < groups.length; i++) {
const discipline = groups[i].disziplin
// 1. Abfragen, wie viele Teilnehmer
// 2. Neue Gruppen in DB erstellen
// 2. Teilnehmer neu zuordnen
if (discipline) {
if (discipline == 'Kata-Einzel' || discipline == 'Kumite-Einzel') {
let sql = `SELECT teilnehmer_turniergruppe.teilnehmer_id, teilnehmer.verein FROM teilnehmer_turniergruppe, teilnehmer
WHERE turniergruppe_id = ${groups[i].id}
AND teilnehmer.id=teilnehmer_turniergruppe.teilnehmer_id
ORDER BY verein`
request.app.db.query(sql, (err, groupParticipants) => {
if (err) console.error(err)
const groupCount = groupParticipants.length
console.log('Anzahl Teilnehmer ' + groupCount + ': Gruppe ' + groups[i].id)
// Wenn Gruppe größer 16 erstelle Neue Gruppe und verteile die Teilnehmer auf die Gruppen.
// Gruppe ist zwischen 16-33
if (16 < groupCount && groupCount < 33) {
// Gruppe Pool B in db schreiben
sql = `INSERT INTO karateturniere.turniergruppen
(gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer, platz1, platz2, platz3, platz4, platz1team, platz2team, platz3team, platz4team, results)
VALUES(${groups[i].gid}, ${groups[i].turnier_id}, '${groups[i].geschlecht}', '${groups[i].gurtVon}', '${groups[i].gurtBis}', '${groups[i].disziplin}', '${groups[i].altervon}', '${groups[i].alterbis}', 'B', 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);`
// console.log('sql',sql)
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
// reset pools
pools.B.id = results.insertId
pools.B.participants = []
pools.C.participants = []
pools.D.participants = []
console.log('pools.B.id', pools.B.id)
console.log('groupCount', groupCount)
// console.log('groupParticipants', groupParticipants);
for (let j = 0; j < groupCount; j++) {
const randZeroOne = Math.round(Math.random())
groupParticipants[j + randZeroOne] && pools.B.participants.push(groupParticipants[j + randZeroOne].teilnehmer_id)
j++
}
console.log(pools.B.participants)
// generiere SQL umd alle aus Pool A nach Pool B umzuschreiben
sql = ''
pools.B.participants.forEach((el) => {
sql += `UPDATE karateturniere.teilnehmer_turniergruppe
SET teilnehmer_id=${el}, turniergruppe_id=${pools.B.id}, timestamp='${utils.timestamp()}'
WHERE teilnehmer_id= ${el} AND turniergruppe_id = ${groups[i].id};
`
})
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
})
})
} else if (33 <= groupCount && groupCount < 65) {
// Gruppe ist zwischen 33 - 65
// Gruppe Pool B, C, D in DB schreiben
sql = `INSERT INTO karateturniere.turniergruppen
(gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer, platz1, platz2, platz3, platz4, platz1team, platz2team, platz3team, platz4team, results)
VALUES(${groups[i].gid}, ${groups[i].turnier_id}, '${groups[i].geschlecht}', '${groups[i].gurtVon}', '${groups[i].gurtBis}', '${groups[i].disziplin}', '${groups[i].altervon}', '${groups[i].alterbis}', 'B', 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);
INSERT INTO karateturniere.turniergruppen
(gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer, platz1, platz2, platz3, platz4, platz1team, platz2team, platz3team, platz4team, results)
VALUES(${groups[i].gid}, ${groups[i].turnier_id}, '${groups[i].geschlecht}', '${groups[i].gurtVon}', '${groups[i].gurtBis}', '${groups[i].disziplin}', '${groups[i].altervon}', '${groups[i].alterbis}', 'C', 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);
INSERT INTO karateturniere.turniergruppen
(gid, turnier_id, geschlecht, gurtVon, gurtBis, disziplin, altervon, alterbis, pool, finalteilnehmer, platz1, platz2, platz3, platz4, platz1team, platz2team, platz3team, platz4team, results)
VALUES(${groups[i].gid}, ${groups[i].turnier_id}, '${groups[i].geschlecht}', '${groups[i].gurtVon}', '${groups[i].gurtBis}', '${groups[i].disziplin}', '${groups[i].altervon}', '${groups[i].alterbis}', 'D', 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log('results', results[0])
// reset pools
pools.B.participants = []
pools.C.participants = []
pools.D.participants = []
pools.B.id = results[0].insertId
pools.C.id = results[1].insertId
pools.D.id = results[2].insertId
console.log('pools', pools)
console.log('groupCount', groupCount)
// console.log('groupParticipants', groupParticipants);
const rand = [0, 1, 2, 3]
// shuffle Teams array
rand.sort(() => Math.round(Math.random()) - 0.5)
console.log('rand', rand)
for (let j = 0; j < groupCount; j++) {
groupParticipants[j + rand[0]] && pools.B.participants.push(groupParticipants[j + rand[0]].teilnehmer_id)
groupParticipants[j + rand[1]] && pools.C.participants.push(groupParticipants[j + rand[1]].teilnehmer_id)
groupParticipants[j + rand[2]] && pools.D.participants.push(groupParticipants[j + rand[2]].teilnehmer_id)
j += 3
}
console.log('pools', pools)
// generiere SQL umd alle aus Pool A nach Pool B,C,D umzuschreiben
sql = ''
pools.B.participants.forEach((el) => {
sql += `UPDATE karateturniere.teilnehmer_turniergruppe
SET teilnehmer_id=${el}, turniergruppe_id=${pools.B.id}, timestamp='${utils.timestamp()}'
WHERE teilnehmer_id= ${el} AND turniergruppe_id = ${groups[i].id};`
})
pools.C.participants.forEach((el) => {
sql += `UPDATE karateturniere.teilnehmer_turniergruppe
SET teilnehmer_id=${el}, turniergruppe_id=${pools.C.id}, timestamp='${utils.timestamp()}'
WHERE teilnehmer_id= ${el} AND turniergruppe_id = ${groups[i].id};`
})
pools.D.participants.forEach((el) => {
sql += `UPDATE karateturniere.teilnehmer_turniergruppe
SET teilnehmer_id=${el}, turniergruppe_id=${pools.D.id}, timestamp='${utils.timestamp()}'
WHERE teilnehmer_id= ${el} AND turniergruppe_id = ${groups[i].id};`
})
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
})
})
}
})
} else {
// TODO Teams ändern
}
}
}
return resolve(true)
})
console.log(p)
return p
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
},
auth: 'admin',
},
},
])
}

View File

@@ -1,257 +1,247 @@
const Joi = require('joi');
const jwt = require('jsonwebtoken');
const Joi = require('joi')
const jwt = require('jsonwebtoken')
const utils = require('../utils')
exports.configureTeamRoutes = (server) => {
// server.route accepts an object or an array
return server.route([
{
// Alle Teams
method: 'GET',
path: '/teams',
handler: async (request, h) => {
return new Promise((resolve) => {
const sql = "SELECT teams.id, teams.teamName FROM teams";
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
// console.log('result', results);
return resolve(results);
});
});
},
options: {
// TODO CORS ENTFERNE
auth: false,
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
}
}
},
{
// Alle Teams der Gruppe
method: 'GET',
path: '/group/{gid}/teams',
handler: async (request, h) => {
return new Promise((resolve) => {
const gid = request.params.gid;
const sql = "SELECT teams.id, teams.teamName FROM team_turniergruppe, teams WHERE turniergruppe_id = " + gid + " AND team_id = teams.id";
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
// console.log('result', results);
return resolve(results);
});
});
},
options: {
validate: {
params: {
gid: Joi.number().integer().min(0)
}
{
// Alle Teams
method: 'GET',
path: '/teams',
handler: async (request, h) => {
return new Promise((resolve) => {
const sql = 'SELECT teams.id, teams.teamName FROM teams'
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
// console.log('result', results);
return resolve(results)
})
})
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
}
}
},
{
// Team zu ID
method: 'GET',
path: '/teams/{id}',
handler: async (request, h) => {
return new Promise((resolve) => {
const id = request.params.id;
const sql = 'SELECT teams.id, teams.teamName FROM starter, teams, begegnungen WHERE begegnungen.id = "' + id + '" AND begegnungen.id = starter.begegnungs_id AND starter.team_id = teams.id';
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
return resolve(results);
});
});
},
options: {
validate: {
params: {
id: Joi.number().integer().min(0)
}
options: {
// TODO CORS ENTFERNE
auth: false,
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
}
}
},
{
/*
* Alle gemeldeten Team registrationen
* return: (anzahl, gruppenID) des Turniers x
*/
method: 'GET',
path: '/getTeamRegistrations/{tid}',
handler: async (request, h) => {
return new Promise((resolve) => {
const tid = request.params.tid;
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
const aid = decoded.id;
const sql = `SELECT COUNT(turniergruppen.id) AS count, turniergruppen.id, turniergruppen.disziplin, turniergruppen.gid, turniergruppen.geschlecht, turniergruppen.pool, teams.teamName
},
{
// Alle Teams der Gruppe
method: 'GET',
path: '/group/{gid}/teams',
handler: async (request, h) => {
return new Promise((resolve) => {
const gid = request.params.gid
const sql = 'SELECT teams.id, teams.teamName FROM team_turniergruppe, teams WHERE turniergruppe_id = ' + gid + ' AND team_id = teams.id'
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
// console.log('result', results);
return resolve(results)
})
})
},
options: {
validate: {
params: {
gid: Joi.number().integer().min(0),
},
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
},
},
{
// Team zu ID
method: 'GET',
path: '/teams/{id}',
handler: async (request, h) => {
return new Promise((resolve) => {
const id = request.params.id
const sql =
'SELECT teams.id, teams.teamName FROM starter, teams, begegnungen WHERE begegnungen.id = "' + id + '" AND begegnungen.id = starter.begegnungs_id AND starter.team_id = teams.id'
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log('result', results)
return resolve(results)
})
})
},
options: {
validate: {
params: {
id: Joi.number().integer().min(0),
},
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
},
},
{
/*
* Alle gemeldeten Team registrationen
* return: (anzahl, gruppenID) des Turniers x
*/
method: 'GET',
path: '/getTeamRegistrations/{tid}',
handler: async (request, h) => {
return new Promise((resolve) => {
const tid = request.params.tid
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const aid = decoded.id
const sql = `SELECT COUNT(turniergruppen.id) AS count, turniergruppen.id, turniergruppen.disziplin, turniergruppen.gid, turniergruppen.geschlecht, turniergruppen.pool, teams.teamName
FROM turniergruppen, team_turniergruppe, teams
WHERE turnier_id = ${tid}
AND team_turniergruppe.turniergruppe_id = turniergruppen.id
AND (turniergruppen.disziplin = 'Kumite-Team' OR turniergruppen.disziplin = 'Kata-Team' OR turniergruppen.disziplin = 'Kata-Team-Mixed')
And teams.id = team_turniergruppe.team_id
AND teams.account_id = ${aid}
GROUP BY turniergruppen.id`;
GROUP BY turniergruppen.id`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
return resolve(results);
});
});
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log('result', results)
return resolve(results)
})
})
},
auth: 'admin'
}
},
{
// Anzahl gemeldeter Teams eines Accounts pro Gruppe
method: 'GET',
path: '/countTeams/{tid}',
handler: async (request, h) => {
return new Promise((resolve) => {
const tid = request.params.tid;
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
const aid = decoded.id;
const sql = `SELECT COUNT(*) as n FROM teams AS T1, team_turniergruppe AS T2
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
},
auth: 'admin',
},
},
{
// Anzahl gemeldeter Teams eines Accounts pro Gruppe
method: 'GET',
path: '/countTeams/{tid}',
handler: async (request, h) => {
return new Promise((resolve) => {
const tid = request.params.tid
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const aid = decoded.id
const sql = `SELECT COUNT(*) as n FROM teams AS T1, team_turniergruppe AS T2
WHERE T1.account_id=${aid}
AND T1.id = T2.team_id
AND T2.turniergruppe_id=${tid}`;
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
// console.log('result', results);
return resolve(results[0].n);
});
});
},
options: {
validate: {
params: {
tid: Joi.number().integer().min(0)
}
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with']
},
auth: 'admin'
}
},
{
// Team hinzufügen
method: 'PUT',
path: '/registerTeam',
handler: async (request, h) => {
return new Promise((resolve) => {
const token = request.query.token;
const decoded = jwt.verify(token, process.env.JWT_KEY);
const aid = decoded.id;
const {teamName, turniergruppeId} = request.payload;
const d = new Date(Date.now());
const now = d.getFullYear() + "-" +
("00" + (d.getMonth() + 1)).slice(-2) + "-" +
("00" + d.getDate()).slice(-2) + " " +
("00" + d.getHours()).slice(-2) + ":" +
("00" + d.getMinutes()).slice(-2) + ":" +
("00" + d.getSeconds()).slice(-2)
console.log(
'teamName', teamName,
'turniergruppeId', turniergruppeId,
);
let teamid;
let sql = `INSERT INTO teams (id, teamName, account_id) VALUES (NULL, '${teamName}', ${aid});`;
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
});
sql = `SELECT id FROM teams ORDER BY id DESC LIMIT 1`;
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
teamid = results[0].id;
console.log('results', results[0].id);
console.log('teamid', teamid);
sql = `INSERT INTO team_turniergruppe (team_id, turniergruppe_id, erstellt) VALUES (${teamid}, ${turniergruppeId}, '${now}');`;
AND T2.turniergruppe_id=${tid}`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log(results);
return resolve(results);
});
});
// console.log('query2', query2)
});
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
if (err) console.error(err)
// console.log('result', results);
return resolve(results[0].n)
})
})
},
auth: 'admin'
}
},
{
// Team entfernen
method: 'PUT',
path: '/deregisterTeam',
handler: async (request, h) => {
return new Promise((resolve) => {
const {teamName, turniergruppeId} = request.payload;
console.log(
'teamName', teamName,
'turniergruppeId', turniergruppeId,
);
let sql = `SELECT team_id FROM team_turniergruppe, teams
options: {
validate: {
params: {
tid: Joi.number().integer().min(0),
},
},
// TODO CORS ENTFERNE
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
},
auth: 'admin',
},
},
{
// Team hinzufügen
method: 'PUT',
path: '/registerTeam',
handler: async (request, h) => {
return new Promise((resolve) => {
const token = request.query.token
const decoded = jwt.verify(token, process.env.JWT_KEY)
const aid = decoded.id
const { teamName, turniergruppeId } = request.payload
console.log('teamName', teamName, 'turniergruppeId', turniergruppeId)
let teamid
let sql = `INSERT INTO teams (id, teamName, account_id) VALUES (NULL, '${teamName}', ${aid});`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log('result', results)
})
sql = `SELECT id FROM teams ORDER BY id DESC LIMIT 1`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
teamid = results[0].id
console.log('results', results[0].id)
console.log('teamid', teamid)
sql = `INSERT INTO team_turniergruppe (team_id, turniergruppe_id, erstellt) VALUES (${teamid}, ${turniergruppeId}, '${utils.timestamp()}');`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log(results)
return resolve(results)
})
})
// console.log('query2', query2)
})
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
},
auth: 'admin',
},
},
{
// Team entfernen
method: 'PUT',
path: '/deregisterTeam',
handler: async (request, h) => {
return new Promise((resolve) => {
const { teamName, turniergruppeId } = request.payload
console.log('teamName', teamName, 'turniergruppeId', turniergruppeId)
let sql = `SELECT team_id FROM team_turniergruppe, teams
WHERE team_turniergruppe.team_id = teams.id
AND team_turniergruppe.turniergruppe_id = ${turniergruppeId}
AND teams.teamName = '${teamName}'
ORDER BY team_id DESC LIMIT 1`;
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
sql = `DELETE FROM team_turniergruppe
WHERE turniergruppe_id = ${turniergruppeId}
AND team_id = '${results[0].team_id}'`;
ORDER BY team_id DESC LIMIT 1`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err);
console.log('result', results);
return resolve(results);
});
});
});
},
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token']
if (err) console.error(err)
console.log('result', results)
sql = `DELETE FROM team_turniergruppe
WHERE turniergruppe_id = ${turniergruppeId}
AND team_id = '${results[0].team_id}'`
request.app.db.query(sql, (err, results) => {
if (err) console.error(err)
console.log('result', results)
return resolve(results)
})
})
})
},
auth: 'admin'
}
},
])};
options: {
cors: {
origin: ['*'],
additionalHeaders: ['cache-control', 'x-requested-with'],
exposedHeaders: ['x-kt-account', 'x-kt-admin', 'x-kt-token'],
},
auth: 'admin',
},
},
])
}

View File

@@ -1,16 +1,17 @@
'use strict';
'use strict'
const Hapi = require('@hapi/hapi');
const {configureAuth} = require('./auth');
const {configureAccountRoutes} = require('./routes/account');
const {configureLoginRoutes} = require('./routes/login');
const {configureEncounterRoutes} = require('./routes/encounter');
const {configureTournamentRoutes} = require('./routes/tournament');
const {configureGroupRoutes} = require('./routes/group');
const {configureParticipantRoutes} = require('./routes/participant');
const {configureTeamRoutes} = require('./routes/team');
const {configureRoutes} = require('./routes');
require('dotenv').config();
const Hapi = require('@hapi/hapi')
const { configureAuth } = require('./auth')
const { configureAccountRoutes } = require('./routes/account')
const { configureLoginRoutes } = require('./routes/login')
const { configureEncounterRoutes } = require('./routes/encounter')
const { configureTournamentRoutes } = require('./routes/tournament')
const { configureGroupRoutes } = require('./routes/group')
const { configureParticipantRoutes } = require('./routes/participant')
const { configurePoolRoutes } = require('./routes/pool')
const { configureTeamRoutes } = require('./routes/team')
const { configureRoutes } = require('./routes')
require('dotenv').config()
// const Bcrypt = require('bcrypt');
@@ -19,18 +20,19 @@ const init = async () => {
const server = new Hapi.Server({
host: process.env.HOST,
port: process.env.PORT,
routes: {cors: true}
});
await configureAuth(server);
await configureAccountRoutes(server);
await configureLoginRoutes(server);
await configureEncounterRoutes(server);
await configureTournamentRoutes(server);
await configureGroupRoutes(server);
await configureParticipantRoutes(server);
await configureTeamRoutes(server);
await configureRoutes(server);
routes: { cors: true },
})
await configureAuth(server)
await configureAccountRoutes(server)
await configureLoginRoutes(server)
await configureEncounterRoutes(server)
await configureTournamentRoutes(server)
await configureGroupRoutes(server)
await configureParticipantRoutes(server)
await configurePoolRoutes(server)
await configureTeamRoutes(server)
await configureRoutes(server)
await server.register({
plugin: require('hapi-plugin-mysql'),
@@ -41,20 +43,20 @@ const init = async () => {
password: process.env.DB_PASS,
database: process.env.DB_DB,
connectionLimit: 10,
debug:false,
debug: false,
waitForConnections: true,
multipleStatements: true
}
});
multipleStatements: true,
},
})
await server.start();
return server;
};
await server.start()
return server
}
init().then(server => {
console.log('Server running at:', server.info.uri);
})
.catch(error => {
console.log(error);
});
init()
.then((server) => {
console.log('Server running at:', server.info.uri)
})
.catch((error) => {
console.log(error)
})

View File

@@ -1,4 +0,0 @@
GET http://localhost:8000/checkToken?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Im1hcmlvQHdhdHRzY2hlLmRlIiwiaWQiOjEwNDQsImFkbWluIjoieSIsImlhdCI6MTYxNDg1OTQ4NywiZXhwIjoxNjE0OTQ1ODg3fQ.OuC72R2_tPnYNDgbXBT6mKAOZ3kYhYXKGkq4jGjKHWA HTTP/1.1
###

16
utils.js Normal file
View File

@@ -0,0 +1,16 @@
exports.timestamp = () => {
const d = new Date(Date.now())
return (
d.getFullYear() +
'-' +
('00' + (d.getMonth() + 1)).slice(-2) +
'-' +
('00' + d.getDate()).slice(-2) +
' ' +
('00' + d.getHours()).slice(-2) +
':' +
('00' + d.getMinutes()).slice(-2) +
':' +
('00' + d.getSeconds()).slice(-2)
)
}