# -*- coding: utf-8 -*- import odoo import odoo.modules.registry from odoo.tools.translate import _ from odoo.exceptions import AccessError from odoo.addons.web.controllers.home import Home, SIGN_UP_REQUEST_PARAMS from odoo.addons.web.controllers.utils import ensure_db, is_user_internal from odoo import http from odoo.http import request from odoo.modules import get_resource_path from odoo.tools.mimetypes import guess_mimetype from odoo.tools import file_open, file_path, replace_exceptions try: from werkzeug.utils import send_file except ImportError: from odoo.tools._vendor.send_file import send_file import json import base64 import functools import io import os import logging _logger = logging.getLogger(__name__) BASE_PATH = os.path.dirname(os.path.dirname(__file__)) class AwesomeHome(Home): ''' inherit home to extend web.login style ''' @http.route([ '/web/binary/company_small_logo', '/logo_small', '/logo_small.png', ], type='http', auth="none", cors="*") def company_logo(self, dbname=None, **kw): imgname = 'logo' imgext = '.png' dbname = request.db uid = (request.session.uid if dbname else None) or odoo.SUPERUSER_ID if not dbname: response = http.Stream.from_path(file_path('web/static/img/logo.png')).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], response_class=Response, ) else: response = http.Stream.from_path(file_path('web/static/img/nologo.png')).get_response() except Exception: response = http.Stream.from_path(file_path(f'web/static/img/{imgname}{imgext}')).get_response() return response