Revision 9d20fe23 snf-astakos-app/astakos/im/target/google.py
b/snf-astakos-app/astakos/im/target/google.py | ||
---|---|---|
73 | 73 |
OAUTH_CONSUMER_KEY = settings.GOOGLE_CLIENT_ID |
74 | 74 |
OAUTH_CONSUMER_SECRET = settings.GOOGLE_SECRET |
75 | 75 |
|
76 |
consumer = oauth.Consumer(key=OAUTH_CONSUMER_KEY, secret=OAUTH_CONSUMER_SECRET) |
|
77 |
client = oauth.Client(consumer) |
|
78 |
|
|
79 | 76 |
token_scope = 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email' |
80 | 77 |
authenticate_url = 'https://accounts.google.com/o/oauth2/auth' |
81 | 78 |
access_token_url = 'https://www.googleapis.com/oauth2/v1/tokeninfo' |
... | ... | |
84 | 81 |
|
85 | 82 |
def get_redirect_uri(): |
86 | 83 |
return "%s%s" % (settings.BASEURL, |
87 |
reverse('astakos.im.target.google.authenticated')) |
|
84 |
reverse('astakos.im.target.google.authenticated')) |
|
85 |
|
|
88 | 86 |
|
89 |
@requires_auth_provider('google', login=True)
|
|
87 |
@requires_auth_provider('google') |
|
90 | 88 |
@require_http_methods(["GET", "POST"]) |
91 | 89 |
def login(request): |
92 | 90 |
init_third_party_session(request) |
... | ... | |
96 | 94 |
'redirect_uri': get_redirect_uri(), |
97 | 95 |
'client_id': settings.GOOGLE_CLIENT_ID |
98 | 96 |
} |
99 |
force_login = request.GET.get('force_login', False) |
|
97 |
force_login = request.GET.get('force_login', request.GET.get('from_login', |
|
98 |
True)) |
|
100 | 99 |
if force_login: |
101 | 100 |
params['approval_prompt'] = 'force' |
102 | 101 |
|
... | ... | |
110 | 109 |
return HttpResponseRedirect(url) |
111 | 110 |
|
112 | 111 |
|
113 |
@requires_auth_provider('google', login=True)
|
|
112 |
@requires_auth_provider('google') |
|
114 | 113 |
@require_http_methods(["GET", "POST"]) |
115 | 114 |
def authenticated( |
116 | 115 |
request, |
... | ... | |
123 | 122 |
|
124 | 123 |
# TODO: Handle errors, e.g. error=access_denied |
125 | 124 |
try: |
125 |
consumer = oauth.Consumer(key=OAUTH_CONSUMER_KEY, |
|
126 |
secret=OAUTH_CONSUMER_SECRET) |
|
127 |
client = oauth.Client(consumer) |
|
128 |
|
|
126 | 129 |
code = request.GET.get('code', None) |
127 | 130 |
params = { |
128 | 131 |
'code': code, |
... | ... | |
136 | 139 |
body=urllib.urlencode(params)) |
137 | 140 |
token = json.loads(content).get('access_token', None) |
138 | 141 |
|
139 |
resp, content = client.request("%s?access_token=%s" % (access_token_url,
|
|
140 |
token) , "GET")
|
|
142 |
resp, content = client.request("%s?access_token=%s" % |
|
143 |
(access_token_url, token), "GET")
|
|
141 | 144 |
access_token_data = json.loads(content) |
142 |
except Exception, e: |
|
143 |
messages.error(request, 'Invalid Google response. Please contact support') |
|
145 |
except Exception: |
|
146 |
messages.error(request, _('Invalid Google response. Please ' |
|
147 |
'contact support')) |
|
144 | 148 |
return HttpResponseRedirect(reverse('edit_profile')) |
145 | 149 |
|
146 | 150 |
if not access_token_data.get('user_id', None): |
147 |
messages.error(request, 'Invalid Google response. Please contact support') |
|
151 |
messages.error(request, _('Invalid Google response. Please contact ' |
|
152 |
' support')) |
|
148 | 153 |
return HttpResponseRedirect(reverse('edit_profile')) |
149 | 154 |
|
150 | 155 |
userid = access_token_data['user_id'] |
151 |
username = access_token_data.get('email', None) |
|
152 | 156 |
provider_info = access_token_data |
153 | 157 |
affiliation = 'Google.com' |
154 | 158 |
|
155 | 159 |
try: |
156 | 160 |
return handle_third_party_login(request, 'google', userid, |
157 | 161 |
provider_info, affiliation) |
158 |
except AstakosUser.DoesNotExist, e:
|
|
162 |
except AstakosUser.DoesNotExist: |
|
159 | 163 |
third_party_key = get_pending_key(request) |
160 | 164 |
user_info = {'affiliation': affiliation} |
161 | 165 |
return handle_third_party_signup(request, userid, 'google', |
... | ... | |
164 | 168 |
user_info, |
165 | 169 |
template, |
166 | 170 |
extra_context) |
167 |
|
Also available in: Unified diff