diff --git a/dal/env.sample b/dal/env.sample deleted file mode 100644 index a27b883..0000000 --- a/dal/env.sample +++ /dev/null @@ -1,10 +0,0 @@ -# Create .env to be loaded automatically - -LDAPSERVER="ldap://ldap1.ungleich.ch ldap://ldap2.ungleich.ch" -LDAPSEARCHUSER="user here" -LDAPSEARCHUSERPASSWORD="password here" - - -# Space separated list of search bases for users -LDAPSEARCH="ou=users,dc=ungleich,dc=ch ou=customers,dc=ungleich,dc=ch" -LDAPCREATE="ou=customers,dc=ungleich,dc=ch" diff --git a/dal/urls.py b/dal/urls.py index b5f4a3a..1dab47a 100644 --- a/dal/urls.py +++ b/dal/urls.py @@ -4,10 +4,21 @@ from django.conf.urls import url from django.contrib import admin # Import the classes for the views -from .views import Register, ChangeData, ChangePassword, ResetPassword, DeleteAccount, Index, LogOut, ResetRequest +from .views import ( + Register, + ChangeData, + ChangePassword, + ResetPassword, + DeleteAccount, + Index, + LogOut, + ResetRequest, + UserCreateAPI +) urlpatterns = [ path('register/', Register.as_view(), name="register"), + path('create/', UserCreateAPI.as_view(), name="create"), path('changedata/', ChangeData.as_view(), name="change_data"), path('resetpassword/', ResetPassword.as_view(), name="reset_password"), path('changepassword/', ChangePassword.as_view(), name="change_password"), diff --git a/dal/views.py b/dal/views.py index 5d643d2..ed1eef4 100644 --- a/dal/views.py +++ b/dal/views.py @@ -2,12 +2,15 @@ from django.shortcuts import render from django.views.generic import View, FormView from django.contrib.auth import authenticate, login, logout +from django.contrib.auth.models import User from django.http import HttpResponse from django.core.validators import validate_email, ValidationError from django.urls import reverse_lazy from django.contrib.auth.tokens import PasswordResetTokenGenerator from django.core.mail import EmailMessage from django.views.decorators.cache import cache_control +from rest_framework.views import APIView +from rest_framework.response import Response from .models import ResetToken from .forms import LoginForm from .ungleich_ldap import LdapManager @@ -459,3 +462,54 @@ class PseudoUser(): # random alphanumeric strings for primary key and password, just used for token generation pk = ''.join(choice(string.ascii_letters + string.digits) for _ in range(20)) password = ''.join(choice(string.ascii_letters + string.digits) for _ in range(30)) + +class UserCreateAPI(APIView): + + def post(self, request): + username = request.POST.get('username') + email = request.POST.get('email') + firstname = request.POST.get('firstname') + lastname = request.POST.get('lastname') + + if username == "" or not username: + return Response('Please supply a username.', 400) + try: + validate_email(email) + except ValidationError: + return Response('Email is not valid.', 400) + if not firstname or not lastname: + return Response('Please provide firstname and lastname', 400) + + pwd = r'%s' % User.objects.make_random_password() + + try: + ldap_manager = LdapManager() + ldap_manager.create_user( + username, pwd, firstname, lastname, email + ) + except Exception as e: + return Response('While trying to create the user, an error was encountered: %s' % e, 400) + + # send user credentials via email + creationtime = int(datetime.utcnow().timestamp()) + # Construct the data for the email + email_from = settings.EMAIL_FROM_ADDRESS + to = ['%s <%s>' % (username, email)] + subject = 'Your datacenterlight credentials' + body = 'Your user was successfully created.\n' + body += 'Your credentials are:\n' + body += 'Username: %s\n\n' % username + body += 'Password: %s\n\n' % pwd + body += 'We strongly recommend you to after log in change your password.\n' + # Build the email + mail = EmailMessage( + subject=subject, + body=body, + from_email=email_from, + to=to + ) + try: + mail.send() + except: + return Response('User was created, but failed to send the email', 201) + return Response('User successfully created', 200)