Audit sécurité/qualité : corrections critiques, tests, CI et lint #4
@@ -1,87 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
const yup = require('yup');
|
|
||||||
|
|
||||||
module.exports = (plugin) => {
|
|
||||||
/**
|
|
||||||
* Validation custom (équivalent Strapi)
|
|
||||||
*/
|
|
||||||
const registerSchema = yup.object({
|
|
||||||
username: yup.string().required(),
|
|
||||||
email: yup.string().email().required(),
|
|
||||||
password: yup.string().min(6).required(),
|
|
||||||
});
|
|
||||||
|
|
||||||
const validateRegisterBody = async (data) => {
|
|
||||||
try {
|
|
||||||
return await registerSchema.validate(data, {
|
|
||||||
abortEarly: false,
|
|
||||||
stripUnknown: true,
|
|
||||||
});
|
|
||||||
} catch (err) {
|
|
||||||
const message = err.errors.join(', ');
|
|
||||||
throw new Error(message);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Override du controller register
|
|
||||||
*/
|
|
||||||
plugin.controllers.auth.register = async (ctx) => {
|
|
||||||
const { body } = ctx.request;
|
|
||||||
|
|
||||||
// 🔒 1. Validation
|
|
||||||
let params;
|
|
||||||
try {
|
|
||||||
params = await validateRegisterBody(body);
|
|
||||||
} catch (err) {
|
|
||||||
return ctx.badRequest(err.message);
|
|
||||||
}
|
|
||||||
|
|
||||||
const { email, username, password } = params;
|
|
||||||
|
|
||||||
// 🔎 2. Vérifier si user existe déjà
|
|
||||||
const userService = strapi.service('plugin::users-permissions.user');
|
|
||||||
|
|
||||||
const existingUser = await userService.fetchAll({
|
|
||||||
filters: {
|
|
||||||
$or: [{ email }, { username }],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (existingUser.length > 0) {
|
|
||||||
return ctx.badRequest('Email or Username already taken');
|
|
||||||
}
|
|
||||||
|
|
||||||
// ⚙️ 3. Récupérer rôle "authenticated"
|
|
||||||
const role = await strapi
|
|
||||||
.query('plugin::users-permissions.role')
|
|
||||||
.findOne({ where: { type: 'authenticated' } });
|
|
||||||
|
|
||||||
if (!role) {
|
|
||||||
return ctx.badRequest('Default role not found');
|
|
||||||
}
|
|
||||||
|
|
||||||
// 👤 4. Création user
|
|
||||||
const newUser = await userService.add({
|
|
||||||
username,
|
|
||||||
email,
|
|
||||||
password,
|
|
||||||
role: role.id,
|
|
||||||
confirmed: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
// 🔑 5. Générer JWT
|
|
||||||
const jwtService = strapi.service('plugin::users-permissions.jwt');
|
|
||||||
|
|
||||||
const token = jwtService.issue({ id: newUser.id });
|
|
||||||
|
|
||||||
// 📤 6. Réponse
|
|
||||||
ctx.send({
|
|
||||||
jwt: token,
|
|
||||||
user: newUser,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return plugin;
|
|
||||||
};
|
|
||||||
Reference in New Issue
Block a user