FIBRE portal end of March
authorLoic & Edelberto <loic.baron@lip6.fr>
Wed, 23 Apr 2014 13:33:48 +0000 (10:33 -0300)
committerLoic & Edelberto <loic.baron@lip6.fr>
Wed, 23 Apr 2014 13:33:48 +0000 (10:33 -0300)
21 files changed:
auth/manifoldbackend.py
myslice/settings.py
myslice/urls.py
plugins/cafe-1.0/edelberto-120314.py
plugins/cafe-1.0/edelberto.py
plugins/cafe-1.0/others/edelberto.py-noupdateaccountONLY [deleted file]
plugins/cafe-1.0/others/edelberto.py.101113 [deleted file]
plugins/cafe-1.0/others/edelberto_context.py [deleted file]
plugins/cafe-1.0/others/manifoldbackend.py [deleted file]
plugins/cafe-1.0/others/sub.py [deleted file]
portal/actions.py
portal/registrationview.py
portal/templates/contact.html
portal/templates/documentationview.html
portal/templates/fibre/fibre_home-view.html
portal/templates/fibre/fibre_slice-resource-view.html
portal/templates/fibre/fibre_slice-user-view.html
portal/templates/fibre/fibre_slice-view.html
portal/templates/fibre/fibre_widget-slice-sections.html
portal/templates/registration_view.html
portal/templates/user_register.html

index 4f44661..69cbf21 100644 (file)
@@ -23,14 +23,21 @@ class ManifoldBackend:
             return None
 
         try:
-            #usernameldap is from LDAP user form. If it is filled - See portal/homeview.py too
-            usernameldap = token['usernameldap']
+            print "ManifoldBackend authenticate()"
+            # Mandatory fields in token
             username = token['username']
-            password = token['password']
             request = token['request']
 
+            # usernameldap is optional - from LDAP user form. 
+            # If it is filled - See portal/homeview.py too
+            if 'usernameldap' in token:
+                usernameldap = token['usernameldap']
+            else:
+                usernameldap = None
+            password = token['password']
             # if data are not from LDAP form then normal (local) login
             if not usernameldap:
+                print "not userldap ManifoldBackend authenticate()"
                 auth = {'AuthMethod': 'password', 'Username': username, 'AuthString': password}
                 api = ManifoldAPI(auth)
                 sessions_result = api.forward(Query.create('local:session').to_dict())
@@ -62,8 +69,9 @@ class ManifoldBackend:
             # Edelberto LDAP authentication
             # if data are from LDAP form, so
             else:
+                print "userldap ManifoldBackend authenticate()"
             # XXX UGLY
-            # Needing to create an specif entries at settings.py (or myslice.ini) for these vars
+            # Needing to create an specific entries at settings.py (or myslice.ini) for these vars
             ##################################################
             # Edelberto - UFF - esilva@ic.uff.br
             # v1 - ldap authentication module
index 8fd5d9a..cf9cbb6 100644 (file)
@@ -265,3 +265,6 @@ CSRF_FAILURE_VIEW = 'manifoldapi.manifoldproxy.csrf_failure'
 #IA_JS_FORMAT = "<script type='text/javascript' src='{URL}' />"
 # put stuff under static/
 # IA_MEDIA_PREFIX = '/code/'
+
+SESSION_ENGINE = 'django.contrib.sessions.backends.file'
+
index ffe7307..570916c 100644 (file)
@@ -16,6 +16,8 @@ import portal.platformsview
 import portal.dashboardview
 import portal.homeview
 
+import plugins.cafe.edelberto
+
 home_view=portal.homeview.HomeView.as_view()
 dashboard_view=portal.dashboardview.DashboardView.as_view()
 platforms_view=portal.platformsview.PlatformsView.as_view()
@@ -103,7 +105,7 @@ urlpatterns = patterns(*urls)
 
 # Shibboleth - Edelberto
 urlpatterns += patterns('',
-   #url(r'^cafe/', 'plugins.cafe.edelberto.EdelbertoView.as_view()'),
-   url(r'^cafe/', 'plugins.cafe.edelberto.index'),
+   url(r'^cafe/', plugins.cafe.edelberto.EdelbertoView.as_view()),
+   #url(r'^cafe/', 'plugins.cafe.edelberto.index'),
 )
 
index bbecd5c..a3ec0b4 100644 (file)
@@ -1,5 +1,10 @@
 #!/usr/bin/env python
 
+from portal.models              import PendingUser
+#from portal.actions             import create_pending_user
+# Edelberto - LDAP
+from portal.actions             import create_pending_user, ldap_create_user
+
 #Edelberto from manifoldauth
 import os,sys
 import subprocess
@@ -7,20 +12,22 @@ import shlex
 import getpass
 from hashlib import md5
 import time
-from random import Random
+from random import randint
 import crypt
 
 import re
 #from manifold.manifold.core.router import Router
 from manifold.core.query                import Query
 from manifoldapi.manifoldapi               import execute_admin_query
-from portal.actions                     import manifold_add_user, manifold_add_account, manifold_update_account
+#from portal.actions                     import manifold_add_user, manifold_add_account, manifold_update_account
+from portal.actions                     import manifold_add_account, manifold_add_reference_user_accounts, sfa_create_user, create_pending_user
 from manifold.core.query import Query
 # add user to manifold
 
+from portal.models      import  PendingUser
+
 from django.views.generic import View
 from django.core.context_processors import csrf
-#from django.http import HttpResponseRedirect
 from django.contrib.auth import authenticate, login, logout
 from django.template import RequestContext
 from django.shortcuts import render_to_response
@@ -38,20 +45,7 @@ from django.contrib.sessions.backends.db import SessionStore
 def index(request):
 #class EdelbertoView (View):
 
-# =================== Old code - to validate =================
-    '''
-    ip = "<html><body>" 
-    ip += "cn: " +  request.META['Shib-inetOrgPerson-cn'] + "</br>"
-    ip += "sn: " +  request.META['Shib-inetOrgPerson-sn'] + "</br>"
-    ip += "eppn: " + request.META['Shib-eduPerson-eduPersonPrincipalName'] + "</br>"
-    ip += "mail: " + request.META['Shib-inetOrgPerson-mail'] + "</br>"
-    ip += "Affiliation br: " + request.META['Shib-brEduPerson-brEduAffiliationType'] + "</br>"
-    ip += "Affiliation edu: " + request.META['Shib-eduPerson-eduPersonAffiliation'] + "</br>"
-    ip += "Auth-Method: " + request.META['Shib-Authentication-Method'] + "</br>"
-    ip += "Identity Provider: " + request.META['Shib-Identity-Provider'] + "</br>"
-    ip += "Application ID: " + request.META['Shib-Application-ID'] + "</br>"
-    ip += "Session ID: " + request.META['Shib-Session-ID'] + "</br>"
-    '''
+# XXX We use cookie!
 # Test cookie support
     if request.session.test_cookie_worked():
     #if session.test_cookie_worked():
@@ -77,142 +71,102 @@ def index(request):
    # return HttpResponse(ip)
    
 
-    # expose this so we can mention the backend URL on the welcome page
-    def default_env (self):
-        config=Config()
-        return { 
-                 'MANIFOLD_URL':config.manifold_url(),
-                 }
-
-    #def post (self,request):
-    #    env = self.default_env()
-        #username = request.POST.get('username')
-        #password = request.POST.get('password')
-    # if we use ABAC based on 'aff'
-    #if 'aff' in request.session.keys():
-    aff = request.session["aff"]
-    # if we use ABAC - based on 'aff'
-    #if aff == "student":
-    # XXX It's only to test the association of admin and esilva@uff.br
-    if request.session["eppn"] == 'esilva@uff.br':
-        username = 'admin'
-        password = 'admin'
-    # For all users
-    else:
-        username = request.session["mail"]
- # this is ugly. We generate a simple password with merge of mail and a string.
-        password = request.session["mail"] + "fibre2013"
-     
-        username = username.replace('"','').strip()
-        password = password.replace('"','').strip()
-    # pass request within the token, so manifold session key can be attached to the request session.
-    token = {'username': username, 'password': password, 'request': request}    
-
-        # our authenticate function returns either
+    # XXX It's only to test the association of pi and esilva@uff.br
+        if request.session["eppn"] == 'esilva@uff.br':
+            username = 'rezende@ufrj'
+            password = 'fibre2014'
+            # pass request within the token, so manifold session key can be attached to the request session.
+            token = {'username': username, 'password': password, 'request': request}    
+        # . a ManifoldResult - when something has gone wrong, like e.g. backend is unreachable
+        # For all users - Verifying if he exists in MySlice/Manifold
+        else:
+            username = request.session["mail"]
+            # this is ugly. We generate a simple password merging mail "fibre" and sn.
+            password = request.session["mail"] + "fibre" + request.session["sn"]
+         
+            # If we have " we remove
+            username = username.replace('"','').strip()
+            password = password.replace('"','').strip()
+        
+            # pass request within the token, so manifold session key can be attached to the request session.
+            token = {'username': username, 'password': password, 'request': request}    
         # . a ManifoldResult - when something has gone wrong, like e.g. backend is unreachable
         # . a django User in case of success
         # . or None if the backend could be reached but the authentication failed
