From 5f24dccd4023d2095c4212ebe99638152c21bae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 20 Jul 2021 13:30:51 +0000 Subject: [PATCH] [FIX] website_crm_iap_reveal: fix potential loops if iap result is broken Currently if output from IAP does not hold 'no_result' for each failed IP address we may end up with a loop. This commit ensures that a void result for an ip correctly set its views as no_result to avoid endless loops. LINKS Task-2630969 Prepares Task-2600047 (code improvements and cleaning) COM PR odoo/odoo#75514 --- .../models/crm_reveal_rule.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/addons/website_crm_iap_reveal/models/crm_reveal_rule.py b/addons/website_crm_iap_reveal/models/crm_reveal_rule.py index f8434aeee5d..94fb99d025c 100644 --- a/addons/website_crm_iap_reveal/models/crm_reveal_rule.py +++ b/addons/website_crm_iap_reveal/models/crm_reveal_rule.py @@ -331,18 +331,29 @@ class CRMRevealRule(models.Model): 'data': server_payload } result = self._iap_contact_reveal(params, timeout=300) + + all_ips, done_ips = list(server_payload['ips'].keys()), [] for res in result.get('reveal_data', []): + done_ips.append(res['ip']) if not res.get('not_found'): lead = self._create_lead_from_response(res) self.env['crm.reveal.view'].search([('reveal_ip', '=', res['ip'])]).unlink() else: - self.env['crm.reveal.view'].search([('reveal_ip', '=', res['ip'])]).write({ - 'reveal_state': 'not_found' - }) + views = self.env['crm.reveal.view'].search([('reveal_ip', '=', res['ip'])]) + views.write({'reveal_state': 'not_found'}) + views.flush() + if result.get('credit_error'): self.env['crm.iap.lead.helpers'].notify_no_more_credit('reveal', self._name, 'reveal.already_notified') return False else: + # avoid loops if IAP return result is broken: otherwise some IP may create loops + views = self.env['crm.reveal.view'].search([ + ('reveal_ip', 'in', [ip for ip in all_ips if ip not in done_ips]) + ]) + views.write({'reveal_state': 'not_found'}) + views.flush() + # reset notified parameter to re-send credit notice if appears again self.env['ir.config_parameter'].sudo().set_param('reveal.already_notified', False) return True