Skip to content
Snippets Groups Projects
Commit e9e18641 authored by Benoit Socias's avatar Benoit Socias Committed by qsm-odoo
Browse files

[FIX] web_editor: decode base64 of uploaded non-image documents

Since [1] non-image documents uploaded in web editor were stored as
received in base64 without being decoded.
This led to downloading them as they were stored in base64.

After this commit uploaded documents are base64-decoded before being
stored.

Steps to reproduce:
- edit a web page
- drop a "Text - Image" snippet
- replace the image
- upload a document (PDF, TXT...)
- save page
- download document
=> received document was base64-encoded

[1]: https://github.com/odoo/odoo/commit/6b8752604898bf2b583b7f5334e35f6a1583595e



task-2782269

closes odoo/odoo#86812

X-original-commit: b0218b8ff50c7cea2a018d20a62e63510bfdd01e
Signed-off-by: default avatarQuentin Smetz (qsm) <qsm@odoo.com>
parent e55ec3c8
No related branches found
No related tags found
No related merge requests found
......@@ -199,10 +199,11 @@ class Web_Editor(http.Controller):
@http.route('/web_editor/attachment/add_data', type='json', auth='user', methods=['POST'], website=True)
def add_data(self, name, data, is_image, quality=0, width=0, height=0, res_id=False, res_model='ir.ui.view', **kwargs):
data = b64decode(data)
if is_image:
format_error_msg = _("Uploaded image's format is not supported. Try with: %s", ', '.join(SUPPORTED_IMAGE_EXTENSIONS))
try:
data = tools.image_process(b64decode(data), size=(width, height), quality=quality, verify_resolution=True)
data = tools.image_process(data, size=(width, height), quality=quality, verify_resolution=True)
mimetype = guess_mimetype(data)
if mimetype not in SUPPORTED_IMAGE_MIMETYPES:
return {'error': format_error_msg}
......
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import test_controller
from . import test_converter
from . import test_odoo_editor
from . import test_views
......
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tools.json import scriptsafe as json_safe
import odoo.tests
from odoo.tests.common import HttpCase
@odoo.tests.tagged('-at_install', 'post_install')
class TestController(HttpCase):
def test_01_upload_document(self):
self.authenticate('admin', 'admin')
# Upload document.
response = self.url_open(
'/web_editor/attachment/add_data',
headers={'Content-Type': 'application/json'},
data=json_safe.dumps({'params': {
'name': 'test.txt',
'data': 'SGVsbG8gd29ybGQ=', # base64 Hello world
'is_image': False,
}})
).json()
self.assertFalse('error' in response, 'Upload failed: %s' % response.get('error', {}).get('message'))
attachment_id = response['result']['id']
checksum = response['result']['checksum']
# Download document and check content.
response = self.url_open(
'/web/content/%s?unique=%s&download=true' % (attachment_id, checksum)
)
self.assertEqual(200, response.status_code, 'Expect response')
self.assertEqual(b'Hello world', response.content, 'Expect raw content')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment