Emails: use templates for all emails - To be tested !
[myslice.git] / portal / registrationview.py
index c133a57..9f5f39f 100644 (file)
@@ -2,8 +2,6 @@ import os.path, re
 import json
 from random import randint
 
-from django.core.mail           import send_mail
-from django.contrib.auth.models import User
 from django.views.generic       import View
 from django.template.loader     import render_to_string
 from django.shortcuts           import render
@@ -17,7 +15,7 @@ from manifoldapi.manifoldapi    import execute_admin_query
 from manifold.core.query        import Query
 
 from portal.models              import PendingUser
-from portal.actions             import authority_get_pi_emails, manifold_add_user,manifold_add_account
+from portal.actions             import create_pending_user
 
 from theme import ThemeView
 
@@ -42,14 +40,7 @@ class RegistrationView (FreeAccessView, ThemeView):
         authorities = execute_admin_query(wsgi_request, authorities_query)
         if authorities is not None:
             authorities = sorted(authorities)
-
-        # xxx tocheck - if authorities is empty, it's no use anyway
-        # (users won't be able to validate the form anyway)
-
-        # Who am I ?
-        user_query  = Query().get('local:user').select('user_id','email')
-        user_details = execute_admin_query(wsgi_request, user_query)
-
+        
         # Page rendering
         page = Page(wsgi_request)
         page.add_js_files  ( [ "js/jquery.validate.js", "js/my_account.register.js" ] )
@@ -68,10 +59,10 @@ class RegistrationView (FreeAccessView, ThemeView):
             }
 
             # Construct user_hrn from email (XXX Should use common code)
-            split_email = reg_email.split("@")[0] 
+            split_email = user_request['email'].split("@")[0] 
             split_email = split_email.replace(".", "_")
             user_request['user_hrn'] = user_request['authority_hrn'] \
-                     + '.' + split_email + str(randint(1,1000000))
+                     + '.' + split_email
             
             # Validate input
             UserModel = get_user_model()
@@ -84,10 +75,23 @@ class RegistrationView (FreeAccessView, ThemeView):
                 errors.append('Email is pending for validation. Please provide a new email address.')
             if UserModel._default_manager.filter(email__iexact = user_request['email']): 
                 errors.append('This email is not usable. Please contact the administrator or try with another email.')
+            # Does the user exist in Manifold?
+            user_query  = Query().get('local:user').select('user_id','email')
+            user_details = execute_admin_query(wsgi_request, user_query)
             for user_detail in user_details:
                 if user_detail['email'] == user_request['email']:
                     errors.append('Email already registered in Manifold. Please provide a new email address.')
-
+            # Does the user exist in sfa? [query is very slow!!]
+            user_query  = Query().get('user').select('user_hrn','user_email')
+            user_details_sfa = execute_admin_query(wsgi_request, user_query)
+            for user in user_details_sfa:
+                if user['user_email'] == user_request['email']:
+                    errors.append('Email already registered in SFA registry. Please use another email.')
+                if user['user_hrn'] == user_request['user_hrn']:
+                    # add random number if user_hrn already exists in the registry
+                    user_request['user_hrn'] = user_request['authority_hrn'] \
+                            + '.' + split_email + str(randint(1,1000000))
+                
             # XXX TODO: Factorize with portal/accountview.py
             if 'generate' in wsgi_request.POST['question']:
                 user_request['auth_type'] = 'managed'
@@ -99,7 +103,7 @@ class RegistrationView (FreeAccessView, ThemeView):
                 # Example: private_key = '-----BEGIN RSA PRIVATE KEY-----\nMIIC...'
                 # Example: public_key = 'ssh-rsa AAAAB3...'
                 user_request['private_key'] = private.exportKey()
-                user_request['public_key']  = private.public_key().exportKey(format='OpenSSH')
+                user_request['public_key']  = private.publickey().exportKey(format='OpenSSH')
 
             else: 
                 user_request['auth_type'] = 'user'
@@ -122,9 +126,8 @@ class RegistrationView (FreeAccessView, ThemeView):
                 self.template_name = 'user_register_complete.html'
                 return render(wsgi_request, self.template, {'theme': self.theme}) 
 
-
-        # Backlashed \n => \\n but no surrounding " "
-        public_key_formatted = request['public_key'].replace('"', '');
+        else:
+            user_request = {}
 
         template_env = {
           'topmenu_items': topmenu_items_live('Register', page),