const express = require("express"); const fs = require("fs-extra"); const path = require("path"); // Classes const Pagans = require("../models/Pagans.js"); // Middlewares const checkHeaders = require("../middlewares/checkHeaders"); const isAuthenticated = require("../middlewares/isAuthenticated"); const router = express.Router(); /** * /api/models/Pagans.js * * Managed: /** * @api {get} /pagans/alias/:alias * @apiName Is register check xalias and xhash * @apiGroup Pagans * @param {string} alias a alias that exist or not * @apiSuccess (200) {object} {ref:"pagans",msg:"aliasexist",data: { alias, publicKey } } * @apiError (404) {object} {ref:"pagans",msg:"aliasdoesnotexist",data: { alias} } * **/ router.get("/alias/:alias", (req, res) => { const getalias = Pagans.getalias(req.params.alias); res.status(getalias.status).send(getalias); }); /** * @api {get} /pagans/logout * @apiName Remove token * @apiGroup Pagans * */ router.get("/logout", checkHeaders, isAuthenticated, (req, res) => { console.log(req.session.header); const logout = Pagans.logout( req.session.header.xalias, req.session.header.xtribe, req.session.header.xdays, req.session.header.xhash ); res.status(logout.status).json(logout); }); /** * @api {get} /pagans/person:alias * @apiName Is register check xalias and xhash * @apiGroup Pagans * @apiUse apxHeader * @param {string} alias that exist * @param {string} tribeId that exist with a person alias * @apiSuccess (200) {ref:"pagans",msg:"personexist",data: { person } } * @apiError (404) {ref:"pagans",msg:"persondoesnotexist",data: { person } } * * @todo check accessright for req.session.header.xalias to see if jhe can get person data * if req.param.alias == req.session.header.xalias => Owner * else need accessright to on person set at R * */ router.get("/person/:alias", checkHeaders, isAuthenticated, (req, res) => { const getperson = Pagans.getperson( req.session.header.xtribe, req.params.alias, { xprofils: req.session.header.xprofils, xalias: req.session.header.xalias } ); res.status(getperson.status).send(getperson); }); /** * @api {get} /pagans/isauth * @apiName Is register check xalias and xhash * @apiGroup Pagans * @apiUse apxHeader * * @apiError (400) {object} status missingheaders / xalias does not exist / signaturefailled * @apiError (401) {object} alias anonymous (not authenticated) * @apiError (404) {string} tribe does not exist * * @apiSuccess (200) {object} data contains indexfile requested * */ router.get("/isauth", checkHeaders, isAuthenticated, (req, res) => { res.status(200).send({ status: 200, ref: "headers", msg: "authenticated", data: { xalias: req.session.header.xalias, xprofils: req.session.header.xprofils, }, }); }); /** * @api {post} /pagans * @apiName Is register check xalias and xhash * @apiGroup Pagans * @apiUse apxHeader * * Create a pagan account from alias, publickey, if trusted recovery => * Create a person in xtribe/person/xalias.json with profil.auth={email,privatekey, passphrase} * Middleware isAuthenticated check that: * - xhash is well signed from private key linked to the publickey of alias * - check that alias does not already exist (if yes then verifiedsigne would be false) * Need to wait next block chain to be sure that alias is register in the blokchain */ router.post("/", checkHeaders, isAuthenticated, (req, res) => { //console.log("pass ici", req.body); const objpagan = { alias: req.body.alias, publickey: req.body.publickey }; const newpagan = Pagans.create(objpagan, { xalias: req.session.header.xalias, xprofils: req.session.header.xprofils, }); if (newpagan.status == 200) { if (req.body.email) { const emailsent = Pagans.sendmailkey( req.body.alias, req.body.privatekey, req.session.header.xtribe, req.body.passphrase, req.body.publickey, req.body.email ); } if (req.body.trustedtribe) { const personup = Pagans.personupdate( req.body.alias, req.body.trustedtribe, { recoveryauth: { email: req.body.email, privatekey: req.body.privatekey, publickey: req.body.publickey, passphrase: req.body.passphrase, }, } ); if (personup.status !== 200) console.log("Warning no recovery registration", personup); } if (emailsent && emailsent.status != 200) { newpagan.msg = "successfulcreatewithoutemail"; res.status(newpagan.status).json(newpagan); } } else { //error to create pagan certaily already exist res.status(newpagan.status).json(newpagan); } }); /** * @api {post} /pagans/person * @apiName Is register check xalias and xhash * @apiGroup Pagans * @apiUse apxHeader * * add a person = alias + tribe with specific accessright and specific schema link to tribe * @todo add tribe/schema/person.json */ router.post("/person", checkHeaders, isAuthenticated, (req, res) => { //console.log(req.body); const persoad = Pagans.personcreate( req.session.header.xtribe, req.body.alias, req.body, { xprofils: req.session.header.xprofils, xalias: req.session.header.xalias } ); res.status(persoad.status).json(persoad); }); /** * @api {put} /pagans/person * @apiName Is register check xalias and xhash * @apiGroup Pagans * @apiUse apxHeader * * update a person = alias + tribe with specific accessright and specific schema link to tribe * @todo add tribe/schema/person.json */ router.put("/person", checkHeaders, isAuthenticated, (req, res) => { //console.log(req.body); const persoup = Pagans.personupdate( req.session.header.xtribe, req.body.alias, req.body, { xprofils: req.session.header.xprofils, xalias: req.session.header.xalias } ); res.status(persoup.status).json(persoup); }); /** * @api {delete} /pagans/alias/:alias * @apiName Is register check xalias and xhash * @apiGroup Pagans * @apiUse apxHeader * */ router.delete("/alias/:alias", checkHeaders, isAuthenticated, (req, res) => { console.log(`DELETE pagans nationchains/pagans/${req.params.alias}.json`); const result = Pagans.deletealias(req.params.id, req.session.header); res.status(result.status).send(result.data); }); router.delete("/person/:alias", checkHeaders, isAuthenticated, (req, res) => { console.log(`DELETE pagans nationchains/pagans/${req.params.alias}.json`); const result = Pagans.deleteperson(req.params.id, req.session.header); res.status(result.status).send(result.data); }); /** * @api {get} /pagans/keyrecovery/tribe/email * @apiName apxtrib * @apiGroup Pagans * * * * @apiError (400) {object} status missingheaders / xalias does not exist / signaturefailled * @apiError (401) {object} alias anonymous (not authenticated) * @apiError (404) {string} tribe does not exist * * @apiSuccess (200) {object} data contains indexfile requested * */ router.get("/keyrecovery/:tribeid/:email", checkHeaders, (req, res) => { res.send(Pagans.keyrecovery(req.params.tribeId, req.params.email)); }); module.exports = router;