diff --git a/website_sale_ux/__init__.py b/website_sale_ux/__init__.py index e0396565..5bc64e42 100644 --- a/website_sale_ux/__init__.py +++ b/website_sale_ux/__init__.py @@ -3,3 +3,4 @@ # directory ############################################################################## from . import controllers +from . import models \ No newline at end of file diff --git a/website_sale_ux/__manifest__.py b/website_sale_ux/__manifest__.py index 9d48cfbd..b170695c 100644 --- a/website_sale_ux/__manifest__.py +++ b/website_sale_ux/__manifest__.py @@ -20,7 +20,7 @@ { 'name': 'Website Sale UX', 'category': 'base.module_category_knowledge_management', - 'version': '13.0.1.2.0', + 'version': '13.0.1.3.0', 'author': 'ADHOC SA', 'website': 'www.adhoc.com.ar', 'license': 'AGPL-3', @@ -31,7 +31,9 @@ 'test': [], 'demo': [], 'data': [ + 'security/ir.model.access.csv', 'views/product_template_views.xml', + 'views/website_block_ip.xml', ], 'installable': True, } diff --git a/website_sale_ux/models/__init__.py b/website_sale_ux/models/__init__.py new file mode 100644 index 00000000..4790383e --- /dev/null +++ b/website_sale_ux/models/__init__.py @@ -0,0 +1,2 @@ +from . import website +from . import sale_order \ No newline at end of file diff --git a/website_sale_ux/models/sale_order.py b/website_sale_ux/models/sale_order.py new file mode 100644 index 00000000..1f1c20e2 --- /dev/null +++ b/website_sale_ux/models/sale_order.py @@ -0,0 +1,7 @@ +from odoo import fields, models + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + ip_address = fields.Char('ip_address', index=True, copy=False) diff --git a/website_sale_ux/models/website.py b/website_sale_ux/models/website.py new file mode 100644 index 00000000..36d4cbb9 --- /dev/null +++ b/website_sale_ux/models/website.py @@ -0,0 +1,46 @@ +from odoo import fields, models +from odoo.http import request +from odoo.exceptions import UserError + +from datetime import datetime, timedelta + +class Website(models.Model): + _inherit = 'website' + + def _prepare_sale_order_values(self, partner, pricelist): + + values = super()._prepare_sale_order_values(partner, pricelist) + ban_duration = int(self.env['ir.config_parameter'].sudo().get_param('website.order_banned_minutes', '30')) + + values['ip_address'] = request.httprequest.environ['REMOTE_ADDR'] + from_time =datetime.now() - timedelta(minutes=ban_duration) + block_count = self.env['website.block_ip'].sudo().search_count([ + ('name', '=', values['ip_address']), + ('create_date', '>', from_time), + ]) + + if block_count > 0: + raise UserError('Your Order blocked') + + + ban_duration = int(self.env['ir.config_parameter'].sudo().get_param('website.order_banned_after', '3')) + + from_time = datetime.now() - timedelta(seconds=60) + order_count = self.env['sale.order'].sudo().search_count([ + ('ip_address', '=', values['ip_address']), + ('create_date', '>', from_time), + ]) + if order_count >= 3: + self.env['website.block_ip'].sudo().create({'name': values['ip_address']}) + self._cr.commit() + raise UserError('Demasiadas ordenes creadas') + + return values + + +class WebsiteBlockIP(models.Model): + + _name = 'website.block_ip' + _description = 'blocked ips' + + name = fields.Char('Ip', index=True) diff --git a/website_sale_ux/security/ir.model.access.csv b/website_sale_ux/security/ir.model.access.csv new file mode 100644 index 00000000..0b570b14 --- /dev/null +++ b/website_sale_ux/security/ir.model.access.csv @@ -0,0 +1,2 @@ +"id","name","model_id/id","group_id/id","perm_read","perm_write","perm_create","perm_unlink" +"website_sale_ux.block_ips","Block ips","website_sale_ux.model_website_block_ip","website.group_website_designer","True","True","True","True" diff --git a/website_sale_ux/views/website_block_ip.xml b/website_sale_ux/views/website_block_ip.xml new file mode 100644 index 00000000..2cd3e776 --- /dev/null +++ b/website_sale_ux/views/website_block_ip.xml @@ -0,0 +1,39 @@ + + + + website.block_ip.view.tree + website.block_ip + + + + + + + + + website.block_ip.view.search + website.block_ip + + + + + + + + + Action Name + website.block_ip + tree + [] + {} + +

no blocked ips

+
+
+ +