107 lines
2.1 KiB
Ruby
107 lines
2.1 KiB
Ruby
require 'rubygems'
|
|
require 'bundler/setup'
|
|
require 'sinatra'
|
|
require 'haml'
|
|
require 'httparty'
|
|
require 'json'
|
|
|
|
def resource_host
|
|
url = "http://localhost:"
|
|
if ENV["DIASPORA_PORT"]
|
|
url << ENV["DIASPORA_PORT"]
|
|
else
|
|
url << "3000"
|
|
end
|
|
url
|
|
end
|
|
|
|
@@client_id = nil
|
|
@@client_secret = nil
|
|
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 token_url
|
|
RESOURCE_HOST + "/oauth/token"
|
|
end
|
|
|
|
def access_token_url
|
|
RESOURCE_HOST + "/oauth/access_token"
|
|
end
|
|
end
|
|
|
|
get '/' do
|
|
haml :home
|
|
end
|
|
|
|
get '/callback' do
|
|
unless params["error"]
|
|
|
|
if(params["client_id"] && params["client_secret"])
|
|
@@client_id = params["client_id"]
|
|
@@client_secret = params["client_secret"]
|
|
redirect '/account'
|
|
|
|
else
|
|
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'
|
|
end
|
|
else
|
|
"What is your major malfunction?"
|
|
end
|
|
end
|
|
|
|
get '/account' do
|
|
if !@@client_id && !@@client_secret
|
|
response = HTTParty.post(token_url, :body => {
|
|
:type => :client_associate,
|
|
:name => :Chubbies,
|
|
:redirect_uri => redirect_uri
|
|
})
|
|
|
|
json = JSON.parse(response.body)
|
|
|
|
@@client_id = json["client_id"]
|
|
@@client_secret = json["client_secret"]
|
|
|
|
redirect '/account'
|
|
|
|
else
|
|
if access_token
|
|
@resource_response = get_with_access_token("/api/v0/me")
|
|
haml :response
|
|
else
|
|
redirect authorize_url
|
|
end
|
|
end
|
|
end
|
|
|
|
get '/reset' do
|
|
@@client_id = nil
|
|
@@client_secret = nil
|
|
end
|