Co-authored-by: dbroqua <contact@darkou.fr> Reviewed-on: https://git.darkou.fr/dbroqua/MusicTopus/pulls/44
This commit is contained in:
parent
226a9ef1d1
commit
48c997ae10
13 changed files with 284 additions and 57 deletions
44
src/app.js
44
src/app.js
|
@ -15,6 +15,7 @@ import { isXhr } from "./helpers";
|
|||
|
||||
import indexRouter from "./routes";
|
||||
import maCollectionRouter from "./routes/ma-collection";
|
||||
import monCompteRouter from "./routes/mon-compte";
|
||||
import collectionRouter from "./routes/collection";
|
||||
|
||||
import importJobsRouter from "./routes/jobs";
|
||||
|
@ -83,6 +84,7 @@ app.use(
|
|||
);
|
||||
|
||||
app.use("/", indexRouter);
|
||||
app.use("/mon-compte", monCompteRouter);
|
||||
app.use("/ma-collection", maCollectionRouter);
|
||||
app.use("/collection", collectionRouter);
|
||||
app.use("/jobs", importJobsRouter);
|
||||
|
@ -97,15 +99,22 @@ app.use((req, res) => {
|
|||
} else {
|
||||
res.status(404).render("index", {
|
||||
page: { title: `404: Cette page n'existe pas.` },
|
||||
errorCode: 404,
|
||||
viewname: "error",
|
||||
user: req.user || null,
|
||||
config,
|
||||
session: req.session || null,
|
||||
flashInfo: null,
|
||||
query: null,
|
||||
params: null,
|
||||
error: null,
|
||||
flash: {
|
||||
info: req.flash("info"),
|
||||
error: [
|
||||
...req.flash("error"),
|
||||
...(req.session?.flash?.error || []),
|
||||
],
|
||||
success: req.flash("success"),
|
||||
},
|
||||
query: req.query,
|
||||
params: req.params,
|
||||
user: req.user,
|
||||
config,
|
||||
getBaseUrl: null,
|
||||
errorCode: 404,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -122,15 +131,22 @@ app.use((error, req, res, next) => {
|
|||
title: error.title || "500: Oups… le serveur a crashé !",
|
||||
error,
|
||||
},
|
||||
errorCode: error.errorCode || 500,
|
||||
viewname: "error",
|
||||
user: req.user || null,
|
||||
config,
|
||||
session: req.session || null,
|
||||
flashInfo: null,
|
||||
query: null,
|
||||
params: null,
|
||||
error: null,
|
||||
flash: {
|
||||
info: req.flash("info"),
|
||||
error: [
|
||||
...req.flash("error"),
|
||||
...(req.session?.flash?.error || []),
|
||||
],
|
||||
success: req.flash("success"),
|
||||
},
|
||||
query: req.query,
|
||||
params: req.params,
|
||||
user: req.user,
|
||||
config,
|
||||
getBaseUrl: null,
|
||||
errorCode: error.errorCode || 500,
|
||||
});
|
||||
|
||||
next();
|
||||
|
|
|
@ -98,7 +98,7 @@ class Albums extends Pages {
|
|||
if (!this.req.user && !collectionUserId) {
|
||||
throw new ErrorEvent(
|
||||
401,
|
||||
"Cette collection n'est pas publique",
|
||||
"Collection",
|
||||
"Cette collection n'est pas publique"
|
||||
);
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ class Albums extends Pages {
|
|||
) {
|
||||
throw new ErrorEvent(
|
||||
401,
|
||||
"Cette collection n'est pas publique",
|
||||
"Collection",
|
||||
"Cette collection n'est pas publique"
|
||||
);
|
||||
}
|
||||
|
@ -233,6 +233,7 @@ class Albums extends Pages {
|
|||
if (!user || !user.isPublicCollection) {
|
||||
throw new ErrorEvent(
|
||||
401,
|
||||
"Collection non partagée",
|
||||
"Cet utilisateur ne souhaite pas partager sa collection"
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
import Joi from "joi";
|
||||
|
||||
import UsersModel from "../models/users";
|
||||
import Pages from "./Pages";
|
||||
|
||||
/**
|
||||
* Classe permettant la gestion de l'utilisateur connecté
|
||||
*/
|
||||
class Me {
|
||||
constructor(req) {
|
||||
this.req = req;
|
||||
}
|
||||
|
||||
class Me extends Pages {
|
||||
/**
|
||||
* Méthode permettant de modifier le profil d'un utilisateur
|
||||
* @return {Object}
|
||||
|
@ -40,6 +37,33 @@ class Me {
|
|||
|
||||
return update;
|
||||
}
|
||||
|
||||
/**
|
||||
* Méthode permettant de modifier le mot de passe d'un utilisateur
|
||||
*/
|
||||
async updatePassword() {
|
||||
const { body } = this.req;
|
||||
const { _id } = this.req.user;
|
||||
|
||||
const schema = Joi.object({
|
||||
oldPassword: Joi.string().required(),
|
||||
password: Joi.string().required(),
|
||||
passwordConfirm: Joi.ref("password"),
|
||||
});
|
||||
|
||||
const value = await schema.validateAsync(body);
|
||||
const user = await UsersModel.findById(_id);
|
||||
|
||||
if (!user.validPassword(value.oldPassword)) {
|
||||
throw new Error("Votre ancien mot de passe n'est pas valide");
|
||||
}
|
||||
|
||||
user.salt = value.password;
|
||||
|
||||
await user.save();
|
||||
|
||||
this.req.flash("success", "Profil correctement mis à jour");
|
||||
}
|
||||
}
|
||||
|
||||
export default Me;
|
||||
|
|
|
@ -52,21 +52,20 @@ class Pages {
|
|||
*/
|
||||
render() {
|
||||
this.pageContent.session = this.req.session;
|
||||
this.pageContent.flashInfo = this.req.flash("info");
|
||||
this.pageContent.error = this.req.flash("error") || null;
|
||||
this.pageContent.flash = {
|
||||
info: this.req.flash("info"),
|
||||
error: [
|
||||
...this.req.flash("error"),
|
||||
...(this.req.session?.flash?.error || []),
|
||||
],
|
||||
success: this.req.flash("success"),
|
||||
};
|
||||
this.pageContent.query = this.req.query;
|
||||
this.pageContent.params = this.req.params;
|
||||
this.pageContent.user = this.user;
|
||||
this.pageContent.config = config;
|
||||
this.pageContent.getBaseUrl = getBaseUrl(this.req);
|
||||
|
||||
if (this.req.session.flash && this.req.session.flash.error) {
|
||||
// eslint-disable-next-line prefer-destructuring
|
||||
this.pageContent.page.failureFlash =
|
||||
this.req.session.flash.error[0];
|
||||
this.req.session.flash = null;
|
||||
}
|
||||
|
||||
return this.pageContent;
|
||||
}
|
||||
}
|
||||
|
|
35
src/routes/mon-compte.js
Normal file
35
src/routes/mon-compte.js
Normal file
|
@ -0,0 +1,35 @@
|
|||
import express from "express";
|
||||
import { ensureLoggedIn } from "connect-ensure-login";
|
||||
|
||||
import Me from "../middleware/Me";
|
||||
|
||||
import render from "../libs/format";
|
||||
|
||||
// eslint-disable-next-line new-cap
|
||||
const router = express.Router();
|
||||
|
||||
router
|
||||
.route("/")
|
||||
.get(ensureLoggedIn("/connexion"), async (req, res, next) => {
|
||||
try {
|
||||
const page = new Me(req, "mon-compte/index");
|
||||
|
||||
page.setPageTitle("Mon compte");
|
||||
|
||||
render(res, page);
|
||||
} catch (err) {
|
||||
next(err);
|
||||
}
|
||||
})
|
||||
.post(ensureLoggedIn("/connexion"), async (req, res) => {
|
||||
try {
|
||||
const page = new Me(req, "mon-compte/index");
|
||||
|
||||
await page.updatePassword();
|
||||
} catch (err) {
|
||||
req.flash("error", err.toString());
|
||||
}
|
||||
res.redirect("/mon-compte");
|
||||
});
|
||||
|
||||
export default router;
|
Loading…
Add table
Add a link
Reference in a new issue