Beispiel #1
0
def cdata(request):
    '''
    设备向服务器的http:://xxx/cdata请求
    '''
    network_monitor(request)
    try:
        from mysite import authorize_fun
        language=request.REQUEST.get('language',None)   #---获得语言参数
        authorize_fun.check_push_device(language)   #---连接设备数量控制
        device = check_device(request, True)    #---检测、验证当前发出请求的设备
        if device is None: 
            return unknown_device_response()
        else:
            if device.deviceType==POSDEVICE:#消费机
                from mysite.pos.posdevview import pos_cdata
                ret = pos_cdata(request)
                return device_response_write(ret)
            elif device.deviceType in ['ACP', 'ACD']:#控制器or一体机:
                from mysite.iaccess.push_comm_center import acc_cdata
                ret = acc_cdata(request)
                return device_response_write(ret)
            
            if request.REQUEST.has_key('action'):
                return ok_response(device)
            elif request.method == 'GET':
                return cdata_get(request,device)
            elif request.method == 'POST':
                try:
                    return cdata_post(request, device)
#                    resp =cdata_post(request, device)
#                    return device_response_write(resp)
                except Exception, e:
                    return erro_response(e)
            else:
Beispiel #2
0
def devpost(request):
    '''
    http://xxx/devicecmd
    设备返回设备命令执行结果的请求
    '''
    from commen_utils import parse_posts
    network_monitor(request)
    
    device = check_device(request)    #---检测、验证当前发出请求的设备
    if device is None: 
        return unknown_device_response()
    else:        
        if request.method == 'GET':
            pass
        elif request.method == 'POST':
            try:
                rd = request.raw_post_data
                if settings.ENCRYPT:    #---解密
                    try:
                        import lzo
                        rawData = lzo.bufferDecrypt(rd, device.sn)
                    except:
                        rawData = rd
                else:
                    rawData = rd
                    
                try:
                    data0 = rawData.decode("gb18030")   #---解码
                except:
                    data0 = rawData
                rets = {}
                pdata = parse_posts(data0)  #---解析,结果为字典的数组
                for apost in pdata: #[CMD,ID,Return]
                    id = int(apost["ID"])   # 命令ID
                    ret = apost["Return"]   #命令执行返回值
                    if apost["CMD"] == "INFO":#更新设备信息
                        parse_dev_info(device, apost['Content'])
                        device.save()
                        rets[id] = ret
                    elif (apost["CMD"] == "GetFile" or apost["CMD"] == "Shell") and ret > 0:
                        check_upload_file(request, apost)
                        rets[id] = ret
                    elif apost["CMD"] == "VERIFY SUM" and ret > 0:  #考勤校对
                        check_att_sum(apost,device)
                        rets[id] = ret
                    elif apost["CMD"] == "PutFile":
                        check_upgradefile(id,apost,device,ret)
                        post_check_update(device,[ret]) #立即单独更新此处理的开始指针
                        #rets[id] = ret
                    else:#默认情况下CMD为DATA
                        rets[id] = ret
                if len(rets) > 0:
                    update_cmds(device, rets)
                return device_response_write("OK")
            except:
                device_response_write("")
        else:
            return unknown_data_response(device)
Beispiel #3
0
def post_photo(request):
    '''
    http://xxx/fdata
    设备采集现场图片并上传到服务器
    '''
    network_monitor(request)
    device = check_device(request)
    if device is None:
        return unknown_device_response()
    else:
        try:
            pin = request.REQUEST.get("PIN", "")

            pin = pin.split(".")[0].split("-")
            dt = pin[0]
            if len(pin) == 2:  #Success Picture
                pin = pin[1]
            else:
                pin = ""
            d = request.raw_post_data
            if "CMD=uploadphoto" in d: d = d.split("CMD=uploadphoto")[1][1:]
            if "CMD=realupload" in d: d = d.split("CMD=realupload")[1][1:]
            if len(d) > 0:
                if 0 and SYNC_MODEL:
                    save_attphoto(
                        "%s/%s/%s" % (device.sn, dt[:4], dt[4:8]) + "/" +
                        format_pin(pin) + "_" + dt[8:] + ".jpg", d, "picture")
                else:
                    from mysite.iclock.models import Transaction
                    save_model_file(
                        Transaction,
                        "%s/%s/%s" % (device.sn, dt[:4], dt[4:8]) + "/" +
                        format_pin(pin) + "_" + dt[8:] + ".jpg", d, "picture")
            else:
                return device_response_write("No photo data!\n")

            if request.REQUEST.has_key('PhotoStamp'):
                if SYNC_MODEL:
                    device.photo_stamp = request.REQUEST['PhotoStamp']
                    device.set('photo_stamp')  #####更新考勤照片时间戳
                else:
                    DevLog(SN=device,
                           Cnt=1,
                           OP=u"PICTURE",
                           Object=pin,
                           OpTime=datetime.datetime.now()).save()
                    device.photo_stamp = request.REQUEST['PhotoStamp']
                    device.save()

            #check_and_save_cache(device)
        except:
            pass
        return device_response_write("OK\n")
