Exemple #1
0
    def post(self):
        args = log_post_parser.parse_args()

        log = Log(**args)
        try:
            log.add()
        except IntegrityError:
            return max_res('', code=401, errmsg='名称重复')

        return max_res(marshal(log, log_fields))
 def add(cls, client_msg: ClientMessage, course: str):
     with session_maker() as session:
         heartbeat = cls()
         heartbeat.student_code = client_msg.student_code
         heartbeat.course = course
         heartbeat.device = client_msg.device.dumps()
         heartbeat.device_id = client_msg.auth_license
         calc_device_id = Core.machine_code_auth(
             stu_code=client_msg.student_code,
             mac_addr=client_msg.device.mac_addr,
             c_volume_serial_number=client_msg.device.
             c_volume_serial_number,
             hostname=client_msg.device.hostname)
         if calc_device_id != client_msg.auth_license:
             Log.add(client_msg)
         heartbeat.created_time = datetime.datetime.now()
         session.add(heartbeat)
    def verification(self, request, context):
        """
        解析请求:
        plain_request.context.body: 消息主体; plain_request.device: 设备信息
        """
        plain_request = ResponseParser.parse(request=request.key)
        body = plain_request.context.body
        context_type = plain_request.context.context_type
        message = plain_request.context.message
        code = plain_request.context.code
        device = plain_request.device
        student_code = plain_request.student_code

        auth_logger.info("{} - [{}] | {} | {} | Device: [{}]".format(
            TimeUtils.datetime(), student_code, message, body, device))

        if context_type == MessageType.Verify:  # 网络验证
            User.modify(plain_request, datetime.datetime.now(),
                        datetime.datetime.now())
            Log.add(plain_request, "Login")
            return self.easy_response(
                {"success": True if code >= 0 else False})
        elif context_type == MessageType.Heartbeat:  # 心跳
            User.modify(plain_request, None, datetime.datetime.now())
            Heartbeat.add(plain_request, body['course'])
            return self.easy_response(
                {"success": True if code >= 0 else False})
        elif context_type == MessageType.Logging:  # 日志
            Log.add(plain_request, "ClientLog")
            return self.easy_response(
                {"success": True if code >= 0 else False})
        elif context_type == MessageType.Control:  # 控制频率
            delay_time = User.get_delay_time(student_code, body['course'])
            return self.easy_response({
                "message": {
                    'delay_time': delay_time
                },
                "success": True
            })

        return self.easy_response({})
Exemple #4
0
    def add(cls, client_msg: ClientMessage):
        with session_maker() as session:
            device = cls()

            stu_codes = session.query(Devices.student_codes).filter(
                Devices.device_id == client_msg.device.device_id).first()

            if stu_codes:
                stu_codes = json.loads(stu_codes[0]) if stu_codes else []
                stu_codes = list(set([client_msg.student_code] + stu_codes))
                stu_codes = json.dumps(stu_codes,
                                       ensure_ascii=False,
                                       separators=(',', ':'))
                session.query(Devices).filter(
                    Devices.device_id == client_msg.device.device_id).update(
                        {Devices.student_codes: stu_codes})
            else:
                stu_codes = json.dumps([client_msg.student_code],
                                       ensure_ascii=False,
                                       separators=(',', ':'))
                device.student_codes = stu_codes
                device.hostname = client_msg.device.hostname
                device.mac_addr = client_msg.device.mac_addr
                device.c_volume_serial_number = client_msg.device.c_volume_serial_number
                device.device_id = client_msg.device.device_id
                device.created_time = datetime.datetime.now()
                session.add(device)

            calc_auth_license = Core.machine_code_auth(
                stu_code=client_msg.student_code,
                mac_addr=client_msg.device.mac_addr,
                c_volume_serial_number=client_msg.device.
                c_volume_serial_number,
                hostname=client_msg.device.hostname)
            if calc_auth_license != client_msg.auth_license:
                Log.add(client_msg)