from django.template import RequestContext
from django.core.urlresolvers import reverse
from forum.models import User
-from django.http import HttpResponseRedirect, Http404
+from django.http import HttpResponseRedirect, Http404, HttpResponseForbidden
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
from django.utils.http import urlquote_plus
import types
import datetime
-from forum.authentication.forms import SimpleRegistrationForm, SimpleEmailSubscribeForm, \
+from forum.forms import SimpleRegistrationForm, SimpleEmailSubscribeForm, \
TemporaryLoginRequestForm, ChangePasswordForm, SetPasswordForm
-from forum.utils.mail import send_email
+from forum.utils.mail import send_email, send_template_email
from forum.authentication.base import InvalidAuthentication
-from forum.authentication import AUTH_PROVIDERS, user_logged_in
+from forum.authentication import AUTH_PROVIDERS
from forum.models import AuthKeyUserAssociation, ValidationHash, Question, Answer
+from forum.actions import UserJoinsAction
def signin_page(request, action=None):
if action is None:
except InvalidAuthentication, e:
request.session['auth_error'] = e.message
- return HttpResponseRedirect(reverse('auth_signin'))
+ return HttpResponseRedirect(reverse('auth_signin'))
+ else:
+ raise Http404()
def process_provider_signin(request, provider):
uassoc = AuthKeyUserAssociation(user=request.user, key=assoc_key, provider=provider)
uassoc.save()
request.user.message_set.create(message=_('The new credentials are now associated with your account'))
- return HttpResponseRedirect(reverse('user_authsettings'))
+ return HttpResponseRedirect(reverse('user_authsettings', args=[request.user.id]))
return HttpResponseRedirect(reverse('auth_signin'))
else:
if User.objects.all().count() == 0:
user_.is_superuser = True
+ user_.is_staff = True
user_.save()
-
- if not user_.email_isvalid:
- send_validation_email(user_)
+ UserJoinsAction(user=user_, ip=request.META['REMOTE_ADDR']).save()
try:
assoc_key = request.session['assoc_key']
request.session['auth_error'] = _("Oops, something went wrong in the middle of this process. Please try again.")
return HttpResponseRedirect(request.session.get('on_signin_url', reverse('auth_signin')))
- uassoc = AuthKeyUserAssociation(user=user_, key=request.session['assoc_key'], provider=request.session['auth_provider'])
+ uassoc = AuthKeyUserAssociation(user=user_, key=assoc_key, provider=auth_provider)
uassoc.save()
if email_feeds_form.cleaned_data['subscribe'] == 'n':
del request.session['assoc_key']
del request.session['auth_provider']
- if user_.email_isvalid:
- return login_and_forward(request, user_)
- else:
- return HttpResponseRedirect(reverse('index'))
+ return login_and_forward(request, user_, message=_("A welcome email has been sent to your email address. "))
else:
provider_class = AUTH_PROVIDERS[request.session['auth_provider']].consumer
user_data = provider_class.get_user_data(request.session['assoc_key'])
+ if not user_data:
+ user_data = request.session.get('auth_consumer_data', {})
+
username = user_data.get('username', '')
email = user_data.get('email', '')
- if not email:
- email = request.session.get('auth_email_request', '')
-
if email:
request.session['auth_validated_email'] = email
except:
hash = ValidationHash.objects.create_new(user, 'templogin', [user.id])
- send_email(_("Temporary login link"), [(user.username, user.email)], "auth/temp_login_email.html", {
- 'temp_login_code': hash,
- 'user': user
- })
+ send_template_email([user], "auth/temp_login_email.html", {'temp_login_code': hash})
request.user.message_set.create(message=_("An email has been sent with your temporary login key"))
user = get_object_or_404(User, id=user)
if (ValidationHash.objects.validate(code, user, 'templogin', [user.id])):
- return login_and_forward(request, user, reverse('user_authsettings'),
+ return login_and_forward(request, user, reverse('user_authsettings', kwargs={'id': user.id}),
_("You are logged in with a temporary access key, please take the time to fix your issue with authentication."))
else:
raise Http404()
-
-def send_validation_email(user):
- hash = ValidationHash.objects.create_new(user, 'email', [user.email])
- send_email(_("Email Validation"), [(user.username, user.email)], "auth/email_validation.html", {
- 'validation_code': hash,
- 'user': user
- })
-
+
def validate_email(request, user, code):
user = get_object_or_404(User, id=user)
raise Http404()
@login_required
-def auth_settings(request):
- """
- change password view.
+def auth_settings(request, id):
+ user_ = get_object_or_404(User, id=id)
+
+ if not (request.user.is_superuser or request.user == user_):
+ return HttpResponseForbidden()
- url : /changepw/
- template: authopenid/changepw.html
- """
- user_ = request.user
auth_keys = user_.auth_keys.all()
- if user_.has_usable_password():
- FormClass = ChangePasswordForm
- else:
+ if request.user.is_superuser or (not user_.has_usable_password()):
FormClass = SetPasswordForm
+ else:
+ FormClass = ChangePasswordForm
if request.POST:
form = FormClass(request.POST, user=user_)
if form.is_valid():
- if user_.has_usable_password():
- request.user.message_set.create(message=_("Your password was changed"))
- else:
- request.user.message_set.create(message=_("New password set"))
- FormClass = ChangePasswordForm
-
+ is_new_pass = not user_.has_usable_password()
user_.set_password(form.cleaned_data['password1'])
user_.save()
- return HttpResponseRedirect(reverse('user_authsettings'))
-
- form = FormClass(user=user_)
+
+ if is_new_pass:
+ request.user.message_set.create(message=_("New password set"))
+ if not request.user.is_superuser:
+ form = ChangePasswordForm(user=user_)
+ else:
+ request.user.message_set.create(message=_("Your password was changed"))
+
+ return HttpResponseRedirect(reverse('user_authsettings', kwargs={'id': user_.id}))
+ else:
+ form = FormClass(user=user_)
auth_keys_list = []
})
return render_to_response('auth/auth_settings.html', {
+ 'view_user': user_,
+ "can_view_private": (user_ == request.user) or request.user.is_superuser,
'form': form,
'has_password': user_.has_usable_password(),
'auth_keys': auth_keys_list,
def remove_external_provider(request, id):
association = get_object_or_404(AuthKeyUserAssociation, id=id)
- if not association.user == request.user:
- raise Http404()
+ if not (request.user.is_superuser or request.user == association.user):
+ return HttpResponseForbidden()
+
request.user.message_set.create(message=_("You removed the association with %s") % association.provider)
association.delete()
- return HttpResponseRedirect(reverse('user_authsettings'))
+ return HttpResponseRedirect(reverse('user_authsettings', kwargs={'id': association.user.id}))
def newquestion_signin_action(user):
question = Question.objects.filter(author=user).order_by('-added_at')[0]
user.backend = "django.contrib.auth.backends.ModelBackend"
login(request, user)
- user_logged_in.send(user=user,old_session=old_session,sender=None)
+ temp_data = request.session.pop('temp_node_data', None)
+ if temp_data:
+ request.POST = temp_data
+ node_type = request.session.pop('temp_node_type')
+
+ if node_type == "question":
+ from forum.views.writers import ask
+ return ask(request)
+ elif node_type == "answer":
+ from forum.views.writers import answer
+ return answer(request, request.session.pop('temp_question_id'))
if not forward:
signin_action = request.session.get('on_signin_action', None)