-    auth_result = authenticate(token=token)
+        auth_result = authenticate(token=token)
+        print auth_result
+        print token
         # high-level errors, like connection refused or the like
-    
-    if isinstance (auth_result, ManifoldResult):
-        manifoldresult = auth_result
-        # let's use ManifoldResult.__repr__
-        '''
-        env['state']="%s"%manifoldresult
-        return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-    '''
-        htm =  "<meta http-equiv=\"refresh\" content=\"0; url=https://sp-fibre.cafeexpresso.rnp.br/login-ok\" />"
-        return HttpResponse (htm)    
-        # user was authenticated at the backend
-    elif auth_result is not None:
-        user=auth_result
-    
-    if user.is_active:
-        print "LOGGING IN"
-        login(request, user)
-        htm = "<meta http-equiv=\"refresh\" content=\"0; url=https://sp-fibre.cafeexpresso.rnp.br/login-ok\" />"
-            #return HttpResponseRedirect ('/login-ok')
-        return HttpResponse (htm)
-    else:
-        env['state'] = "Your account is not active, please contact the site admin."
-        return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-    # otherwise
-    else:
-    '''
-        magic = "$1$"
-        password = password
-        # Generate a somewhat unique 8 character salt string
-        salt = str(time.time()) + str(Random().random())
-        salt = md5(salt).hexdigest()[:8]
-
-        if len(password) <= len(magic) or password[0:len(magic)] != magic:
-        password = crypt.crypt(password.encode('latin1'), magic + salt + "$")
-
-        user_params = {
-            'email': username,
-        'password': password
-    }
-    query = Query(action='create', object='local:user', params=user_params)
-
-
-        # Instantiate a TopHat router
-    with Router() as router:
-        router.forward(query)
-    '''
-    #myArgs=[username,password]
-    #os.spawnlp(os.P_WAIT,'/tmp/adduser.py', username, password, '/bin/bash/'i)
-    #command = '/var/www/manifold/manifold/bin/adduser.py ' + username + ' ' + password
-    #command = 'ls -la'
-            #args = shlex.split(command)
-            #p = subprocess.Popen(args, stdin=subprocess.PIPE).communicate()[0]
-        #print command
-        #print args
-        #print p
-    #env['state'] = "Now your CAFe user is associated to your MySlice account - Please logging in CAFe again."
-    #return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-    user_params = { 'email': username, 'password': password }
-    manifold_add_user(request,user_params)
-    
-    #query = Query().get('user').filter_by('email', '=', username).select('user_id')
-    #user = execute_admin_query(request,query)
-    #print "USER_ID:" + user
-    #user_id = user['user_id']
-    #user_id = user[0]
-    #print user_id
-    #splitmail = username.split("@")[0]
-    #user_params = { 'user': splitmail, 'platform': 'myslice' }
-    #user_params = { 'user_id': '2', 'platform_id': '2' }
-    #manifold_add_account(request,user_params)
-
-    # Ugly! Forcing the association of user and platform. This need to be automatic.   
-    splitmail = username.split("@")[0]
-    user = splitmail.replace('"','').strip()
-    hrn = "fibrebr.dummy." + user
-    user_hrn = '{ "user_hrn": "'+ hrn +'" }'
-    #user_params = { 'config': user_hrn, 'auth_type': 'managed' }
-    user_params2 = { 'user_id': '2', 'platform_id': '2', 'config': user_hrn, 'auth_type': 'managed' }
-    manifold_add_account(request,user_params2)
-
-    ##user_id = '3'
-    #manifold_update_account(request,user_params)
-    html = "Now your CAFe user is associated with a MySlice account - Please login in CAFe again."
-    return HttpResponse(html)
-
-     # If we use ABAC - based on 'aff'
-     #   else:
-        #   #env['state'] = "Your affiliation (" + request.session["aff"] + ") at CAFe is not accepted."
-        #   html = "Your CAFe affiliation (" + request.session["aff"] + ") is not accepted. <br> Only \"student\" affiliation."
-        #   return HttpResponse(html)
-           #return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-           
-
-           # login-ok sets state="Welcome to MySlice" in urls.py
-       def get (self, request, state=None):
-           env = self.default_env()
-           env['username']=the_user(request)
-           env['topmenu_items'] = topmenu_items(None, request)
-           if state: env['state'] = state
-           elif not env['username']: env['state'] = "Please sign in"
-           return HttpResponseRedirect ('/login-ok')
-       #return render_to_response('home-view.html',env, context_instance=RequestContext(request))
+        
+        if isinstance (auth_result, ManifoldResult):
+            manifoldresult = auth_result
+            htm =  "<meta http-equiv=\"refresh\" content=\"0; url=https://sp-fibre.cafeexpresso.rnp.br/login-ok\" />"
+            return HttpResponse (htm)    
+            # user was authenticated at the backend
+        elif auth_result is not None:
+            user=auth_result
+        
+            # Verifying if user is active to logging in
+            if user.is_active:
+                print "LOGGING IN"
+                login(request, user)
+                htm = "<meta http-equiv=\"refresh\" content=\"0; url=https://sp-fibre.cafeexpresso.rnp.br/login-ok\" />"
+                #return HttpResponseRedirect ('/login-ok')
+                return HttpResponse (htm)
+            else:
+                # Today all CAFe accounts are actived
+                htm = "Your account is not active, please contact the site admin."
+                return HttpResponse (htm)
+        
+
+        # otherwise
+        # Creating the user at manifold, myslice and sfa
+        else:
+            user_params = { 'email': username, 'password': password }
+            user_request = {}
+
+            user_request['auth_type'] = 'managed'
+
+            # XXX Common code, dependency ?
+            from Crypto.PublicKey import RSA
+            private = RSA.generate(1024)
+
+            # 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.publickey().exportKey(format='OpenSSH')
+            
+            splitmail = username.split("@")[0]
+            user = splitmail.replace('"','').strip()
+            hrn = "fibre." + user + str(randint(1,100000))
+
+            user_request['user_hrn'] = hrn            
+            
+            user_request['first_name'] = request.session['cn']
+            user_request['last_name'] = request.session['sn']
+            user_request['authority_hrn'] = "fibre"
+            user_request['email'] = username
+            user_request['password'] = password
+            user_request['public_key'] = user_request['public_key']
+            user_request['private_key'] = user_request['private_key']
+           
+            # Verify in django
+            if PendingUser.objects.filter(email__iexact = user_request['email']):
+                htm = "Erro - User with same email from CAFe exists in Django"
+            # verify in manifol
+            user_query = Query().get('local:user').select('user_id','email')
+            user_details = execute_admin_query(request, user_query)
+            for user_detail in user_details:
+                if user_detail['email'] == user_request['email']:
+                    htm = "Erro - user exist in SFA Registry"
+                try:
+                    if user_detail['user_hrn'] == user_request['user_hrn']:
+                        htm =  "Erro - user with the same hrn in SFA Registry"
+                except: 
+                    continue
+        
+            
+            create_pending_user(user_request, user_request, user_detail)
+
+            return HttpResponse(htm)
+        return HttpResponse(htm)
index a3ec0b4..19be099 100644 (file)
@@ -1,9 +1,8 @@
 #!/usr/bin/env python
 
+
+# XXX We need to clean it!!
 from portal.models              import PendingUser
-#from portal.actions             import create_pending_user
-# Edelberto - LDAP
-from portal.actions             import create_pending_user, ldap_create_user
 
 #Edelberto from manifoldauth
 import os,sys
@@ -18,13 +17,14 @@ import crypt
 import re
 #from manifold.manifold.core.router import Router
 from manifold.core.query                import Query
