Пример #1
0
def handle(msg):
    try:
        info('handle', str(msg))
        #if msg.get_base_name() != base_name:
        #    return

        if(msg.get_topic() != self.get_topic()):
            return

        name = msg.get_name()
        if name == 'AUTH':
            print('allow', name, str(msg))
            lora.send_allow(msg.get_value())
        elif name == 'UNAUTH':
            print('deny', name, str(msg))
            lora.send_deny(msg.get_value())
        elif name == 'LOCK':
            print('lock', name, str(msg))
            lora.send_lock()
        elif name == 'STATUS':
            print('status', name, str(msg))
            lora.send_status()
        elif name == 'UNLOCK':
            print('unlock', name, str(msg))
            lora.send_unlock()
    except Exception as ex:
        error('handle', str(ex))
Пример #2
0
def setup():
    print('Program is starting ... ')
    print('Press Ctrl-C to exit.')
    lora.init()

    #boxNum = box
    #print('Mailbox Number: ' boxNum)

    info('send', 'STATUS')
    packet = bytearray(config.OP_STATUS_SIZE)
    packet[0] = config.OP_STATUS
    packet[1:9] = crypto.get_checksum(packet)
    packet[9] = 1
    packet[10] = 1
    packet[11] = 1
    packet[12] = 1

    i = 0
    for x in os.environ['GATE_PUB_KEYS'].split(','):
        if i == 0:
            i += 1
        else:
            lora.send(packet, i)
            info('send', 'ACK {}'.format(lora.packet_str(packet)))
            i += 1
Пример #3
0
        def handle_mailbox(msg):
            print('in here............')
            try:
                info('handle', str(msg))
                name = msg.get_name()
                print(name)
                if name == 'ADD':
                    boxinfo = msg.get_str()
                    print(boxinfo)
                    if self.mailbox_exists(boxinfo):
                        print('mailbox_exists')
                        return
                    #boxinfo[0] = Pub_Key
                    s = open('.env').read()
                    s = s.replace("GATE_PUB_KEYS="+os.environ['GATE_PUB_KEYS'], "GATE_PUB_KEYS="+os.environ['GATE_PUB_KEYS']+','+boxinfo)
                    #s = s.replace("KIT_CHANNEL="+os.environ['KIT_CHANNEL'], "KIT_CHANNEL="+os.environ['KIT_CHANNEL']+','+self.get_box_channel(boxNum))
                    f = open('.env', 'w')
                    f.write(s)
                    f.close()
                    #look up activate to get mailbox channel
                    self.get_env()
                    print('added', name, str(msg))

            except Exception as ex:
                error('handle', str(ex))
Пример #4
0
    def run(self):
        logger.info('IMEI = %s' % self.imei)
        logger.info('SOURCEIPA = %s' % self.sourceipa)
        logger.info('DEVELOPER = %s' % self.developer)
        logger.info('MOBILEPROV = %s' % self.mobileprov)
        logger.info('TARGET = %s' % self.target)
        '''创建解压后的文件夹'''
        if os.path.exists(self.extracted):
            shutil.rmtree(self.extracted)
        os.makedirs(self.extracted)
        '''unlock'''
        '''
		self.unlock()
		'''
        '''解压ipa文件'''
        self.unzip()
        '''复制mobileprov文件'''
        self.copy_mobileprov()
        '''生成plist文件'''
        self.generate_plist()
        '''签名'''
        self.sign()
        '''压缩'''
        self.zip()
        '''清理工程'''
        self.clean()
Пример #5
0
    def copy_mobileprov(self):
        ''' 复制mobileprovision文件 '''
        for filename in os.listdir(self.extracted + '/Payload/'):
            f = os.path.splitext(self.extracted + '/Payload/' + filename)
            if len(f) != 2 or f[1] != '.app':
                continue
            '''设置解压后的.app文件夹路径'''
            self.payload_app_dir = self.extracted + '/Payload/' + filename
            self.mobileprov_to_dir = self.payload_app_dir + '/embedded.mobileprovision'

        cmdstring = 'cp %s %s' % (self.mobileprov, self.mobileprov_to_dir)
        logger.info(cmdstring)
        shell.execute(cmdstring)
Пример #6
0
    def generate_plist(self):
        self.full_plist_file = self.extracted + '/t_entitlements_full.plist'
        self.plist_file = self.extracted + '/t_entitlements.plist'
        '''
		here need to config linux for user execute as root with no password		
		'''
        cmdstring = 'sudo security cms -D -i %s > %s' % (
            self.mobileprov_to_dir, self.full_plist_file)
        logger.info(cmdstring)
        shell.execute(cmdstring, shell=True)

        cmdstring = '/usr/libexec/PlistBuddy -x -c "Print:Entitlements" %s > %s' % (
            self.full_plist_file, self.plist_file)
        logger.info(cmdstring)
        shell.execute(cmdstring, shell=True)
Пример #7
0
def setup(box):
    print('Program is starting ... ')
    print('Press Ctrl-C to exit.')
    lora.init()

    print('Mailbox Number: ' + str(box))

    info('send', 'STATUS')
    packet = bytearray(config.OP_STATUS_SIZE)
    packet[0] = config.OP_STATUS
    packet[1:9] = crypto.get_checksum(packet)
    packet[9] = 1
    packet[10] = 1
    packet[11] = 1
    packet[12] = 1

    lora.send(packet)
    info('send', 'ACK {}'.format(lora.packet_str(packet)))
