3 #Edelberto from manifoldauth
8 from hashlib import md5
10 from random import Random
14 #from manifold.manifold.core.router import Router
15 from manifold.core.query import Query
16 from manifold.manifoldapi import execute_admin_query
17 from portal.actions import manifold_add_user, manifold_add_account, manifold_update_account
18 from manifold.core.query import Query
19 # add user to manifold
21 from django.views.generic import View
22 from django.core.context_processors import csrf
23 #from django.http import HttpResponseRedirect
24 from django.contrib.auth import authenticate, login, logout
25 from django.template import RequestContext
26 from django.shortcuts import render_to_response
28 from manifold.manifoldresult import ManifoldResult
29 from ui.topmenu import topmenu_items, the_user
30 from myslice.config import Config
32 #from django.http import HttpResponse HttpResponseRedirect
33 from django.http import HttpResponse
34 #from django.http import HttpResponseRedirect
35 #from django.template import RequestContext
36 from django.contrib.sessions.backends.db import SessionStore
39 #class EdelbertoView (View):
41 # =================== Old code - to validate =================
44 ip += "cn: " + request.META['Shib-inetOrgPerson-cn'] + "</br>"
45 ip += "sn: " + request.META['Shib-inetOrgPerson-sn'] + "</br>"
46 ip += "eppn: " + request.META['Shib-eduPerson-eduPersonPrincipalName'] + "</br>"
47 ip += "mail: " + request.META['Shib-inetOrgPerson-mail'] + "</br>"
48 ip += "Affiliation br: " + request.META['Shib-brEduPerson-brEduAffiliationType'] + "</br>"
49 ip += "Affiliation edu: " + request.META['Shib-eduPerson-eduPersonAffiliation'] + "</br>"
50 ip += "Auth-Method: " + request.META['Shib-Authentication-Method'] + "</br>"
51 ip += "Identity Provider: " + request.META['Shib-Identity-Provider'] + "</br>"
52 ip += "Application ID: " + request.META['Shib-Application-ID'] + "</br>"
53 ip += "Session ID: " + request.META['Shib-Session-ID'] + "</br>"
56 if request.session.test_cookie_worked():
57 #if session.test_cookie_worked():
58 return HttpResponse("Please enable cookies and try again.")
60 print "Please enable cookies and try again."
62 request.session['cn'] = request.META['Shib-inetOrgPerson-cn']
63 request.session['mail'] = request.META['Shib-inetOrgPerson-mail']
64 request.session['eppn'] = request.META['Shib-eduPerson-eduPersonPrincipalName']
65 #request.session['aff'] = request.META['Shib-brEduPerson-brEduAffiliationType']
66 request.session['aff'] = request.META['Shib-eduPerson-eduPersonAffiliation']
67 request.session['shib'] = request.META['Shib-Session-ID']
69 if 'mail' in request.session.keys():
70 print "Cookie: OK -> Content: cn:" + request.session["cn"] + " mail: " + request.session["mail"] + " eppn: " + request.session["eppn"]
71 #ip += "Cookie: OK -> Content: cn:" + request.session["cn"] + " mail: " + request.session["mail"] + " eppn: " + request.session["eppn"] + "</body></html>"
73 print "Cookie: nothing/clear"
74 #ip += "Cookie: nothing/clear </body></html>"
76 # return HttpResponse(ip)
79 # expose this so we can mention the backend URL on the welcome page
80 def default_env (self):
83 'MANIFOLD_URL':config.manifold_url(),
86 #def post (self,request):
87 # env = self.default_env()
88 #username = request.POST.get('username')
89 #password = request.POST.get('password')
90 if 'aff' in request.session.keys():
91 aff = request.session["aff"]
93 if request.session["eppn"] == 'esilva@uff.br':
95 password = 'fibre2013'
97 username = request.session["mail"]
98 password = request.session["mail"] + "fibre2013"
99 username = username.replace('"','').strip()
100 password = password.replace('"','').strip()
101 # pass request within the token, so manifold session key can be attached to the request session.
102 token = {'username': username, 'password': password, 'request': request}
104 # our authenticate function returns either
105 # . a ManifoldResult - when something has gone wrong, like e.g. backend is unreachable
106 # . a django User in case of success
107 # . or None if the backend could be reached but the authentication failed
108 auth_result = authenticate(token=token)
109 # high-level errors, like connection refused or the like
110 if isinstance (auth_result, ManifoldResult):
111 manifoldresult = auth_result
112 # let's use ManifoldResult.__repr__
113 env['state']="%s"%manifoldresult
114 return render_to_response('home-view.html',env, context_instance=RequestContext(request))
115 # user was authenticated at the backend
116 elif auth_result is not None:
121 htm = "<meta http-equiv=\"refresh\" content=\"0; url=https://sp-php.cafeexpresso.rnp.br/login-ok\" />"
122 #return HttpResponseRedirect ('/login-ok')
123 return HttpResponse (htm)
125 env['state'] = "Your account is not active, please contact the site admin."
126 return render_to_response('home-view.html',env, context_instance=RequestContext(request))
132 # Generate a somewhat unique 8 character salt string
133 salt = str(time.time()) + str(Random().random())
134 salt = md5(salt).hexdigest()[:8]
136 if len(password) <= len(magic) or password[0:len(magic)] != magic:
137 password = crypt.crypt(password.encode('latin1'), magic + salt + "$")
143 query = Query(action='create', object='local:user', params=user_params)
146 # Instantiate a TopHat router
147 with Router() as router:
148 router.forward(query)
150 #myArgs=[username,password]
151 #os.spawnlp(os.P_WAIT,'/tmp/adduser.py', username, password, '/bin/bash/'i)
152 #command = '/var/www/manifold/manifold/bin/adduser.py ' + username + ' ' + password
154 #args = shlex.split(command)
155 #p = subprocess.Popen(args, stdin=subprocess.PIPE).communicate()[0]
159 #env['state'] = "Now your CAFe user is associated to your MySlice account - Please logging in CAFe again."
160 #return render_to_response('home-view.html',env, context_instance=RequestContext(request))
161 user_params = { 'email': username, 'password': password }
162 manifold_add_user(request,user_params)
164 #query = Query().get('user').filter_by('email', '=', username).select('user_id')
165 #user = execute_admin_query(request,query)
166 #print "USER_ID:" + user
167 #user_id = user['user_id']
170 #splitmail = username.split("@")[0]
171 #user_params = { 'user': splitmail, 'platform': 'myslice' }
172 user_params = { 'user_id': '3', 'platform_id': '2' }
173 manifold_add_account(request,user_params)
175 splitmail = username.split("@")[0]
176 user_hrn = '{"user_hrn": "fibrebr.dummy."'+ splitmail + '"}'
177 user_params = { 'config': user_hrn, 'auth_type':'managed'}
178 manifold_update_account(request,user_params)
179 html = "Now your CAFe user is associated with a MySlice account - Please login in CAFe again."
180 return HttpResponse(html)
183 #env['state'] = "Your affiliation (" + request.session["aff"] + ") at CAFe is not accepted."
184 html = "Your CAFe affiliation (" + request.session["aff"] + ") is not accepted. <br> Only \"student\" affiliation."
185 return HttpResponse(html)
186 #return render_to_response('home-view.html',env, context_instance=RequestContext(request))
189 # login-ok sets state="Welcome to MySlice" in urls.py
190 def get (self, request, state=None):
191 env = self.default_env()
192 env['username']=the_user(request)
193 env['topmenu_items'] = topmenu_items(None, request)
194 if state: env['state'] = state
195 elif not env['username']: env['state'] = "Please sign in"
196 return HttpResponseRedirect ('/login-ok')
197 #return render_to_response('home-view.html',env, context_instance=RequestContext(request))