from Object.AWS.SesClassObject import SesClassObject from Ansjer.settings import SERVER_DOMAIN from Ansjer.config import SECRET_KEY from Service.CommonService import CommonService import time, traceback from Controller.CheckUserData import getRandom, TokenLink import simplejson as json from Service.TokenManager import JSONTokenManager from Service.ModelService import ModelService import datetime from django.utils.timezone import utc import requests from Object.mongodb import mongodb from Service.TemplateService import TemplateService from Model.models import Device_User # 杂项类,共用行不高,但有些地方需求 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): if request.method == 'GET': request_dict = request.GET if request.method == 'POST': request_dict = request.POST token = request_dict.get('token', None) userName = request_dict.get('userName', None) userEmail = request_dict.get('userEmail', None) if userName is not None: return userName elif userEmail is not None: return userEmail elif token is not None: tM = JSONTokenManager() tM.verify_AToken(token) userID = tM.accessDict.get('userID', None) username = ModelService.get_user_name(userID=userID) return username else: return None @staticmethod def add_access_log(request, status_code): 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 = 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': MiscellService.get_access_name(request=request), '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)