75 lines
1.5 KiB
Ruby
75 lines
1.5 KiB
Ruby
require 'rubygems'
|
|
require 'bundler/setup'
|
|
require 'sinatra'
|
|
require 'haml'
|
|
require 'httparty'
|
|
|
|
def resource_host
|
|
url = "http://localhost:"
|
|
if ENV["DIASPORA_PORT"]
|
|
url << ENV["DIASPORA_PORT"]
|
|
else
|
|
url << "3000"
|
|
end
|
|
url
|
|
end
|
|
|
|
CLIENT_ID = 'abcdefgh12345678'
|
|
CLIENT_SECRET = 'secret'
|
|
RESOURCE_HOST = resource_host
|
|
|
|
enable :sessions
|
|
|
|
helpers do
|
|
def redirect_uri
|
|
"http://" + request.host_with_port + "/callback"
|
|
end
|
|
|
|
def access_token
|
|
session[:access_token]
|
|
end
|
|
|
|
def get_with_access_token(path)
|
|
HTTParty.get(RESOURCE_HOST + path, :query => {:oauth_token => access_token})
|
|
end
|
|
|
|
def authorize_url
|
|
RESOURCE_HOST + "/oauth/authorize?client_id=#{CLIENT_ID}&client_secret=#{CLIENT_SECRET}&redirect_uri=#{redirect_uri}"
|
|
end
|
|
|
|
def access_token_url
|
|
RESOURCE_HOST + "/oauth/access_token"
|
|
end
|
|
end
|
|
|
|
get '/' do
|
|
haml :home
|
|
end
|
|
|
|
get '/callback' do
|
|
unless params["error"]
|
|
response = HTTParty.post(access_token_url, :body => {
|
|
:client_id => CLIENT_ID,
|
|
:client_secret => CLIENT_SECRET,
|
|
:redirect_uri => redirect_uri,
|
|
:code => params["code"],
|
|
:grant_type => 'authorization_code'}
|
|
)
|
|
|
|
session[:access_token] = response["access_token"]
|
|
redirect '/account'
|
|
else
|
|
"What is your major malfunction?"
|
|
end
|
|
end
|
|
|
|
get '/account' do
|
|
if access_token
|
|
@resource_server = RESOURCE_HOST
|
|
@url = "/api/v0/me.json"
|
|
@resource_response = get_with_access_token(@url)
|
|
haml :response
|
|
else
|
|
redirect authorize_url
|
|
end
|
|
end
|