def POST(self): """验证通知""" # 检查登录 finder = user.getUser() if not finder: # 未登录 return json(UNLOGIN, "未登录") # 检查输入 info = web.input(number=None, name=None) status, school = notify.checkInput(info) if not (status is True): # 输入有误 return json(status, school) # 检查手机号和查找人的账号 phone = user.getPhone() if not phone: return json(NO_PHONE, "需要验证手机后使用") elif not notify.checkFind(finder['id'], finder['yyid']): return json(LIMITED, "当前账号被举报封禁或者超过大尝试次数[存在未确认的记录]") # 验证失主信息 data = yunyin.verify(info['number'], info['name'], school) if not data: # 查询失败 return self.next(info, school, 0) elif data['status'] == -2: # 验证不匹配 return json(RETRY, "验证不匹配") elif data['status'] != 1: # 无该用户 return self.next(info, school, 0) else: # 验证成功 lost = data['info'] # 判断是否是自己的账号 if phone == lost['phone']: return json(-5, "请不要用自己的账号测试!") # 更新本地数据库 lost_id = notify.sync(lost) if not lost_id: return json(-5, "失主学号在系统中数据异常") elif not lost['phone']: # 无手机号 return self.next(info, school, lost_id) # 失主状态检查 if not notify.checkLost(lost_id): return json(LIMITED, '失主未确认记录过多,或者设置了防骚扰,禁止发送通知') # 发送短信 finder_school_info = userModel.find(finder['id'], 'school') if finder_school_info and finder_school_info.school: finder_name = config.SCHOOL[finder_school_info.school] + '的' + finder['name'] else: finder_name = finder['name'] token, long_url = url.create(finder['id'], lost_id) if sms.sendNotify(lost['phone'], finder_name, phone, url.short(long_url)): # 短信发送通知 recordModel.add(lost_id=lost_id, find_id=finder['id'], way=config.NOTIFY_SMS, token=token) return json(SUCCESSS, "通知成功") else: # 发送失败,转到下一步 return self.next(info, school, lost_id)
def POST(self): """发送广播""" userInfo = cookie.get('b') if not userInfo: return json(RETRY, '验证信息无效') finder = user.getUser() if not user: return json(UNLOGIN, '未登录') else: find_id = finder['id'] school = userInfo['sch'] inputData = web.input(msg=None, sch=0) if userInfo['id'] > 0: uid = userInfo['id'] elif not (inputData['sch'] and int(inputData['sch']) == school): return json(RETRY, '学校不匹配!') else: # 创建失主临时账号 uid = userModel.add(name=userInfo['name'], number=userInfo['card'], school=school, type=-1) # 输入过滤 msg = inputData['msg'] and re.sub(r'</?\w+[^>]*>', '', inputData['msg']) msg = msg and msg[0:16] way = 0x0 token, viewurl = url.create(find_id, uid) # 判断学校 if school == 1: # 南开 from lib.bbs_nku import post as nkubbs_broadcast if nkubbs_broadcast(userInfo['card'], userInfo['name'], finder['name'], finder['call'], msg): way = way | config.NOTIFY_BBS elif school == 2: # 天大 # tjubbs from lib.bbs_tju import broadcast as tjubbs_broadcast site_url = "http://find.yunyin.org" if tjubbs_broadcast(userInfo['card'], userInfo['name'], site_url, msg): way = way | config.NOTIFY_BBS elif school == 4: # 河北工业大学 return json(LIMITED, "正在接入中") elif school == 3: # 商职 return json(LIMITED, "正在接入中") else: return json(LIMITED, "学校暂不支持") # 发送微博 weibo_msg = weibo.format(school, userInfo['card'], userInfo['name'], msg) if weibo.post(weibo_msg): way = way | config.NOTIFY_WEIBO if way != 0x0: # 更新数l据库 recordModel.add(lost_id=uid, find_id=find_id, way=way, token=token[:16]) cookie.delete('b') return json(SUCCESSS, way) else: return json(RETRY, '发送出错!')
def next(self, info, school, lost_id=0): """无手机号转入下一步""" if lost_id == 0: lost_user = userModel.find(_field="id", number=info['number'], school=school) if lost_user: lost_id = lost_user.id data = {'name': info['name'], 'card': info['number'], 'sch': school, 'id': lost_id} cookie.set('b', data) return json(NO_USER, lost_id and school)
def POST(self): """举报,参数ID""" data = web.input(id=None, status=0, token=None) if not data.status or not data.id: return json(0, '信息不完整') elif data.token: record = recordModel.find(data.id, 'find_id,status', token=data.token) else: uid = getUserId() record = recordModel.find(data.id, 'find_id,status', lost_id=uid) if not record: return json(0, '记录已不存在') elif record.status != 0: return json(0, '记录已经修改,如需要再次修改,请联系[email protected]') elif int(data.status) == 1: #感谢 #发送感谢短信 recordModel.save(data.id, status=1) return json(1, '已发送感谢') elif int(data.status) == -1: #举报 userModel.save(record.find_id, status=-1) recordModel.save(data.id, status=-1) return json(1, '已举报') else: return json(0, '状态更新失败')
def POST(self): """举报,参数ID""" data = web.input(id=None,status=0,token=None) if not data.status or not data.id: return json(0, '信息不完整') elif data.token: record= recordModel.find(data.id,'find_id,status', token=data.token) else: uid = getUserId() record = recordModel.find(data.id,'find_id,status', lost_id=uid) if not record: return json(0, '记录已不存在') elif record.status != 0: return json(0, '记录已经修改,如需要再次修改,请联系[email protected]') elif int(data.status)==1: #感谢 #发送感谢短信 recordModel.save(data.id, status=1) return json(1,'已发送感谢') elif int(data.status)==-1: #举报 userModel.save(record.find_id,status=-1) recordModel.save(data.id, status=-1) return json(1,'已举报') else: return json(0,'状态更新失败')
def POST(self): """ 验证验证码 """ code = web.input(code=None)['code'] if not code: return json(0, '验证码错误') else: data = cookie.get('phone') cookie.delete('phone') if not data: return json(-1, '验证信息不存在') elif data['code'] != code: return json(-1, '验证码错误请重新发送') elif data['type'] == 1: # 临时登录 name = data['name'] dbuser = userModel.find('id,yyid,name', phone=data['phone']) if not dbuser: # 数据库中不存在 uid = userModel.add(name=name, phone=data['phone'], type=0) user.saveUser(uid, name, data['phone']) elif not dbuser.yyid: # 数据库中的临时用户 userModel.save(dbuser.id, name=name) user.saveUser(dbuser.id, name, data['phone']) else: # 数据库中存在的云印用户 name = dbuser.name user.saveUser(dbuser.id, name, data['phone'], dbuser.yyid) return json(1, name) elif yunyin.bindPhone(data['phone']): # 绑定手机 user.savePhone(data['phone']) return json(1, '手机绑定完成') else: # 数据绑定失败 return json(-1, '手机信息和云印API同步出错,如果绑定过云印南天账号,请直接使用该账号登录')
def POST(self): """验证手机号""" data = web.input(phone=None, name=None) if not validate.phone(data['phone']): # 手机号无效 return json(0, "号码无效") elif user.getUser(): # 判断是否登录 if user.getPhone(): # 已登录不可修改手机 return json(-1, "已经绑定过手机") else: # 绑定手机 dbuser = userModel.find('yyid', phone=data['phone']) if dbuser and dbuser.yyid: return json(-1, "一个手机只能绑定一个用户") else: data['type'] = 0 code = sms.sendBind(data['phone']) elif not validate.name(data['name']): # 验证姓名格式 return json(0, "姓名无效") else: # 临时登录 data['type'] = 1 code = sms.sendLogin(data['phone']) if code: data['code'] = code cookie.set('phone', data) return json(1, '验证码已经发送成功') else: return json(0, '验证码发送失败')
def next(self, info, school, lost_id=0): """无手机号转入下一步""" if lost_id == 0: lost_user = userModel.find(_field="id", number=info['number'], school=school) if lost_user: lost_id = lost_user.id data = { 'name': info['name'], 'card': info['number'], 'sch': school, 'id': lost_id } cookie.set('b', data) return json(NO_USER, lost_id and school)
def GET(self): return json(0, 'only post allowed')
def POST(self): """验证通知""" # 检查登录 finder = user.getUser() if not finder: # 未登录 return json(UNLOGIN, "未登录") # 检查输入 info = web.input(number=None, name=None) status, school = notify.checkInput(info) if not (status is True): # 输入有误 return json(status, school) # 检查手机号和查找人的账号 phone = user.getPhone() if not phone: return json(NO_PHONE, "需要验证手机后使用") elif not notify.checkFind(finder['id'], finder['yyid']): return json(LIMITED, "当前账号被举报封禁或者超过大尝试次数[存在未确认的记录]") # 验证失主信息 data = yunyin.verify(info['number'], info['name'], school) if not data: # 查询失败 return self.next(info, school, 0) elif data['status'] == -2: # 验证不匹配 return json(RETRY, "验证不匹配") elif data['status'] != 1: # 无该用户 return self.next(info, school, 0) else: # 验证成功 lost = data['info'] # 判断是否是自己的账号 if phone == lost['phone']: return json(-5, "请不要用自己的账号测试!") # 更新本地数据库 lost_id = notify.sync(lost) if not lost_id: return json(-5, "失主学号在系统中数据异常") elif not lost['phone']: # 无手机号 return self.next(info, school, lost_id) # 失主状态检查 if not notify.checkLost(lost_id): return json(LIMITED, '失主未确认记录过多,或者设置了防骚扰,禁止发送通知') # 发送短信 finder_school_info = userModel.find(finder['id'], 'school') if finder_school_info and finder_school_info.school: finder_name = config.SCHOOL[ finder_school_info.school] + '的' + finder['name'] else: finder_name = finder['name'] token, long_url = url.create(finder['id'], lost_id) if sms.sendNotify(lost['phone'], finder_name, phone, url.short(long_url)): # 短信发送通知 recordModel.add(lost_id=lost_id, find_id=finder['id'], way=config.NOTIFY_SMS, token=token) return json(SUCCESSS, "通知成功") else: # 发送失败,转到下一步 return self.next(info, school, lost_id)