forked from rcrowley/django-twitterauth
-
Notifications
You must be signed in to change notification settings - Fork 2
/
views.py
83 lines (69 loc) · 3.1 KB
/
views.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
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
81
82
83
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect, HttpResponseServerError
from django.core.urlresolvers import reverse
from django.conf import settings
from oauth import oauth
from models import User
from decorators import login_required
from twitterauth import REDIRECT_FIELD_NAME
SESSION_LOGIN_REDIRECT_KEY = '_login_redirect_key'
SESSION_TOKEN_KEY = '_token'
@login_required
def info(request):
if 'POST' == request.method:
request.user.email = request.POST['email']
errors = request.user.validate()
if not errors: request.user.save()
return render_to_response('info.html', {
'user': request.user,
'errors': errors
})
return render_to_response('info.html', {'user': request.user})
def login(request, redirect_field_name=REDIRECT_FIELD_NAME):
redirect_to = request.REQUEST.get(redirect_field_name, '')
if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
redirect_to = settings.LOGIN_REDIRECT_URL
request_token = request.user.twitter_api.get_request_token()
print 'Token', request_token
request.session.set_test_cookie()
request.session[SESSION_TOKEN_KEY] = request_token.to_string()
request.session[SESSION_LOGIN_REDIRECT_KEY] = redirect_to
authorization_url = request.user.twitter_api.get_authorization_url(request_token)
print 'Authorization url', authorization_url
return HttpResponseRedirect(authorization_url)
def callback(request):
request_token = request.session.get(SESSION_TOKEN_KEY, None)
if request_token is None:
return render_to_response('callback.html', {
'token': True
})
request_token = oauth.OAuthToken.from_string(request_token)
if request_token.key != request.GET.get('oauth_token', 'no-token'):
return render_to_response('callback.html', {
'mismatch': True
})
request.user.twitter_api.token = request.user.twitter_api.get_access_token(request_token)
# Actually login
credentials = request.user.twitter_api.verify_credentials()
if credentials is None:
return render_to_response('callback.html', {
'username': True
})
from twitterauth import login, authenticate
user, created = User.objects.get_or_create(username=credentials['screen_name'])
if created or (user.key != request.user.twitter_api.token.key or
user.secret != request.user.twitter_api.token.secret):
user.key = request.user.twitter_api.token.key
user.secret = request.user.twitter_api.token.secret
user.save()
# Call authenticate to verify and add backend to the user object.
user = authenticate(key=user.key, secret=user.secret)
login(request, user)
if request.session.test_cookie_worked():
request.session.delete_test_cookie()
del request.session[SESSION_TOKEN_KEY]
return HttpResponseRedirect(request.session[SESSION_LOGIN_REDIRECT_KEY])
def logout(request, next_page=None):
from twitterauth import logout
logout(request)
return HttpResponseRedirect(next_page or request.path)