control_auth.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. #coding=utf-8
  2. '''
  3. '''
  4. import json,time,random,datetime
  5. from django.db import transaction
  6. from django.db.models import Q
  7. import common.models as cm
  8. import common.error_info as ce
  9. import common.common_functions as ccf
  10. import common.common_control as ccc
  11. from utils.aestool import aescbc
  12. def gen_code():
  13. """
  14. """
  15. code = ""
  16. while True:
  17. code = "".join([str(random.choice([0,1,2,3,5,6,7,8,9])) for x in range(0,6)])
  18. if cm.UserInfo.objects.filter(usercode=code).exists():
  19. time.sleep(0.1)
  20. continue
  21. break
  22. return code
  23. def add_wxauth_info(request):
  24. """
  25. """
  26. qdata = request.json
  27. need_params = ["nickname","avatar","openid"]
  28. mse = ccf.check_params(*need_params,**qdata)
  29. if mse:
  30. raise ce.TipException(mse)
  31. vals = ccf.get_need_params(*need_params,**qdata)
  32. obj,flag = cm.UserInfo.objects.get_or_create(openid=vals.get("openid"))
  33. obj.nickname = vals.get("username")
  34. obj.avatar = vals.get("avatar")
  35. obj.save()
  36. return obj
  37. def get_wxauth_info(request):
  38. """
  39. """
  40. user = request.user
  41. uid = user.get("id")
  42. user = cm.UserInfo.objects.filter(id=uid).values().first()
  43. cur_match_id = ccc.get_signup_match().id
  44. #player = cm.Player.objects.filter(user_id=uid,match_id=cur_match_id).order_by("-id").first()
  45. gt_time = datetime.timedelta(days=-365)+datetime.datetime.now()
  46. #player = cm.Player.objects.filter(user_id=uid,match_status=1,ctime__gte=gt_time).order_by("-id").first()
  47. player = cm.Player.objects.filter(user_id=uid).order_by("-id").first()
  48. #print(uid,cur_match_id)
  49. if player:
  50. user["role"] = player.role
  51. else:
  52. user["role"] = 0
  53. if user["comment_status"]==0:
  54. user["role"] = 0
  55. return user
  56. def update_wxauth_info(request):
  57. """
  58. """
  59. uid = request.user.id
  60. qdata = request.json
  61. cm.UserInfo.objects.filter(id=uid).update(userinfo=json.dumps(qdata))
  62. return user
  63. def login_user(request):
  64. """
  65. """
  66. info = request.json
  67. usercode = info.get('usercode')
  68. openid = info.get('openid')
  69. avatar = info.get('avatarUrl')
  70. nickname = info.get('nickName')
  71. if not usercode:
  72. raise ce.TipException(u"缺少参数!")
  73. user = cm.UserInfo.objects.filter(usercode=usercode).first()
  74. if not user:
  75. raise ce.TipException(u"用户代号不存在!")
  76. if user.is_bind:
  77. if not openid == user.openid:
  78. raise ce.TipException(u"微信号与用户代码不配!")
  79. if not cm.Player.objects.filter(user_id=user.id).first():
  80. raise ce.TipException(u"该账号未参加任何比赛,不能登录!")
  81. user.openid = openid
  82. user.avatar = avatar
  83. user.nickname = nickname
  84. user.is_bind = 1
  85. user.save()
  86. tstr = "{}_{}{}".format(user.id,time.time(),random.randint(100000,999999))
  87. token = aescbc.encrypt(tstr)
  88. return {"id":user.id,"token":token}
  89. def login_user_v3(request):
  90. """
  91. """
  92. info = request.json
  93. openid = info.get('openid')
  94. avatar = info.get('avatarUrl')
  95. nickname = info.get('nickName')
  96. phone = info.get('phone','')
  97. phcode = info.get('phcode')
  98. unionid = info.get('unionid','')
  99. #if not openid and not unionid:
  100. # raise ce.TipException(u"缺少openid!")
  101. if not openid and not phone:
  102. raise ce.TipException(u"缺少openid!")
  103. #if not ccc.cache.get(openid):
  104. # raise ce.TipException(u"非法openid!")
  105. user = None
  106. if openid:
  107. user = cm.UserInfo.objects.filter(openid=openid).order_by("-id").first()
  108. else:
  109. if unionid or phone:
  110. user = cm.UserInfo.objects.filter(Q(phone=phone)|Q(unionid=unionid)).order_by("-id").first()
  111. #if unionid:
  112. # user = cm.UserInfo.objects.filter(unionid=unionid).order_by("-id").first()
  113. #if not user and openid:
  114. # user = cm.UserInfo.objects.filter(openid=openid).order_by("-id").first()
  115. #if not user and phone:
  116. # user = cm.UserInfo.objects.filter(phone=phone).order_by("-id").first()
  117. if not user:
  118. #新用户
  119. usercode = gen_code()
  120. user,flag = cm.UserInfo.objects.get_or_create(
  121. openid = openid,
  122. )
  123. user.avatar = avatar
  124. user.nickname = nickname
  125. user.usercode = usercode
  126. user.is_bind = 1
  127. user.username = nickname
  128. user.phone = phone
  129. user.unionid = unionid
  130. user.save()
  131. tstr = "{}_{}{}".format(user.id,time.time(),random.randint(100000,999999))
  132. token = aescbc.encrypt(tstr)
  133. return {"id":user.id,"token":token,"status":1,"role":user.role,"phone":user.phone,"username":user.username}
  134. else:
  135. user.avatar = avatar
  136. user.nickname = nickname
  137. user.is_bind = 1
  138. user.username = nickname
  139. user.unionid = unionid
  140. user.save()
  141. player = cm.Player.objects.filter(user_id=user.id).order_by("-id").first()
  142. if player:
  143. role = player.role
  144. else:
  145. role = user.role
  146. tstr = "{}_{}{}".format(user.id,time.time(),random.randint(100000,999999))
  147. token = aescbc.encrypt(tstr)
  148. return {"id":user.id,"token":token,"status":1,"role":role,"phone":user.phone,"username":user.username}
  149. def bind_user_phone(request):
  150. """
  151. """
  152. uid = request.user.id
  153. qdata = request.json
  154. phone = qdata.get("phone")
  155. phcode = qdata.get("phcode")
  156. orgcode = ccc.cache.get(phone)
  157. if not phcode == orgcode:
  158. raise ce.TipException(u"验证码不正确!")
  159. cm.UserInfo.objects.filter(id=uid).update(phone=phone)
  160. def get_wxauth_info_v3(request):
  161. """
  162. """
  163. qdata = request.json
  164. openid = qdata.get("openid")
  165. unionid = qdata.get("unionid")
  166. phone = qdata.get("phone")
  167. phcode = qdata.get("phcode")
  168. user = None
  169. if openid:
  170. user = cm.UserInfo.objects.filter(openid=openid).values().first()
  171. else:
  172. if phone:
  173. #orgcode = ccc.cache.get(phone)
  174. #if not phcode == orgcode and not phone=="13883187629":
  175. # raise ce.TipException(u"验证码不正确!")
  176. user = cm.UserInfo.objects.filter(phone=phone).values().first()
  177. if unionid:
  178. user = cm.UserInfo.objects.filter(unionid=unionid).values().first()
  179. #if phone:
  180. # orgcode = ccc.cache.get(phone)
  181. # if not phcode == orgcode and not phone=="13883187629":
  182. # raise ce.TipException(u"验证码不正确!")
  183. #if unionid:
  184. # user = cm.UserInfo.objects.filter(unionid=unionid).values().first()
  185. #if not user and openid:
  186. # user = cm.UserInfo.objects.filter(openid=openid).values().first()
  187. #if not user and phone:
  188. # user = cm.UserInfo.objects.filter(phone=phone).values().first()
  189. if not user:
  190. return {}
  191. cur_match_id = ccc.get_signup_match().id
  192. gt_time = datetime.timedelta(days=-365)+datetime.datetime.now()
  193. player = cm.Player.objects.filter(user_id=user["id"]).order_by("-id").first()
  194. if player:
  195. user["role"] = player.role
  196. else:
  197. user["role"] = 0
  198. if user["comment_status"]==0:
  199. user["role"] = 0
  200. tstr = "{}_{}{}".format(user["id"],time.time(),random.randint(100000,999999))
  201. token = aescbc.encrypt(tstr)
  202. user["token"] = token
  203. return user