예제 #1
0
    def register(self):
        conn = self.db()
        try:
            node = conn.query(models.TrRadAgent).filter_by(
                endpoint=self.listen,
                protocol='zeromq',
                radius_type='acctounting'
            ).first()

            if not node:
                node = models.TrRadAgent()
                node.radius_type = 'acctounting'
                node.protocol = 'zeromq'
                node.endpoint = self.listen
                node.create_time = utils.get_currtime()
                node.last_check = utils.get_currtime()
                conn.add(node)
                conn.commit()
            else:
                node.last_check = utils.get_currtime()
                conn.commit()
        except Exception as err:
            self.syslog.error(u"register acctounting agent error %s" % utils.safeunicode(err.message))
        finally:
            conn.close()
            
        reactor.callLater(10.0, self.register, )
예제 #2
0
    def register(self):
        conn = self.db()
        try:
            node = conn.query(models.TrRadAgent).filter_by(
                endpoint=self.listen,
                protocol='zeromq',
                radius_type='authorize').first()

            if not node:
                node = models.TrRadAgent()
                node.radius_type = 'authorize'
                node.protocol = 'zeromq'
                node.endpoint = self.listen
                node.create_time = utils.get_currtime()
                node.last_check = utils.get_currtime()
                conn.add(node)
                conn.commit()
        except Exception as err:
            self.syslog.error(u"register authorize agent error %s" %
                              utils.safeunicode(err.message))
        finally:
            conn.close()

        reactor.callLater(
            10.0,
            self.register,
        )
예제 #3
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)
        user = self.query_account(account_number)
        form = account_forms.account_cancel_form()
        if account.status != 1:
            return self.render("account_form.html",
                               user=user,
                               form=form,
                               msg=u"无效用户状态")
        if not form.validates(source=self.get_params()):
            return self.render("account_form.html", user=user, form=form)

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'cancel'
        accept_log.accept_source = 'console'
        accept_log.account_number = form.d.account_number
        accept_log.accept_time = utils.get_currtime()
        accept_log.operator_name = self.current_user.username
        accept_log.accept_desc = u"用户销户退费%s(元);%s" % (
            form.d.fee_value, utils.safeunicode(form.d.operate_desc))
        self.db.add(accept_log)
        self.db.flush()
        self.db.refresh(accept_log)

        old_expire_date = account.expire_date

        order = models.TrCustomerOrder()
        order.order_id = utils.gen_order_id()
        order.customer_id = user.customer_id
        order.product_id = user.product_id
        order.account_number = form.d.account_number
        order.order_fee = 0
        order.actual_fee = -utils.yuan2fen(form.d.fee_value)
        order.pay_status = 1
        order.order_source = 'console'
        order.accept_id = accept_log.id
        order.create_time = utils.get_currtime()
        order.order_desc = accept_log.accept_desc
        self.db.add(order)

        account.status = 3

        self.db.commit()

        dispatch.pub(ACCOUNT_CHANNEL_EVENT, account.account_number, async=True)
        dispatch.pub(db_cache.CACHE_DELETE_EVENT,
                     account_cache_key(account.account_number),
                     async=True)
        for online in self.db.query(
                models.TrOnline).filter_by(account_number=account_number):
            dispatch.pub(UNLOCK_ONLINE_EVENT,
                         account_number,
                         online.nas_addr,
                         online.acct_session_id,
                         async=True)
        self.redirect(self.detail_url_fmt(account_number))
예제 #4
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)
        user = self.query_account(account_number)
        form = account_forms.account_cancel_form()
        if account.status != 1:
            return self.render("account_form.html",
                               user=user,
                               form=form,
                               msg=u"无效用户状态")
        if not form.validates(source=self.get_params()):
            return self.render("account_form.html", user=user, form=form)

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'cancel'
        accept_log.accept_source = 'console'
        accept_log.account_number = form.d.account_number
        accept_log.accept_time = utils.get_currtime()
        accept_log.operator_name = self.current_user.username
        accept_log.accept_desc = u"用户销户退费%s(元);%s" % (
            form.d.fee_value, utils.safeunicode(form.d.operate_desc))
        self.db.add(accept_log)
        self.db.flush()
        self.db.refresh(accept_log)

        old_expire_date = account.expire_date

        order = models.TrCustomerOrder()
        order.order_id = utils.gen_order_id()
        order.customer_id = user.customer_id
        order.product_id = user.product_id
        order.account_number = form.d.account_number
        order.order_fee = 0
        order.actual_fee = -utils.yuan2fen(form.d.fee_value)
        order.pay_status = 1
        order.order_source = 'console'
        order.accept_id = accept_log.id
        order.create_time = utils.get_currtime()
        order.order_desc = accept_log.accept_desc
        self.db.add(order)

        account.status = 3

        self.db.commit()

        onlines = self.db.query(
            models.TrOnline).filter_by(account_number=account_number)
        for _online in onlines:
            pass

        self.redirect(self.detail_url_fmt(account_number))
예제 #5
0
    def post(self):
        uname = self.get_argument("username")
        upass = self.get_argument("password")
        if not uname:
            return self.render_json(code=1, msg=u"请填写用户名")
        if not upass:
            return self.render_json(code=1, msg=u"请填写密码")

        enpasswd = md5(upass.encode()).hexdigest()

        opr = self.db.query(models.TrOperator).filter_by(
            operator_name=uname, operator_pass=enpasswd).first()

        if not opr:
            return self.render_json(code=1, msg=u"用户名密码不符")

        if opr.operator_status == 1:
            return self.render_json(code=1, msg=u"该操作员账号已被停用")

        self.set_session_user(uname, self.request.remote_ip, opr.operator_type,
                              utils.get_currtime())

        self.add_oplog(u'操作员(%s)登陆' % (uname))
        self.db.commit()

        self.render_json(code=0, msg="ok")
예제 #6
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)

        if account.status != 1:
            return self.render_json(code=1, msg=u"用户当前状态不允许停机")

        _datetime = utils.get_currtime()
        account.last_pause = _datetime
        account.status = 2

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'pause'
        accept_log.accept_source = 'console'
        accept_log.accept_desc = u"用户停机:上网账号:%s" % (account_number)
        accept_log.account_number = account.account_number
        accept_log.accept_time = _datetime
        accept_log.operator_name = self.current_user.username
        self.db.add(accept_log)

        self.db.commit()

        onlines = self.db.query(models.TrOnline).filter_by(account_number=account_number)
        for _online in onlines:
            pass

        return self.render_json(msg=u"操作成功")
예제 #7
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)

        if account.status != 1:
            return self.render_json(code=1, msg=u"用户当前状态不允许停机")

        _datetime = utils.get_currtime()
        account.last_pause = _datetime
        account.status = 2

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = "pause"
        accept_log.accept_source = "console"
        accept_log.accept_desc = u"用户停机:上网账号:%s" % (account_number)
        accept_log.account_number = account.account_number
        accept_log.accept_time = _datetime
        accept_log.operator_name = self.current_user.username
        self.db.add(accept_log)

        self.db.commit()

        dispatch.pub(ACCOUNT_PAUSE_EVENT, account.account_number, async=True)
        dispatch.pub(db_cache.CACHE_DELETE_EVENT, account_cache_key(account.account_number), async=True)

        return self.render_json(msg=u"操作成功")
예제 #8
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)
        if account.status != 2:
            return self.render_json(code=1, msg=u"用户当前状态不允许复机")

        account.status = 1
        _datetime = datetime.datetime.now()
        _pause_time = datetime.datetime.strptime(account.last_pause,
                                                 "%Y-%m-%d %H:%M:%S")
        _expire_date = datetime.datetime.strptime(
            account.expire_date + ' 23:59:59', "%Y-%m-%d %H:%M:%S")
        days = (_expire_date - _pause_time).days
        new_expire = (_datetime +
                      datetime.timedelta(days=int(days))).strftime("%Y-%m-%d")
        account.expire_date = new_expire

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'resume'
        accept_log.accept_source = 'console'
        accept_log.accept_desc = u"用户复机:上网账号:%s" % (account_number)
        accept_log.account_number = account.account_number
        accept_log.accept_time = utils.get_currtime()
        accept_log.operator_name = self.current_user.username
        self.db.add(accept_log)

        self.db.commit()
        dispatch.pub(settings.CACHE_DELETE_EVENT,
                     account_cache_key(account.account_number),
                     async=True)
        return self.render_json(msg=u"操作成功")
예제 #9
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)

        if account.status != 1:
            return self.render_json(code=1, msg=u"用户当前状态不允许停机")

        _datetime = utils.get_currtime()
        account.last_pause = _datetime
        account.status = 2

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'pause'
        accept_log.accept_source = 'console'
        accept_log.accept_desc = u"用户停机:上网账号:%s" % (account_number)
        accept_log.account_number = account.account_number
        accept_log.accept_time = _datetime
        accept_log.operator_name = self.current_user.username
        self.db.add(accept_log)

        self.db.commit()

        onlines = self.db.query(
            models.TrOnline).filter_by(account_number=account_number)
        for _online in onlines:
            pass

        return self.render_json(msg=u"操作成功")
예제 #10
0
 def add_oplog(self,message):
     ops_log = models.TrOperateLog()
     ops_log.operator_name = self.current_user.username
     ops_log.operate_ip = self.current_user.ipaddr
     ops_log.operate_time = utils.get_currtime()
     ops_log.operate_desc = message
     self.db.add(ops_log)
