Forked from
infrastruktur / warpinfra
20 commits behind the upstream repository.
-
Christian Dresen authoredChristian Dresen authored
register.py 4.24 KiB
import re
import hashlib
import os
from django.core.exceptions import ValidationError
from django import forms
from django.shortcuts import render
from django.http import HttpResponse
from warpauth.ldap_connector import LDAPConnector
from warpauth.models import LdapUser, ActivationToken, LdapGroup
from warpauth.util import *
from django.utils.translation import ugettext as _
from django.core.exceptions import ObjectDoesNotExist
from warpzone.settings import INSTANCE_NAME
from django.shortcuts import redirect
def send_token(token):
email_content = _("https://infra.warpzone.ms/account/registration/activate/%(token)s") % {'token': token.token }
ret = send_email(token.email, _("Your registration for WarpInfra"), email_content )
return ret
def register(request):
page_context['success'] = False
if "INTERN" in INSTANCE_NAME:
return redirect('http://infra.warpzone.ms/account/registration/')
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
password2 = request.POST['password2']
email = request.POST['email']
f = forms.EmailField()
try:
f.clean(email)
except ValidationError as e:
page_context["error"] = _("err_invalid_email_format")
page_context["error"] = ""
if username == "" or email == "" or password == "" or password2 == "":
page_context['error'] = _("err_fill_all_fields")
elif not re.search(r'^\w+$', username):
page_context['error'] = _("err_invalid_username")
elif password != password2:
page_context['error'] = _("err_passwords_not_matching")
elif not page_context["error"]:
u = LdapUser.objects.filter(uid=username)
if u.count() == 0:
user = LdapUser()
user.uid = username
user.first_name = "None"
user.last_name = "None"
user.cn = username
user.email = email
user.uidNumber = "513"
user.gidNumber = "100"
user.homeDirectory = "/dev/null"
user.save()
ldap_connector = LDAPConnector()
ldap_connector.change_user_password(user.build_dn(), None, request.POST["password"], True)
token = ActivationToken()
token.user = username
token.email = email
token.token = hashlib.sha1(os.urandom(128)).hexdigest()
token.save()
ret = send_token(token)
if not ret:
page_context["error"] = _("err_sending_mail") #Error while sending the email. Please contact the administrator.
else:
page_context['success'] = True
else:
page_context['error'] = _("err_username_not_available")
return HttpResponse(render(request, 'warpauth/register/register.html', page_context))
def activate(request, token=None):
if "INTERN" in INSTANCE_NAME:
return redirect('http://infra.warpzone.ms/account/registration/')
try:
activation_token = ActivationToken.objects.get(token=token)
group = LdapGroup.objects.filter(name="active").get()
group.members.append("uid="+str(activation_token.user)+",ou=users,dc=warpzone,dc=ms")
group.save()
activation_token.delete()
except ObjectDoesNotExist:
page_context["error"] = _("err_token_invalid")
return HttpResponse(render(request, 'warpauth/register/activate.html', page_context))
def resend_token(request):
if "INTERN" in INSTANCE_NAME:
return redirect('http://infra.warpzone.ms/account/registration/')
if request.method == "POST":
try:
token = ActivationToken.objects.get(user=request.POST["username"])
if token.email == request.POST["email"]:
ret = send_token(token)
if not ret:
page_context["error"] = _("err_processing_request")
page_context["success"] = True
except ObjectDoesNotExist:
page_context["error"] = _("err_processing_request")
return HttpResponse(render(request, 'warpauth/register/resend_token.html', page_context))