feat: Validation automatique des comptes STAFF/SUPER_STAFF à la création

This commit is contained in:
odentas 2025-12-02 17:52:08 +01:00
parent ab61fb1852
commit f3081a7807

View file

@ -50,33 +50,45 @@ export async function POST(req: Request) {
const origin = process.env.NEXT_PUBLIC_BASE_URL || "https://paie.odentas.fr";
// Générer un lien d'activation
// Créer l'utilisateur avec confirmation d'email automatique (pour les staff)
const { data: createData, error: createError } = await admin.auth.admin.createUser({
email,
email_confirm: true, // Confirmer automatiquement l'email pour les staff
user_metadata: {
first_name: firstName || null,
is_staff: true,
},
});
if (createError) {
console.error("Erreur création utilisateur:", createError);
return NextResponse.json({
error: "Erreur lors de la création de l'utilisateur",
message: createError.message
}, { status: 400 });
}
const newUserId = createData?.user?.id;
if (!newUserId) {
return NextResponse.json({ error: "Erreur lors de la création de l'utilisateur" }, { status: 400 });
}
// Générer un lien d'activation pour le premier mot de passe
const { data: linkData, error: linkError } = await admin.auth.admin.generateLink({
type: "magiclink",
email,
options: {
redirectTo: `${origin}/`,
data: {
first_name: firstName || null,
is_staff: true,
},
}
});
if (linkError) {
console.error("Erreur génération lien:", linkError);
return NextResponse.json({
error: "Erreur lors de la génération du lien d'activation",
message: linkError.message
}, { status: 400 });
// Ne pas bloquer si l'email échoue, l'utilisateur est déjà créé et confirmé
}
const actionLink = linkData?.properties?.action_link;
const newUserId = linkData?.user?.id;
if (!newUserId || !actionLink) {
return NextResponse.json({ error: "Erreur lors de la création de l'utilisateur" }, { status: 400 });
}
const actionLink = linkData?.properties?.action_link || null;
// Ajouter l'utilisateur à la table staff_users
const { error: staffError } = await admin
@ -104,12 +116,14 @@ export async function POST(req: Request) {
try {
const creatorName = (user.user_metadata as any)?.first_name || user.email || 'Administrateur';
// Forcer le domaine production dans le lien d'activation
// Remplacer localhost, app-paie, ou tout autre domaine par paie.odentas.fr
const productionLink = actionLink
.replace(/http:\/\/localhost:\d+/, 'https://paie.odentas.fr')
.replace(/https?:\/\/app-paie\.odentas\.fr/, 'https://paie.odentas.fr')
.replace(/https?:\/\/[^/]+\//, 'https://paie.odentas.fr/');
// Forcer le domaine production dans le lien d'activation si disponible
let productionLink = null;
if (actionLink) {
productionLink = actionLink
.replace(/http:\/\/localhost:\d+/, 'https://paie.odentas.fr')
.replace(/https?:\/\/app-paie\.odentas\.fr/, 'https://paie.odentas.fr')
.replace(/https?:\/\/[^/]+\//, 'https://paie.odentas.fr/');
}
await sendUniversalEmailV2({
type: 'staff-account-created',
@ -125,7 +139,8 @@ export async function POST(req: Request) {
year: 'numeric',
}),
linkValidity: '7 jours',
ctaUrl: productionLink,
ctaUrl: productionLink || 'https://paie.odentas.fr',
note: 'Votre compte est déjà activé. Utilisez le lien ci-dessous pour vous connecter et définir votre mot de passe.',
}
});