Przygotowanie pod API

main
kry008 2025-01-08 07:48:06 +01:00
parent 149d58dc20
commit 7df3c6aea0
4 changed files with 137 additions and 145 deletions

View File

@ -0,0 +1,43 @@
const express = require('express');
const apiLiczacy = express.Router();
const fs = require('fs');
require('dotenv').config();
//mysql
var mysql = require('mysql2');
var con = mysql.createConnection({
host: process.env.MYSQLHOST,
user: process.env.MYSQLUSER,
password: process.env.MYSQLPASS,
port : process.env.MYSQLPORT,
database: process.env.MYSQLDB,
insecureAuth : true
});
con.connect(function(err) {
if (err) throw err;
console.log('Connected!');
});
var bodyParser = require('body-parser');
apiLiczacy.use(bodyParser.json());
const {loger, sendToDiscord, sendEmail, makeid, checkSendEmail, baza} = require('./func.js');
apiLiczacy.use(function(req, res, next) {
var token = req.headers.token || req.body.token;
con.query("SELECT * FROM tokenyLiczacy WHERE token = ? AND aktywny = 1", [token], function(err, result) {
if(result.length > 0) {
var czas = new Date(result[0].czasAktywacji);
var now = new Date();
if(now.getTime() - czas.getTime() > 86400000) {
res.send(403, {response: "Zaloguj się ponownie"});
} else {
next();
}
}
else {
res.send(403, {response: "Nie jesteś zalogowany"});
}
});
});
module.exports = apiLiczacy;

View File

@ -0,0 +1,68 @@
const express = require('express');
const apiPanel = express.Router();
const fs = require('fs');
require('dotenv').config();
//mysql
var mysql = require('mysql2');
var con = mysql.createConnection({
host: process.env.MYSQLHOST,
user: process.env.MYSQLUSER,
password: process.env.MYSQLPASS,
port : process.env.MYSQLPORT,
database: process.env.MYSQLDB,
insecureAuth : true
});
con.connect(function(err) {
if (err) throw err;
console.log('Connected!');
});
var bodyParser = require('body-parser');
apiPanel.use(bodyParser.json());
const {checkPesel, loger, sendToDiscord, sendEmail, makeid, checkSendEmail, baza, massEmail} = require('./func.js');
//sprawdź czy token jest w bazie i jest 24h od generacji, jeżeli starszy zwróć że trzeba się zalogować ponownie
apiPanel.use(function(req, res, next) {
var token = req.headers.token || req.body.token;
con.query("SELECT * FROM tokeny WHERE token = ? AND aktywny = 1", [token], function(err, result) {
if(result.length > 0) {
var czas = new Date(result[0].czasAktywacji);
var now = new Date();
if(now.getTime() - czas.getTime() > 86400000) {
res.send(403, {response: "Zaloguj się ponownie"});
} else {
next();
}
}
else {
res.send(403, {response: "Nie jesteś zalogowany"});
}
});
});
apiPanel.post("/liczacy", function(req, res) {
var imie = req.body.imie;
var nazwisko = req.body.nazwisko;
var qr = makeid(24);
con.query("SELECT * FROM liczacy WHERE qr = ?", [qr], function(err, result) {
if(result.length > 0) {
res.send(400, {response: "Błąd, spróbuj ponownie"});
} else {
con.query("SELECT * FROM liczacy WHERE imie = ? AND nazwisko = ? AND aktywne = 1", [imie, nazwisko], function(err, result) {
if(result.length > 0) {
res.send(403, {response: "Błąd, spróbuj ponownie, taka osoba istnieje"});
} else {
con.query("INSERT INTO liczacy (imie, nazwisko, qr) VALUES (?, ?, ?)", [imie, nazwisko, qr], function(err, result) {
res.send({response: "Dodano", qr: qr});
});
}
});
}
});
});
module.exports = apiPanel;

View File

