/
options.py
81 lines (63 loc) · 2.25 KB
/
options.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
from django.contrib.auth import update_session_auth_hash
from django.db import IntegrityError
from django.shortcuts import render
from django.utils import six
from django.utils.translation import ugettext as _
from misago.users.credentialchange import read_new_credential
from misago.users.decorators import deny_guests
from misago.users.pages import usercp
@deny_guests
def index(request, *args, **kwargs):
user_options = []
for section in usercp.get_sections(request):
user_options.append({
'name': six.text_type(section['name']),
'icon': section['icon'],
'component': section['component'],
})
request.frontend_context.update({'USER_OPTIONS': user_options})
return render(request, 'misago/options/noscript.html')
class ChangeError(Exception):
pass
def confirm_change_view(f):
@deny_guests
def decorator(request, token):
try:
return f(request, token)
except ChangeError:
return render(request, 'misago/options/credentials_error.html', status=400)
return decorator
@confirm_change_view
def confirm_email_change(request, token):
new_credential = read_new_credential(request, 'email', token)
if not new_credential:
raise ChangeError()
try:
request.user.set_email(new_credential)
request.user.save(update_fields=['email', 'email_hash'])
except IntegrityError:
raise ChangeError()
message = _("%(user)s, your e-mail has been changed.")
return render(
request, 'misago/options/credentials_changed.html', {
'message': message % {
'user': request.user.username,
},
}
)
@confirm_change_view
def confirm_password_change(request, token):
new_credential = read_new_credential(request, 'password', token)
if not new_credential:
raise ChangeError()
request.user.set_password(new_credential)
update_session_auth_hash(request, request.user)
request.user.save(update_fields=['password'])
message = _("%(user)s, your password has been changed.")
return render(
request, 'misago/options/credentials_changed.html', {
'message': message % {
'user': request.user.username,
},
}
)