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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
from django.shortcuts import render_to_response as render
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.utils.safestring import mark_safe
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.contrib.auth import login, logout
from models import FBAssociation
from forum.forms import EditUserEmailFeedsForm
from django.conf import settings
import fb
import forms
import logging
def signin(request, newquestion = False, newanswer = False):
state, context = fb.get_user_state(request)
if state == fb.STATES['FIRSTTIMER']:
if newquestion:
register_url = 'fb_user_register_new_question'
elif newanswer:
register_url = 'fb_user_register_new_answer'
else:
register_url = 'fb_user_register'
return HttpResponseRedirect(reverse(register_url))
elif state == fb.STATES['RETURNINGUSER']:
return login_and_forward(request, context, newquestion, newanswer)
elif state == fb.STATES['SESSIONEXPIRED']:
response = logout(request, next_page=reverse('index'))
fb.delete_cookies(response)
return response
return HttpResponseRedirect(reverse('index'))
def register(request, newquestion = False, newanswer = False):
state, context = fb.get_user_state(request)
if state == fb.STATES['FIRSTTIMER']:
if 'bnewaccount' in request.POST.keys():
form1 = forms.FBConnectRegisterForm(request.POST)
email_feeds_form = EditUserEmailFeedsForm(request.POST)
if (form1.is_valid() and email_feeds_form.is_valid()):
tmp_pwd = User.objects.make_random_password()
user_ = User.objects.create_user(form1.cleaned_data['username'],
form1.cleaned_data['email'], tmp_pwd)
user_.set_unusable_password()
uassoc = FBAssociation(user=user_, fbuid=context['uid'])
uassoc.save()
email_feeds_form.save(user_)
return login_and_forward(request, user_, newquestion, newanswer)
else:
form1 = forms.FBConnectRegisterForm(initial={
'next': '/',
'username': context['name'],
'email': '',
})
email_feeds_form = EditUserEmailFeedsForm()
return render('authopenid/complete.html', {
'form1': form1,
'email_feeds_form': email_feeds_form,
'provider':mark_safe('facebook'),
'login_type':'facebook',
'gravatar_faq_url':reverse('faq') + '#gravatar',
}, context_instance=RequestContext(request))
else:
return HttpResponseRedirect(reverse('index'))
def login_and_forward(request, user, newquestion = False, newanswer = False):
old_session = request.session.session_key
user.backend = "django.contrib.auth.backends.ModelBackend"
login(request, user)
from forum.models import user_logged_in
user_logged_in.send(user=user,session_key=old_session,sender=None)
if (newquestion):
from forum.models import Question
question = Question.objects.filter(author=user).order_by('-added_at')[0]
return HttpResponseRedirect(question.get_absolute_url())
if (newanswer):
from forum.models import Answer
answer = Answer.objects.filter(author=user).order_by('-added_at')[0]
return HttpResponseRedirect(answer.get_absolute_url())
return HttpResponseRedirect('/')
|