Пример #1
0
def submit(line):
    """
    Resubmit some requests, optionally with modified headers and cookies.

    Usage: submit reqids [-h] [-m] [-u] [-p] [-o REQID] [-c [COOKIES [COOKIES ...]]] [-d [HEADERS [HEADERS ...]]]
    """
    
    parser = argparse.ArgumentParser(prog="submit", usage=submit.__doc__)
    parser.add_argument('reqids')
    parser.add_argument('-m', '--inmem', action='store_true', help='Store resubmitted requests in memory without storing them in the data file')
    parser.add_argument('-u', '--unique', action='store_true', help='Only resubmit one request per endpoint (different URL parameters are different endpoints)')
    parser.add_argument('-p', '--uniquepath', action='store_true', help='Only resubmit one request per endpoint (ignoring URL parameters)')
    parser.add_argument('-c', '--cookies', nargs='*', help='Apply a cookie to requests before submitting')
    parser.add_argument('-d', '--headers', nargs='*', help='Apply a header to requests before submitting')
    parser.add_argument('-o', '--copycookies', help='Copy the cookies used in another request')
    args = parser.parse_args(shlex.split(line))

    headers = {}
    cookies = {}
    clear_cookies = False

    if args.headers:
        for h in args.headers:
            k, v = h.split('=', 1)
            headers[k] = v

    if args.copycookies:
        reqid = args.copycookies
        req = yield Request.load_request(reqid)
        clear_cookies = True
        for k, v in req.cookies.all_pairs():
            cookies[k] = v

    if args.cookies:
        for c in args.cookies:
            k, v = c.split('=', 1)
            cookies[k] = v

    if args.unique and args.uniquepath:
        raise PappyException('Both -u and -p cannot be given as arguments')

    newsession = Session(cookie_vals=cookies, header_vals=headers)
    
    reqs = yield load_reqlist(args.reqids)

    for req in reqs:
        if clear_cookies:
            req.cookies.clear()
        newsession.apply_req(req)

    conf_message = "You're about to submit %d requests, continue?" % len(reqs)
    if not confirm(conf_message):
        defer.returnValue(None)

    for r in reqs:
        r.tags.add('resubmitted')

    save = not args.inmem
    yield async_submit_requests(reqs, save=save, save_in_mem=args.inmem,
        unique_paths=args.uniquepath, unique_path_and_args=args.unique)
Пример #2
0
def test_session_mixed(req, rsp):
    s = Session(
        cookie_names=['session', 'state'],
        cookie_vals={
            'session': ResponseCookie('session=foo; secure; httponly; path=/')
        },
        header_vals={'auth': 'bar'},
    )

    s.apply_req(req)
    s.apply_rsp(rsp)
    assert req.cookies['session'] == 'foo'
    assert rsp.cookies['session'].key == 'session'
    assert rsp.cookies['session'].val == 'foo'
    assert rsp.cookies['session'].secure
    assert rsp.cookies['session'].http_only
    assert rsp.cookies['session'].path == '/'
    assert 'auth' not in rsp.headers

    r = Response()
    r.start_line = 'HTTP/1.1 200 OK'
    r.set_cookie(ResponseCookie('state=bazzers'))
    r.set_cookie(ResponseCookie('session=buzzers'))
    s.get_rsp(r)
    assert s.cookie_vals['session'].val == 'buzzers'
    assert s.cookie_vals['state'].val == 'bazzers'
Пример #3
0
def test_session_get_req(req):
    req.headers['BasicAuth'] = 'asdfasdf'
    req.headers['Host'] = 'www.myfavoritecolor.foobar'
    req.cookies['session'] = 'foobar'
    req.cookies['favorite_color'] = 'blue'

    s = Session()
    s.get_req(req, ['session'], ['BasicAuth'])
    assert s.cookies == ['session']
    assert s.headers == ['BasicAuth']
    assert s.cookie_vals['session'].val == 'foobar'
    assert s.header_vals['BasicAuth'] == 'asdfasdf'
    assert 'Host' not in s.headers
    assert 'favorite_color' not in s.cookies
