MiscellService.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. from Object.AWS.SesClassObject import SesClassObject
  2. from Ansjer.settings import SERVER_DOMAIN
  3. from Ansjer.config import SECRET_KEY
  4. from Service.CommonService import CommonService
  5. import time, traceback
  6. from Controller.CheckUserData import getRandom, TokenLink
  7. import simplejson as json
  8. from Service.TokenManager import JSONTokenManager
  9. from Service.ModelService import ModelService
  10. import datetime
  11. from django.utils.timezone import utc
  12. import requests
  13. from Object.mongodb import mongodb
  14. from Service.TemplateService import TemplateService
  15. from Model.models import Device_User
  16. # 杂项类,共用行不高,但有些地方需求
  17. class MiscellService():
  18. # aws ses邮件发送
  19. @staticmethod
  20. def ses_send_email_handle(data={}):
  21. if data['type'] == 'forget':
  22. print(SECRET_KEY)
  23. tokenConfirm = TokenLink(SECRET_KEY)
  24. redis_key = 'reset_pwd_key' + str(data['useremail'])
  25. has_send = CommonService.get_redis_data(key=redis_key)
  26. if has_send is False:
  27. redis_val = str(time.time())
  28. CommonService.set_redis_data(key=redis_key, val=redis_val, expire=3600)
  29. gRan = getRandom()
  30. userPwd = gRan.getSaltStr(strlen=6)
  31. result = {'userEmail': data['useremail'], 'password': userPwd}
  32. JSON = json.dumps(result, ensure_ascii=False)
  33. tokenPwd = tokenConfirm.generate_validate_token(JSON)
  34. ses = SesClassObject()
  35. send_data = TemplateService.email_message(type='forget', language='en')
  36. try:
  37. server_domain = SERVER_DOMAIN
  38. send_to_list = [data['useremail']]
  39. send_title = send_data['title']
  40. send_body = send_data['body'].format(username=data['username'], token=tokenPwd, redis_val=redis_val,
  41. domain=server_domain, userPwd=userPwd)
  42. print('send_body:' + send_body)
  43. send_res = ses.send_email(
  44. send_address_list=send_to_list,
  45. subject=send_title,
  46. body=send_body
  47. )
  48. print(send_body)
  49. except Exception as e:
  50. errorInfo = traceback.format_exc()
  51. print(errorInfo)
  52. return False
  53. else:
  54. return send_res
  55. else:
  56. return 'has_send'
  57. return False
  58. # 获取访问用户名称
  59. @staticmethod
  60. def get_access_name(request):
  61. if request.method == 'GET':
  62. request_dict = request.GET
  63. if request.method == 'POST':
  64. request_dict = request.POST
  65. token = request_dict.get('token', None)
  66. userName = request_dict.get('userName', None)
  67. userEmail = request_dict.get('userEmail', None)
  68. if userName is not None:
  69. return userName
  70. elif userEmail is not None:
  71. return userEmail
  72. elif token is not None:
  73. tM = JSONTokenManager()
  74. tM.verify_AToken(token)
  75. userID = tM.accessDict.get('userID', None)
  76. username = ModelService.get_user_name(userID=userID)
  77. return username
  78. else:
  79. return None
  80. @staticmethod
  81. def add_access_log(request, status_code):
  82. if request.method == 'GET':
  83. request_dict = request.GET
  84. if request.method == 'POST':
  85. # request.encoding = 'utf-8'
  86. request_dict = request.POST
  87. api_list = TemplateService.log_api()
  88. request_path = request.path.strip().strip('/')
  89. if request_path in api_list:
  90. clientIP = CommonService.get_ip_address(request)
  91. now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
  92. password = request_dict.get('userPwd', None)
  93. if password is not None:
  94. request_dict = dict(request_dict)
  95. request_dict.pop('userPwd')
  96. content = json.dumps(request_dict)
  97. add_data = {
  98. 'user': MiscellService.get_access_name(request=request),
  99. 'ip': clientIP,
  100. 'status': status_code,
  101. 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
  102. 'operation': request_path,
  103. 'time': now_time,
  104. 'content': content
  105. }
  106. ModelService.addAccessLog(data=add_data)
  107. @staticmethod
  108. def access_log(request,response,type):
  109. if request.method == 'GET':
  110. request_dict = request.GET
  111. if request.method == 'POST':
  112. # request.encoding = 'utf-8'
  113. request_dict = request.POST
  114. api_list = TemplateService.log_api()
  115. request_path = request.path.strip().strip('/')
  116. if request_path in api_list:
  117. clientIP = CommonService.get_ip_address(request)
  118. now_time = time.time()
  119. password = request_dict.get('userPwd',None)
  120. if password is not None:
  121. request_dict = dict(request_dict)
  122. request_dict.pop('userPwd')
  123. content = json.dumps(request_dict)
  124. area = CommonService.getAddr(ip=clientIP)
  125. if type == 1:
  126. status_code = 200
  127. else:
  128. status_code = response.status_code
  129. add_data = {
  130. 'user': MiscellService.get_access_name(request=request),
  131. 'ip': clientIP,
  132. 'status': status_code,
  133. 'path': request_path,
  134. 'method': request.method,
  135. 'time': int(now_time),
  136. 'area': area,
  137. 'content': content,
  138. 'et':datetime.datetime.utcnow()
  139. }
  140. mdb = mongodb()
  141. col = "log_access"
  142. mdb.insert_one(col=col, data=add_data)
  143. # 获取所有设备ip地址的xy经纬度
  144. @staticmethod
  145. def getAreaJson(ip_list):
  146. area = {}
  147. # ip_list = ["120.237.157.183", "123.123.123.1", "123456", "190.9.194.216"]
  148. for ip in ip_list:
  149. data = {'ip': ip}
  150. URL = 'http://ip.taobao.com/service/getIpInfo.php'
  151. try:
  152. r = requests.get(URL, params=data, timeout=3)
  153. except requests.RequestException as e:
  154. print(e)
  155. else:
  156. json_data = r.json()
  157. if json_data['code'] == 0:
  158. country = json_data['data']['country']
  159. if country != '':
  160. if country in area:
  161. area[country] += 1
  162. else:
  163. area[country] = 1
  164. return area
  165. # 获取所有设备ip地址的指向的国家
  166. @staticmethod
  167. def getArea(ip):
  168. data = {'ip': ip}
  169. country = ''
  170. URL = 'http://ip.taobao.com/service/getIpInfo.php'
  171. try:
  172. r = requests.get(URL, params=data, timeout=3)
  173. except requests.RequestException as e:
  174. print(e)
  175. else:
  176. json_data = r.json()
  177. if json_data['code'] == 0:
  178. if json_data['data']['country'] != 'XX':
  179. country = json_data['data']['country']
  180. return country
  181. # 下载接口添加访问日志
  182. @staticmethod
  183. def add_ota_download_log(request):
  184. clientIP = CommonService.get_ip_address(request)
  185. request_path = request.path.strip().strip('/')
  186. now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
  187. add_data = {
  188. 'user': 'None',
  189. 'ip': clientIP,
  190. 'status': 200,
  191. 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
  192. 'operation': request_path,
  193. 'time': now_time,
  194. 'content': ''
  195. }
  196. ModelService.addAccessLog(data=add_data)