Beispiel #4
0
def cdata_get_pin(request, device):
    '''
    请求中 带人员PIN参数时的处理 返回人员基本信息和指纹模板信息、删除人员
    涉及 http参数:pin、save 
    '''
    resp = ""
    #    save = request.REQUEST.has_key('save') and (request.REQUEST['save'] in ['1', 'Y', 'y', 'yes', 'YES']) or False
    pin = request.REQUEST.get('PIN', '')
    card = request.REQUEST.get('Card', '')
    Expect = request.REQUEST.get('Expect', '')
    emp = None
    if len(pin) > 0:
        emp = get_emp(pin)
    elif len(card) > 0:
        emp = get_emp_from_card(card_to_num(card))
    if emp:
        emp_info = emp_info_data(emp)
        if Expect == "FACE":
            f = face_data(emp, device)
        elif Expect == "USER":
            f = ""
        else:
            f = fingerprint_data(emp, device.Fpversion)
        cc = emp_info + f
        try:
            resp += cc.encode("gb18030")
        except:
            resp += cc.decode("utf-8").encode("gb18030")
#        if not save:
#            delete_emp_data(emp.pin())
        return device_response_write(resp)
    else:
        return ok_response()
Beispiel #5
0
def cdata_post(request, device): 
    '''
    处理设备的POST请求
    涉及http参数: "raw_post_data"、stamp_name
    '''
    raw_Data = request.raw_post_data
    if not raw_Data:
        raw_Data = request.META['raw_post_data']
    from setting_proccess import pre_proccess
    rawData = pre_proccess(raw_Data)
#    request.raw_post_data = rawData
#    post_urlPara_handlers.action()

    ######################服务器端验证功能
    Auty = request.REQUEST.get('AuthType', None)   
    if Auty:
        from new_push import verification
        res = verification(request,device,Auty)
        return res
    stamp = get_requet_list(request)
    if stamp:
        stamp_key = stamp[0]
        stamp_val = stamp[1]
        ret =  make_cmd_data(request,device,stamp_key,stamp_val,rawData)
        return device_response_write(ret)
    else:
        return unknown_response()
Beispiel #6
0
def getreq(request):
    '''
    http://xxx/getrequest
    设备读取服务器上存储的命令
    '''
    network_monitor(request)
    try:
        resp = ""  #---要直接发送的内容
        device = check_device(request, True)  #---检测、验证当前发出请求的设备
        if device is None:
            return unknown_device_response()
        else:
            if request.method == 'GET':
                if SYNC_MODEL:
                    return sync_getreq_get(request, device)
                else:
                    return getreq_get(request, device)
            elif request.method == 'POST':
                pass
            else:
                return unknown_data_response(device)
        # 自动升级固件功能
        # ......
    except Exception, e:
        import traceback
        traceback.print_exc()
        resp = u"%s" % e
        return device_response_write(resp)
Beispiel #7
0
def cdata_get(request,device):
    '''
    返回用户信息或者设备信息
    '''
    if request.REQUEST.has_key('PIN'):
        return cdata_get_pin(request, device)
    else:
        deal_pushver(request,device)
        resp =cdata_get_options(device)
        return device_response_write(resp)
Beispiel #8
0
def cdata(request):
    '''
    设备向服务器的http:://xxx/cdata请求
    '''
    from protocol_content import POSDEVICE
    network_monitor(request)
    try:
        device_type = request.REQUEST.get('devicetype')  #设备类型参数
        pos_device_type = request.REQUEST.get('device_type',
                                              None)  #兼容ID消费固件,后期统一使用devicetype
        if (device_type == POSDEVICE or pos_device_type == POSDEVICE):  #ID消费机
            from mysite.pos.pos_id.posdevview import pos_cdata
            if get_option("POS_ID"):
                resp = pos_cdata(request)
            else:  #防止IC消费软件,连接ID消费机
                from protocol_content import pos_return
                resp = pos_return()
            return device_response_write(resp)
        else:
            device = check_device(request, True, True)  #---检测、验证当前发出请求的设备
            if device is None:
                return unknown_device_response()
            else:
                if device.deviceType in ['ACP', 'ACD']:  #控制器or一体机:
                    from mysite.iaccess.push_comm_center import acc_cdata
                    ret = acc_cdata(request)
                    return device_response_write(ret)

                if request.REQUEST.has_key('action'):
                    return ok_response(device)
                elif request.method == 'GET':
                    return cdata_get(request, device)
                elif request.method == 'POST':
                    try:
                        return cdata_post(request, device)
    #                    resp =cdata_post(request, device)
    #                    return device_response_write(resp)
                    except Exception, e:
                        return erro_response(e)
                else:
                    return unknown_data_response(device)