-from manifoldapi.manifoldapi               import execute_admin_query
+from manifoldapi.manifoldapi               import execute_admin_query, execute_query
 #from portal.actions                     import manifold_add_user, manifold_add_account, manifold_update_account
-from portal.actions                     import manifold_add_account, manifold_add_reference_user_accounts, sfa_create_user, create_pending_user
+#from portal.actions                     import manifold_add_account, manifold_add_reference_user_accounts, sfa_create_user, create_pending_user
+from portal.actions                     import create_pending_user, create_user
 from manifold.core.query import Query
 # add user to manifold
 
-from portal.models      import  PendingUser
+from unfold.loginrequired   import FreeAccessView
 
 from django.views.generic import View
 from django.core.context_processors import csrf
@@ -32,7 +32,7 @@ from django.contrib.auth import authenticate, login, logout
 from django.template import RequestContext
 from django.shortcuts import render_to_response
 
-from manifold.manifoldresult import ManifoldResult
+from manifoldapi.manifoldresult import ManifoldResult, ManifoldCode, ManifoldException
 from ui.topmenu import topmenu_items, the_user
 from myslice.configengine import ConfigEngine
 
@@ -42,118 +42,152 @@ from django.http import HttpResponse
 #from django.template import  RequestContext
 from django.contrib.sessions.backends.db import SessionStore
 
-def index(request):
-#class EdelbertoView (View):
-
-# XXX We use cookie!
-# Test cookie support
-    if request.session.test_cookie_worked():
-    #if session.test_cookie_worked():
-        return HttpResponse("Please enable cookies and try again.")
-        #return
-        print "Please enable cookies and try again."
-    else:
-        request.session['cn'] = request.META['Shib-inetOrgPerson-cn']
-        request.session['sn'] = request.META['Shib-inetOrgPerson-sn']
-        request.session['mail'] = request.META['Shib-inetOrgPerson-mail']
-        request.session['eppn'] = request.META['Shib-eduPerson-eduPersonPrincipalName']
-        #request.session['aff'] = request.META['Shib-brEduPerson-brEduAffiliationType']
-        request.session['aff'] = request.META['Shib-eduPerson-eduPersonAffiliation']
-       request.session['shib'] = request.META['Shib-Session-ID']
+from portal.homeview import HomeView
 
-        if 'mail' in request.session.keys():
-             print "Cookie: OK -> Content: cn:" + request.session["cn"] + " sn " +request.session["sn"] + " mail: " + request.session["mail"] + " eppn: " + request.session["eppn"]
-             #ip += "Cookie: OK -> Content: cn:" + request.session["cn"] + " mail: " + request.session["mail"] + " eppn: " + request.session["eppn"]  + "</body></html>"
+# View for authenticate the user
+class EdelbertoView (HomeView):
+    def get(self,request):
+        env = self.default_env()
+        env['theme'] = self.theme
+        print "EdelbertoView"
+    
+    # XXX We use cookie!
+    # Test cookie support
+        if request.session.test_cookie_worked():
+        #if session.test_cookie_worked():
+            return HttpResponse("Please enable cookies and try again.")
+            #return
+            print "Please enable cookies and try again."
         else:
-             print "Cookie: nothing/clear"
-             #ip += "Cookie: nothing/clear </body></html>"
+            request.session['cn'] = request.META['Shib-inetOrgPerson-cn']
+            request.session['sn'] = request.META['Shib-inetOrgPerson-sn']
+            request.session['mail'] = request.META['Shib-inetOrgPerson-mail']
+            request.session['eppn'] = request.META['Shib-eduPerson-eduPersonPrincipalName']
+            #request.session['aff'] = request.META['Shib-brEduPerson-brEduAffiliationType']
+            request.session['aff'] = request.META['Shib-eduPerson-eduPersonAffiliation']
+            request.session['shib'] = request.META['Shib-Session-ID']
     
-   # return HttpResponse(ip)
-   
-
-    # XXX It's only to test the association of pi and esilva@uff.br
+            if 'mail' in request.session.keys():
+                 print "Cookie: OK -> Content: cn:" + request.session["cn"] + " sn " +request.session["sn"] + " mail: " + request.session["mail"] + " eppn: " + request.session["eppn"]
+                 #ip += "Cookie: OK -> Content: cn:" + request.session["cn"] + " mail: " + request.session["mail"] + " eppn: " + request.session["eppn"]  + "</body></html>"
+            else:
+                 print "Cookie: nothing/clear"
+                 #ip += "Cookie: nothing/clear </body></html>"
+        # Cookies test finish
+       # return HttpResponse(ip)
+    
+        # expose this so we can mention the backend URL on the welcome page
+        def default_env (self):
+            return {
+                     'MANIFOLD_URL':ConfigEngine().manifold_url(),
+                     }
+    
+    
+        # XXX It's only to test the association of pi and esilva@uff.br
         if request.session["eppn"] == 'esilva@uff.br':
             username = 'rezende@ufrj'
             password = 'fibre2014'
-            # pass request within the token, so manifold session key can be attached to the request session.
-            token = {'username': username, 'password': password, 'request': request}    
-        # . a ManifoldResult - when something has gone wrong, like e.g. backend is unreachable
-        # For all users - Verifying if he exists in MySlice/Manifold
+            print "eppn OK"
+        # If the user is not esilva@uff.br, so run the normal authentication
         else:
             username = request.session["mail"]
-            # this is ugly. We generate a simple password merging mail "fibre" and sn.
+            # XXX this is ugly. We generate a simple password merging mail "fibre" and sn.
             password = request.session["mail"] + "fibre" + request.session["sn"]
-         
+    
             # If we have " we remove
             username = username.replace('"','').strip()
             password = password.replace('"','').strip()
-        
-            # pass request within the token, so manifold session key can be attached to the request session.
-            token = {'username': username, 'password': password, 'request': request}    
+    
+        # pass request within the token, so manifold session key can be attached to the request session.
+        token = {'username': username, 'password': password, 'request': request}
+    
         # . a ManifoldResult - when something has gone wrong, like e.g. backend is unreachable
         # . a django User in case of success
         # . or None if the backend could be reached but the authentication failed
         auth_result = authenticate(token=token)
-        print auth_result
-        print token
-        # high-level errors, like connection refused or the like
         
+        # XXX Error - We need a toke, not send parameters directly!
+        #auth_result = authenticate(username='rezende@ufrj', password='fibre2014', request=request)
+        print "Auth Result CAFe"
+        print type(auth_result)
+        # high-level errors, like connection refused or the like
+    
         if isinstance (auth_result, ManifoldResult):
             manifoldresult = auth_result
-            htm =  "<meta http-equiv=\"refresh\" content=\"0; url=https://sp-fibre.cafeexpresso.rnp.br/login-ok\" />"
-            return HttpResponse (htm)    
+            #htm =  "<meta http-equiv=\"refresh\" content=\"0; url=https://200.130.15.182/login\" />"
+            htm = "not authenticated"
+            return HttpResponse (htm)
             # user was authenticated at the backend
         elif auth_result is not None:
             user=auth_result
-        
+    
             # Verifying if user is active to logging in
             if user.is_active:
                 print "LOGGING IN"
                 login(request, user)
-                htm = "<meta http-equiv=\"refresh\" content=\"0; url=https://sp-fibre.cafeexpresso.rnp.br/login-ok\" />"
+                
+                #if request.user.is_authenticated():
+                #    env['person'] = username
+                #    env['username'] = username
+                #else:
+                #    env['person'] = None
+    
+                htm = "<meta http-equiv=\"refresh\" content=\"0; url=https://200.130.15.182/login\" />"
                 #return HttpResponseRedirect ('/login-ok')
                 return HttpResponse (htm)
+                #return render_to_response(self.template,env, context_instance=RequestContext(request))
             else:
                 # Today all CAFe accounts are actived
                 htm = "Your account is not active, please contact the site admin."
                 return HttpResponse (htm)
-        
-
+    
         # otherwise
         # Creating the user at manifold, myslice and sfa
+        # XXX It's the first of CAFe user in MySlice!
         else:
+            # Get the username and password
             user_params = { 'email': username, 'password': password }
             user_request = {}
-
+    
+            # set the auth_type = managed
             user_request['auth_type'] = 'managed'
-
-            # XXX Common code, dependency ?
+    
+            # XXX Generating the key pairs for CAFe user
             from Crypto.PublicKey import RSA
             private = RSA.generate(1024)