@ -1,5 +1,5 @@
const express = require('express'); const express = require('express');
const route = express.Router(); const api = express.Router();
const fs = require('fs'); const fs = require('fs');
require('dotenv').config(); require('dotenv').config();
@ -12,171 +12,52 @@ var con = mysql.createConnection({
port : process.env.MYSQLPORT, port : process.env.MYSQLPORT,
database: process.env.MYSQLDB, database: process.env.MYSQLDB,
insecureAuth : true insecureAuth : true
}); });
con.connect(function(err) { con.connect(function(err) {
if (err) throw err; if (err) throw err;
console.log('Connected!'); console.log('Connected!');
}); });
var cookie = require('cookie');
var app = express();
var bodyParser = require('body-parser'); var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ const {makeid} = require('./func.js');
extended: true
}));
//import functions from func.js
const {makeid, loger} = require('./func.js');
//login via api api.use(bodyParser.json());
route.post('/', function(req, res) {
//in post there is login and password (already hashed) api.post("/loginPanel", function(req, res) {
console.log(req.body);
var login = req.body.login; var login = req.body.login;
var password = req.body.password; var password = req.body.password;
con.query('SELECT * FROM login WHERE login = ? AND haslo = ? AND aktywne = 1', [login, password], function(err, result) { con.query("SELECT * FROM login WHERE login = ? AND haslo = ?", [login, password], function(err, result) {
if (err) throw err; //jeżeli znajdziesz wygeneruj token i zapamiętaj go w bazie
if (result.length > 0) { if (result.length > 0) {
var token = makeid(32); var token = makeid(64);
con.query('INSERT INTO tokeny (token, typ, userId) VALUES (?, 1, ?)', [token, result[0].id], function(err, result) { con.query("INSERT INTO tokeny (token, userId) VALUES (?, ?)", [token, result[0].id], function(err, result) {
if (err) throw err; res.send({response: "Zalogowano", token: token});
res.cookie('token', token);
res.json({status: 'ok', token: token});
loger(fs, 'Użytkownik zalogował się do panelu, token: ' + token, 'info');
}); });
}
else {
//send code 401
res.status(401).json({status: 'error'});
loger(fs, 'Użytkownik nie zalogował się do panelu, login: ' + login, 'error');
}
});
});
route.use(function(req, res, next) {
var cookies = cookie.parse(req.headers.cookie || '') || req.body.token || req.query.token || req.headers['x-access-token'];
var token = cookies.token;
con.query('SELECT * FROM tokeny, login WHERE token = ? AND tokeny.userId = login.id AND aktywny = 1', [token], function(err, result) {
if (err) throw err;
if (result.length > 0) {
req.user = result[0];
next();
} else { } else {
res.json({status: 'not logged', goTo: '/api'}); res.send(403, {response: "Błędne dane logowania"});
loger(fs, 'Użytkownik nie zalogował się do panelu, token: ' + token, 'error');
} }
}); });
}); });
route.all("/test", function(req, res) { api.post("/loginLiczacy", function(req, res) {
res.json({status: 'ok'}); var qr = req.body.qr;
loger(fs, 'Użytkownik wykonał test', 'info'); con.query("SELECT * FROM liczacy WHERE qr = ? AND aktywne = 1", [qr], function(err, result) {
});
route.get("/osobyLiczace", function(req, res) {
con.query('SELECT * FROM liczacy WHERE aktywne = 1', function(err, result) {
if (err) throw err;
res.json(result);
loger(fs, 'Użytkownik wyświetlił listę osób liczących', 'info');
});
});
route.post("/osobyLiczace", function(req, res) {
//sprawdzenie czy nie ma już takiej osoby
con.query('SELECT * FROM liczacy WHERE imie = ? AND nazwisko = ? AND aktywne = 1', [req.body.imie, req.body.nazwisko], function(err, result) {
if (err) throw err;
if(result.length > 0) { if(result.length > 0) {
res.json({status: 'error', message: 'Taka osoba już istnieje.'}); var token = makeid(64);
loger(fs, 'Użytkownik próbował dodać osobę liczącą, która już istnieje', 'error'); con.query("INSERT INTO tokenyLiczacy (token, userId) VALUES (?, ?)", [token, result[0].id], function(err, result) {
} else { res.send({response: "Zalogowano", token: token});
con.query('INSERT INTO liczacy (imie, nazwisko) VALUES (?, ?)', [req.body.imie, req.body.nazwisko], function(err, result) {
if (err) throw err;
res.json({status: 'ok'});
loger(fs, 'Użytkownik dodał osobę liczącą', 'info');
}); });
} else {
res.send(403, {response: "Błędny kod QR"});
} }
}); });
}); });
route.get("/listaWolontariuszy", function(req, res) { const apiPanel = require('./apiPanel.js');
con.query('SELECT * FROM wolontariusz WHERE aktywny = 1', function(err, result) { api.use('/panel', apiPanel);
if (err) throw err;
res.json(result);
loger(fs, 'Użytkownik wyświetlił listę wolontariuszy', 'info');
});
});
//edycja wolontariusza
route.put("/listaWolontariuszy", function(req, res) {
con.query('UPDATE wolontariusz SET imie = ?, nazwisko = ?, discord = ?, email = ?, telefon = ?, pesel = ?, terminal = ?, aktywny = ? WHERE id = ?', [req.body.imie, req.body.nazwisko, req.body.discord, req.body.email, req.body.telefon, req.body.pesel, req.body.terminal, req.body.aktywny, req.body.id], function(err, result) {
if (err) throw err;
res.json({status: 'ok'});
loger(fs, 'Użytkownik edytował wolontariusza', 'info');
});
});
//dodanie rozliczenia
route.post("/rozlicz", function(req, res) {
//sprawdzenie czy nie ma już takiego wolontariusza
con.query('SELECT * FROM rozliczenie WHERE wolontariuszID = ? AND aktywne = 1', [req.body.wolontariuszID], function(err, result) {
if (err) throw err;
if (result.length > 0) {
res.json({status: 'error', message: 'Taki wolontariusz już rozliczony.'});
loger(fs, 'Użytkownik próbował dodać rozliczenie, które już istnieje ID: ' + req.body.wolontariuszID, 'error');
} else {
$sql = "INSERT INTO `rozliczenie` (`id`, `wolontariuszID`, `czasRozliczenia`, `terminal`, `sumaZTerminala`, `1gr`, `2gr`, `5gr`, `10gr`, `20gr`, `50gr`, `1zl`, `2zl`, `5zl`, `10zl`, `20zl`, `50zl`, `100zl`, `200zl`, `500zl`, `walutaObca`, `daryInne`, `uwagi`, `liczacy1`, `liczacy2`, `liczacy3`, `sala`, `weryfikowal`, `wpisaneDoBSS`, `ostatniaZmiana`, `aktywne`) ";
$sql += 'VALUES (NULL, ?, CURRENT_TIME(), ?, ?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,CURRENT_TIME(),1)';
con.query($sql, [req.body.wolontariuszID, req.body.terminal, req.body.sumaZTerminala, req.body['1gr'], req.body['2gr'], req.body['5gr'], req.body['10gr'], req.body['20gr'], req.body['50gr'], req.body['1zl'], req.body['2zl'], req.body['5zl'], req.body['10zl'], req.body['20zl'], req.body['50zl'], req.body['100zl'], req.body['200zl'], req.body['500zl'], req.body.walutaObca, req.body.daryInne, req.body.uwagi, req.body.liczacy1, req.body.liczacy2, req.body.liczacy3, req.body.sala, req.body.weryfikowal], function(err, result) {
if (err) throw err;
res.json({status: 'ok'});
loger(fs, 'Użytkownik dodał rozliczenie dla wolontariusza ID: ' + req.body.wolontariuszID, 'info');
});
}
});
});
//lista rozliczeń
route.get("/rozliczenia", function(req, res) {
con.query('SELECT * FROM rozliczenie WHERE aktywne = 1', function(err, result) {
if (err) throw err;
res.json(result);
loger(fs, 'Użytkownik wyświetlił listę rozliczeń', 'info');
});
});
//edycja rozliczenia
route.put("/rozliczenia", function(req, res) {
con.query('UPDATE rozliczenie SET wolontariuszID = ?, czasRozliczenia = ?, terminal = ?, sumaZTerminala = ?, `1gr` = ?, `2gr` = ?, `5gr` = ?, `10gr` = ?, `20gr` = ?, `50gr` = ?, `1zl` = ?, `2zl` = ?, `5zl` = ?, `10zl` = ?, `20zl` = ?, `50zl` = ?, `100zl` = ?, `200zl` = ?, `500zl` = ?, walutaObca = ?, daryInne = ?, uwagi = ?, liczacy1 = ?, liczacy2 = ?, liczacy3 = ?, sala = ?, weryfikowal = ?, wpisaneDoBSS = ?, ostatniaZmiana = ? WHERE id = ?', [req.body.wolontariuszID, req.body.czasRozliczenia, req.body.terminal, req.body.sumaZTerminala, req.body['1gr'], req.body['2gr'], req.body['5gr'], req.body['10gr'], req.body['20gr'], req.body['50gr'], req.body['1zl'], req.body['2zl'], req.body['5zl'], req.body['10zl'], req.body['20zl'], req.body['50zl'], req.body['100zl'], req.body['200zl'], req.body['500zl'], req.body.walutaObca, req.body.daryInne, req.body.uwagi, req.body.liczacy1, req.body.liczacy2, req.body.liczacy3, req.body.sala, req.body.weryfikowal, req.body.wpisaneDoBSS, req.body.ostatniaZmiana, req.body.id], function(err, result) {
if (err) throw err;
res.json({status: 'ok'});
loger(fs, 'Użytkownik edytował rozliczenie ID: ' + req.body.id, 'info');
});
});
//statystyki const apiLiczacy = require('./apiLiczacy.js');
route.get("/statystyki/zebranePrzezWolontariuszy", function(req, res) { api.use('/liczacy', apiLiczacy);
con.query('SELECT * FROM SumaZebranaPrzezWolontariuszy ORDER BY suma ASC', function(err, result) {
if (err) throw err;
res.json(result);
});
});
route.get("/statystyki/liczacy", function(req, res) {
con.query('SELECT * FROM sumaPrzeliczona ORDER BY sumaPrzeliczona DESC', function(err, result) {
if (err) throw err;
res.json(result);
});
});
route.get("/statystyki/rozliczenia", function(req, res) {
con.query('SELECT COUNT(*) AS liczba FROM rozliczenie WHERE aktywne = 1', function(err, result) {
if (err) throw err;
res.json(result);
});
});
route.get("/statystyki/rozliczenia/ostatnie", function(req, res) {
con.query('SELECT * FROM rozliczenie WHERE aktywne = 1 ORDER BY czasRozliczenia DESC LIMIT 10', function(err, result) {
if (err) throw err;
res.json(result);
});
});
module.exports = route; module.exports = api;

View File

@ -64,7 +64,7 @@ function tryConnect() {
const panelRoutes = require('./panelRoutes.js'); const panelRoutes = require('./panelRoutes.js');
const liczacy = require('./liczacy.js'); const liczacy = require('./liczacy.js');
//const apiRoutes = require('./apiRoutes'); const apiRoutes = require('./apiRoutes.js');
app.get('/', function(req, res) { app.get('/', function(req, res) {
res.redirect('/panel'); res.redirect('/panel');
@ -187,7 +187,7 @@ function tryConnect() {
app.use('/panel', panelRoutes); app.use('/panel', panelRoutes);
app.use('/liczacy', liczacy); app.use('/liczacy', liczacy);
//app.use('/api', apiRoutes); app.use('/api', apiRoutes);
app.all('/statystyki2', function(req, res) { app.all('/statystyki2', function(req, res) {
var toReturn = headerHtml("Statystyki"); var toReturn = headerHtml("Statystyki");