예제 #11
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)
        if account.status != 2:
            return self.render_json(code=1, msg=u"用户当前状态不允许复机")

        account.status = 1
        _datetime = datetime.datetime.now()
        _pause_time = datetime.datetime.strptime(account.last_pause, "%Y-%m-%d %H:%M:%S")
        _expire_date = datetime.datetime.strptime(account.expire_date + ' 23:59:59', "%Y-%m-%d %H:%M:%S")
        days = (_expire_date - _pause_time).days
        new_expire = (_datetime + datetime.timedelta(days=int(days))).strftime("%Y-%m-%d")
        account.expire_date = new_expire

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'resume'
        accept_log.accept_source = 'console'
        accept_log.accept_desc = u"用户复机:上网账号:%s" % (account_number)
        accept_log.account_number = account.account_number
        accept_log.accept_time = utils.get_currtime()
        accept_log.operator_name = self.current_user.username
        self.db.add(accept_log)

        self.db.commit()
        dispatch.pub(db_cache.CACHE_DELETE_EVENT,account_cache_key(account.account_number), async=True)
        return self.render_json(msg=u"操作成功")
예제 #12
0
 def add_oplog(self,message):
     ops_log = models.TrOperateLog()
     ops_log.operator_name = self.current_user.username
     ops_log.operate_ip = self.current_user.ipaddr
     ops_log.operate_time = utils.get_currtime()
     ops_log.operate_desc = message
     self.db.add(ops_log)
예제 #13
0
    def post(self):
        uname = self.get_argument("username")
        upass = self.get_argument("password")
        if not uname:
            return self.render_json(code=1, msg=u"请填写用户名")
        if not upass:
            return self.render_json(code=1, msg=u"请填写密码")

        enpasswd = md5(upass.encode()).hexdigest()

        opr = self.db.query(models.TrwOperator).filter_by(
            operator_name=uname,
            operator_pass=enpasswd
        ).first()
        if not opr:
            return self.render_json(code=1, msg=u"用户名密码不符")

        if opr.operator_status == 1:
            return self.render_json(code=1, msg=u"该操作员账号已被停用")

        self.set_session_user(uname, self.request.remote_ip, opr.operator_type, utils.get_currtime())

        self.add_oplog( u'操作员(%s)登陆' % (uname,))
        self.db.commit()

        self.render_json(code=0, msg="ok")
예제 #14
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)

        if account.status != 1:
            return self.render_json(code=1, msg=u"用户当前状态不允许停机")

        _datetime = utils.get_currtime()
        account.last_pause = _datetime
        account.status = 2

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'pause'
        accept_log.accept_source = 'console'
        accept_log.accept_desc = u"用户停机:上网账号:%s" % (account_number)
        accept_log.account_number = account.account_number
        accept_log.accept_time = _datetime
        accept_log.operator_name = self.current_user.username
        self.db.add(accept_log)

        self.db.commit()

        dispatch.pub(ACCOUNT_PAUSE_EVENT, account.account_number, async=True)
        dispatch.pub(db_cache.CACHE_DELETE_EVENT,
                     account_cache_key(account.account_number),
                     async=True)

        return self.render_json(msg=u"操作成功")
예제 #15
0
 def get_current_user(self):
     session_opr = ObjectDict()
     session_opr.username = '******'
     session_opr.ipaddr = self.request.remote_ip
     session_opr.opr_type = 0
     session_opr.login_time = utils.get_currtime()
     return session_opr
예제 #16
0
 def event_syslog_trace(self, name, message, **kwargs):
     """ syslog trace event """
     message = u"%s - %s" % (utils.get_currtime(), message)
     if name == 'radius' and 'username' in kwargs:
         self.trace_radius(kwargs['username'], message)
     else:
         self.trace_log(name, message)
예제 #17
0
 def get_current_user(self):
     session_opr = ObjectDict()
     session_opr.username = '******'
     session_opr.ipaddr = self.request.remote_ip
     session_opr.opr_type = 0
     session_opr.login_time = utils.get_currtime()
     return session_opr
예제 #18
0
 def event_syslog_trace(self, name, message,**kwargs):
     """ syslog trace event """
     message = u"%s - %s" % (utils.get_currtime(), message) 
     if name == 'radius' and 'username' in kwargs:
         self.trace_radius(kwargs['username'], message)
     else:
         self.trace_log(name, message)
예제 #19
0
    def post(self):
        form = ostype_forms.ostype_add_form()
        if not form.validates(source=self.get_params()):
            self.render("base_form.html", form=form)
            return
        if self.db.query(models.TrwOSTypes.id).filter_by(
                match_rule=form.d.match_rule).count() > 0:
            self.render("base_form.html", form=form, msg=u"匹配规则已经存在")
            return

        ostype = models.TrwOSTypes()
        ostype.os_name = form.d.os_name
        ostype.dev_type = form.d.dev_type
        ostype.match_rule = form.d.match_rule
        self.db.add(ostype)

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'操作员(%s)新增设备类型信息:%s' % (ops_log.operator_name,
                                                        ostype.dev_type)
        self.db.add(ops_log)
        self.db.commit()
        self.redirect("/ostype", permanent=False)
예제 #20
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)
        user = self.query_account(account_number)
        form = account_forms.account_cancel_form()
        if account.status != 1:
            return self.render("account_form.html", user=user, form=form, msg=u"无效用户状态")
        if not form.validates(source=self.get_params()):
            return self.render("account_form.html", user=user, form=form)

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'cancel'
        accept_log.accept_source = 'console'
        accept_log.account_number = form.d.account_number
        accept_log.accept_time = utils.get_currtime()
        accept_log.operator_name = self.current_user.username
        accept_log.accept_desc = u"用户销户退费%s(元);%s" % (
            form.d.fee_value, utils.safeunicode(form.d.operate_desc))
        self.db.add(accept_log)
        self.db.flush()
        self.db.refresh(accept_log)

        old_expire_date = account.expire_date

        order = models.TrCustomerOrder()
        order.order_id = utils.gen_order_id()
        order.customer_id = user.customer_id
        order.product_id = user.product_id
        order.account_number = form.d.account_number
        order.order_fee = 0
        order.actual_fee = -utils.yuan2fen(form.d.fee_value)
        order.pay_status = 1
        order.order_source = 'console'
        order.accept_id = accept_log.id
        order.create_time = utils.get_currtime()
        order.order_desc = accept_log.accept_desc
        self.db.add(order)

        account.status = 3

        self.db.commit()

        dispatch.pub(ACCOUNT_CHANNEL_EVENT, account.account_number, async=True)
        dispatch.pub(db_cache.CACHE_DELETE_EVENT,account_cache_key(account.account_number), async=True)
        for online in self.db.query(models.TrOnline).filter_by(account_number=account_number):
            dispatch.pub(UNLOCK_ONLINE_EVENT,account_number,online.nas_addr, online.acct_session_id,async=True)
        self.redirect(self.detail_url_fmt(account_number))
예제 #21
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)
        user = self.query_account(account_number)
        form = account_forms.account_cancel_form()
        if account.status != 1:
            return self.render("account_form.html", user=user, form=form, msg=u"无效用户状态")
        if not form.validates(source=self.get_params()):
            return self.render("account_form.html", user=user, form=form)

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = "cancel"
        accept_log.accept_source = "console"
        accept_log.account_number = form.d.account_number
        accept_log.accept_time = utils.get_currtime()
        accept_log.operator_name = self.current_user.username
        accept_log.accept_desc = u"用户销户退费%s(元);%s" % (form.d.fee_value, utils.safeunicode(form.d.operate_desc))
        self.db.add(accept_log)
        self.db.flush()
        self.db.refresh(accept_log)

        old_expire_date = account.expire_date

        order = models.TrCustomerOrder()
        order.order_id = utils.gen_order_id()
        order.customer_id = user.customer_id
        order.product_id = user.product_id
        order.account_number = form.d.account_number
        order.order_fee = 0
        order.actual_fee = -utils.yuan2fen(form.d.fee_value)
        order.pay_status = 1
        order.order_source = "console"
        order.accept_id = accept_log.id
        order.create_time = utils.get_currtime()
        order.order_desc = accept_log.accept_desc
        self.db.add(order)

        account.status = 3

        self.db.commit()

        onlines = self.db.query(models.TrOnline).filter_by(account_number=account_number)
        for _online in onlines:
            pass

        self.redirect(self.detail_url_fmt(account_number))
예제 #22
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)
        user = self.query_account(account_number)
        form = account_forms.account_charge_form()

        if account.status not in (1, 4):
            return render("account_form", user=user, form=form, msg=u"无效用户状态")
        if not form.validates(source=self.get_params()):
            return render("account_form", user=user, form=form)

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'charge'
        accept_log.accept_source = 'console'
        _new_fee = account.balance + utils.yuan2fen(form.d.fee_value)
        accept_log.accept_desc = u"用户充值:充值前%s元,充值后%s元;%s" % (
            utils.fen2yuan(account.balance),
            utils.fen2yuan(_new_fee),
            (form.d.operate_desc or '')
        )        
        accept_log.account_number = form.d.account_number
        accept_log.accept_time = utils.get_currtime()
        accept_log.operator_name = self.current_user.username
        self.db.add(accept_log)
        self.db.flush()
        self.db.refresh(accept_log)

        order = models.TrCustomerOrder()
        order.order_id = utils.gen_order_id()
        order.customer_id = user.customer_id
        order.product_id = user.product_id
        order.account_number = form.d.account_number
        order.order_fee = utils.yuan2fen(form.d.fee_value)
        order.actual_fee = utils.yuan2fen(form.d.fee_value)
        order.pay_status = 1
        order.accept_id = accept_log.id
        order.order_source = 'console'
        order.create_time = utils.get_currtime()
        order.order_desc = accept_log.accept_desc

        self.db.add(order)
        self.add_oplog(order.order_desc)

        account.balance += order.actual_fee
        self.db.commit()
        self.redirect(self.detail_url_fmt(account_number))
예제 #23
0
    def post(self):
        uname = self.get_argument("username")
        upass = self.get_argument("password")
        if not uname:
            return self.render_json(code=1, msg=u"请填写用户名")
        if not upass:
            return self.render_json(code=1, msg=u"请填写密码")
        enpasswd = md5(upass.encode()).hexdigest()

        opr = self.db.query(models.TlOperator).filter(
            models.TlOperator.operator_name == uname,
            models.TlOperator.operator_pass == enpasswd).first()

        if not opr:
            return self.render_json(code=1, msg=u"用户名密码不符")

        if opr.operator_status == 1:
            return self.render_json(code=1, msg=u"该操作员账号已被停用")

        self.set_secure_cookie("opr_name", uname, expires_days=None)
        self.set_secure_cookie("opr_login_time",
                               utils.get_currtime(),
                               expires_days=None)
        self.set_secure_cookie("opr_login_ip",
                               self.request.remote_ip,
                               expires_days=None)
        self.set_secure_cookie("opr_type",
                               str(opr.operator_type),
                               expires_days=None)

        if opr.operator_type in (1, ):
            for rule in self.db.query(
                    models.TlOperatorRule).filter_by(operator_name=uname):
                permit.bind_opr(rule.operator_name, rule.rule_path)

        ops_log = models.TlOperateLog()
        ops_log.operator_name = uname
        ops_log.operate_ip = self.request.remote_ip
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'操作员(%s)登陆' % (uname, )
        self.db.add(ops_log)
        self.db.commit()

        self.render_json(code=0, msg="ok")
예제 #24
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)
        user = self.query_account(account_number)
        form = account_forms.account_charge_form()

        if account.status not in (1, 4):
            return render("account_form", user=user, form=form, msg=u"无效用户状态")
        if not form.validates(source=self.get_params()):
            return render("account_form", user=user, form=form)

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'charge'
        accept_log.accept_source = 'console'
        _new_fee = account.balance + utils.yuan2fen(form.d.fee_value)
        accept_log.accept_desc = u"用户充值:充值前%s元,充值后%s元;%s" % (
            utils.fen2yuan(account.balance), utils.fen2yuan(_new_fee),
            (form.d.operate_desc or ''))
        accept_log.account_number = form.d.account_number
        accept_log.accept_time = utils.get_currtime()
        accept_log.operator_name = self.current_user.username
        self.db.add(accept_log)
        self.db.flush()
        self.db.refresh(accept_log)

        order = models.TrCustomerOrder()
        order.order_id = utils.gen_order_id()
        order.customer_id = user.customer_id
        order.product_id = user.product_id
        order.account_number = form.d.account_number
        order.order_fee = utils.yuan2fen(form.d.fee_value)
        order.actual_fee = utils.yuan2fen(form.d.fee_value)
        order.pay_status = 1
        order.accept_id = accept_log.id
        order.order_source = 'console'
        order.create_time = utils.get_currtime()
        order.order_desc = accept_log.accept_desc

        self.db.add(order)
        self.add_oplog(order.order_desc)

        account.balance += order.actual_fee
        self.db.commit()
        self.redirect(self.detail_url_fmt(account_number))
예제 #25
0
class ProductUpdateHandler(ApiHandler):
    """ @param: 
        product_id: str
    """
    def get(self):
        self.post()

    def post(self):
        form = product_update_vform()
        try:
            request = self.parse_form_request()
            if not form.validates(**request):
                return self.render_verify_err(form.errors)
        except Exception, err:
            return self.render_verify_err(err)

        try:
            product_id = request.get('product_id')
            if not product_id:
                return self.render_verify_err(
                    msg="product_id must not be NULL")

            product = self.db.query(models.TrProduct).get(product_id)

            if not product:
                return self.render_verify_err(msg="product is not exist")

            if form.d.product_name:
                product.product_name = form.d.product_name
            if form.d.fee_price:
                product.fee_price = utils.yuan2fen(form.d.fee_price)

            if form.d.concur_number:
                product.concur_number = form.d.concur_number
            if form.d.bind_mac:
                product.bind_mac = form.d.bind_mac
            if form.d.bind_vlan:
                product.bind_vlan = form.d.bind_vlan

            if form.d.input_max_limit:
                product.input_max_limit = form.d.input_max_limit
            if form.d.output_max_limit:
                product.output_max_limit = form.d.output_max_limit
            if form.d.product_status:
                product.product_status = form.d.product_status

            product.update_time = utils.get_currtime()

            self.db.commit()
            self.add_oplog(u'API修改资费信息:%s' % utils.safeunicode(product_id))
            self.render_success(msg=u'product update success')
        except Exception as err:
            self.render_unknow(err)
예제 #26
0
    def get(self):
        ostype_id = self.get_argument("ostype_id")
        self.db.query(models.TrwOSTypes).filter_by(id=ostype_id).delete()

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'操作员(%s)删除设备类型信息:%s' % (ops_log.operator_name, ostype_id)
        self.db.add(ops_log)

        self.db.commit()
        self.redirect("/ostype",permanent=False)
예제 #27
0
    def get(self):
        ostype_id = self.get_argument("ostype_id")
        self.db.query(models.TrwOSTypes).filter_by(id=ostype_id).delete()

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'操作员(%s)删除设备类型信息:%s' % (ops_log.operator_name,
                                                        ostype_id)
        self.db.add(ops_log)

        self.db.commit()
        self.redirect("/ostype", permanent=False)
예제 #28
0
    def get(self):
        operator_id = self.get_argument("operator_id")
        opr = self.db.query(models.TrwOperator).get(operator_id)
        self.db.query(models.TrwOperatorRule).filter_by(operator_name=opr.operator_name).delete()
        self.db.query(models.TrwOperator).filter_by(id=operator_id).delete()

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'删除操作员%s信息' % opr.operator_name
        self.db.add(ops_log)
        self.db.commit()
        self.redirect("/operator",permanent=False)
예제 #29
0
    def post(self):
        try:
            req_msg = self.parse_form_request()
        except Exception as err:
            self.render_result(code=1, msg=safeunicode(err.message))
            return

        ispserv = models.TrwIspService()
        ispserv.isp_code = req_msg.get("isp_code")
        ispserv.service_type = req_msg.get("service_type")
        ispserv.sub_time = get_currtime()
        self.db.add(ispserv)
        self.db.commit()

        self.render_result(code=0, msg="success")
예제 #30
0
    def get(self):
        operator_id = self.get_argument("operator_id")
        opr = self.db.query(models.TrwOperator).get(operator_id)
        self.db.query(models.TrwOperatorRule).filter_by(
            operator_name=opr.operator_name).delete()
        self.db.query(models.TrwOperator).filter_by(id=operator_id).delete()

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'删除操作员%s信息' % opr.operator_name
        self.db.add(ops_log)
        self.db.commit()
        self.redirect("/operator", permanent=False)
예제 #31
0
    def post(self):
        try:
            req_msg = self.parse_form_request()
        except Exception as err:
            self.render_result(code=1, msg=safeunicode(err.message))
            return

        ispserv = models.TrwIspService()
        ispserv.isp_code = req_msg.get("isp_code")
        ispserv.service_type = req_msg.get("service_type")
        ispserv.sub_time = get_currtime()
        self.db.add(ispserv)
        self.db.commit()

        self.render_result(code=0, msg="success")
예제 #32
0
파일: ssid.py 프로젝트: lanyeit/toughwlan
    def post(self):
        form = ssid_form.ssid_update_form([])
        if not form.validates(source=self.get_params()):
            return self.render("base_form.html", form=form)
        mssid = self.db.query(models.TrwSsid).get(form.d.id)
        mssid.domain_code = form.d.domain_code
        mssid.ssid_desc = form.d.ssid_desc

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'操作员(%s)修改SSID信息:%s' % (ops_log.operator_name, mssid.ssid)
        self.db.add(ops_log)

        self.db.commit()
        self.redirect("/ssid",permanent=False)
예제 #33
0
파일: domain.py 프로젝트: lanyeit/toughwlan
    def post(self):
        tpls = [(t.tpl_name, t.tpl_desc) for t in self.db.query(models.TrwTemplate)]
        form = domain_form.domain_update_vform(tpls=tpls)
        if not form.validates(source=self.get_params()):
            return self.render("base_form.html", form=form)
        domain = self.db.query(models.TrwDomain).get(form.d.id)
        domain.tpl_name = form.d.tpl_name
        domain.domain_desc = form.d.domain_desc

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'操作员(%s)修改域信息:%s' % (ops_log.operator_name, domain.domain_code)
        self.db.add(ops_log)

        self.db.commit()
        self.redirect("/domain",permanent=False)
예제 #34
0
파일: domain.py 프로젝트: lanyeit/toughwlan
    def post(self):
        domain_id = self.get_argument("domain_id")
        domain_code = self.db.query(models.TrwDomain.domain_code).filter_by(id=domain_id).scalar()

        if self.db.query(models.TrwSsid).filter_by(domain_code=domain_code).count() > 0:
             return self.render_json(code=1, msg=u"此域下已关联SSID,不允许删除!")

        self.db.query(models.TrwDomain).filter_by(id=domain_id).delete()

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'操作员(%s)删除域信息:%s' % (ops_log.operator_name, domain_id)
        self.db.add(ops_log)

        self.db.commit()
        return self.render_json(code=0, msg=u"删除域成功!")
