From 3f4bd440757f5f599b6dbc451eb19d84458395a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 2 Sep 2019 16:05:05 +0000 Subject: [PATCH] [FIX] website_slides: do not allow fullscreen to bypass ACLs Currently fullscreen takes all information from categorized slides to display its menu. In order to avoid calls to server some information is prepared in DOM to speedup loading. It means slide information is available even when not being member of a course which leads to some content leak. This commit fixes that by correctly checking that a slide can be accessed before allowing to have access to its information and embedded code. Access of a slide is either member of a course, either course publisher. Task 2058595 (eLearning v13 testing) Task 2064112 (fullscreen bug report) --- .../src/js/slides_course_fullscreen_player.js | 12 ++++++----- .../views/website_slides_templates_lesson.xml | 20 +++++++++++++----- ...ite_slides_templates_lesson_fullscreen.xml | 21 ++++++++++++++++--- 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/addons/website_slides/static/src/js/slides_course_fullscreen_player.js b/addons/website_slides/static/src/js/slides_course_fullscreen_player.js index 47e5700da31..250e78e3421 100644 --- a/addons/website_slides/static/src/js/slides_course_fullscreen_player.js +++ b/addons/website_slides/static/src/js/slides_course_fullscreen_player.js @@ -257,10 +257,12 @@ odoo.define('website_slides.fullscreen', function (require) { _onClickTab: function (ev) { ev.stopPropagation(); var $elem = $(ev.currentTarget); - var isQuiz = $elem.data('isQuiz'); - var slideID = parseInt($elem.data('id')); - var slide = findSlide(this.slideEntries, {id: slideID, isQuiz: isQuiz}); - this.set('slideEntry', slide); + if ($elem.data('canAccess') === 'True') { + var isQuiz = $elem.data('isQuiz'); + var slideID = parseInt($elem.data('id')); + var slide = findSlide(this.slideEntries, {id: slideID, isQuiz: isQuiz}); + this.set('slideEntry', slide); + } }, /** * Actively changes the active tab in the sidebar so that it corresponds @@ -710,7 +712,7 @@ odoo.define('website_slides.fullscreen', function (require) { * Creates slides objects from every slide-list-cells attributes */ _getSlides: function (){ - var $slides = this.$('.o_wslides_fs_sidebar_list_item'); + var $slides = this.$('.o_wslides_fs_sidebar_list_item[data-can-access="True"]'); var slideList = []; $slides.each(function () { var slideData = $(this).data(); diff --git a/addons/website_slides/views/website_slides_templates_lesson.xml b/addons/website_slides/views/website_slides_templates_lesson.xml index 9f567b5cc29..2f69d729d8b 100644 --- a/addons/website_slides/views/website_slides_templates_lesson.xml +++ b/addons/website_slides/views/website_slides_templates_lesson.xml @@ -137,10 +137,13 @@