MiscellService.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. import datetime
  2. import time
  3. import traceback
  4. import requests
  5. import simplejson as json
  6. from django.utils.timezone import utc
  7. from Ansjer.config import SERVER_DOMAIN
  8. from Ansjer.settings import SECRET_KEY
  9. from Controller.CheckUserData import getRandom, TokenLink
  10. from Object.AWS.SesClassObject import SesClassObject
  11. from Object.TokenObject import TokenObject
  12. from Object.mongodb import mongodb
  13. from Service.CommonService import CommonService
  14. from Service.ModelService import ModelService
  15. from Service.TemplateService import TemplateService
  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_dict):
  61. token = request_dict.get('token', None)
  62. user = None
  63. if token is not None:
  64. tko = TokenObject(token)
  65. tko.valid()
  66. if tko.code == 0:
  67. userID = ModelService.get_userID_by_oid(tko.oid)
  68. user = ModelService.get_user_name(userID)
  69. return user
  70. @staticmethod
  71. def add_access_log(request, status_code):
  72. request.encoding = 'utf-8'
  73. if request.method == 'GET':
  74. request_dict = request.GET
  75. if request.method == 'POST':
  76. request_dict = request.POST
  77. api_list = TemplateService.log_api()
  78. request_path = request.path.strip().strip('/')
  79. if request_path in api_list:
  80. user = MiscellService.get_access_name(request_dict=request_dict)
  81. clientIP = CommonService.get_ip_address(request)
  82. now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
  83. password = request_dict.get('userPwd', None)
  84. if password is not None:
  85. request_dict = dict(request_dict)
  86. request_dict.pop('userPwd')
  87. content = json.dumps(request_dict)
  88. add_data = {
  89. 'user': user,
  90. 'ip': clientIP,
  91. 'status': status_code,
  92. 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
  93. 'operation': request_path,
  94. 'time': now_time,
  95. 'content': content
  96. }
  97. ModelService.addAccessLog(data=add_data)
  98. @staticmethod
  99. def access_log(request,response,type):
  100. if request.method == 'GET':
  101. request_dict = request.GET
  102. if request.method == 'POST':
  103. # request.encoding = 'utf-8'
  104. request_dict = request.POST
  105. api_list = TemplateService.log_api()
  106. request_path = request.path.strip().strip('/')
  107. if request_path in api_list:
  108. clientIP = CommonService.get_ip_address(request)
  109. now_time = time.time()
  110. password = request_dict.get('userPwd',None)
  111. if password is not None:
  112. request_dict = dict(request_dict)
  113. request_dict.pop('userPwd')
  114. content = json.dumps(request_dict)
  115. area = CommonService.getAddr(ip=clientIP)
  116. if type == 1:
  117. status_code = 200
  118. else:
  119. status_code = response.status_code
  120. add_data = {
  121. 'user': MiscellService.get_access_name(request=request),
  122. 'ip': clientIP,
  123. 'status': status_code,
  124. 'path': request_path,
  125. 'method': request.method,
  126. 'time': int(now_time),
  127. 'area': area,
  128. 'content': content,
  129. 'et':datetime.datetime.utcnow()
  130. }
  131. mdb = mongodb()
  132. col = "log_access"
  133. mdb.insert_one(col=col, data=add_data)
  134. # 获取所有设备ip地址的xy经纬度
  135. @staticmethod
  136. def getAreaJson(ip_list):
  137. area = {}
  138. # ip_list = ["120.237.157.183", "123.123.123.1", "123456", "190.9.194.216"]
  139. for ip in ip_list:
  140. data = {'ip': ip}
  141. URL = 'http://ip.taobao.com/service/getIpInfo.php'
  142. try:
  143. r = requests.get(URL, params=data, timeout=3)
  144. except requests.RequestException as e:
  145. print(e)
  146. else:
  147. json_data = r.json()
  148. if json_data['code'] == 0:
  149. country = json_data['data']['country']
  150. if country != '':
  151. if country in area:
  152. area[country] += 1
  153. else:
  154. area[country] = 1
  155. return area
  156. # 获取所有设备ip地址的指向的国家
  157. @staticmethod
  158. def getArea(ip):
  159. data = {'ip': ip}
  160. country = ''
  161. URL = 'http://ip.taobao.com/service/getIpInfo.php'
  162. try:
  163. r = requests.get(URL, params=data, timeout=3)
  164. except requests.RequestException as e:
  165. print(e)
  166. else:
  167. json_data = r.json()
  168. if json_data['code'] == 0:
  169. if json_data['data']['country'] != 'XX':
  170. country = json_data['data']['country']
  171. return country
  172. # 下载接口添加访问日志
  173. @staticmethod
  174. def add_ota_download_log(request):
  175. clientIP = CommonService.get_ip_address(request)
  176. request_path = request.path.strip().strip('/')
  177. now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
  178. add_data = {
  179. 'user': 'None',
  180. 'ip': clientIP,
  181. 'status': 200,
  182. 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
  183. 'operation': request_path,
  184. 'time': now_time,
  185. 'content': ''
  186. }
  187. ModelService.addAccessLog(data=add_data)