mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-04-01 05:37:14 +00:00
feat(ui): add switchTenant server action
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -82,3 +82,72 @@ export async function updateTenantName(_prevState: any, formData: FormData) {
|
||||
return handleApiError(error);
|
||||
}
|
||||
}
|
||||
|
||||
const switchTenantSchema = z.object({
|
||||
tenantId: z.uuid(),
|
||||
});
|
||||
|
||||
interface SwitchTenantSuccess {
|
||||
success: true;
|
||||
accessToken: string;
|
||||
refreshToken: string;
|
||||
}
|
||||
|
||||
interface SwitchTenantError {
|
||||
error: string;
|
||||
}
|
||||
|
||||
export type SwitchTenantState = SwitchTenantSuccess | SwitchTenantError;
|
||||
|
||||
export async function switchTenant(
|
||||
_prevState: SwitchTenantState | null,
|
||||
formData: FormData,
|
||||
): Promise<SwitchTenantState> {
|
||||
const formDataObject = Object.fromEntries(formData);
|
||||
const validatedData = switchTenantSchema.safeParse(formDataObject);
|
||||
|
||||
if (!validatedData.success) {
|
||||
return { error: "Invalid tenant ID" };
|
||||
}
|
||||
|
||||
const { tenantId } = validatedData.data;
|
||||
const headers = await getAuthHeaders({ contentType: true });
|
||||
|
||||
const payload = {
|
||||
data: {
|
||||
type: "tokens-switch-tenant",
|
||||
attributes: {
|
||||
tenant_id: tenantId,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
try {
|
||||
const url = new URL(`${apiBaseUrl}/tokens/switch`);
|
||||
const response = await fetch(url.toString(), {
|
||||
method: "POST",
|
||||
headers,
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json().catch(() => null);
|
||||
const errorDetail =
|
||||
errorData?.errors?.[0]?.detail ||
|
||||
`Failed to switch tenant: ${response.statusText}`;
|
||||
throw new Error(errorDetail);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
const accessToken = data?.data?.attributes?.access;
|
||||
const refreshToken = data?.data?.attributes?.refresh;
|
||||
|
||||
if (!accessToken || !refreshToken) {
|
||||
throw new Error("Missing tokens in switch tenant response");
|
||||
}
|
||||
|
||||
return { success: true, accessToken, refreshToken };
|
||||
} catch (error) {
|
||||
return handleApiError(error);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user