-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathapp.rb
More file actions
80 lines (64 loc) · 2.29 KB
/
app.rb
File metadata and controls
80 lines (64 loc) · 2.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
module Launchpad
class Basecamp < Sinatra::Base
YAML::load(File.open('config/basecamp.yml'))['config'].each do |k,v|
set k, v
end
set :views, 'views'
set :raise_errors, Proc.new { false }
enable :sessions, :logging
# this must be set since we are using shotgun for request reloading
set :session_secret, "My session secret"
before do
session[:oauth] ||= {}
@client = client
if !session[:oauth][:access_token].nil?
@token = OAuth2::AccessToken.new(@client,
session[:oauth][:access_token],
{:refresh_token => session[:oauth][:refresh_token],
:expires_at => session[:oauth][:expires_at],
:expires_in => session[:oauth][:expires_in]})
if @token.expired?
@token = @token.refresh!(:refresh_token => @token.refresh_token, :type => 'refresh')
end
end
end
get '/' do
if @token
@companies = @token.get('https://launchpad.37signals.com/authorization.json').parsed
end
erb :index
end
get '/auth/basecamp' do
redirect client.auth_code.authorize_url(:type => 'web_server',
:redirect_uri => redirect_uri)
end
get settings.callback_url do
if params[:code] != nil
@token = client.auth_code.get_token(params[:code], :redirect_uri => redirect_uri, :type => 'web_server')
session[:oauth][:access_token] = @token.token
session[:oauth][:refresh_token] = @token.refresh_token
session[:oauth][:expires_at] = @token.expires_at
session[:oauth][:expires_in] = @token.expires_in
redirect '/'
else
raise "General Error"
end
end
error do
"error: #{request.env['sinatra.error'].to_s}"
end
def client
OAuth2::Client.new(settings.client_id, settings.client_secret, {
:site => 'https://launchpad.37signals.com',
:token_url => '/authorization/token',
:authorize_url => 'authorization/new'
})
end
def redirect_uri
uri = URI.parse(request.url)
uri.path = settings.callback_url
uri.query = nil
uri.to_s
end
end
end