Skip to content

Instantly share code, notes, and snippets.

@richardkiene
Created October 23, 2013 15:02
Show Gist options
  • Save richardkiene/7120459 to your computer and use it in GitHub Desktop.
Save richardkiene/7120459 to your computer and use it in GitHub Desktop.
Minimum viable OAuth 1.0a sign-in using Logos APIs
require 'sinatra'
require "oauth"
require "oauth/consumer"
require 'oauth/signature/plaintext'
require 'net/http'
require 'json/pure'
configure do
set :session_secret, "<pick something random here>"
enable :sessions
end
before do
session[:oauth] ||= {}
@consumer ||=OAuth::Consumer.new "<your key here>", "<your secret here>",
{
:site => "https://auth.logos.com",
:signature_method => "PLAINTEXT",
:authorize_path => "/oauth/v1/authorize",
:access_token_path=>"/oauth/v1/token",
:request_token_path=>"/oauth/v1/initiate"
}
if !session[:oauth][:request_token].nil? && !session[:oauth][:request_token_secret].nil?
@request_token = OAuth::RequestToken.new(@consumer, session[:oauth][:request_token], session[:oauth][:request_token_secret])
end
if !session[:oauth][:access_token].nil? && !session[:oauth][:access_token_secret].nil?
@access_token = OAuth::AccessToken.new(@consumer, session[:oauth][:access_token], session[:oauth][:access_token_secret])
end
end
get '/' do
if session[:is_logged_in]
@res = @access_token.request(:get, "https://accountsapi.logos.com/v2/users/me")
@parsed_json = JSON.parse(@res.body)
@alias = @parsed_json["alias"]
@email = @parsed_json["email"]
@id = @parsed_json["id"]
"Id: %s Alias: %s Email: %s" % [@id, @alias, @email]
else
return redirect "/request"
end
end
get "/request" do
@request_token = @consumer.get_request_token({:oauth_callback => "http://localhost:4567/callback"})
session[:oauth][:request_token] = @request_token.token
session[:oauth][:request_token_secret] = @request_token.secret
redirect @request_token.authorize_url
end
get "/callback" do
@access_token = @request_token.get_access_token :oauth_verifier => params[:oauth_verifier]
session[:oauth][:access_token] = @access_token.token
session[:oauth][:access_token_secret] = @access_token.secret
session[:is_logged_in] = true
return redirect "/"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment