cafe plugin
[unfold.git] / plugins / cafe-1.0 / others / edelberto.py-noupdateaccountONLY
1 #!/usr/bin/env python
2
3 #Edelberto from manifoldauth
4 import os,sys
5 import subprocess
6 import shlex
7 import getpass
8 from hashlib import md5
9 import time
10 from random import Random
11 import crypt
12
13 import re
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
20
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
27
28 from manifold.manifoldresult import ManifoldResult
29 from ui.topmenu import topmenu_items, the_user
30 from myslice.config import Config
31
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
37
38 def index(request):
39 #class EdelbertoView (View):
40
41 # =================== Old code - to validate =================
42     '''
43     ip = "<html><body>" 
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>"
54     '''
55 # Test cookie support
56     if request.session.test_cookie_worked():
57     #if session.test_cookie_worked():
58         return HttpResponse("Please enable cookies and try again.")
59         #return
60         print "Please enable cookies and try again."
61     else:
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']
68
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>"
72         else:
73              print "Cookie: nothing/clear"
74              #ip += "Cookie: nothing/clear </body></html>"
75     
76    # return HttpResponse(ip)
77    
78
79     # expose this so we can mention the backend URL on the welcome page
80     def default_env (self):
81         config=Config()
82         return { 
83                  'MANIFOLD_URL':config.manifold_url(),
84                  }
85
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"]
92         if aff == "student":
93             if request.session["eppn"] == 'esilva@uff.br':
94                 username = 'admin'
95                 password = 'fibre2013'
96             else:
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}    
103
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:
117                 user=auth_result
118                 if user.is_active:
119                     print "LOGGING IN"
120                     login(request, user)
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)
124                 else:
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))
127                 # otherwise
128             else:
129                 '''
130                 magic = "$1$"
131                 password = password
132                 # Generate a somewhat unique 8 character salt string
133                 salt = str(time.time()) + str(Random().random())
134                 salt = md5(salt).hexdigest()[:8]
135
136                 if len(password) <= len(magic) or password[0:len(magic)] != magic:
137                     password = crypt.crypt(password.encode('latin1'), magic + salt + "$")
138
139                 user_params = {
140                     'email': username,
141                     'password': password
142                 }
143                 query = Query(action='create', object='local:user', params=user_params)
144
145
146                     # Instantiate a TopHat router
147                 with Router() as router:
148                     router.forward(query)
149                 '''
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
153                 #command = 'ls -la'
154                 #args = shlex.split(command)
155                 #p = subprocess.Popen(args, stdin=subprocess.PIPE).communicate()[0]
156                 #print command
157                 #print args
158                 #print p
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)
163                 
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']
168                 #user_id = user[0]
169                 #print 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)
174         
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)
181
182         else:
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))
187             
188
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))