diff --git a/Changelog.md b/Changelog.md index 879aaa2a62..f1c8b206f7 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,10 @@ # Changelog +## [v2.9.2] + +### 🐛 Bug fixes +- Fixed display of inline images in notebook HTML rendering (#7816) + ## [v2.9.1] ### 🛡️ Security diff --git a/app/MARKUS_VERSION b/app/MARKUS_VERSION index ab356f89df..694e4fccf4 100644 --- a/app/MARKUS_VERSION +++ b/app/MARKUS_VERSION @@ -1 +1 @@ -VERSION=v2.9.1,PATCH_LEVEL=DEV +VERSION=v2.9.2,PATCH_LEVEL=DEV diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb index 2334c5e937..7382b61717 100644 --- a/app/controllers/submissions_controller.rb +++ b/app/controllers/submissions_controller.rb @@ -19,6 +19,21 @@ class SubmissionsController < ApplicationController p.frame_src(*PERMITTED_IFRAME_SRC) end + # Support inline images in rendered notebooks + content_security_policy only: [:download_file] do |p| + file = select_file + if params[:show_in_browser] && render_as_html?(file: file) + p.img_src :self, :data + end + end + + # Support inline images in rendered notebooks + content_security_policy only: [:download] do |p| + if params[:preview] == 'true' && render_as_html?(file_type: FileHelper.get_file_type(params[:file_name])) + p.img_src :self, :data + end + end + def index respond_to do |format| format.json do @@ -482,10 +497,7 @@ def download_file return head :not_found end - nbconvert_enabled = Rails.application.config.nbconvert_enabled - rmd_convert_enabled = Rails.application.config.rmd_convert_enabled - if params[:show_in_browser] == 'true' && - ((file.is_pynb? && nbconvert_enabled) || (file.is_rmd? && rmd_convert_enabled)) + if params[:show_in_browser] == 'true' && render_as_html?(file: file) html_content file: file return end @@ -559,8 +571,6 @@ def download_file_zip def download preview = params[:preview] == 'true' - nbconvert_enabled = Rails.application.config.nbconvert_enabled - rmd_convert_enabled = Rails.application.config.rmd_convert_enabled file_type = FileHelper.get_file_type(params[:file_name]) @assignment = Assignment.find(params[:assignment_id]) # find_appropriate_grouping can be found in SubmissionsHelper @@ -575,8 +585,7 @@ def download revision_identifier = params[:revision_identifier] path = params[:path] || '/' - if ((file_type == 'jupyter-notebook' && nbconvert_enabled) \ - || (file_type == 'rmarkdown' && rmd_convert_enabled)) && preview + if preview && render_as_html?(file_type: file_type) html_content grouping: @grouping, revision_identifier: revision_identifier, file_dir: path, @@ -1065,4 +1074,18 @@ def select_file def from_codeviewer_param params[:from_codeviewer] == 'true' end + + def render_as_html?(file: nil, file_type: nil) + nbconvert_enabled = Rails.application.config.nbconvert_enabled + rmd_convert_enabled = Rails.application.config.rmd_convert_enabled + + if file.present? + (file.is_pynb? && nbconvert_enabled) || (file.is_rmd? && rmd_convert_enabled) + elsif file_type.present? + (file_type == 'jupyter-notebook' && nbconvert_enabled) \ + || (file_type == 'rmarkdown' && rmd_convert_enabled) + else + false + end + end end