Working OAuth2 with Foursquare on Sinatra

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
require 'rubygems'
require 'sinatra'
require 'oauth2'
require 'json'
require 'net/https'
require 'foursquare2'

set :port, 80

CLIENT_ID = '****************************************************'
CLIENT_SECRET = '****************************************************'
CALLBACK_PATH = '/callbacks/foursquare'

def client
  OAuth2::Client.new(CLIENT_ID, CLIENT_SECRET,
      {:site            => 'https://foursquare.com/',
      :token_url        => "/oauth2/access_token",
      :authorize_url    => "/oauth2/authenticate?response_type=code",
      :parse_json       => true,
      :ssl => {:ca_path => '/etc/ssl/certs' }
      })    
end

def redirect_uri()
  uri = URI.parse(request.url)
  uri.path = CALLBACK_PATH
  uri.query = nil
  uri.to_s
end

get CALLBACK_PATH do
  puts redirect_uri
  if params[:code] != nil
    token = client.auth_code.get_token(params[:code], :redirect_uri => redirect_uri).token  
    client = Foursquare2::Client.new(:oauth_token => token)
    email = client.user('self')['contact'].email.to_s
    return "Authenticated user: #{email}"
  else
    'Missing response from foursquare'
  end
end

get '/' do
  redirect client.auth_code.authorize_url(:redirect_uri => redirect_uri)
end
Tagged with:
Posted in development, ruby, ruby on rails, sinatra

Leave a Reply