Skip to content

Commit f598aef

Browse files
committed
capture invalid markdown in override
1 parent 87fcece commit f598aef

File tree

3 files changed

+46
-10
lines changed

3 files changed

+46
-10
lines changed

app/helpers/extension_versions_helper.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,9 @@ def extension_atom_content(extension_version)
6464
#
6565
def render_document(content, extension, repo_loc = "", version = "", hard_wrap: false)
6666
document = begin
67-
if %w(md mdown markdown).include?(extension.downcase)
67+
if ExtensionVersion::MARKDOWN_EXTENSIONS.include?(extension.downcase)
6868
filter = HTML::Pipeline.new [
69+
HTML::Pipeline::PlainTextInputFilter,
6970
HTML::Pipeline::MarkdownFilter,
7071
HTML::Pipeline::AutolinkFilter,
7172
HTML::Pipeline::MentionFilter,

app/models/extension_version.rb

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
class ExtensionVersion < ApplicationRecord
22
include SeriousErrors
3+
4+
MARKDOWN_EXTENSIONS = %w(markdown mdown mkdn mkd md)
35

46
# Associations
57
# --------------------

app/workers/sync_extension_contents_at_versions_worker.rb

+42-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
class SyncExtensionContentsAtVersionsWorker < ApplicationWorker
2+
include MarkdownHelper
23

34
def logger
45
if Rails.env.production?
@@ -110,29 +111,61 @@ def check_for_overrides(version)
110111
end
111112

112113
def override_readme(version, readme_url)
114+
115+
message = []
116+
113117
begin
114118
url = URI.parse(readme_url)
115119
rescue URI::Error => error
116120
logger.info "URI error: #{readme_url} - #{error.message}"
117121
return
118122
end
123+
124+
readme_ext = File.extname(url.path).gsub(".", "")
125+
unless ExtensionVersion::MARKDOWN_EXTENSIONS.include?(readme_ext)
126+
message << "#{version.version} override readme_url is not a valid markdown file."
127+
end
128+
119129
# get file contents
120130
begin
121131
file = url.open
122132
rescue OpenURI::HTTPError => error
123133
status = error.io.status
124-
logger.info "****** file read error: #{status[0]} - #{status[1]}"
134+
message << "#{version.version} #{url.path} file read error: #{status[0]} - #{status[1]}"
135+
logger.info message.compact.join('; ')
136+
compilation_error = [version.compilation_error] + message
137+
version.update_column(:compilation_error, compilation_error.compact.join('; '))
125138
return
126139
end
127-
#readme_ext = File.extname(url.path).gsub(".", "")
128-
readme = file.read
129-
#readme = readme.encode(Encoding.find('UTF-8'), {invalid: :replace, undef: :replace, replace: ''})
130140

131-
version.update(
132-
readme: readme,
133-
readme_extension: 'html'
134-
)
135-
logger.info "OVERRIDE README: #{url.path}"
141+
readme = file.read
142+
143+
if readme.include?('!DOCTYPE html')
144+
message << "#{version.version} override readme is not valid markdown."
145+
end
146+
147+
begin
148+
filter = HTML::Pipeline.new [
149+
HTML::Pipeline::MarkdownFilter,
150+
], {gfm: true}
151+
filter.call(readme)
152+
rescue
153+
message << "#{version.version} override readme is not valid markdown."
154+
end
155+
156+
if message.present?
157+
compilation_error = [version.compilation_error] + message
158+
version.update_column(:compilation_error, compilation_error.compact.join('; '))
159+
else
160+
161+
readme = readme.encode(Encoding.find('UTF-8'), {invalid: :replace, undef: :replace, replace: ''})
162+
163+
version.update(
164+
readme: readme,
165+
readme_extension: readme_ext
166+
)
167+
logger.info "OVERRIDE README: #{url.path}"
168+
end
136169
end
137170

138171
def extract_readme_file_extension(filename)

0 commit comments

Comments
 (0)