Files
html/api/opus5-fix-consent-guard.php
2026-04-17 16:51:29 +02:00

65 lines
2.4 KiB
PHP

<?php
// OPUS5 — Fix cause racine consent-guard trop gourmand
// Refine regex pour NE PAS matcher quand message contient kaouther, drafts, fix, wire, email
header('Content-Type: application/json');
$R = ['ts'=>date('c'), 'source'=>'opus5-fix-consent-guard-rootcause'];
$F = '/var/www/html/api/wevia-fast-path-v3.php';
if (!file_exists($F)) {
echo json_encode(['err'=>'file_not_found', 'f'=>$F]);
exit;
}
// GOLD backup OBLIGATOIRE (doctrine 3)
$GOLD = $F . '.GOLD-20260417-' . date('His') . '-pre-opus5-consent-refine';
@copy($F, $GOLD);
$R['gold'] = $GOLD;
// Check chattr+i (cause silencieuse de file_put_contents fail)
$attr = trim(shell_exec("lsattr $F 2>&1 | awk '{print \$1}'"));
$R['chattr_before'] = $attr;
if (strpos($attr, 'i') !== false) {
// sudo chattr -i requires NOPASSWD=ALL www-data
shell_exec("sudo chattr -i $F 2>&1");
$R['chattr_removed'] = true;
}
$content = file_get_contents($F);
$R['original_size'] = strlen($content);
// Fix ligne 105 : raffinement regex avec negative lookahead pour exclure contextes
// OLD : if(preg_match("/consent|optin|consentement/i",$msg)){
// NEW : if(preg_match("/\\b(consent|optin|consentement)\\b/i",$msg) && !preg_match("/\\b(kaouther|draft|email|fix|refais|update|wire|mail|propos|offre|palier|tarif)\\b/i",$msg)){
$old = 'if(preg_match("/consent|optin|consentement/i",$msg)){';
$new = 'if(preg_match("/\\b(consent|optin|consentement)\\b/i",$msg) && !preg_match("/\\b(kaouther|draft|email|fix|refais|update|wire|mail|propos|offre|palier|tarif)\\b/i",$msg)){';
$pos = strpos($content, $old);
if ($pos === false) {
$R['err'] = 'pattern_not_found';
$R['note'] = 'regex might already be refined or file modified';
// Re-chattr if we removed it
if (!empty($R['chattr_removed'])) shell_exec("sudo chattr +i $F 2>&1");
echo json_encode($R, JSON_PRETTY_PRINT);
exit;
}
$new_content = str_replace($old, $new, $content);
$written = file_put_contents($F, $new_content);
$R['written_bytes'] = $written;
$R['new_size'] = strlen($new_content);
// Re-chattr+i si on l'avait retiré
if (!empty($R['chattr_removed'])) {
shell_exec("sudo chattr +i $F 2>&1");
$R['chattr_restored'] = true;
}
// Verify php -l
$lint = trim(shell_exec("php8.4 -l $F 2>&1"));
$R['lint'] = $lint;
$R['doctrine'] = '65 — regex negative lookahead pour éviter trigger trop gourmand (cause racine non-autonomie)';
$R['done'] = true;
echo json_encode($R, JSON_PRETTY_PRINT);