|
52 | 52 | import debug # pyflakes:ignore |
53 | 53 |
|
54 | 54 | from ietf.group.models import Role, Group |
55 | | -from ietf.ietfauth.forms import RegistrationForm, PasswordForm, ResetPasswordForm, TestEmailForm, WhitelistForm, ChangePasswordForm |
56 | | -from ietf.ietfauth.forms import get_person_form, RoleEmailForm, NewEmailForm |
| 55 | +from ietf.ietfauth.forms import ( RegistrationForm, PasswordForm, ResetPasswordForm, TestEmailForm, |
| 56 | + WhitelistForm, ChangePasswordForm, get_person_form, RoleEmailForm, |
| 57 | + NewEmailForm, ChangeUsernameForm ) |
57 | 58 | from ietf.ietfauth.htpasswd import update_htpasswd_file |
58 | 59 | from ietf.ietfauth.utils import role_required |
59 | 60 | from ietf.mailinglists.models import Subscribed, Whitelisted |
@@ -521,3 +522,45 @@ def change_password(request): |
521 | 522 | }) |
522 | 523 |
|
523 | 524 |
|
| 525 | +@login_required |
| 526 | +def change_username(request): |
| 527 | + person = None |
| 528 | + |
| 529 | + try: |
| 530 | + person = request.user.person |
| 531 | + except Person.DoesNotExist: |
| 532 | + return render(request, 'registration/missing_person.html') |
| 533 | + |
| 534 | + emails = [ e.address for e in Email.objects.filter(person=person, active=True) ] |
| 535 | + emailz = [ e.address for e in person.email_set.filter(active=True) ] |
| 536 | + assert emails == emailz |
| 537 | + user = request.user |
| 538 | + |
| 539 | + if request.method == 'POST': |
| 540 | + form = ChangeUsernameForm(user, request.POST) |
| 541 | + if form.is_valid(): |
| 542 | + new_username = form.cleaned_data["username"] |
| 543 | + password = form.cleaned_data["password"] |
| 544 | + assert new_username in emails |
| 545 | + |
| 546 | + user.username = new_username.lower() |
| 547 | + user.save() |
| 548 | + # password is also stored in htpasswd file |
| 549 | + update_htpasswd_file(user.username, password) |
| 550 | + # keep the session |
| 551 | + update_session_auth_hash(request, user) |
| 552 | + |
| 553 | + send_mail(request, emails, None, "Datatracker username change notification", "registration/username_change_email.txt", {}) |
| 554 | + |
| 555 | + messages.success(request, "Your username was successfully changed") |
| 556 | + return HttpResponseRedirect(urlreverse('ietf.ietfauth.views.profile')) |
| 557 | + |
| 558 | + else: |
| 559 | + form = ChangeUsernameForm(request.user) |
| 560 | + |
| 561 | + return render(request, 'registration/change_username.html', { |
| 562 | + 'form': form, |
| 563 | + 'user': user, |
| 564 | + }) |
| 565 | + |
| 566 | + |
0 commit comments