fix: ACME certificate issuance improvements, null-safe hardening, guided setup UX, and order list enhancements (Issue #9)

- Fix critical cascading NULL status bug in ACME challenge flow that could cause 404s
- Add defense-in-depth NULL handling across all ACME service methods
- Add new GET /api/letsencrypt/prerequisites endpoint for configuration checks
- Add interactive ACME Setup Guide with step-by-step navigation links
- Add URL-based tab navigation in Settings and SSL Management pages
- Harden retry flow: return clear 409 errors for invalid/cancelled orders
- Allow cancellation of invalid orders (backend + frontend)
- Improve error message extraction with consistent getErrorMsg helper
- Add status filter tabs (Active/Completed/Failed/All) for order list
- Add visual dimming for cancelled/invalid orders
- Add enhanced pagination with size changer and total count
- Add comprehensive diagnostic logging with ACME: prefix
- Update README with ACME architecture docs, quick start guide, and troubleshooting

Resolves #9

Made-with: Cursor
This commit is contained in:
taylanbakircioglu
2026-04-04 15:15:05 +03:00
parent c2766eadbd
commit deb784bb65
8 changed files with 427 additions and 49 deletions
+4
View File
@@ -16,6 +16,7 @@ import {
ThunderboltOutlined
} from '@ant-design/icons';
import axios from 'axios';
import { useSearchParams } from 'react-router-dom';
import { useCluster } from '../contexts/ClusterContext';
import { useProgress } from '../contexts/ProgressContext';
import { formatEntityForSync } from '../utils/agentSync';
@@ -26,6 +27,8 @@ const { TextArea } = Input;
const { TabPane } = Tabs;
const SSLManagement = () => {
const [searchParams] = useSearchParams();
const defaultTab = searchParams.get('tab') || 'certificates';
const { token } = theme.useToken();
const { selectedCluster, clusters } = useCluster();
const [certificates, setCertificates] = useState([]);
@@ -893,6 +896,7 @@ const SSLManagement = () => {
)}
</Title>
<Tabs
defaultActiveKey={defaultTab}
items={[
{
key: 'certificates',