
Juan DenisandClaude Opus 4.8
b9ee243ba2
feat(cloudflare): restore Round 2 engine — DNSSEC, Origin CA, rules, activity (plan 42 ph2)
Restore the plan-36 Cloudflare Round 2 backend lost in the rebuild (migrations
073/074 survived; the engine + test_cloudflare_round2.py did not):
- CfOpsChange model (verbatim from clean pyc dump, matches mig 074) +
CfOpsChangeService.record (never-raises) / list.
- Core client (dns/cloudflare.py): get/set_dnssec; create/list/revoke Origin
certificates; X-Auth-User-Service-Key header mode (origin_ca_key, mig 073).
- Extension service: DNSSEC get/set; Origin CA issue (panel-side CSR, key never
leaves the box, proxied-hostname warning, scoped-cred 400 not 502) /list/revoke
+ Linux-guarded install via upload_custom_cert; Redirect+Transform rules
(RULE_PHASES/ACTIONS/PRESETS reusing _find_custom_ruleset + injection guard);
best-effort _record wired into every mutating method; scope_check probe;
list_activity.
- Extension routes: /zones/<id>/dnssec, origin-ca, /rules/<slug>, /activity,
/scope-check (admin-gated, CloudflareError->400, provider->502).
- ssl_service.list_certificates walks /etc/ssl/serverkit + "Origin CA
(proxy-only)" badge; fixed certbot-branch early-return hiding custom certs.
Also registers EmailBounceState (plan 42 ph3) in models/__init__ (shared file).
Deviation: origin_ca_key implemented as the Fernet Origin CA *service key* (plan
Decision 3), not mig-073's docstring "generated private key" — the generated key
is used inline for install and never persisted. R2 preset backend-untouched (it
lives in the storage-provider + frontend layers). Verified: 83 passed
(round2 30 + zone_settings 42 + extraction 8 + ssl 3), no regression.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 05:02:54 -04:00
..
2026-07-09 05:02:54 -04:00
2026-03-23 02:08:00 -04:00
2026-06-01 02:39:05 -04:00
2026-03-04 01:53:46 -05:00
2026-03-04 01:53:46 -05:00
2026-07-08 00:17:55 -04:00
2026-07-04 01:16:29 -04:00
2026-06-23 19:33:44 -04:00
2026-07-08 00:17:55 -04:00
2026-05-03 15:57:02 -04:00
2026-07-07 20:29:25 -04:00
2026-07-07 20:29:25 -04:00
2026-07-09 05:02:54 -04:00
2026-07-07 20:29:29 -04:00
2026-03-23 21:25:40 -04:00
2026-06-22 20:34:32 -04:00
2026-06-22 20:27:36 -04:00
2026-07-01 01:35:44 -04:00
2026-06-19 10:13:50 -04:00
2026-06-19 09:54:40 -04:00
2026-07-07 20:29:29 -04:00
2026-06-19 03:12:07 -04:00
2026-06-24 14:52:04 -04:00
2026-06-23 18:49:04 -04:00
2026-01-18 04:20:30 -05:00
2026-06-22 16:34:17 -04:00
2026-07-08 00:17:55 -04:00
2026-06-22 16:12:31 -04:00
2026-06-23 00:34:55 -04:00
2026-01-17 04:22:12 -05:00
2026-07-09 04:55:53 -04:00
2026-06-24 14:32:41 -04:00
2026-07-08 00:17:55 -04:00
2026-07-04 01:34:54 -04:00
2026-01-27 19:35:21 -05:00
2026-06-23 19:33:44 -04:00
2026-06-21 20:19:57 -04:00
2026-06-15 23:20:00 -04:00
2026-07-08 00:17:55 -04:00
2026-06-19 01:33:45 -04:00
2026-06-19 09:22:18 -04:00
2026-03-23 01:58:28 -04:00
2026-07-03 14:23:50 -04:00
2026-07-03 14:24:15 -04:00
2026-07-01 09:44:48 -04:00
2026-06-22 16:24:53 -04:00
2026-03-23 01:58:28 -04:00
2026-01-27 19:35:21 -05:00
2026-07-08 01:41:43 -04:00
2026-03-04 01:37:22 -05:00
2026-06-19 01:33:45 -04:00
2026-04-29 03:08:21 -04:00
2026-07-02 02:09:39 -04:00
2026-06-23 19:33:44 -04:00
2026-01-27 19:35:21 -05:00
2026-06-23 19:33:44 -04:00
2026-06-15 10:33:09 -04:00
2026-07-07 20:29:25 -04:00
2026-01-27 19:35:21 -05:00
2026-06-20 12:47:37 -04:00
2026-01-22 18:11:22 -05:00
2026-06-23 18:23:47 -04:00
2026-07-07 20:29:24 -04:00
2026-03-23 02:11:16 -04:00
2026-07-08 02:06:01 -04:00
2026-06-23 23:19:41 -04:00
2026-07-03 15:21:48 -04:00
2026-07-01 00:07:00 -04:00
2026-07-08 01:41:22 -04:00
2026-06-15 09:19:56 -04:00
2026-06-01 00:47:26 -04:00
2026-06-21 20:19:57 -04:00
2026-01-18 05:01:49 -05:00
2026-06-15 23:20:00 -04:00
2026-07-07 20:29:31 -04:00
2026-06-19 14:02:24 -04:00
2026-06-20 12:47:37 -04:00
2026-01-21 21:31:57 -05:00
2026-07-01 01:08:42 -04:00
2026-06-01 03:04:03 -04:00
2026-03-23 01:10:28 -04:00
2026-06-01 11:59:34 -04:00