Implement resend welcome mail feature
This commit is contained in:
parent
ecfade9baf
commit
854a06cefd
@ -2,19 +2,15 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.auth.tokens import default_token_generator
|
|
||||||
from django.template.loader import render_to_string
|
|
||||||
from django.utils.encoding import force_bytes
|
|
||||||
from django.utils.http import urlsafe_base64_encode
|
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from ldapdb.models import fields as ldap_fields
|
from ldapdb.models import fields as ldap_fields
|
||||||
from ldapdb.models.base import Model
|
from ldapdb.models.base import Model
|
||||||
|
|
||||||
from core.settings import PASSWORD_RESET_TIMEOUT_DAYS
|
|
||||||
from account_manager.utils.mail_utils import realm_send_mail
|
|
||||||
from multiprocessing import Process
|
|
||||||
from ldap import NO_SUCH_OBJECT, ALREADY_EXISTS
|
from ldap import NO_SUCH_OBJECT, ALREADY_EXISTS
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
from account_manager.utils.mail_utils import send_welcome_mail
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
@ -51,19 +47,7 @@ class LdapUser(Model):
|
|||||||
LdapUser.base_dn = f'ou=people, {realm.ldap_base_dn}'
|
LdapUser.base_dn = f'ou=people, {realm.ldap_base_dn}'
|
||||||
ldap_user = LdapUser.objects.create(username=username, email=email, first_name=" ", last_name=" ")
|
ldap_user = LdapUser.objects.create(username=username, email=email, first_name=" ", last_name=" ")
|
||||||
user, _ = User.objects.get_or_create(username=username, email=email)
|
user, _ = User.objects.get_or_create(username=username, email=email)
|
||||||
mail_subject = 'Aktiviere deinen StuVe Account'
|
send_welcome_mail(domain, email, protocol, realm, user)
|
||||||
message = render_to_string('registration/welcome_email.jinja2', {
|
|
||||||
'user': user,
|
|
||||||
'domain': domain,
|
|
||||||
'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(),
|
|
||||||
'token': default_token_generator.make_token(user=user),
|
|
||||||
'protocol': protocol,
|
|
||||||
'email': email,
|
|
||||||
'expiration_days': PASSWORD_RESET_TIMEOUT_DAYS
|
|
||||||
})
|
|
||||||
# TODO failure handling
|
|
||||||
p1 = Process(target=realm_send_mail, args=(realm, user.email, mail_subject, message))
|
|
||||||
p1.start()
|
|
||||||
return ldap_user
|
return ldap_user
|
||||||
else:
|
else:
|
||||||
raise ALREADY_EXISTS('User already exists')
|
raise ALREADY_EXISTS('User already exists')
|
||||||
@ -78,7 +62,6 @@ class LdapUser(Model):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_users_by_dn(realm, users):
|
def get_users_by_dn(realm, users):
|
||||||
print(users)
|
|
||||||
LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}'
|
LdapGroup.base_dn = f'ou=groups,{realm.ldap_base_dn}'
|
||||||
users = [re.compile('uid=([a-zA-Z0-9_]*),(ou=[a-zA-Z_]*),(.*)').match(user).group(1) for
|
users = [re.compile('uid=([a-zA-Z0-9_]*),(ou=[a-zA-Z_]*),(.*)').match(user).group(1) for
|
||||||
user in users]
|
user in users]
|
||||||
|
|||||||
@ -27,6 +27,10 @@ urlpatterns = [
|
|||||||
name='realm-user-detail'),
|
name='realm-user-detail'),
|
||||||
path('realm/<int:realm_id>/user/<str:user_dn>/update/', user_views.realm_user_update,
|
path('realm/<int:realm_id>/user/<str:user_dn>/update/', user_views.realm_user_update,
|
||||||
name='realm-user-update'),
|
name='realm-user-update'),
|
||||||
|
path('realm/<int:realm_id>/user/<str:user_dn>/mail/password/', user_views.realm_user_resend_welcome_mail,
|
||||||
|
name='realm-user-password-reset'),
|
||||||
|
path('realm/<int:realm_id>/user/<str:user_dn>/mail/welcome/', user_views.realm_user_resend_welcome_mail,
|
||||||
|
name='realm-user-resend-welcome-mail'),
|
||||||
path('realm/<int:realm_id>/user/<str:user_dn>/group/update/',
|
path('realm/<int:realm_id>/user/<str:user_dn>/group/update/',
|
||||||
user_views.realm_user_group_update,
|
user_views.realm_user_group_update,
|
||||||
name='realm-user-group-update'),
|
name='realm-user-group-update'),
|
||||||
|
|||||||
@ -2,6 +2,12 @@ import logging
|
|||||||
|
|
||||||
from django.core.mail import get_connection, send_mail
|
from django.core.mail import get_connection, send_mail
|
||||||
from django.utils.html import strip_tags
|
from django.utils.html import strip_tags
|
||||||
|
from core.settings import PASSWORD_RESET_TIMEOUT_DAYS
|
||||||
|
from multiprocessing import Process
|
||||||
|
from django.contrib.auth.tokens import default_token_generator
|
||||||
|
from django.template.loader import render_to_string
|
||||||
|
from django.utils.encoding import force_bytes
|
||||||
|
from django.utils.http import urlsafe_base64_encode
|
||||||
|
|
||||||
from core.settings import EMAIL_HOST, EMAIL_PORT, EMAIL_USE_SSL, EMAIL_USE_TLS
|
from core.settings import EMAIL_HOST, EMAIL_PORT, EMAIL_USE_SSL, EMAIL_USE_TLS
|
||||||
|
|
||||||
@ -22,3 +28,19 @@ def realm_send_mail(realm, to, subject, message):
|
|||||||
recipient_list=[to, ],
|
recipient_list=[to, ],
|
||||||
connection=connection)
|
connection=connection)
|
||||||
logger.info('mail sent')
|
logger.info('mail sent')
|
||||||
|
|
||||||
|
|
||||||
|
def send_welcome_mail(domain, email, protocol, realm, user):
|
||||||
|
mail_subject = 'Aktiviere deinen StuVe Account'
|
||||||
|
message = render_to_string('registration/welcome_email.jinja2', {
|
||||||
|
'user': user,
|
||||||
|
'domain': domain,
|
||||||
|
'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(),
|
||||||
|
'token': default_token_generator.make_token(user=user),
|
||||||
|
'protocol': protocol,
|
||||||
|
'email': email,
|
||||||
|
'expiration_days': PASSWORD_RESET_TIMEOUT_DAYS
|
||||||
|
})
|
||||||
|
# TODO failure handling
|
||||||
|
p1 = Process(target=realm_send_mail, args=(realm, user.email, mail_subject, message))
|
||||||
|
p1.start()
|
||||||
|
|||||||
@ -12,7 +12,7 @@ from account_manager.forms import AddLDAPUserForm, UserDeleteListForm, UpdateLDA
|
|||||||
UserGroupListForm
|
UserGroupListForm
|
||||||
from account_manager.main_views import is_realm_admin
|
from account_manager.main_views import is_realm_admin
|
||||||
from account_manager.models import LdapUser, LdapGroup
|
from account_manager.models import LdapUser, LdapGroup
|
||||||
|
from account_manager.utils.mail_utils import send_welcome_mail
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -137,6 +137,54 @@ def realm_user_update(request, realm_id, user_dn):
|
|||||||
{'model_field': 'email', 'form_field': 'email'}, ])
|
{'model_field': 'email', 'form_field': 'email'}, ])
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# @login_required
|
||||||
|
# @is_realm_admin
|
||||||
|
# @protect_cross_realm_user_access
|
||||||
|
# def realm_user_password_reset(request, realm_id, user_dn):
|
||||||
|
# realm_obj = Realm.objects.get(id=realm_id)
|
||||||
|
# LdapUser.base_dn = f'ou=people,{realm_obj.ldap_base_dn}'
|
||||||
|
# ldap_user = LdapUser.objects.get(dn=user_dn)
|
||||||
|
#
|
||||||
|
# password_reset_request = HttpRequest()
|
||||||
|
# password_reset_request.method = 'POST'
|
||||||
|
# password_reset_request.META['HTTP_HOST'] = request.META['HTTP_HOST']
|
||||||
|
# password_reset_request.POST = {'email': ldap_user.email, 'csrfmiddlewaretoken': get_token(HttpRequest())}
|
||||||
|
# PasswordResetView.as_view()(password_reset_request)
|
||||||
|
#
|
||||||
|
# realm_obj = Realm.objects.get(id=realm_id)
|
||||||
|
# LdapUser.base_dn = f'ou=people,{realm_obj.ldap_base_dn}'
|
||||||
|
# ldap_user = LdapUser.objects.get(dn=user_dn)
|
||||||
|
# return user_update_controller(request=request,
|
||||||
|
# realm=realm_obj,
|
||||||
|
# ldap_user=ldap_user,
|
||||||
|
# redirect_name='realm-user-detail',
|
||||||
|
# update_view='user/realm_user_detail.jinja2',
|
||||||
|
# form_class=AdminUpdateLDAPUserForm,
|
||||||
|
# form_attrs=[
|
||||||
|
# {'model_field': 'username', 'form_field': 'username'},
|
||||||
|
# {'model_field': 'password', 'form_field': 'password'},
|
||||||
|
# {'model_field': 'first_name', 'form_field': 'first_name'},
|
||||||
|
# {'model_field': 'last_name', 'form_field': 'last_name'},
|
||||||
|
# {'model_field': 'email', 'form_field': 'email'}, ])
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@is_realm_admin
|
||||||
|
@protect_cross_realm_user_access
|
||||||
|
def realm_user_resend_welcome_mail(request, realm_id, user_dn):
|
||||||
|
realm = Realm.objects.get(id=realm_id)
|
||||||
|
LdapUser.base_dn = f'ou=people,{realm.ldap_base_dn}'
|
||||||
|
ldap_user = LdapUser.objects.get(dn=user_dn)
|
||||||
|
current_site = get_current_site(request)
|
||||||
|
protocol = 'http'
|
||||||
|
if request.is_secure():
|
||||||
|
protocol = 'https'
|
||||||
|
send_welcome_mail(domain=current_site.domain, email=ldap_user.email, protocol=protocol, realm=realm,
|
||||||
|
user=User.objects.get(username=ldap_user.username))
|
||||||
|
return redirect('realm-user-detail', realm_id, user_dn)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@is_realm_admin
|
@is_realm_admin
|
||||||
@protect_cross_realm_user_access
|
@protect_cross_realm_user_access
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
<li class="list-group-item">Vorname: {{ user.first_name }}</li>
|
<li class="list-group-item">Vorname: {{ user.first_name }}</li>
|
||||||
<li class="list-group-item">Nachname: {{ user.last_name }}</li>
|
<li class="list-group-item">Nachname: {{ user.last_name }}</li>
|
||||||
<li class="list-group-item">Email: {{ user.email }}</li>
|
<li class="list-group-item">Email: {{ user.email }}</li>
|
||||||
{# <li class="list-group-item">Passwort: {{ user.password }}</li>#}
|
<li class="list-group-item">Passwort: <a href="#" class="float-right">Nutzerpasswort zurücksetzen</a></li>
|
||||||
{# <li class="list-group-item">Telefon: {{ user.phone }}</li>#}
|
{# <li class="list-group-item">Telefon: {{ user.phone }}</li>#}
|
||||||
{# <li class="list-group-item">Mobiltelefon: {{ user.mobile_phone }}</li>#}
|
{# <li class="list-group-item">Mobiltelefon: {{ user.mobile_phone }}</li>#}
|
||||||
<li class="list-group-item">Gruppen:
|
<li class="list-group-item">Gruppen:
|
||||||
@ -36,6 +36,12 @@
|
|||||||
<a href="{{ url('realm-user-update', args = [realm.id, user.dn]) }}" class="btn btn-primary mr-auto p-2">
|
<a href="{{ url('realm-user-update', args = [realm.id, user.dn]) }}" class="btn btn-primary mr-auto p-2">
|
||||||
<i class="fas fa-user-cog"></i> Nutzer bearbeiten
|
<i class="fas fa-user-cog"></i> Nutzer bearbeiten
|
||||||
</a>
|
</a>
|
||||||
|
{% if not user.last_login %}
|
||||||
|
<a href="{{ url('realm-user-resend-welcome-mail', args = [realm.id, user.dn]) }}"
|
||||||
|
class="btn btn-secondary p-2 mr-2">
|
||||||
|
<i class="fas fa-paper-plane"></i> Wilkommensmail erneut senden
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
<a href="{{ url('realm-user-delete-confirm', args = [realm.id, user.dn]) }}" class="btn btn-danger p-2">
|
<a href="{{ url('realm-user-delete-confirm', args = [realm.id, user.dn]) }}" class="btn btn-danger p-2">
|
||||||
<i class="fas fa-trash"></i> Nutzer löschen
|
<i class="fas fa-trash"></i> Nutzer löschen
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
Reference in New Issue
Block a user