Skip to content

Instantly share code, notes, and snippets.

@DGaffney
Last active February 28, 2019 02:44
Show Gist options
  • Save DGaffney/0d67ec848bd6ced913a3fe6749e366fd to your computer and use it in GitHub Desktop.
Save DGaffney/0d67ec848bd6ced913a3fe6749e366fd to your computer and use it in GitHub Desktop.
oauth_dance_mini_site.rb
source 'https://rubygems.org'
gem 'pry'
gem 'sinatra'
gem 'twitter'
gem 'oauth'
require 'pry'
require 'sinatra'
require 'twitter'
require 'oauth'
require 'json'
CONSUMER_KEY = nil
CONSUMER_SECRET = nil
helpers do
include Rack::Utils
alias_method :h, :escape_html
end
configure do
use Rack::Session::Cookie, :secret => Digest::SHA1.hexdigest(rand.to_s)
KEY = CONSUMER_KEY
SECRET = CONSUMER_SECRET
end
before do
if session[:access_token]
Twitter.configure do |config|
config.consumer_key = CONSUMER_KEY
config.consumer_secret = CONSUMER_SECRET
config.oauth_token = session[:access_token]
config.oauth_token_secret = session[:access_token_secret]
end
@twitter = Twitter::Client.new
else
@twitter = nil
end
end
def base_url
default_port = (request.scheme == "http") ? 80 : 443
port = (request.port == default_port) ? "" : ":#{request.port.to_s}"
"#{request.scheme}://#{request.host}#{port}"
end
def oauth_consumer
OAuth::Consumer.new(KEY, SECRET, :site => "https://api.twitter.com")
end
get '/request_token' do
#DONT FORGET - the callback_url needs to be added to the app's registration page otherwise this will return a 403 forbidden.
callback_url = "#{base_url}/access_token"
request_token = oauth_consumer.get_request_token(:oauth_callback => callback_url)
session[:request_token] = request_token.token
session[:request_token_secret] = request_token.secret
redirect request_token.authorize_url
end
get '/access_token' do
request_token = OAuth::RequestToken.new(
oauth_consumer, session[:request_token], session[:request_token_secret])
begin
@access_token = request_token.get_access_token(
{},
:oauth_token => params[:oauth_token],
:oauth_verifier => params[:oauth_verifier])
rescue OAuth::Unauthorized => @exception
return erb %{ oauth failed: <%=h @exception.message %> }
end
session[:access_token] = @access_token.token
session[:access_token_secret] = @access_token.secret
`echo #{{access_token: @access_token.token, access_secret: @access_token.secret, consumer_key: CONSUMER_KEY, consumer_secret: CONSUMER_SECRET}.to_json}\n >> keys.txt`
redirect 'https://www.youtube.com/watch?v=k-cavEKkirc'
end
get '/' do
erb :index
end
get '/login' do
redirect '/' unless @twitter
user = Twitter.user
@user_name = user.name
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment