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)