예제 #35
0
    def post(self):
        form = operator_form.operator_update_form()
        if not form.validates(source=self.get_params()):
            rules = self.db.query(models.TrwOperatorRule.rule_path).filter_by(
                operator_name=form.d.operator_name)
            rules = [r[0] for r in rules]
            return self.render("base_form.html", form=form, rules=rules)
        operator = self.db.query(models.TrwOperator).get(form.d.id)
        if form.d.operator_pass:
            operator.operator_pass = md5(
                form.d.operator_pass.encode()).hexdigest()
        operator.operator_desc = form.d.operator_desc
        operator.operator_status = form.d.operator_status

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'修改操作员%s信息' % operator.operator_name
        self.db.add(ops_log)

        # update rules
        self.db.query(models.TrwOperatorRule).filter_by(
            operator_name=operator.operator_name).delete()

        for path in self.get_arguments("rule_item"):
            item = permit.get_route(path)
            if not item: continue
            rule = models.TrwOperatorRule()
            rule.operator_name = operator.operator_name
            rule.rule_name = item['name']
            rule.rule_path = item['path']
            rule.rule_category = item['category']
            self.db.add(rule)

        permit.unbind_opr(operator.operator_name)

        self.db.commit()

        for rule in self.db.query(models.TrwOperatorRule).filter_by(
                operator_name=operator.operator_name):
            permit.bind_opr(rule.operator_name, rule.rule_path)

        self.redirect("/operator", permanent=False)
예제 #36
0
    def post(self):
        form = ostype_forms.ostype_update_form()
        if not form.validates(source=self.get_params()):
            self.render("base_form.html", form=form)
            return
        ostype = self.db.query(models.TrwOSTypes).get(form.d.id)
        ostype.os_name = form.d.os_name
        ostype.dev_type = form.d.dev_type
        ostype.match_rule = form.d.match_rule

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'操作员(%s)修改设备类型信息:%s' % (ops_log.operator_name, ostype.os_name)
        self.db.add(ops_log)

        self.db.commit()
        self.redirect("/ostype",permanent=False)
예제 #37
0
    def post(self):
        form = password_forms.password_update_form()
        if not form.validates(source=self.get_params()):
            self.render("base_form.html", form=form)
            return
        if form.d.tra_user_pass != form.d.tra_user_pass_chk:
            self.render("base_form.html", form=form, msg=u'确认密码不一致')
            return
        opr = self.db.query(models.TrwOperator).filter_by(operator_name=form.d.tra_user).first()
        opr.operator_pass = md5(form.d.tra_user_pass).hexdigest()

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'操作员(%s)修改密码' % (self.get_secure_cookie("tra_user"),)
        self.db.add(ops_log)

        self.db.commit()
        self.redirect("/")
예제 #38
0
    def post(self):
        form = operator_form.operator_update_form()
        if not form.validates(source=self.get_params()):
            rules = self.db.query(models.TrwOperatorRule.rule_path).filter_by(operator_name=form.d.operator_name)
            rules = [r[0] for r in rules]
            return self.render("base_form.html", form=form,rules=rules)
        operator = self.db.query(models.TrwOperator).get(form.d.id)
        if form.d.operator_pass:
            operator.operator_pass = md5(form.d.operator_pass.encode()).hexdigest()
        operator.operator_desc = form.d.operator_desc
        operator.operator_status = form.d.operator_status

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'修改操作员%s信息' % operator.operator_name
        self.db.add(ops_log)

        # update rules
        self.db.query(models.TrwOperatorRule).filter_by(operator_name=operator.operator_name).delete()

        for path in self.get_arguments("rule_item"):
            item = permit.get_route(path)
            if not item: continue
            rule = models.TrwOperatorRule()
            rule.operator_name = operator.operator_name
            rule.rule_name = item['name']
            rule.rule_path = item['path']
            rule.rule_category = item['category']
            self.db.add(rule)

        permit.unbind_opr(operator.operator_name)

        self.db.commit()

        for rule in self.db.query(models.TrwOperatorRule).filter_by(operator_name=operator.operator_name):
            permit.bind_opr(rule.operator_name, rule.rule_path)

        self.redirect("/operator",permanent=False)
예제 #39
0
    def post(self):
        form = product_forms.product_update_form()
        if not form.validates(source=self.get_params()):
            return self.render("product_form.html", form=form)

        product = self.db.query(models.TrProduct).get(form.d.id)
        product.product_name = form.d.product_name
        product.product_status = form.d.product_status
        product.fee_months = int(form.d.get("fee_months", 0))
        product.fee_times = utils.hour2sec(form.d.get("fee_times", 0))
        product.fee_flows = utils.mb2kb(form.d.get("fee_flows", 0))
        product.bind_mac = form.d.bind_mac
        product.bind_vlan = form.d.bind_vlan
        product.concur_number = form.d.concur_number
        product.fee_period = ''#form.d.fee_period or ''
        product.fee_price = utils.yuan2fen(form.d.fee_price)
        product.input_max_limit = utils.mbps2bps(form.d.input_max_limit)
        product.output_max_limit = utils.mbps2bps(form.d.output_max_limit)
        product.update_time = utils.get_currtime()
        self.add_oplog(u'修改资费信息:%s' % utils.safeunicode(product.product_name))
        self.db.commit()
        self.redirect("/admin/product", permanent=False)
예제 #40
0
파일: domain.py 프로젝트: lanyeit/toughwlan
    def post(self):
        tpls = [(t.tpl_name, t.tpl_desc) for t in self.db.query(models.TrwTemplate)]
        form = domain_form.domain_add_vform(tpls=tpls)
        if not form.validates(source=self.get_params()):
            return self.render("base_form.html", form=form)
        if self.db.query(models.TrwDomain.id).filter_by(domain_code=form.d.domain_code).count() > 0:
            return self.render("base_form.html", form=form, msg=u"domain已经存在")
        domain = models.TrwDomain()
        domain.tpl_name = form.d.tpl_name
        domain.domain_code = form.d.domain_code
        domain.domain_desc = form.d.domain_desc
        self.db.add(domain)

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.current_user.username
        ops_log.operate_ip = self.current_user.ipaddr
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'操作员(%s)新增域信息:%s' % (ops_log.operator_name, form.d.domain_code)
        self.db.add(ops_log)

        self.db.commit()
        self.redirect("/domain",permanent=False)
예제 #41
0
    def post(self):
        form = password_forms.password_update_form()
        if not form.validates(source=self.get_params()):
            self.render("base_form.html", form=form)
            return
        if form.d.tra_user_pass != form.d.tra_user_pass_chk:
            self.render("base_form.html", form=form, msg=u'确认密码不一致')
            return
        opr = self.db.query(models.TrwOperator).filter_by(
            operator_name=form.d.tra_user).first()
        opr.operator_pass = md5(form.d.tra_user_pass).hexdigest()

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.get_secure_cookie("tra_user")
        ops_log.operate_ip = self.get_secure_cookie("tra_login_ip")
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'操作员(%s)修改密码' % (
            self.get_secure_cookie("tra_user"), )
        self.db.add(ops_log)

        self.db.commit()
        self.redirect("/")
예제 #42
0
파일: radius.py 프로젝트: lanyeit/toughwlan
    def post(self):
        form = radius_form.radius_add_form([])
        if not form.validates(source=self.get_params()):
            return self.render("base_form.html", form=form)

        if self.db.query(models.TrwRadius.id).filter_by(ip_addr=form.d.ip_addr).count() > 0:
            return self.render("base_form.html", form=form, msg=u"ip地址已经存在")

        radius = models.TrwRadius()
        radius.ip_addr = form.d.ip_addr
        radius.name = form.d.name
        radius.secret = form.d.secret
        radius.acct_port = form.d.acct_port
        radius.auth_port = form.d.auth_port
        radius.admin_url = form.d.admin_url
        radius.serv_type = form.d.serv_type
        radius.last_check = utils.get_currtime()
        self.db.add(radius)

        self.add_oplog(u'新增Radius信息:%s' % (radius.ip_addr))
        self.db.commit()
        self.redirect("/radius", permanent=False)
예제 #43
0
    def post(self):
        form = operator_form.operator_add_form()
        if not form.validates(source=self.get_params()):
            return self.render("base_form.html", form=form)
        if self.db.query(models.TrwOperator.id).filter_by(
                operator_name=form.d.operator_name).count() > 0:
            return self.render("base_form.html", form=form, msg=u"操作员已经存在")
        operator = models.TrwOperator()
        operator.operator_name = form.d.operator_name
        operator.operator_pass = md5(form.d.operator_pass.encode()).hexdigest()
        operator.operator_type = 1
        operator.operator_desc = form.d.operator_desc
        operator.operator_status = form.d.operator_status
        self.db.add(operator)

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.current_user.username
        ops_log.operate_ip = self.current_user.ipaddr
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'新增操作员信息:%s' % operator.operator_name
        self.db.add(ops_log)

        for path in self.get_arguments("rule_item"):
            item = permit.get_route(path)
            if not item: continue
            rule = models.TrwOperatorRule()
            rule.operator_name = operator.operator_name
            rule.rule_name = item['name']
            rule.rule_path = item['path']
            rule.rule_category = item['category']
            self.db.add(rule)

        self.db.commit()

        for rule in self.db.query(models.TrwOperatorRule).filter_by(
                operator_name=operator.operator_name):
            permit.bind_opr(rule.operator_name, rule.rule_path)

        self.redirect("/operator", permanent=False)
예제 #44
0
    def post(self):
        form = product_forms.product_update_form()
        if not form.validates(source=self.get_params()):
            return self.render("product_form.html", form=form)

        product = self.db.query(models.TrProduct).get(form.d.id)
        product.product_name = form.d.product_name
        product.product_status = form.d.product_status
        product.fee_months = int(form.d.get("fee_months", 0))
        product.fee_times = utils.hour2sec(form.d.get("fee_times", 0))
        product.fee_flows = utils.mb2kb(form.d.get("fee_flows", 0))
        product.bind_mac = form.d.bind_mac
        product.bind_vlan = form.d.bind_vlan
        product.concur_number = form.d.concur_number
        product.fee_period = ''  #form.d.fee_period or ''
        product.fee_price = utils.yuan2fen(form.d.fee_price)
        product.input_max_limit = utils.mbps2bps(form.d.input_max_limit)
        product.output_max_limit = utils.mbps2bps(form.d.output_max_limit)
        product.update_time = utils.get_currtime()
        self.add_oplog(u'修改资费信息:%s' % utils.safeunicode(product.product_name))
        self.db.commit()
        self.redirect("/admin/product", permanent=False)
예제 #45
0
    def post(self):
        form = operator_form.operator_add_form()
        if not form.validates(source=self.get_params()):
            return self.render("base_form.html", form=form)
        if self.db.query(models.TrwOperator.id).filter_by(operator_name=form.d.operator_name).count() > 0:
            return self.render("base_form.html", form=form, msg=u"操作员已经存在")
        operator = models.TrwOperator()
        operator.operator_name = form.d.operator_name
        operator.operator_pass = md5(form.d.operator_pass.encode()).hexdigest()
        operator.operator_type = 1
        operator.operator_desc = form.d.operator_desc
        operator.operator_status = form.d.operator_status
        self.db.add(operator)

        ops_log = models.TrwOperateLog()
        ops_log.operator_name = self.current_user.username
        ops_log.operate_ip = self.current_user.ipaddr
        ops_log.operate_time = utils.get_currtime()
        ops_log.operate_desc = u'新增操作员信息:%s' % operator.operator_name
        self.db.add(ops_log)

        for path in self.get_arguments("rule_item"):
            item = permit.get_route(path)
            if not item: continue
            rule = models.TrwOperatorRule()
            rule.operator_name = operator.operator_name
            rule.rule_name = item['name']
            rule.rule_path = item['path']
            rule.rule_category = item['category']
            self.db.add(rule)

        self.db.commit()

        for rule in self.db.query(models.TrwOperatorRule).filter_by(operator_name=operator.operator_name):
            permit.bind_opr(rule.operator_name, rule.rule_path)

        self.redirect("/operator",permanent=False)
예제 #46
0
    def post(self):
        next = self.get_argument("next", "/customer")
        form = forms.customer_login_form()
        if not form.validates(source=self.get_params()):
            return self.render("login.html", form=form)

        if vcache.is_over(form.d.username, '0'):
            return render_error(msg=u"用户一小时内登录错误超过5次,请一小时后再试")

        customer = self.db.query(models.TrCustomer).filter_by(
            customer_name=form.d.username
        ).first()

        if not customer:
            return self.render("login.html", form=form, msg=u"用户不存在")

        if customer.password != md5(form.d.password.encode()).hexdigest():
            vcache.incr(form.d.username, '0')
            return self.render("login.html", form=form, msg=u"用户名密码错误第%s次" % vcache.errs(form.d.username, '0'))

        vcache.clear(form.d.username, '0')

        self.set_session_user(customer, self.request.remote_ip, utils.get_currtime())
        self.redirect(next)
예제 #47
0
    def post(self):
        form = radius_form.radius_add_form([])
        if not form.validates(source=self.get_params()):
            return self.render("base_form.html", form=form)

        if self.db.query(models.TrwRadius.id).filter_by(
                ip_addr=form.d.ip_addr).count() > 0:
            return self.render("base_form.html", form=form, msg=u"ip地址已经存在")

        radius = models.TrwRadius()
        radius.ip_addr = form.d.ip_addr
        radius.name = form.d.name
        radius.secret = form.d.secret
        radius.acct_port = form.d.acct_port
        radius.auth_port = form.d.auth_port
        radius.api_url = form.d.api_url
        radius.api_secret = form.d.api_secret
        radius.serv_type = form.d.serv_type
        radius.last_check = utils.get_currtime()
        self.db.add(radius)

        self.add_oplog(u'新增Radius信息:%s' % (radius.ip_addr))
        self.db.commit()
        self.redirect("/radius", permanent=False)
예제 #48
0
    def post(self):
        account_number = self.get_argument("account_number")
        products = [(n.id, n.product_name) for n in self.get_opr_products()]
        form = account_forms.account_change_form(products=products)
        account = self.db.query(models.TrAccount).get(account_number)
        user = self.query_account(account_number)
        if account.status not in (1, 4):
            return self.render("account_change_form.html",
                               user=user,
                               form=form,
                               msg=u"无效用户状态")
        if not form.validates(source=self.get_params()):
            return self.render("account_change_form.html",
                               user=user,
                               form=form)

        product = self.db.query(models.TrProduct).get(form.d.product_id)

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'change'
        accept_log.accept_source = 'console'
        accept_log.account_number = form.d.account_number
        accept_log.accept_time = utils.get_currtime()
        accept_log.operator_name = self.current_user.username
        accept_log.accept_desc = u"用户资费变更为:%s;%s" % (
            product.product_name, utils.safeunicode(form.d.operate_desc))
        self.db.add(accept_log)
        self.db.flush()
        self.db.refresh(accept_log)

        old_exoire_date = account.expire_date

        account.product_id = product.id
        # (PPMonth,PPTimes,BOMonth,BOTimes,PPFlow,BOFlows)
        if product.product_policy in (PPMonth, BOMonth):
            account.expire_date = form.d.expire_date
            account.balance = 0
            account.time_length = 0
            account.flow_length = 0
        elif product.product_policy in (PPTimes, PPFlow):
            account.expire_date = MAX_EXPIRE_DATE
            account.balance = utils.yuan2fen(form.d.balance)
            account.time_length = 0
            account.flow_length = 0
        elif product.product_policy == BOTimes:
            account.expire_date = MAX_EXPIRE_DATE
            account.balance = 0
            account.time_length = utils.hour2sec(form.d.time_length)
            account.flow_length = 0
        elif product.product_policy == BOFlows:
            account.expire_date = MAX_EXPIRE_DATE
            account.balance = 0
            account.time_length = 0
            account.flow_length = utils.mb2kb(form.d.flow_length)

        order = models.TrCustomerOrder()
        order.order_id = utils.gen_order_id()
        order.customer_id = account.customer_id
        order.product_id = account.product_id
        order.account_number = account.account_number
        order.order_fee = 0
        order.actual_fee = utils.yuan2fen(form.d.add_value) - utils.yuan2fen(
            form.d.back_value)
        order.pay_status = 1
        order.accept_id = accept_log.id
        order.order_source = 'console'
        order.create_time = utils.get_currtime()

        order.order_desc = u"用户变更资费,变更前到期:%s,变更后到期:%s" % (old_exoire_date,
                                                          account.expire_date)

        self.db.add(order)
        self.add_oplog(accept_log.accept_desc)
        self.db.commit()
        dispatch.pub(settings.CACHE_DELETE_EVENT,
                     account_cache_key(account.account_number),
                     async=True)
        self.redirect(self.detail_url_fmt(account_number))
예제 #49
0
    def post(self):
        nodes = [(n.id, n.node_desc) for n in self.get_opr_nodes()]
        products = [(n.id, n.product_name) for n in self.get_opr_products()]
        form = customer_forms.customer_open_form(nodes, products)
        if not form.validates(source=self.get_params()):
            return self.render("account_open_form.html", form=form)

        if self.db.query(models.TrAccount).filter_by(account_number=form.d.account_number).count() > 0:
            return self.render("account_open_form.html", form=form, msg=u"账号%s已经存在" % form.d.account_number)

        if form.d.ip_address and self.db.query(models.TrAccount).filter_by(ip_address=form.d.ip_address).count() > 0:
            return self.render("account_open_form.html", form=form, msg=u"ip%s已经被使用" % form.d.ip_address)

        if self.db.query(models.TrCustomer).filter_by(
            customer_name=form.d.account_number).count() > 0:
            return self.render("account_open_form.html", form=form, msg=u"用户名%s已经存在" % form.d.account_number)

        customer = models.TrCustomer()
        customer.node_id = form.d.node_id
        customer.realname = form.d.realname
        customer.customer_name = form.d.account_number
        customer.password = md5(form.d.password.encode()).hexdigest()
        customer.idcard = form.d.idcard
        customer.sex = '1'
        customer.age = '0'
        customer.email = ''
        customer.mobile = form.d.mobile
        customer.address = form.d.address
        customer.create_time = utils.get_currtime()
        customer.update_time = utils.get_currtime()
        customer.email_active = 0
        customer.mobile_active = 0
        customer.active_code = utils.get_uuid()
        customer.customer_desc = form.d.customer_desc
        self.db.add(customer)
        self.db.flush()
        self.db.refresh(customer)

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'open'
        accept_log.accept_source = 'console'
        accept_log.account_number = form.d.account_number
        accept_log.accept_time = customer.create_time
        accept_log.operator_name = self.current_user.username
        accept_log.accept_desc = u"用户新开户:(%s)%s" % (customer.customer_name, customer.realname)
        self.db.add(accept_log)
        self.db.flush()
        self.db.refresh(accept_log)

        order_fee = 0
        balance = 0
        expire_date = form.d.expire_date
        product = self.db.query(models.TrProduct).get(form.d.product_id)

        # 预付费包月
        if product.product_policy == BOMonth:
            order_fee = decimal.Decimal(product.fee_price) * decimal.Decimal(form.d.months)
            order_fee = int(order_fee.to_integral_value())

        # 买断包月,买断流量
        elif product.product_policy in (BOMonth, BOFlows):
            order_fee = int(product.fee_price)

        # 预付费时长,预付费流量
        elif product.product_policy in (PPTimes, PPFlow):
            balance = utils.yuan2fen(form.d.fee_value)
            expire_date = MAX_EXPIRE_DATE

        order = models.TrCustomerOrder()
        order.order_id = utils.gen_order_id()
        order.customer_id = customer.customer_id
        order.product_id = product.id
        order.account_number = form.d.account_number
        order.order_fee = order_fee
        order.actual_fee = utils.yuan2fen(form.d.fee_value)
        order.pay_status = 1
        order.accept_id = accept_log.id
        order.order_source = 'console'
        order.create_time = customer.create_time
        order.order_desc = u"用户新开账号,赠送天数:%s" % (form.d.giftdays)
        self.db.add(order)

        account = models.TrAccount()
        account.account_number = form.d.account_number
        account.ip_address = form.d.ip_address
        account.customer_id = customer.customer_id
        account.product_id = order.product_id
        account.install_address = customer.address
        account.mac_addr = ''
        account.password = self.aes.encrypt(form.d.password)
        account.status = form.d.status
        account.balance = balance
        account.time_length = int(product.fee_times)
        account.flow_length = int(product.fee_flows)
        account.expire_date = expire_date
        account.user_concur_number = product.concur_number
        account.bind_mac = product.bind_mac
        account.bind_vlan = product.bind_vlan
        account.vlan_id1 = 0
        account.vlan_id2 = 0
        account.create_time = customer.create_time
        account.update_time = customer.create_time
        account.account_desc = customer.customer_desc
        self.db.add(account)

        self.add_oplog(u"用户新开账号 %s, 赠送天数:%s " % (account.account_number,form.d.giftdays))
        self.db.commit()

        dispatch.pub(ACCOUNT_OPEN_EVENT, account.account_number, async=True)
        dispatch.pub(db_cache.CACHE_DELETE_EVENT,account_cache_key(account.account_number), async=True)

        self.redirect(self.detail_url_fmt(account.account_number))
