123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- #!/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)
|