You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							62 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							62 lines
						
					
					
						
							1.9 KiB
						
					
					
				| #!/usr/bin/env python
 | |
| # -*- coding:utf-8 -*-
 | |
| # project: 3月 
 | |
| # author: liuyu
 | |
| # date: 2020/3/8
 | |
| import uuid
 | |
| import string
 | |
| import random
 | |
| import time
 | |
| from django.core.cache import cache
 | |
| from fir_ser.settings import CACHE_KEY_TEMPLATE
 | |
| 
 | |
| '''
 | |
|         user = cache.get(token)
 | |
|         delta = datetime.timedelta(weeks=2) - delta
 | |
|         cache.set(token_obj.key, token_obj.user, min(delta.total_seconds(), 3600 * 24 * 7))
 | |
| '''
 | |
| 
 | |
| class DownloadToken(object):
 | |
| 
 | |
|     def make_token(self,release_id,time_limit=60,key=''):
 | |
|         token_key = "_".join([key.lower(), CACHE_KEY_TEMPLATE.get("make_token_key"),release_id])
 | |
|         make_token_key = cache.get(token_key)
 | |
|         if make_token_key:
 | |
|             return make_token_key
 | |
|         else:
 | |
|             random_str = uuid.uuid1().__str__().split("-")[0:-1]
 | |
|             user_ran_str = uuid.uuid5(uuid.NAMESPACE_DNS, release_id).__str__().split("-")
 | |
|             user_ran_str.extend(random_str)
 | |
|             new_str = "".join(user_ran_str)
 | |
|             cache.set(new_str, {
 | |
|                 "atime":time.time()+time_limit,
 | |
|                 "data":release_id
 | |
|             }, time_limit)
 | |
|             cache.set(token_key,new_str,time_limit-1)
 | |
|             return new_str
 | |
| 
 | |
|     def verify_token(self,token,release_id):
 | |
|         try:
 | |
|             values = cache.get(token)
 | |
|             if values and release_id in values.get("data",None):
 | |
|                 return True
 | |
|         except Exception as e:
 | |
|             print(e)
 | |
|             return False
 | |
| 
 | |
|         return False
 | |
| 
 | |
| 
 | |
| def generateTokenForMedium(medium):
 | |
|     if medium == 'email':
 | |
|         return generateAlphanumericTokenOfLength(32)
 | |
|     elif medium == 'wechat':
 | |
|         return 'WeChat'
 | |
|     else:
 | |
|         return generateNumericTokenOfLength(6)
 | |
| 
 | |
| def generateNumericTokenOfLength(length):
 | |
|     return "".join([random.choice(string.digits) for _ in range(length)])
 | |
| 
 | |
| def generateAlphanumericTokenOfLength(length):
 | |
|     return "".join([random.choice(string.digits + string.ascii_lowercase + string.ascii_uppercase) for _ in range(length)])
 | |
| 
 |