Beispiel #9
0
def getreq_get(request,device):
    '''
    获取设备命令 处理请求中带有设备INFO信息
    '''
    info = request.GET.get("INFO", "")
    if info:
        update_device_info(device,info)
    resp = fetch_cmds(device)
    print 'getting cmds=============',resp
    deal_device_active(device)
    
    if settings.ENCRYPT:
        import lzo
        resp = lzo.bufferEncrypt(resp + "\n", device.sn)
    return device_response_write(resp)
Beispiel #10
0
def sync_getreq_get(request, device):
    '''
    获取设备命令 处理请求中带有设备INFO信息
    '''
    dt_now = datetime.datetime.now()
    str_now = dt_now.strftime(time_fmt)
    device.last_activity = str_now
    device.set('last_activity')  # 设备每次请求命令时更新最后访问时间
    info = request.GET.get("INFO", "")
    if info:
        update_device_info(device, info)
    resp = device.fetch_cmds()
    if develop_model:
        print 'Getting cmds=============\n', resp
    if ENCRYPT:
        import lzo
        resp = lzo.bufferEncrypt(resp + "\n", device.sn)
    return device_response_write(resp)
Beispiel #11
0
def cdata_get_pin(request, device):
    '''
    请求中 带人员PIN参数时的处理 返回人员基本信息和指纹模板信息、删除人员
    涉及 http参数:pin、save 
    '''
    resp = ""
    pin = request.REQUEST['PIN']
    #pin = format_pin(pin)
    try:
        emp = Employee(pin).get()
        emp_info = emp.get_info()
        emp_fp = ''  #emp.get_fp()
        cc = emp_info + emp_fp
        try:
            resp += cc.encode("gb18030")
        except:
            resp += cc.decode("utf-8").encode("gb18030")
        return device_response_write(resp)
    except ObjectDoesNotExist:  #---人员不存在
        return none_response()
Beispiel #12
0
def cdata_get(request, device):
    '''
    返回用户信息或者设备信息
    '''
    if request.REQUEST.has_key('PIN') or request.REQUEST.has_key('Card'):
        '''异地考勤入口'''
        return cdata_get_pin(request, device)
    else:
        '''服务器下发机器信息(如设备上传标识位)'''
        if SYNC_MODEL:
            alg_ver = "1.0"
            if request.REQUEST.has_key('pushver'):
                alg_ver = request.REQUEST.get('pushver')
            device.alg_ver = alg_ver
            device.set("alg_ver")  ########更新设备版本
            resp = device.get_option()
        else:
            deal_pushver(request, device)
            resp = cdata_get_options(device)
        return device_response_write(resp)
Beispiel #13
0
def cdata_get_pin(request, device):
    '''
    请求中 带人员PIN参数时的处理 返回人员基本信息和指纹模板信息、删除人员
    涉及 http参数:pin、save 
    '''
    resp=""
#    save = request.REQUEST.has_key('save') and (request.REQUEST['save'] in ['1', 'Y', 'y', 'yes', 'YES']) or False
    pin = request.REQUEST['PIN']
    emp = get_emp(pin)
    if emp:
        emp_info = emp_info_data(emp)
        fp = fingerprint_data(emp,device.Fpversion)
        cc = emp_info + fp
        try:
            resp += cc.encode("gb18030")
        except:
            resp += cc.decode("utf-8").encode("gb18030")
#        if not save:
#            delete_emp_data(emp.pin())
        return device_response_write(resp)
    else:
        return none_response()
Beispiel #14
0
def getreq(request):
    '''
    http://xxx/getrequest
    设备读取服务器上存储的命令
    '''
    network_monitor(request)
    try:
        resp = "" #---要直接发送的内容
        device = check_device(request, True)    #---检测、验证当前发出请求的设备
        if device is None: 
            return unknown_device_response()
        else:        
            if request.method == 'GET':
                return getreq_get(request,device)
            elif request.method == 'POST':
                pass
            else:
                return unknown_data_response(device)    
        # 自动升级固件功能
        # ......
    except  Exception, e:
        import traceback;traceback.print_exc()
        resp = u"%s" % e
        return device_response_write(resp)