|
@@ -1,286 +0,0 @@
|
|
|
-#!/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)
|