54b16e72ee41ae08d92ad382d246d69ff121744e
[myslice.git] / auth / manifoldbackend.py
1 # import the User object
2 from django.contrib.auth.models import User
3 from engine.manifoldapi import ManifoldAPI
4
5
6 # import time - this is used to create Django's internal username
7 import time
8
9 # Name my backend 'ManifoldBackend'
10 class ManifoldBackend:
11
12     # Create an authentication method
13     # This is called by the standard Django login procedure
14     def authenticate(self, token=None):
15         if not token:
16             return None
17
18         try:
19             username = token['username']
20             password = token['password']
21             request = token['request']
22
23             auth = {'AuthMethod': 'password', 'Username': username, 'AuthString': password}
24             api = ManifoldAPI(auth)
25             # Authenticate user and get session key
26             session = api.GetSession()
27             if not session : 
28                 return None
29             
30             #self.session = session
31             # Change GetSession() at some point to return expires as well
32             expires = time.time() + (24 * 60 * 60)
33
34             # Change to session authentication
35             api.auth = {'AuthMethod': 'session', 'session': session}
36             self.api = api
37
38             # Get account details
39             person = api.GetPersons(auth)[0]
40             self.person = person
41
42             request.session['manifold'] = {'auth': api.auth, 'person': person, 'expires': expires}
43         except:
44             return None
45
46         try:
47             # Check if the user exists in Django's local database
48             user = User.objects.get(username=username)
49         except User.DoesNotExist:
50             # Create a user in Django's local database
51             user = User.objects.create_user(username, username, 'passworddoesntmatter')
52             user.first_name = person['first_name']
53             user.last_name = person['last_name']
54             user.email = person['email']
55         return user
56
57     # Required for your backend to work properly - unchanged in most scenarios
58     def get_user(self, user_id):
59         try:
60             return User.objects.get(pk=user_id)
61         except User.DoesNotExist:
62             return None
63
64