[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:
Benoit Socias
2023-02-16 09:01:07 +01:00
parent c29d59e41f
commit fb9efde4f3
9 changed files with 21 additions and 25 deletions
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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==')
+9 -3
View File
@@ -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:
+2 -7
View File
@@ -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')
-4
View File
@@ -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
+2 -3
View File
@@ -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'
+2 -2
View File
@@ -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
+1 -2
View File
@@ -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
+1
View File
@@ -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
)