blob: 5b74c22b27a644192cd28e2d4dde85ddbad4c620 [file] [log] [blame]
#!/usr/bin/env ruby
PAGETITLE = "ASF Upload file service" # Wvisible:members upload
$LOAD_PATH.unshift '/srv/whimsy/lib'
require 'wunderbar'
require 'wunderbar/bootstrap'
require 'whimsy/asf'
require 'whimsy/asf/rack' # Ensures server auth is passed thru; provides ASF::Auth module
_html do
_body? do
_whimsy_body(
title: PAGETITLE,
helpblock: -> {
_p do
_ 'Upload a new file to SVN using your credentials'
_br
_ 'The file will have the same name in SVN, so rename it locally first if necessary'
end
}
) do
_whimsy_panel('Upload a new file to SVN', style: 'panel-success') do
_form.form_horizontal method: 'post', enctype: "multipart/form-data" do
_div.form_group do
_label.control_label.col_sm_2 'SVN path', for: 'url'
_div.col_sm_10 do
_input.form_control.name name: 'url', required: true, placeholder: 'SVN URL path to parent directory'
end
end
_div.form_group do
_label.control_label.col_sm_2 'Source file', for: 'source'
_div.col_sm_10 do
_input.form_control.name name: 'source', required: true, type: 'file'
end
end
_div.form_group do
_label.control_label.col_sm_2 'Message', for: 'msg'
_div.col_sm_10 do
_input.form_control.name name: 'msg', required: false, placeholder: 'commit message; will be prefixed by: Uploaded by Whimsy'
end
end
_div.form_group do
_div.col_sm_offset_2.col_sm_10 do
_input.btn.btn_default type: 'submit', value: 'Upload'
end
end
end
end
_div.well.well_lg do
if _.post?
if @url !~ %r{^https://(dist|svn)\.apache\.org/\S+$}
raise ArgumentError.new("Invalid SVN URL!")
end
msg = "Uploaded by Whimsy: #{@msg}"
# The source is StringIO for smaller files, Tempfile for larger ones
# The cutoff seems to be somewhere between 18k and 27k
if @source.instance_of? Tempfile
data = @source
else
data = @source.read
end
name = @source.original_filename.gsub(/[^-.\w]/, '_').sub(/^\.+/, '_')
ASF::Auth.decode(env = {})
# data can either be a string or a Tempfile
if ASF::SVN.create_(@url, name, data, msg, env, _) == 0
_p "Successfully added #{name} to #{@url} !"
else
_p "File #{name} already exists at #{@url} ?"
end
end
end
end
end
end