diff --git a/Gemfile b/Gemfile index 7b7a97c..3225d90 100644 --- a/Gemfile +++ b/Gemfile @@ -20,6 +20,7 @@ gem 'dotenv' gem 'oauth' gem 'twitter' +gem 'tumblr_client' # Clockwork gem 'clockwork' diff --git a/Gemfile.lock b/Gemfile.lock index 296cf30..c7a44e7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -44,6 +44,8 @@ GEM i18n (~> 0.5) faraday (0.9.2) multipart-post (>= 1.2, < 3) + faraday_middleware (0.9.2) + faraday (>= 0.7.4, < 0.10) http (1.0.4) addressable (~> 2.3) http-cookie (~> 1.0) @@ -109,6 +111,13 @@ GEM tilt (~> 1.3) thread_safe (0.3.4) tilt (1.4.1) + tumblr_client (0.8.5) + faraday (~> 0.9.0) + faraday_middleware (~> 0.9.0) + json + mime-types + oauth + simple_oauth twitter (5.16.0) addressable (~> 2.3) buftok (~> 0.2.0) @@ -152,6 +161,7 @@ DEPENDENCIES simplecov sinatra sinatra-contrib + tumblr_client twitter BUNDLED WITH diff --git a/app/controllers/destinations_controller.rb b/app/controllers/destinations_controller.rb index 028b85e..8ea7e40 100644 --- a/app/controllers/destinations_controller.rb +++ b/app/controllers/destinations_controller.rb @@ -20,3 +20,18 @@ twitter_media_upload("This is something, I swear:", "https://dl.dropboxusercontent.com/s/ephkiagrqgfc0y4/IMG_8489.JPG?raw=1") redirect "/users/#{session[:user_id]}" end + +get '/tumblr-authenticate' do + get_tumblr_info +end + +get '/tumblr-callback' do + get_tumblr_access_token + store_tumblr_access_token + get_and_store_tumblr_blog_title + # redirect "/users/#{session[:user_id]}" +end + +get '/tumblr-testing' do + get_and_store_tumblr_blog_title +end \ No newline at end of file diff --git a/app/helpers/tumblr_helper.rb b/app/helpers/tumblr_helper.rb new file mode 100644 index 0000000..c8548c0 --- /dev/null +++ b/app/helpers/tumblr_helper.rb @@ -0,0 +1,4 @@ +require_relative 'tumblr_module' +helpers do + include TumblrModule +end diff --git a/app/helpers/tumblr_module.rb b/app/helpers/tumblr_module.rb new file mode 100644 index 0000000..211de1f --- /dev/null +++ b/app/helpers/tumblr_module.rb @@ -0,0 +1,81 @@ +require 'tumblr_client' +module TumblrModule + def get_tumblr_consumer + base = 'https://www.tumblr.com' + consumer = OAuth::Consumer.new(ENV['TUMBLR_KEY'], + ENV['TUMBLR_SECRET'], + { site: base, + # request_token_path: '/oauth/request_token', + # authorize_path: '/oauth/authorize', + # access_token_path: '/oauth/access_token', + # http_method: :post + } ) + end + + def get_tumblr_info + consumer = get_tumblr_consumer + request_token = consumer.get_request_token(oauth_callback: ENV['TUMBLR_CALLBACK']) + session[:tumblr_request_token] = request_token + redirect request_token.authorize_url + end + + def get_tumblr_access_token + session[:tumblr_access_token] = session[:tumblr_request_token].get_access_token(oauth_verifier: params[:oauth_verifier]) + end + + def store_tumblr_access_token + id = session[:user_id] + token = session[:tumblr_access_token].token + secret = session[:tumblr_access_token].secret + destination = Destination.find_by(user_id: id) + if destination + destination.tumblr_secret = secret + destination.tumblr_token = token + destination.save + else + Destination.create(user_id: id, tumblr_secret: secret, tumblr_token: token) + end + end + + def get_and_store_tumblr_blog_title + client = get_tumblr_client + blogs = [] + client.info["user"]["blogs"].each do |blog| + blogs << blog["url"].split('/')[2] + end + erb :blog_selection, layout: false, locals: {blogs: blogs} + end + + def store_tumblr_blog_title + + end + + def get_tumblr_client + tokens = Destination.find_by(user_id: current_user.id) + access_token = OAuth::AccessToken.new(get_consumer, tokens.tumblr_token, tokens.tumblr_secret) + + Tumblr.configure do |config| + config.consumer_key = ENV["TUMBLR_KEY"] + config.consumer_secret= ENV["TUMBLR_SECRET"] + config.oauth_token = access_token.token + config.oauth_token_secret = access_token.secret + end + + client = Tumblr::Client.new + end + + def tumblr_media_upload(status_msg, media_url, user_id = current_user.id) + tokens = Destination.find_by(user_id: user_id) + access_token = OAuth::AccessToken.new(get_consumer, tokens.tumblr_token, tokens.tumblr_secret) + + Tumblr.configure do |config| + config.consumer_key = ENV["TUMBLR_KEY"] + config.consumer_secret= ENV["TUMBLR_SECRET"] + config.oauth_token = access_token.token + config.oauth_token_secret = access_token.secret + end + + client = Tumblr::Client.new + + end +end \ No newline at end of file diff --git a/app/views/blog_selection.erb b/app/views/blog_selection.erb new file mode 100644 index 0000000..d142430 --- /dev/null +++ b/app/views/blog_selection.erb @@ -0,0 +1,9 @@ +