dolibarr user
This commit is contained in:
parent
9cf463e7fc
commit
0f3c08ce46
@ -125,6 +125,7 @@ export async function DELETE(
|
|||||||
{ params }: { params: { userId: string } }
|
{ params }: { params: { userId: string } }
|
||||||
) {
|
) {
|
||||||
const session = await getServerSession(authOptions);
|
const session = await getServerSession(authOptions);
|
||||||
|
const userId = params.userId; // Store userId from params to avoid sync access issues
|
||||||
|
|
||||||
if (!session) {
|
if (!session) {
|
||||||
return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
|
return NextResponse.json({ error: "Non autorisé" }, { status: 401 });
|
||||||
@ -155,7 +156,7 @@ export async function DELETE(
|
|||||||
|
|
||||||
// Get user details before deletion
|
// Get user details before deletion
|
||||||
const userResponse = await fetch(
|
const userResponse = await fetch(
|
||||||
`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/users/${params.userId}`,
|
`${process.env.KEYCLOAK_BASE_URL}/admin/realms/${process.env.KEYCLOAK_REALM}/users/${userId}`,
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${tokenData.access_token}`,
|
Authorization: `Bearer ${tokenData.access_token}`,
|
||||||
@ -172,12 +173,12 @@ export async function DELETE(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const userDetails = await userResponse.json();
|
const userDetails = await userResponse.json();
|
||||||
console.log('Processing user deletion for ID:', params.userId);
|
console.log('Processing user deletion for ID:', userId);
|
||||||
|
|
||||||
// Forward the request to the new endpoint format with the email parameter
|
// Forward the request to the new endpoint format with the email parameter
|
||||||
// This ensures Dolibarr deletion is also handled
|
// This ensures Dolibarr deletion is also handled
|
||||||
const apiUrl = new URL(`${req.headers.get('origin') || process.env.NEXTAUTH_URL}/api/users`);
|
const apiUrl = new URL(`${req.headers.get('origin') || process.env.NEXTAUTH_URL}/api/users`);
|
||||||
apiUrl.searchParams.append('id', params.userId);
|
apiUrl.searchParams.append('id', userId);
|
||||||
apiUrl.searchParams.append('email', userDetails.email);
|
apiUrl.searchParams.append('email', userDetails.email);
|
||||||
|
|
||||||
const forwardResponse = await fetch(apiUrl.toString(), {
|
const forwardResponse = await fetch(apiUrl.toString(), {
|
||||||
|
|||||||
@ -545,9 +545,68 @@ export async function POST(req: Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Helper function to get Leantime user ID by email
|
||||||
|
async function getLeantimeUserId(email: string): Promise<number | null> {
|
||||||
|
try {
|
||||||
|
// Validate email format
|
||||||
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
||||||
|
if (!emailRegex.test(email)) {
|
||||||
|
console.error('Invalid email format');
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get user by email using the proper method
|
||||||
|
const userResponse = await fetch('https://agilite.slm-lab.net/api/jsonrpc', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'X-API-Key': process.env.LEANTIME_TOKEN || '',
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
method: 'leantime.rpc.Users.Users.getUserByEmail',
|
||||||
|
jsonrpc: '2.0',
|
||||||
|
id: 1,
|
||||||
|
params: {
|
||||||
|
email: email
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
const userData = await userResponse.json();
|
||||||
|
|
||||||
|
console.log('Leantime user lookup response status:', userResponse.status);
|
||||||
|
|
||||||
|
if (!userResponse.ok || !userData.result) {
|
||||||
|
console.error('Failed to get Leantime user');
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The result should be the user object or false
|
||||||
|
if (userData.result === false) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return userData.result.id;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error getting Leantime user');
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Helper function to delete user from Leantime
|
// Helper function to delete user from Leantime
|
||||||
async function deleteLeantimeUser(email: string): Promise<{ success: boolean; error?: string }> {
|
async function deleteLeantimeUser(email: string): Promise<{ success: boolean; error?: string }> {
|
||||||
try {
|
try {
|
||||||
|
// First get the Leantime user ID
|
||||||
|
const leantimeUserId = await getLeantimeUserId(email);
|
||||||
|
if (!leantimeUserId) {
|
||||||
|
return {
|
||||||
|
success: false,
|
||||||
|
error: 'User not found in Leantime'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Found Leantime user with ID: ${leantimeUserId}, proceeding with deletion`);
|
||||||
|
|
||||||
const response = await fetch('https://agilite.slm-lab.net/api/jsonrpc', {
|
const response = await fetch('https://agilite.slm-lab.net/api/jsonrpc', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
@ -559,7 +618,7 @@ async function deleteLeantimeUser(email: string): Promise<{ success: boolean; er
|
|||||||
jsonrpc: '2.0',
|
jsonrpc: '2.0',
|
||||||
id: 1,
|
id: 1,
|
||||||
params: {
|
params: {
|
||||||
email: email
|
id: leantimeUserId
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user