Skip to content

Commit ce9fbf8

Browse files
committed
Attempt to improve markdown rendering
* allow more unsafe HTML on admin-controlled files * be aggressive with filtering links and text in user bios
1 parent 324a852 commit ce9fbf8

File tree

6 files changed

+43
-11
lines changed

6 files changed

+43
-11
lines changed

app/assets/stylesheets/application.css

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,12 @@
1616
*= require osem-dashboard
1717
*= require osem-splash
1818
*= require osem-fonts
19-
*= require bootstrap-markdown
20-
*= require bootstrap-datetimepicker
2119
*= require leaflet
2220
*= require bootstrap3-switch
2321
*= require osem-payments
2422
*= require osem-navbar
2523
*= require selectize
2624
*= require selectize.bootstrap3
27-
*= require bootstrap-select
2825
*= require conferences
2926
3027
*= require fullcalendar-scheduler/main.css

app/controllers/users_controller.rb

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,18 @@ class UsersController < ApplicationController
77

88
# GET /users/1
99
def show
10-
@events = @user.events.where(state: :confirmed)
10+
all_user_events = @user.events
11+
@events = all_user_events.where(state: :confirmed)
12+
13+
# Minimize info shown unless a user has submitted at least one proposal
14+
# To be safe, we don't delete data, just hide it in a hacky way.
15+
# Unset the email so a picture from gravatar won't be shown
16+
unless all_user_events.any?
17+
@user.picture = nil
18+
@user.email = nil
19+
@user.name = @user.name.length > 15 ? @user.name[0, 15] + '…' : @user.name
20+
@user.biography = ''
21+
end
1122
end
1223

1324
# GET /users/1/edit

app/helpers/format_helper.rb

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,26 +158,50 @@ def selected_scheduled?(schedule)
158158
schedule == @selected_schedule ? 'Yes' : 'No'
159159
end
160160

161+
# Used for user bios and high-spam places
162+
def restricted_markdown(text, truncate: 2000)
163+
return '' if text.nil?
164+
165+
markdown_options = {
166+
autolink: false,
167+
space_after_headers: true,
168+
no_intra_emphasis: false, # SNAPCON
169+
fenced_code_blocks: true,
170+
disable_indented_code_blocks: true,
171+
}
172+
render_options = {
173+
filter_html: true,
174+
no_images: true,
175+
no_links: true,
176+
escape_html: false,
177+
safe_links_only: true
178+
}
179+
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(render_options), markdown_options)
180+
truncate(sanitize(markdown.render(text), remove_elements: %w[a]), length: truncate)
181+
end
182+
161183
def markdown(text, escape_html = true)
162184
return '' if text.nil?
163185

164186
markdown_options = {
165187
autolink: true,
166188
space_after_headers: true,
167-
# no_intra_emphasis: true, # SNAPCON
189+
no_intra_emphasis: false, # SNAPCON
168190
fenced_code_blocks: true,
169191
disable_indented_code_blocks: true,
192+
lax_spacing: true, # SNAPCON
170193
tables: true, # SNAPCON
171194
strikethrough: true, # SNAPCON
172195
footnotes: true, # SNAPCON
173-
superscript: true # SNAPCON
196+
superscript: true # SNAPCON
174197
}
175198
render_options = {
199+
filter_html: escape_html,
176200
escape_html: escape_html,
177-
safe_links_only: true
201+
safe_links_only: false,
178202
}
179203
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(render_options), markdown_options)
180-
rendered = sanitize(markdown.render(text))
204+
rendered = markdown.render(text)
181205
escape_html ? sanitize(rendered, scrubber: Loofah::Scrubbers::NoFollow.new) : rendered.html_safe
182206
end
183207

app/views/admin/events/_proposal.html.haml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@
117117
- unless speaker.biography.blank?
118118
%b
119119
= speaker.name
120-
= markdown(speaker.biography)
120+
= restricted_markdown(speaker.biography)
121121
%tr
122122
%td
123123
%b Submitted on

app/views/admin/users/show.html.haml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
= show_roles(@user.get_roles)
2828
- elsif attr == 'biography'
2929
%td
30-
= markdown(@user.biography)
30+
= restricted_markdown(@user.biography)
3131
- elsif attr == 'profile_picture'
3232
%td
3333
= image_tag @user.profile_picture(size: '100'), alt: ''

app/views/users/show.html.haml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
%small
99
= @user.nickname
1010
%p
11-
= markdown(@user.biography)
11+
= restricted_markdown(@user.biography)
1212
.row
1313
.col-md-12
1414
- if @user.presented_events.confirmed.any?

0 commit comments

Comments
 (0)