]> git.frykholm.com Git - tranquillity.git/blame - tranquillity/auth_backend.py
Djangocon coding
[tranquillity.git] / tranquillity / auth_backend.py
CommitLineData
26235f08 1from django.contrib.auth import get_user_model
d1f79ec8 2from django.contrib.auth.models import User
26235f08 3from django.contrib.auth.backends import ModelBackend
40e726c7
MF
4try:
5 import requests
6except ModuleNotFoundError as e:
7 pass
93be1853 8from django.conf import settings
26235f08
MF
9
10class EmailBackend(ModelBackend):
40e726c7 11 def fetch_fortnox(self, customer_id=None):
d1f79ec8
MF
12 """ Fetch all active customers from Fortnox API. Return as dict keyed on email."""
13 res = None
14 customers = {}
93be1853
MF
15 headers = {"Access-Token":settings.FORTNOX_ACCESS_TOKEN,
16 "Client-Secret":settings.FORTNOX_CLIENT_SECRET,
d1f79ec8
MF
17 "Content-Type":"application/json",
18 "Accept":"application/json" }
40e726c7
MF
19 if customer_id: #We already have id, use that to update info in local db
20 res = requests.get(f"https://api.fortnox.se/3/customers/{customer_id}?filter=active", headers=headers)
21 res = res.json()
22 res['Customer'] = [res['Customer']]
23 else:
24 res = requests.get("https://api.fortnox.se/3/customers?filter=active", headers=headers)
25
26 for customer in res['Customer']:
d1f79ec8
MF
27 customers[customer['Email']] = customer
28 return customers
29
26235f08
MF
30 def authenticate(self, username=None, password=None, **kwargs):
31 UserModel = get_user_model()
32 try:
33 user = UserModel.objects.get(email=username)
34 except UserModel.DoesNotExist:
d1f79ec8 35 customers = self.fetch_fortnox()
40e726c7 36 # import pdb;pdb.set_trace()
d1f79ec8
MF
37 if username in customers:
38 if ' ' in customers[username]['Name']:
39 (fname,lname) = customers[username]['Name'].split(' ',1)
40e726c7 40 user = User.objects.create_user(email=username,
d1f79ec8 41 first_name=fname,
40e726c7
MF
42 last_name=lname,
43 fortnox_external_id=int(customers[username]['CustomerNumber']))
d1f79ec8
MF
44 return user
45 else:
46 fname = customers[username]['Name']
47 user = User.objects.create_user(username=username,
48 email=username,
40e726c7
MF
49 first_name=fname,
50 fortnox_external_id=int(customers[username]['CustomerNumber']))
d1f79ec8 51 return user
26235f08
MF
52 return None
53 else:
40e726c7
MF
54 customer = self.fetch_fortnox(customer_id=user.fortnox_external_id)
55 if not customer:
56 user.is_active=False
57 return None
58 user.first_name = customer[user.email]['Name'] #TODO synd more data
59 user.save()
26235f08
MF
60 if user.check_password(password):
61 return user
62 return None