diff --git a/app/api.rb b/app/api.rb
index 71b17233..f476003b 100644
--- a/app/api.rb
+++ b/app/api.rb
@@ -106,6 +106,7 @@ post '/api/upload' do
end
files.each do |file|
+ file[:filename] = Rack::Utils.unescape file[:filename]
if !current_site.okay_to_upload?(file)
api_error 400, 'invalid_file_type', "#{file[:filename]} is not an allowed file type for free sites, supporter required"
end
diff --git a/models/site.rb b/models/site.rb
index babe693b..5d7af285 100644
--- a/models/site.rb
+++ b/models/site.rb
@@ -1428,6 +1428,10 @@ class Site < Sequel::Model
'https'
end
+ def self.escape_path(val)
+ Rack::Utils.escape_path(val).gsub('?', '%3F')
+ end
+
def uri(path=nil)
uri = "#{default_schema}://#{host}"
@@ -1437,7 +1441,7 @@ class Site < Sequel::Model
path = path.sub(%r{^/}, '').sub(%r{/index\.html$}, '/').sub(/\.html$/, '')
unless path.empty?
- escaped_path = Rack::Utils.escape_path(path).gsub('?', '%3F')
+ escaped_path = self.class.escape_path path
uri += "/#{escaped_path}"
end
diff --git a/views/site_files/text_editor.erb b/views/site_files/text_editor.erb
index 39582abb..94d34f16 100644
--- a/views/site_files/text_editor.erb
+++ b/views/site_files/text_editor.erb
@@ -89,7 +89,7 @@
Save
- View
+ View
'> Share<% if current_site.supporter? %> Penelope (beta)<% end %>
@@ -162,9 +162,9 @@
var formData = new FormData();
var fileContent = editor.getValue();
- formData.append('<%= escape_javascript @filename %>', new File([fileContent], '<%= escape_javascript @filename %>', { type: 'text/html' }));
- formData.append('csrf_token', '<%= escape_javascript csrf_token %>');
- formData.append('username', '<%= escape_javascript current_site.username %>');
+ formData.append('<%== escape_javascript @filename %>', new File([fileContent], '<%== escape_javascript @filename %>', { type: 'text/html' }));
+ formData.append('csrf_token', '<%== escape_javascript csrf_token %>');
+ formData.append('username', '<%== escape_javascript current_site.username %>');
$.ajax({
url: '/api/upload',
@@ -219,7 +219,7 @@
$(document).ready(function() {
$.ajax({
- url: "/site_files/download/<%= Rack::Utils.escape(@filename) %>",
+ url: "/site_files/download/<%= Site.escape_path(@filename) %>",
cache: false,
success: function(resp) {
editor = ace.edit("editor")