[FIX] *: replace werkzeug's Response by odoo's Response
*: base, http_routing, mass_mailing, web, web_editor, website_slides In some situations `werkzeug.wrappers.Response` are used instead of `odoo.http.Reponse` that extends it. This is a problem because since [1] the calls to `set_cookie` expect it to accept the `cookie_type` parameter, which is not the case in the base werkzeug implementation. This commit replaces the `werkzeug.wrappers.Response` by `odoo.http.Response`. [1]: https://github.com/odoo/odoo/commit/2cbda6c98ee947cea1d06c09880eee8c758304a8 closes odoo/odoo#112827 X-original-commit: 28da08292b7028575e628c5ad846fc05d30498f2 Signed-off-by: Julien Castiaux (juc) <juc@odoo.com>
This commit is contained in:
@@ -23,7 +23,7 @@ from odoo import api, models, exceptions, tools, http
|
||||
from odoo.addons.base.models import ir_http
|
||||
from odoo.addons.base.models.ir_http import RequestUID
|
||||
from odoo.addons.base.models.ir_qweb import QWebException
|
||||
from odoo.http import request
|
||||
from odoo.http import request, Response
|
||||
from odoo.osv import expression
|
||||
from odoo.tools import config, ustr, pycompat
|
||||
|
||||
@@ -656,7 +656,7 @@ class IrHttp(models.AbstractModel):
|
||||
except Exception:
|
||||
code, html = 418, request.env['ir.ui.view']._render_template('http_routing.http_error', values)
|
||||
|
||||
response = werkzeug.wrappers.Response(html, status=code, content_type='text/html;charset=utf-8')
|
||||
response = Response(html, status=code, content_type='text/html;charset=utf-8')
|
||||
cls._post_dispatch(response)
|
||||
return response
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import base64
|
||||
import werkzeug
|
||||
|
||||
from odoo import _, exceptions, http, tools
|
||||
from odoo.http import request
|
||||
from odoo.http import request, Response
|
||||
from odoo.tools import consteq
|
||||
|
||||
from markupsafe import Markup, escape
|
||||
@@ -123,7 +123,7 @@ class MassMailController(http.Controller):
|
||||
raise BadRequest()
|
||||
|
||||
request.env['mailing.trace'].sudo().set_opened(domain=[('mail_mail_id_int', 'in', [mail_id])])
|
||||
response = werkzeug.wrappers.Response()
|
||||
response = Response()
|
||||
response.mimetype = 'image/gif'
|
||||
response.data = base64.b64decode(b'R0lGODlhAQABAIAAANvf7wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==')
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ import odoo
|
||||
import odoo.modules.registry
|
||||
from odoo import http, _
|
||||
from odoo.exceptions import AccessError, UserError
|
||||
from odoo.http import request
|
||||
from odoo.http import request, Response
|
||||
from odoo.modules import get_resource_path
|
||||
from odoo.tools import file_open, file_path, replace_exceptions
|
||||
from odoo.tools.mimetypes import guess_mimetype
|
||||
@@ -241,8 +241,14 @@ class Binary(http.Controller):
|
||||
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 = 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(placeholder('nologo.png')).get_response()
|
||||
except Exception:
|
||||
|
||||
@@ -6,17 +6,12 @@ import os
|
||||
import re
|
||||
import tempfile
|
||||
|
||||
import werkzeug
|
||||
import werkzeug.exceptions
|
||||
import werkzeug.utils
|
||||
import werkzeug.wrappers
|
||||
import werkzeug.wsgi
|
||||
from lxml import html
|
||||
|
||||
import odoo
|
||||
import odoo.modules.registry
|
||||
from odoo import http
|
||||
from odoo.http import content_disposition, dispatch_rpc, request
|
||||
from odoo.http import content_disposition, dispatch_rpc, request, Response
|
||||
from odoo.service import db
|
||||
from odoo.tools.misc import file_open, str2bool
|
||||
from odoo.tools.translate import _
|
||||
@@ -138,7 +133,7 @@ class Database(http.Controller):
|
||||
('Content-Disposition', content_disposition(filename)),
|
||||
]
|
||||
dump_stream = odoo.service.db.dump_db(name, None, backup_format)
|
||||
response = werkzeug.wrappers.Response(dump_stream, headers=headers, direct_passthrough=True)
|
||||
response = Response(dump_stream, headers=headers, direct_passthrough=True)
|
||||
return response
|
||||
except Exception as e:
|
||||
_logger.exception('Database.backup')
|
||||
|
||||
@@ -3,11 +3,7 @@
|
||||
import json
|
||||
import logging
|
||||
|
||||
import werkzeug
|
||||
import werkzeug.exceptions
|
||||
import werkzeug.utils
|
||||
import werkzeug.wrappers
|
||||
import werkzeug.wsgi
|
||||
from werkzeug.urls import url_parse
|
||||
|
||||
from odoo import http
|
||||
|
||||
@@ -9,13 +9,12 @@ import requests
|
||||
import uuid
|
||||
import werkzeug.exceptions
|
||||
import werkzeug.urls
|
||||
import werkzeug.wrappers
|
||||
from PIL import Image, ImageFont, ImageDraw
|
||||
from lxml import etree
|
||||
from base64 import b64decode, b64encode
|
||||
from datetime import datetime
|
||||
|
||||
from odoo.http import request
|
||||
from odoo.http import request, Response
|
||||
from odoo import http, tools, _, SUPERUSER_ID
|
||||
from odoo.addons.http_routing.models.ir_http import slug, unslug
|
||||
from odoo.addons.web_editor.tools import get_video_url_data
|
||||
@@ -140,7 +139,7 @@ class Web_Editor(http.Controller):
|
||||
# output image
|
||||
output = io.BytesIO()
|
||||
outimage.save(output, format="PNG")
|
||||
response = werkzeug.wrappers.Response()
|
||||
response = Response()
|
||||
response.mimetype = 'image/png'
|
||||
response.data = output.getvalue()
|
||||
response.headers['Cache-Control'] = 'public, max-age=604800'
|
||||
|
||||
@@ -15,7 +15,7 @@ from odoo.addons.website.controllers.main import QueryURL
|
||||
from odoo.addons.website.models.ir_http import sitemap_qs2dom
|
||||
from odoo.addons.website_profile.controllers.main import WebsiteProfile
|
||||
from odoo.exceptions import AccessError, ValidationError, UserError, MissingError
|
||||
from odoo.http import request
|
||||
from odoo.http import request, Response
|
||||
from odoo.osv import expression
|
||||
from odoo.tools import email_split
|
||||
|
||||
@@ -801,7 +801,7 @@ class WebsiteSlides(WebsiteProfile):
|
||||
@http.route('''/slides/slide/<model("slide.slide"):slide>/pdf_content''',
|
||||
type='http', auth="public", website=True, sitemap=False)
|
||||
def slide_get_pdf_content(self, slide):
|
||||
response = werkzeug.wrappers.Response()
|
||||
response = Response()
|
||||
response.data = slide.binary_content and base64.b64decode(slide.binary_content) or b''
|
||||
response.mimetype = 'application/pdf'
|
||||
return response
|
||||
|
||||
@@ -5,10 +5,9 @@ import xmlrpc.client
|
||||
from datetime import date, datetime
|
||||
|
||||
from markupsafe import Markup
|
||||
from werkzeug.wrappers import Response
|
||||
|
||||
import odoo
|
||||
from odoo.http import Controller, route, dispatch_rpc, request
|
||||
from odoo.http import Controller, route, dispatch_rpc, request, Response
|
||||
from odoo.fields import Date, Datetime, Command
|
||||
from odoo.tools import lazy, ustr
|
||||
from odoo.tools.misc import frozendict
|
||||
|
||||
@@ -410,6 +410,7 @@ def send_file(filepath_or_fp, mimetype=None, as_attachment=False, filename=None,
|
||||
last_modified=mtime,
|
||||
etag=add_etags,
|
||||
max_age=cache_timeout,
|
||||
response_class=Response,
|
||||
conditional=conditional
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user