Advertisement
Guest User

Untitled

a guest
Sep 9th, 2017
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. class USTCCASBackend(object):
  2. def get_sno(self, ticket, service_url):
  3. """
  4. Use ticket to get SNO in USTC CAS
  5. :param ticket:
  6. :param service_url:
  7. :return: SNO (upper letters)
  8. """
  9. # check ticket valid
  10. if len(ticket) is not 35:
  11. return None
  12.  
  13. pattern = re.compile(r'^ST-\w{32}$')
  14. if pattern.match(ticket) is None:
  15. return None
  16.  
  17. # use ticket
  18. info = None
  19. api_url = settings.API_URL.format(ticket=ticket, service=service_url)
  20. try:
  21. r = requests.get(api_url)
  22. info = r.text
  23. except:
  24. return None
  25.  
  26. # format return info
  27. if info:
  28. pattern = re.compile(r'<cas:user>([a-zA-Z]{2}\d{8})</cas:user>')
  29. match = pattern.search(info)
  30. if match:
  31. sno = match.group(1).upper()
  32. return sno
  33. else:
  34. return None
  35. else:
  36. return None
  37.  
  38. def authenticate(self, token=None):
  39.  
  40. sno = self.get_sno(token, settings.SERVICE_URL)
  41.  
  42. if sno is not None:
  43. try:
  44. user = User.objects.get(username=sno)
  45. except User.DoesNotExist:
  46. user = User(username=sno, password=sno)
  47. user.save()
  48. return user
  49. return None
  50.  
  51. def get_user(self, user_id):
  52. try:
  53. return User.objects.get(pk=user_id)
  54. except User.DoesNotExist:
  55. return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement