X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=portal%2Fjoinview.py;h=65d8351fc7ca53d6a0fef2f230f97cc644bf6ac6;hb=cf68a5051209d5b8442060f2b52f3ba8837f1b31;hp=0dc1e79e7c840a53b76acc16f1aad1985c517670;hpb=301e2abaa0831c3ddd952de5f8a3db3eb37d9edb;p=myslice.git diff --git a/portal/joinview.py b/portal/joinview.py index 0dc1e79e..65d8351f 100644 --- a/portal/joinview.py +++ b/portal/joinview.py @@ -2,7 +2,7 @@ import os.path, re import json from random import randint -from django.core.mail import send_mail +from django.core.mail import EmailMultiAlternatives from django.contrib.auth.models import User from django.views.generic import View from django.template.loader import render_to_string @@ -13,16 +13,18 @@ from unfold.page import Page from unfold.loginrequired import FreeAccessView from ui.topmenu import topmenu_items_live -from manifold.manifoldapi import execute_admin_query +from manifoldapi.manifoldapi import execute_admin_query from manifold.core.query import Query from portal.models import PendingUser,PendingAuthority from portal.actions import authority_get_pi_emails, manifold_add_user,manifold_add_account +from myslice.theme import ThemeView + # since we inherit from FreeAccessView we cannot redefine 'dispatch' # so let's override 'get' and 'post' instead # -class JoinView (FreeAccessView): +class JoinView (FreeAccessView, ThemeView): def post (self, request): return self.get_or_post (request, 'POST') @@ -43,7 +45,7 @@ class JoinView (FreeAccessView): page = Page(request) page.add_js_files ( [ "js/jquery.validate.js", "js/join.js" ] ) page.add_css_files ( [ "css/onelab.css", "css/registration.css" ] ) - page.add_css_files ( [ "http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" ] ) + page.add_css_files ( [ "https://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" ] ) if method == 'POST': # xxx tocheck - if authorities is empty, it's no use anyway @@ -87,15 +89,15 @@ class JoinView (FreeAccessView): errors.append('First Name may contain only letters, numbers, spaces and @/./+/-/_ characters.') if (re.search(r'^[\w+\s.@+-]+$', reg_lname) == None): errors.append('Last Name may contain only letters, numbers, spaces and @/./+/-/_ characters.') - if (re.search(r'^\w+$', reg_site_authority) == None): - errors.append('Site Authority may contain only letters or numbers.') + #if (re.search(r'^\w+$', reg_site_authority) == None): + # errors.append('Site Authority may contain only letters or numbers.') # checking in django_db !! if PendingUser.objects.filter(email__iexact=reg_email): errors.append('Email is pending for validation. Please provide a new email address.') - if PendingAuthority.objects.filter(site_authority__iexact=reg_auth): - errors.append('This site is pending for validation.') - if PendingAuthority.objects.filter(site_name__iexact=reg_site_name): + if PendingAuthority.objects.filter(site_abbreviated_name__iexact=reg_site_abbreviated_name): errors.append('This site is pending for validation.') + #if PendingAuthority.objects.filter(site_name__iexact=reg_site_name): + # errors.append('This site is pending for validation.') if UserModel._default_manager.filter(email__iexact=reg_email): errors.append('This email is not usable. Please contact the administrator or try with another email.') @@ -115,12 +117,13 @@ class JoinView (FreeAccessView): account_config = '{"user_public_key":'+ public_key + ', "user_private_key":'+ private_key + ', "user_hrn":"'+ user_hrn + '"}' auth_type = 'managed' public_key = public_key.replace('"', ''); + private_key = private_key.replace('"', ''); if not errors: reg_password = request.POST['pi_password'] a = PendingAuthority( site_name = reg_site_name, - site_authority = reg_root_authority_hrn + '.' + reg_site_authority, + site_authority = 'onelab.' + reg_site_abbreviated_name, site_abbreviated_name = reg_site_abbreviated_name, site_url = reg_site_url, site_latitude = reg_site_latitude, @@ -132,6 +135,7 @@ class JoinView (FreeAccessView): address_postalcode = reg_address_postalcode, address_state = reg_address_state, address_country = reg_address_country, + authority_hrn = reg_root_authority_hrn, ) a.save() @@ -142,7 +146,12 @@ class JoinView (FreeAccessView): authority_hrn = reg_auth, email = reg_email, password = reg_password, - keypair = account_config, + public_key = public_key, + private_key = private_key, + user_hrn = user_hrn, + pi = reg_auth, + email_hash = '', + status = 'True', ) b.save() @@ -150,32 +159,64 @@ class JoinView (FreeAccessView): user = User.objects.create_user(reg_email, reg_email, reg_password) #creating user to manifold local:user - user_config = '{"firstname":"'+ reg_fname + '", "lastname":"'+ reg_lname + '", "authority":"'+ reg_auth + '"}' - user_params = {'email': reg_email, 'password': reg_password, 'config': user_config} - manifold_add_user(request,user_params) + #user_config = '{"first_name":"'+ reg_fname + '", "last_name":"'+ reg_lname + '", "authority_hrn":"'+ reg_auth + '"}' + #user_params = {'email': reg_email, 'password': reg_password, 'config': user_config, 'status': 1} + #manifold_add_user(request,user_params) #creating local:account in manifold - user_id = user_detail['user_id']+1 # the user_id for the newly created user in local:user - account_params = {'platform_id': 5, 'user_id': user_id, 'auth_type': auth_type, 'config': account_config} - manifold_add_account(request,account_params) - + #user_id = user_detail['user_id']+1 # the user_id for the newly created user in local:user + #account_params = {'platform_id': 5, 'user_id': user_id, 'auth_type': auth_type, 'config': account_config} + #manifold_add_account(request,account_params) + # Send email - ctx = { - 'first_name' : reg_fname, - 'last_name' : reg_lname, - 'authority_hrn' : reg_auth, - 'email' : reg_email, - 'user_hrn' : user_hrn, - 'public_key' : public_key, - } - recipients = authority_get_pi_emails(request,reg_auth) - - # We don't need to send this email to user. - # it's for the PI only - #if ctx['cc_myself']: - # recipients.append(ctx['email']) - - msg = render_to_string('user_request_email.txt', ctx) - send_mail("Onelab New Authority request for %s submitted"%reg_email, msg, 'support@myslice.info', recipients) + try: + ctx = { + 'site_name' : reg_site_name, + 'authority_hrn' : reg_root_authority_hrn + '.' + reg_site_authority, + 'site_abbreviated_name' : reg_site_abbreviated_name, + 'site_url' : reg_site_url, + 'site_latitude' : reg_site_latitude, + 'site_longitude' : reg_site_longitude, + 'address_line1' : reg_address_line1, + 'address_line2' : reg_address_line2, + 'address_line3' : reg_address_line3, + 'address_city' : reg_address_city, + 'address_postalcode' : reg_address_postalcode, + 'address_state' : reg_address_state, + 'address_country' : reg_address_country, + 'first_name' : reg_fname, + 'last_name' : reg_lname, + 'authority_hrn' : reg_auth, + 'email' : reg_email, + 'user_hrn' : user_hrn, + 'public_key' : public_key, + } + recipients = authority_get_pi_emails(request,reg_auth) + + # We don't need to send this email to user. + # it's for the PI only + #if ctx['cc_myself']: + # recipients.append(ctx['email']) + theme.template_name = 'authority_request_email.html' + html_content = render_to_string(theme.template, ctx) + + theme.template_name = 'authority_request_email.txt' + text_content = render_to_string(theme.template, ctx) + + theme.template_name = 'authority_request_email_subject.txt' + subject = render_to_string(theme.template, ctx) + subject = subject.replace('\n', '') + + theme.template_name = 'email_default_sender.txt' + sender = render_to_string(theme.template, ctx) + sender = sender.replace('\n', '') + + msg = EmailMultiAlternatives(subject, text_content, sender, recipients) + msg.attach_alternative(html_content, "text/html") + msg.send() + + except Exception, e: + print "Failed to send email, please check the mail templates and the SMTP configuration of your server" + return render(request, 'user_register_complete.html') template_env = { @@ -199,8 +240,10 @@ class JoinView (FreeAccessView): 'address_postalcode': request.POST.get('address_postalcode', ''), 'address_state': request.POST.get('address_state', ''), 'address_country': request.POST.get('address_country', ''), + 'root_authority_hrn': request.POST.get('root_authority_hrn', '').lower(), 'root_authorities': root_authorities, 'authorities': authorities, + 'theme': self.theme } template_env.update(page.prelude_env ()) return render(request, 'join_view.html',template_env)