mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-07-23 20:42:02 +00:00
fix(roles): handle empty response in deleteRole and ensure revalidation (#6976)
This commit is contained in:
@@ -4,7 +4,7 @@ import { revalidatePath } from "next/cache";
|
||||
import { redirect } from "next/navigation";
|
||||
|
||||
import { auth } from "@/auth.config";
|
||||
import { getErrorMessage, parseStringify, wait } from "@/lib";
|
||||
import { getErrorMessage, parseStringify } from "@/lib";
|
||||
|
||||
export const getInvitations = async ({
|
||||
page = 1,
|
||||
@@ -189,9 +189,14 @@ export const getInvitationInfoById = async (invitationId: string) => {
|
||||
export const revokeInvite = async (formData: FormData) => {
|
||||
const session = await auth();
|
||||
const keyServer = process.env.API_BASE_URL;
|
||||
|
||||
const invitationId = formData.get("invitationId");
|
||||
|
||||
if (!invitationId) {
|
||||
return { error: "Invitation ID is required" };
|
||||
}
|
||||
|
||||
const url = new URL(`${keyServer}/tenants/invitations/${invitationId}`);
|
||||
|
||||
try {
|
||||
const response = await fetch(url.toString(), {
|
||||
method: "DELETE",
|
||||
@@ -199,13 +204,28 @@ export const revokeInvite = async (formData: FormData) => {
|
||||
Authorization: `Bearer ${session?.accessToken}`,
|
||||
},
|
||||
});
|
||||
const data = await response.json();
|
||||
await wait(1000);
|
||||
|
||||
if (!response.ok) {
|
||||
try {
|
||||
const errorData = await response.json();
|
||||
throw new Error(
|
||||
errorData?.message || "Failed to revoke the invitation",
|
||||
);
|
||||
} catch {
|
||||
throw new Error("Failed to revoke the invitation");
|
||||
}
|
||||
}
|
||||
|
||||
let data = null;
|
||||
if (response.status !== 204) {
|
||||
data = await response.json();
|
||||
}
|
||||
|
||||
revalidatePath("/invitations");
|
||||
return parseStringify(data);
|
||||
return data || { success: true };
|
||||
} catch (error) {
|
||||
return {
|
||||
error: getErrorMessage(error),
|
||||
};
|
||||
// eslint-disable-next-line no-console
|
||||
console.error("Error revoking invitation:", error);
|
||||
return { error: getErrorMessage(error) };
|
||||
}
|
||||
};
|
||||
|
||||
@@ -4,7 +4,7 @@ import { revalidatePath } from "next/cache";
|
||||
import { redirect } from "next/navigation";
|
||||
|
||||
import { auth } from "@/auth.config";
|
||||
import { getErrorMessage, parseStringify, wait } from "@/lib";
|
||||
import { getErrorMessage, parseStringify } from "@/lib";
|
||||
import { ManageGroupPayload, ProviderGroupsResponse } from "@/types/components";
|
||||
|
||||
export const getProviderGroups = async ({
|
||||
@@ -210,8 +210,12 @@ export const updateProviderGroup = async (
|
||||
export const deleteProviderGroup = async (formData: FormData) => {
|
||||
const session = await auth();
|
||||
const keyServer = process.env.API_BASE_URL;
|
||||
|
||||
const providerGroupId = formData.get("id");
|
||||
|
||||
if (!providerGroupId) {
|
||||
return { error: "Provider Group ID is required" };
|
||||
}
|
||||
|
||||
const url = new URL(`${keyServer}/provider-groups/${providerGroupId}`);
|
||||
|
||||
try {
|
||||
@@ -221,13 +225,28 @@ export const deleteProviderGroup = async (formData: FormData) => {
|
||||
Authorization: `Bearer ${session?.accessToken}`,
|
||||
},
|
||||
});
|
||||
const data = await response.json();
|
||||
await wait(2000);
|
||||
|
||||
if (!response.ok) {
|
||||
try {
|
||||
const errorData = await response.json();
|
||||
throw new Error(
|
||||
errorData?.message || "Failed to delete the provider group",
|
||||
);
|
||||
} catch {
|
||||
throw new Error("Failed to delete the provider group");
|
||||
}
|
||||
}
|
||||
|
||||
let data = null;
|
||||
if (response.status !== 204) {
|
||||
data = await response.json();
|
||||
}
|
||||
|
||||
revalidatePath("/manage-groups");
|
||||
return parseStringify(data);
|
||||
return data || { success: true };
|
||||
} catch (error) {
|
||||
return {
|
||||
error: getErrorMessage(error),
|
||||
};
|
||||
// eslint-disable-next-line no-console
|
||||
console.error("Error deleting provider group:", error);
|
||||
return { error: getErrorMessage(error) };
|
||||
}
|
||||
};
|
||||
|
||||
@@ -380,6 +380,11 @@ export const checkConnectionProvider = async (formData: FormData) => {
|
||||
export const deleteCredentials = async (secretId: string) => {
|
||||
const session = await auth();
|
||||
const keyServer = process.env.API_BASE_URL;
|
||||
|
||||
if (!secretId) {
|
||||
return { error: "Secret ID is required" };
|
||||
}
|
||||
|
||||
const url = new URL(`${keyServer}/providers/secrets/${secretId}`);
|
||||
|
||||
try {
|
||||
@@ -389,21 +394,41 @@ export const deleteCredentials = async (secretId: string) => {
|
||||
Authorization: `Bearer ${session?.accessToken}`,
|
||||
},
|
||||
});
|
||||
const data = await response.json();
|
||||
|
||||
if (!response.ok) {
|
||||
try {
|
||||
const errorData = await response.json();
|
||||
throw new Error(
|
||||
errorData?.message || "Failed to delete the credentials",
|
||||
);
|
||||
} catch {
|
||||
throw new Error("Failed to delete the credentials");
|
||||
}
|
||||
}
|
||||
|
||||
let data = null;
|
||||
if (response.status !== 204) {
|
||||
data = await response.json();
|
||||
}
|
||||
|
||||
revalidatePath("/providers");
|
||||
return parseStringify(data);
|
||||
return data || { success: true };
|
||||
} catch (error) {
|
||||
return {
|
||||
error: getErrorMessage(error),
|
||||
};
|
||||
// eslint-disable-next-line no-console
|
||||
console.error("Error deleting credentials:", error);
|
||||
return { error: getErrorMessage(error) };
|
||||
}
|
||||
};
|
||||
|
||||
export const deleteProvider = async (formData: FormData) => {
|
||||
const session = await auth();
|
||||
const keyServer = process.env.API_BASE_URL;
|
||||
|
||||
const providerId = formData.get("id");
|
||||
|
||||
if (!providerId) {
|
||||
return { error: "Provider ID is required" };
|
||||
}
|
||||
|
||||
const url = new URL(`${keyServer}/providers/${providerId}`);
|
||||
|
||||
try {
|
||||
@@ -413,13 +438,26 @@ export const deleteProvider = async (formData: FormData) => {
|
||||
Authorization: `Bearer ${session?.accessToken}`,
|
||||
},
|
||||
});
|
||||
const data = await response.json();
|
||||
await wait(1000);
|
||||
|
||||
if (!response.ok) {
|
||||
try {
|
||||
const errorData = await response.json();
|
||||
throw new Error(errorData?.message || "Failed to delete the provider");
|
||||
} catch {
|
||||
throw new Error("Failed to delete the provider");
|
||||
}
|
||||
}
|
||||
|
||||
let data = null;
|
||||
if (response.status !== 204) {
|
||||
data = await response.json();
|
||||
}
|
||||
|
||||
revalidatePath("/providers");
|
||||
return parseStringify(data);
|
||||
return data || { success: true };
|
||||
} catch (error) {
|
||||
return {
|
||||
error: getErrorMessage(error),
|
||||
};
|
||||
// eslint-disable-next-line no-console
|
||||
console.error("Error deleting provider:", error);
|
||||
return { error: getErrorMessage(error) };
|
||||
}
|
||||
};
|
||||
|
||||
@@ -222,16 +222,24 @@ export const deleteRole = async (roleId: string) => {
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json();
|
||||
throw new Error(errorData?.message || "Failed to delete the role");
|
||||
try {
|
||||
const errorData = await response.json();
|
||||
throw new Error(errorData?.message || "Failed to delete the role");
|
||||
} catch {
|
||||
throw new Error("Failed to delete the role");
|
||||
}
|
||||
}
|
||||
|
||||
let data = null;
|
||||
if (response.status !== 204) {
|
||||
data = await response.json();
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
revalidatePath("/roles");
|
||||
return data;
|
||||
return data || { success: true };
|
||||
} catch (error) {
|
||||
return {
|
||||
error: getErrorMessage(error),
|
||||
};
|
||||
// eslint-disable-next-line no-console
|
||||
console.error("Error deleting role:", error);
|
||||
return { error: getErrorMessage(error) };
|
||||
}
|
||||
};
|
||||
|
||||
@@ -157,9 +157,14 @@ export const updateUserRole = async (formData: FormData) => {
|
||||
export const deleteUser = async (formData: FormData) => {
|
||||
const session = await auth();
|
||||
const keyServer = process.env.API_BASE_URL;
|
||||
|
||||
const userId = formData.get("userId");
|
||||
|
||||
if (!userId) {
|
||||
return { error: "User ID is required" };
|
||||
}
|
||||
|
||||
const url = new URL(`${keyServer}/users/${userId}`);
|
||||
|
||||
try {
|
||||
const response = await fetch(url.toString(), {
|
||||
method: "DELETE",
|
||||
@@ -167,14 +172,27 @@ export const deleteUser = async (formData: FormData) => {
|
||||
Authorization: `Bearer ${session?.accessToken}`,
|
||||
},
|
||||
});
|
||||
const data = await response.json();
|
||||
await wait(1000);
|
||||
|
||||
if (!response.ok) {
|
||||
try {
|
||||
const errorData = await response.json();
|
||||
throw new Error(errorData?.message || "Failed to delete the user");
|
||||
} catch {
|
||||
throw new Error("Failed to delete the user");
|
||||
}
|
||||
}
|
||||
|
||||
let data = null;
|
||||
if (response.status !== 204) {
|
||||
data = await response.json();
|
||||
}
|
||||
|
||||
revalidatePath("/users");
|
||||
return parseStringify(data);
|
||||
return data || { success: true };
|
||||
} catch (error) {
|
||||
return {
|
||||
error: getErrorMessage(error),
|
||||
};
|
||||
// eslint-disable-next-line no-console
|
||||
console.error("Error deleting user:", error);
|
||||
return { error: getErrorMessage(error) };
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user