-
+    
             # 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.publickey().exportKey(format='OpenSSH')
-            
+    
+            # Generate a HRN different for all users (plus random int)
+            # Getting the username
             splitmail = username.split("@")[0]
+            # Getting the organization. The same of authority 
+            # testbed name
+            org = username.split('@')[1]
+            o = org.split('.')[-2]     
             user = splitmail.replace('"','').strip()
-            hrn = "fibre." + user + str(randint(1,100000))
-
-            user_request['user_hrn'] = hrn            
-            
+            # Finally creating the HRN
+            hrn = "fibre." + o + "." + user + str(randint(1,100000))
+    
+            user_request['user_hrn'] = hrn
+    
+            # Others fields we can get from CAFe database
             user_request['first_name'] = request.session['cn']
             user_request['last_name'] = request.session['sn']
-            user_request['authority_hrn'] = "fibre"
+            # We need to put the user below its authority
+            user_request['authority_hrn'] = "fibre." + o
             user_request['email'] = username
             user_request['password'] = password
             user_request['public_key'] = user_request['public_key']
             user_request['private_key'] = user_request['private_key']
-           
-            # Verify in django
+    
+            # Verify in django if user exist
             if PendingUser.objects.filter(email__iexact = user_request['email']):
                 htm = "Erro - User with same email from CAFe exists in Django"
-            # verify in manifol
+            # verify in manifold and SFA if user exist
             user_query = Query().get('local:user').select('user_id','email')
             user_details = execute_admin_query(request, user_query)
             for user_detail in user_details:
@@ -162,11 +196,13 @@ def index(request):
                 try:
                     if user_detail['user_hrn'] == user_request['user_hrn']:
                         htm =  "Erro - user with the same hrn in SFA Registry"
-                except: 
+                except:
                     continue
-        
-            
+    
+            # first we create a uer with pending flag
             create_pending_user(user_request, user_request, user_detail)
-
+            # after we enable this user and put in SFA
+            create_user(user_request, user_request)
+    
+            htm = "Now your CAFe user is associated with a MySlice account - Please return to the home and log in CAFe again."
             return HttpResponse(htm)
