OauthManage.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  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 var_dump import var_dump
  15. from django.utils.timezone import utc
  16. from django.views.generic.base import View
  17. from django.utils.decorators import method_decorator
  18. from django.views.decorators.csrf import csrf_exempt
  19. from Model.models import oauth_user, Device_User
  20. from Service.ModelService import ModelService
  21. from Object.TokenObject import TokenObject
  22. from Object.ResponseObject import ResponseObject
  23. from Service.CommonService import CommonService
  24. from Controller.CheckUserData import DataValid
  25. from django.contrib import auth
  26. import json, requests, datetime
  27. from django.contrib.auth.hashers import make_password # 对密码加密模块
  28. from Ansjer.config import DOMAIN_OAUTH_URI
  29. '''
  30. http://192.168.136.40:8077/oauth/relate/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvaWQiOiI3N2EzNzJmYi1jNDdiLTQ5OWQtYmY3Ni0wMTIwNzdiNGRiM2MiLCJleHAiOjE1MzQyMTE1MDR9.9DAwCctDk_qwn1kHfPqkvSGiFMunnb7I9mU44YlNchE
  31. '''
  32. class OauthRelateView(View):
  33. @method_decorator(csrf_exempt)
  34. def dispatch(self, *args, **kwargs):
  35. return super(OauthRelateView, self).dispatch(*args, **kwargs)
  36. # 定义host
  37. __http_host = None
  38. # 查询
  39. def get(self, request):
  40. request.encoding = 'utf-8'
  41. self.__http_host = request.META.get('PATH_INFO', None)
  42. response = ResponseObject()
  43. token = request.GET.get('token', None)
  44. return self.relate(token, response)
  45. # 认证登录
  46. def post(self, request):
  47. self.__http_host = request.META.get('PATH_INFO', None)
  48. response = ResponseObject()
  49. try:
  50. json_data = json.loads(request.body.decode("utf-8"))
  51. except Exception as e:
  52. print(repr(e))
  53. return response.json(10, repr(e))
  54. else:
  55. token = json_data.get('token', None)
  56. return self.relate(token, response)
  57. def relate(self, token, response):
  58. if token is not None:
  59. tko = TokenObject(token)
  60. tko.valid()
  61. # 设置语言
  62. response.lang = tko.lang
  63. if tko.code == 0:
  64. oid = tko.oid
  65. if oid is not None:
  66. # 判断用户是否已关联
  67. userID = tko.userID()
  68. if userID is not None:
  69. return self.loginUpdate(userID, response)
  70. # 未关联情况下进行关联,并创建用户
  71. else:
  72. return self.relateUser(oid, token, response)
  73. else:
  74. return response.json(444, 'oid')
  75. else:
  76. return response.json(tko.code)
  77. else:
  78. return response.json(444, 'token')
  79. def loginUpdate(self, userID, response):
  80. now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
  81. userData = Device_User.objects.filter(userID=userID)
  82. userData.update(last_login=now_time, online=True)
  83. return self.responseRes(userData[0], response)
  84. def relateUser(self, oid, token, response):
  85. try:
  86. http_oauth = requests.get(
  87. url='{domain_oauth}accounts/{oid}/'.format(oid=oid, domain_oauth=DOMAIN_OAUTH_URI),
  88. params={'token': token}
  89. )
  90. get_res = http_oauth.json()
  91. except Exception as e:
  92. return response.json(10, repr(e))
  93. else:
  94. code = get_res.get('code', None)
  95. if code == 0:
  96. datas = get_res['res']
  97. username = datas.get('username', None)
  98. password = datas.get('password', None)
  99. userValid = Device_User.objects.filter(username=username)
  100. try:
  101. if userValid.exists():
  102. UserData = userValid[0]
  103. else:
  104. dataValid = DataValid()
  105. if dataValid.email_validate(username):
  106. UserData = Device_User(username=username, userEmail=username, password=password,
  107. userID=CommonService.getUserID(μs=False, setOTAID=True),
  108. is_active=True, user_isValid=True)
  109. else:
  110. UserData = Device_User(username=username, password=password,
  111. userID=CommonService.getUserID(μs=False, setOTAID=True),
  112. is_active=True, user_isValid=True)
  113. UserData.save()
  114. except Exception as e:
  115. var_dump(repr(e))
  116. return response.json(106)
  117. else:
  118. ourValid = oauth_user.objects.get_or_create(oid=oid, userID=UserData)
  119. if ourValid:
  120. return self.responseRes(UserData, response)
  121. else:
  122. UserData.delete()
  123. return response.json(106)
  124. else:
  125. return response.json(code)
  126. def responseRes(self, UserData, response):
  127. if UserData.userID and UserData.username:
  128. res = {}
  129. role_dict = ModelService.own_role(userID=UserData.userID)
  130. res['rid'] = role_dict['rid']
  131. res['roleName'] = role_dict['roleName']
  132. res['permList'] = ModelService.own_permission(UserData.userID)
  133. res['username'] = UserData.username
  134. res['email'] = UserData.userEmail
  135. res['nickname'] = UserData.NickName
  136. print(res)
  137. return response.json(0, res)
  138. else:
  139. return response.json(10, 'userID,username参数错误')
  140. class OauthResUserView(View):
  141. @method_decorator(csrf_exempt)
  142. def dispatch(self, *args, **kwargs):
  143. return super(OauthResUserView, self).dispatch(*args, **kwargs)
  144. # 查询
  145. def get(self, request):
  146. request.encoding = 'utf-8'
  147. response = ResponseObject()
  148. username = request.GET.get('username', None)
  149. password = request.GET.get('password', None)
  150. return self.validate(username, password, response)
  151. # 认证登录
  152. def post(self, request):
  153. response = ResponseObject()
  154. try:
  155. print(request.body.decode("utf-8"))
  156. json_data = json.loads(request.body.decode("utf-8"))
  157. except Exception as e:
  158. var_dump(repr(e))
  159. return response.json(10, repr(e))
  160. else:
  161. username = json_data.get('username', None)
  162. password = json_data.get('password', None)
  163. return self.validate(username, password, response)
  164. def validate(self, username, password, response):
  165. if username is not None:
  166. dataValid = DataValid()
  167. if dataValid.mobile_validate(username):
  168. user_qs = Device_User.objects.filter(username=username)
  169. elif dataValid.email_validate(username):
  170. user_qs = Device_User.objects.filter(username=username)
  171. else:
  172. return response.json(104)
  173. if user_qs.exists():
  174. if user_qs[0].user_isValid and user_qs[0].is_active:
  175. User = auth.authenticate(username=user_qs[0].username, password=password)
  176. if User:
  177. res = {'username': user_qs[0].username}
  178. return response.json(0, res)
  179. else:
  180. return response.json(111)
  181. else:
  182. return response.json(110)
  183. else:
  184. return response.json(102)
  185. else:
  186. return response.json(444,'username')
  187. class ModifyRSPwdView(View):
  188. @method_decorator(csrf_exempt)
  189. def dispatch(self, *args, **kwargs):
  190. return super(ModifyRSPwdView, self).dispatch(*args, **kwargs)
  191. # 查询
  192. def get(self, request):
  193. response = ResponseObject()
  194. request_dict = request.GET
  195. return self.validate(request_dict, response)
  196. # 认证登录
  197. def post(self, request):
  198. response = ResponseObject()
  199. try:
  200. print(request.body.decode("utf-8"))
  201. json_data = json.loads(request.body.decode("utf-8"))
  202. except Exception as e:
  203. from var_dump import var_dump
  204. var_dump(repr(e))
  205. return response.json(10, repr(e))
  206. else:
  207. request_dict = json_data
  208. return self.validate(request_dict, response)
  209. def validate(self, request_dict, response):
  210. username = request_dict.get('username', None)
  211. oldPwd = request_dict.get('oldPwd', None)
  212. newPwd = request_dict.get('newPwd', None)
  213. UserAuth = auth.authenticate(username=username, password=oldPwd)
  214. if UserAuth:
  215. return self.ModifyPwd(username, newPwd, response)
  216. else:
  217. return response.json(99)
  218. def ModifyPwd(self, username, newPwd, response):
  219. user_qs = Device_User.objects.filter(username=username)
  220. upCount = user_qs.update(password=make_password(newPwd))
  221. if upCount:
  222. return response.json(0)
  223. class OauthForgetView(View):
  224. @method_decorator(csrf_exempt)
  225. def dispatch(self, *args, **kwargs):
  226. return super(OauthForgetView, self).dispatch(*args, **kwargs)
  227. # 查询
  228. def get(self, request):
  229. response = ResponseObject()
  230. request_dict = request.GET
  231. return self.validate(request_dict, response)
  232. # 认证登录
  233. def post(self, request):
  234. response = ResponseObject()
  235. try:
  236. json_data = json.loads(request.body.decode("utf-8"))
  237. except Exception as e:
  238. from var_dump import var_dump
  239. var_dump(repr(e))
  240. return response.json(10, repr(e))
  241. else:
  242. request_dict = json_data
  243. return self.validate(request_dict, response)
  244. def validate(self, request_dict, response):
  245. username = request_dict.get('username', None)
  246. dataValid = DataValid()
  247. if dataValid.email_validate(username):
  248. user_qs = Device_User.objects.filter(userEmail=username)
  249. elif dataValid.mobile_validate(username):
  250. user_qs = Device_User.objects.filter(username=username)
  251. else:
  252. return response.json(9)
  253. if user_qs.exists():
  254. return response.json(0, {'password': user_qs[0].password})
  255. else:
  256. return response.json(9)