[2026-02-24 17:15:44] Tentative sans token { "user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 17:28:45] ========== SCRIPT ENTRÉ ========== { "method": "POST", "remote_ip": "2a02:a03f:6b21:de01:89fb:4c2c:203b:2661", "user_agent": "Odihome/1 CFNetwork/3860.300.31 Darwin/25.2.0", "content_type": "application/json", "php_version": "8.2.29", "timestamp": 1771950525 } -------------------------------------------------------------------------------- [2026-02-24 17:28:45] Chargement supabase_config.php -------------------------------------------------------------------------------- [2026-02-24 17:28:45] supabase_config.php chargé { "SUPABASE_URL_defined": "https://lvtdqnzsqdqcqqimsnuy.supabase.co…", "SUPABASE_ANON_KEY_defined": "OUI (208 chars)", "SUPABASE_SERVICE_ROLE_KEY_defined": "OUI (219 chars)" } -------------------------------------------------------------------------------- [2026-02-24 17:28:45] Body brut reçu { "length": 49, "preview": "{\"userId\":\"b1d04112-3d2a-4111-8569-6034fcd49e49\"}" } -------------------------------------------------------------------------------- [2026-02-24 17:28:45] Body décodé { "userId": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 17:28:45] userId validé { "userId": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 17:28:45] getallheaders() disponible { "headers_keys": [ "Remote-Ip", "Accept-Language", "Priority", "User-Agent", "Accept-Encoding", "Content-Type", "Accept", "Content-Length", "X-Ovhrequest-Id", "X-Forwarded-Proto", "X-Forwarded-For", "X-Predictor", "Host" ] } -------------------------------------------------------------------------------- [2026-02-24 17:28:45] Authorization header { "found": false, "preview": "VIDE" } -------------------------------------------------------------------------------- [2026-02-24 17:28:45] ERREUR: Token Bearer absent ou invalide -------------------------------------------------------------------------------- [2026-02-24 17:28:45] jsonResponse HTTP 401 { "error": "Token d'accès manquant ou invalide" } -------------------------------------------------------------------------------- [2026-02-24 17:36:33] ========== SCRIPT ENTRÉ ========== { "method": "POST", "remote_ip": "2a02:a03f:6b21:de01:89fb:4c2c:203b:2661", "user_agent": "Odihome/1 CFNetwork/3860.300.31 Darwin/25.2.0", "content_type": "application/json", "php_version": "8.2.29", "timestamp": 1771950993 } -------------------------------------------------------------------------------- [2026-02-24 17:36:33] Chargement supabase_config.php -------------------------------------------------------------------------------- [2026-02-24 17:36:33] supabase_config.php chargé { "SUPABASE_URL_defined": "https://lvtdqnzsqdqcqqimsnuy.supabase.co…", "SUPABASE_ANON_KEY_defined": "OUI (208 chars)", "SUPABASE_SERVICE_ROLE_KEY_defined": "OUI (219 chars)" } -------------------------------------------------------------------------------- [2026-02-24 17:36:33] Body brut reçu { "length": 985, "preview": "{\"userId\":\"b1d04112-3d2a-4111-8569-6034fcd49e49\",\"accessToken\":\"eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL" } -------------------------------------------------------------------------------- [2026-02-24 17:36:33] Body décodé { "userId": "b1d04112-3d2a-4111-8569-6034fcd49e49", "accessToken": "eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJiMWQwNDExMi0zZDJhLTQxMTEtODU2OS02MDM0ZmNkNDllNDkiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzcxOTUyOTQyLCJpYXQiOjE3NzE5NDkzNDIsImVtYWlsIjoicmV6b3dlYnNpdGVAZ21haWwuY29tIiwicGhvbmUiOiIiLCJhcHBfbWV0YWRhdGEiOnsicHJvdmlkZXIiOiJlbWFpbCIsInByb3ZpZGVycyI6WyJlbWFpbCJdfSwidXNlcl9tZXRhZGF0YSI6eyJlbWFpbCI6InJlem93ZWJzaXRlQGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJmaXJzdF9uYW1lIjoiVHJlem9yIiwibGFzdF9uYW1lIjoiTWFuZyIsInBob25lX3ZlcmlmaWVkIjpmYWxzZSwic3ViIjoiYjFkMDQxMTItM2QyYS00MTExLTg1NjktNjAzNGZjZDQ5ZTQ5In0sInJvbGUiOiJhdXRoZW50aWNhdGVkIiwiYWFsIjoiYWFsMSIsImFtciI6W3sibWV0aG9kIjoicGFzc3dvcmQiLCJ0aW1lc3RhbXAiOjE3NzE5NDkzNDJ9XSwic2Vzc2lvbl9pZCI6ImUzZTNmOThkLTEwZTQtNDYyYS05NzI1LTMyODhmZWUxMDUyMCIsImlzX2Fub255bW91cyI6ZmFsc2V9.jJAhMpV-pkCsPJdJPjpjYGMlbgK8yG-vnZpHcVxUQj4" } -------------------------------------------------------------------------------- [2026-02-24 17:36:33] userId validé { "userId": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 17:36:33] accessToken lu depuis le body JSON -------------------------------------------------------------------------------- [2026-02-24 17:36:33] accessToken extrait { "length": 919, "preview": "eyJhbGciOiJIUzI1NiIs…" } -------------------------------------------------------------------------------- [2026-02-24 17:36:33] ÉTAPE 1: Vérification token Supabase /auth/v1/user -------------------------------------------------------------------------------- [2026-02-24 17:36:33] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/auth/v1/user" } -------------------------------------------------------------------------------- [2026-02-24 17:36:33] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "{\"id\":\"b1d04112-3d2a-4111-8569-6034fcd49e49\",\"aud\":\"authenticated\",\"role\":\"authenticated\",\"email\":\"rezowebsite@gmail.com\",\"email_confirmed_at\":\"2026-02-21T16:51:27.724389Z\",\"phone\":\"\",\"confirmed_at\":\"2026-02-21T16:51:27.724389Z\",\"last_sign_in_at\":\"2026-02-24T16:09:02.652768Z\",\"app_metadata\":{\"provid" } -------------------------------------------------------------------------------- [2026-02-24 17:36:33] Token vérifié { "token_user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49", "email": "rezowebsite@gmail.com" } -------------------------------------------------------------------------------- [2026-02-24 17:36:33] === SUPPRESSION AUTORISÉE === { "user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49", "email": "rezowebsite@gmail.com", "name": "Trezor Mang" } -------------------------------------------------------------------------------- [2026-02-24 17:36:33] ÉTAPE 2: Recherche abonnement actif dans Supabase -------------------------------------------------------------------------------- [2026-02-24 17:36:33] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/user_subscriptions?user_id=eq.b1d04112-3d2a-4111-8569-6034fcd49e49&status=in.(active,trialing)&select=id,stripe_subscription_id,plan_id,status,cancel_at_period_end&limit=1" } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "[{\"id\":\"865c571a-3760-4d51-8ca8-d0334ce90899\",\"stripe_subscription_id\":\"sub_1T3N32CmOXyFMbar69uStlHA\",\"plan_id\":\"agency_pro\",\"status\":\"active\",\"cancel_at_period_end\":false}]" } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] Abonnement actif trouvé { "id": "865c571a-3760-4d51-8ca8-d0334ce90899", "stripe_subscription_id": "sub_1T3N32CmOXyFMbar69uStlHA", "plan_id": "agency_pro", "status": "active", "cancel_at_period_end": false } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] ÉTAPE 3: Annulation Stripe { "stripe_id": "sub_1T3N32CmOXyFMbar69uStlHA" } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] curlPost → { "url": "https://webhook.odihome.app/stripe-api/cancel-subscription.php", "payload": { "subscriptionId": "sub_1T3N32CmOXyFMbar69uStlHA", "cancelAtPeriodEnd": false } } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] curlPost ← { "http_code": 500, "curl_error": null, "body_preview": " " } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] ⚠️ Échec annulation Stripe (on continue) { "code": 500, "error": "", "response": null } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] ÉTAPE 4: Envoi email suppression compte { "email": "rezowebsite@gmail.com" } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] Template path { "path": "/home/odihomi/webhook/auth/delete-email.html", "exists": "OUI" } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] mail() disponible: OUI -------------------------------------------------------------------------------- [2026-02-24 17:36:34] Résultat mail() { "sent": "OUI", "last_error": null } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] ÉTAPE 5: Suppression compte Supabase Auth { "user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] curlDelete → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/auth/v1/admin/users/b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] curlDelete ← { "http_code": 500, "curl_error": null, "body_preview": "{\"code\":500,\"error_code\":\"unexpected_failure\",\"msg\":\"Database error deleting user\",\"error_id\":\"9d3061f4303df9ba-AMS\"}" } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] ERREUR Supabase suppression { "http_code": 500, "message": "Erreur lors de la suppression du compte", "response": { "code": 500, "error_code": "unexpected_failure", "msg": "Database error deleting user", "error_id": "9d3061f4303df9ba-AMS" } } -------------------------------------------------------------------------------- [2026-02-24 17:36:34] jsonResponse HTTP 500 { "error": "Erreur lors de la suppression du compte" } -------------------------------------------------------------------------------- [2026-02-24 17:38:57] ========== SCRIPT ENTRÉ ========== { "method": "POST", "remote_ip": "2a02:a03f:6b21:de01:917a:49c:eda3:e058", "user_agent": "curl/8.7.1", "content_type": "application/json", "php_version": "8.2.29", "timestamp": 1771951137 } -------------------------------------------------------------------------------- [2026-02-24 17:38:57] Chargement supabase_config.php -------------------------------------------------------------------------------- [2026-02-24 17:38:57] supabase_config.php chargé { "SUPABASE_URL_defined": "https://lvtdqnzsqdqcqqimsnuy.supabase.co…", "SUPABASE_ANON_KEY_defined": "OUI (208 chars)", "SUPABASE_SERVICE_ROLE_KEY_defined": "OUI (219 chars)" } -------------------------------------------------------------------------------- [2026-02-24 17:38:57] Body brut reçu { "length": 78, "preview": "{\"userId\":\"b1d04112-3d2a-4111-8569-6034fcd49e49\",\"accessToken\":\"test-invalid\"}" } -------------------------------------------------------------------------------- [2026-02-24 17:38:57] Body décodé { "userId": "b1d04112-3d2a-4111-8569-6034fcd49e49", "accessToken": "test-invalid" } -------------------------------------------------------------------------------- [2026-02-24 17:38:57] userId validé { "userId": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 17:38:57] accessToken lu depuis le body JSON -------------------------------------------------------------------------------- [2026-02-24 17:38:57] accessToken extrait { "length": 12, "preview": "test-invalid…" } -------------------------------------------------------------------------------- [2026-02-24 17:38:57] ÉTAPE 1: Vérification token Supabase /auth/v1/user -------------------------------------------------------------------------------- [2026-02-24 17:38:57] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/auth/v1/user" } -------------------------------------------------------------------------------- [2026-02-24 17:38:57] curlGet ← { "http_code": 403, "curl_error": null, "body_preview": "{\"code\":403,\"error_code\":\"bad_jwt\",\"msg\":\"invalid JWT: unable to parse or verify signature, token is malformed: token contains an invalid number of segments\"}" } -------------------------------------------------------------------------------- [2026-02-24 17:38:57] ERREUR: Token invalide ou expiré { "http_code": 403, "response": { "code": 403, "error_code": "bad_jwt", "msg": "invalid JWT: unable to parse or verify signature, token is malformed: token contains an invalid number of segments" } } -------------------------------------------------------------------------------- [2026-02-24 17:38:57] jsonResponse HTTP 401 { "error": "Token d'accès invalide ou expiré (HTTP 403)" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] ========== SCRIPT ENTRÉ ========== { "method": "POST", "remote_ip": "62.235.242.124", "user_agent": "Odihome/1 CFNetwork/3860.300.31 Darwin/25.2.0", "content_type": "application/json", "php_version": "8.2.29", "timestamp": 1771955607 } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] Chargement supabase_config.php -------------------------------------------------------------------------------- [2026-02-24 18:53:27] supabase_config.php chargé { "SUPABASE_URL_defined": "https://lvtdqnzsqdqcqqimsnuy.supabase.co…", "SUPABASE_ANON_KEY_defined": "OUI (208 chars)", "SUPABASE_SERVICE_ROLE_KEY_defined": "OUI (219 chars)" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] Body brut reçu { "length": 985, "preview": "{\"userId\":\"b1d04112-3d2a-4111-8569-6034fcd49e49\",\"accessToken\":\"eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] Body décodé { "userId": "b1d04112-3d2a-4111-8569-6034fcd49e49", "accessToken": "eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJiMWQwNDExMi0zZDJhLTQxMTEtODU2OS02MDM0ZmNkNDllNDkiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzcxOTU4NjkwLCJpYXQiOjE3NzE5NTUwOTAsImVtYWlsIjoicmV6b3dlYnNpdGVAZ21haWwuY29tIiwicGhvbmUiOiIiLCJhcHBfbWV0YWRhdGEiOnsicHJvdmlkZXIiOiJlbWFpbCIsInByb3ZpZGVycyI6WyJlbWFpbCJdfSwidXNlcl9tZXRhZGF0YSI6eyJlbWFpbCI6InJlem93ZWJzaXRlQGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJmaXJzdF9uYW1lIjoiVHJlem9yIiwibGFzdF9uYW1lIjoiTWFuZyIsInBob25lX3ZlcmlmaWVkIjpmYWxzZSwic3ViIjoiYjFkMDQxMTItM2QyYS00MTExLTg1NjktNjAzNGZjZDQ5ZTQ5In0sInJvbGUiOiJhdXRoZW50aWNhdGVkIiwiYWFsIjoiYWFsMSIsImFtciI6W3sibWV0aG9kIjoicGFzc3dvcmQiLCJ0aW1lc3RhbXAiOjE3NzE5NDkzNDJ9XSwic2Vzc2lvbl9pZCI6ImUzZTNmOThkLTEwZTQtNDYyYS05NzI1LTMyODhmZWUxMDUyMCIsImlzX2Fub255bW91cyI6ZmFsc2V9.b0XKcPTxieiKSqfAadXxqeJbQSd3z6vjiK-ydbhGxSc" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] userId validé { "userId": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] accessToken lu depuis le body JSON -------------------------------------------------------------------------------- [2026-02-24 18:53:27] accessToken extrait { "length": 919, "preview": "eyJhbGciOiJIUzI1NiIs…" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] ÉTAPE 1: Vérification token Supabase /auth/v1/user -------------------------------------------------------------------------------- [2026-02-24 18:53:27] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/auth/v1/user" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "{\"id\":\"b1d04112-3d2a-4111-8569-6034fcd49e49\",\"aud\":\"authenticated\",\"role\":\"authenticated\",\"email\":\"rezowebsite@gmail.com\",\"email_confirmed_at\":\"2026-02-21T16:51:27.724389Z\",\"phone\":\"\",\"confirmed_at\":\"2026-02-21T16:51:27.724389Z\",\"last_sign_in_at\":\"2026-02-24T16:09:02.652768Z\",\"app_metadata\":{\"provid" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] Token vérifié { "token_user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49", "email": "rezowebsite@gmail.com" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] === SUPPRESSION AUTORISÉE === { "user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49", "email": "rezowebsite@gmail.com", "name": "Trezor Mang" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] ÉTAPE 2: Recherche abonnement actif dans Supabase -------------------------------------------------------------------------------- [2026-02-24 18:53:27] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/user_subscriptions?user_id=eq.b1d04112-3d2a-4111-8569-6034fcd49e49&status=in.(active,trialing)&select=id,stripe_subscription_id,plan_id,status,cancel_at_period_end&limit=1" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "[{\"id\":\"865c571a-3760-4d51-8ca8-d0334ce90899\",\"stripe_subscription_id\":\"sub_1T3N32CmOXyFMbar69uStlHA\",\"plan_id\":\"agency_pro\",\"status\":\"active\",\"cancel_at_period_end\":false}]" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] Abonnement actif trouvé { "id": "865c571a-3760-4d51-8ca8-d0334ce90899", "stripe_subscription_id": "sub_1T3N32CmOXyFMbar69uStlHA", "plan_id": "agency_pro", "status": "active", "cancel_at_period_end": false } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] ÉTAPE 3: Annulation Stripe directe { "stripe_id": "sub_1T3N32CmOXyFMbar69uStlHA" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] Chemin .env Stripe { "path": "/home/odihomi/webhook/auth/../stripe-api/config/.env", "exists": "OUI" } -------------------------------------------------------------------------------- [2026-02-24 18:53:27] STRIPE_SECRET_KEY { "found": true, "preview": "sk_live_51…" } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] Stripe API ← { "http_code": 200, "curl_error": null, "status": "canceled", "body_preview": "{\n \"id\": \"sub_1T3N32CmOXyFMbar69uStlHA\",\n \"object\": \"subscription\",\n \"application\": null,\n \"application_fee_percent\": null,\n \"automatic_tax\": {\n \"disabled_reason\": null,\n \"enabled\": false,\n \"liability\": null\n },\n \"billing_cycle_anchor\": 1771706673,\n \"billing_cycle_anchor_config\": nu" } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] ✅ Stripe annulé immédiatement { "stripe_id": "sub_1T3N32CmOXyFMbar69uStlHA", "status": "canceled" } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] ÉTAPE 4: Envoi email suppression compte { "email": "rezowebsite@gmail.com" } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] Template path { "path": "/home/odihomi/webhook/auth/delete-email.html", "exists": "OUI" } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] mail() disponible: OUI -------------------------------------------------------------------------------- [2026-02-24 18:53:28] Résultat mail() { "sent": "OUI", "last_error": null } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] ÉTAPE 5: Suppression Storage bucket immovision-images { "user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] curlPost → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/storage/v1/object/list/immovision-images", "payload": { "prefix": "b1d04112-3d2a-4111-8569-6034fcd49e49/", "limit": 1000, "offset": 0, "sortBy": { "column": "name", "order": "asc" } } } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] curlPost ← { "http_code": 200, "curl_error": null, "body_preview": "[{\"name\":\"journal_entries\",\"id\":null,\"updated_at\":null,\"created_at\":null,\"last_accessed_at\":null,\"metadata\":null},{\"name\":\"keys\",\"id\":null,\"updated_at\":null,\"created_at\":null,\"last_accessed_at\":null,\"metadata\":null},{\"name\":\"meters\",\"id\":null,\"updated_at\":null,\"created_at\":null,\"last_accessed_at\":nu" } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] Fichiers Storage trouvés { "count": 6, "paths_preview": [ "b1d04112-3d2a-4111-8569-6034fcd49e49/journal_entries", "b1d04112-3d2a-4111-8569-6034fcd49e49/keys", "b1d04112-3d2a-4111-8569-6034fcd49e49/meters", "b1d04112-3d2a-4111-8569-6034fcd49e49/PDF", "b1d04112-3d2a-4111-8569-6034fcd49e49/property_journals" ] } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] Suppression Storage ← { "http_code": 200, "curl_error": null, "body_preview": "[]" } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] ✅ Fichiers Storage supprimés { "count": 6 } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] ÉTAPE 6: Suppression compte Supabase Auth { "user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 18:53:28] curlDelete → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/auth/v1/admin/users/b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 18:53:29] curlDelete ← { "http_code": 500, "curl_error": null, "body_preview": "{\"code\":500,\"error_code\":\"unexpected_failure\",\"msg\":\"Database error deleting user\",\"error_id\":\"9d30d29c305efb9c-AMS\"}" } -------------------------------------------------------------------------------- [2026-02-24 18:53:29] ERREUR Supabase suppression { "http_code": 500, "message": "Erreur suppression (HTTP 500)", "response": { "code": 500, "error_code": "unexpected_failure", "msg": "Database error deleting user", "error_id": "9d30d29c305efb9c-AMS" } } -------------------------------------------------------------------------------- [2026-02-24 18:53:29] jsonResponse HTTP 500 { "error": "Erreur suppression (HTTP 500)", "debug_code": 500, "debug_resp": { "code": 500, "error_code": "unexpected_failure", "msg": "Database error deleting user", "error_id": "9d30d29c305efb9c-AMS" } } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] ========== SCRIPT ENTRÉ ========== { "method": "POST", "remote_ip": "2a02:a03f:6b21:de01:89fb:4c2c:203b:2661", "user_agent": "Odihome/1 CFNetwork/3860.300.31 Darwin/25.2.0", "content_type": "application/json", "php_version": "8.2.29", "timestamp": 1771957104 } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] Chargement supabase_config.php -------------------------------------------------------------------------------- [2026-02-24 19:18:24] supabase_config.php chargé { "SUPABASE_URL_defined": "https://lvtdqnzsqdqcqqimsnuy.supabase.co…", "SUPABASE_ANON_KEY_defined": "OUI (208 chars)", "SUPABASE_SERVICE_ROLE_KEY_defined": "OUI (219 chars)" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] Body brut reçu { "length": 985, "preview": "{\"accessToken\":\"eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJiMWQwNDExMi0zZDJhLTQxMTEtO" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] Body décodé { "accessToken": "eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJiMWQwNDExMi0zZDJhLTQxMTEtODU2OS02MDM0ZmNkNDllNDkiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzcxOTU4NjkwLCJpYXQiOjE3NzE5NTUwOTAsImVtYWlsIjoicmV6b3dlYnNpdGVAZ21haWwuY29tIiwicGhvbmUiOiIiLCJhcHBfbWV0YWRhdGEiOnsicHJvdmlkZXIiOiJlbWFpbCIsInByb3ZpZGVycyI6WyJlbWFpbCJdfSwidXNlcl9tZXRhZGF0YSI6eyJlbWFpbCI6InJlem93ZWJzaXRlQGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJmaXJzdF9uYW1lIjoiVHJlem9yIiwibGFzdF9uYW1lIjoiTWFuZyIsInBob25lX3ZlcmlmaWVkIjpmYWxzZSwic3ViIjoiYjFkMDQxMTItM2QyYS00MTExLTg1NjktNjAzNGZjZDQ5ZTQ5In0sInJvbGUiOiJhdXRoZW50aWNhdGVkIiwiYWFsIjoiYWFsMSIsImFtciI6W3sibWV0aG9kIjoicGFzc3dvcmQiLCJ0aW1lc3RhbXAiOjE3NzE5NDkzNDJ9XSwic2Vzc2lvbl9pZCI6ImUzZTNmOThkLTEwZTQtNDYyYS05NzI1LTMyODhmZWUxMDUyMCIsImlzX2Fub255bW91cyI6ZmFsc2V9.b0XKcPTxieiKSqfAadXxqeJbQSd3z6vjiK-ydbhGxSc", "userId": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] userId validé { "userId": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] accessToken lu depuis le body JSON -------------------------------------------------------------------------------- [2026-02-24 19:18:24] accessToken extrait { "length": 919, "preview": "eyJhbGciOiJIUzI1NiIs…" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] ÉTAPE 1: Vérification token Supabase /auth/v1/user -------------------------------------------------------------------------------- [2026-02-24 19:18:24] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/auth/v1/user" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "{\"id\":\"b1d04112-3d2a-4111-8569-6034fcd49e49\",\"aud\":\"authenticated\",\"role\":\"authenticated\",\"email\":\"rezowebsite@gmail.com\",\"email_confirmed_at\":\"2026-02-21T16:51:27.724389Z\",\"phone\":\"\",\"confirmed_at\":\"2026-02-21T16:51:27.724389Z\",\"last_sign_in_at\":\"2026-02-24T16:09:02.652768Z\",\"app_metadata\":{\"provid" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] Token vérifié { "token_user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49", "email": "rezowebsite@gmail.com" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] === SUPPRESSION AUTORISÉE === { "user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49", "email": "rezowebsite@gmail.com", "name": "Trezor Mang" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] ÉTAPE 2: Recherche abonnement actif dans Supabase -------------------------------------------------------------------------------- [2026-02-24 19:18:24] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/user_subscriptions?user_id=eq.b1d04112-3d2a-4111-8569-6034fcd49e49&status=in.(active,trialing)&select=id,stripe_subscription_id,plan_id,status,cancel_at_period_end&limit=1" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "[]" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] Aucun abonnement actif { "http_code": 200, "data": [] } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] ÉTAPE 3: Pas d'abonnement Stripe à annuler -------------------------------------------------------------------------------- [2026-02-24 19:18:24] ÉTAPE 4: Envoi email suppression compte { "email": "rezowebsite@gmail.com" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] Template path { "path": "/home/odihomi/webhook/auth/delete-email.html", "exists": "OUI" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] mail() disponible: OUI -------------------------------------------------------------------------------- [2026-02-24 19:18:24] Résultat mail() { "sent": "OUI", "last_error": null } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] ÉTAPE 5: Suppression Storage bucket immovision-images { "user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 19:18:24] curlPost → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/storage/v1/object/list/immovision-images", "payload": { "prefix": "b1d04112-3d2a-4111-8569-6034fcd49e49/", "limit": 1000, "offset": 0, "sortBy": { "column": "name", "order": "asc" } } } -------------------------------------------------------------------------------- [2026-02-24 19:18:25] curlPost ← { "http_code": 200, "curl_error": null, "body_preview": "[{\"name\":\"journal_entries\",\"id\":null,\"updated_at\":null,\"created_at\":null,\"last_accessed_at\":null,\"metadata\":null},{\"name\":\"keys\",\"id\":null,\"updated_at\":null,\"created_at\":null,\"last_accessed_at\":null,\"metadata\":null},{\"name\":\"meters\",\"id\":null,\"updated_at\":null,\"created_at\":null,\"last_accessed_at\":nu" } -------------------------------------------------------------------------------- [2026-02-24 19:18:25] Fichiers Storage trouvés { "count": 6, "paths_preview": [ "b1d04112-3d2a-4111-8569-6034fcd49e49/journal_entries", "b1d04112-3d2a-4111-8569-6034fcd49e49/keys", "b1d04112-3d2a-4111-8569-6034fcd49e49/meters", "b1d04112-3d2a-4111-8569-6034fcd49e49/PDF", "b1d04112-3d2a-4111-8569-6034fcd49e49/property_journals" ] } -------------------------------------------------------------------------------- [2026-02-24 19:18:25] Suppression Storage ← { "http_code": 200, "curl_error": null, "body_preview": "[]" } -------------------------------------------------------------------------------- [2026-02-24 19:18:25] ✅ Fichiers Storage supprimés { "count": 6 } -------------------------------------------------------------------------------- [2026-02-24 19:18:25] ÉTAPE 6: Suppression compte via RPC delete_user_account { "user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49" } -------------------------------------------------------------------------------- [2026-02-24 19:18:25] curlPost → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/rpc/delete_user_account", "payload": { "target_user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49" } } -------------------------------------------------------------------------------- [2026-02-24 19:18:25] curlPost ← { "http_code": 204, "curl_error": null, "body_preview": "" } -------------------------------------------------------------------------------- [2026-02-24 19:18:25] Résultat suppression { "http_code": 204, "response": null } -------------------------------------------------------------------------------- [2026-02-24 19:18:25] ✅ COMPTE SUPPRIMÉ AVEC SUCCÈS { "user_id": "b1d04112-3d2a-4111-8569-6034fcd49e49", "email": "rezowebsite@gmail.com", "subscription_cancelled": false, "http_code": 204 } -------------------------------------------------------------------------------- [2026-02-24 19:18:25] jsonResponse HTTP 200 { "success": true, "message": "Compte supprimé avec succès", "userId": "b1d04112-3d2a-4111-8569-6034fcd49e49", "subscriptionCancelled": false } -------------------------------------------------------------------------------- [2026-02-24 20:43:13] ========== SCRIPT ENTRÉ ========== { "method": "POST", "remote_ip": "62.235.242.124", "user_agent": "Odihome/1 CFNetwork/3860.300.31 Darwin/25.2.0", "content_type": "application/json", "php_version": "8.2.29", "timestamp": 1771962193 } -------------------------------------------------------------------------------- [2026-02-24 20:43:13] Chargement supabase_config.php -------------------------------------------------------------------------------- [2026-02-24 20:43:13] supabase_config.php chargé { "SUPABASE_URL_defined": "https://lvtdqnzsqdqcqqimsnuy.supabase.co…", "SUPABASE_ANON_KEY_defined": "OUI (208 chars)", "SUPABASE_SERVICE_ROLE_KEY_defined": "OUI (219 chars)" } -------------------------------------------------------------------------------- [2026-02-24 20:43:13] Body brut reçu { "length": 988, "preview": "{\"accessToken\":\"eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJkZWE3YzkwMi1mZTZlLTQyN2ItY" } -------------------------------------------------------------------------------- [2026-02-24 20:43:13] Body décodé { "accessToken": "eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJkZWE3YzkwMi1mZTZlLTQyN2ItYjdmYi0xNmFkYWEwNTkxNmIiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzcxOTY1MjgxLCJpYXQiOjE3NzE5NjE2ODEsImVtYWlsIjoidGVjaG5vaW1tbzA5QGdtYWlsLmNvbSIsInBob25lIjoiIiwiYXBwX21ldGFkYXRhIjp7InByb3ZpZGVyIjoiZW1haWwiLCJwcm92aWRlcnMiOlsiZW1haWwiXX0sInVzZXJfbWV0YWRhdGEiOnsiZW1haWwiOiJ0ZWNobm9pbW1vMDlAZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImZpcnN0X25hbWUiOiJBbGV4aXMiLCJsYXN0X25hbWUiOiJNaXp1IiwicGhvbmVfdmVyaWZpZWQiOmZhbHNlLCJzdWIiOiJkZWE3YzkwMi1mZTZlLTQyN2ItYjdmYi0xNmFkYWEwNTkxNmIifSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJwYXNzd29yZCIsInRpbWVzdGFtcCI6MTc3MTk2MTY4MX1dLCJzZXNzaW9uX2lkIjoiZjNmNGVhNTEtNzdmOS00Njc2LWJhZGMtYjM3ODEwNzgxZDYzIiwiaXNfYW5vbnltb3VzIjpmYWxzZX0.93JL3yWNSIki66nncM89mH7r2QTLvKpiw0C2RMP7DsM", "userId": "dea7c902-fe6e-427b-b7fb-16adaa05916b" } -------------------------------------------------------------------------------- [2026-02-24 20:43:13] userId validé { "userId": "dea7c902-fe6e-427b-b7fb-16adaa05916b" } -------------------------------------------------------------------------------- [2026-02-24 20:43:13] accessToken lu depuis le body JSON -------------------------------------------------------------------------------- [2026-02-24 20:43:13] accessToken extrait { "length": 922, "preview": "eyJhbGciOiJIUzI1NiIs…" } -------------------------------------------------------------------------------- [2026-02-24 20:43:13] ÉTAPE 1: Vérification token Supabase /auth/v1/user -------------------------------------------------------------------------------- [2026-02-24 20:43:13] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/auth/v1/user" } -------------------------------------------------------------------------------- [2026-02-24 20:43:13] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "{\"id\":\"dea7c902-fe6e-427b-b7fb-16adaa05916b\",\"aud\":\"authenticated\",\"role\":\"authenticated\",\"email\":\"technoimmo09@gmail.com\",\"email_confirmed_at\":\"2026-01-11T15:10:43.994852Z\",\"phone\":\"\",\"confirmed_at\":\"2026-01-11T15:10:43.994852Z\",\"last_sign_in_at\":\"2026-02-24T19:34:41.238798Z\",\"app_metadata\":{\"provi" } -------------------------------------------------------------------------------- [2026-02-24 20:43:13] Token vérifié { "token_user_id": "dea7c902-fe6e-427b-b7fb-16adaa05916b", "email": "technoimmo09@gmail.com" } -------------------------------------------------------------------------------- [2026-02-24 20:43:13] === SUPPRESSION AUTORISÉE === { "user_id": "dea7c902-fe6e-427b-b7fb-16adaa05916b", "email": "technoimmo09@gmail.com", "name": "Alexis Mizu" } -------------------------------------------------------------------------------- [2026-02-24 20:43:13] ÉTAPE 2: Recherche abonnement actif dans Supabase -------------------------------------------------------------------------------- [2026-02-24 20:43:13] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/user_subscriptions?user_id=eq.dea7c902-fe6e-427b-b7fb-16adaa05916b&status=in.(active,trialing)&select=id,stripe_subscription_id,plan_id,status,cancel_at_period_end&limit=1" } -------------------------------------------------------------------------------- [2026-02-24 20:43:14] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "[{\"id\":\"4512bc5e-13a0-47e8-8194-8736934b90b8\",\"stripe_subscription_id\":\"sub_1SoQM7CmOXyFMbarbZIWZs5H\",\"plan_id\":\"agency_starter\",\"status\":\"active\",\"cancel_at_period_end\":false}]" } -------------------------------------------------------------------------------- [2026-02-24 20:43:14] Abonnement actif trouvé { "id": "4512bc5e-13a0-47e8-8194-8736934b90b8", "stripe_subscription_id": "sub_1SoQM7CmOXyFMbarbZIWZs5H", "plan_id": "agency_starter", "status": "active", "cancel_at_period_end": false } -------------------------------------------------------------------------------- [2026-02-24 20:43:14] ÉTAPE 3: Annulation Stripe directe { "stripe_id": "sub_1SoQM7CmOXyFMbarbZIWZs5H" } -------------------------------------------------------------------------------- [2026-02-24 20:43:14] Chemin .env Stripe { "path": "/home/odihomi/webhook/auth/../stripe-api/config/.env", "exists": "OUI" } -------------------------------------------------------------------------------- [2026-02-24 20:43:14] STRIPE_SECRET_KEY { "found": true, "preview": "sk_live_51…" } -------------------------------------------------------------------------------- [2026-02-24 20:43:14] Stripe API ← { "http_code": 200, "curl_error": null, "status": "canceled", "body_preview": "{\n \"id\": \"sub_1SoQM7CmOXyFMbarbZIWZs5H\",\n \"object\": \"subscription\",\n \"application\": null,\n \"application_fee_percent\": null,\n \"automatic_tax\": {\n \"disabled_reason\": null,\n \"enabled\": false,\n \"liability\": null\n },\n \"billing_cycle_anchor\": 1768156529,\n \"billing_cycle_anchor_config\": nu" } -------------------------------------------------------------------------------- [2026-02-24 20:43:14] ✅ Stripe annulé immédiatement { "stripe_id": "sub_1SoQM7CmOXyFMbarbZIWZs5H", "status": "canceled" } -------------------------------------------------------------------------------- [2026-02-24 20:43:14] ÉTAPE 4: Envoi email suppression compte { "email": "technoimmo09@gmail.com" } -------------------------------------------------------------------------------- [2026-02-24 20:43:14] Template path { "path": "/home/odihomi/webhook/auth/delete-email.html", "exists": "OUI" } -------------------------------------------------------------------------------- [2026-02-24 20:43:14] mail() disponible: OUI -------------------------------------------------------------------------------- [2026-02-24 20:43:14] Résultat mail() { "sent": "OUI", "last_error": null } -------------------------------------------------------------------------------- [2026-02-24 20:43:14] ÉTAPE 5: Suppression Storage bucket immovision-images { "user_id": "dea7c902-fe6e-427b-b7fb-16adaa05916b" } -------------------------------------------------------------------------------- [2026-02-24 20:43:15] Fichiers Storage trouvés { "count": 12, "prefix_used": "DEA7C902-FE6E-427B-B7FB-16ADAA05916B/", "files_preview": [ "DEA7C902-FE6E-427B-B7FB-16ADAA05916B/journal_entries/5A8DAFF4-3674-41C2-BF6E-D160CDDA0F34-08819B9D-E33C-4D3D-8258-B6C4932FFBFF.jpg", "DEA7C902-FE6E-427B-B7FB-16ADAA05916B/journal_entries/5A8DAFF4-3674-41C2-BF6E-D160CDDA0F34-2DDAB393-E618-4EC6-AE4A-089F5E5A1914.jpg", "DEA7C902-FE6E-427B-B7FB-16ADAA05916B/journal_entries/5A8DAFF4-3674-41C2-BF6E-D160CDDA0F34-E1132E63-39E2-4BCC-A4DE-191DDF158054.jpg", "DEA7C902-FE6E-427B-B7FB-16ADAA05916B/keys/A1A985AF-A013-4780-A1A9-EE3DAD91707C-9C9A720C-0864-473C-BD74-1C412CA1C1CA.jpg", "DEA7C902-FE6E-427B-B7FB-16ADAA05916B/keys/A1A985AF-A013-4780-A1A9-EE3DAD91707C-D2E619F5-5623-42D6-A61F-B937811B2D99.jpg" ] } -------------------------------------------------------------------------------- [2026-02-24 20:43:16] Lot supprimé { "http_code": 200, "in_lot": 12, "deleted": 12 } -------------------------------------------------------------------------------- [2026-02-24 20:43:16] ✅ Storage nettoyé { "supprimés": 12, "trouvés": 12 } -------------------------------------------------------------------------------- [2026-02-24 20:43:16] ÉTAPE 6: Suppression compte via RPC delete_user_account { "user_id": "dea7c902-fe6e-427b-b7fb-16adaa05916b" } -------------------------------------------------------------------------------- [2026-02-24 20:43:16] curlPost → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/rpc/delete_user_account", "payload": { "target_user_id": "dea7c902-fe6e-427b-b7fb-16adaa05916b" } } -------------------------------------------------------------------------------- [2026-02-24 20:43:16] curlPost ← { "http_code": 204, "curl_error": null, "body_preview": "" } -------------------------------------------------------------------------------- [2026-02-24 20:43:16] Résultat suppression { "http_code": 204, "response": null } -------------------------------------------------------------------------------- [2026-02-24 20:43:16] ✅ COMPTE SUPPRIMÉ AVEC SUCCÈS { "user_id": "dea7c902-fe6e-427b-b7fb-16adaa05916b", "email": "technoimmo09@gmail.com", "subscription_cancelled": true, "http_code": 204 } -------------------------------------------------------------------------------- [2026-02-24 20:43:16] jsonResponse HTTP 200 { "success": true, "message": "Compte supprimé avec succès", "userId": "dea7c902-fe6e-427b-b7fb-16adaa05916b", "subscriptionCancelled": true } -------------------------------------------------------------------------------- [2026-03-03 10:29:22] ========== SCRIPT ENTRÉ ========== { "method": "POST", "remote_ip": "2a02:a03f:6b21:de01:1588:ccd4:ea96:bb49", "user_agent": "Odihome/3 CFNetwork/3860.300.31 Darwin/25.2.0", "content_type": "application/json", "php_version": "8.2.29", "timestamp": 1772530162 } -------------------------------------------------------------------------------- [2026-03-03 10:29:22] Chargement supabase_config.php -------------------------------------------------------------------------------- [2026-03-03 10:29:22] supabase_config.php chargé { "SUPABASE_URL_defined": "https://lvtdqnzsqdqcqqimsnuy.supabase.co…", "SUPABASE_ANON_KEY_defined": "OUI (208 chars)", "SUPABASE_SERVICE_ROLE_KEY_defined": "OUI (219 chars)" } -------------------------------------------------------------------------------- [2026-03-03 10:29:22] Body brut reçu { "length": 917, "preview": "{\"userId\":\"77dead06-f402-4dd6-b316-536b8af62033\",\"accessToken\":\"eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL" } -------------------------------------------------------------------------------- [2026-03-03 10:29:22] Body décodé { "userId": "77dead06-f402-4dd6-b316-536b8af62033", "accessToken": "eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiI3N2RlYWQwNi1mNDAyLTRkZDYtYjMxNi01MzZiOGFmNjIwMzMiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzcyNTMzNzQxLCJpYXQiOjE3NzI1MzAxNDEsImVtYWlsIjoiaW5mb0BvZGlob21lLmFwcCIsInBob25lIjoiIiwiYXBwX21ldGFkYXRhIjp7InByb3ZpZGVyIjoiZW1haWwiLCJwcm92aWRlcnMiOlsiZW1haWwiXX0sInVzZXJfbWV0YWRhdGEiOnsiZW1haWwiOiJpbmZvQG9kaWhvbWUuYXBwIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInBob25lX3ZlcmlmaWVkIjpmYWxzZSwic3ViIjoiNzdkZWFkMDYtZjQwMi00ZGQ2LWIzMTYtNTM2YjhhZjYyMDMzIn0sInJvbGUiOiJhdXRoZW50aWNhdGVkIiwiYWFsIjoiYWFsMSIsImFtciI6W3sibWV0aG9kIjoicGFzc3dvcmQiLCJ0aW1lc3RhbXAiOjE3NzI1MzAxNDF9XSwic2Vzc2lvbl9pZCI6ImFhOWYyZDNkLTRiYTMtNDIzYS1iOGRhLTk3ZjNmNDQyMTdkOCIsImlzX2Fub255bW91cyI6ZmFsc2V9.fJBlYvbEopMxQhyuHoGkprldiiDE4Id_j0m-PSRCwA4" } -------------------------------------------------------------------------------- [2026-03-03 10:29:22] userId validé { "userId": "77dead06-f402-4dd6-b316-536b8af62033" } -------------------------------------------------------------------------------- [2026-03-03 10:29:22] accessToken lu depuis le body JSON -------------------------------------------------------------------------------- [2026-03-03 10:29:22] accessToken extrait { "length": 851, "preview": "eyJhbGciOiJIUzI1NiIs…" } -------------------------------------------------------------------------------- [2026-03-03 10:29:22] ÉTAPE 1: Vérification token Supabase /auth/v1/user -------------------------------------------------------------------------------- [2026-03-03 10:29:22] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/auth/v1/user" } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "{\"id\":\"77dead06-f402-4dd6-b316-536b8af62033\",\"aud\":\"authenticated\",\"role\":\"authenticated\",\"email\":\"info@odihome.app\",\"email_confirmed_at\":\"2026-02-10T09:28:50.618835Z\",\"phone\":\"\",\"confirmation_sent_at\":\"2026-02-10T09:25:44.878473Z\",\"confirmed_at\":\"2026-02-10T09:28:50.618835Z\",\"last_sign_in_at\":\"2026" } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] Token vérifié { "token_user_id": "77dead06-f402-4dd6-b316-536b8af62033", "email": "info@odihome.app" } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] === SUPPRESSION AUTORISÉE === { "user_id": "77dead06-f402-4dd6-b316-536b8af62033", "email": "info@odihome.app", "name": "info" } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] ÉTAPE 2: Recherche abonnement actif dans Supabase -------------------------------------------------------------------------------- [2026-03-03 10:29:23] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/user_subscriptions?user_id=eq.77dead06-f402-4dd6-b316-536b8af62033&status=in.(active,trialing)&select=id,stripe_subscription_id,plan_id,status,cancel_at_period_end&limit=1" } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "[]" } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] Aucun abonnement actif { "http_code": 200, "data": [] } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] ÉTAPE 3: Pas d'abonnement Stripe à annuler -------------------------------------------------------------------------------- [2026-03-03 10:29:23] ÉTAPE 4: Envoi email suppression compte { "email": "info@odihome.app" } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] Template path { "path": "/home/odihomi/webhook/auth/delete-email.html", "exists": "OUI" } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] mail() disponible: OUI -------------------------------------------------------------------------------- [2026-03-03 10:29:23] Résultat mail() { "sent": "OUI", "last_error": null } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] ÉTAPE 5: Suppression Storage bucket immovision-images { "user_id": "77dead06-f402-4dd6-b316-536b8af62033" } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] Fichiers Storage trouvés { "count": 10, "prefix_used": "77DEAD06-F402-4DD6-B316-536B8AF62033/", "files_preview": [ "77DEAD06-F402-4DD6-B316-536B8AF62033/info_add/image-231BC06D.jpg", "77DEAD06-F402-4DD6-B316-536B8AF62033/info_add/image-4645E763.jpg", "77DEAD06-F402-4DD6-B316-536B8AF62033/info_add/image-60D8B029.jpg", "77DEAD06-F402-4DD6-B316-536B8AF62033/info_add/image-6C7E5C4E.jpg", "77DEAD06-F402-4DD6-B316-536B8AF62033/info_add/image-CC4F2448.jpg" ] } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] Lot supprimé { "http_code": 200, "in_lot": 10, "deleted": 10 } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] ✅ Storage nettoyé { "supprimés": 10, "trouvés": 10 } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] ÉTAPE 6: Suppression compte via RPC delete_user_account { "user_id": "77dead06-f402-4dd6-b316-536b8af62033" } -------------------------------------------------------------------------------- [2026-03-03 10:29:23] curlPost → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/rpc/delete_user_account", "payload": { "target_user_id": "77dead06-f402-4dd6-b316-536b8af62033" } } -------------------------------------------------------------------------------- [2026-03-03 10:29:24] curlPost ← { "http_code": 204, "curl_error": null, "body_preview": "" } -------------------------------------------------------------------------------- [2026-03-03 10:29:24] Résultat suppression { "http_code": 204, "response": null } -------------------------------------------------------------------------------- [2026-03-03 10:29:24] ✅ COMPTE SUPPRIMÉ AVEC SUCCÈS { "user_id": "77dead06-f402-4dd6-b316-536b8af62033", "email": "info@odihome.app", "subscription_cancelled": false, "http_code": 204 } -------------------------------------------------------------------------------- [2026-03-03 10:29:24] jsonResponse HTTP 200 { "success": true, "message": "Compte supprimé avec succès", "userId": "77dead06-f402-4dd6-b316-536b8af62033", "subscriptionCancelled": false } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] ========== SCRIPT ENTRÉ ========== { "method": "POST", "remote_ip": "2a02:a03f:6b21:de01:1588:ccd4:ea96:bb49", "user_agent": "Odihome/3 CFNetwork/3860.300.31 Darwin/25.2.0", "content_type": "application/json", "php_version": "8.2.29", "timestamp": 1772636948 } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] Chargement supabase_config.php -------------------------------------------------------------------------------- [2026-03-04 16:09:08] supabase_config.php chargé { "SUPABASE_URL_defined": "https://lvtdqnzsqdqcqqimsnuy.supabase.co…", "SUPABASE_ANON_KEY_defined": "OUI (208 chars)", "SUPABASE_SERVICE_ROLE_KEY_defined": "OUI (219 chars)" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] Body brut reçu { "length": 917, "preview": "{\"accessToken\":\"eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiIwZmMzOWI0MC0yNDcyLTQzNGQtO" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] Body décodé { "accessToken": "eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiIwZmMzOWI0MC0yNDcyLTQzNGQtOTA3MS0xMjg1YzBjYjkwZGYiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzcyNjM4ODk5LCJpYXQiOjE3NzI2MzUyOTksImVtYWlsIjoiaW5mb0BvZGlob21lLmFwcCIsInBob25lIjoiIiwiYXBwX21ldGFkYXRhIjp7InByb3ZpZGVyIjoiZW1haWwiLCJwcm92aWRlcnMiOlsiZW1haWwiXX0sInVzZXJfbWV0YWRhdGEiOnsiZW1haWwiOiJpbmZvQG9kaWhvbWUuYXBwIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInBob25lX3ZlcmlmaWVkIjpmYWxzZSwic3ViIjoiMGZjMzliNDAtMjQ3Mi00MzRkLTkwNzEtMTI4NWMwY2I5MGRmIn0sInJvbGUiOiJhdXRoZW50aWNhdGVkIiwiYWFsIjoiYWFsMSIsImFtciI6W3sibWV0aG9kIjoicGFzc3dvcmQiLCJ0aW1lc3RhbXAiOjE3NzI2MzUyOTl9XSwic2Vzc2lvbl9pZCI6ImI3MTFlMGNmLTU2ZTItNDEyNC1iNDEyLThmMWEyMDRiMmIxYyIsImlzX2Fub255bW91cyI6ZmFsc2V9.9uTnjmZlf8NymPhfnNQuiYtfAbX6C-ETv00FBVwGv1I", "userId": "0fc39b40-2472-434d-9071-1285c0cb90df" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] userId validé { "userId": "0fc39b40-2472-434d-9071-1285c0cb90df" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] accessToken lu depuis le body JSON -------------------------------------------------------------------------------- [2026-03-04 16:09:08] accessToken extrait { "length": 851, "preview": "eyJhbGciOiJIUzI1NiIs…" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] ÉTAPE 1: Vérification token Supabase /auth/v1/user -------------------------------------------------------------------------------- [2026-03-04 16:09:08] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/auth/v1/user" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "{\"id\":\"0fc39b40-2472-434d-9071-1285c0cb90df\",\"aud\":\"authenticated\",\"role\":\"authenticated\",\"email\":\"info@odihome.app\",\"email_confirmed_at\":\"2026-03-04T14:41:19.907816Z\",\"phone\":\"\",\"confirmation_sent_at\":\"2026-03-04T14:21:32.977382Z\",\"confirmed_at\":\"2026-03-04T14:41:19.907816Z\",\"last_sign_in_at\":\"2026" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] Token vérifié { "token_user_id": "0fc39b40-2472-434d-9071-1285c0cb90df", "email": "info@odihome.app" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] === SUPPRESSION AUTORISÉE === { "user_id": "0fc39b40-2472-434d-9071-1285c0cb90df", "email": "info@odihome.app", "name": "info" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] ÉTAPE 2: Recherche abonnement actif dans Supabase -------------------------------------------------------------------------------- [2026-03-04 16:09:08] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/user_subscriptions?user_id=eq.0fc39b40-2472-434d-9071-1285c0cb90df&status=in.(active,trialing)&select=id,stripe_subscription_id,plan_id,status,cancel_at_period_end&limit=1" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "[]" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] Aucun abonnement actif { "http_code": 200, "data": [] } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] ÉTAPE 3: Pas d'abonnement Stripe à annuler -------------------------------------------------------------------------------- [2026-03-04 16:09:08] ÉTAPE 4: Envoi email suppression compte { "email": "info@odihome.app" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] Template path { "path": "/home/odihomi/webhook/auth/delete-email.html", "exists": "OUI" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] mail() disponible: OUI -------------------------------------------------------------------------------- [2026-03-04 16:09:08] Résultat mail() { "sent": "OUI", "last_error": null } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] ÉTAPE 5: Suppression Storage bucket immovision-images { "user_id": "0fc39b40-2472-434d-9071-1285c0cb90df" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] Fichiers Storage trouvés { "count": 0, "prefix_used": "0FC39B40-2472-434D-9071-1285C0CB90DF/", "files_preview": [] } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] Aucun fichier Storage trouvé pour cet user (bucket déjà vide) -------------------------------------------------------------------------------- [2026-03-04 16:09:08] ÉTAPE 6: Suppression compte via RPC delete_user_account { "user_id": "0fc39b40-2472-434d-9071-1285c0cb90df" } -------------------------------------------------------------------------------- [2026-03-04 16:09:08] curlPost → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/rpc/delete_user_account", "payload": { "target_user_id": "0fc39b40-2472-434d-9071-1285c0cb90df" } } -------------------------------------------------------------------------------- [2026-03-04 16:09:09] curlPost ← { "http_code": 204, "curl_error": null, "body_preview": "" } -------------------------------------------------------------------------------- [2026-03-04 16:09:09] Résultat suppression { "http_code": 204, "response": null } -------------------------------------------------------------------------------- [2026-03-04 16:09:09] ✅ COMPTE SUPPRIMÉ AVEC SUCCÈS { "user_id": "0fc39b40-2472-434d-9071-1285c0cb90df", "email": "info@odihome.app", "subscription_cancelled": false, "http_code": 204 } -------------------------------------------------------------------------------- [2026-03-04 16:09:09] jsonResponse HTTP 200 { "success": true, "message": "Compte supprimé avec succès", "userId": "0fc39b40-2472-434d-9071-1285c0cb90df", "subscriptionCancelled": false } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] ========== SCRIPT ENTRÉ ========== { "method": "POST", "remote_ip": "2a02:a03f:6b21:de01:c00f:bade:a7ed:948b", "user_agent": "Odihome/3 CFNetwork/3860.300.31 Darwin/25.2.0", "content_type": "application/json", "php_version": "8.2.29", "timestamp": 1772789157 } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] Chargement supabase_config.php -------------------------------------------------------------------------------- [2026-03-06 10:25:57] supabase_config.php chargé { "SUPABASE_URL_defined": "https://lvtdqnzsqdqcqqimsnuy.supabase.co…", "SUPABASE_ANON_KEY_defined": "OUI (208 chars)", "SUPABASE_SERVICE_ROLE_KEY_defined": "OUI (219 chars)" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] Body brut reçu { "length": 917, "preview": "{\"accessToken\":\"eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJlMDJmNTNkYi04YWVjLTQ0NDktO" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] Body décodé { "accessToken": "eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiJlMDJmNTNkYi04YWVjLTQ0NDktOThkMS0wZGYwYmExZGIzNWIiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzcyNzkyNzQ4LCJpYXQiOjE3NzI3ODkxNDgsImVtYWlsIjoiaW5mb0BvZGlob21lLmFwcCIsInBob25lIjoiIiwiYXBwX21ldGFkYXRhIjp7InByb3ZpZGVyIjoiZW1haWwiLCJwcm92aWRlcnMiOlsiZW1haWwiXX0sInVzZXJfbWV0YWRhdGEiOnsiZW1haWwiOiJpbmZvQG9kaWhvbWUuYXBwIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInBob25lX3ZlcmlmaWVkIjpmYWxzZSwic3ViIjoiZTAyZjUzZGItOGFlYy00NDQ5LTk4ZDEtMGRmMGJhMWRiMzViIn0sInJvbGUiOiJhdXRoZW50aWNhdGVkIiwiYWFsIjoiYWFsMSIsImFtciI6W3sibWV0aG9kIjoicGFzc3dvcmQiLCJ0aW1lc3RhbXAiOjE3NzI3MTUxMjR9XSwic2Vzc2lvbl9pZCI6IjUwMzdmM2IyLTA5NGYtNGI1NC05N2YzLWYxYjM0NjYyYWRlOCIsImlzX2Fub255bW91cyI6ZmFsc2V9.PBJvDYwm7VRsAU1Lz0WHeZs_TizNq_0xuIGaSD2Eons", "userId": "e02f53db-8aec-4449-98d1-0df0ba1db35b" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] userId validé { "userId": "e02f53db-8aec-4449-98d1-0df0ba1db35b" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] accessToken lu depuis le body JSON -------------------------------------------------------------------------------- [2026-03-06 10:25:57] accessToken extrait { "length": 851, "preview": "eyJhbGciOiJIUzI1NiIs…" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] ÉTAPE 1: Vérification token Supabase /auth/v1/user -------------------------------------------------------------------------------- [2026-03-06 10:25:57] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/auth/v1/user" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "{\"id\":\"e02f53db-8aec-4449-98d1-0df0ba1db35b\",\"aud\":\"authenticated\",\"role\":\"authenticated\",\"email\":\"info@odihome.app\",\"email_confirmed_at\":\"2026-03-05T07:06:48.89507Z\",\"phone\":\"\",\"confirmation_sent_at\":\"2026-03-04T20:05:00.548102Z\",\"confirmed_at\":\"2026-03-05T07:06:48.89507Z\",\"last_sign_in_at\":\"2026-0" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] Token vérifié { "token_user_id": "e02f53db-8aec-4449-98d1-0df0ba1db35b", "email": "info@odihome.app" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] === SUPPRESSION AUTORISÉE === { "user_id": "e02f53db-8aec-4449-98d1-0df0ba1db35b", "email": "info@odihome.app", "name": "info" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] ÉTAPE 2: Recherche abonnement actif dans Supabase -------------------------------------------------------------------------------- [2026-03-06 10:25:57] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/user_subscriptions?user_id=eq.e02f53db-8aec-4449-98d1-0df0ba1db35b&status=in.(active,trialing)&select=id,stripe_subscription_id,plan_id,status,cancel_at_period_end&limit=1" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "[]" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] Aucun abonnement actif { "http_code": 200, "data": [] } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] ÉTAPE 3: Pas d'abonnement Stripe à annuler -------------------------------------------------------------------------------- [2026-03-06 10:25:57] ÉTAPE 4: Envoi email suppression compte { "email": "info@odihome.app" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] Template path { "path": "/home/odihomi/webhook/auth/delete-email.html", "exists": "OUI" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] mail() disponible: OUI -------------------------------------------------------------------------------- [2026-03-06 10:25:57] Résultat mail() { "sent": "OUI", "last_error": null } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] ÉTAPE 5: Suppression Storage bucket immovision-images { "user_id": "e02f53db-8aec-4449-98d1-0df0ba1db35b" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] Fichiers Storage trouvés { "count": 0, "prefix_used": "E02F53DB-8AEC-4449-98D1-0DF0BA1DB35B/", "files_preview": [] } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] Aucun fichier Storage trouvé pour cet user (bucket déjà vide) -------------------------------------------------------------------------------- [2026-03-06 10:25:57] ÉTAPE 6: Suppression compte via RPC delete_user_account { "user_id": "e02f53db-8aec-4449-98d1-0df0ba1db35b" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] curlPost → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/rpc/delete_user_account", "payload": { "target_user_id": "e02f53db-8aec-4449-98d1-0df0ba1db35b" } } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] curlPost ← { "http_code": 204, "curl_error": null, "body_preview": "" } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] Résultat suppression { "http_code": 204, "response": null } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] ✅ COMPTE SUPPRIMÉ AVEC SUCCÈS { "user_id": "e02f53db-8aec-4449-98d1-0df0ba1db35b", "email": "info@odihome.app", "subscription_cancelled": false, "http_code": 204 } -------------------------------------------------------------------------------- [2026-03-06 10:25:57] jsonResponse HTTP 200 { "success": true, "message": "Compte supprimé avec succès", "userId": "e02f53db-8aec-4449-98d1-0df0ba1db35b", "subscriptionCancelled": false } -------------------------------------------------------------------------------- [2026-03-29 19:26:32] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "185.191.171.17", "user_agent": "Mozilla/5.0 (compatible; SemrushBot/7~bl; +http://www.semrush.com/bot.html)", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1774805192 } -------------------------------------------------------------------------------- [2026-03-29 19:26:32] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-03-30 02:31:57] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "85.208.96.212", "user_agent": "Mozilla/5.0 (compatible; SemrushBot/7~bl; +http://www.semrush.com/bot.html)", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1774830717 } -------------------------------------------------------------------------------- [2026-03-30 02:31:57] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-04-13 23:48:35] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "103.4.251.116", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1776116915 } -------------------------------------------------------------------------------- [2026-04-13 23:48:35] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-04-14 05:23:21] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "104.252.191.21", "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1776137001 } -------------------------------------------------------------------------------- [2026-04-14 05:23:21] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-04-19 08:42:15] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "104.37.27.164", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 14.2; rv:109.0) Gecko/20100101 Firefox/121.0", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1776580935 } -------------------------------------------------------------------------------- [2026-04-19 08:42:15] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-04-29 09:10:06] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "85.208.96.199", "user_agent": "Mozilla/5.0 (compatible; SemrushBot/7~bl; +http://www.semrush.com/bot.html)", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1777446606 } -------------------------------------------------------------------------------- [2026-04-29 09:10:06] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-04-29 14:26:37] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "85.208.96.196", "user_agent": "Mozilla/5.0 (compatible; SemrushBot/7~bl; +http://www.semrush.com/bot.html)", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1777465597 } -------------------------------------------------------------------------------- [2026-04-29 14:26:37] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-04-30 23:12:38] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "2a02:4780:5e:ee63::1", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1777583558 } -------------------------------------------------------------------------------- [2026-04-30 23:12:38] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-05-01 07:59:29] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "2a02:4780:f:98bf::1", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1777615169 } -------------------------------------------------------------------------------- [2026-05-01 07:59:29] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-05-07 07:58:52] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "2602:fb54:1400::2f", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1778133532 } -------------------------------------------------------------------------------- [2026-05-07 07:58:52] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] ========== SCRIPT ENTRÉ ========== { "method": "POST", "remote_ip": "37.167.11.223", "user_agent": "Odihome/3 CFNetwork/3860.400.51 Darwin/25.3.0", "content_type": "application/json", "php_version": "8.2.29", "timestamp": 1778146792 } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] Chargement supabase_config.php -------------------------------------------------------------------------------- [2026-05-07 11:39:52] supabase_config.php chargé { "SUPABASE_URL_defined": "https://lvtdqnzsqdqcqqimsnuy.supabase.co…", "SUPABASE_ANON_KEY_defined": "OUI (208 chars)", "SUPABASE_SERVICE_ROLE_KEY_defined": "OUI (219 chars)" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] Body brut reçu { "length": 936, "preview": "{\"userId\":\"67166e42-e945-486f-8275-6c7697ad0411\",\"accessToken\":\"eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] Body décodé { "userId": "67166e42-e945-486f-8275-6c7697ad0411", "accessToken": "eyJhbGciOiJIUzI1NiIsImtpZCI6Imt5eXhVbUFicUc3WnVNU3giLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2x2dGRxbnpzcWRxY3FxaW1zbnV5LnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiI2NzE2NmU0Mi1lOTQ1LTQ4NmYtODI3NS02Yzc2OTdhZDA0MTEiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzc4MjMzMDcxLCJpYXQiOjE3NzgxNDY2NzEsImVtYWlsIjoiY29uc3RhdHNlcnY2NEBnbWFpbC5jb20iLCJwaG9uZSI6IiIsImFwcF9tZXRhZGF0YSI6eyJwcm92aWRlciI6ImVtYWlsIiwicHJvdmlkZXJzIjpbImVtYWlsIl19LCJ1c2VyX21ldGFkYXRhIjp7ImVtYWlsIjoiY29uc3RhdHNlcnY2NEBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicGhvbmVfdmVyaWZpZWQiOmZhbHNlLCJzdWIiOiI2NzE2NmU0Mi1lOTQ1LTQ4NmYtODI3NS02Yzc2OTdhZDA0MTEifSwicm9sZSI6ImF1dGhlbnRpY2F0ZWQiLCJhYWwiOiJhYWwxIiwiYW1yIjpbeyJtZXRob2QiOiJwYXNzd29yZCIsInRpbWVzdGFtcCI6MTc3ODE0NjY3MX1dLCJzZXNzaW9uX2lkIjoiOWY4ZjQwMmEtZjJkMy00MWRkLWJiNjktOGQ4YWM1ZjU5N2YzIiwiaXNfYW5vbnltb3VzIjpmYWxzZX0.DuACIuKepVFqCcCuG2wi9l3DLwHqQdT08350dkFe9Sw" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] userId validé { "userId": "67166e42-e945-486f-8275-6c7697ad0411" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] accessToken lu depuis le body JSON -------------------------------------------------------------------------------- [2026-05-07 11:39:52] accessToken extrait { "length": 870, "preview": "eyJhbGciOiJIUzI1NiIs…" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] ÉTAPE 1: Vérification token Supabase /auth/v1/user -------------------------------------------------------------------------------- [2026-05-07 11:39:52] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/auth/v1/user" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "{\"id\":\"67166e42-e945-486f-8275-6c7697ad0411\",\"aud\":\"authenticated\",\"role\":\"authenticated\",\"email\":\"constatserv64@gmail.com\",\"email_confirmed_at\":\"2026-05-07T09:36:22.887011Z\",\"phone\":\"\",\"confirmation_sent_at\":\"2026-05-07T09:36:03.458307Z\",\"confirmed_at\":\"2026-05-07T09:36:22.887011Z\",\"last_sign_in_at" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] Token vérifié { "token_user_id": "67166e42-e945-486f-8275-6c7697ad0411", "email": "constatserv64@gmail.com" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] === SUPPRESSION AUTORISÉE === { "user_id": "67166e42-e945-486f-8275-6c7697ad0411", "email": "constatserv64@gmail.com", "name": "constatserv64" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] ÉTAPE 2: Recherche abonnement actif dans Supabase -------------------------------------------------------------------------------- [2026-05-07 11:39:52] curlGet → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/user_subscriptions?user_id=eq.67166e42-e945-486f-8275-6c7697ad0411&status=in.(active,trialing)&select=id,stripe_subscription_id,plan_id,status,cancel_at_period_end&limit=1" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] curlGet ← { "http_code": 200, "curl_error": null, "body_preview": "[]" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] Aucun abonnement actif { "http_code": 200, "data": [] } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] ÉTAPE 3: Pas d'abonnement Stripe à annuler -------------------------------------------------------------------------------- [2026-05-07 11:39:52] ÉTAPE 4: Envoi email suppression compte { "email": "constatserv64@gmail.com" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] Template path { "path": "/home/odihomi/webhook/auth/delete-email.html", "exists": "OUI" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] mail() disponible: OUI -------------------------------------------------------------------------------- [2026-05-07 11:39:52] Résultat mail() { "sent": "OUI", "last_error": null } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] ÉTAPE 5: Suppression Storage bucket immovision-images { "user_id": "67166e42-e945-486f-8275-6c7697ad0411" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] Fichiers Storage trouvés { "count": 0, "prefix_used": "67166E42-E945-486F-8275-6C7697AD0411/", "files_preview": [] } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] Aucun fichier Storage trouvé pour cet user (bucket déjà vide) -------------------------------------------------------------------------------- [2026-05-07 11:39:52] ÉTAPE 6: Suppression compte via RPC delete_user_account { "user_id": "67166e42-e945-486f-8275-6c7697ad0411" } -------------------------------------------------------------------------------- [2026-05-07 11:39:52] curlPost → { "url": "https://lvtdqnzsqdqcqqimsnuy.supabase.co/rest/v1/rpc/delete_user_account", "payload": { "target_user_id": "67166e42-e945-486f-8275-6c7697ad0411" } } -------------------------------------------------------------------------------- [2026-05-07 11:39:53] curlPost ← { "http_code": 204, "curl_error": null, "body_preview": "" } -------------------------------------------------------------------------------- [2026-05-07 11:39:53] Résultat suppression { "http_code": 204, "response": null } -------------------------------------------------------------------------------- [2026-05-07 11:39:53] ✅ COMPTE SUPPRIMÉ AVEC SUCCÈS { "user_id": "67166e42-e945-486f-8275-6c7697ad0411", "email": "constatserv64@gmail.com", "subscription_cancelled": false, "http_code": 204 } -------------------------------------------------------------------------------- [2026-05-07 11:39:53] jsonResponse HTTP 200 { "success": true, "message": "Compte supprimé avec succès", "userId": "67166e42-e945-486f-8275-6c7697ad0411", "subscriptionCancelled": false } -------------------------------------------------------------------------------- [2026-05-18 21:05:57] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "2a02:4780:10:4bc9::1", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1779131157 } -------------------------------------------------------------------------------- [2026-05-18 21:05:57] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-05-18 23:16:29] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "2a02:4780:75:d99e::1", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1779138989 } -------------------------------------------------------------------------------- [2026-05-18 23:16:29] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-05-28 05:42:45] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "185.191.171.1", "user_agent": "Mozilla/5.0 (compatible; SemrushBot/7~bl; +http://www.semrush.com/bot.html)", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1779939765 } -------------------------------------------------------------------------------- [2026-05-28 05:42:45] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-05-28 12:10:52] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "185.191.171.19", "user_agent": "Mozilla/5.0 (compatible; SemrushBot/7~bl; +http://www.semrush.com/bot.html)", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1779963052 } -------------------------------------------------------------------------------- [2026-05-28 12:10:52] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-05-30 20:03:50] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "207.241.173.215", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1780164230 } -------------------------------------------------------------------------------- [2026-05-30 20:03:50] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-05-30 20:07:27] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "207.241.173.215", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1780164447 } -------------------------------------------------------------------------------- [2026-05-30 20:07:27] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } -------------------------------------------------------------------------------- [2026-06-04 01:20:07] ========== SCRIPT ENTRÉ ========== { "method": "GET", "remote_ip": "2602:fb54:97e::", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36", "content_type": "UNKNOWN", "php_version": "8.2.29", "timestamp": 1780528807 } -------------------------------------------------------------------------------- [2026-06-04 01:20:07] jsonResponse HTTP 405 { "error": "Méthode non autorisée" } --------------------------------------------------------------------------------