4 changed files with 46 additions and 1 deletions
@ -0,0 +1,37 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
|
||||
|
import odoo |
||||
|
from odoo.addons.web.controllers.session import Session |
||||
|
from odoo import http |
||||
|
from odoo.exceptions import AccessError |
||||
|
from odoo.http import request |
||||
|
|
||||
|
|
||||
|
class AccessRestrict(Session): |
||||
|
|
||||
|
@http.route() |
||||
|
def authenticate(self, db, login, password, base_location=None): |
||||
|
if not http.db_filter([db]): |
||||
|
raise AccessError("Database not found.") |
||||
|
pre_uid = request.session.authenticate(db, login, password) |
||||
|
ip_address = request.httprequest.environ['REMOTE_ADDR'] |
||||
|
user = request.env['res.users'].sudo().browse(pre_uid).exists() |
||||
|
if user and user.allowed_ip_ids: |
||||
|
ip_list = set(user.allowed_ip_ids.mapped('ip_address')) |
||||
|
if ip_address not in ip_list: |
||||
|
raise AccessError("Not allowed to login from this IP") |
||||
|
if pre_uid != request.session.uid: |
||||
|
return {'uid': None} |
||||
|
request.session.db = db |
||||
|
registry = odoo.modules.registry.Registry(db) |
||||
|
with registry.cursor() as cr: |
||||
|
env = odoo.api.Environment(cr, request.session.uid, request.session.context) |
||||
|
if not request.db: |
||||
|
# request._save_session would not update the session_token |
||||
|
# as it lacks an environment, rotating the session myself |
||||
|
http.root.session_store.rotate(request.session, env) |
||||
|
request.future_response.set_cookie( |
||||
|
'session_id', request.session.sid, |
||||
|
max_age=http.SESSION_LIFETIME, httponly=True |
||||
|
) |
||||
|
return env['ir.http'].session_info() |
Loading…
Reference in new issue