oca-website/odoo-bringout-oca-website-website_require_login/website_require_login/models/ir_http.py
2025-08-29 15:43:06 +02:00

48 lines
1.4 KiB
Python

# Copyright 2020 Advitus MB
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0).
from pathlib import Path
from odoo import models
from odoo.http import request
class IrHttp(models.AbstractModel):
_inherit = "ir.http"
@classmethod
def _dispatch(cls, endpoint):
res = cls._check_require_auth()
if res:
return res
return super()._dispatch(endpoint)
@classmethod
def _serve_fallback(cls):
res = cls._check_require_auth()
if res:
return res
return super()._serve_fallback()
@classmethod
def _check_require_auth(cls):
# if not website request - skip
website = request.env["website"].sudo().get_current_website()
if not website:
return None
if request.uid and (request.uid != website.user_id.id):
return None
auth_paths = (
request.env["website.auth.url"]
.sudo()
.search(
[
("website_id", "=", website.id),
]
)
.mapped("path")
)
path = request.httprequest.path
for auth_path in auth_paths:
if auth_path == path or Path(auth_path) in Path(path).parents:
redirect_path = "/web/login?redirect=%s" % path
return request.redirect(redirect_path, code=302)