Пример #4
0
def test_session_get_rsp(rsp):
    rsp.headers['BasicAuth'] = 'asdfasdf'
    rsp.headers['Host'] = 'www.myfavoritecolor.foobar'
    rsp.set_cookie(ResponseCookie('session=foobar; secure; path=/'))
    rsp.set_cookie(ResponseCookie('favorite_color=blue; secure; path=/'))

    s = Session()
    s.get_rsp(rsp, ['session'])
    assert s.cookies == ['session']
    assert s.headers == []
    assert s.cookie_vals['session'].key == 'session'
    assert s.cookie_vals['session'].val == 'foobar'
    assert s.cookie_vals['session'].path == '/'
    assert s.cookie_vals['session'].secure
Пример #5
0
def test_session_get_req(req):
    req.headers['BasicAuth'] = 'asdfasdf'
    req.headers['Host'] = 'www.myfavoritecolor.foobar'
    req.cookies['session'] = 'foobar'
    req.cookies['favorite_color'] = 'blue'

    s = Session()
    s.get_req(req, ['session'], ['BasicAuth'])
    assert s.cookies == ['session']
    assert s.headers == ['BasicAuth']
    assert s.cookie_vals['session'].val == 'foobar'
    assert s.header_vals['BasicAuth'] == 'asdfasdf'
    assert 'Host' not in s.headers
    assert 'favorite_color' not in s.cookies
Пример #6
0
def test_session_get_rsp(rsp):
    rsp.headers['BasicAuth'] = 'asdfasdf'
    rsp.headers['Host'] = 'www.myfavoritecolor.foobar'
    rsp.set_cookie(ResponseCookie('session=foobar; secure; path=/'))
    rsp.set_cookie(ResponseCookie('favorite_color=blue; secure; path=/'))

    s = Session()
    s.get_rsp(rsp, ['session'])
    assert s.cookies == ['session']
    assert s.headers == []
    assert s.cookie_vals['session'].key == 'session'
    assert s.cookie_vals['session'].val == 'foobar'
    assert s.cookie_vals['session'].path == '/'
    assert s.cookie_vals['session'].secure
Пример #7
0
def test_session_cookieobj_basic(req, rsp):
    s = Session(
        cookie_vals={'session':ResponseCookie('session=foo; secure; httponly; path=/')},
        header_vals={'auth':'bar'},
    )

    s.apply_req(req)
    s.apply_rsp(rsp)
    assert req.cookies['session'] == 'foo'
    assert rsp.cookies['session'].key == 'session'
    assert rsp.cookies['session'].val == 'foo'
    assert rsp.cookies['session'].secure
    assert rsp.cookies['session'].http_only
    assert rsp.cookies['session'].path == '/'
    assert req.headers['auth'] == 'bar'
    assert 'auth' not in rsp.headers
Пример #8
0
def test_session_basic(req, rsp):
    s = Session(
        cookie_vals={'session':'foo'},
        header_vals={'auth':'bar'},
    )

    assert 'session' not in req.cookies
    assert 'session' not in rsp.cookies
    assert 'auth' not in req.headers
    assert 'auth' not in rsp.headers
    s.apply_req(req)
    s.apply_rsp(rsp)
    assert req.cookies['session'] == 'foo'
    assert rsp.cookies['session'].cookie_str == 'session=foo'
    assert req.headers['auth'] == 'bar'
    assert 'auth' not in rsp.headers
Пример #9
0
def test_session_save_all(req, rsp):
    s = Session()
    rsp.set_cookie(ResponseCookie('state=bazzers'))
    rsp.set_cookie(ResponseCookie('session=buzzers'))
    s.save_rsp(rsp, save_all=True)

    assert s.cookies == ['state', 'session']

    assert not 'state' in req.cookies
    assert not 'session' in req.cookies
    s.apply_req(req)
    assert req.cookies['state'] == 'bazzers'
    assert req.cookies['session'] == 'buzzers'
Пример #10
0
def test_session_basic(req, rsp):
    s = Session(
        cookie_vals={'session': 'foo'},
        header_vals={'auth': 'bar'},
    )

    assert 'session' not in req.cookies
    assert 'session' not in rsp.cookies
    assert 'auth' not in req.headers
    assert 'auth' not in rsp.headers
    s.apply_req(req)
    s.apply_rsp(rsp)
    assert req.cookies['session'] == 'foo'
    assert rsp.cookies['session'].cookie_str == 'session=foo'
    assert req.headers['auth'] == 'bar'
    assert 'auth' not in rsp.headers
