46 lines
1.2 KiB
Ruby
46 lines
1.2 KiB
Ruby
require 'sinatra'
|
|
|
|
set :bind, '127.0.0.1'
|
|
set :port, '35257'
|
|
|
|
USERS = { 'christoffermadsen' => 'lolol' }
|
|
FILENAME_GENERATOR = lambda {rand(36**6).to_s(36)}
|
|
|
|
|
|
post '/upload' do
|
|
user = params['user']
|
|
pass = params['pass']
|
|
device_id = params['device_id']
|
|
|
|
puts "Receiving data from user #{user} on device #{device_id}"
|
|
puts "Authenticating with passphrase \"#{pass}\" on device #{device_id}"
|
|
|
|
unless pass == USERS[user]
|
|
return 401
|
|
end
|
|
|
|
puts "Authentication successful for user #{user} on device #{device_id}"
|
|
|
|
# Prefer filename sent with the request
|
|
impure_filename = (request['filename'] || FILENAME_GENERATOR.call) << ".png"
|
|
filename = sanitize_filename(impure_filename)
|
|
|
|
puts ENV['HOME']
|
|
File.open "#{ENV['HOME']}/public_html/screenshots/#{filename}", 'w+' do |f|
|
|
f << request['imagedata'][:tempfile].read
|
|
end
|
|
|
|
File.open "uploads.log", 'a+' do |log|
|
|
log << filename
|
|
end
|
|
|
|
return [200, filename]
|
|
end
|
|
|
|
def sanitize_filename(filename)
|
|
# https://stackoverflow.com/questions/1939333/how-to-make-a-ruby-string-safe-for-a-filesystem#
|
|
fn = filename.split /(?<=.)\.(?=[^.])(?!.*\.[^.])/m
|
|
fn.map! { |s| s.gsub /[^a-z0-9\-]+/i, '_' }
|
|
return fn.join '.'
|
|
end
|