[~] Refactor
This commit is contained in:
		
							parent
							
								
									0f1f526078
								
							
						
					
					
						commit
						88e0c6f5ee
					
				@ -565,6 +565,12 @@ def http_server(argv):
 | 
			
		||||
def pass_ssh_osx(argv):
 | 
			
		||||
    assert isinstance(argv, list) and all([isinstance(o, str) for o in argv])
 | 
			
		||||
    parser = optparse.OptionParser()
 | 
			
		||||
    parser.add_option(
 | 
			
		||||
        '--list',
 | 
			
		||||
        dest='list',
 | 
			
		||||
        default=False,
 | 
			
		||||
        action='store_true',
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_option(
 | 
			
		||||
        '--pass_option',
 | 
			
		||||
        dest='pass_option',
 | 
			
		||||
@ -591,47 +597,53 @@ def pass_ssh_osx(argv):
 | 
			
		||||
    t1 = options.pass_option
 | 
			
		||||
    assert len(t1) > 0
 | 
			
		||||
 | 
			
		||||
    print(
 | 
			
		||||
        'select on of pass names\n%s' % '\n'.join([
 | 
			
		||||
            '%d: %s' % (k, v)
 | 
			
		||||
            for k, v in enumerate(t1)
 | 
			
		||||
        ])
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    while True:
 | 
			
		||||
        try:
 | 
			
		||||
            t2 = input()
 | 
			
		||||
            t3 = int(t2)
 | 
			
		||||
            assert t3 >= 0 and t3 < len(t1)
 | 
			
		||||
            break
 | 
			
		||||
        except:
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
    reset_gpg_agent = r'''
 | 
			
		||||
        gpgconf --kill gpg-agent;
 | 
			
		||||
        gpgconf --reload gpg-agent;
 | 
			
		||||
        gpgconf --kill gpg-agent && \
 | 
			
		||||
        gpgconf --reload gpg-agent
 | 
			
		||||
    '''
 | 
			
		||||
 | 
			
		||||
    if not options.list:
 | 
			
		||||
        print(
 | 
			
		||||
            'select on of pass names\n%s' % '\n'.join([
 | 
			
		||||
                '%d: %s' % (k, v)
 | 
			
		||||
                for k, v in enumerate(t1)
 | 
			
		||||
            ])
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        while True:
 | 
			
		||||
            try:
 | 
			
		||||
                t2 = input()
 | 
			
		||||
                t3 = int(t2)
 | 
			
		||||
                assert t3 >= 0 and t3 < len(t1)
 | 
			
		||||
                break
 | 
			
		||||
            except:
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
        command = r'''
 | 
			
		||||
            %s
 | 
			
		||||
            gpg \
 | 
			
		||||
                --pinentry-mode=ask \
 | 
			
		||||
                -q -u $(cat ~/.password-store/.gpg-id) \
 | 
			
		||||
                --decrypt \
 | 
			
		||||
                ~/.password-store/%s.gpg && \
 | 
			
		||||
            echo -n '['$?']' && \
 | 
			
		||||
            %s
 | 
			
		||||
        ''' % (
 | 
			
		||||
            reset_gpg_agent,
 | 
			
		||||
            t1[t3],
 | 
			
		||||
            reset_gpg_agent,
 | 
			
		||||
        )
 | 
			
		||||
    else:
 | 
			
		||||
        command = 'pass list | less -R'
 | 
			
		||||
 | 
			
		||||
    ssh_command = [
 | 
			
		||||
        'ssh', '-C',
 | 
			
		||||
        '-o', 'ConnectTimeout 10',
 | 
			
		||||
        '-o', 'ServerAliveInterval 1',
 | 
			
		||||
        *args,
 | 
			
		||||
        '-t',
 | 
			
		||||
        r'''
 | 
			
		||||
            %s
 | 
			
		||||
            gpg \
 | 
			
		||||
                --pinentry-mode=ask \
 | 
			
		||||
                -q -u $(cat ~/.password-store/.gpg-id) \
 | 
			
		||||
                --decrypt \
 | 
			
		||||
                ~/.password-store/%s.gpg;
 | 
			
		||||
            echo -n '['$?']';
 | 
			
		||||
            %s
 | 
			
		||||
        ''' % (
 | 
			
		||||
            reset_gpg_agent,
 | 
			
		||||
            t1[t3],
 | 
			
		||||
            reset_gpg_agent,
 | 
			
		||||
        ),
 | 
			
		||||
        command,
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    if options.debug:
 | 
			
		||||
@ -641,100 +653,107 @@ def pass_ssh_osx(argv):
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    with subprocess.Popen(
 | 
			
		||||
        ssh_command,
 | 
			
		||||
        stdout=subprocess.PIPE,
 | 
			
		||||
        stderr=subprocess.PIPE
 | 
			
		||||
    ) as p:
 | 
			
		||||
        password = None
 | 
			
		||||
        last_chunk = None
 | 
			
		||||
    if options.list:
 | 
			
		||||
        subprocess.check_call(ssh_command)
 | 
			
		||||
    else:
 | 
			
		||||
        def cliboard_set(text):
 | 
			
		||||
            with subprocess.Popen([
 | 
			
		||||
                'pbcopy',
 | 
			
		||||
            ], stdin=subprocess.PIPE) as p:
 | 
			
		||||
                p.stdin.write(text.encode('utf-8'))
 | 
			
		||||
                p.stdin.flush()
 | 
			
		||||
                p.stdin.close()
 | 
			
		||||
                p.wait(1)
 | 
			
		||||
                assert p.poll() == 0
 | 
			
		||||
 | 
			
		||||
        hide_password = False
 | 
			
		||||
        pinentry_delimeter = b'\x1b>'
 | 
			
		||||
        with subprocess.Popen(
 | 
			
		||||
            ssh_command,
 | 
			
		||||
            stdout=subprocess.PIPE,
 | 
			
		||||
            stderr=subprocess.PIPE
 | 
			
		||||
        ) as p:
 | 
			
		||||
            password = None
 | 
			
		||||
            last_chunk = None
 | 
			
		||||
 | 
			
		||||
        def transform_callback(data):
 | 
			
		||||
            nonlocal hide_password
 | 
			
		||||
            nonlocal pinentry_delimeter
 | 
			
		||||
            hide_password = False
 | 
			
		||||
            pinentry_delimeter = b'\x1b>'
 | 
			
		||||
 | 
			
		||||
            data2 = None
 | 
			
		||||
            def transform_callback(data):
 | 
			
		||||
                nonlocal hide_password
 | 
			
		||||
                nonlocal pinentry_delimeter
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            if pinentry_delimeter in data:
 | 
			
		||||
                hide_password = True
 | 
			
		||||
                pos = data.rfind(pinentry_delimeter)
 | 
			
		||||
                if pos == -1:
 | 
			
		||||
                    data2 = data
 | 
			
		||||
                else:
 | 
			
		||||
                    data2 = data[:pos + len(pinentry_delimeter)]
 | 
			
		||||
            elif data == b'':
 | 
			
		||||
                #return b'\r\n'
 | 
			
		||||
                return b''
 | 
			
		||||
            elif hide_password:
 | 
			
		||||
                data2 = b''
 | 
			
		||||
            else:
 | 
			
		||||
                data2 = None
 | 
			
		||||
 | 
			
		||||
            return data2
 | 
			
		||||
 | 
			
		||||
        for chunk in intercept_output(
 | 
			
		||||
            current_subprocess=p,
 | 
			
		||||
            return_aggregated=True,
 | 
			
		||||
            transform_callback=transform_callback,
 | 
			
		||||
        ):
 | 
			
		||||
            if chunk['aggregated']:
 | 
			
		||||
                last_chunk = chunk
 | 
			
		||||
                break
 | 
			
		||||
                if pinentry_delimeter in data:
 | 
			
		||||
                    hide_password = True
 | 
			
		||||
                    pos = data.rfind(pinentry_delimeter)
 | 
			
		||||
                    if pos == -1:
 | 
			
		||||
                        data2 = data
 | 
			
		||||
                    else:
 | 
			
		||||
                        data2 = data[:pos + len(pinentry_delimeter)]
 | 
			
		||||
                elif data == b'':
 | 
			
		||||
                    #return b'\r\n'
 | 
			
		||||
                    return b''
 | 
			
		||||
                elif hide_password:
 | 
			
		||||
                    data2 = b''
 | 
			
		||||
                else:
 | 
			
		||||
                    data2 = None
 | 
			
		||||
 | 
			
		||||
        assert not last_chunk is None
 | 
			
		||||
        assert last_chunk['returncode'] == 0
 | 
			
		||||
        if options.debug:
 | 
			
		||||
            pprint.pprint(last_chunk['data'])
 | 
			
		||||
                return data2
 | 
			
		||||
 | 
			
		||||
        if last_chunk['data'].endswith('\r\n[0]'.encode('utf-8')) and \
 | 
			
		||||
            last_chunk['data'].rfind(pinentry_delimeter) != -1:
 | 
			
		||||
            last_line = last_chunk['data'].splitlines()[-2]
 | 
			
		||||
        else:
 | 
			
		||||
            raise RuntimeError(
 | 
			
		||||
                'gpg failure %s' % str(
 | 
			
		||||
                    last_chunk['data'][
 | 
			
		||||
                        max(last_chunk['data'].find(pinentry_delimeter), -128):
 | 
			
		||||
                    ]
 | 
			
		||||
            for chunk in intercept_output(
 | 
			
		||||
                current_subprocess=p,
 | 
			
		||||
                return_aggregated=True,
 | 
			
		||||
                transform_callback=transform_callback,
 | 
			
		||||
            ):
 | 
			
		||||
                if chunk['aggregated']:
 | 
			
		||||
                    last_chunk = chunk
 | 
			
		||||
                    break
 | 
			
		||||
 | 
			
		||||
            assert not last_chunk is None
 | 
			
		||||
            assert last_chunk['returncode'] == 0
 | 
			
		||||
 | 
			
		||||
            if options.debug:
 | 
			
		||||
                pprint.pprint(last_chunk['data'])
 | 
			
		||||
 | 
			
		||||
            if last_chunk['data'].endswith('\r\n[0]'.encode('utf-8')) and \
 | 
			
		||||
                last_chunk['data'].rfind(pinentry_delimeter) != -1:
 | 
			
		||||
                last_line = last_chunk['data'].splitlines()[-2]
 | 
			
		||||
            else:
 | 
			
		||||
                raise RuntimeError(
 | 
			
		||||
                    'gpg failure %s' % str(
 | 
			
		||||
                        last_chunk['data'][
 | 
			
		||||
                            max(last_chunk['data'].find(pinentry_delimeter), -128):
 | 
			
		||||
                        ]
 | 
			
		||||
                    )
 | 
			
		||||
                )
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        pos2 = last_line.rfind(pinentry_delimeter)
 | 
			
		||||
        if pos2 == -1:
 | 
			
		||||
            last_line2 = last_line
 | 
			
		||||
        else:
 | 
			
		||||
            last_line2 = last_line[pos2 + 1:]
 | 
			
		||||
        password = last_line2.decode('utf-8').rstrip('\r\n')
 | 
			
		||||
        assert not password is None
 | 
			
		||||
            pos2 = last_line.rfind(pinentry_delimeter)
 | 
			
		||||
            if pos2 == -1:
 | 
			
		||||
                last_line2 = last_line
 | 
			
		||||
            else:
 | 
			
		||||
                last_line2 = last_line[
 | 
			
		||||
                    pos2 + len(pinentry_delimeter):
 | 
			
		||||
                ]
 | 
			
		||||
 | 
			
		||||
    def cliboard_set(text):
 | 
			
		||||
        with subprocess.Popen([
 | 
			
		||||
            'pbcopy',
 | 
			
		||||
        ], stdin=subprocess.PIPE) as p:
 | 
			
		||||
            p.stdin.write(text.encode('utf-8'))
 | 
			
		||||
            p.stdin.flush()
 | 
			
		||||
            p.stdin.close()
 | 
			
		||||
            p.wait(1)
 | 
			
		||||
            assert p.poll() == 0
 | 
			
		||||
            password = last_line2.decode('utf-8').rstrip('\r\n')
 | 
			
		||||
            assert not password is None
 | 
			
		||||
 | 
			
		||||
    cliboard_set(password)
 | 
			
		||||
        cliboard_set(password)
 | 
			
		||||
 | 
			
		||||
    get_time = lambda : datetime.datetime.now().timestamp()
 | 
			
		||||
    start = get_time()
 | 
			
		||||
    while True:
 | 
			
		||||
        cur = get_time()
 | 
			
		||||
        remains = 10 - (cur - start)
 | 
			
		||||
        if remains <= 1e-8:
 | 
			
		||||
            break
 | 
			
		||||
        else:
 | 
			
		||||
            print('\r%5.2fs remains' % remains, end='')
 | 
			
		||||
        time.sleep(0.1)
 | 
			
		||||
        get_time = lambda : datetime.datetime.now().timestamp()
 | 
			
		||||
        start = get_time()
 | 
			
		||||
        while True:
 | 
			
		||||
            cur = get_time()
 | 
			
		||||
            remains = 10 - (cur - start)
 | 
			
		||||
            if remains <= 1e-8:
 | 
			
		||||
                break
 | 
			
		||||
            else:
 | 
			
		||||
                print('\r%5.2fs remains' % remains, end='')
 | 
			
		||||
            time.sleep(0.1)
 | 
			
		||||
 | 
			
		||||
    cliboard_set('')
 | 
			
		||||
    print('\rcleared cliboard\n', end='')
 | 
			
		||||
        cliboard_set('')
 | 
			
		||||
        print('\rcleared cliboard\n', end='')
 | 
			
		||||
 | 
			
		||||
def player_v1(folder_url, item_id):
 | 
			
		||||
    import sys
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user