Aggiorna api_v1/server.js
This commit is contained in:
parent
242256dba6
commit
2c2f125ef7
1 changed files with 79 additions and 154 deletions
233
api_v1/server.js
233
api_v1/server.js
|
|
@ -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);
|
router = jsonServer.router('./api_v1/db.json');
|
||||||
var 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' });
|
||||||
})
|
});
|
||||||
|
|
||||||
|
// Serve files
|
||||||
// esempio http:192.168.1.3:7771/files?file=mio.txt
|
|
||||||
server.get('/files', (req, res) => {
|
server.get('/files', (req, res) => {
|
||||||
console.log(req.query)
|
res.sendFile(path.resolve("public/" + req.query.file));
|
||||||
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) => {
|
// Reset DB
|
||||||
const initialData = fs.readFileSync('api_v1/initialDB.json', 'utf8');
|
server.get('/initDB', (req, res) => {
|
||||||
// to update (sync) current database (db.json) file
|
const initialData = fs.readFileSync('api_v1/initialDB.json', 'utf8');
|
||||||
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 ...');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue