#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved. @AUTHOR: ASJRD018 @NAME: Ansjer @software: PyCharm @DATE: 2018/7/20 11:13 @Version: python3.6 @MODIFY DECORD:ansjer dev @file: OauthManage.py @Contact: chanjunkai@163.com """ from var_dump import var_dump from django.utils.timezone import utc from django.views.generic.base import View from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from Model.models import oauth_user, Device_User from Service.ModelService import ModelService from Object.TokenObject import TokenObject from Object.ResponseObject import ResponseObject from Service.CommonService import CommonService from Controller.CheckUserData import DataValid from django.contrib import auth import json, requests, datetime from django.contrib.auth.hashers import make_password # 对密码加密模块 from Ansjer.config import DOMAIN_OAUTH_URI ''' http://192.168.136.40:8077/oauth/relate/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvaWQiOiI3N2EzNzJmYi1jNDdiLTQ5OWQtYmY3Ni0wMTIwNzdiNGRiM2MiLCJleHAiOjE1MzQyMTE1MDR9.9DAwCctDk_qwn1kHfPqkvSGiFMunnb7I9mU44YlNchE ''' class OauthRelateView(View): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(OauthRelateView, self).dispatch(*args, **kwargs) # 定义host __http_host = None # 查询 def get(self, request): request.encoding = 'utf-8' self.__http_host = request.META.get('PATH_INFO', None) response = ResponseObject() token = request.GET.get('token', None) return self.relate(token, response) # 认证登录 def post(self, request): self.__http_host = request.META.get('PATH_INFO', None) response = ResponseObject() try: json_data = json.loads(request.body.decode("utf-8")) except Exception as e: print(repr(e)) return response.json(10, repr(e)) else: token = json_data.get('token', None) return self.relate(token, response) def relate(self, token, response): if token is not None: tko = TokenObject(token) tko.valid() # 设置语言 response.lang = tko.lang if tko.code == 0: oid = tko.oid if oid is not None: # 判断用户是否已关联 userID = tko.userID() if userID is not None: return self.loginUpdate(userID, response) # 未关联情况下进行关联,并创建用户 else: return self.relateUser(oid, token, response) else: return response.json(444, 'oid') else: return response.json(tko.code) else: return response.json(444, 'token') def loginUpdate(self, userID, response): now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc) userData = Device_User.objects.filter(userID=userID) userData.update(last_login=now_time, online=True) return self.responseRes(userData[0], response) def relateUser(self, oid, token, response): try: http_oauth = requests.get( url='{domain_oauth}accounts/{oid}/'.format(oid=oid, domain_oauth=DOMAIN_OAUTH_URI), params={'token': token} ) get_res = http_oauth.json() except Exception as e: return response.json(10, repr(e)) else: code = get_res.get('code', None) if code == 0: datas = get_res['res'] username = datas.get('username', None) password = datas.get('password', None) userValid = Device_User.objects.filter(username=username) try: if userValid.exists(): UserData = userValid[0] else: dataValid = DataValid() if dataValid.email_validate(username): UserData = Device_User(username=username, userEmail=username, password=password, userID=CommonService.getUserID(μs=False, setOTAID=True), is_active=True, user_isValid=True) else: UserData = Device_User(username=username, password=password, userID=CommonService.getUserID(μs=False, setOTAID=True), is_active=True, user_isValid=True) UserData.save() except Exception as e: var_dump(repr(e)) return response.json(106) else: ourValid = oauth_user.objects.get_or_create(oid=oid, userID=UserData) if ourValid: return self.responseRes(UserData, response) else: UserData.delete() return response.json(106) else: return response.json(code) def responseRes(self, UserData, response): if UserData.userID and UserData.username: res = {} role_dict = ModelService.own_role(userID=UserData.userID) res['rid'] = role_dict['rid'] res['roleName'] = role_dict['roleName'] res['permList'] = ModelService.own_permission(UserData.userID) res['username'] = UserData.username res['email'] = UserData.userEmail res['nickname'] = UserData.NickName print(res) return response.json(0, res) else: return response.json(10, 'userID,username参数错误') class OauthResUserView(View): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(OauthResUserView, self).dispatch(*args, **kwargs) # 查询 def get(self, request): request.encoding = 'utf-8' response = ResponseObject() username = request.GET.get('username', None) password = request.GET.get('password', None) return self.validate(username, password, response) # 认证登录 def post(self, request): response = ResponseObject() try: print(request.body.decode("utf-8")) json_data = json.loads(request.body.decode("utf-8")) except Exception as e: var_dump(repr(e)) return response.json(10, repr(e)) else: username = json_data.get('username', None) password = json_data.get('password', None) return self.validate(username, password, response) def validate(self, username, password, response): if username is not None: dataValid = DataValid() if dataValid.mobile_validate(username): user_qs = Device_User.objects.filter(username=username) elif dataValid.email_validate(username): user_qs = Device_User.objects.filter(username=username) else: return response.json(104) if user_qs.exists(): if user_qs[0].user_isValid and user_qs[0].is_active: User = auth.authenticate(username=user_qs[0].username, password=password) if User: res = {'username': user_qs[0].username} return response.json(0, res) else: return response.json(111) else: return response.json(110) else: return response.json(102) else: return response.json(444,'username') class ModifyRSPwdView(View): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(ModifyRSPwdView, self).dispatch(*args, **kwargs) # 查询 def get(self, request): response = ResponseObject() request_dict = request.GET return self.validate(request_dict, response) # 认证登录 def post(self, request): response = ResponseObject() try: print(request.body.decode("utf-8")) json_data = json.loads(request.body.decode("utf-8")) except Exception as e: from var_dump import var_dump var_dump(repr(e)) return response.json(10, repr(e)) else: request_dict = json_data return self.validate(request_dict, response) def validate(self, request_dict, response): username = request_dict.get('username', None) oldPwd = request_dict.get('oldPwd', None) newPwd = request_dict.get('newPwd', None) UserAuth = auth.authenticate(username=username, password=oldPwd) if UserAuth: return self.ModifyPwd(username, newPwd, response) else: return response.json(99) def ModifyPwd(self, username, newPwd, response): user_qs = Device_User.objects.filter(username=username) upCount = user_qs.update(password=make_password(newPwd)) if upCount: return response.json(0) class OauthForgetView(View): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(OauthForgetView, self).dispatch(*args, **kwargs) # 查询 def get(self, request): response = ResponseObject() request_dict = request.GET return self.validate(request_dict, response) # 认证登录 def post(self, request): response = ResponseObject() try: json_data = json.loads(request.body.decode("utf-8")) except Exception as e: from var_dump import var_dump var_dump(repr(e)) return response.json(10, repr(e)) else: request_dict = json_data return self.validate(request_dict, response) def validate(self, request_dict, response): username = request_dict.get('username', None) dataValid = DataValid() if dataValid.email_validate(username): user_qs = Device_User.objects.filter(userEmail=username) elif dataValid.mobile_validate(username): user_qs = Device_User.objects.filter(username=username) else: return response.json(9) if user_qs.exists(): return response.json(0, {'password': user_qs[0].password}) else: return response.json(9)