Updated Service Directory url and cleaned some comments
[unfold.git] / portal / joinview.py
index caea6d2..65d8351 100644 (file)
@@ -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
@@ -19,7 +19,7 @@ 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 theme import ThemeView
+from myslice.theme import ThemeView
 
 # since we inherit from FreeAccessView we cannot redefine 'dispatch'
 # so let's override 'get' and 'post' instead
@@ -45,7 +45,7 @@ class JoinView (FreeAccessView, ThemeView):
         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
@@ -89,15 +89,15 @@ class JoinView (FreeAccessView, ThemeView):
                 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.')
@@ -117,12 +117,13 @@ class JoinView (FreeAccessView, ThemeView):
             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, 
@@ -145,8 +146,12 @@ class JoinView (FreeAccessView, ThemeView):
                     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()
 
@@ -154,32 +159,64 @@ class JoinView (FreeAccessView, ThemeView):
                 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, 'status': 1}
-                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 = {