mirror of
https://github.com/spacedeck/spacedeck-open.git
synced 2025-12-16 01:47:30 +01:00
Port Backend to SQLite/Sequelize (removes MongoDB), Support Electron (#14)
* The MongoDB/Mongoose data storage is removed in favor of Sequelize. This abstracts over SQLite or RDBMs like PostgreSQL and MSSQL. The default is SQLite, which significantly simplifies deployments in end-user environments. * As Spacedeck now has no more mandatory server dependencies, we can wrap it in Electron and ship it as a desktop application. * Removes docker-compose.yml * First version of import UI
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
"use strict";
|
||||
|
||||
var config = require('config');
|
||||
require('../../models/schema');
|
||||
const db = require('../../models/db');
|
||||
|
||||
var bcrypt = require('bcryptjs');
|
||||
var crypo = require('crypto');
|
||||
var crypto = require('crypto');
|
||||
var URL = require('url').URL;
|
||||
|
||||
var express = require('express');
|
||||
@@ -12,68 +12,64 @@ var router = express.Router();
|
||||
|
||||
router.post('/', function(req, res) {
|
||||
var data = req.body;
|
||||
if (data.email && data.password) {
|
||||
var email = req.body.email.toLowerCase();
|
||||
var password = req.body["password"];
|
||||
|
||||
User.find({email: email, account_type: "email"}, (function (err, users) {
|
||||
if (err) {
|
||||
res.status(400).json({"error":"session.users"});
|
||||
} else {
|
||||
|
||||
if (users.length == 1) {
|
||||
var user = users[0];
|
||||
|
||||
if (bcrypt.compareSync(password, user.password_hash)) {
|
||||
crypo.randomBytes(48, function(ex, buf) {
|
||||
var token = buf.toString('hex');
|
||||
|
||||
var session = {
|
||||
token: token,
|
||||
ip: req.ip,
|
||||
device: "web",
|
||||
created_at: new Date()
|
||||
};
|
||||
|
||||
if (!user.sessions)
|
||||
user.sessions = [];
|
||||
|
||||
user.sessions.push(session);
|
||||
|
||||
user.save(function(err, result) {
|
||||
if (err) console.error("Error saving user:",err);
|
||||
|
||||
var domain = (process.env.NODE_ENV == "production") ? new URL(config.get('endpoint')).hostname : "localhost";
|
||||
|
||||
res.cookie('sdsession', token, { domain: domain, httpOnly: true });
|
||||
res.status(201).json(session);
|
||||
});
|
||||
});
|
||||
}else{
|
||||
res.sendStatus(403);
|
||||
}
|
||||
} else {
|
||||
res.sendStatus(404);
|
||||
}
|
||||
}
|
||||
}));
|
||||
} else {
|
||||
if (!data.email || !data.password) {
|
||||
res.status(400).json({});
|
||||
return;
|
||||
}
|
||||
|
||||
var email = req.body.email.toLowerCase();
|
||||
var password = req.body["password"];
|
||||
|
||||
db.User.findOne({where: {email: email}})
|
||||
.error(err => {
|
||||
res.sendStatus(404);
|
||||
//res.status(400).json({"error":"session.users"});
|
||||
})
|
||||
.then(user => {
|
||||
console.log("!!! user: ",user.password_hash);
|
||||
|
||||
if (bcrypt.compareSync(password, user.password_hash)) {
|
||||
crypto.randomBytes(48, function(ex, buf) {
|
||||
var token = buf.toString('hex');
|
||||
console.log("!!! token: ",token);
|
||||
|
||||
var session = {
|
||||
user_id: user._id,
|
||||
token: token,
|
||||
ip: req.ip,
|
||||
device: "web",
|
||||
created_at: new Date()
|
||||
};
|
||||
|
||||
db.Session.create(session)
|
||||
.error(err => {
|
||||
console.error("Error creating Session:",err);
|
||||
res.sendStatus(500);
|
||||
})
|
||||
.then(() => {
|
||||
var domain = (process.env.NODE_ENV == "production") ? new URL(config.get('endpoint')).hostname : "localhost";
|
||||
res.cookie('sdsession', token, { domain: domain, httpOnly: true });
|
||||
res.status(201).json(session);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
res.sendStatus(403);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
router.delete('/current', function(req, res, next) {
|
||||
if (req.user) {
|
||||
var user = req.user;
|
||||
/*var user = req.user;
|
||||
var newSessions = user.sessions.filter( function(session){
|
||||
return session.token != req.token;
|
||||
});
|
||||
user.sessions = newSessions;
|
||||
user.save(function(err, result) {
|
||||
});*/
|
||||
//user.sessions = newSessions;
|
||||
//user.save(function(err, result) {
|
||||
var domain = new URL(config.get('endpoint')).hostname;
|
||||
res.clearCookie('sdsession', { domain: domain });
|
||||
res.sendStatus(204);
|
||||
});
|
||||
//});
|
||||
} else {
|
||||
res.sendStatus(404);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user