Пример #8
0
 def sign(self):
     for parent, dirnames, filenames in os.walk(self.payload_app_dir):
         for dirname in dirnames:  # 循环所有文件夹
             d = os.path.splitext(parent + '/' + dirname)
             if len(d) != 2:
                 continue
             if d[1] != '.app' and d[1] != '.appex' and d[
                     1] != '.framework' and d[1] != '.dylib':
                 continue
             cmdstring = '/usr/bin/codesign --continue -f -s "%s" --entitlements %s  %s' % (
                 self.developer, self.plist_file, parent + '/' + dirname)
             logger.info(cmdstring)
             shell.execute(cmdstring, shell=True)
     '''签名app'''
     cmdstring = '/usr/bin/codesign --continue -f -s "%s" --entitlements %s  %s' % (
         self.developer, self.plist_file, self.payload_app_dir)
     logger.info(cmdstring)
     shell.execute(cmdstring, shell=True)
     os.remove(self.extracted + '/t_entitlements_full.plist')
     os.remove(self.extracted + '/t_entitlements.plist')
Пример #9
0
def handle(msg):
    def check_topic(topic):
        i = 0
        for x in os.environ['KIT_CHANNEL'].split(','):
            if i != 0 and x == topic.split('/')[1]:
                print ('xKey: ' + x + ' BoxNum: ' + str(i))
                return i  
            i+=1
        return -1
        
    try:
        info('handle', str(msg))
        #if msg.get_base_name() != base_name:
        #    return
            
        boxNum = check_topic(msg.get_topic())
        if(boxNum == -1):
            return

        name = msg.get_name()
        if name == 'AUTH':
            print('allow', name, str(msg))
            lora.send_allow(boxNum, msg.get_value())
        elif name == 'UNAUTH':
            print('deny', name, str(msg))
            lora.send_deny(boxNum, msg.get_value())
        elif name == 'LOCK':
            print('lock', name, str(msg))
            lora.send_lock(boxNum)
        elif name == 'STATUS':
            print('status', name, str(msg))
            lora.send_status(boxNum)
        elif name == 'UNLOCK':
            print('unlock', name, str(msg))
            lora.send_unlock(boxNum)
    except Exception as ex:
        error('handle', str(ex))
Пример #10
0
def loop():
    try:
        packet = lora.recv()
        if not packet: return
        info('loop', 'recv packet {}'.format(lora.packet_str(packet)))

        base_name = '{}_'.format(get_channel())
        data = []
        op = packet[0]
        size = len(packet)
        if op == config.OP_ACK:
            data.append({'bn': base_name, 'n': 'Flag', 'u': 'Flag', 'v': packet[9]})
            data.append({'n': 'Lock', 'u': 'Lock', 'v': packet[10]})
            data.append({'n': 'Package', 'u': 'Package', 'v': packet[11]})
            data.append({'n': 'Power', 'u': 'Power', 'v': packet[12]})
            data.append({'n': 'Error', 'u': 'Error', 'v': packet[13]})

            box_checksum = packet[1:9]
            info('loop', 'box checksum {}'.format(lora.packet_str(box_checksum)))
        elif op == config.OP_CONNECT:
            data.append({'bn': base_name, 'n': 'Flag', 'u': 'Flag', 'v': packet[0]})
            data.append({'n': 'Lock', 'u': 'Lock', 'v': packet[1]})
            data.append({'n': 'Package', 'u': 'Package', 'v': packet[2]})
            data.append({'n': 'Power', 'u': 'Power', 'v': packet[3]})
            data.append({'n': 'Error', 'u': 'Error', 'v': packet[4]})

            box_key = packet[5:]
            info('loop', 'box key {}'.format(lora.packet_str(box_key)))
        elif op == config.OP_STATUS:
            data.append({'bn': base_name, 'n': 'Flag', 'u': 'Flag', 'v': packet[9]})
            data.append({'n': 'Lock', 'u': 'Lock', 'v': packet[10]})
            data.append({'n': 'Package', 'u': 'Package', 'v': packet[11]})
            data.append({'n': 'Power', 'u': 'Power', 'v': packet[12]})

            box_checksum = packet[1:9]
            info('loop', 'box checksum {}'.format(lora.packet_str(box_checksum)))
        else:
            raise Exception('invalid OP packet {}'.format(op))

        if len(data) > 1:
            info('send', 'ACK')
            packet = bytearray(config.OP_ACK_SIZE)
            packet[0] = config.OP_ACK
            packet[1:9] = crypto.get_checksum(packet)
            packet[9] = 1
            packet[10] = 1
            packet[11] = 1
            packet[12] = 100
            packet[13] = config.E_OK

            lora.send(packet)
            info('send', 'ACK {}'.format(lora.packet_str(packet)))

            msg = Message(get_topic(), data)
            info('loop', 'message {}'.format(msg))
            publish(msg)
    except Exception as ex:
        error('loop', str(ex))
    finally:
        time.sleep(0)
Пример #11
0
 def unzip(self):
     cmdstring = 'unzip -qo %s -d %s' % (self.sourceipa, self.extracted)
     logger.info(cmdstring)
     shell.execute(cmdstring)
Пример #12
0
 def unlock(self):
     cmdstring = 'sudo security unlock-keychain -p "password"'
     logger.info(cmdstring)
     shell.execute(cmdstring, shell=True)
Пример #13
0
 def clean(self):
     logger.info('clean temp')
     shutil.rmtree(self.extracted)
Пример #14
0
 def zip(self):
     cmdstring = 'cd %s && ' % self.extracted
     cmdstring += 'zip -qry %s *' % (self.target)
     logger.info(cmdstring)
     shell.execute(cmdstring, shell=True)
Пример #15
0
 def signal_handler(sig, frame):
     info('main', 'sigint')
     controller.stop()
     time.sleep(1)
     print 'Goodbye.'
     sys.exit(0)