Moved Buzz example into its own directory for consistency.
This commit is contained in:
1 parent
bb4e15b9f4
commit
cc9542e9c1
1 file changed
@@ -0,0 +1,84 @@
|
||||
$:.unshift('lib')
|
||||
require 'rubygems'
|
||||
require 'sinatra'
|
||||
require 'datamapper'
|
||||
require 'google/api_client'
|
||||
|
||||
use Rack::Session::Pool, :expire_after => 86400 # 1 day
|
||||
|
||||
# Set up our token store
|
||||
DataMapper.setup(:default, 'sqlite::memory:')
|
||||
class TokenPair
|
||||
include DataMapper::Resource
|
||||
|
||||
property :id, Serial
|
||||
property :refresh_token, String
|
||||
property :access_token, String
|
||||
property :expires_in, Integer
|
||||
property :issued_at, Integer
|
||||
|
||||
def update_token!(object)
|
||||
self.refresh_token = object.refresh_token
|
||||
self.access_token = object.access_token
|
||||
self.expires_in = object.expires_in
|
||||
self.issued_at = object.issued_at
|
||||
end
|
||||
|
||||
def to_hash
|
||||
return {
|
||||
:refresh_token => refresh_token,
|
||||
:access_token => access_token,
|
||||
:expires_in => expires_in,
|
||||
:issued_at => Time.at(issued_at)
|
||||
}
|
||||
end
|
||||
end
|
||||
TokenPair.auto_migrate!
|
||||
|
||||
before do
|
||||
@client = Google::APIClient.new
|
||||
@client.authorization.client_id = '245083617981.apps.googleusercontent.com'
|
||||
@client.authorization.client_secret = 'pYelZCRjSa+iMezYENVScXFk'
|
||||
@client.authorization.scope = 'https://www.googleapis.com/auth/buzz'
|
||||
@client.authorization.redirect_uri = to('/oauth2callback')
|
||||
@client.authorization.code = params[:code] if params[:code]
|
||||
if session[:token_id]
|
||||
# Load the access token here if it's available
|
||||
token_pair = TokenPair.get(session[:token_id])
|
||||
@client.authorization.update_token!(token_pair.to_hash)
|
||||
end
|
||||
if @client.authorization.refresh_token && @client.authorization.expired?
|
||||
@client.authorization.fetch_access_token!
|
||||
end
|
||||
@buzz = @client.discovered_api('buzz')
|
||||
unless @client.authorization.access_token || request.path_info =~ /^\/oauth2/
|
||||
redirect to('/oauth2authorize')
|
||||
end
|
||||
end
|
||||
|
||||
get '/oauth2authorize' do
|
||||
redirect @client.authorization.authorization_uri.to_s, 303
|
||||
end
|
||||
|
||||
get '/oauth2callback' do
|
||||
@client.authorization.fetch_access_token!
|
||||
# Persist the token here
|
||||
token_pair = if session[:token_id]
|
||||
TokenPair.get(session[:token_id])
|
||||
else
|
||||
TokenPair.new
|
||||
end
|
||||
token_pair.update_token!(@client.authorization)
|
||||
token_pair.save()
|
||||
session[:token_id] = token_pair.id
|
||||
redirect to('/')
|
||||
end
|
||||
|
||||
get '/' do
|
||||
result = @client.execute(
|
||||
@buzz.activities.list,
|
||||
{'userId' => '@me', 'scope' => '@consumption', 'alt'=> 'json'}
|
||||
)
|
||||
status, _, _ = result.response
|
||||
[status, {'Content-Type' => 'application/json'}, JSON.generate(result.data)]
|
||||
end
|
||||
Reference in new issue
Block a user