123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- import datetime
- import time
- import traceback
- import requests
- import simplejson as json
- from django.utils.timezone import utc
- from Ansjer.config import SERVER_DOMAIN
- from Ansjer.settings import SECRET_KEY
- from Controller.CheckUserData import getRandom, TokenLink
- from Object.AWS.SesClassObject import SesClassObject
- from Object.TokenObject import TokenObject
- from Object.mongodb import mongodb
- from Service.CommonService import CommonService
- from Service.ModelService import ModelService
- from Service.TemplateService import TemplateService
- # 杂项类,共用行不高,但有些地方需求
- class MiscellService():
- # aws ses邮件发送
- @staticmethod
- def ses_send_email_handle(data={}):
- if data['type'] == 'forget':
- print(SECRET_KEY)
- tokenConfirm = TokenLink(SECRET_KEY)
- redis_key = 'reset_pwd_key' + str(data['useremail'])
- has_send = CommonService.get_redis_data(key=redis_key)
- if has_send is False:
- redis_val = str(time.time())
- CommonService.set_redis_data(key=redis_key, val=redis_val, expire=3600)
- gRan = getRandom()
- userPwd = gRan.getSaltStr(strlen=6)
- result = {'userEmail': data['useremail'], 'password': userPwd}
- JSON = json.dumps(result, ensure_ascii=False)
- tokenPwd = tokenConfirm.generate_validate_token(JSON)
- ses = SesClassObject()
- send_data = TemplateService.email_message(type='forget', language='en')
- try:
- server_domain = SERVER_DOMAIN
- send_to_list = [data['useremail']]
- send_title = send_data['title']
- send_body = send_data['body'].format(username=data['username'], token=tokenPwd, redis_val=redis_val,
- domain=server_domain, userPwd=userPwd)
- print('send_body:' + send_body)
- send_res = ses.send_email(
- send_address_list=send_to_list,
- subject=send_title,
- body=send_body
- )
- print(send_body)
- except Exception as e:
- errorInfo = traceback.format_exc()
- print(errorInfo)
- return False
- else:
- return send_res
- else:
- return 'has_send'
- return False
- # 获取访问用户名称
- @staticmethod
- def get_access_name(request_dict):
- token = request_dict.get('token', None)
- user = None
- if token is not None:
- tko = TokenObject(token)
- tko.valid()
- if tko.code == 0:
- userID = ModelService.get_userID_by_oid(tko.oid)
- user = ModelService.get_user_name(userID)
- return user
- @staticmethod
- def add_access_log(request, status_code):
- request.encoding = 'utf-8'
- if request.method == 'GET':
- request_dict = request.GET
- if request.method == 'POST':
- request_dict = request.POST
- api_list = TemplateService.log_api()
- request_path = request.path.strip().strip('/')
- if request_path in api_list:
- user = MiscellService.get_access_name(request_dict=request_dict)
- clientIP = CommonService.get_ip_address(request)
- now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
- password = request_dict.get('userPwd', None)
- if password is not None:
- request_dict = dict(request_dict)
- request_dict.pop('userPwd')
- content = json.dumps(request_dict)
- add_data = {
- 'user': user,
- 'ip': clientIP,
- 'status': status_code,
- 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
- 'operation': request_path,
- 'time': now_time,
- 'content': content
- }
- ModelService.addAccessLog(data=add_data)
- @staticmethod
- def access_log(request,response,type):
- if request.method == 'GET':
- request_dict = request.GET
- if request.method == 'POST':
- # request.encoding = 'utf-8'
- request_dict = request.POST
- api_list = TemplateService.log_api()
- request_path = request.path.strip().strip('/')
- if request_path in api_list:
- clientIP = CommonService.get_ip_address(request)
- now_time = time.time()
- password = request_dict.get('userPwd',None)
- if password is not None:
- request_dict = dict(request_dict)
- request_dict.pop('userPwd')
- content = json.dumps(request_dict)
- area = CommonService.getAddr(ip=clientIP)
- if type == 1:
- status_code = 200
- else:
- status_code = response.status_code
- add_data = {
- 'user': MiscellService.get_access_name(request=request),
- 'ip': clientIP,
- 'status': status_code,
- 'path': request_path,
- 'method': request.method,
- 'time': int(now_time),
- 'area': area,
- 'content': content,
- 'et':datetime.datetime.utcnow()
- }
- mdb = mongodb()
- col = "log_access"
- mdb.insert_one(col=col, data=add_data)
- # 获取所有设备ip地址的xy经纬度
- @staticmethod
- def getAreaJson(ip_list):
- area = {}
- # ip_list = ["120.237.157.183", "123.123.123.1", "123456", "190.9.194.216"]
- for ip in ip_list:
- data = {'ip': ip}
- URL = 'http://ip.taobao.com/service/getIpInfo.php'
- try:
- r = requests.get(URL, params=data, timeout=3)
- except requests.RequestException as e:
- print(e)
- else:
- json_data = r.json()
- if json_data['code'] == 0:
- country = json_data['data']['country']
- if country != '':
- if country in area:
- area[country] += 1
- else:
- area[country] = 1
- return area
- # 获取所有设备ip地址的指向的国家
- @staticmethod
- def getArea(ip):
- data = {'ip': ip}
- country = ''
- URL = 'http://ip.taobao.com/service/getIpInfo.php'
- try:
- r = requests.get(URL, params=data, timeout=3)
- except requests.RequestException as e:
- print(e)
- else:
- json_data = r.json()
- if json_data['code'] == 0:
- if json_data['data']['country'] != 'XX':
- country = json_data['data']['country']
- return country
- # 下载接口添加访问日志
- @staticmethod
- def add_ota_download_log(request):
- clientIP = CommonService.get_ip_address(request)
- request_path = request.path.strip().strip('/')
- now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
- add_data = {
- 'user': 'None',
- 'ip': clientIP,
- 'status': 200,
- 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
- 'operation': request_path,
- 'time': now_time,
- 'content': ''
- }
- ModelService.addAccessLog(data=add_data)
|