- Implement tests for ImportSuccessModal to verify rendering and functionality. - Update AuthContext to store authentication token in localStorage and manage token state. - Modify useImport hook to capture and expose commit results, preventing unnecessary refetches. - Enhance useCertificates hook to support optional refetch intervals. - Update Dashboard to conditionally poll certificates based on pending status. - Integrate ImportSuccessModal into ImportCaddy for user feedback on import completion. - Adjust Login component to utilize returned token for authentication. - Refactor CrowdSecConfig tests for improved readability and reliability. - Add debug_db.py script for inspecting the SQLite database. - Update integration and test scripts for better configuration and error handling. - Introduce Trivy scan script for vulnerability assessment of Docker images.
92 lines
2.8 KiB
TypeScript
92 lines
2.8 KiB
TypeScript
import client from './client';
|
|
|
|
export interface ImportSession {
|
|
id: string;
|
|
state: 'pending' | 'reviewing' | 'completed' | 'failed' | 'transient';
|
|
created_at: string;
|
|
updated_at: string;
|
|
source_file?: string;
|
|
}
|
|
|
|
export interface ImportPreview {
|
|
session: ImportSession;
|
|
preview: {
|
|
hosts: Array<{ domain_names: string; [key: string]: unknown }>;
|
|
conflicts: string[];
|
|
errors: string[];
|
|
};
|
|
caddyfile_content?: string;
|
|
conflict_details?: Record<string, {
|
|
existing: {
|
|
forward_scheme: string;
|
|
forward_host: string;
|
|
forward_port: number;
|
|
ssl_forced: boolean;
|
|
websocket: boolean;
|
|
enabled: boolean;
|
|
};
|
|
imported: {
|
|
forward_scheme: string;
|
|
forward_host: string;
|
|
forward_port: number;
|
|
ssl_forced: boolean;
|
|
websocket: boolean;
|
|
};
|
|
}>;
|
|
}
|
|
|
|
export const uploadCaddyfile = async (content: string): Promise<ImportPreview> => {
|
|
const { data } = await client.post<ImportPreview>('/import/upload', { content });
|
|
return data;
|
|
};
|
|
|
|
export const uploadCaddyfilesMulti = async (contents: string[]): Promise<ImportPreview> => {
|
|
const { data } = await client.post<ImportPreview>('/import/upload-multi', { contents });
|
|
return data;
|
|
};
|
|
|
|
export const getImportPreview = async (): Promise<ImportPreview> => {
|
|
const { data } = await client.get<ImportPreview>('/import/preview');
|
|
return data;
|
|
};
|
|
|
|
export interface ImportCommitResult {
|
|
created: number;
|
|
updated: number;
|
|
skipped: number;
|
|
errors: string[];
|
|
}
|
|
|
|
export const commitImport = async (
|
|
sessionUUID: string,
|
|
resolutions: Record<string, string>,
|
|
names: Record<string, string>
|
|
): Promise<ImportCommitResult> => {
|
|
const { data } = await client.post<ImportCommitResult>('/import/commit', {
|
|
session_uuid: sessionUUID,
|
|
resolutions,
|
|
names,
|
|
});
|
|
return data;
|
|
};
|
|
|
|
export const cancelImport = async (): Promise<void> => {
|
|
await client.post('/import/cancel');
|
|
};
|
|
|
|
export const getImportStatus = async (): Promise<{ has_pending: boolean; session?: ImportSession }> => {
|
|
// Note: Assuming there might be a status endpoint or we infer from preview.
|
|
// If no dedicated status endpoint exists in backend, we might rely on preview returning 404 or empty.
|
|
// Based on previous context, there wasn't an explicit status endpoint mentioned in the simple API,
|
|
// but the hook used `importAPI.status()`. I'll check the backend routes if needed.
|
|
// For now, I'll implement it assuming /import/preview can serve as status check or there is a /import/status.
|
|
// Let's check the backend routes to be sure.
|
|
try {
|
|
const { data } = await client.get<{ has_pending: boolean; session?: ImportSession }>('/import/status');
|
|
return data;
|
|
} catch {
|
|
// Fallback if status endpoint doesn't exist, though the hook used it.
|
|
return { has_pending: false };
|
|
}
|
|
};
|