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
|
from django.contrib import admin
|
||||||
|
|
||||||
# Import the classes for the views
|
# 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 = [
|
urlpatterns = [
|
||||||
path('register/', Register.as_view(), name="register"),
|
path('register/', Register.as_view(), name="register"),
|
||||||
|
path('create/', UserCreateAPI.as_view(), name="create"),
|
||||||
path('changedata/', ChangeData.as_view(), name="change_data"),
|
path('changedata/', ChangeData.as_view(), name="change_data"),
|
||||||
path('resetpassword/', ResetPassword.as_view(), name="reset_password"),
|
path('resetpassword/', ResetPassword.as_view(), name="reset_password"),
|
||||||
path('changepassword/', ChangePassword.as_view(), name="change_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.shortcuts import render
|
||||||
from django.views.generic import View, FormView
|
from django.views.generic import View, FormView
|
||||||
from django.contrib.auth import authenticate, login, logout
|
from django.contrib.auth import authenticate, login, logout
|
||||||
|
from django.contrib.auth.models import User
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.core.validators import validate_email, ValidationError
|
from django.core.validators import validate_email, ValidationError
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.contrib.auth.tokens import PasswordResetTokenGenerator
|
from django.contrib.auth.tokens import PasswordResetTokenGenerator
|
||||||
from django.core.mail import EmailMessage
|
from django.core.mail import EmailMessage
|
||||||
from django.views.decorators.cache import cache_control
|
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 .models import ResetToken
|
||||||
from .forms import LoginForm
|
from .forms import LoginForm
|
||||||
from .ungleich_ldap import LdapManager
|
from .ungleich_ldap import LdapManager
|
||||||
|
@ -459,3 +462,54 @@ class PseudoUser():
|
||||||
# random alphanumeric strings for primary key and password, just used for token generation
|
# 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))
|
pk = ''.join(choice(string.ascii_letters + string.digits) for _ in range(20))
|
||||||
password = ''.join(choice(string.ascii_letters + string.digits) for _ in range(30))
|
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