Aggiorna api_v1/server.js

This commit is contained in:
Fabio 2026-02-20 18:56:34 +08:00
parent 242256dba6
commit 2c2f125ef7

View file

@ -1,190 +1,115 @@
/** const fs = require('fs');
* Require necessary libraries const bodyParser = require('body-parser');
*/ const jsonServer = require('json-server');
const fs = require('fs') const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser') const bcrypt = require('bcrypt');
const jsonServer = require('json-server')
const jwt = require('jsonwebtoken')
const bcrypt = require('bcrypt')
const path = require('path'); const path = require('path');
const scanPhoto = require('./scanphoto.js') const scanPhoto = require('./scanphoto.js');
const SECRET_KEY = '123456789';
const expiresIn = '1h';
// JWT confing data const server = jsonServer.create();
const SECRET_KEY = '123456789'
const expiresIn = '1h'
// Create server // Serve static files
var server = jsonServer.create() server.use(jsonServer.defaults({
static: path.join(__dirname, '../public')
}));
// Create router // Router
if(fs.existsSync('./api_v1/db.json')){ let router;
var router = jsonServer.router('./api_v1/db.json') if (fs.existsSync('./api_v1/db.json')) {
router = jsonServer.router('./api_v1/db.json');
} else { } else {
const initialData = fs.readFileSync('api_v1/initialDB.json', 'utf8'); const initialData = fs.readFileSync('api_v1/initialDB.json', 'utf8');
// to update (sync) current database (db.json) file
fs.writeFileSync('api_v1/db.json', initialData); fs.writeFileSync('api_v1/db.json', initialData);
var router = jsonServer.router('./api_v1/db.json') router = jsonServer.router('./api_v1/db.json');
} }
// Create router // Users DB
var router = jsonServer.router('./api_v1/db.json') const userdb = JSON.parse(fs.readFileSync('./api_v1/users.json', 'UTF-8'));
// Users database server.use(bodyParser.urlencoded({ extended: true }));
const userdb = JSON.parse(fs.readFileSync('./api_v1/users.json', 'UTF-8')) server.use(bodyParser.json());
// Default middlewares
server.use(bodyParser.urlencoded({ extended: true }))
server.use(bodyParser.json())
// Create a token from a payload
function createToken(payload) { function createToken(payload) {
return jwt.sign(payload, SECRET_KEY, { expiresIn }) return jwt.sign(payload, SECRET_KEY, { expiresIn });
} }
// Verify the token
function verifyToken(token) { function verifyToken(token) {
return jwt.verify( return jwt.verify(token, SECRET_KEY, (err, decode) => decode || err);
token,
SECRET_KEY,
(err, decode) => (decode !== undefined ? decode : err)
)
} }
// Check if the user exists in database
function isAuthenticated({ email, password }) { function isAuthenticated({ email, password }) {
return ( return userdb.users.findIndex(
userdb.users.findIndex( user => user.email === email && bcrypt.compareSync(password, user.password)
user => ) !== -1;
user.email === email && bcrypt.compareSync(password, user.password)
) !== -1
)
} }
function azz(){ function azz() {
const initialData = fs.readFileSync('api_v1/initialDB.json', 'utf8'); const initialData = fs.readFileSync('api_v1/initialDB.json', 'utf8');
// to update (sync) current database (db.json) file
fs.writeFileSync('api_v1/db.json', initialData); fs.writeFileSync('api_v1/db.json', initialData);
router.db.setState(JSON.parse(initialData)); router.db.setState(JSON.parse(initialData));
console.log('DB resettato'); console.log('DB resettato');
} }
// Home → public/index.html
// con 192.168.1.3:7771/ apre http:192.168.1.3:7771/public.index.html
server.get('/', (req, res) => { server.get('/', (req, res) => {
//console.log(req.query) res.sendFile(path.resolve("public/index.html"));
res.sendFile(path.resolve("public/index.html")) });
})
// scansiona le foto // Scan photos
server.get('/scan', async (req, res) => { server.get('/scan', async (req, res) => {
azz(); azz();
await scanPhoto('./public/photos/original') await scanPhoto('./public/photos/original');
console.log("Ricaricato") console.log("Ricaricato");
res.send({status: 'Ricaricato'}) res.send({ status: 'Ricaricato' });
})
// esempio http:192.168.1.3:7771/files?file=mio.txt
server.get('/files', (req, res) => {
console.log(req.query)
res.sendFile(path.resolve("public/"+req.query.file))
})
server.get('/initDB1',(req, res, next) => {
const Data = { photos: []};
// to update (sync) current database (db.json) file
fs.writeFileSync('api_v1/db.json', JSON.stringify(Data));
router.db.setState(Data);
res.send({status: 'DB resettato'});
//res.sendStatus(200);
}); });
server.get('/initDB',(req, res, next) => { // Serve files
server.get('/files', (req, res) => {
res.sendFile(path.resolve("public/" + req.query.file));
});
// Reset DB
server.get('/initDB', (req, res) => {
const initialData = fs.readFileSync('api_v1/initialDB.json', 'utf8'); const initialData = fs.readFileSync('api_v1/initialDB.json', 'utf8');
// to update (sync) current database (db.json) file
fs.writeFileSync('api_v1/db.json', initialData); fs.writeFileSync('api_v1/db.json', initialData);
router.db.setState(JSON.parse(initialData)); router.db.setState(JSON.parse(initialData));
//router = jsonServer.router('./api_v1/db.json') res.send({ status: 'DB resettato' });
res.send({status: 'DB resettato'});
//res.sendStatus(200);
}); });
server.get('/log', (req, res) => { // Login
console.log(server)
})
/*
server.use((req, res, next) => {
console.log(req.headers);
console.log(req.method);
console.log(req.path);
var a = req.path.split("/");
if (req.method === 'GET' && a[1] == 'pub' && a.length > 2) {
//console.log(req.headers.host);
//console.log(a.slice(2).join("/"));
res.status(200).sendFile(path.resolve("public/"+a.slice(2).join("/")));
//res.sendStatus(200);
} else {
next();
}
})
*/
server.use((req, res, next) => {
console.log(req.headers);
console.log(req.method);
console.log(req.path);
var a = req.path.split("/");
if (req.method === 'GET' && a[1] == 'pub' && a.length > 2) {
//console.log(req.headers.host);
//console.log(a.slice(2).join("/"));
res.status(200).sendFile(path.resolve("public/"+req.path));
//res.sendStatus(200);
} else {
next();
}
})
/**
* Method: POST
* Endpoint: /auth/login
*/
server.post('/auth/login', (req, res) => { server.post('/auth/login', (req, res) => {
const { email, password } = req.body const { email, password } = req.body;
if (isAuthenticated({ email, password }) === false) {
const status = 401
const message = 'Incorrect email or password'
res.status(status).json({ status, message })
return
}
const token = createToken({ email, password })
res.status(200).json({ token })
})
/** if (!isAuthenticated({ email, password })) {
* Middleware: Check authorization return res.status(401).json({ status: 401, message: 'Incorrect email or password' });
*/ }
const token = createToken({ email, password });
res.status(200).json({ token });
});
// Auth middleware
server.use(/^(?!\/auth).*$/, (req, res, next) => { server.use(/^(?!\/auth).*$/, (req, res, next) => {
if ( if (!req.headers.authorization || req.headers.authorization.split(' ')[0] !== 'Bearer') {
req.headers.authorization === undefined || return res.status(401).json({ status: 401, message: 'Bad authorization header' });
req.headers.authorization.split(' ')[0] !== 'Bearer'
) {
const status = 401
const message = 'Bad authorization header'
res.status(status).json({ status, message })
return
} }
try {
verifyToken(req.headers.authorization.split(' ')[1])
next()
} catch (err) {
const status = 401
const message = 'Error: access_token is not valid'
res.status(status).json({ status, message })
}
})
// Server mount try {
server.use(router) verifyToken(req.headers.authorization.split(' ')[1]);
server.listen(3000, () => { next();
console.log('Auth API server runing on port 3000 ...') } catch (err) {
}) res.status(401).json({ status: 401, message: 'Error: access_token is not valid' });
}
});
// Mount router
server.use(router);
// Start server on 4000
server.listen(4000, () => {
console.log('Auth API server running on port 4000 ...');
});