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))