OauthManage.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: Ansjer
  7. @software: PyCharm
  8. @DATE: 2018/7/20 11:13
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: OauthManage.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. from django.views.generic.base import View
  15. from django.utils.decorators import method_decorator
  16. from django.views.decorators.csrf import csrf_exempt
  17. from Service.TokenManager import *
  18. from Model.models import oauth_user,Auth_Captcha
  19. from django.contrib import auth
  20. from django.http import HttpResponseRedirect
  21. import json
  22. from Service.ResponseService import *
  23. import requests
  24. from Service.ModelService import ModelService
  25. from django.middleware.csrf import get_token
  26. from django.http import JsonResponse
  27. class OauthManage(View):
  28. @method_decorator(csrf_exempt)
  29. def dispatch(self, *args, **kwargs):
  30. return super(OauthManage, self).dispatch(*args, **kwargs)
  31. # 查询
  32. def get(self, request, *args, **kwargs):
  33. return
  34. # 认证登录
  35. def post(self, request, *args, **kwargs):
  36. try:
  37. json_data = json.loads(request.body.decode("utf-8"))
  38. except Exception as e:
  39. print(repr(e))
  40. return ResponseJSON(10,repr(e))
  41. else:
  42. access_token = json_data.get('access_token', None)
  43. if access_token is not None:
  44. try:
  45. ser = requests.get(url='http://192.168.136.45:9898/accounts/user/',
  46. data={'access_token': access_token})
  47. ser_data = json.loads(ser.content)
  48. except Exception as e:
  49. print(repr(e))
  50. return ResponseJSON(10,repr(e))
  51. else:
  52. oid = ser_data['oid']
  53. if oid is not None:
  54. ou = oauth_user.objects.filter(oid=oid)
  55. # 用户存在情况查找绑定用户
  56. if ou.exists():
  57. user_qs =ou[0].userID
  58. userID = user_qs.userID
  59. #用户不存在情况新增一个用户
  60. else:
  61. oid = ser_data['oid']
  62. username = ser_data['username']
  63. password = ser_data['password']
  64. email = ser_data['email']
  65. try:
  66. CaptchaRecord = Auth_Captcha()
  67. CaptchaRecord.authcaptca = '1234'
  68. CaptchaRecord.username = username
  69. CaptchaRecord.sendtype = 'register'
  70. CaptchaRecord.save()
  71. except Exception as e:
  72. return ResponseJSON(10,repr(e))
  73. try:
  74. UserData = Device_User(username=username, userEmail=email, password=password,
  75. userID=CommonService.getUserID(μs=False, setOTAID=True),
  76. is_active=True, user_isValid=True)
  77. UserData.save()
  78. except Exception as e:
  79. errorInfo = traceback.format_exc()
  80. print('Create User Error: %s' % errorInfo)
  81. return ResponseJSON(424,'Create User Error:' + repr(e))
  82. else:
  83. ourValid = oauth_user.objects.create(oid=oid, userID=UserData)
  84. if ourValid:
  85. userID = UserData.userID
  86. if userID:
  87. userValid = Device_User.objects.filter(userID=userID)
  88. if userValid.exists():
  89. authtoken_Obj = AuthToken_Token.objects.filter(tokenID_id=userID)
  90. if authtoken_Obj.exists():
  91. tokenManager = JSONTokenManager()
  92. access_token = tokenManager.deToken(authtoken_Obj[0].access_token)
  93. refresh_token = tokenManager.deToken(authtoken_Obj[0].refresh_token)
  94. else:
  95. access_token = False
  96. refresh_token = False
  97. if access_token is not False and refresh_token is not False:
  98. resultDict = {
  99. 'result': {'access_token': access_token, 'refresh_token': refresh_token},
  100. 'error_code': 0}
  101. else:
  102. JSON = json.dumps({'userID': userID, 'mCode': ''}, ensure_ascii=False)
  103. tokenManager = JSONTokenManager()
  104. tokenJSON = tokenManager.generate_AToken(JSON=JSON,
  105. iCode=tokenManager.getSalt(strLen=8))
  106. resultDict = json.loads(tokenJSON)
  107. error_code = resultDict.get('error_code', None)
  108. if error_code != None and error_code == 0:
  109. result = resultDict.get('result', None)
  110. if result != None:
  111. import datetime
  112. now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
  113. userValid.update(last_login=now_time, online=True)
  114. role_dict = ModelService.own_role(userID=userID)
  115. result['rid'] = role_dict['rid']
  116. result['roleName'] = role_dict['roleName']
  117. result['permList'] = ModelService.own_permission(userID)
  118. result['username'] = userValid[0].username
  119. return ResponseJSON(0, result)
  120. return ResponseJSON(10)
  121. # 修改 资源改变
  122. def put(self, request):
  123. return ResponseJSON(404)
  124. # 修改 属性改变
  125. def PATCH(self, request):
  126. return ResponseJSON(404)
  127. # 删除
  128. def delete(self, request):
  129. return ResponseJSON(404)
  130. def validation(self, request_dict, *args, **kwargs):
  131. return ResponseJSON(404)