MiscellService.py 7.8 KB

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