Files
freeplanet_serverside/src/server/router/users_router.js

305 lines
8.8 KiB
JavaScript
Raw Normal View History

2019-02-05 03:40:22 +01:00
const express = require('express');
const router = express.Router();
const { User } = require('../models/user');
const { ExtraList } = require('../models/extralist');
2019-02-05 03:40:22 +01:00
const sendemail = require('../sendemail');
2019-02-06 18:48:32 +01:00
const tools = require('../tools/general');
const shared_consts = require('../tools/shared_nodejs');
const server_constants = require('../tools/server_constants');
2019-02-06 18:48:32 +01:00
2019-02-05 03:40:22 +01:00
const _ = require('lodash');
const reg = require('../reg/registration');
2019-02-06 18:48:32 +01:00
const { authenticate } = require('../middleware/authenticate');
2019-02-05 03:40:22 +01:00
const mongoose = require('mongoose');
const Subscription = mongoose.model('subscribers');
function existSubScribe(userId, access, browser) {
return Subscription.findOne({ userId, access, browser })
.then(itemsub => {
return itemsub
})
.catch(err => {
return null
})
}
2019-02-05 03:40:22 +01:00
function getMobileComplete(user) {
let str = user.profile.intcode_cell + user.profile.cell;
str = str.replace(/\s+/g, '');
// str = str.replace(/.+/g, '');
// str = str.replace(/-+/g, '');
return str
}
2019-02-05 03:40:22 +01:00
// POST /users
2019-12-29 23:30:49 +01:00
router.post('/', async (req, res) => {
tools.mylog("POST /users");
const body = _.pick(req.body, ['email', 'password', 'username', 'name', 'surname', 'idapp', 'keyappid', 'lang', 'profile', 'aportador_solidario', 'already_registered']);
const user = new User(body);
2019-02-05 03:40:22 +01:00
// tools.mylog("LANG PASSATO = " + user.lang, "IDAPP", user.idapp);
2019-02-05 03:40:22 +01:00
user.linkreg = reg.getlinkregByEmail(body.idapp, body.email, body.username);
2019-02-05 03:40:22 +01:00
user.verified_email = false;
user.ipaddr = reg.getiPAddressUser(req);
user.lasttimeonline = new Date();
// user.perm = 3;
if (tools.testing()) {
2019-02-06 18:48:32 +01:00
user.verified_email = true;
}
2019-02-05 03:40:22 +01:00
2019-12-29 23:30:49 +01:00
let exit;
// Check if already esist email or username
exit = await User.findByUsername(user.idapp, user.username).then((useralreadyexist) => {
if (useralreadyexist) {
res.status(400).send({ code: server_constants.RIS_CODE_USERNAME_ALREADY_EXIST, msg: '' });
return 1;
}
});
if (exit === 1)
return;
exit = await User.findByEmail(user.idapp, user.email)
.then((useralreadyexist) => {
if (useralreadyexist) {
res.status(400).send({ code: server_constants.RIS_CODE_EMAIL_ALREADY_EXIST, msg: '' });
return 1;
}
});
if (exit === 1)
return;
let recextra = null;
2019-02-06 18:48:32 +01:00
if (user.already_registered) {
// Check in the extraList if is present!
recextra = await ExtraList.findByCellAndNameSurname(user.idapp, getMobileComplete(user), user.name, user.surname);
if (!recextra) {
res.status(400).send({ code: server_constants.RIS_CODE_USER_EXTRALIST_NOTFOUND, msg: '' });
return 1;
} else {
user.ind_order = recextra.ind_order;
user.date_reg = recextra.date_reg;
if (recextra.aportador_solidario_name_surname)
user.aportador_solidario_nome_completo = recextra.aportador_solidario_name_surname;
else
user.aportador_solidario_nome_completo = recextra.aportador_solidario_originale_name_surname;
user.aportador_solidario_ind_order = recextra.aportador_solidario_ind_order;
const useraportador = await ExtraList.findByIndOrder(user.idapp, user.aportador_solidario_ind_order);
if (useraportador)
user.aportador_solidario = useraportador.username;
}
}
return await user.save()
.then(async () => {
return await User.findByUsername(user.idapp, user.username)
.then((usertrovato) => {
// tools.mylog("TROVATO USERNAME ? ", user.username, usertrovato);
if (usertrovato !== null) {
return user.generateAuthToken(req);
} else {
res.status(400).send();
return 0;
}
})
.then(async (token) => {
// tools.mylog("passo il TOKEN: ", token);
if (recextra) {
recextra.registered = true;
recextra.username = user.username;
await recextra.save();
await User.fixUsername(user.idapp, user.ind_order, user.username);
}
return token;
})
.then(async (token) => {
// tools.mylog("LINKREG = " + user.linkreg);
// Invia un'email all'utente
// tools.mylog('process.env.TESTING_ON', process.env.TESTING_ON);
console.log('res.locale', res.locale);
if (!tools.testing()) {
await sendemail.sendEmail_Registration(user.lang, user.email, user, user.idapp, user.linkreg);
}
res.header('x-auth', token).send(user);
return true;
});
}).catch((e) => {
res.status(400).send(e);
})
2019-02-05 03:40:22 +01:00
});
2019-12-29 23:30:49 +01:00
router.get('/:idapp/:username', (req, res) => {
2019-02-05 03:40:22 +01:00
var username = req.params.username;
const idapp = req.params.idapp;
2019-02-05 03:40:22 +01:00
User.findByUsername(idapp, username).then((user) => {
2019-02-05 03:40:22 +01:00
if (!user) {
return res.status(404).send();
}
res.status(200).send();
}).catch((e) => {
res.status(400).send();
});
});
router.patch('/:id', authenticate, (req, res) => {
const id = req.params.id;
const body = _.pick(req.body.user, shared_consts.fieldsUserToChange());
tools.mylogshow('PATCH USER: ', id);
2020-01-03 22:02:18 +01:00
if (!User.isAdmin(req.user.perm)) {
// If without permissions, exit
return res.status(404).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
}
User.findByIdAndUpdate(id, { $set: body }).then((user) => {
tools.mylogshow(' USER TO MODIFY: ', user);
if (!user) {
return res.status(404).send();
} else {
res.send({ code: server_constants.RIS_CODE_OK, msg: '' });
}
}).catch((e) => {
tools.mylogserr('Error patch USER: ', e);
res.status(400).send();
})
});
2019-02-05 03:40:22 +01:00
router.post('/login', (req, res) => {
var body = _.pick(req.body, ['username', 'password', 'idapp', 'keyappid', 'lang']);
var user = new User(body);
2019-02-13 18:47:58 +01:00
// const subs = _.pick(req.body, ['subs']);
2019-02-05 03:40:22 +01:00
// tools.mylog("LOGIN: username: " + user.username + " pwd = " + user.password);
2019-02-06 18:48:32 +01:00
// tools.mylog("user REC:", user);
2019-02-05 03:40:22 +01:00
if (body.keyappid !== process.env.KEY_APP_ID)
return res.status(400).send();
2019-02-13 18:47:58 +01:00
let resalreadysent = false;
2019-02-05 03:40:22 +01:00
User.findByCredentials(user.idapp, user.username, user.password)
2019-02-05 03:40:22 +01:00
.then((user) => {
// tools.mylog("CREDENZIALI ! ");
2019-02-05 03:40:22 +01:00
if (!user) {
tools.mylogshow("NOT FOUND !");
2019-02-05 03:40:22 +01:00
res.status(404).send({ code: server_constants.RIS_CODE_LOGIN_ERR });
}
return user
})
.then(user => {
2019-02-13 18:47:58 +01:00
if (user) {
return user.generateAuthToken(req).then((token) => {
var usertosend = User();
shared_consts.fieldsUserToChange().forEach((field) => {
usertosend[field] = user[field]
});
// usertosend._id = user._id.toHexString();
// if (!User.isAdmin(req.user)) {
// usertosend.ipaddr = user.ipaddr;
// }
2019-02-13 18:47:58 +01:00
// tools.mylog("user.verified_email:" + user.verified_email);
// tools.mylog("usertosend.userId", usertosend.userId);
2019-02-13 18:47:58 +01:00
return { usertosend, token }
})
.then((myris) => {
const access = 'auth';
const browser = req.get('User-Agent');
// Check if already exist Subscribe
return existSubScribe(myris.usertosend._id, access, browser).then(subscribe => {
return (subscribe !== null)
}).then(subsExistonDb => {
return { usertosend: myris.usertosend, token: myris.token, subsExistonDb }
}).catch(err => {
return { usertosend: myris.usertosend, token: myris.token, subsExistonDb: false }
})
}).then(myris => {
// console.log('res', myris.token, myris.usertosend);
// SEND TOKEN AND CODE RESULT
res.header('x-auth', myris.token).send({
usertosend: myris.usertosend,
code: server_constants.RIS_CODE_OK,
subsExistonDb: myris.subsExistonDb
});
// tools.mylog("TROVATOOO!");
// tools.mylog('FINE LOGIN')
2019-02-13 18:47:58 +01:00
});
}
})
.catch((e) => {
tools.mylog("ERRORE IN LOGIN: " + e);
2019-02-13 18:47:58 +01:00
if (!resalreadysent)
res.status(400).send({ code: server_constants.RIS_CODE_LOGIN_ERR_GENERIC });
});
2019-02-05 03:40:22 +01:00
});
router.delete('/me/token', authenticate, (req, res) => {
// tools.mylog("TOKENREM = " + req.token);
2019-02-05 03:40:22 +01:00
req.user.removeToken(req.token).then(() => {
res.status(200).send();
}, () => {
res.status(400).send();
});
});
router.post('/setperm', authenticate, (req, res) => {
const body = _.pick(req.body, ['idapp', 'username', 'perm']);
tools.mylog("SETPERM = " + req.token);
User.setPermissionsById(res.user._id, body).then(() => {
res.status(200).send();
}, () => {
res.status(400).send();
});
});
router.post('/import_extralist', async (req, res) => {
const strdata = req.body.strdata;
idapp = req.body.idapp;
locale = req.body.locale;
const ris = await ExtraList.ImportData(locale, idapp, strdata);
console.log('ris', ris);
res.send(ris);
});
2019-02-05 03:40:22 +01:00
module.exports = router;