plone.securitytxt 1.0.0b1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- plone_securitytxt-1.0.0b1/.copier-answers.yml +14 -0
- plone_securitytxt-1.0.0b1/.copier-answers.zope-instance-instance.yml +8 -0
- plone_securitytxt-1.0.0b1/.copier-answers.zope-setup.yml +10 -0
- plone_securitytxt-1.0.0b1/.devshell.json +6 -0
- plone_securitytxt-1.0.0b1/.editorconfig +21 -0
- plone_securitytxt-1.0.0b1/.github/workflows/ci.yml +73 -0
- plone_securitytxt-1.0.0b1/.gitignore +94 -0
- plone_securitytxt-1.0.0b1/.pi/remote-pi/config.json +4 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/30886047_reviewer_0_input.md +60 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/30886047_reviewer_0_meta.json +154 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/30886047_reviewer_0_output.md +5 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/30886047_reviewer_0_transcript.jsonl +99 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/4a07104b_reviewer_0_input.md +61 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/4a07104b_reviewer_0_meta.json +165 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/4a07104b_reviewer_0_output.md +7 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/4a07104b_reviewer_0_transcript.jsonl +179 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/50004a9d_reviewer_0_input.md +56 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/50004a9d_reviewer_0_meta.json +148 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/50004a9d_reviewer_0_output.md +4 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/50004a9d_reviewer_0_transcript.jsonl +117 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/62ce02df_researcher_0_input.md +60 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/62ce02df_researcher_0_meta.json +198 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/62ce02df_researcher_0_output.md +5 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/62ce02df_researcher_0_transcript.jsonl +181 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/658da225_researcher_0_input.md +58 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/658da225_researcher_0_meta.json +140 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/658da225_researcher_0_output.md +3 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/658da225_researcher_0_transcript.jsonl +143 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/77bdf31b_reviewer_0_input.md +56 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/77bdf31b_reviewer_0_meta.json +153 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/77bdf31b_reviewer_0_output.md +5 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/77bdf31b_reviewer_0_transcript.jsonl +91 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/7e872312_researcher_0_input.md +54 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/7e872312_researcher_0_meta.json +145 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/7e872312_researcher_0_output.md +9 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/7e872312_researcher_0_transcript.jsonl +64 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/80000f4f_reviewer_0_input.md +56 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/80000f4f_reviewer_0_meta.json +162 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/80000f4f_reviewer_0_output.md +43 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/80000f4f_reviewer_0_transcript.jsonl +247 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/936a7816_reviewer_input.md +65 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/936a7816_reviewer_meta.json +134 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/936a7816_reviewer_output.md +3 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/936a7816_reviewer_transcript.jsonl +95 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/9b5edec9_researcher_0_input.md +60 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/9b5edec9_researcher_0_meta.json +138 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/9b5edec9_researcher_0_output.md +3 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/9b5edec9_researcher_0_transcript.jsonl +128 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/a7ba15b7_reviewer_0_input.md +61 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/a7ba15b7_reviewer_0_meta.json +154 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/a7ba15b7_reviewer_0_output.md +6 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/a7ba15b7_reviewer_0_transcript.jsonl +120 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/ae45c617_oracle_0_input.md +63 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/ae45c617_oracle_0_meta.json +139 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/ae45c617_oracle_0_output.md +132 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/ae45c617_oracle_0_transcript.jsonl +32 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/da2585c5_reviewer_0_input.md +56 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/da2585c5_reviewer_0_meta.json +144 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/da2585c5_reviewer_0_output.md +5 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/da2585c5_reviewer_0_transcript.jsonl +142 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/e7de5dda_reviewer_input.md +65 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/e7de5dda_reviewer_meta.json +135 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/e7de5dda_reviewer_output.md +13 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/e7de5dda_reviewer_transcript.jsonl +23 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/f409f5cb_reviewer_0_input.md +60 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/f409f5cb_reviewer_0_meta.json +153 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/f409f5cb_reviewer_0_output.md +9 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/f409f5cb_reviewer_0_transcript.jsonl +131 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/f93a8c4e_reviewer_0_input.md +56 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/f93a8c4e_reviewer_0_meta.json +152 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/f93a8c4e_reviewer_0_output.md +6 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/f93a8c4e_reviewer_0_transcript.jsonl +111 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/outputs/62ce02df/.scratch/securitytxt-control-panel/research-agent-output.md +123 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/outputs/9b5edec9/research.md +180 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/artifacts/outputs/ae45c617/.pi-subagents/implementation-plan.md +132 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/missions/46cc410e-fba0-40db-abef-248e401208e3.json +137 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/missions/492f9ce8-2358-4d0f-8f6b-42c5777b6d0e.json +39 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/missions/5620fe14-ab73-4df4-aa4c-3f5498bfca13.json +39 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/missions/569b005b-7eb0-4474-9ea1-0adf6f84b360.json +61 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/missions/57b0209d-6d94-4bbb-8444-4d0e8056e84e.json +24 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/missions/7c41d3f3-19f7-4f34-b759-0586104a5a5c.json +86 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/missions/8057b9dc-f5b4-49e3-a014-0d350cffdf1f.json +86 -0
- plone_securitytxt-1.0.0b1/.pi-subagents/missions/fed61d4e-ed50-43af-a331-2dad1b49b270.json +86 -0
- plone_securitytxt-1.0.0b1/.pre-commit-config.yaml +14 -0
- plone_securitytxt-1.0.0b1/.sandboxsh.json +21 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/issues/01-establish-standards-baseline.md +18 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/issues/02-define-policy-field-model.md +64 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/issues/03-define-publication-http-semantics.md +50 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/issues/04-prototype-control-panel.md +47 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/issues/05-evaluate-openpgp-approaches.md +19 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/issues/06-define-signing-contract.md +126 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/issues/07-confirm-plone-integration-seams.md +18 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/issues/08-choose-integration-architecture.md +75 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/issues/09-define-release-acceptance.md +133 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/map.md +52 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/prototypes/control-panel.html +326 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/research/openpgp-signing-approaches.md +115 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/research/plone-integration-seams.md +133 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/research/release-compatibility.md +180 -0
- plone_securitytxt-1.0.0b1/.scratch/securitytxt-control-panel/research/securitytxt-standards-baseline.md +121 -0
- plone_securitytxt-1.0.0b1/AGENTS.md +15 -0
- plone_securitytxt-1.0.0b1/CHANGELOG.md +8 -0
- plone_securitytxt-1.0.0b1/CLAUDE.md +5 -0
- plone_securitytxt-1.0.0b1/CONTEXT.md +33 -0
- plone_securitytxt-1.0.0b1/PKG-INFO +107 -0
- plone_securitytxt-1.0.0b1/README.md +66 -0
- plone_securitytxt-1.0.0b1/docs/adr/0001-authoritative-security-policy-application-module.md +3 -0
- plone_securitytxt-1.0.0b1/docs/adr/0002-retain-exact-publication-artifacts.md +3 -0
- plone_securitytxt-1.0.0b1/docs/agents/domain.md +21 -0
- plone_securitytxt-1.0.0b1/docs/agents/issue-tracker.md +30 -0
- plone_securitytxt-1.0.0b1/docs/agents/triage-labels.md +11 -0
- plone_securitytxt-1.0.0b1/docs/deployment.md +9 -0
- plone_securitytxt-1.0.0b1/docs/rest-api.md +14 -0
- plone_securitytxt-1.0.0b1/docs/security-policy.md +9 -0
- plone_securitytxt-1.0.0b1/docs/signing.md +13 -0
- plone_securitytxt-1.0.0b1/pyproject.toml +134 -0
- plone_securitytxt-1.0.0b1/sources/.gitkeep +0 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/__init__.py +8 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/configure.zcml +47 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/controlpanels/__init__.py +1 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/controlpanels/configure.zcml +13 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/controlpanels/security_policy.pt +81 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/controlpanels/security_policy.py +356 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/i18n.py +5 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/interfaces.py +7 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/locales/README.rst +37 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/locales/__init__.py +0 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/locales/de/LC_MESSAGES/plone.securitytxt.po +518 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/locales/en/LC_MESSAGES/plone.securitytxt.po +516 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/locales/plone.securitytxt.pot +519 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/locales/update.py +74 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/locales/update.sh +12 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/permissions.zcml +13 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/policy.py +890 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/profiles/default/browserlayer.xml +7 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/profiles/default/catalog.xml +5 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/profiles/default/controlpanel.xml +18 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/profiles/default/metadata.xml +7 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/profiles/default/rolemap.xml +9 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/profiles/uninstall/browserlayer.xml +7 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/profiles/uninstall/controlpanel.xml +4 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/profiles/uninstall/metadata.xml +4 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/profiles/uninstall/rolemap.xml +6 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/publisher.py +102 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/services/__init__.py +1 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/services/configure.zcml +30 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/services/security_policy.py +130 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/setuphandlers.py +31 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/signing.py +175 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/signing_helper.py +133 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/testing.py +58 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/viewlets/__init__.py +1 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/viewlets/configure.zcml +15 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/viewlets/security_policy_warning.pt +11 -0
- plone_securitytxt-1.0.0b1/src/plone/securitytxt/viewlets/security_policy_warning.py +30 -0
- plone_securitytxt-1.0.0b1/tasks.py +134 -0
- plone_securitytxt-1.0.0b1/tests/__init__.py +0 -0
- plone_securitytxt-1.0.0b1/tests/conftest.py +21 -0
- plone_securitytxt-1.0.0b1/tests/test_controlpanel_e2e.py +81 -0
- plone_securitytxt-1.0.0b1/tests/test_controlpanel_security_policy.py +80 -0
- plone_securitytxt-1.0.0b1/tests/test_locales.py +96 -0
- plone_securitytxt-1.0.0b1/tests/test_policy_application.py +235 -0
- plone_securitytxt-1.0.0b1/tests/test_publisher.py +134 -0
- plone_securitytxt-1.0.0b1/tests/test_service_security_policy.py +140 -0
- plone_securitytxt-1.0.0b1/tests/test_setup.py +61 -0
- plone_securitytxt-1.0.0b1/tests/test_signing.py +52 -0
- plone_securitytxt-1.0.0b1/tests/test_viewlet_security_policy_warning.py +76 -0
- plone_securitytxt-1.0.0b1/uv.lock +6584 -0
- plone_securitytxt-1.0.0b1/var/instance/etc/zope.conf +23 -0
- plone_securitytxt-1.0.0b1/var/instance/etc/zope.ini +49 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Do not edit this file manually.
|
|
2
|
+
# This file is auto-generated by Copier.
|
|
3
|
+
# Changes here will be overwritten when you update the template.
|
|
4
|
+
_src_path: /home/maik/.copier-templates/plone-copier-templates/backend_addon
|
|
5
|
+
author_email: md@derico.de
|
|
6
|
+
author_name: Maik Derstappen
|
|
7
|
+
github_organization: collective
|
|
8
|
+
is_headless: false
|
|
9
|
+
package_description: A Plone addon to generate and provide a security.txt for the
|
|
10
|
+
Plone website.
|
|
11
|
+
package_name: plone.securitytxt
|
|
12
|
+
package_title: Plone security.txt
|
|
13
|
+
plone_version: '6.0'
|
|
14
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Do not edit this file manually.
|
|
2
|
+
# This file is auto-generated by Copier.
|
|
3
|
+
# Changes here will be overwritten when you update the template.
|
|
4
|
+
_src_path: /home/maik/.copier-templates/plone-copier-templates/zope-setup
|
|
5
|
+
author_email: md@derico.de
|
|
6
|
+
author_name: Maik Derstappen
|
|
7
|
+
distribution: plone.classicui
|
|
8
|
+
initial_zope_username: admin
|
|
9
|
+
plone_version: 6.2.1
|
|
10
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
[*]
|
|
2
|
+
charset = utf-8
|
|
3
|
+
end_of_line = lf
|
|
4
|
+
indent_style = space
|
|
5
|
+
insert_final_newline = true
|
|
6
|
+
trim_trailing_whitespace = true
|
|
7
|
+
|
|
8
|
+
[*.py]
|
|
9
|
+
indent_size = 4
|
|
10
|
+
|
|
11
|
+
[*.{cfg,ini,toml}]
|
|
12
|
+
indent_size = 4
|
|
13
|
+
|
|
14
|
+
[*.{xml,zcml,html,pt,zpt}]
|
|
15
|
+
indent_size = 2
|
|
16
|
+
|
|
17
|
+
[*.{css,js,json}]
|
|
18
|
+
indent_size = 2
|
|
19
|
+
|
|
20
|
+
[*.{yml,yaml}]
|
|
21
|
+
indent_size = 2
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, master]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, master]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
include:
|
|
16
|
+
- {plone: "6.0.15", python: "3.10"}
|
|
17
|
+
- {plone: "6.0.15", python: "3.11"}
|
|
18
|
+
- {plone: "6.0.15", python: "3.12"}
|
|
19
|
+
- {plone: "6.0.15", python: "3.13"}
|
|
20
|
+
- {plone: "6.1.5", python: "3.10"}
|
|
21
|
+
- {plone: "6.1.5", python: "3.11"}
|
|
22
|
+
- {plone: "6.1.5", python: "3.12"}
|
|
23
|
+
- {plone: "6.1.5", python: "3.13"}
|
|
24
|
+
- {plone: "6.2.1", python: "3.10"}
|
|
25
|
+
- {plone: "6.2.1", python: "3.11"}
|
|
26
|
+
- {plone: "6.2.1", python: "3.12"}
|
|
27
|
+
- {plone: "6.2.1", python: "3.13"}
|
|
28
|
+
- {plone: "6.2.1", python: "3.14"}
|
|
29
|
+
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@v4
|
|
32
|
+
- uses: actions/setup-python@v5
|
|
33
|
+
with:
|
|
34
|
+
python-version: ${{ matrix.python }}
|
|
35
|
+
cache: pip
|
|
36
|
+
- name: Install the supported Plone boundary
|
|
37
|
+
run: |
|
|
38
|
+
python -m pip install --upgrade pip
|
|
39
|
+
pip install \
|
|
40
|
+
-c "https://dist.plone.org/release/${{ matrix.plone }}/constraints.txt" \
|
|
41
|
+
-e ".[test]"
|
|
42
|
+
- name: Record resolved versions
|
|
43
|
+
run: |
|
|
44
|
+
python -c "import platform, Products.CMFPlone; print(platform.python_version(), Products.CMFPlone.__version__)"
|
|
45
|
+
pip show Plone plone.restapi
|
|
46
|
+
- run: pytest -v
|
|
47
|
+
|
|
48
|
+
base-smoke:
|
|
49
|
+
strategy:
|
|
50
|
+
matrix:
|
|
51
|
+
os: [windows-latest, macos-latest]
|
|
52
|
+
python: ["3.10", "3.14"]
|
|
53
|
+
runs-on: ${{ matrix.os }}
|
|
54
|
+
steps:
|
|
55
|
+
- uses: actions/checkout@v4
|
|
56
|
+
- uses: actions/setup-python@v5
|
|
57
|
+
with:
|
|
58
|
+
python-version: ${{ matrix.python }}
|
|
59
|
+
- run: pip install build
|
|
60
|
+
- run: python -m build
|
|
61
|
+
- run: pip install dist/*.whl
|
|
62
|
+
shell: bash
|
|
63
|
+
- run: python -c "import plone.securitytxt.policy, plone.securitytxt.publisher; import sys; assert 'gnupg' not in sys.modules"
|
|
64
|
+
|
|
65
|
+
lint:
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
steps:
|
|
68
|
+
- uses: actions/checkout@v4
|
|
69
|
+
- uses: actions/setup-python@v5
|
|
70
|
+
with:
|
|
71
|
+
python-version: "3.12"
|
|
72
|
+
- run: pip install ruff
|
|
73
|
+
- run: ruff check .
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
wheels/
|
|
22
|
+
*.egg-info/
|
|
23
|
+
.installed.cfg
|
|
24
|
+
*.egg
|
|
25
|
+
|
|
26
|
+
# PyInstaller
|
|
27
|
+
*.manifest
|
|
28
|
+
*.spec
|
|
29
|
+
|
|
30
|
+
# Installer logs
|
|
31
|
+
pip-log.txt
|
|
32
|
+
pip-delete-this-directory.txt
|
|
33
|
+
|
|
34
|
+
# Unit test / coverage reports
|
|
35
|
+
htmlcov/
|
|
36
|
+
.tox/
|
|
37
|
+
.nox/
|
|
38
|
+
.coverage
|
|
39
|
+
.coverage.*
|
|
40
|
+
.cache
|
|
41
|
+
nosetests.xml
|
|
42
|
+
coverage.xml
|
|
43
|
+
*.cover
|
|
44
|
+
*.py,cover
|
|
45
|
+
.hypothesis/
|
|
46
|
+
.pytest_cache/
|
|
47
|
+
|
|
48
|
+
# Translations (compiled catalogs are generated; .pot/.po are tracked)
|
|
49
|
+
*.mo
|
|
50
|
+
|
|
51
|
+
# Environments
|
|
52
|
+
.env
|
|
53
|
+
.venv
|
|
54
|
+
env/
|
|
55
|
+
venv/
|
|
56
|
+
ENV/
|
|
57
|
+
env.bak/
|
|
58
|
+
venv.bak/
|
|
59
|
+
|
|
60
|
+
# Type checkers / linters
|
|
61
|
+
.mypy_cache/
|
|
62
|
+
.pyre/
|
|
63
|
+
.pytype/
|
|
64
|
+
.ruff_cache/
|
|
65
|
+
|
|
66
|
+
# IDEs
|
|
67
|
+
.idea/
|
|
68
|
+
.vscode/
|
|
69
|
+
*.swp
|
|
70
|
+
*.swo
|
|
71
|
+
*~
|
|
72
|
+
|
|
73
|
+
# Node / frontend tooling
|
|
74
|
+
node_modules/
|
|
75
|
+
npm-debug.log*
|
|
76
|
+
yarn-debug.log*
|
|
77
|
+
yarn-error.log*
|
|
78
|
+
pnpm-debug.log*
|
|
79
|
+
.pnpm-store/
|
|
80
|
+
.parcel-cache/
|
|
81
|
+
.vite/
|
|
82
|
+
|
|
83
|
+
# Plone / Zope runtime data
|
|
84
|
+
var/*/inituser
|
|
85
|
+
var/*/var/
|
|
86
|
+
*.fs
|
|
87
|
+
*.fs.index
|
|
88
|
+
*.fs.lock
|
|
89
|
+
*.fs.tmp
|
|
90
|
+
blobs/
|
|
91
|
+
|
|
92
|
+
# Project specific
|
|
93
|
+
*.log
|
|
94
|
+
.DS_Store
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Task for reviewer
|
|
2
|
+
|
|
3
|
+
[Read from: /workspaces/plone.securitytxt/plan.md, /workspaces/plone.securitytxt/progress.md]
|
|
4
|
+
|
|
5
|
+
Re-review the final implementation in /workspaces/plone.securitytxt after fixes.
|
|
6
|
+
Diff command: git diff df6a0a4...HEAD
|
|
7
|
+
Commits: 537c166 Implement security.txt policy control panel; 93f4e36 Harden policy signing and management UI
|
|
8
|
+
Spec source: .scratch/securitytxt-control-panel/map.md and all .scratch/securitytxt-control-panel/issues/*.md.
|
|
9
|
+
Verify especially: emergency signing profile invalidation, malformed REST JSON atomicity, signing key/digest prerequisites, and Classic UI lifecycle/preview/confirmation. Report only remaining missing/incorrect requirements or material scope creep, quoting spec lines. Prioritize release blockers. Under 350 words. Do not edit.
|
|
10
|
+
|
|
11
|
+
## Acceptance Contract
|
|
12
|
+
Acceptance level: attested
|
|
13
|
+
Completion is not accepted from prose alone. End with a structured acceptance report.
|
|
14
|
+
|
|
15
|
+
Criteria:
|
|
16
|
+
- criterion-1: Return concrete findings with file paths and severity when applicable
|
|
17
|
+
|
|
18
|
+
Required evidence: review-findings, residual-risks
|
|
19
|
+
|
|
20
|
+
Finish with a fenced JSON block tagged `acceptance-report` in this shape:
|
|
21
|
+
Use empty arrays when no items apply; array fields contain strings unless object entries are shown.
|
|
22
|
+
`criteriaSatisfied[].status` must be exactly one of: satisfied, not-satisfied, not-applicable.
|
|
23
|
+
`commandsRun[].result` must be exactly one of: passed, failed, not-run.
|
|
24
|
+
`manualNotes` and `notes` are optional strings; an empty string means no note and does not satisfy `manual-notes` evidence.
|
|
25
|
+
```acceptance-report
|
|
26
|
+
{
|
|
27
|
+
"criteriaSatisfied": [
|
|
28
|
+
{
|
|
29
|
+
"id": "criterion-1",
|
|
30
|
+
"status": "satisfied",
|
|
31
|
+
"evidence": "specific proof"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"changedFiles": [
|
|
35
|
+
"src/file.ts"
|
|
36
|
+
],
|
|
37
|
+
"testsAddedOrUpdated": [
|
|
38
|
+
"test/file.test.ts"
|
|
39
|
+
],
|
|
40
|
+
"commandsRun": [
|
|
41
|
+
{
|
|
42
|
+
"command": "command",
|
|
43
|
+
"result": "passed",
|
|
44
|
+
"summary": "short result"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"validationOutput": [
|
|
48
|
+
"validation output or concise summary"
|
|
49
|
+
],
|
|
50
|
+
"residualRisks": [
|
|
51
|
+
"none"
|
|
52
|
+
],
|
|
53
|
+
"noStagedFiles": true,
|
|
54
|
+
"diffSummary": "short description of the diff",
|
|
55
|
+
"reviewFindings": [
|
|
56
|
+
"blocker: file.ts:12 - issue found, or no blockers"
|
|
57
|
+
],
|
|
58
|
+
"manualNotes": "anything else the parent should know"
|
|
59
|
+
}
|
|
60
|
+
```
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
{
|
|
2
|
+
"runId": "30886047",
|
|
3
|
+
"agent": "reviewer",
|
|
4
|
+
"task": "[Read from: /workspaces/plone.securitytxt/plan.md, /workspaces/plone.securitytxt/progress.md]\n\nRe-review the final implementation in /workspaces/plone.securitytxt after fixes.\nDiff command: git diff df6a0a4...HEAD\nCommits: 537c166 Implement security.txt policy control panel; 93f4e36 Harden policy signing and management UI\nSpec source: .scratch/securitytxt-control-panel/map.md and all .scratch/securitytxt-control-panel/issues/*.md.\nVerify especially: emergency signing profile invalidation, malformed REST JSON atomicity, signing key/digest prerequisites, and Classic UI lifecycle/preview/confirmation. Report only remaining missing/incorrect requirements or material scope creep, quoting spec lines. Prioritize release blockers. Under 350 words. Do not edit.",
|
|
5
|
+
"exitCode": 0,
|
|
6
|
+
"processSignal": "SIGTERM",
|
|
7
|
+
"usage": {
|
|
8
|
+
"input": 72885,
|
|
9
|
+
"output": 4819,
|
|
10
|
+
"cacheRead": 505344,
|
|
11
|
+
"cacheWrite": 0,
|
|
12
|
+
"cost": 0.7616670000000002,
|
|
13
|
+
"turns": 13
|
|
14
|
+
},
|
|
15
|
+
"model": "openai-codex/gpt-5.6-sol:high",
|
|
16
|
+
"attemptedModels": [
|
|
17
|
+
"openai-codex/gpt-5.6-sol:high"
|
|
18
|
+
],
|
|
19
|
+
"modelAttempts": [
|
|
20
|
+
{
|
|
21
|
+
"model": "openai-codex/gpt-5.6-sol:high",
|
|
22
|
+
"success": true,
|
|
23
|
+
"exitCode": 0,
|
|
24
|
+
"usage": {
|
|
25
|
+
"input": 72885,
|
|
26
|
+
"output": 4819,
|
|
27
|
+
"cacheRead": 505344,
|
|
28
|
+
"cacheWrite": 0,
|
|
29
|
+
"cost": 0.7616670000000002,
|
|
30
|
+
"turns": 13
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"durationMs": 124660,
|
|
35
|
+
"toolCount": 28,
|
|
36
|
+
"launchContractDigest": "223a707071e246b087e3812ad08e38705be15790c26680b9bdf222356f5e4e59",
|
|
37
|
+
"launchResolvedExtensions": {
|
|
38
|
+
"version": 1,
|
|
39
|
+
"source": "launch-resolved",
|
|
40
|
+
"disableAmbientExtensions": false,
|
|
41
|
+
"runtime": [
|
|
42
|
+
"sha256:49e048d05a5c5d6f"
|
|
43
|
+
],
|
|
44
|
+
"configured": [],
|
|
45
|
+
"effective": [
|
|
46
|
+
"sha256:49e048d05a5c5d6f"
|
|
47
|
+
],
|
|
48
|
+
"omitted": {
|
|
49
|
+
"runtime": 0,
|
|
50
|
+
"configured": 0,
|
|
51
|
+
"effective": 0
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"acceptance": {
|
|
55
|
+
"status": "attested",
|
|
56
|
+
"evidenceStatus": "attested",
|
|
57
|
+
"explicit": false,
|
|
58
|
+
"effectiveAcceptance": {
|
|
59
|
+
"level": "attested",
|
|
60
|
+
"explicit": false,
|
|
61
|
+
"inferredReason": [
|
|
62
|
+
"read-only/reviewer-style agent"
|
|
63
|
+
],
|
|
64
|
+
"criteria": [
|
|
65
|
+
{
|
|
66
|
+
"id": "criterion-1",
|
|
67
|
+
"must": "Return concrete findings with file paths and severity when applicable",
|
|
68
|
+
"evidence": [
|
|
69
|
+
"review-findings",
|
|
70
|
+
"residual-risks"
|
|
71
|
+
],
|
|
72
|
+
"severity": "required"
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"evidence": [
|
|
76
|
+
"review-findings",
|
|
77
|
+
"residual-risks"
|
|
78
|
+
],
|
|
79
|
+
"verify": [],
|
|
80
|
+
"stopRules": []
|
|
81
|
+
},
|
|
82
|
+
"inferredReason": [
|
|
83
|
+
"read-only/reviewer-style agent"
|
|
84
|
+
],
|
|
85
|
+
"criteria": [
|
|
86
|
+
{
|
|
87
|
+
"id": "criterion-1",
|
|
88
|
+
"must": "Return concrete findings with file paths and severity when applicable",
|
|
89
|
+
"evidence": [
|
|
90
|
+
"review-findings",
|
|
91
|
+
"residual-risks"
|
|
92
|
+
],
|
|
93
|
+
"severity": "required"
|
|
94
|
+
}
|
|
95
|
+
],
|
|
96
|
+
"runtimeChecks": [],
|
|
97
|
+
"verifyRuns": [],
|
|
98
|
+
"childReport": {
|
|
99
|
+
"criteriaSatisfied": [
|
|
100
|
+
{
|
|
101
|
+
"id": "criterion-1",
|
|
102
|
+
"status": "satisfied",
|
|
103
|
+
"evidence": "Four concrete findings include severity, paths, lines, reproductions, and quoted requirements."
|
|
104
|
+
}
|
|
105
|
+
],
|
|
106
|
+
"changedFiles": [
|
|
107
|
+
"src/plone/securitytxt/policy.py",
|
|
108
|
+
"src/plone/securitytxt/signing_helper.py",
|
|
109
|
+
"src/plone/securitytxt/services/security_policy.py",
|
|
110
|
+
"src/plone/securitytxt/controlpanels/security_policy.py"
|
|
111
|
+
],
|
|
112
|
+
"testsAddedOrUpdated": [
|
|
113
|
+
"tests/test_signing.py",
|
|
114
|
+
"tests/test_service_security_policy.py",
|
|
115
|
+
"tests/test_controlpanel_security_policy.py"
|
|
116
|
+
],
|
|
117
|
+
"commandsRun": [
|
|
118
|
+
{
|
|
119
|
+
"command": "git diff --check df6a0a4...HEAD && uv run pytest -q",
|
|
120
|
+
"result": "passed",
|
|
121
|
+
"summary": "28 passed"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"command": "targeted Python reproductions",
|
|
125
|
+
"result": "passed",
|
|
126
|
+
"summary": "Confirmed nonexistent-profile save and UnicodeDecodeError"
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"validationOutput": [
|
|
130
|
+
"Emergency loaded-profile revision/disable invalidation is implemented and tested."
|
|
131
|
+
],
|
|
132
|
+
"residualRisks": [
|
|
133
|
+
"No real-GnuPG or semantic browser coverage."
|
|
134
|
+
],
|
|
135
|
+
"noStagedFiles": true,
|
|
136
|
+
"diffSummary": "Control panel, REST, policy publication, and optional signing implementation.",
|
|
137
|
+
"reviewFindings": [
|
|
138
|
+
"blocker: signed draft accepts nonexistent profiles",
|
|
139
|
+
"blocker: required signing verification coverage absent",
|
|
140
|
+
"major: Classic UI lifecycle contract incomplete",
|
|
141
|
+
"major: malformed UTF-8 returns 500"
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"effects": {
|
|
146
|
+
"fileMutation": {
|
|
147
|
+
"status": "not-applicable",
|
|
148
|
+
"expected": false,
|
|
149
|
+
"attempted": true
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"transcriptPath": "/workspaces/plone.securitytxt/.pi-subagents/artifacts/30886047_reviewer_0_transcript.jsonl",
|
|
153
|
+
"timestamp": 1786465606802
|
|
154
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
## Review
|
|
2
|
+
- **Blocker:** `policy.py:337-345,591-619` saves Signed mode with a nonexistent profile; reproduced as revision 2. Spec `06:67`: “Saving that choice requires the profile to exist”; `06:63`: Signed mode “cannot be newly selected” without signing support.
|
|
3
|
+
- **Blocker:** Signing prerequisites are untested: `tests/test_signing.py:12-52` only validates profile parsing—none of `signing_helper.py`. Spec `09:107` requires exact-subkey, RSA/key-size/SHA-256, expiry/revocation, malformed output, timeout, and real-GnuPG coverage.
|
|
4
|
+
- **Major:** Classic UI remains lifecycle-incomplete. `controlpanels/security_policy.py:123-133,180-217` always exposes both Publish/Disable, always says “Save draft,” has a generic publish confirmation, and test-signing ignores unsaved form values. No inline domain diagnostics or public key identity is rendered. This conflicts with `04:28-31,36-41`, including “either Publish or Disable,” lifecycle gating, confirmation summarizing endpoint/expiry/signing mode, and inline feedback.
|
|
5
|
+
- **Major:** `services/security_policy.py:108-116` decodes UTF-8 outside error handling; malformed bytes raise `UnicodeDecodeError` rather than structured `400`. Persistence remains atomic, but `09:75` requires “structured field/global errors without partial writes.”
|