Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class USTCCASBackend(object):
- def get_sno(self, ticket, service_url):
- """
- Use ticket to get SNO in USTC CAS
- :param ticket:
- :param service_url:
- :return: SNO (upper letters)
- """
- # check ticket valid
- if len(ticket) is not 35:
- return None
- pattern = re.compile(r'^ST-\w{32}$')
- if pattern.match(ticket) is None:
- return None
- # use ticket
- info = None
- api_url = settings.API_URL.format(ticket=ticket, service=service_url)
- try:
- r = requests.get(api_url)
- info = r.text
- except:
- return None
- # format return info
- if info:
- pattern = re.compile(r'<cas:user>([a-zA-Z]{2}\d{8})</cas:user>')
- match = pattern.search(info)
- if match:
- sno = match.group(1).upper()
- return sno
- else:
- return None
- else:
- return None
- def authenticate(self, token=None):
- sno = self.get_sno(token, settings.SERVICE_URL)
- if sno is not None:
- try:
- user = User.objects.get(username=sno)
- except User.DoesNotExist:
- user = User(username=sno, password=sno)
- user.save()
- return user
- return None
- def get_user(self, user_id):
- try:
- return User.objects.get(pk=user_id)
- except User.DoesNotExist:
- return None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement