PageRenderTime 58ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/base/user_api.py

https://github.com/rongoman/www-moai-toki
Python | 290 lines | 278 code | 10 blank | 2 comment | 15 complexity | 77edea567e70f8826665d17b3924a738 MD5 | raw file
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import tornado
  4. import tornado.web
  5. import datetime
  6. import re
  7. import log
  8. import json
  9. import etc
  10. import mongo
  11. import data_user
  12. import urlparse
  13. import util
  14. import admin
  15. import session_base
  16. from session_base import ApiSession
  17. from session_mc import BaseHandler
  18. class SignOutHandler( BaseHandler ) :
  19. @tornado.web.asynchronous
  20. def post( self ) :
  21. try :
  22. self.clear_all_cookies()
  23. if self.get_current_user() :
  24. domain = util.get_domain_from_host( self.request.host )
  25. data_user.set_logout( mongo.db_pool[domain].user, self.ss_data['uid'] )
  26. self.ss_store.delete( self.ss_data.ss_id )
  27. except Exception as e:
  28. log.exp(e)
  29. finally :
  30. self.ss_data = None
  31. res = { 'op':True, 'msg':'已退出' }
  32. self.write( json.dumps(res) )
  33. self.finish()
  34. return
  35. class SignUpHandler( BaseHandler ) :
  36. @tornado.web.asynchronous
  37. def post( self ) :
  38. try :
  39. email = self.get_argument( 'email', default=None )
  40. passwd = self.get_argument( 'passwd', default=None )
  41. log.i( 'email=%s , passwd=%s'%(email,passwd) )
  42. if not email :
  43. log.w( 'empty email' )
  44. res = { 'op':False, 'msg':'邮箱不能为空' }
  45. log.i( 'email=%s , passwd=%s'%(email,passwd) )
  46. self.write( json.dumps(res) )
  47. self.finish()
  48. return
  49. email = email.strip().lower()
  50. remail = re.compile( etc.mail_regex )
  51. if not remail.match( email ) :
  52. log.w( 'email verify failed' )
  53. res = { 'op':False, 'msg':'邮箱格式有误' }
  54. self.write( json.dumps(res) )
  55. self.finish()
  56. return
  57. domain = util.get_domain_from_host( self.request.host )
  58. if data_user.find_user_by_email( mongo.db_pool[domain].user, email ) :
  59. log.w( 'email has been used' )
  60. res = { 'op':False, 'msg':'该邮箱已注册' }
  61. self.write( json.dumps(res) )
  62. self.finish()
  63. return
  64. uid = data_user.count_userid( mongo.db_pool[domain].counter )
  65. if not uid :
  66. log.e( 'uid fetching error' )
  67. res = { 'op':False, 'msg':etc.err_500 }
  68. self.write( json.dumps(res) )
  69. self.finish()
  70. return
  71. res = data_user.create_user( mongo.db_pool[domain].user, uid, email, passwd )
  72. if not res :
  73. log.e( 'user create error' )
  74. res = { 'op':False, 'msg':etc.err_500 }
  75. self.write( json.dumps(res) )
  76. self.finish()
  77. return
  78. log.i( 'new id created: uid=%s , email=%s , passwd=%s'%(uid,email,passwd) )
  79. res = { 'op':True, 'msg':'感谢您注册,现在可以登录了' }
  80. self.write( json.dumps(res) )
  81. self.finish()
  82. return
  83. except Exception as e :
  84. log.exp(e)
  85. res = { 'op':False, 'msg':etc.err_500 }
  86. self.write( json.dumps(res) )
  87. self.finish()
  88. return
  89. class FindPwdHandler( BaseHandler ) :
  90. @tornado.web.asynchronous
  91. def post( self ) :
  92. try :
  93. email = self.get_argument( 'email', default=None )
  94. log.i( 'email=%s' % email)
  95. if not email :
  96. log.w( 'empty email' )
  97. res = { 'op':False, 'msg':'邮箱不能为空' }
  98. log.i( 'email=%s' % email )
  99. self.write( json.dumps(res) )
  100. self.finish()
  101. return
  102. email = email.strip().lower()
  103. remail = re.compile( etc.mail_regex )
  104. if not remail.match( email ) :
  105. log.w( 'email verify failed' )
  106. res = { 'op':False, 'msg':'邮箱格式有误' }
  107. self.write( json.dumps(res) )
  108. self.finish()
  109. return
  110. domain = util.get_domain_from_host( self.request.host )
  111. if not data_user.find_user_by_email( mongo.db_pool[domain].user, email ) :
  112. log.w( 'email does not exit' )
  113. res = { 'op':False, 'msg':'该邮箱还没有注册' }
  114. self.write( json.dumps(res) )
  115. self.finish()
  116. return
  117. vid = util.make_a_secret()
  118. vid = vid.replace( "+", "" )
  119. vid = vid.replace( '=', "" ) #去掉 + = 号避免get请求编码错误
  120. reset = data_user.create_reset( mongo.db_pool[domain].reset, email, vid )
  121. if not reset:
  122. log.e( 'reset_pwd create error')
  123. res = { 'op': False, 'msg': etc.err_500}
  124. self.write( json.dumps(res) )
  125. self.finish();
  126. return
  127. log.i( 'new reset_pwd created: vid=%s email=%s' % (str(vid),email) )
  128. mail = admin.send_mail( email, '重置密码', etc.url['user_resetpwd']+'?vid='+vid )
  129. if not mail:
  130. log.w('send mail failure')
  131. reset = data_user.del_reset( mongo.db_pool[domain].reset, email )
  132. res = { 'op':True, 'msg':'发送邮件失败,请重新尝试' }
  133. self.write(json.dumps(res))
  134. self.finish();
  135. return
  136. else:
  137. log.i('send mail success')
  138. res = { 'op':True, 'msg':'找回密码已经发送到您的邮箱,请查收' }
  139. self.write( json.dumps(res) )
  140. self.finish()
  141. return
  142. except Exception as e :
  143. log.exp(e)
  144. res = { 'op':False, 'msg':etc.err_500 }
  145. self.write( json.dumps(res) )
  146. self.finish()
  147. return
  148. class ResetPwdHandler( BaseHandler ) :
  149. @tornado.web.asynchronous
  150. def post( self ) :
  151. try :
  152. email = self.get_argument( 'email',default=None )
  153. passwd = self.get_argument( 'passwd',default=None )
  154. log.i('email=%s passwd=%s' % (email, passwd))
  155. if not email or not passwd:
  156. log.w( 'empty passwd' )
  157. res = { 'op':False, 'msg':'密码不能为空' }
  158. self.write( json.dumps(res) )
  159. self.finish()
  160. return
  161. domain = util.get_domain_from_host( self.request.host )
  162. user = data_user.update_user_by_email( mongo.db_pool[domain].user, email, passwd )
  163. if not user :
  164. log.e( 'user update error' )
  165. res = { 'op':False, 'msg':etc.err_500 }
  166. self.write( json.dumps(res) )
  167. self.finish()
  168. return
  169. reset = data_user.del_reset( mongo.db_pool[domain].reset, email )
  170. log.i(reset)
  171. res = { 'op': True, 'msg': '重置密码成功'}
  172. self.write( json.dumps(res) )
  173. self.finish();
  174. return
  175. except Exception as e :
  176. log.exp(e)
  177. res = { 'op':False, 'msg':etc.err_500 }
  178. self.write( json.dumps(res) )
  179. self.finish()
  180. return
  181. class EmailEditHandler( BaseHandler ):
  182. @ApiSession
  183. def post( self ) :
  184. try :
  185. new_email = self.get_argument( 'new_email', default=None )
  186. log.i( 'email=%s' % new_email)
  187. if not new_email :
  188. log.w( 'empty email' )
  189. res = { 'op':False, 'msg':'邮箱不能为空' }
  190. log.i( 'email=%s' % new_email )
  191. self.write( json.dumps(res) )
  192. self.finish()
  193. return
  194. email = new_email.strip().lower()
  195. remail = re.compile( etc.mail_regex )
  196. if not remail.match( email ) :
  197. log.w( 'email verify failed' )
  198. res = { 'op':False, 'msg':'邮箱格式有误' }
  199. self.write( json.dumps(res) )
  200. self.finish()
  201. return
  202. domain = util.get_domain_from_host( self.request.host )
  203. uid = self.ss_data['uid']
  204. res = data_user.update_user_by_id( mongo.db_pool[domain].user, uid, None, email, None )
  205. if not res:
  206. log.e( 'update email by uid error')
  207. res = { 'op': False, 'msg': etc.err_500}
  208. self.write( json.dumps(res) )
  209. self.finish();
  210. return
  211. log.i ('update email by uid success')
  212. res = {'op':True, 'msg': "修改邮箱成功"}
  213. self.write( json.dumps(res) )
  214. self.finish()
  215. return
  216. except Exception as e :
  217. log.exp(e)
  218. res = { 'op':False, 'msg':etc.err_500 }
  219. self.write( json.dumps(res) )
  220. self.finish()
  221. return
  222. class PwdEditHandler( BaseHandler ) :
  223. @ApiSession
  224. def post( self ) :
  225. try :
  226. old_pwd = self.get_argument('old_pwd', default=None)
  227. new_pwd = self.get_argument('new_pwd', default=None)
  228. log.i( 'old pwd=%s, new pwd = ' % (old_pwd, new_pwd))
  229. if not new_pwd or not old_pwd:
  230. log.w( 'empty new_pwd or old_pwd' )
  231. res = { 'op':False, 'msg':'密码不能为空' }
  232. log.i( 'old pwd=%s, new pwd = ' % (old_pwd, new_pwd))
  233. self.write( json.dumps(res) )
  234. self.finish()
  235. return
  236. domain = util.get_domain_from_host( self.request.host )
  237. uid = self.ss_data['uid']
  238. res = data_user.update_user_by_id( mongo.db_pool[domain].user, uid, new_pwd, None, None )
  239. if not res:
  240. log.e( 'update password by uid error')
  241. res = { 'op': False, 'msg': etc.err_500}
  242. self.write( json.dumps(res) )
  243. self.finish();
  244. return
  245. log.i ('update password by uid success')
  246. res = {'op':True, 'msg': "修改密码成功"}
  247. self.write( json.dumps(res) )
  248. self.finish()
  249. return
  250. except Exception as e :
  251. log.exp(e)
  252. res = { 'op':False, 'msg':etc.err_500 }
  253. self.write( json.dumps(res) )
  254. self.finish()
  255. return
  256. class ApiNotFoundHandler( BaseHandler ) :
  257. def get( self ) :
  258. raise tornado.web.HTTPError( 503 )
  259. @tornado.web.asynchronous
  260. def post( self ) :
  261. log.i( '503' )
  262. res = { 'op':False, 'msg':'无此功能' }
  263. self.write( json.dumps(res) )
  264. self.finish()