diff --git a/Gemfile b/Gemfile index 98b8bf3..e4aeb89 100644 --- a/Gemfile +++ b/Gemfile @@ -4,3 +4,5 @@ gem "rack" gem "sinatra" gem "sequel" gem "anybase" +gem "aws-s3" + diff --git a/lib/shortenurl.rb b/lib/shortenurl.rb index 36b6a1b..f6f434e 100755 --- a/lib/shortenurl.rb +++ b/lib/shortenurl.rb @@ -7,6 +7,7 @@ class ShortenUrl < Sequel::Model primary_key :id String :key String :url + Boolean :image Time :time end create_table @@ -23,7 +24,7 @@ class ShortenUrl < Sequel::Model "#{Shorten.base_url}#{self.key.to_s}" end - def self.create_url(link) + def self.create_url(link, image = false) uri = URI::parse(link) raise "Invalid URL" unless uri.kind_of? URI::HTTP or uri.kind_of? URI::HTTPS @@ -38,7 +39,7 @@ class ShortenUrl < Sequel::Model key_check = self.filter(:url => key).first end - url = self.new(:url => link, :key => key) + url = self.new(:url => link, :key => key, :image => image) url.save end diff --git a/main.rb b/main.rb index a7de0bc..2ac2b82 100755 --- a/main.rb +++ b/main.rb @@ -10,7 +10,7 @@ configure do require 'ostruct' Shorten = OpenStruct.new( - :base_url => "http://➼.ws/", + :base_url => ENV['url'], :service_name => "➼.ws", :button_text => "➼", :path_size => 4 @@ -91,14 +91,65 @@ end post '/' do validate_link params[:url] - url = ShortenUrl.create_url(params[:url]) + url = ShortenUrl.create_url(params[:url], params[:image]) - erb :finished, :locals => { :url => url, :type => "finished" } + erb :finished, :locals => { :url => url, :type => "finished", :image => params[:image] } end -get '/:short' do - url = ShortenUrl.find(:key => params[:short]) - - halt 404, "Page not found" unless url - redirect url.url +get '/upload' do + + erb :upload + end + +post '/upload' do + require 'aws/s3' + + # establish connection + AWS::S3::Base.establish_connection!( + :access_key_id => ENV['s3_key'], + :secret_access_key => ENV['s3_secret'] + ) + + # generate key and check uniqueness + key = Anybase::Base62.random(Shorten.path_size) + key_check = ShortenUrl.filter(:url => key).first + + while key_check + key = Anybase::Base62.random(Shorten.path_size) + key_check = ShortenUrl.filter(:url => key).first + end + + # merge key and extension + ext = File.extname(params[:file][:filename]) + filename = key + ext + #filename = params[:file][:filename] + + # upload to S3 + AWS::S3::S3Object.store(filename, open(params[:file][:tempfile]), 'shorten', :access => :public_read) + object_url = AWS::S3::S3Object.url_for(filename, 'shorten', :authenticated => false) + + # generate shorturl + url = ShortenUrl.new(:url => object_url, :key => key, :image => params[:image]) + url.save + #url = ShortenUrl.create_url(object_url, params[:image]) + + erb :finished, :locals => { :url => url, :type => "finished", :image => params[:image] } +end + +get '/:short' do + + url = ShortenUrl.find(:key => params[:short]) + + halt 404, "Page not found" unless url + + if url.image == true + erb :image, :locals => {:url => url.url} + else + redirect url.url + end + +end + + + diff --git a/views/finished.erb b/views/finished.erb index be83cbb..356d265 100755 --- a/views/finished.erb +++ b/views/finished.erb @@ -1,3 +1,13 @@
Redirects to <%= url.url %>
+ \ No newline at end of file +Email Link -- Tweet Link + + + +<% if image then %> +Check image embedding below:
+Shorten URL -- Upload File
<% formtext = "Type URL. Press Enter." %> diff --git a/views/upload.erb b/views/upload.erb new file mode 100755 index 0000000..7ba9069 --- /dev/null +++ b/views/upload.erb @@ -0,0 +1,6 @@ +Shorten URL -- Upload File
+