update api users and groups and users 8

This commit is contained in:
Alma 2025-04-09 21:12:54 +02:00
parent 5ff393d6ca
commit 198b2abe4b
2 changed files with 56 additions and 56 deletions

View File

@ -13,7 +13,7 @@ export async function PUT(
}
try {
const { password } = await req.json();
const { password, temporary = true } = await req.json();
// Get client credentials token
const tokenResponse = await fetch(
@ -38,7 +38,7 @@ export async function PUT(
return NextResponse.json({ error: "Failed to get token" }, { status: 500 });
}
// Reset password
// Reset password with temporary flag
const passwordResponse = await fetch(
`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/users/${params.userId}/reset-password`,
{
@ -50,7 +50,7 @@ export async function PUT(
body: JSON.stringify({
type: "password",
value: password,
temporary: false,
temporary: temporary,
}),
}
);
@ -61,7 +61,10 @@ export async function PUT(
return NextResponse.json({ error: "Failed to reset password" }, { status: passwordResponse.status });
}
return NextResponse.json({ success: true });
return NextResponse.json({
success: true,
temporary: temporary
});
} catch (error) {
console.error("Error in reset password:", error);
return NextResponse.json({ error: "Internal server error" }, { status: 500 });

View File

@ -179,7 +179,7 @@ export function UsersTable({ userRole = [] }: UsersTableProps) {
lastName: user.lastName || "",
email: user.email || "",
password: "",
roles: user.roles || [],
roles: [],
enabled: user.enabled,
});
setEditUserDialog(true);
@ -269,6 +269,15 @@ export function UsersTable({ userRole = [] }: UsersTableProps) {
await fetchUsers();
setFormData({
username: "",
lastName: "",
firstName: "",
email: "",
password: "",
roles: [],
enabled: true,
});
setEditUserDialog(false);
setSelectedUser(null);
@ -313,7 +322,7 @@ export function UsersTable({ userRole = [] }: UsersTableProps) {
};
const handleChangePassword = async (userId: string) => {
const newPassword = prompt("Entrez le nouveau mot de passe:");
const newPassword = prompt("Entrez le nouveau mot de passe temporaire:");
if (!newPassword) return;
try {
@ -322,7 +331,10 @@ export function UsersTable({ userRole = [] }: UsersTableProps) {
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ password: newPassword }),
body: JSON.stringify({
password: newPassword,
temporary: true
}),
});
if (!response.ok) {
@ -331,7 +343,7 @@ export function UsersTable({ userRole = [] }: UsersTableProps) {
toast({
title: "Succès",
description: "Le mot de passe a été modifié avec succès",
description: "Le mot de passe temporaire a été défini avec succès. L'utilisateur devra le changer à sa première connexion.",
});
} catch (error) {
toast({
@ -583,7 +595,21 @@ export function UsersTable({ userRole = [] }: UsersTableProps) {
</TableBody>
</Table>
<Dialog open={editUserDialog} onOpenChange={setEditUserDialog}>
<Dialog open={editUserDialog} onOpenChange={(open) => {
if (!open) {
setFormData({
username: "",
lastName: "",
firstName: "",
email: "",
password: "",
roles: [],
enabled: true,
});
setSelectedUser(null);
}
setEditUserDialog(open);
}}>
<DialogContent>
<DialogHeader>
<DialogTitle>Modifier l'utilisateur</DialogTitle>
@ -614,57 +640,28 @@ export function UsersTable({ userRole = [] }: UsersTableProps) {
onChange={(e) => setFormData(prev => ({ ...prev, email: e.target.value }))}
/>
</div>
<div className="space-y-2">
<Label htmlFor="edit-roles">Rôles</Label>
<div className="flex flex-wrap gap-2">
{roles.map((role) => (
<div key={role.id} className="flex items-center space-x-2">
<input
type="checkbox"
id={`edit-role-${role.id}`}
checked={formData.roles.includes(role.name)}
onChange={(e) => {
setFormData(prev => ({
...prev,
roles: e.target.checked
? [...prev.roles, role.name]
: prev.roles.filter(r => r !== role.name)
}));
}}
/>
<label htmlFor={`edit-role-${role.id}`}>{role.name}</label>
</div>
))}
</div>
<div className="flex flex-wrap gap-2 mt-2">
{formData.roles.map(role => (
<span key={role} className="px-2 py-1 bg-gray-100 rounded-md text-sm">
{role}
<button
type="button"
onClick={() => setFormData(prev => ({
...prev,
roles: prev.roles.filter(r => r !== role)
}))}
className="ml-2 text-gray-500 hover:text-gray-700"
>
×
</button>
</span>
))}
</div>
</div>
<div className="flex space-x-2">
<Button type="submit" className="flex-1">
Modifier
</Button>
<div className="flex justify-end space-x-2">
<Button
type="button"
variant="outline"
onClick={handleUpdateRoles}
className="flex-1"
onClick={() => {
setEditUserDialog(false);
setSelectedUser(null);
setFormData({
username: "",
lastName: "",
firstName: "",
email: "",
password: "",
roles: [],
enabled: true,
});
}}
>
Mettre à jour les rôles
Annuler
</Button>
<Button type="submit">
Modifier
</Button>
</div>
</form>