|
@@ -27,7 +27,8 @@ from ratelimit.decorators import ratelimit
|
|
|
|
|
|
from Ansjer.config import AuthCode_Expire, SERVER_DOMAIN, APNS_CONFIG, JPUSH_CONFIG, FCM_CONFIG, TUTK_PUSH_DOMAIN
|
|
|
from Controller.CheckUserData import DataValid, date_handler, RandomStr
|
|
|
-from Model.models import Device_User, Role, UidPushModel, UserOauth2Model, UserExModel, Device_Info, UidSetModel
|
|
|
+from Model.models import Device_User, Role, UidPushModel, UserOauth2Model, UserExModel, Device_Info, UidSetModel, \
|
|
|
+ UserAppFrequencyModel
|
|
|
from Object.AWS.SesClassObject import SesClassObject
|
|
|
from Object.AliSmsObject import AliSmsObject
|
|
|
from Object.RedisObject import RedisObject
|
|
@@ -1753,7 +1754,7 @@ class v3LoginView(TemplateView):
|
|
|
# users = user_qs.values('role__rid', 'role__roleName', 'userID', 'role', 'NickName', 'username', 'userEmail',
|
|
|
# 'phone', 'password', 'userIconPath', 'user_isValid', 'is_active')[0]
|
|
|
users = user_qs.values('role__rid', 'role__roleName', 'userID', 'NickName', 'username', 'userEmail',
|
|
|
- 'phone', 'password', 'userIconPath')[0]
|
|
|
+ 'phone', 'password', 'userIconPath', 'fingerprint_enable', 'fingerprint_key')[0]
|
|
|
if not check_password(password, users['password']):
|
|
|
return response.json(111)
|
|
|
userID = users['userID']
|
|
@@ -1778,6 +1779,8 @@ class v3LoginView(TemplateView):
|
|
|
res['username'] = users['username'] if users['username'] is not None else ''
|
|
|
res['userEmail'] = users['userEmail'] if users['userEmail'] is not None else ''
|
|
|
res['phone'] = users['phone'] if users['phone'] is not None else ''
|
|
|
+ res['fingerprint_enable'] = users['fingerprint_enable']
|
|
|
+ res['fingerprint_key'] = CommonService.encode_data(content=users['fingerprint_key'], start=2)
|
|
|
return response.json(0, res)
|
|
|
else:
|
|
|
return response.json(tko.code)
|
|
@@ -1953,6 +1956,7 @@ class wxAuthSignView(TemplateView):
|
|
|
'com.ansjer.loocamccloud': {'appid': 'wx9f6d6ce63f85b367',
|
|
|
'secret': 'fe495884cd24637f1ae516c7f53d1b97', },
|
|
|
'com.ansjer.zccloud': {'appid': 'wx2a9f5ef9baf2760f', 'secret': '5d38c7079676463149ffea593c58f2ed'},
|
|
|
+ 'com.ansjer.customizede': {'appid': 'wx2a9f5ef9baf2760f', 'secret': '5d38c7079676463149ffea593c58f2ed'},
|
|
|
# ios
|
|
|
'com.ansjer.zccloud_ab': {'appid': 'wx2a9f5ef9baf2760f', 'secret': '5d38c7079676463149ffea593c58f2ed'},
|
|
|
# android
|
|
@@ -2626,7 +2630,7 @@ class alexaUidView(TemplateView):
|
|
|
uid_list.append(uid_q['UID'])
|
|
|
# 给uid_q['UID']赋值
|
|
|
uid_dict[uid_q['UID']] = {'nick': uid_q['NickName'], 'password': uid_q['View_Password']}
|
|
|
- us_qs = UidSetModel.objects.filter(uid__in=uid_list, is_alexa=1).values('uid', 'region_alexa')
|
|
|
+ us_qs = UidSetModel.objects.filter(uid__in=uid_list, is_alexa=2).values('uid', 'region_alexa')
|
|
|
# uid,password,region的列表
|
|
|
uid_arr = []
|
|
|
for us in us_qs:
|
|
@@ -2927,81 +2931,80 @@ class Image_Code_RegisterView(TemplateView):
|
|
|
return response.json(0, res)
|
|
|
|
|
|
|
|
|
-# class UserAppFrequencyView(TemplateView):
|
|
|
-# @method_decorator(csrf_exempt)
|
|
|
-# def dispatch(self, *args, **kwargs):
|
|
|
-# return super(UserAppFrequencyView, self).dispatch(*args, **kwargs)
|
|
|
-#
|
|
|
-# def post(self, request, *args, **kwargs):
|
|
|
-# request.encoding = 'utf-8'
|
|
|
-# request_dict = request.POST
|
|
|
-# operation = kwargs.get('operation')
|
|
|
-# return self.validates(request_dict, operation)
|
|
|
-#
|
|
|
-# def get(self, request, *args, **kwargs):
|
|
|
-# request.encoding = 'utf-8'
|
|
|
-# request_dict = request.GET
|
|
|
-# operation = kwargs.get('operation')
|
|
|
-# return self.validates(request_dict, operation)
|
|
|
-#
|
|
|
-# def validates(self, request_dict, operation):
|
|
|
-# token = request_dict.get('token', None)
|
|
|
-# response = ResponseObject()
|
|
|
-#
|
|
|
-# token = TokenObject(token)
|
|
|
-# if token.code != 0:
|
|
|
-# return response.json(token.code)
|
|
|
-#
|
|
|
-# if operation == 'refresh':
|
|
|
-# return self.do_refresh(request_dict, token.userID, response)
|
|
|
-# else:
|
|
|
-# return response.json(404)
|
|
|
-#
|
|
|
-# def do_refresh(self, request_dict, userID, response):
|
|
|
-# # return response.json(0)
|
|
|
-# type = request_dict.get('type', None)
|
|
|
-# month = request_dict.get('month', None)
|
|
|
-# if not type or not month:
|
|
|
-# return response.json(444, 'type')
|
|
|
-# else:
|
|
|
-# type = int(type)
|
|
|
-# now_time = int(time.time())
|
|
|
-# month = int(month)
|
|
|
-# uaf_qs = UserAppFrequencyModel.objects.filter(user__userID=userID)
|
|
|
-#
|
|
|
-# if not uaf_qs.exists():
|
|
|
-# user = Device_User.objects.filter(userID=userID)[0]
|
|
|
-# data = {
|
|
|
-# 'user': user,
|
|
|
-# 'type': type,
|
|
|
-# 'data_time': month,
|
|
|
-# 'add_time': now_time,
|
|
|
-# 'update_time': now_time,
|
|
|
-# }
|
|
|
-# UserAppFrequencyModel.objects.create(**data)
|
|
|
-# return response.json(0)
|
|
|
-# else:
|
|
|
-# updateMonth = time.strftime('%m', time.localtime(month))
|
|
|
-# uaf = uaf_qs.values('id', 'type', 'data_time')[0]
|
|
|
-# dbMonth = time.strftime('%m', time.localtime(int(uaf['data_time'])))
|
|
|
-# print('update month is ' + updateMonth)
|
|
|
-# print('db month is ' + dbMonth)
|
|
|
-# if updateMonth == dbMonth:
|
|
|
-# UserAppFrequencyModel.objects.filter(id=uaf['id']).update(type=type)
|
|
|
-# return response.json(0)
|
|
|
-# elif updateMonth > dbMonth:
|
|
|
-# user = Device_User.objects.filter(userID=userID)[0]
|
|
|
-# data = {
|
|
|
-# 'user': user,
|
|
|
-# 'type': type,
|
|
|
-# 'data_time': month,
|
|
|
-# 'add_time': now_time,
|
|
|
-# 'update_time': now_time,
|
|
|
-# }
|
|
|
-# UserAppFrequencyModel.objects.create(**data)
|
|
|
-# return response.json(0)
|
|
|
-# else:
|
|
|
-# return response.json(444, 'month')
|
|
|
+class UserAppFrequencyView(TemplateView):
|
|
|
+ @method_decorator(csrf_exempt)
|
|
|
+ def dispatch(self, *args, **kwargs):
|
|
|
+ return super(UserAppFrequencyView, self).dispatch(*args, **kwargs)
|
|
|
+
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ request_dict = request.POST
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ return self.validates(request_dict, operation)
|
|
|
+
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ request_dict = request.GET
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ return self.validates(request_dict, operation)
|
|
|
+
|
|
|
+ def validates(self, request_dict, operation):
|
|
|
+ token = request_dict.get('token', None)
|
|
|
+ response = ResponseObject()
|
|
|
+
|
|
|
+ token = TokenObject(token)
|
|
|
+ if token.code != 0:
|
|
|
+ return response.json(token.code)
|
|
|
+
|
|
|
+ if operation == 'refresh':
|
|
|
+ return self.do_refresh(request_dict, token.userID, response)
|
|
|
+ else:
|
|
|
+ return response.json(404)
|
|
|
+
|
|
|
+ def do_refresh(self, request_dict, userID, response):
|
|
|
+ type = request_dict.get('type', None)
|
|
|
+ month = request_dict.get('month', None)
|
|
|
+ if not type or not month:
|
|
|
+ return response.json(444, 'type')
|
|
|
+ else:
|
|
|
+ type = int(type)
|
|
|
+ now_time = int(time.time())
|
|
|
+ month = int(month)
|
|
|
+ uaf_qs = UserAppFrequencyModel.objects.filter(user__userID=userID)
|
|
|
+
|
|
|
+ if not uaf_qs.exists():
|
|
|
+ user = Device_User.objects.filter(userID=userID)[0]
|
|
|
+ data = {
|
|
|
+ 'user': user,
|
|
|
+ 'type': type,
|
|
|
+ 'data_time': month,
|
|
|
+ 'add_time': now_time,
|
|
|
+ 'update_time': now_time,
|
|
|
+ }
|
|
|
+ UserAppFrequencyModel.objects.create(**data)
|
|
|
+ return response.json(0)
|
|
|
+ else:
|
|
|
+ updateMonth = time.strftime('%m', time.localtime(month))
|
|
|
+ uaf = uaf_qs.values('id', 'type', 'data_time')[0]
|
|
|
+ dbMonth = time.strftime('%m', time.localtime(int(uaf['data_time'])))
|
|
|
+ print('update month is ' + updateMonth)
|
|
|
+ print('db month is ' + dbMonth)
|
|
|
+ if updateMonth == dbMonth:
|
|
|
+ UserAppFrequencyModel.objects.filter(id=uaf['id']).update(type=type)
|
|
|
+ return response.json(0)
|
|
|
+ elif updateMonth > dbMonth:
|
|
|
+ user = Device_User.objects.filter(userID=userID)[0]
|
|
|
+ data = {
|
|
|
+ 'user': user,
|
|
|
+ 'type': type,
|
|
|
+ 'data_time': month,
|
|
|
+ 'add_time': now_time,
|
|
|
+ 'update_time': now_time,
|
|
|
+ }
|
|
|
+ UserAppFrequencyModel.objects.create(**data)
|
|
|
+ return response.json(0)
|
|
|
+ else:
|
|
|
+ return response.json(444, 'month')
|
|
|
|
|
|
|
|
|
class loginCodeView(View):
|
|
@@ -3060,7 +3063,7 @@ class loginCodeView(View):
|
|
|
else:
|
|
|
sign_sms = 'Ansjer'
|
|
|
|
|
|
- res = aliSms.send_code_sms(phone=phone, code=login_code, sign_name=sign_sms, temp_msg='SMS_151600991')
|
|
|
+ res = aliSms.send_code_sms(phone=phone, code=login_code, sign_name=sign_sms, temp_msg='SMS_151675022')
|
|
|
|
|
|
if res['Code'] == 'OK':
|
|
|
if redisObject.set_data(key=login_code_key, val=login_code, expire=300) is not True:
|
|
@@ -3164,3 +3167,127 @@ class v3LoginByCodeView(View):
|
|
|
return response.json(0, res)
|
|
|
else:
|
|
|
return response.json(tko.code)
|
|
|
+
|
|
|
+
|
|
|
+class v3LoginByFingerprintView(View):
|
|
|
+ @method_decorator(csrf_exempt) # @csrf_exempt
|
|
|
+ def dispatch(self, *args, **kwargs):
|
|
|
+ return super(v3LoginByFingerprintView, self).dispatch(*args, **kwargs)
|
|
|
+
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ lang = request.POST.get('lang', None)
|
|
|
+ if not lang:
|
|
|
+ lang = request.POST.get('language', None)
|
|
|
+ response = ResponseObject(lang)
|
|
|
+ request_dict = request.POST
|
|
|
+
|
|
|
+ was_limited = getattr(request, 'limited', False)
|
|
|
+ if was_limited is True:
|
|
|
+ return response.json(5)
|
|
|
+ return self.validate(request_dict, response)
|
|
|
+
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ lang = request.GET.get('lang', None)
|
|
|
+ if not lang:
|
|
|
+ lang = request.GET.get('language', None)
|
|
|
+ response = ResponseObject(lang)
|
|
|
+ was_limited = getattr(request, 'limited', False)
|
|
|
+ if was_limited is True:
|
|
|
+ return response.json(5)
|
|
|
+ request_dict = request.GET
|
|
|
+ return self.validate(request_dict, response)
|
|
|
+
|
|
|
+ def validate(self, request_dict, response):
|
|
|
+ password = request_dict.get("password", None)
|
|
|
+
|
|
|
+ if password:
|
|
|
+ password = CommonService.decode_data(password)
|
|
|
+ if password is None:
|
|
|
+ return response.json(444)
|
|
|
+ else:
|
|
|
+ user_qs = Device_User.objects.filter(username=password, is_active=True, user_isValid=True)
|
|
|
+ if not user_qs.exists():
|
|
|
+ return response.json(104)
|
|
|
+ else:
|
|
|
+ users = user_qs.values('role__rid', 'role__roleName', 'userID', 'NickName', 'username', 'userEmail',
|
|
|
+ 'phone', 'password', 'userIconPath', 'fingerprint_enable', 'fingerprint_key')[0]
|
|
|
+ if users['fingerprint_enable'] == 0:
|
|
|
+ return response.json(112)
|
|
|
+ else:
|
|
|
+ userID = users['userID']
|
|
|
+ tko = TokenObject()
|
|
|
+ res = tko.generate(
|
|
|
+ data={'userID': userID, 'lang': response.lang, 'user': users['username'],
|
|
|
+ 'm_code': '123413243214'})
|
|
|
+ if tko.code == 0:
|
|
|
+ now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
|
|
|
+ user_qs.update(last_login=now_time, language=response.lang)
|
|
|
+ res['rid'] = users['role__rid']
|
|
|
+ res['roleName'] = users['role__roleName']
|
|
|
+ res['permList'] = ModelService.own_permission(userID)
|
|
|
+ res['userID'] = userID
|
|
|
+ # 昵称,邮箱,电话,刷新,头像
|
|
|
+ userIconPath = str(users['userIconPath'])
|
|
|
+ if userIconPath and userIconPath.find('static/') != -1:
|
|
|
+ userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
|
|
|
+ res['userIconUrl'] = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
|
|
|
+ else:
|
|
|
+ res['userIconUrl'] = ''
|
|
|
+ res['NickName'] = users['NickName'] if users['NickName'] is not None else ''
|
|
|
+ res['username'] = users['username'] if users['username'] is not None else ''
|
|
|
+ res['userEmail'] = users['userEmail'] if users['userEmail'] is not None else ''
|
|
|
+ res['phone'] = users['phone'] if users['phone'] is not None else ''
|
|
|
+ res['fingerprint_enable'] = users['fingerprint_enable']
|
|
|
+ res['fingerprint_key'] = CommonService.encode_data(content=users['fingerprint_key'], start=2)
|
|
|
+ return response.json(0, res)
|
|
|
+ else:
|
|
|
+ return response.json(tko.code)
|
|
|
+ else:
|
|
|
+ return response.json(444)
|
|
|
+
|
|
|
+
|
|
|
+class v3SetFingerprintView(View):
|
|
|
+ @method_decorator(csrf_exempt)
|
|
|
+ def dispatch(self, *args, **kwargs):
|
|
|
+ return super(v3SetFingerprintView, self).dispatch(*args, **kwargs)
|
|
|
+
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ request_dict = request.POST
|
|
|
+ return self.validate(request_dict)
|
|
|
+
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ request_dict = request.GET
|
|
|
+ return self.validate(request_dict)
|
|
|
+
|
|
|
+ def validate(self, request_dict):
|
|
|
+ lang = request_dict.get('lang', None)
|
|
|
+ token = request_dict.get('token', None)
|
|
|
+ fingerprint_enable = request_dict.get('fingerprint_enable', None)
|
|
|
+ fingerprint_key = request_dict.get('fingerprint_key', None)
|
|
|
+
|
|
|
+ response = ResponseObject()
|
|
|
+
|
|
|
+ token = TokenObject(token)
|
|
|
+ if token.code != 0:
|
|
|
+ return response.json(token.code)
|
|
|
+
|
|
|
+ if not lang:
|
|
|
+ return response.json(444, 'lang')
|
|
|
+
|
|
|
+ response.lang = lang
|
|
|
+
|
|
|
+ data = {}
|
|
|
+
|
|
|
+ if fingerprint_enable:
|
|
|
+ data['fingerprint_enable'] = int(fingerprint_enable)
|
|
|
+
|
|
|
+ if fingerprint_key:
|
|
|
+ data['fingerprint_key'] = CommonService.decode_data(fingerprint_key, end=3)
|
|
|
+
|
|
|
+ if len(data) > 0:
|
|
|
+ Device_User.objects.filter(userID=token.userID).update(**data)
|
|
|
+ return response.json(0)
|