| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- """Require three distinct identities for every WP13 approval."""
- from alembic import op
- revision = "20260818_559"
- down_revision = "20260818_558"
- branch_labels = None
- depends_on = None
- _FACT_TABLES = (
- "plugin_registry_versions", "plugin_approvals", "plugin_runtime_leases",
- "plugin_runs", "plugin_dead_letters", "plugin_audit_outbox",
- "plugin_request_claims", "plugin_runtime_breakers", "plugin_recovery_claims",
- )
- def upgrade() -> None:
- op.get_bind().exec_driver_sql(r'''
- ALTER TABLE public.plugin_registry_versions
- ADD COLUMN review_manifest_digest char(64) CHECK(review_manifest_digest ~ '^[0-9a-f]{64}$');
- DO $preflight$
- BEGIN
- IF EXISTS(SELECT 1 FROM public.plugin_registry_versions WHERE state<>'draft') THEN
- RAISE EXCEPTION 'plugin_review_fact_backfill_denied';
- END IF;
- END $preflight$;
- CREATE FUNCTION public.plugin_platform_control_v5(p jsonb) RETURNS jsonb
- LANGUAGE plpgsql SECURITY DEFINER SET search_path=pg_catalog,public AS $control$
- DECLARE r record; a record; result jsonb;
- BEGIN
- IF NOT pg_has_role(session_user,'dataops_plugin_platform_control','MEMBER') OR jsonb_typeof(p)<>'object' THEN RAISE EXCEPTION 'plugin_control_denied'; END IF;
- IF p->>'action'='register' THEN
- result:=public.plugin_platform_control_v4(p);
- UPDATE public.plugin_registry_versions SET review_manifest_digest=NULL
- WHERE plugin_uid=p->>'plugin_uid' AND version=p->>'version';
- RETURN result;
- ELSIF p->>'action'='review' THEN
- IF p-ARRAY['action','plugin_uid','version','actor_ref']<>'{}'::jsonb THEN RAISE EXCEPTION 'plugin_review_closed'; END IF;
- SELECT * INTO r FROM public.plugin_registry_versions WHERE plugin_uid=p->>'plugin_uid' AND version=p->>'version' FOR UPDATE;
- IF NOT FOUND OR r.state<>'draft' OR r.submitter_ref IS NULL OR r.submitter_ref=p->>'actor_ref' THEN RAISE EXCEPTION 'plugin_review_independence_denied'; END IF;
- result:=public.plugin_platform_control_v3(p);
- UPDATE public.plugin_registry_versions
- SET review_generation=review_generation+1,reviewed_at=clock_timestamp(),review_manifest_digest=manifest_digest
- WHERE plugin_uid=p->>'plugin_uid' AND version=p->>'version' AND state='reviewed';
- RETURN result;
- ELSIF p->>'action'='issue_approval' THEN
- IF p-ARRAY['action','plugin_uid','version','actor_ref','approval_action','tenant_ref','domain_ref','expires_in_seconds']<>'{}'::jsonb THEN RAISE EXCEPTION 'plugin_approval_closed'; END IF;
- SELECT * INTO r FROM public.plugin_registry_versions WHERE plugin_uid=p->>'plugin_uid' AND version=p->>'version' FOR UPDATE;
- IF NOT FOUND OR r.state<>'reviewed' OR r.submitter_ref IS NULL OR r.review_actor IS NULL
- OR r.submitter_ref=r.review_actor OR r.submitter_ref=p->>'actor_ref'
- OR r.review_actor=p->>'actor_ref' OR r.reviewed_at IS NULL
- OR r.review_manifest_digest IS NULL OR r.review_manifest_digest<>r.manifest_digest THEN RAISE EXCEPTION 'plugin_three_identity_denied'; END IF;
- RETURN public.plugin_platform_control_v4(p);
- ELSIF p->>'action'='transition' THEN
- IF p-ARRAY['action','plugin_uid','version','actor_ref','tenant_ref','domain_ref','approval_uid','target_state','expected_fence','incident_uid']<>'{}'::jsonb THEN RAISE EXCEPTION 'plugin_transition_closed'; END IF;
- SELECT * INTO r FROM public.plugin_registry_versions WHERE plugin_uid=p->>'plugin_uid' AND version=p->>'version' FOR UPDATE;
- SELECT * INTO a FROM public.plugin_approvals WHERE approval_uid=(p->>'approval_uid')::uuid FOR UPDATE;
- IF NOT FOUND OR r.submitter_ref IS NULL OR r.review_actor IS NULL
- OR r.submitter_ref=r.review_actor OR r.submitter_ref=p->>'actor_ref'
- OR r.review_actor=p->>'actor_ref' OR a.actor_ref<>p->>'actor_ref'
- OR a.actor_ref=r.submitter_ref OR a.reviewer_ref<>r.review_actor
- OR r.reviewed_at IS NULL OR r.review_manifest_digest IS NULL
- OR r.review_manifest_digest<>r.manifest_digest OR a.manifest_digest<>r.review_manifest_digest THEN RAISE EXCEPTION 'plugin_three_identity_denied'; END IF;
- RETURN public.plugin_platform_control_v4(p);
- END IF;
- RETURN public.plugin_platform_control_v4(p);
- END $control$;
- ALTER FUNCTION public.plugin_platform_control_v5(jsonb) OWNER TO dataops_plugin_platform_owner;
- REVOKE ALL ON FUNCTION public.plugin_platform_control_v4(jsonb) FROM PUBLIC,dataops_app,dataops_app_runtime,dataops_plugin_platform_control;
- GRANT EXECUTE ON FUNCTION public.plugin_platform_control_v5(jsonb) TO dataops_plugin_platform_control;
- ''')
- def downgrade() -> None:
- bind = op.get_bind()
- checks = " OR ".join(f"EXISTS(SELECT 1 FROM public.{table} LIMIT 1)" for table in _FACT_TABLES)
- if bind.exec_driver_sql(f"SELECT {checks}").scalar():
- raise RuntimeError("downgrade refused: three-identity WP13 facts are nonempty")
- bind.exec_driver_sql('''
- REVOKE ALL ON FUNCTION public.plugin_platform_control_v5(jsonb) FROM PUBLIC,dataops_app,dataops_app_runtime,dataops_plugin_platform_control;
- DROP FUNCTION public.plugin_platform_control_v5(jsonb);
- ALTER TABLE public.plugin_registry_versions DROP COLUMN review_manifest_digest;
- GRANT EXECUTE ON FUNCTION public.plugin_platform_control_v4(jsonb) TO dataops_plugin_platform_control;
- ''')
|