mirror of
https://github.com/Balshgit/different
synced 2025-09-11 02:50:41 +03:00
added EMAIL_CONFIRM enviroment constant
This commit is contained in:
parent
1b19a007ae
commit
4cde734f4d
@ -18,6 +18,7 @@ from server.settings.components import config
|
||||
|
||||
ACCOUNT_ACTIVATION_DAYS = 2
|
||||
EMAIL_TIMEOUT = 20
|
||||
CONFIRM_REGISTRATION_BY_EMAIL = True
|
||||
|
||||
EMAIL_HOST = config('EMAIL_HOST')
|
||||
EMAIL_PORT = config('EMAIL_PORT', cast=int)
|
||||
|
@ -1,6 +1,10 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from .managers import CustomUserManager
|
||||
from django.dispatch import receiver
|
||||
from django.conf import settings
|
||||
from .tasks import mail_send
|
||||
from server.settings.components.logging import main_logger
|
||||
|
||||
|
||||
class CustomUser(AbstractUser):
|
||||
@ -22,44 +26,51 @@ class CustomUser(AbstractUser):
|
||||
return self.username
|
||||
|
||||
|
||||
# # ----- ToDO: Enable this to email verification --------
|
||||
#
|
||||
# from django.dispatch import receiver
|
||||
# from django.conf import settings
|
||||
# from .tasks import mail_send
|
||||
# from server.settings.components.logging import main_logger
|
||||
#
|
||||
#
|
||||
# def user_tokens() -> dict:
|
||||
#
|
||||
# tokens_dict = dict()
|
||||
#
|
||||
# def generate_token(token_length: int) -> str:
|
||||
# from random import choice
|
||||
# token_chars = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890'
|
||||
# generated_token = ''
|
||||
# for i in range(token_length):
|
||||
# generated_token += choice(token_chars)
|
||||
# return generated_token
|
||||
#
|
||||
# tokens_dict['activation_token'] = generate_token(token_length=20)
|
||||
#
|
||||
# return tokens_dict
|
||||
#
|
||||
#
|
||||
# @receiver(models.signals.post_save, sender=CustomUser)
|
||||
# def post_save_user_signal_handler(sender, instance, created, **kwargs):
|
||||
#
|
||||
# if created and instance.username != 'admin':
|
||||
# instance.activation_token = user_tokens()['activation_token']
|
||||
# instance.save()
|
||||
# try:
|
||||
# user = CustomUser.objects.get(username=instance.username)
|
||||
# email = instance.email
|
||||
# subject = 'Welcome to book bot administration'
|
||||
# username = f'{instance.first_name} {instance.last_name}'
|
||||
# text = f'https://{settings.DOMAIN_NAME}/accounts/complete_registration/{user.activation_token}'
|
||||
#
|
||||
# mail_send(to_email=email, subject=subject, username=username, text_content=text)
|
||||
# except Exception as e:
|
||||
# main_logger.error(f'Email not send to user {instance.username}. Reason: {e}')
|
||||
def user_tokens() -> dict:
|
||||
tokens_dict = dict()
|
||||
|
||||
def generate_token(token_length: int) -> str:
|
||||
from random import choice
|
||||
token_chars = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890'
|
||||
generated_token = ''
|
||||
for i in range(token_length):
|
||||
generated_token += choice(token_chars)
|
||||
return generated_token
|
||||
|
||||
tokens_dict['activation_token'] = generate_token(token_length=20)
|
||||
tokens_dict['verification_code'] = generate_token(token_length=10)
|
||||
try:
|
||||
users = CustomUser.objects.all().values('activation_token', 'verification_code')
|
||||
for user in users:
|
||||
if tokens_dict['activation_token'] == user['activation_token']:
|
||||
tokens_dict['activation_token'] = generate_token(token_length=20)
|
||||
if tokens_dict['verification_code'] == user['verification_code']:
|
||||
tokens_dict['verification_code'] = generate_token(token_length=10)
|
||||
return tokens_dict
|
||||
except Exception as e:
|
||||
main_logger.error(f'Cant create tokens because they are not unique. '
|
||||
f'Activation token: {tokens_dict["activation_token"]} '
|
||||
f'Verification code:{tokens_dict["verification_code"]}'
|
||||
f'\nError: {e}')
|
||||
|
||||
|
||||
# # Send email to user
|
||||
@receiver(models.signals.post_save, sender=CustomUser)
|
||||
def send_activation_letter(sender, instance, created, **kwargs):
|
||||
if created and instance.username != 'admin':
|
||||
username = f'{instance.first_name} {instance.last_name}'
|
||||
subject = 'Welcome to book bot administration'
|
||||
email = instance.email
|
||||
try:
|
||||
if settings.CONFIRM_REGISTRATION_BY_EMAIL:
|
||||
instance.activation_token = user_tokens()['activation_token']
|
||||
instance.verification_code = user_tokens()['verification_code']
|
||||
instance.save()
|
||||
user = CustomUser.objects.get(username=instance.username)
|
||||
text = f'https://{settings.DOMAIN_NAME}/accounts/complete_registration/{user.activation_token}'
|
||||
mail_send(to_email=email, subject=subject, username=username, text_content=text)
|
||||
else:
|
||||
instance.is_staff = True
|
||||
mail_send(to_email=email, subject=subject, username=username)
|
||||
except Exception as e:
|
||||
main_logger.error(f'Email not send to user {instance.username}. Reason: {e}')
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "base.html" %}
|
||||
{% extends "users/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "base.html" %}
|
||||
{% extends "users/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@ -104,9 +104,11 @@ body {
|
||||
<input type="text" class="form-control" name="username" placeholder="Username" required="required">
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="form-group">{{ form.username.errors }}</div>
|
||||
<div class="form-group">
|
||||
<input type="password" class="form-control" name="password" placeholder="Password" required="required">
|
||||
</div>
|
||||
<div class="form-group">{{ form.password.errors }}</div>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-primary btn-lg">Login</button>
|
||||
</div>
|
||||
|
@ -2,7 +2,9 @@
|
||||
<body>
|
||||
<div>
|
||||
<p style="color: green">Добро пожаловать, {{username}}!</p>
|
||||
{% if text_content %}
|
||||
<p style="color: green">Чтобы активировать учётную запись перейдите по ссылке:
|
||||
<a href="{{text_content}}">Завершить регистрацию</a></p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</body>
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "base.html" %}
|
||||
{% extends "users/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "base.html" %}
|
||||
{% extends "users/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "base.html" %}
|
||||
{% extends "users/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{% extends "base.html" %}
|
||||
{% extends "users/base.html" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
|
@ -7,9 +7,9 @@ from server.apps.accounts.forms import CustomUserCreationForm
|
||||
from server.apps.accounts.models import CustomUser
|
||||
from django.core.validators import validate_email
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.conf import settings
|
||||
|
||||
|
||||
# Create your views here.
|
||||
def dashboard(request: HttpRequest) -> HttpResponse:
|
||||
return render(request, "users/dashboard.html", {})
|
||||
|
||||
@ -38,8 +38,13 @@ class RegisterUser(CreateView):
|
||||
|
||||
def form_valid(self, form: BaseModelForm) -> HttpResponse:
|
||||
if self.request.recaptcha_is_valid:
|
||||
form.save()
|
||||
user = form.save()
|
||||
validate_email(form.instance.email)
|
||||
if settings.CONFIRM_REGISTRATION_BY_EMAIL:
|
||||
message = 'Please check your email for continue registration'
|
||||
return render(self.request, 'registration/info.html', {'message': message})
|
||||
else:
|
||||
user.backend = 'django.contrib.auth.backends.ModelBackend'
|
||||
login(self.request, user)
|
||||
return redirect('admin:index')
|
||||
return render(self.request, 'users/register.html', self.get_context_data())
|
||||
|
Loading…
x
Reference in New Issue
Block a user