예제 #50
0
    def post(self):
        products = [(n.id, n.product_name) for n in self.get_opr_products()]
        form = account_forms.account_open_form(products)
        if not form.validates(source=self.get_params()):
            return self.render("account_open_form.html", form=form)

        if self.db.query(models.TrAccount).filter_by(
            account_number=form.d.account_number).count() > 0:
            return self.render("account_open_form.html", form=form, msg=u"上网账号已经存在")

        if form.d.ip_address and self.db.query(models.TrAccount).filter_by(ip_address=form.d.ip_address).count() > 0:
            return self.render("account_open_form.html", form=form, msg=u"ip%s已经被使用" % form.d.ip_address)

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'open'
        accept_log.accept_source = 'console'
        accept_log.account_number = form.d.account_number
        accept_log.accept_time = utils.get_currtime()
        accept_log.operator_name = self.current_user.username
        accept_log.accept_desc = u"用户新增账号:上网账号:%s" % (form.d.account_number)
        self.db.add(accept_log)
        self.db.flush()
        self.db.refresh(accept_log)

        _datetime = utils.get_currtime()
        order_fee = 0
        balance = 0
        expire_date = form.d.expire_date
        product = self.db.query(models.TrProduct).get(form.d.product_id)

        # 预付费包月
        if product.product_policy == PPMonth:
            order_fee = decimal.Decimal(product.fee_price) * decimal.Decimal(form.d.months)
            order_fee = int(order_fee.to_integral_value())
        # 买断包月,买断时长,买断流量
        elif product.product_policy in (BOMonth, BOTimes, BOFlows):
            order_fee = int(product.fee_price)
        # 预付费时长,预付费流量
        elif product.product_policy in (PPTimes, PPFlow):
            balance = utils.yuan2fen(form.d.fee_value)
            expire_date = MAX_EXPIRE_DATE

        order = models.TrCustomerOrder()
        order.order_id = utils.gen_order_id()
        order.customer_id = form.d.customer_id
        order.product_id = product.id
        order.account_number = form.d.account_number
        order.order_fee = order_fee
        order.actual_fee = utils.yuan2fen(form.d.fee_value)
        order.pay_status = 1
        order.accept_id = accept_log.id
        order.order_source = 'console'
        order.create_time = _datetime
        order.order_desc = u"用户增开账号"
        self.db.add(order)

        account = models.TrAccount()
        account.account_number = form.d.account_number
        account.ip_address = form.d.ip_address
        account.customer_id = int(form.d.customer_id)
        account.product_id = order.product_id
        account.install_address = form.d.address
        account.mac_addr = ''
        account.password = self.aes.encrypt(form.d.password)
        account.status = form.d.status
        account.balance = balance
        account.time_length = int(product.fee_times)
        account.flow_length = int(product.fee_flows)
        account.expire_date = expire_date
        account.user_concur_number = product.concur_number
        account.bind_mac = product.bind_mac
        account.bind_vlan = product.bind_vlan
        account.vlan_id1 = 0
        account.vlan_id2 = 0
        account.create_time = _datetime
        account.update_time = _datetime
        account.account_desc = form.d.account_desc
        self.db.add(account)
        self.add_oplog(u"用户增开子账号 %s" % account.account_number)
        self.db.commit()
        self.redirect(self.detail_url_fmt(account.account_number))
예제 #51
0
def init_db(db):
    node = models.TrNode()
    node.id = 1
    node.node_name = 'default'
    node.node_desc = u'默认区域'
    db.add(node)

    params = [
        ('system_name', u'管理系统名称', u'ToughRADIUS管理控制台'),
        ('system_ticket_expire_days', u'上网日志保留天数', '90'),
        ('is_debug', u'DEBUG模式', u'0'),
        ('expire_notify_days', '到期提醒提前天数', u'7'),
        ('expire_notify_interval', '到期提醒提前间隔(分钟)', u'1440'),
        ('expire_notify_tpl', '到期提醒邮件模板',
         u'账号到期通知\n尊敬的会员您好:\n您的账号#account#即将在#expire#到期,请及时续费!'),
        ('expire_notify_url', u'到期通知url',
         u'http://your_notify_url?account={account}&expire={expire}&email={email}&mobile={mobile}'
         ), ('expire_addrpool', u'到期提醒下发地址池', u'expire'),
        ('expire_session_timeout', u'到期用户下发最大会话时长(秒)', u'120'),
        ('smtp_server', u'SMTP服务器地址', u'smtp.mailgun.org'),
        ('smtp_port', u'SMTP服务器端口', u'25'),
        ('smtp_user', u'SMTP用户名', u'*****@*****.**'),
        ('smtp_pwd', u'SMTP密码', u'service2015'),
        ('smtp_sender', u'SMTP发送人名称', u'运营中心'),
        ('smtp_from', u'SMTP邮件发送地址', u'*****@*****.**'),
        ('radius_bypass', u'Radius认证密码模式', u'0'),
        ('radius_acct_interim_intelval', u'Radius记账间隔(秒)', u'120'),
        ('radius_max_session_timeout', u'Radius最大会话时长(秒)', u'86400'),
        ('radius_auth_auto_unlock', u'并发自动解锁', '0')
    ]

    for p in params:
        param = models.TrParam()
        param.param_name = p[0]
        param.param_desc = p[1]
        param.param_value = p[2]
        db.add(param)

    opr = models.TrOperator()
    opr.id = 1
    opr.operator_name = u'admin'
    opr.operator_type = 0
    opr.operator_pass = md5('root').hexdigest()
    opr.operator_desc = 'admin'
    opr.operator_status = 0
    db.add(opr)

    bas = models.TrBas()
    bas.ip_addr = '127.0.0.1'
    bas.vendor_id = '0'
    bas.bas_name = 'local bras'
    bas.bas_secret = 'secret'
    bas.coa_port = 3799
    bas.time_type = 0
    db.add(bas)

    free_product = models.TrProduct()
    free_product.id = FREE_FEE_PID
    free_product.product_name = u"自由资费"
    free_product.product_policy = FreeFee
    free_product.product_status = 0
    free_product.fee_months = 0
    free_product.fee_times = 0
    free_product.fee_flows = 0
    free_product.bind_mac = 0
    free_product.bind_vlan = 0
    free_product.concur_number = 0
    free_product.fee_price = 0
    free_product.fee_period = ''
    free_product.input_max_limit = 0
    free_product.output_max_limit = 0
    free_product.create_time = utils.get_currtime()
    free_product.update_time = utils.get_currtime()
    db.add(free_product)

    product = models.TrProduct()
    product.product_name = u"测试2M包月20元"
    product.product_policy = 0
    product.product_status = 0
    product.fee_months = 0
    product.fee_times = 0
    product.fee_flows = 0
    product.bind_mac = 0
    product.bind_vlan = 0
    product.concur_number = 0
    product.fee_price = 2000
    product.fee_period = ''
    product.input_max_limit = 1048576
    product.output_max_limit = 1048576 * 2
    product.create_time = utils.get_currtime()
    product.update_time = utils.get_currtime()
    db.add(product)

    db.commit()
    db.close()
예제 #52
0
            if not expire_date:
                return self.render_verify_err(msg=u"到期时间不能为空")


            account = self.db.query(models.TrAccount).get(account_number)
            user = self.query_account(account_number)

            if account.status not in (1, 4):
                return self.render_verify_err(msg=u"无效用户状态")

            accept_log = models.TrAcceptLog()
            accept_log.accept_type = 'next'
            accept_log.accept_source = 'api'
            accept_log.accept_desc = u"用户续费:上网账号:%s,续费%s元" % (account_number, fee_value)
            accept_log.account_number = account_number
            accept_log.accept_time = utils.get_currtime()
            accept_log.operator_name = 'api'
            self.db.add(accept_log)
            self.db.flush()
            self.db.refresh(accept_log)

            order_fee = 0
            product = self.db.query(models.TrProduct).get(user.product_id)

            # 预付费包月
            if product.product_policy == PPMonth:
                order_fee = decimal.Decimal(product.fee_price) * decimal.Decimal(months)
                order_fee = int(order_fee.to_integral_value())

            # 买断包月,买断流量,买断时长
            elif product.product_policy in (BOMonth, BOTimes, BOFlows):
