# Copyright 2015-2018,2020 Ivan Yelizariev # Copyright 2016 Stanislav Krotov # Copyright 2017 Ilmir Karamov # Copyright 2017 Nicolas JEUDY # Copyright 2017 Ildar Nasyrov # Copyright 2018 Kolushov Alexandr # License MIT (https://opensource.org/licenses/MIT). # License OPL-1 (https://www.odoo.com/documentation/user/14.0/legal/licenses/licenses.html#odoo-apps) for derivative work. import base64 import functools import io try: from werkzeug.utils import send_file except ImportError: from odoo.tools._vendor.send_file import send_file import odoo from odoo import http from odoo.http import request from odoo.tools.mimetypes import guess_mimetype from odoo.addons.web.controllers.binary import Binary class BinaryCustom(Binary): @http.route( ["/web/binary/company_logo", "/logo", "/logo.png"], type="http", auth="none" ) def company_logo(self, dbname=None, **kw): imgname = "logo" imgext = ".png" default_logo_module = "web_debranding" if request.session.db: default_logo_module = ( request.env["ir.config_parameter"] .sudo() .get_param("web_debranding.default_logo_module") ) placeholder = functools.partial( lambda module, *args: os.path.join( odoo.modules.module.get_module_path(module), *args ), default_logo_module, "static", "img" ) dbname = request.db uid = (request.session.uid if dbname else None) or odoo.SUPERUSER_ID if not dbname: response = http.Stream.from_path( placeholder(imgname + imgext) ).get_response() else: try: # create an empty registry registry = odoo.modules.registry.Registry(dbname) with registry.cursor() as cr: company = int(kw["company"]) if kw and kw.get("company") else False if company: cr.execute( """SELECT logo_web, write_date FROM res_company WHERE id = %s """, (company,), ) else: cr.execute( """SELECT c.logo_web, c.write_date FROM res_users u LEFT JOIN res_company c ON c.id = u.company_id WHERE u.id = %s """, (uid,), ) row = cr.fetchone() if row and row[0]: image_base64 = base64.b64decode(row[0]) image_data = io.BytesIO(image_base64) mimetype = guess_mimetype(image_base64, default="image/png") imgext = "." + mimetype.split("/")[1] if imgext == ".svg+xml": imgext = ".svg" response = send_file( image_data, request.httprequest.environ, download_name=imgname + imgext, mimetype=mimetype, last_modified=row[1], ) else: response = http.Stream.from_path( placeholder("nologo.png") ).get_response() except Exception: response = http.Stream.from_path( placeholder(imgname + imgext) ).get_response() return response