Пример #1
0
    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)
Пример #2
0
    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, '发送出错!')
Пример #3
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)
Пример #4
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, '状态更新失败')
Пример #5
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,'状态更新失败')
Пример #6
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同步出错,如果绑定过云印南天账号,请直接使用该账号登录')
Пример #7
0
    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, '验证码发送失败')
Пример #8
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)
Пример #9
0
 def GET(self):
     return json(0, 'only post allowed')
Пример #10
0
    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)
Пример #11
0
    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, '发送出错!')
Пример #12
0
 def GET(self):
     return json(0, 'only post allowed')