-        return HttpResponse(htm)
diff --git a/plugins/cafe-1.0/others/edelberto.py-noupdateaccountONLY b/plugins/cafe-1.0/others/edelberto.py-noupdateaccountONLY
deleted file mode 100644 (file)
index 67fe0f4..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-#!/usr/bin/env python
-
-#Edelberto from manifoldauth
-import os,sys
-import subprocess
-import shlex
-import getpass
-from hashlib import md5
-import time
-from random import Random
-import crypt
-
-import re
-#from manifold.manifold.core.router import Router
-from manifold.core.query                import Query
-from manifold.manifoldapi               import execute_admin_query
-from portal.actions                     import manifold_add_user, manifold_add_account, manifold_update_account
-from manifold.core.query import Query
-# add user to manifold
-
-from django.views.generic import View
-from django.core.context_processors import csrf
-#from django.http import HttpResponseRedirect
-from django.contrib.auth import authenticate, login, logout
-from django.template import RequestContext
-from django.shortcuts import render_to_response
-
-from manifold.manifoldresult import ManifoldResult
-from ui.topmenu import topmenu_items, the_user
-from myslice.config import Config
-
-#from django.http import HttpResponse HttpResponseRedirect
-from django.http import HttpResponse
-#from django.http import HttpResponseRedirect
-#from django.template import  RequestContext
-from django.contrib.sessions.backends.db import SessionStore
-
-def index(request):
-#class EdelbertoView (View):
-
-# =================== Old code - to validate =================
-    '''
-    ip = "<html><body>" 
-    ip += "cn: " +  request.META['Shib-inetOrgPerson-cn'] + "</br>"
-    ip += "sn: " +  request.META['Shib-inetOrgPerson-sn'] + "</br>"
-    ip += "eppn: " + request.META['Shib-eduPerson-eduPersonPrincipalName'] + "</br>"
-    ip += "mail: " + request.META['Shib-inetOrgPerson-mail'] + "</br>"
-    ip += "Affiliation br: " + request.META['Shib-brEduPerson-brEduAffiliationType'] + "</br>"
-    ip += "Affiliation edu: " + request.META['Shib-eduPerson-eduPersonAffiliation'] + "</br>"
-    ip += "Auth-Method: " + request.META['Shib-Authentication-Method'] + "</br>"
-    ip += "Identity Provider: " + request.META['Shib-Identity-Provider'] + "</br>"
-    ip += "Application ID: " + request.META['Shib-Application-ID'] + "</br>"
-    ip += "Session ID: " + request.META['Shib-Session-ID'] + "</br>"
-    '''
-# Test cookie support
-    if request.session.test_cookie_worked():
-    #if session.test_cookie_worked():
-        return HttpResponse("Please enable cookies and try again.")
-        #return
-        print "Please enable cookies and try again."
-    else:
-        request.session['cn'] = request.META['Shib-inetOrgPerson-cn']
-        request.session['mail'] = request.META['Shib-inetOrgPerson-mail']
-        request.session['eppn'] = request.META['Shib-eduPerson-eduPersonPrincipalName']
-        #request.session['aff'] = request.META['Shib-brEduPerson-brEduAffiliationType']
-        request.session['aff'] = request.META['Shib-eduPerson-eduPersonAffiliation']
-       request.session['shib'] = request.META['Shib-Session-ID']
-
-        if 'mail' in request.session.keys():
-             print "Cookie: OK -> Content: cn:" + request.session["cn"] + " mail: " + request.session["mail"] + " eppn: " + request.session["eppn"]
-             #ip += "Cookie: OK -> Content: cn:" + request.session["cn"] + " mail: " + request.session["mail"] + " eppn: " + request.session["eppn"]  + "</body></html>"
-        else:
-             print "Cookie: nothing/clear"
-             #ip += "Cookie: nothing/clear </body></html>"
-    
-   # return HttpResponse(ip)
-   
-
-    # expose this so we can mention the backend URL on the welcome page
-    def default_env (self):
-        config=Config()
-        return { 
-                 'MANIFOLD_URL':config.manifold_url(),
-                 }
-
-    #def post (self,request):
-    #    env = self.default_env()
-        #username = request.POST.get('username')
-        #password = request.POST.get('password')
-    if 'aff' in request.session.keys():
-        aff = request.session["aff"]
-        if aff == "student":
-            if request.session["eppn"] == 'esilva@uff.br':
-                username = 'admin'
-                password = 'fibre2013'
-            else:
-                 username = request.session["mail"]
-                 password = request.session["mail"] + "fibre2013"
-                username = username.replace('"','').strip()
-                password = password.replace('"','').strip()
-               # pass request within the token, so manifold session key can be attached to the request session.
-           token = {'username': username, 'password': password, 'request': request}    
-
-               # our authenticate function returns either
-                   # . a ManifoldResult - when something has gone wrong, like e.g. backend is unreachable
-                   # . a django User in case of success
-                   # . or None if the backend could be reached but the authentication failed
-           auth_result = authenticate(token=token)
-                   # high-level errors, like connection refused or the like
-           if isinstance (auth_result, ManifoldResult):
-               manifoldresult = auth_result
-                   # let's use ManifoldResult.__repr__
-               env['state']="%s"%manifoldresult
-               return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-                   # user was authenticated at the backend
-           elif auth_result is not None:
-               user=auth_result
-               if user.is_active:
-                   print "LOGGING IN"
-                   login(request, user)
-                   htm = "<meta http-equiv=\"refresh\" content=\"0; url=https://sp-php.cafeexpresso.rnp.br/login-ok\" />"
-                   #return HttpResponseRedirect ('/login-ok')
-                   return HttpResponse (htm)
-               else:
-                   env['state'] = "Your account is not active, please contact the site admin."
-                   return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-               # otherwise
-           else:
-               '''
-               magic = "$1$"
-               password = password
-               # Generate a somewhat unique 8 character salt string
-               salt = str(time.time()) + str(Random().random())
-               salt = md5(salt).hexdigest()[:8]
-
-               if len(password) <= len(magic) or password[0:len(magic)] != magic:
-                   password = crypt.crypt(password.encode('latin1'), magic + salt + "$")
-
-               user_params = {
-                   'email': username,
-                   'password': password
-               }
-               query = Query(action='create', object='local:user', params=user_params)
-
-
-                   # Instantiate a TopHat router
-               with Router() as router:
-                   router.forward(query)
-               '''
-               #myArgs=[username,password]
-               #os.spawnlp(os.P_WAIT,'/tmp/adduser.py', username, password, '/bin/bash/'i)
-               #command = '/var/www/manifold/manifold/bin/adduser.py ' + username + ' ' + password
-               #command = 'ls -la'
-                #args = shlex.split(command)
-                #p = subprocess.Popen(args, stdin=subprocess.PIPE).communicate()[0]
-               #print command
-               #print args
-               #print p
-               #env['state'] = "Now your CAFe user is associated to your MySlice account - Please logging in CAFe again."
-               #return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-               user_params = { 'email': username, 'password': password }
-               manifold_add_user(request,user_params)
-               
-               #query = Query().get('user').filter_by('email', '=', username).select('user_id')
-               #user = execute_admin_query(request,query)
-               #print "USER_ID:" + user
-               #user_id = user['user_id']
-               #user_id = user[0]
-               #print user_id
-               #splitmail = username.split("@")[0]
-               #user_params = { 'user': splitmail, 'platform': 'myslice' }
-               user_params = { 'user_id': '3', 'platform_id': '2' }
-               manifold_add_account(request,user_params)
-       
-               splitmail = username.split("@")[0]
-               user_hrn = '{"user_hrn": "fibrebr.dummy."'+ splitmail + '"}'
-               user_params = { 'config': user_hrn, 'auth_type':'managed'}
-               manifold_update_account(request,user_params)
-               html = "Now your CAFe user is associated with a MySlice account - Please login in CAFe again."
-               return HttpResponse(html)
-
-        else:
-           #env['state'] = "Your affiliation (" + request.session["aff"] + ") at CAFe is not accepted."
-           html = "Your CAFe affiliation (" + request.session["aff"] + ") is not accepted. <br> Only \"student\" affiliation."
-           return HttpResponse(html)
-           #return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-           
-
-           # login-ok sets state="Welcome to MySlice" in urls.py
-       def get (self, request, state=None):
-           env = self.default_env()
-           env['username']=the_user(request)
-           env['topmenu_items'] = topmenu_items(None, request)
-           if state: env['state'] = state
-           elif not env['username']: env['state'] = "Please sign in"
-           return HttpResponseRedirect ('/login-ok')
-       #return render_to_response('home-view.html',env, context_instance=RequestContext(request))
diff --git a/plugins/cafe-1.0/others/edelberto.py.101113 b/plugins/cafe-1.0/others/edelberto.py.101113
deleted file mode 100644 (file)
index 93a0a15..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/usr/bin/env python
-
-#Edelberto from manifoldauth
-import os,sys
-import subprocess
-import shlex
-import getpass
-from hashlib import md5
-import time
-from random import Random
-import crypt
-
-#from manifold.manifold.core.router import Router
-from manifold.core.query import Query
-# add user to manifold
-
-from django.views.generic import View
-from django.core.context_processors import csrf
-#from django.http import HttpResponseRedirect
-from django.contrib.auth import authenticate, login, logout
-from django.template import RequestContext
-from django.shortcuts import render_to_response
-
-from manifold.manifoldresult import ManifoldResult
-from ui.topmenu import topmenu_items, the_user
-from myslice.config import Config
-
-#from django.http import HttpResponse HttpResponseRedirect
-from django.http import HttpResponse
-#from django.http import HttpResponseRedirect
-#from django.template import  RequestContext
-from django.contrib.sessions.backends.db import SessionStore
-
-def index(request):
-#class EdelbertoView (View):
-
-# =================== Old code - to validate =================
-    '''
-    ip = "<html><body>" 
-    ip += "cn: " +  request.META['Shib-inetOrgPerson-cn'] + "</br>"
-    ip += "sn: " +  request.META['Shib-inetOrgPerson-sn'] + "</br>"
-    ip += "eppn: " + request.META['Shib-eduPerson-eduPersonPrincipalName'] + "</br>"
-    ip += "mail: " + request.META['Shib-inetOrgPerson-mail'] + "</br>"
-    ip += "Affiliation br: " + request.META['Shib-brEduPerson-brEduAffiliationType'] + "</br>"
-    ip += "Affiliation edu: " + request.META['Shib-eduPerson-eduPersonAffiliation'] + "</br>"
-    ip += "Auth-Method: " + request.META['Shib-Authentication-Method'] + "</br>"
-    ip += "Identity Provider: " + request.META['Shib-Identity-Provider'] + "</br>"
-    ip += "Application ID: " + request.META['Shib-Application-ID'] + "</br>"
-    ip += "Session ID: " + request.META['Shib-Session-ID'] + "</br>"
-    '''
-# Test cookie support
-    if request.session.test_cookie_worked():
-    #if session.test_cookie_worked():
-        return HttpResponse("Please enable cookies and try again.")
-        #return
-        print "Please enable cookies and try again."
-    else:
-        request.session['cn'] = request.META['Shib-inetOrgPerson-cn']
-        request.session['mail'] = request.META['Shib-inetOrgPerson-mail']
-        request.session['eppn'] = request.META['Shib-eduPerson-eduPersonPrincipalName']
-        #request.session['aff'] = request.META['Shib-brEduPerson-brEduAffiliationType']
-        request.session['aff'] = request.META['Shib-eduPerson-eduPersonAffiliation']
-       request.session['shib'] = request.META['Shib-Session-ID']
-
-        if 'mail' in request.session.keys():
-             print "Cookie: OK -> Content: cn:" + request.session["cn"] + " mail: " + request.session["mail"] + " eppn: " + request.session["eppn"]
-             #ip += "Cookie: OK -> Content: cn:" + request.session["cn"] + " mail: " + request.session["mail"] + " eppn: " + request.session["eppn"]  + "</body></html>"
-        else:
-             print "Cookie: nothing/clear"
-             #ip += "Cookie: nothing/clear </body></html>"
-    
-   # return HttpResponse(ip)
-   
-
-    # expose this so we can mention the backend URL on the welcome page
-    def default_env (self):
-        config=Config()
-        return { 
-                 'MANIFOLD_URL':config.manifold_url(),
-                 }
-
-    #def post (self,request):
-    #    env = self.default_env()
-        #username = request.POST.get('username')
-        #password = request.POST.get('password')
-    if 'aff' in request.session.keys():
-        aff = request.session["aff"]
-        if aff == "student":
-            if request.session["eppn"] == 'esilva@uff.br':
-                username = 'admin'
-                password = 'fibre2013'
-            else:
-                 username = request.session["mail"]
-                 password = request.session["mail"] + "fibre2013"
-    
-               # pass request within the token, so manifold session key can be attached to the request session.
-           token = {'username': username, 'password': password, 'request': request}    
-
-               # our authenticate function returns either
-                   # . a ManifoldResult - when something has gone wrong, like e.g. backend is unreachable
-                   # . a django User in case of success
-                   # . or None if the backend could be reached but the authentication failed
-           auth_result = authenticate(token=token)
-                   # high-level errors, like connection refused or the like
-           if isinstance (auth_result, ManifoldResult):
-               manifoldresult = auth_result
-                   # let's use ManifoldResult.__repr__
-               env['state']="%s"%manifoldresult
-               return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-                   # user was authenticated at the backend
-           elif auth_result is not None:
-               user=auth_result
-               if user.is_active:
-                   print "LOGGING IN"
-                   login(request, user)
-                   htm = "<meta http-equiv=\"refresh\" content=\"0; url=https://sp-php.cafeexpresso.rnp.br/login-ok\" />"
-                   #return HttpResponseRedirect ('/login-ok')
-                   return HttpResponse (htm)
-               else:
-                   env['state'] = "Your account is not active, please contact the site admin."
-                   return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-               # otherwise
-           else:
-               '''
-               magic = "$1$"
-               password = password
-               # Generate a somewhat unique 8 character salt string
-               salt = str(time.time()) + str(Random().random())
-               salt = md5(salt).hexdigest()[:8]
-
-               if len(password) <= len(magic) or password[0:len(magic)] != magic:
-                   password = crypt.crypt(password.encode('latin1'), magic + salt + "$")
-
-               user_params = {
-                   'email': username,
-                   'password': password
-               }
-               query = Query(action='create', object='local:user', params=user_params)
-
-
-                   # Instantiate a TopHat router
-               with Router() as router:
-                   router.forward(query)
-               '''
-               #myArgs=[username,password]
-               #os.spawnlp(os.P_WAIT,'/tmp/adduser.py', username, password, '/bin/bash/')
-               command = '/var/www/manifold/manifold/bin/adduser.py ' + username + ' ' + password
-               #command = 'ls -la'
-                args = shlex.split(command)
-                p = subprocess.Popen(args, stdin=subprocess.PIPE).communicate()[0]
-               print command
-               print args
-               print p
-               #env['state'] = "Now your CAFe user is associated to your MySlice account - Please logging in CAFe again."
-               #return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-               html = "Now its CAFe user is associated with a MySlice account - Please login in CAFe again."
-               return HttpResponse(html)
-
-        else:
-           #env['state'] = "Your affiliation (" + request.session["aff"] + ") at CAFe is not accepted."
-           html = "Your CAFe affiliation (" + request.session["aff"] + ") is not accepted. <br> Only \"student\" affiliation."
-           return HttpResponse(html)
-           #return render_to_response('home-view.html',env, context_instance=RequestContext(request))
-           
-
-           # login-ok sets state="Welcome to MySlice" in urls.py
-       def get (self, request, state=None):
-           env = self.default_env()
-           env['username']=the_user(request)
-           env['topmenu_items'] = topmenu_items(None, request)
-           if state: env['state'] = state
-           elif not env['username']: env['state'] = "Please sign in"
-           return HttpResponseRedirect ('/login-ok')
-       #return render_to_response('home-view.html',env, context_instance=RequestContext(request))
diff --git a/plugins/cafe-1.0/others/edelberto_context.py b/plugins/cafe-1.0/others/edelberto_context.py
deleted file mode 100644 (file)
index ce884a7..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-from django.core.urlresolvers import reverse\r
-from urllib import quote\r
-\r
-from django.conf import settings\r
-import myslice.settings\r
-\r
-def login_link(request):\r
-    """\r
-    This assumes your login link is the Shibboleth login page for your server \r
-    and uses the 'target' url parameter.\r
-    """\r
-    full_path = quote(request.get_full_path())\r
-    #login = reverse('shibboleth:login')\r
-\r
-    LOGIN_URL = getattr(settings, 'LOGIN_URL', None)\r
-\r
-    login = LOGIN_URL\r
-    ll = "%s?target=%s" % (login, full_path)\r
-    return { 'login_link': ll }\r
-\r
-def logout_link(request, *args):\r
-    """\r
-    This assumes your login link is the Shibboleth login page for your server \r
-    and uses the 'target' url parameter.\r
-    e.g: https://sp-php.cafeexpresso.rnp.br/Shibboleth.sso/Login\r
-    """\r
-    from app_settings import LOGOUT_URL, LOGOUT_REDIRECT_URL\r
-    #LOGOUT_REDIRECT_URL specifies a default logout page that will always be used when\r
-    #users logout from Shibboleth.\r
-    target = LOGOUT_REDIRECT_URL or quote(request.build_absolute_uri())\r
-    logout = reverse('shibboleth:logout')\r
-    ll = "%s?target=%s" % (logout, target)\r
-    return { 'logout_link': ll }\r
diff --git a/plugins/cafe-1.0/others/manifoldbackend.py b/plugins/cafe-1.0/others/manifoldbackend.py
deleted file mode 100644 (file)
index 14abb74..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-import time
-
-from django.contrib.auth.models import User
-
-from manifold.manifoldapi import ManifoldAPI, ManifoldException, ManifoldResult
-from manifold.core.query        import Query
-
-# Name my backend 'ManifoldBackend'
-class ManifoldBackend:
-
-    # Create an authentication method
-    # This is called by the standard Django login procedure
-    def authenticate(self, token=None):
-        if not token:
-            return None
-
-        try:
-            username = token['username']
-            password = token['password']
-            request = token['request']
-
-            auth = {'AuthMethod': 'password', 'Username': username, 'AuthString': password}
-            api = ManifoldAPI(auth)
-            sessions_result = api.forward(Query.create('local:session').to_dict())
-            print "result"
-            sessions = sessions_result.ok_value()
-            print "ok"
-            if not sessions:
-                print "GetSession failed", sessions_result.error()
-                return
-            print "first", sessions
-            session = sessions[0]
-
-            # Change to session authentication
-            api.auth = {'AuthMethod': 'session', 'session': session['session']}
-            self.api = api
-
-            # Get account details
-            # the new API would expect Get('local:user') instead
-            persons_result = api.forward(Query.get('local:user').to_dict())
-            persons = persons_result.ok_value()
-            if not persons:
-                print "GetPersons failed",persons_result.error()
-                return
-            person = persons[0]
-            print "PERSON=", person
-
-            request.session['manifold'] = {'auth': api.auth, 'person': person, 'expires': session['expires']}
-        except ManifoldException, e:
-            print "Caught ManifoldException, returning corresponding ManifoldResult"
-            return e.manifold_result
-        except Exception, e:
-            print "E: manifoldbackend", e
-            import traceback
-            traceback.print_exc()
-            return None
-
-        try:
-            # Check if the user exists in Django's local database
-            user = User.objects.get(username=username)
-        except User.DoesNotExist:
-            # Create a user in Django's local database
-            user = User.objects.create_user(username, username, 'passworddoesntmatter')
-            user.first_name = "DUMMY_FIRST_NAME" #person['first_name']
-            user.last_name = "DUMMY LAST NAME" # person['last_name']
-            user.email = person['email']
-        return user
-
-    # Required for your backend to work properly - unchanged in most scenarios
-    def get_user(self, user_id):
-        try:
-            return User.objects.get(pk=user_id)
-        except User.DoesNotExist:
-            return None
-
-
diff --git a/plugins/cafe-1.0/others/sub.py b/plugins/cafe-1.0/others/sub.py
deleted file mode 100755 (executable)
index ec19a5a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-#Edelberto from manifoldauth
-import os,sys
-import subprocess
-import shlex
-import getpass
-from hashlib import md5
-import time
-from random import Random
-import crypt
-       
-username = 'teste'
-password = '123'
-
-command = '/var/www/manifold/manifold/bin/adduser.py ' + username + ' ' + password
-    #command = 'ls -la'
-args = shlex.split(command)
-p = subprocess.Popen(args, stdin=subprocess.PIPE).communicate()[0]
-print command
-print args
-print p
index ca87543..d43e965 100644 (file)
@@ -640,25 +640,31 @@ def create_user(wsgi_request, request):
     # NOTE : if we were to create a user directly (just like we create slices,
     # we would have to perform the steps in create_pending_user too
     