Пример #11
0
def test_session_cookieobj_basic(req, rsp):
    s = Session(
        cookie_vals={'session':ResponseCookie('session=foo; secure; httponly; path=/')},
        header_vals={'auth':'bar'},
    )

    s.apply_req(req)
    s.apply_rsp(rsp)
    assert req.cookies['session'] == 'foo'
    assert rsp.cookies['session'].key == 'session'
    assert rsp.cookies['session'].val == 'foo'
    assert rsp.cookies['session'].secure
    assert rsp.cookies['session'].http_only
    assert rsp.cookies['session'].path == '/'
    assert req.headers['auth'] == 'bar'
    assert 'auth' not in rsp.headers
Пример #12
0
def test_session_mixed(req, rsp):
    s = Session(
        cookie_names=['session', 'state'],
        cookie_vals={'session':ResponseCookie('session=foo; secure; httponly; path=/')},
        header_vals={'auth':'bar'},
    )

    s.apply_req(req)
    s.apply_rsp(rsp)
    assert req.cookies['session'] == 'foo'
    assert rsp.cookies['session'].key == 'session'
    assert rsp.cookies['session'].val == 'foo'
    assert rsp.cookies['session'].secure
    assert rsp.cookies['session'].http_only
    assert rsp.cookies['session'].path == '/'
    assert 'auth' not in rsp.headers

    r = Response()
    r.start_line = 'HTTP/1.1 200 OK'
    r.set_cookie(ResponseCookie('state=bazzers'))
    r.set_cookie(ResponseCookie('session=buzzers'))
    s.get_rsp(r)
    assert s.cookie_vals['session'].val == 'buzzers'
    assert s.cookie_vals['state'].val == 'bazzers'
Пример #13
0
def submit(line):
    """
    Resubmit some requests, optionally with modified headers and cookies.

    Usage: submit reqids [-h] [-m] [-u] [-p] [-c [COOKIES [COOKIES ...]]] [-d [HEADERS [HEADERS ...]]]
    """
    
    parser = argparse.ArgumentParser(prog="submit", usage=submit.__doc__)
    parser.add_argument('reqids')
    parser.add_argument('-m', '--inmem', action='store_true', help='Store resubmitted requests in memory without storing them in the data file')
    parser.add_argument('-u', '--unique', action='store_true', help='Only resubmit one request per endpoint (different URL parameters are different endpoints)')
    parser.add_argument('-p', '--uniquepath', action='store_true', help='Only resubmit one request per endpoint (ignoring URL parameters)')
    parser.add_argument('-c', '--cookies', nargs='*', help='Apply a cookie to requests before submitting')
    parser.add_argument('-d', '--headers', nargs='*', help='Apply a header to requests before submitting')
    args = parser.parse_args(shlex.split(line))

    headers = {}
    cookies = {}

    if args.headers:
        for h in args.headers:
            k, v = h.split('=', 1)
            headers[k] = v

    if args.cookies:
        for c in args.cookies:
            k, v = c.split('=', 1)
            cookies[k] = v

    if args.unique and args.uniquepath:
        raise PappyException('Both -u and -p cannot be given as arguments')

    newsession = Session(cookie_vals=cookies, header_vals=headers)
    
    reqs = yield load_reqlist(args.reqids)

    if args.unique or args.uniquepath:
        endpoints = set()
        new_reqs = []
        for r in reqs:
            if args.unique:
                s = r.url
            else:
                s = r.path

            if not s in endpoints:
                new_reqs.append(r.copy())
                endpoints.add(s)
        reqs = new_reqs
    else:
        reqs = [r.copy() for r in reqs]

    for req in reqs:
        newsession.apply_req(req)

    conf_message = "You're about to submit %d requests, continue?" % len(reqs)
    if not confirm(conf_message):
        defer.returnValue(None)

    for r in reqs:
        r.tags.add('resubmitted')

    if args.inmem:
        yield async_submit_requests(reqs)
        for req in reqs:
            add_to_history(req)
    else:
        yield async_submit_requests(reqs, save=True)
