forked from omab/django-social-auth
/
foursquare.py
54 lines (40 loc) · 1.71 KB
/
foursquare.py
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
import urllib
from django.utils import simplejson
from social_auth.backends import BaseOAuth2, OAuthBackend, USERNAME
FOURSQUARE_SERVER = 'foursquare.com'
FOURSQUARE_AUTHORIZATION_URL = 'https://foursquare.com/oauth2/authenticate'
FOURSQUARE_ACCESS_TOKEN_URL = 'https://foursquare.com/oauth2/access_token'
FOURSQUARE_CHECK_AUTH = 'https://api.foursquare.com/v2/users/self'
class FoursquareBackend(OAuthBackend):
name = 'foursquare'
def get_user_id(self, details, response):
return response['response']['user']['id']
def get_user_details(self, response):
"""Return user details from Foursquare account"""
firstName = response['response']['user']['firstName']
lastName = response['response']['user'].get('lastName', '')
email = response['response']['user']['contact']['email']
return {USERNAME: firstName + ' ' + lastName,
'first_name': firstName,
'last_name': lastName,
'email': email}
class FoursquareAuth(BaseOAuth2):
"""Foursquare OAuth mechanism"""
AUTHORIZATION_URL = FOURSQUARE_AUTHORIZATION_URL
ACCESS_TOKEN_URL = FOURSQUARE_ACCESS_TOKEN_URL
SERVER_URL = FOURSQUARE_SERVER
AUTH_BACKEND = FoursquareBackend
SETTINGS_KEY_NAME = 'FOURSQUARE_CONSUMER_KEY'
SETTINGS_SECRET_NAME = 'FOURSQUARE_CONSUMER_SECRET'
def user_data(self, access_token):
"""Loads user data from service"""
params = {'oauth_token': access_token}
url = FOURSQUARE_CHECK_AUTH + '?' + urllib.urlencode(params)
try:
return simplejson.load(urllib.urlopen(url))
except ValueError:
return None
# Backend definition
BACKENDS = {
'foursquare': FoursquareAuth,
}