Fr3deric
6 years ago
6 changed files with 69 additions and 3 deletions
@ -1,3 +1,17 @@ |
|||||||
from django.contrib import admin |
from django.contrib import admin |
||||||
|
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin |
||||||
|
from django.contrib.auth.models import User |
||||||
|
from .models import Account |
||||||
|
|
||||||
# Register your models here. |
|
||||||
|
class AccountInline(admin.StackedInline): |
||||||
|
model = Account |
||||||
|
can_delete = False |
||||||
|
|
||||||
|
|
||||||
|
class UserAdmin(BaseUserAdmin): |
||||||
|
inlines = (AccountInline,) |
||||||
|
|
||||||
|
|
||||||
|
admin.site.unregister(User) |
||||||
|
admin.site.register(User, UserAdmin) |
||||||
|
@ -0,0 +1,13 @@ |
|||||||
|
import hashlib |
||||||
|
from django.contrib.auth.forms import PasswordResetForm |
||||||
|
from bam.models import Account |
||||||
|
|
||||||
|
|
||||||
|
class HashedEmailPasswordResetForm(PasswordResetForm): |
||||||
|
def get_users(self, email): |
||||||
|
hashed_email = hashlib.sha256(bytes(email, 'utf-8')).hexdigest() |
||||||
|
accounts = Account.objects.filter(hashed_email=hashed_email) |
||||||
|
if accounts.count() > 0: |
||||||
|
return (a.user for a in accounts if a.user.has_usable_password()) |
||||||
|
else: |
||||||
|
return super().get_users(email) |
@ -0,0 +1,25 @@ |
|||||||
|
# Generated by Django 2.2 on 2019-04-28 10:12 |
||||||
|
|
||||||
|
from django.conf import settings |
||||||
|
from django.db import migrations, models |
||||||
|
import django.db.models.deletion |
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration): |
||||||
|
|
||||||
|
initial = True |
||||||
|
|
||||||
|
dependencies = [ |
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||||
|
] |
||||||
|
|
||||||
|
operations = [ |
||||||
|
migrations.CreateModel( |
||||||
|
name='Account', |
||||||
|
fields=[ |
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||||
|
('hashed_email', models.CharField(max_length=128)), |
||||||
|
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), |
||||||
|
], |
||||||
|
), |
||||||
|
] |
@ -1,3 +1,10 @@ |
|||||||
from django.db import models |
from django.db import models |
||||||
|
from django.contrib.auth.models import User |
||||||
|
|
||||||
# Create your models here. |
|
||||||
|
class Account(models.Model): |
||||||
|
user = models.OneToOneField(User, on_delete=models.CASCADE) |
||||||
|
hashed_email = models.CharField(max_length=128) |
||||||
|
|
||||||
|
def __str__(self): |
||||||
|
return '%s' % (self.user.username) |
||||||
|
@ -1,5 +1,6 @@ |
|||||||
from django.views.generic.base import TemplateView |
from django.views.generic.base import TemplateView |
||||||
from django.contrib.auth.mixins import LoginRequiredMixin |
from django.contrib.auth.mixins import LoginRequiredMixin |
||||||
|
|
||||||
|
|
||||||
class ProfileView(LoginRequiredMixin, TemplateView): |
class ProfileView(LoginRequiredMixin, TemplateView): |
||||||
template_name = 'bam/profile.html' |
template_name = 'bam/profile.html' |
||||||
|
Loading…
Reference in new issue