added rest user creation
This commit is contained in:
parent
7848f07252
commit
019ac98249
3 changed files with 66 additions and 11 deletions
|
@ -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"
|
13
dal/urls.py
13
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"),
|
||||
|
|
54
dal/views.py
54
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)
|
||||
|
|
Loading…
Reference in a new issue