122 lines
3.5 KiB
JavaScript
122 lines
3.5 KiB
JavaScript
const express = require('express')
|
|
const sqlite3 = require('sqlite3').verbose()
|
|
const path = require('path')
|
|
const bcrypt = require('crypto')
|
|
|
|
const app = express()
|
|
const port = 3000
|
|
|
|
// Create a new SQLite database in memory
|
|
const db = new sqlite3.Database('ruscodb')
|
|
|
|
// Create a table to store data
|
|
db.serialize(() => {
|
|
db.get(
|
|
`SELECT name FROM sqlite_master WHERE type='table' AND name='ruschi';`,
|
|
(err, row) => {
|
|
if (!row) {
|
|
db.run(
|
|
'CREATE TABLE ruschi (id INTEGER PRIMARY KEY, type TEXT, name TEXT, description TEXT, image_url TEXT, latitude REAL, longitude REAL)'
|
|
)
|
|
}
|
|
}
|
|
)
|
|
})
|
|
|
|
app.use(express.static(path.join(__dirname, 'public')))
|
|
app.use(express.json())
|
|
// app.get('/', (req, res) => {
|
|
// res.sendFile('index.html')
|
|
// });
|
|
|
|
// Insert a new item into the database
|
|
app.post('/addRuschi', (req, res) => {
|
|
const { name, description, imageUrl, latitude, longitude } = req.body
|
|
const type = 'bho'
|
|
db.run(
|
|
'INSERT INTO ruschi (type, name, description, image_url, latitude, longitude) VALUES (?, ?, ?, ?, ?, ?)',
|
|
[type, name, description, imageUrl, latitude, longitude],
|
|
function (err) {
|
|
if (err) {
|
|
return console.error(err.message)
|
|
}
|
|
console.log(`A row has been inserted with rowid ${this.lastID}`)
|
|
res.send(`Item added with ID: ${this.lastID}`)
|
|
}
|
|
)
|
|
})
|
|
|
|
// Retrieve all items from the database
|
|
app.get('/getRuschi', (req, res) => {
|
|
db.all('SELECT * FROM ruschi', [], (err, rows) => {
|
|
if (err) {
|
|
return console.error(err.message)
|
|
}
|
|
let ruschi = []
|
|
rows.forEach(rusco => {
|
|
const coordinates = { latitude: rusco.latitude, longitude: rusco.longitude }
|
|
const marker = {
|
|
type: "Feature",
|
|
properties: {
|
|
name: rusco.name,
|
|
description: rusco.description,
|
|
image_url: rusco.image_url,
|
|
},
|
|
geometry: {
|
|
type: rusco.type,
|
|
coordinates: coordinates
|
|
}
|
|
}
|
|
ruschi.push(marker)
|
|
})
|
|
return res.json(ruschi)
|
|
})
|
|
})
|
|
|
|
app.post('/login', (req, res) => {
|
|
const username = req.body.username
|
|
const password = req.body.password
|
|
const hashedPassword = bcrypt
|
|
.createHash('sha256')
|
|
.update(password)
|
|
.digest('base64') //.digest('base64');
|
|
|
|
db.all(
|
|
'SELECT * FROM users WHERE username = ? AND password = ?',
|
|
[username, hashedPassword],
|
|
(err, rows) => {
|
|
if (err) {
|
|
return console.error(err.message)
|
|
}
|
|
if (rows.length == 1) {
|
|
return res.json('Logged in')
|
|
}
|
|
return res.json('Incorrect username or password')
|
|
}
|
|
)
|
|
})
|
|
|
|
app.post('/register', (req, res) => {
|
|
console.log(req.body)
|
|
const username = req.body.username
|
|
const password = req.body.password
|
|
const hashedPassword = bcrypt
|
|
.createHash('sha256')
|
|
.update(password)
|
|
.digest('base64') //.digest('base64');
|
|
db.run(
|
|
'insert into users (username, password) VALUES (?, ?)',
|
|
[username, hashedPassword],
|
|
(err, rows) => {
|
|
if (err) {
|
|
return console.error(err.message)
|
|
}
|
|
res.json('OK')
|
|
}
|
|
)
|
|
})
|
|
|
|
// Start the server
|
|
app.listen(port, () => {
|
|
console.log(`Server is running on http://localhost:${port}`)
|
|
})
|