-
+    # Edelberto - I put this more below
     # Add the user to the SFA registry
-    sfa_create_user(wsgi_request, request)
+    #sfa_create_user(wsgi_request, request)
 
     # Update Manifold user status
     manifold_update_user(wsgi_request, request['email'], {'status': USER_STATUS_ENABLED})
 
     # Add reference accounts for platforms
     manifold_add_reference_user_accounts(wsgi_request, request)
+    
+# Add the user to the SFA registry
+    sfa_create_user(wsgi_request, request)
 
     # LDAP update user userEnabled = True
-    mail = request['email']
-    login = mail.split('@')[0]
-    org = mail.split('@')[1]
-    o = org.split('.')[-2]
-    dc = org.split('.')[-1]
-    # To know if user is a LDAP user - Need to has a 'dc' identifier
-    if dc == 'br' or 'eu':
-        ldap_modify_user(wsgi_request, request)
+    try:
+        mail = request['email']
+        login = mail.split('@')[0]
+        org = mail.split('@')[1]
+        o = org.split('.')[-2]
+        dc = org.split('.')[-1]
+        # To know if user is a LDAP user - Need to has a 'dc' identifier
+        if dc == 'br' or 'eu':
+            ldap_modify_user(wsgi_request, request)
+    except Exception, e:
+        "LDAP create user failed"
 
 def create_pending_user(wsgi_request, request, user_detail):
     """
index bfe49ff..d7efa79 100644 (file)
@@ -124,17 +124,19 @@ class RegistrationView (FreeAccessView, ThemeView):
                 user_request['public_key']  = file_content
                 
             if not errors:
-                # verify if is a  LDAP 
-                mail = user_detail['email']
-                login = mail.split('@')[0]
-                org = mail.split('@')[1]
-                o = org.split('.')[-2]
-                dc = org.split('.')[-1]
-                # To know if user is a LDAP user - Need to has a 'dc' identifier
-                if dc == 'br' or 'eu':
-                    # LDAP insert directly - but with userEnable = FALSE
-                    ldap_create_user(wsgi_request, user_request, user_detail)
-               
+                try:
+                    # verify if is a  LDAP 
+                    mail = user_detail['email']
+                    login = mail.split('@')[0]
+                    org = mail.split('@')[1]
+                    o = org.split('.')[-2]
+                    dc = org.split('.')[-1]
+                    # To know if user is a LDAP user - Need to has a 'dc' identifier
+                    if dc == 'br' or 'eu':
+                        # LDAP insert directly - but with userEnable = FALSE
+                        ldap_create_user(wsgi_request, user_request, user_detail)
+                except Exception, e:
+                    print "LDAP: problem em access the LDAP with this credentail" 
                 create_pending_user(wsgi_request, user_request, user_detail)
                 self.template_name = 'user_register_complete.html'
             
index fe327a6..c7bcdd8 100644 (file)
@@ -6,7 +6,7 @@
 
 {% block content %}
 <div class="row">
-       <h1><img src="{{ STATIC_URL }}img/icon_support_small.png" alt="Open a Ticket" /> OneLab Support</h1>
+       <h1><img src="{{ STATIC_URL }}img/icon_support_small.png" alt="Open a Ticket" /> FIBRE Support</h1>
 </div>
 <div class="row">
        <p>Please check our <a href="/portal/support/documentation">FAQ</a> section. Most of the basic problems are explained there.</p>
index 00a07f9..44a9755 100644 (file)
@@ -2,7 +2,7 @@
 
 {% block content %}
 <div class="row">
-       <h1><img src="{{ STATIC_URL }}img/icon_support_small.png" alt="Open a Ticket" /> OneLab Portal Documentation</h1>
+       <h1><img src="{{ STATIC_URL }}img/icon_support_small.png" alt="Open a Ticket" /> FIBRE Portal Documentation</h1>
 </div>
 <div class="row">
 <h2>Portal Components</h2>
index f2b25b3..20129dc 100644 (file)
                                </div>
                                {% else %}
                                <td>
-                                       {% include 'fibre__widget-login-user.html' %}
-                                       {% include 'fibre__widget-login-ldap-user.html' %}
+                    {# include 'fibre__widget-login-user.html' #}
+                                       {# include 'fibre__widget-login-ldap-user.html' #}
+                                       {% include 'fibre__widget-login-fed-manager.html' %}
+                                   <a href="/cafe"><img src="{{ STATIC_URL }}img/fibre/cafe.jpg" alt="CAFe authentication" /></a>
                                {% endif %}
                                </td>
                                <td>
index a2971d1..80c3fcc 100644 (file)
@@ -1,7 +1,11 @@
 {% extends "layout_wide.html" %}
 
 {% block head %}
+<!-- <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC1RUj824JAiHRVqgc2CSIg4CpKHhh84Lw&sensor=false"></script> -->
 <script src="{{ STATIC_URL }}js/onelab_slice-resource-view.js"></script>
+<script>
+       //myslice.slice = "{{ slice }}";
+</script>
 {% endblock %}
 
 {% block content %}
                <div id="select-platform" class="list-group">
                </div>
                        
-               <ul class="list-group">
+               <!-- <ul class="list-group">
                  <li class="list-group-item">Filter: CPU</li>
                  <li class="list-group-item">Filter: Interface</li>
                  <li class="list-group-item">...</li>
                  <li class="list-group-item">...</li>
                  <li class="list-group-item">...</li>
-               </ul>
+               </ul> -->
        
        </div>
-       <div class="col-md-10">
+       <div class="col-md-10" style="height:100%;">
                <div class="row">
                        {% include theme|add:"_widget-slice-sections.html" %}
                </div>
-               <div class="row slice-pending">
+               <!-- <div class="row slice-pending">
                        <ul class="nav nav-pills">
                                <li><a href="">Unreserved</a></li>
                                <li><a href="">Reserved</a></li>
-                               <li><a href="">Pending<span class="badge">42</span></a></li>
+                               <li><a href="">Pending<span class="badge" id="badge-pending" style="display:none;"></span></a></li>
                                <li>
-                                       <button type="button" class="btn btn-primary apply">Apply</button>
+                                       <button type="button" class="btn btn-primary apply" id="ApplyPendind">Apply</button>
                                        <button type="button" class="btn btn-default clear">Clear</button>
                                </li>
+                               <li>
+                                       <div id="loading" style="display:none;"><img src="{{ STATIC_URL }}img/loading.gif" alt="Loading" /></div>
+                               </li>
                        </ul>
+               </div> -->
+               <div class="row">
+                       {% if msg %}
+                       <div class="col-md-12"><p class="alert-success">{{ msg }}</p></div>
+                       {% endif %}
                </div>
                <div class="row">
-                       <ul class="nav nav-tabs">
-                         <li class="active"><a href="#">Resources</a></li>
-                         <li><a href="#"></a></li>
+                       <ul class="nav nav-pills nav-resources">
+                         <li class="active"><a data-panel="resources" href="#">Resources</a></li>
+                         <li id="GoogleMap"><a data-panel="map" href="#">Map</a></li>
+                         <li><a data-panel="pending" href="#">Pending</a></li>
                          <li><a href="#"></a></li>
                        </ul>
                </div>
-               <table cellpadding="0" cellspacing="0" border="0" class="table" id="objectList"></table>
+               <div class="row" style="height:100%;">
+                       <div id="resources" class="panel">
+                {{list_resources}}
+                               <!-- <table cellpadding="0" cellspacing="0" border="0" class="table" id="objectList"></table> -->
+                       </div>
+                       <div id="map" class="panel" style="height:370px;display:none;">
+                {{map_resources}}
+                       </div>
+                       <div id="pending" class="panel" style="height:370px;display:none;">
+                {{pending_resources}}
+                       </div>
+               </div>
        </div>
-{% endblock %}
\ No newline at end of file
+{% endblock %}
index 02bad23..d1c87e1 100644 (file)
@@ -7,7 +7,14 @@
                </div>
                        
                <ul class="list-group">
-                 <li class="list-group-item">Filter: authority</li>
+                 <li class="list-group-item">Authority:<b> {{user_details.parent_authority}}</b>
+                       <!--<select id="auth_list">
+                               <option value="ple.upmc">UPMC</option>
+                               <option value="ple.inria">INRIA</option>
+                               <option value="ple.nitos">NITOS</option>
+                               <option value="ple.iminds">iMinds</option>
+                       </select> -->
+                 </li>
                  <li class="list-group-item">Filter: slice</li>
                  <li class="list-group-item">...</li>
                  <li class="list-group-item">...</li>
                </div>
 <script>
     $(document).ready(function() {
-        $.post("/rest/user/",{'filters':{'parent_authority':'ple.upmc'}}, function( data ) {
-            var list_users = [];
-            var table_users = [];
-                       /*
-                       "enabled", "keys", "parent_authority", "user_first_name", "user_last_name", "user_phone", "user_hrn", "slice", "user_email"
-                       */
-            $.each( data, function( key, val ) {
-                list_users.push( "<li><a href=\"portal/user/"+val.user_email+"\">" + val.user_email + "</a></li>" );
-                user_row = "<tr>";
-                               // checking the box for the users that belong to the selected slice
-                               var flag_checkbox = 0;
-                               for(var data in val.slice) {
-                               var element = val.slice[data];
-                                       console.log("element");
-                                       console.log(element);
-                                       for(var key in element) {
-                                       var value = element[key];
-                                               if (value == 'ple.upmc.myslicedemo'){
-                                               console.log("found!!");
+               //var selectedValue = $( "#auth_list option:selected" ).val();    
+               //console.log(selectedValue);
+               //console.log("Name of the authority: " + "{{user_details.parent_authority}}");
+               //$("#auth_list").change(function(){
+                       //selectedValue = $(this).find(":selected").val();
+                       //console.log("the value you selected: " + selectedValue);
+               $.post("/rest/user/",{'filters':{'parent_authority': "{{user_details.parent_authority}}"}}, function( data ) {
+               var list_users = [];
+               var table_users = [];
+                               /* Available fields
+                               user_gid, user_enabled, slices, pi_authorities, keys, parent_authority, user_first_name,
+                           user_urn, user_last_name, user_phone, user_hrn, user_email, user_type
+                               */
+               $.each( data, function( key, val ) {
+                       list_users.push( "<li><a href=\"portal/user/"+val.user_email+"\">" + val.user_email + "</a></li>" );
+                       user_row = "<tr>";
+                                       // checking the box for the users that belong to the selected slice
+                                       var flag_checkbox = 0;
+                                       for(var data in val.slices) {
+                                       var element = val.slices[data];
+                                               if (element == "{{slice}}"){
+                                                       //console.log("the slice is: "+ element);       
                                                        flag_checkbox = 1;
                                                        user_row += "<td><input type='checkbox' checked='True'></td>";
                                                }
-
                                        }
-                               }
-                               if(flag_checkbox != 1){
-                       user_row += "<td><input type='checkbox'></td>";
-                               }
-                user_row += "<td>"+val.user_email+"</td>";
-                user_row += "<td>"+val.user_hrn+"</td>";
-                               user_row += "<td>"+val.enabled+"</td>";
-                user_row += "</tr>";
-                table_users.push(user_row);
+                                       if(flag_checkbox != 1){
+                               user_row += "<td><input type='checkbox'></td>";
+                                       }
+                       user_row += "<td>"+val.user_email+"</td>";
+                       user_row += "<td>"+val.user_hrn+"</td>";
+                                       user_row += "<td>"+val.user_enabled+"</td>";
+                       user_row += "</tr>";
+                       table_users.push(user_row);
                 
-            });
-                       $("table#user-tab tr:last").after(table_users.join( "" ));
-            $("div#user-tab-loaded").css("display","block");
-            $("div#user-tab-loading").css("display","none");
-         });
+               });
+                               $("table#user-tab tr:last").after(table_users.join( "" ));
+               $("div#user-tab-loaded").css("display","block");
+               $("div#user-tab-loading").css("display","none");
+               });
+       //      });
     });
 </script>
 
index a67d34b..0444a82 100644 (file)
@@ -1,61 +1,25 @@
 {% extends "layout_wide.html" %}
 
-{% block content %}
-       <div class="col-md-2"></div>
-       <div class="col-md-10">
-               <div class="row">
-                       {% include theme|add:"_widget-slice-sections.html" %}
-               </div>
-    </div>
-    
-       <div class="col-md-2"></div>
-       <div class="col-md-10">
-        <br>
-        <br>
-        <div id="slice-tab-loading"><img src="{{ STATIC_URL }}img/loading.gif" alt="Loading Slices" /></div>
-        <div id="slice-tab-loaded" style="display:none;">
-            <table id="slice-tab">
-            </table>
-        </div>
-       </div>
-<script>
-    $(document).ready(function() {
-        $.post("/rest/slice/",{'filters':{'slice_hrn':'{{slice}}'}}, function( data ) {
-            var table_slices = [];
-            /* "slice_hrn", "slice_description", "slice_type", "parent_authority", "created", "nodes", "slice_url", "slice_last_updated", "user", "slice_urn", "slice_expires" */
-            $.each( data, function( key, val ) {
-                if(val.nodes=="undefined" || val.nodes==null){
-                    nodes_length=0;
-                }else{
-                    nodes_length=val.nodes.length;
-                }
+{% block head %}
+
+{% endblock %}
 
-                if(val.user=="undefined" || val.user==null){
-                    user_length=0;
-                }else{
-                    user_length=val.user.length;
-                }
+{% block content %}
 
-                if(val.slice_url=="undefined" || val.slice_url==null){
-                    slice_url="";
-                }else{
-                    slice_url="<a href='"+val.slice_url+"' target='_blank'>"+val.slice_url+"</a>";
-                }
-                
-                slice_row = "<tr><td><b>Description:</b></td><td>"+val.slice_description+"</td></tr>";
-                slice_row += "<tr><td><b>url:</b></td><td><a href='"+val.slice_url+" target='_blank'>"+val.slice_url+"</a></td></tr>";
-                slice_row += "<tr><td><b>users:</b></td><td>"+user_length+"</td></tr>";
-                slice_row += "<tr><td><b>resources:</b></td><td>"+nodes_length+"</td></tr>";
-                slice_row += "<tr><td><b>created:</b></td><td>"+val.created+"</td></tr>";
-                slice_row += "<tr><td><b>last update:</b></td><td>"+val.last_updated+"</td></tr>";
-                slice_row += "<tr><td><b>expires:</b></td><td>"+val.slice_expires+"</td></tr>";
-                table_slices.push(slice_row);
-            });
-           $("table#slice-tab").html(table_slices.join( "" ));
-           $("div#slice-tab-loaded").css("display","block");
-           $("div#slice-tab-loading").css("display","none");
-        });
-    });
-</script>
+<div class="wrapper">
+       <div class="row">
+               <div class="col-md-12">
+                       {% include theme|add:"_widget-slice-sections.html" %}
+           </div>
+       </div>
+</div>
+<div class="container-fluid tab-content">
+  <div class="tab-pane active row" id="info">...</div>
+  <div class="tab-pane row" id="testbeds">...</div>
+  <div class="tab-pane row" id="resources">...</div>
+  <div class="tab-pane row" id="users">...</div>
+  <div class="tab-pane row" id="statistics">...</div>
+  <div class="tab-pane row" id="measurements">...</div>
+  <div class="tab-pane row" id="experiment">...</div>
+</div>         
 {% endblock %}
index e637b15..47dea17 100644 (file)
@@ -1,13 +1,23 @@
-<div class="col-md-8 slice-sections">
-       <ul class="nav nav-pills nav-justified">
-               <li {% if section == 'slice' %}class="active"{% endif %}><a href="/slice/{{ slice }}/">{{ slice }}</a></li>
-               <li {% if section == 'testbeds' %}class="active"{% endif %}><a href="/testbeds/{{ slice }}/">Testbeds</a></li>
-               <li {% if section == 'resources' %}class="active"{% endif %}><a href="/resources/{{ slice }}/">Resources</a></li>
-               <li {% if section == 'users' %}class="active"{% endif %}><a href="/users/{{ slice }}/">Users</a></li>
-               <li><a href="">Statistics</a></li>
-               <li><a href="">Measurements</a></li>
-       </ul>
-</div>
-<div class="col-md-4 slice-experiment">
-       <a href="/portal/experiment"><button type="button" class="btn btn-default">Experiment</button></a>
-</div>
+<ul class="nav nav-tabs nav-sliceview">
+       <li {% if section != "resources" %}class="active"{% endif %}>
+               <a href="#info"><img src="{{ STATIC_URL }}icons/slices-xs.png" alt="About MySlice" /> {{ slice }}</a>
+       </li>
+       <li><a href="#testbeds">Testbeds</a></li>
+       <li {% if section == "resources" %}class="active"{% endif %}><a class="link" href="/resources/{{ slice }}">Resources</a></li>
+       <li><a href="#users">Users</a></li>
+       <li><a href="#experiment">Statistics</a></li>
+       <li><a href="#experiment">Measurements</a></li>
+       <li><a href="#experiment" data-toggle="tab">Experiment</a></li>
+</ul>
+<script>
+$(document).ready(function() {
+       $('.nav-sliceview a').click(function (e) {
+               if ($(this).hasClass('link')) return;
+               e.preventDefault();
+               $(this).tab('show');
+       var id = $(this).attr('href').substr(1);        
+       $("#" + id).load('/' + id + '/{{ slice }}/');
+       });
+       $('div#info').load('/info/{{ slice }}/');
+});
+</script>
index 10381a3..7b8b2cf 100644 (file)
@@ -3,7 +3,7 @@
 {% block content %}        
 
 <div class="row">
-       <h1><img src="{{ STATIC_URL }}img/icon_user_small.png" alt="User Registration" /> OneLab Experimenter Registration</h1>
+       <h1><img src="{{ STATIC_URL }}img/icon_user_small.png" alt="User Registration" /> FIBRE Experimenter Registration</h1>
 </div>
 <div class="row">
 
index a1295c1..bb2836f 100644 (file)
@@ -8,7 +8,7 @@
 {% block content %}
 
 <div class="row">
-       <h1><img src="{{ STATIC_URL }}img/icon_user_small.png" alt="User Registration" /> OneLab Experimenter Registration</h1>
+       <h1><img src="{{ STATIC_URL }}img/icon_user_small.png" alt="User Registration" /> FIBRE Experimenter Registration</h1>
 </div>
 <div class="row">