{
"event": "PreToolUse",
"tool_name": "Bash",
"tool_input": {
"command": "python3 -c \"\nfrom quality import pre_rules_htmx\n\n# Test 1: hx-post OHNE CSRF (sollte blocken)\ntest1_path = '\/var\/www\/dev.campus.systemische-tools.de\/src\/View\/test\/index.php'\ntest1_content = '''\n<button hx-post=\\\"\/test\/action\\\" hx-target=\\\"#result\\\">\n Click me\n<\/button>\n'''\nresult1 = pre_rules_htmx.htmx_c1_csrf_on_post(test1_path, test1_content)\nprint(f'Test 1 (hx-post ohne CSRF): {\\\"BLOCK\\\" if result1 else \\\"PASS\\\"}')\nif result1:\n print(f' Message: {result1.get(\\\"message\\\", \\\"\\\")}')\n\n# Test 2: hx-post MIT CSRF (sollte passen)\ntest2_content = '''\n<button hx-post=\\\"\/test\/action\\\" \n hx-headers='{\\\"X-CSRF-TOKEN\\\": \\\"<?= \\$csrfToken ?>\\\"}' \n hx-target=\\\"#result\\\">\n Click me\n<\/button>\n'''\nresult2 = pre_rules_htmx.htmx_c1_csrf_on_post(test1_path, test2_content)\nprint(f'Test 2 (hx-post mit CSRF): {\\\"BLOCK\\\" if result2 else \\\"PASS\\\"}')\n\n# Test 3: hx-delete OHNE confirm (sollte blocken)\ntest3_content = '''\n<button hx-delete=\\\"\/test\/1\\\" \n hx-headers='{\\\"X-CSRF-TOKEN\\\": \\\"<?= \\$csrfToken ?>\\\"}'>\n Delete\n<\/button>\n'''\nresult3 = pre_rules_htmx.htmx_c4_delete_requires_confirm(test1_path, test3_content)\nprint(f'Test 3 (hx-delete ohne confirm): {\\\"BLOCK\\\" if result3 else \\\"PASS\\\"}')\nif result3:\n print(f' Message: {result3.get(\\\"message\\\", \\\"\\\")}')\n\n# Test 4: hx-delete MIT confirm (sollte passen)\ntest4_content = '''\n<button hx-delete=\\\"\/test\/1\\\" \n hx-confirm=\\\"Wirklich loeschen?\\\"\n hx-headers='{\\\"X-CSRF-TOKEN\\\": \\\"<?= \\$csrfToken ?>\\\"}'>\n Delete\n<\/button>\n'''\nresult4 = pre_rules_htmx.htmx_c4_delete_requires_confirm(test1_path, test4_content)\nprint(f'Test 4 (hx-delete mit confirm): {\\\"BLOCK\\\" if result4 else \\\"PASS\\\"}')\n\n# Test 5: Kein HTMX (sollte passen)\ntest5_content = '''\n<form method=\\\"post\\\" action=\\\"\/test\\\">\n <button type=\\\"submit\\\">Submit<\/button>\n<\/form>\n'''\nresult5 = pre_rules_htmx.htmx_c1_csrf_on_post(test1_path, test5_content)\nprint(f'Test 5 (kein HTMX): {\\\"BLOCK\\\" if result5 else \\\"PASS\\\"}')\n\"",
"description": "Test HTMX rules with sample content"
}
}
{
"tool_response": {
"stdout": "Test 1 (hx-post ohne CSRF): BLOCK\n Message: QUALITY VIOLATION [HTMX-C1]: hx-post at line 2 missing CSRF token. Add: hx-headers='{\"X-CSRF-TOKEN\": \"<?= $csrfToken ?>\"}'\nTest 2 (hx-post mit CSRF): PASS\nTest 3 (hx-delete ohne confirm): BLOCK\n Message: QUALITY VIOLATION [HTMX-C4]: hx-delete at line 2 missing confirmation. Add: hx-confirm=\"Wirklich loeschen?\"\nTest 4 (hx-delete mit confirm): PASS\nTest 5 (kein HTMX): PASS",
"stderr": "",
"interrupted": false,
"isImage": false
}
}