Max-Meier-Projekt-alpha/app/routes/users.js

121 lines
4.2 KiB
JavaScript

const route = require("express").Router();
const jables = require("../jableshandler");
const token = require("../token");
const fs = require("fs");
const connection = fs.existsSync("./connection")?JSON.parse(fs.readFileSync("./connection")):{protocol: "http", host:"localhost", port:"3000"}
const passwordRecovery = fs.readFileSync("./passwordRecovery.html")
const welcomePage = fs.readFileSync("./welcomePage.html")
const emailgen = require("../emailgen");
const mailer = require("nodemailer").createTransport(require("../../mailcfg.json"));
route.get("/", token.checkAdminToken, (req, res, next)=>{
jables.getUsers().then((users)=>{
users.forEach((user)=>{
user.password = undefined;
})
res.status(200).json(users);
},
({error, message})=>{
res.status(error).json(message);
})
})
route.post("/pwd", (req, res, next)=>{
jables.getUser(req.body).then(({uid})=>{
mailer.sendMail({
from: "Revolutionizing Accounting Education <noreply@ubt.de>",
to: req.body.email,
subject: "Passwort Wiederherstellung",
html: emailgen.recover(`${connection.protocol}://${connection.host}:${connection.port}/users/recoverpw?token=${token.createToken({uid, recover:true}, 2*60*60)}`)
}).then(()=>{
res.status(200).json("please check your mail")
},
()=>{
res.status(500).json("there was en error sending the mail")
})
},
()=>{
res.status(401).json(`${req.body.email} is not registered with us`)
}
)
})
route.post("/signup", (req, res, next)=>{
jables.newUser(req.body).then((uid)=>{
mailer.sendMail({
from: "Revolutionizing Accounting Education <noreply@ubt.de>",
to: req.body.email,
subject: "Anmeldungsbestätigung",
html: uid!=0?emailgen.confirm(`${connection.protocol}://${connection.host}:${connection.port}/users/confirm?token=${token.createToken({uid, confirm:true}, 24*60*60)}`):"Welcome, Admin!"
}).then(()=>{
res.status(200).json("please check your mail")
},
()=>{
res.status(500).json("there was en error sending the mail")
}
)
},
({error, message})=>{
res.status(error).json(message);
})
})
route.post("/login", (req, res, next)=>{
jables.login(req.body).then((user)=>{
const {uid, admin, confirmed} = user;
user.password = undefined;
if(confirmed){
res.status(200).json({token: token.createToken({uid, admin}, admin?7200:1800), userData: user});
}else{
res.status(403).json("please confirm your email address")
}
},
({error, message})=>{
res.status(error).json(message);
}
)
})
route.post("/logout", token.checkToken, (req, res, next)=>{
jables.logout(req.userData).then(()=>{
res.status(200).json("logout successfull");
},
({error, message})=>{
res.status(error).json(message);
})
})
route.post("/admin", token.checkAdminToken, (req, res, next)=>{
jables.setAdmin(req.body).then(()=>{
res.status(201).json("sucessfully changed admin priviledges")
},
({error, message})=>{
res.status(error).json(message)
})
})
route.get("/recoverpw", (req, res, next)=>{
res.status(200).write(passwordRecovery)
res.end();
})
route.post("/setpw", token.checkToken, (req, res, next)=>{
const {uid} = req.userData;
jables.patchUser({uid, password: req.body.password}).then(()=>{
res.status(201).json("password sucessfully changed");
},
({error, message})=>{
res.status(error).json(message)
})
})
route.get("/confirm", token.checkToken, (req, res, next)=>{
jables.confirm(req.userData).then(()=>{
res.status(200).write(welcomePage);
res.end();
},
({error, message})=>{
res.status(error).json(message)
})
})
route.get("/csv", token.checkAdminToken, (req, res, next)=>{
if(req.query.uid&&req.query.uid.split(",").length==1){
jables.createCSV(parseInt(req.query.uid), res)
}else{
jables.createCSVs(req.query.uid, res)
}
})
module.exports=route;