예제 #53
0
            return self.render_verify_err(err)

        try:
            customer = models.TrCustomer()
            customer.node_id = form.d.node_id
            customer.realname = form.d.realname
            customer.idcard = form.d.idcard
            customer.customer_name = form.d.customer_name or form.d.account_number
            customer.password = md5(form.d.password.encode()).hexdigest()
            customer.sex = '1'
            customer.age = '0'
            customer.email = form.d.email
            customer.mobile = form.d.mobile
            customer.address = form.d.address
            customer.create_time = form.d.begin_date + ' 00:00:00'
            customer.update_time = utils.get_currtime()
            customer.email_active = 1
            customer.mobile_active = 1
            customer.active_code = utils.get_uuid()
            self.db.add(customer)
            self.db.flush()
            self.db.refresh(customer)

            accept_log = models.TrAcceptLog()
            accept_log.accept_type = 'open'
            accept_log.accept_source = 'api'
            accept_log.accept_desc = u"开通账号:%s" % form.d.account_number
            accept_log.account_number = form.d.account_number
            accept_log.accept_time = customer.update_time
            accept_log.operator_name = 'api'
            self.db.add(accept_log)
예제 #54
0
    def post(self):
        nodes = [(n.id, n.node_desc) for n in self.get_opr_nodes()]
        products = [(n.id, n.product_name) for n in self.get_opr_products()]
        iform = customer_forms.customer_import_form(nodes, products)
        node_id = self.get_argument('node_id')
        product_id = self.get_argument('product_id')
        f = self.request.files['import_file'][0]
        impctx = utils.safeunicode(f['body'])
        lines = impctx.split("\n")
        _num = 0
        impusers = []
        for line in lines:
            _num += 1
            line = line.strip()
            if not line or u"用户姓名" in line: continue
            attr_array = line.split(",")
            if len(attr_array) < 11:
                return self.render("customer_import_form.html",
                                   form=iform,
                                   msg=u"line %s error: length must 11 " %
                                   _num)

            vform = customer_forms.customer_import_vform()
            if not vform.validates(
                    dict(realname=attr_array[0],
                         idcard=attr_array[1],
                         mobile=attr_array[2],
                         address=attr_array[3],
                         account_number=attr_array[4],
                         password=attr_array[5],
                         begin_date=attr_array[6],
                         expire_date=attr_array[7],
                         balance=attr_array[8],
                         time_length=utils.hour2sec(attr_array[9]),
                         flow_length=utils.mb2kb(attr_array[10]))):
                return self.render("customer_import_form.html",
                                   form=iform,
                                   msg=u"line %s error: %s" %
                                   (_num, vform.errors))

            impusers.append(vform)

        _unums = 0
        for form in impusers:
            try:
                customer = models.TrCustomer()
                customer.node_id = node_id
                customer.realname = form.d.realname
                customer.idcard = form.d.idcard
                customer.customer_name = form.d.account_number
                customer.password = md5(form.d.password.encode()).hexdigest()
                customer.sex = '1'
                customer.age = '0'
                customer.email = ''
                customer.mobile = form.d.mobile
                customer.address = form.d.address
                customer.create_time = form.d.begin_date + ' 00:00:00'
                customer.update_time = utils.get_currtime()
                customer.email_active = 0
                customer.mobile_active = 0
                customer.active_code = utils.get_uuid()
                self.db.add(customer)
                self.db.flush()
                self.db.refresh(customer)

                accept_log = models.TrAcceptLog()
                accept_log.accept_type = 'open'
                accept_log.accept_source = 'console'
                _desc = u"用户导入账号:%s" % form.d.account_number
                accept_log.accept_desc = _desc
                accept_log.account_number = form.d.account_number
                accept_log.accept_time = customer.update_time
                accept_log.operator_name = self.current_user.username
                self.db.add(accept_log)
                self.db.flush()
                self.db.refresh(accept_log)

                order_fee = 0
                actual_fee = 0
                balance = 0
                time_length = 0
                flow_length = 0
                expire_date = form.d.expire_date
                product = self.db.query(models.TrProduct).get(product_id)
                # 买断时长
                if product.product_policy == BOTimes:
                    time_length = int(form.d.time_length)
                # 买断流量
                elif product.product_policy == BOFlows:
                    flow_length = int(form.d.flow_length)
                # 预付费时长,预付费流量
                elif product.product_policy in (PPTimes, PPFlow):
                    balance = utils.yuan2fen(form.d.balance)
                    expire_date = MAX_EXPIRE_DATE

                order = models.TrCustomerOrder()
                order.order_id = utils.gen_order_id()
                order.customer_id = customer.customer_id
                order.product_id = product.id
                order.account_number = form.d.account_number
                order.order_fee = order_fee
                order.actual_fee = actual_fee
                order.pay_status = 1
                order.accept_id = accept_log.id
                order.order_source = 'console'
                order.create_time = customer.update_time
                order.order_desc = u"用户导入开户"
                self.db.add(order)

                account = models.TrAccount()
                account.account_number = form.d.account_number
                account.customer_id = customer.customer_id
                account.product_id = order.product_id
                account.install_address = customer.address
                account.ip_address = ''
                account.mac_addr = ''
                account.password = self.aes.encrypt(form.d.password)
                account.status = 1
                account.balance = balance
                account.time_length = time_length
                account.flow_length = flow_length
                account.expire_date = expire_date
                account.user_concur_number = product.concur_number
                account.bind_mac = product.bind_mac
                account.bind_vlan = product.bind_vlan
                account.vlan_id = 0
                account.vlan_id2 = 0
                account.create_time = customer.create_time
                account.update_time = customer.update_time
                self.db.add(account)
                _unums += 1

            except Exception as e:
                return self.render("customer_import_form.html",
                                   form=iform,
                                   msg=u"error : %s" % str(e))

        self.add_oplog(u"导入开户,用户数:%s" % _unums)
        self.db.commit()
        self.redirect("/admin/customer")
예제 #55
0
            return self.render_verify_err(err)

        try:
            customer = models.TrCustomer()
            customer.node_id = form.d.node_id
            customer.realname = form.d.realname
            customer.idcard = form.d.idcard
            customer.customer_name = form.d.customer_name or form.d.account_number
            customer.password = md5(form.d.password.encode()).hexdigest()
            customer.sex = '1'
            customer.age = '0'
            customer.email = form.d.email
            customer.mobile = form.d.mobile
            customer.address = form.d.address
            customer.create_time = form.d.begin_date + ' 00:00:00'
            customer.update_time = utils.get_currtime()
            customer.email_active = 1
            customer.mobile_active = 1
            customer.active_code = utils.get_uuid()
            self.db.add(customer)
            self.db.flush()
            self.db.refresh(customer)

            accept_log = models.TrAcceptLog()
            accept_log.accept_type = 'open'
            accept_log.accept_source = 'api'
            accept_log.accept_desc =  u"API开通账号:%s" % form.d.account_number
            accept_log.account_number = form.d.account_number
            accept_log.accept_time = customer.update_time
            accept_log.operator_name = 'api'
            self.db.add(accept_log)
예제 #56
0
파일: initdb.py 프로젝트: leigf/ToughRADIUS
def init_db(db):
    node = models.TrNode()
    node.id = 1
    node.node_name = 'default'
    node.node_desc = u'默认区域'
    db.add(node)

    params = [
        ('system_name', u'管理系统名称', u'ToughRADIUS管理控制台'),
        ('system_ticket_expire_days', u'上网日志保留天数', '90'),
        ('customer_system_name', u'自助服务系统名称', u'ToughRADIUS自助服务中心'),
        ('customer_system_url', u"自助服务系统地址", u"http://forum.toughradius.net"),
        ('is_debug', u'DEBUG模式', u'0'),
        ('customer_qrcode', u'微信公众号二维码图片(宽度230px)', u'http://img.toughradius.net/toughforum/jamiesun/1421820686.jpg!230'),
        ('customer_service_phone', u'客户服务电话', u'000000'),
        ('customer_service_qq', u'客户服务QQ号码', u'000000'),
        ('rcard_order_url', u'充值卡订购网站地址', u'http://www.tmall.com'),
        ('expire_notify_days', '到期提醒提前天数', u'7'),
        ('expire_notify_interval', '到期提醒提前间隔(分钟)', u'1440'),
        ('expire_notify_tpl', '到期提醒邮件模板', u'账号到期通知\n尊敬的会员您好:\n您的账号#account#即将在#expire#到期,请及时续费!'),
        ('expire_notify_url', u'到期通知url', u'http://your_notify_url?account={account}&expire={expire}&email={email}&mobile={mobile}'),
        ('expire_addrpool', u'到期提醒下发地址池', u'expire'),
        ('expire_session_timeout', u'到期用户下发最大会话时长(秒)', u'120'),
        ('smtp_server', u'SMTP服务器地址', u'smtp.mailgun.org'),
        ('smtp_port', u'SMTP服务器端口', u'25'),
        ('smtp_user', u'SMTP用户名', u'*****@*****.**'),
        ('smtp_pwd', u'SMTP密码', u'service2015'),
        ('smtp_sender', u'SMTP发送人名称', u'运营中心'),
        ('smtp_from', u'SMTP邮件发送地址', u'*****@*****.**'),
        ('radius_bypass', u'Radius认证密码模式', u'0'),
        ('radius_acct_interim_intelval', u'Radius记账间隔(秒)', u'120'),
        ('radius_max_session_timeout', u'Radius最大会话时长(秒)', u'86400'),
        ('radius_auth_auto_unlock', u'并发自动解锁', '0')
    ]

    for p in params:
        param = models.TrParam()
        param.param_name = p[0]
        param.param_desc = p[1]
        param.param_value = p[2]
        db.add(param)

    opr = models.TrOperator()
    opr.id = 1
    opr.operator_name = u'admin'
    opr.operator_type = 0
    opr.operator_pass = md5('root').hexdigest()
    opr.operator_desc = 'admin'
    opr.operator_status = 0
    db.add(opr)

    bas = models.TrBas()
    bas.ip_addr = '127.0.0.1'
    bas.vendor_id = '0'
    bas.bas_name = 'local bras'
    bas.bas_secret = 'secret'
    bas.coa_port = 3799
    bas.time_type = 0
    db.add(bas)

    product = models.TrProduct()
    product.product_name = u"测试2M包月20元"
    product.product_policy = 0
    product.product_status = 0
    product.fee_months = 0
    product.fee_times = 0
    product.fee_flows = 0
    product.bind_mac = 0
    product.bind_vlan = 0
    product.concur_number = 0
    product.fee_price = 2000
    product.fee_period =  '' 
    product.input_max_limit = 1048576
    product.output_max_limit = 1048576 * 2
    product.create_time = utils.get_currtime()
    product.update_time = utils.get_currtime()
    db.add(product)

    db.commit()
    db.close()
