summaryrefslogtreecommitdiff
path: root/addons/web/models/ir_http.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/web/models/ir_http.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/web/models/ir_http.py')
-rw-r--r--addons/web/models/ir_http.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/addons/web/models/ir_http.py b/addons/web/models/ir_http.py
new file mode 100644
index 00000000..bb00603e
--- /dev/null
+++ b/addons/web/models/ir_http.py
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+import hashlib
+import json
+
+from odoo import api, models
+from odoo.http import request
+from odoo.tools import ustr
+
+from odoo.addons.web.controllers.main import module_boot, HomeStaticTemplateHelpers
+
+import odoo
+
+
+class Http(models.AbstractModel):
+ _inherit = 'ir.http'
+
+ def webclient_rendering_context(self):
+ return {
+ 'menu_data': request.env['ir.ui.menu'].load_menus(request.session.debug),
+ 'session_info': self.session_info(),
+ }
+
+ def session_info(self):
+ user = request.env.user
+ version_info = odoo.service.common.exp_version()
+
+ user_context = request.session.get_context() if request.session.uid else {}
+ IrConfigSudo = self.env['ir.config_parameter'].sudo()
+ max_file_upload_size = int(IrConfigSudo.get_param(
+ 'web.max_file_upload_size',
+ default=128 * 1024 * 1024, # 128MiB
+ ))
+
+ session_info = {
+ "uid": request.session.uid,
+ "is_system": user._is_system() if request.session.uid else False,
+ "is_admin": user._is_admin() if request.session.uid else False,
+ "user_context": request.session.get_context() if request.session.uid else {},
+ "db": request.session.db,
+ "server_version": version_info.get('server_version'),
+ "server_version_info": version_info.get('server_version_info'),
+ "name": user.name,
+ "username": user.login,
+ "partner_display_name": user.partner_id.display_name,
+ "company_id": user.company_id.id if request.session.uid else None, # YTI TODO: Remove this from the user context
+ "partner_id": user.partner_id.id if request.session.uid and user.partner_id else None,
+ "web.base.url": IrConfigSudo.get_param('web.base.url', default=''),
+ "active_ids_limit": int(IrConfigSudo.get_param('web.active_ids_limit', default='20000')),
+ "max_file_upload_size": max_file_upload_size,
+ }
+ if self.env.user.has_group('base.group_user'):
+ # the following is only useful in the context of a webclient bootstrapping
+ # but is still included in some other calls (e.g. '/web/session/authenticate')
+ # to avoid access errors and unnecessary information, it is only included for users
+ # with access to the backend ('internal'-type users)
+ mods = module_boot()
+ qweb_checksum = HomeStaticTemplateHelpers.get_qweb_templates_checksum(addons=mods, debug=request.session.debug)
+ lang = user_context.get("lang")
+ translation_hash = request.env['ir.translation'].get_web_translations_hash(mods, lang)
+ menu_json_utf8 = json.dumps(request.env['ir.ui.menu'].load_menus(request.session.debug), default=ustr, sort_keys=True).encode()
+ cache_hashes = {
+ "load_menus": hashlib.sha512(menu_json_utf8).hexdigest()[:64], # sha512/256
+ "qweb": qweb_checksum,
+ "translations": translation_hash,
+ }
+ session_info.update({
+ # current_company should be default_company
+ "user_companies": {'current_company': (user.company_id.id, user.company_id.name), 'allowed_companies': [(comp.id, comp.name) for comp in user.company_ids]},
+ "currencies": self.get_currencies(),
+ "show_effect": True,
+ "display_switch_company_menu": user.has_group('base.group_multi_company') and len(user.company_ids) > 1,
+ "cache_hashes": cache_hashes,
+ })
+ return session_info
+
+ @api.model
+ def get_frontend_session_info(self):
+ session_info = {
+ 'is_admin': request.session.uid and self.env.user._is_admin() or False,
+ 'is_system': request.session.uid and self.env.user._is_system() or False,
+ 'is_website_user': request.session.uid and self.env.user._is_public() or False,
+ 'user_id': request.session.uid and self.env.user.id or False,
+ 'is_frontend': True,
+ }
+ if request.session.uid:
+ version_info = odoo.service.common.exp_version()
+ session_info.update({
+ 'server_version': version_info.get('server_version'),
+ 'server_version_info': version_info.get('server_version_info')
+ })
+ return session_info
+
+ def get_currencies(self):
+ Currency = request.env['res.currency']
+ currencies = Currency.search([]).read(['symbol', 'position', 'decimal_places'])
+ return {c['id']: {'symbol': c['symbol'], 'position': c['position'], 'digits': [69,c['decimal_places']]} for c in currencies}