diaspora/spec/support/chubbies/app.rb

114 lines
2.4 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,
:manifest_url => "http://" + request.host_with_port + "/manifest"
})
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 '/manifest' do
{
:name => "Chubbies",
:description => "Chubbies tests Diaspora's OAuth capabilities.",
:homepage_url => "http://" + request.host_with_port,
:icon_url => "http://" + request.host_with_port + "/chubbies.jpeg"
}.to_json
end
get '/reset' do
@@client_id = nil
@@client_secret = nil
end