예제 #57
0
    def post(self):
        account_number = self.get_argument("account_number")
        account = self.db.query(models.TrAccount).get(account_number)
        user = self.query_account(account_number)
        form = account_forms.account_next_form()
        form.product_id.set_value(user.product_id)
        if account.status not in (1, 4):
            return render("account_next_form", user=user, form=form, msg=u"无效用户状态")
        if not form.validates(source=self.get_params()):
            return render("account_next_form", user=user, form=form)

        accept_log = models.TrAcceptLog()
        accept_log.accept_type = 'next'
        accept_log.accept_source = 'console'
        accept_log.accept_desc = u"用户续费:上网账号:%s,续费%s元;%s" % (account_number, form.d.fee_value,form.d.operate_desc)
        accept_log.account_number = form.d.account_number
        accept_log.accept_time = utils.get_currtime()
        accept_log.operator_name = self.current_user.username
        self.db.add(accept_log)
        self.db.flush()
        self.db.refresh(accept_log)

        

        order_fee = 0
        product = self.db.query(models.TrProduct).get(user.product_id)

        # 预付费包月
        if product.product_policy == PPMonth:
            order_fee = decimal.Decimal(product.fee_price) * decimal.Decimal(form.d.months)
            order_fee = int(order_fee.to_integral_value())

        # 买断包月,买断流量,买断时长
        elif product.product_policy in (BOMonth, BOTimes, BOFlows):
            order_fee = int(product.fee_price)

        order = models.TrCustomerOrder()
        order.order_id = utils.gen_order_id()
        order.customer_id = user.customer_id
        order.product_id = user.product_id
        order.account_number = form.d.account_number
        order.order_fee = order_fee
        order.actual_fee = utils.yuan2fen(form.d.fee_value)
        order.pay_status = 1
        order.accept_id = accept_log.id
        order.order_source = 'console'
        order.create_time = utils.get_currtime()

        old_expire_date = account.expire_date

        account.status = 1
        account.expire_date = form.d.expire_date
        if product.product_policy == BOTimes:
            account.time_length += product.fee_times
        elif product.product_policy == BOFlows:
            account.flow_length += product.fee_flows

        order.order_desc = u"用户续费,续费前到期:%s,续费后到期:%s" % (old_expire_date, account.expire_date)
        self.db.add(order)
        self.add_oplog(order.order_desc)

        self.db.commit()
        self.redirect(self.detail_url_fmt(account_number))
예제 #58
0
파일: login.py 프로젝트: vvhh2002/toughwlan
    def post(self):
        qstr = self.get_argument("qstr", "")
        wlan_params = self.get_wlan_params(qstr)
        ssid = wlan_params.get("ssid", "default")
        ispcode = wlan_params.get("ispcode", "default")

        if not wlan_params:
            self.render_error(msg=u"Missing parameter: ssid,wlanuserip,wlanacip")
            return

        start_time = time.time()
        nas = self.get_nas(wlan_params.get("wlanacip",'127.0.0.1'))
        print nas
        if not nas:
            self.render_error(msg=u"AC server {0} didn't  register ".format(wlan_params.get("wlanacip")))
            return

        ac_addr = nas['ip_addr']
        ac_port = int(nas['ac_port'])
        secret = utils.safestr(nas['bas_secret'])
        _vendor= utils.safestr(nas['portal_vendor'])
        if _vendor not in ('cmccv1','cmccv2','huaweiv1','huaweiv2'):
            self.render_error(msg=u"AC server portal_vendor {0} not support ".format(_vendor))
            return

        hm_mac=(wlan_params.get('wlanstamac','').replace(".",":").replace('-',':'))
        macbstr = hm_mac and struct.pack('BBBBBB',*[int(i,base=16) for i in hm_mac.split(':')]) or None

        send_portal = functools.partial(
            client.send,
            secret,
            log=logger,
            debug=self.settings.debug,
            vendor=_vendor,
            timeout=5
        )
        vendor = client.PortalClient.vendors.get(_vendor)

        is_chap=self.settings.config.portal.chap in (1, "1", "chap")
        userIp=wlan_params.get('wlanuserip', self.request.remote_ip)
        username=self.get_argument("username", None)
        password=self.get_argument("password", None)

        if self.settings.debug:
            logger.info( u"Start [username:%s] portal auth, wlan params:%s" % (
                username, utils.safeunicode(wlan_params)))

        tpl = self.get_template_attrs(wlan_params.get("ssid", "default"),ispcode)
        firsturl=tpl.get("home_page", "/portal/index?tpl_name=%s" % tpl.get('tpl_name', 'default'))

        def back_login(msg = u''):
            self.render(self.get_login_template(tpl['tpl_path']), tpl = tpl, msg = msg, qstr = qstr, **wlan_params)

        if not username or not password:
            back_login(msg = u"username and password cannot be empty")
            return

        # checkos
        # cli_dev, cli_os = self.chk_os
        # domain = yield self.get_domain(wlan_params.get("ssid", "default"))
        # username = "******" % (username, cli_dev, cli_os, domain)

        try:
            challenge_resp = None
            if is_chap:
                ## req challenge ################################
                challenge_req=vendor.proto.newReqChallenge(userIp, secret, mac=macbstr, chap = is_chap)
                challenge_resp = yield send_portal(data = challenge_req, host=ac_addr, port=ac_port)

                if challenge_resp.errCode > 0:
                    if challenge_resp.errCode == 2:
                        self.set_session_user(username, userIp, utils.get_currtime(), qstr=qstr)
                        self.redirect(firsturl)
                        return
                    raise Exception(vendor.mod.AckChallengeErrs[challenge_resp.errCode])

            if challenge_resp:
                ## req auth ################################
                auth_req = vendor.proto.newReqAuth(
                    userIp, username, password, challenge_resp.reqId, challenge_resp.get_challenge(), 
                    secret, ac_addr, serialNo=challenge_req.serialNo,mac=macbstr, chap=is_chap)
            else:
                auth_req = vendor.proto.newReqAuth(userIp, username,password,0,None,secret,ac_addr,chap=is_chap)

            auth_resp = yield send_portal(data=auth_req, host=ac_addr, port=ac_port)

            if auth_resp.errCode > 0:
                if auth_resp.errCode == 2:
                    self.set_session_user(username, userIp, utils.get_currtime(),qstr=qstr)
                    self.redirect(firsturl)
                    return
                text_info = auth_resp.get_text_info()
                _err_msg=u"{0},{1}".format(
                    vendor.mod.AckAuthErrs[auth_resp.errCode], 
                    utils.safeunicode(text_info and text_info[0] or "")
                )
                raise Exception(_err_msg)

            ### aff_ack ################################
            affack_req = vendor.proto.newAffAckAuth(
                userIp, secret,ac_addr,auth_req.serialNo,auth_resp.reqId, mac=macbstr,chap = is_chap)

            send_portal(data=affack_req, host=ac_addr, port=ac_port,noresp=True)

            logger.info( u'Portal [username:{0}] auth success'.format(username))

            if self.settings.debug:
                logger.debug( u'Portal [username:%s] auth login [cast:%s ms]' % (
                username, (time.time() - start_time) * 1000))

            self.set_session_user(username, userIp, utils.get_currtime(),qstr=qstr, nasaddr=ac_addr)
            self.redirect(firsturl)

        except Exception as err:
            import traceback
            traceback.print_exc()
            back_login(msg = u"Portal auth error,%s" % utils.safeunicode(err.message))
예제 #59
0
    def post(self):
        try:
            request = self.parse_form_request()
        except apiutils.SignError, err:
            return self.render_sign_err(err)
        except Exception as err:
            return self.render_parse_err(err)

        try:
            order_id = request.get('order_id')
            if not order_id:
                return self.render_verify_err(msg=u"order_id is empty")

            order = self.db.query(models.TrCustomerOrder).get(order_id)
            if not order:
                return self.render_verify_err(msg=u'order not exists')
            account = self.db.query(models.TrAccount).get(order.account_number)
            if not account:
                return self.render_verify_err(msg=u'account not exists')

            order.pay_status = 1
            account.status = 1
            order.order_desc = order.order_desc + u"paytime:" + utils.get_currtime(
            )
            self.db.commit()
            self.render_success()
        except Exception as err:
            self.render_unknow(err)
            import traceback
            traceback.print_exc()