Пример #14
0
def submit(line):
    """
    Resubmit some requests, optionally with modified headers and cookies.

    Usage: submit reqids [-h] [-m] [-u] [-p] [-c [COOKIES [COOKIES ...]]] [-d [HEADERS [HEADERS ...]]]
    """

    parser = argparse.ArgumentParser(prog="submit", usage=submit.__doc__)
    parser.add_argument('reqids')
    parser.add_argument(
        '-m',
        '--inmem',
        action='store_true',
        help=
        'Store resubmitted requests in memory without storing them in the data file'
    )
    parser.add_argument(
        '-u',
        '--unique',
        action='store_true',
        help=
        'Only resubmit one request per endpoint (different URL parameters are different endpoints)'
    )
    parser.add_argument(
        '-p',
        '--uniquepath',
        action='store_true',
        help='Only resubmit one request per endpoint (ignoring URL parameters)'
    )
    parser.add_argument('-c',
                        '--cookies',
                        nargs='*',
                        help='Apply a cookie to requests before submitting')
    parser.add_argument('-d',
                        '--headers',
                        nargs='*',
                        help='Apply a header to requests before submitting')
    args = parser.parse_args(shlex.split(line))

    headers = {}
    cookies = {}

    if args.headers:
        for h in args.headers:
            k, v = h.split('=', 1)
            headers[k] = v

    if args.cookies:
        for c in args.cookies:
            k, v = c.split('=', 1)
            cookies[k] = v

    if args.unique and args.uniquepath:
        raise PappyException('Both -u and -p cannot be given as arguments')

    newsession = Session(cookie_vals=cookies, header_vals=headers)

    reqs = yield load_reqlist(args.reqids)

    if args.unique or args.uniquepath:
        endpoints = set()
        new_reqs = []
        for r in reqs:
            if args.unique:
                s = r.url
            else:
                s = r.path

            if not s in endpoints:
                new_reqs.append(r.copy())
                endpoints.add(s)
        reqs = new_reqs
    else:
        reqs = [r.copy() for r in reqs]

    for req in reqs:
        newsession.apply_req(req)

    conf_message = "You're about to submit %d requests, continue?" % len(reqs)
    if not confirm(conf_message):
        defer.returnValue(None)

    for r in reqs:
        r.tags.add('resubmitted')

    if args.inmem:
        yield async_submit_requests(reqs)
        for req in reqs:
            add_to_history(req)
    else:
        yield async_submit_requests(reqs, save=True)
Пример #15
0
def submit(line):
    """
    Resubmit some requests, optionally with modified headers and cookies.

    Usage: submit reqids [-h] [-m] [-u] [-p] [-o REQID] [-c [COOKIES [COOKIES ...]]] [-d [HEADERS [HEADERS ...]]]
    """

    parser = argparse.ArgumentParser(prog="submit", usage=submit.__doc__)
    parser.add_argument('reqids')
    parser.add_argument(
        '-m',
        '--inmem',
        action='store_true',
        help=
        'Store resubmitted requests in memory without storing them in the data file'
    )
    parser.add_argument(
        '-u',
        '--unique',
        action='store_true',
        help=
        'Only resubmit one request per endpoint (different URL parameters are different endpoints)'
    )
    parser.add_argument(
        '-p',
        '--uniquepath',
        action='store_true',
        help='Only resubmit one request per endpoint (ignoring URL parameters)'
    )
    parser.add_argument('-c',
                        '--cookies',
                        nargs='*',
                        help='Apply a cookie to requests before submitting')
    parser.add_argument('-d',
                        '--headers',
                        nargs='*',
                        help='Apply a header to requests before submitting')
    parser.add_argument('-o',
                        '--copycookies',
                        help='Copy the cookies used in another request')
    args = parser.parse_args(shlex.split(line))

    headers = {}
    cookies = {}
    clear_cookies = False

    if args.headers:
        for h in args.headers:
            k, v = h.split('=', 1)
            headers[k] = v

    if args.copycookies:
        reqid = args.copycookies
        req = yield Request.load_request(reqid)
        clear_cookies = True
        for k, v in req.cookies.all_pairs():
            cookies[k] = v

    if args.cookies:
        for c in args.cookies:
            k, v = c.split('=', 1)
            cookies[k] = v

    if args.unique and args.uniquepath:
        raise PappyException('Both -u and -p cannot be given as arguments')

    newsession = Session(cookie_vals=cookies, header_vals=headers)

    reqs = yield load_reqlist(args.reqids)

    for req in reqs:
        if clear_cookies:
            req.cookies.clear()
        newsession.apply_req(req)

    conf_message = "You're about to submit %d requests, continue?" % len(reqs)
    if not confirm(conf_message):
        defer.returnValue(None)

    for r in reqs:
        r.tags.add('resubmitted')

    save = not args.inmem
    yield async_submit_requests(reqs,
                                save=save,
                                save_in_mem=args.inmem,
                                unique_paths=args.uniquepath,
                                unique_path_and_args=args.unique)