Beispiel #1
0
    parser = argparse.ArgumentParser()
    parser.add_argument('-y', dest='yaml_flows')
    parser.add_argument('-k', dest="insecure", action='store_true')
    parser.add_argument('-l', dest="log_name")
    parser.add_argument('-t', dest="test_id")
    parser.add_argument('-p', dest="profile")
    parser.add_argument('-i', dest="id")
    parser.add_argument('-g', dest="group")
    parser.add_argument('-x', dest='exit', action='store_true')
    parser.add_argument(dest="config")
    cargs = parser.parse_args()

    cls_factories = {'': oper.factory}
    func_factory = func.factory
    FLOWS = parse_yaml_conf(cargs.yaml_flows, cls_factories, func_factory)

    CONF = importlib.import_module(cargs.config)

    if cargs.log_name:
        setup_logger(logger, cargs.log_name)
    else:
        setup_logger(logger)

    # Add own keys for signing/encrypting JWTs
    jwks, keyjar, kidd = build_keyjar(CONF.KEYS)

    # export JWKS
    p = urlparse(CONF.KEY_EXPORT_URL)
    f = open("." + p.path, "w")
    f.write(json.dumps(jwks))
    args = parser.parse_args()

    session_opts = {
        'session.type': 'memory',
        'session.cookie_expires': True,
        'session.auto': True,
        # 'session.key': "{}.beaker.session.id".format(
        #     urlparse(_base).netloc.replace(":", "."))
    }

    sys.path.insert(0, ".")
    config = importlib.import_module(args.config)

    fdef = {'Flows': {}, 'Order': [], 'Desc': {}}
    for flow_def in args.yaml_flow:
        spec = parse_yaml_conf(flow_def, config.TOOL_ARGS['cls_factories'],
                               config.TOOL_ARGS['func_factory'])
        fdef['Flows'].update(spec['Flows'])
        fdef['Desc'].update(spec['Desc'])
        fdef['Order'].extend(spec['Order'])

    # Filter based on profile
    keep = []
    for key, val in fdef['Flows'].items():
        for p in args.profile:
            if p in val['profiles']:
                keep.append(key)

    for key in list(fdef['Flows'].keys()):
        if key not in keep:
            del fdef['Flows'][key]
    args = parser.parse_args()

    session_opts = {
        'session.type': 'memory',
        'session.cookie_expires': True,
        'session.auto': True,
        # 'session.key': "{}.beaker.session.id".format(
        #     urlparse(_base).netloc.replace(":", "."))
    }

    sys.path.insert(0, ".")
    config = importlib.import_module(args.config)

    fdef = {'Flows': {}, 'Order': [], 'Desc': {}}
    for flow_def in args.yaml_flow:
        spec = parse_yaml_conf(flow_def, config.TOOL_ARGS['cls_factories'],
                               config.TOOL_ARGS['func_factory'])
        fdef['Flows'].update(spec['Flows'])
        fdef['Desc'].update(spec['Desc'])
        fdef['Order'].extend(spec['Order'])

    # Filter based on profile
    keep = []
    for key, val in fdef['Flows'].items():
        for p in args.profile:
            if p in val['profiles']:
                keep.append(key)

    for key in list(fdef['Flows'].keys()):
        if key not in keep:
            del fdef['Flows'][key]
Beispiel #4
0
    from oidctest import func
    from oic.oic.message import factory as oic_message_factory

    parser = argparse.ArgumentParser()
    parser.add_argument("-f", dest="flows")
    parser.add_argument("-l", dest="log_name")
    parser.add_argument("-p", dest="profile")
    parser.add_argument("-t", dest="testid")
    parser.add_argument(dest="config")
    cargs = parser.parse_args()

    fdef = {"Flows": {}, "Order": [], "Desc": []}
    cls_factories = {"": oper.factory}
    func_factory = func.factory

    spec = parse_yaml_conf(cargs.flows, cls_factories, func_factory)
    fdef["Flows"].update(spec["Flows"])
    for param in ["Order", "Desc"]:
        try:
            fdef[param].extend(spec[param])
        except KeyError:
            pass

    CONF = importlib.import_module(cargs.config)

    if cargs.log_name:
        setup_logger(logger, cargs.log_name)
    else:
        setup_logger(logger)

    # Add own keys for signing/encrypting JWTs
Beispiel #5
0
    from oidctest import func
    from oic.oic.message import factory as oic_message_factory

    parser = argparse.ArgumentParser()
    parser.add_argument('-f', dest='flows')
    parser.add_argument('-l', dest="log_name")
    parser.add_argument('-p', dest="profile")
    parser.add_argument('-t', dest="testid")
    parser.add_argument(dest="config")
    cargs = parser.parse_args()

    fdef = {'Flows': {}, 'Order': [], 'Desc': []}
    cls_factories = {'': oper.factory}
    func_factory = func.factory

    spec = parse_yaml_conf(cargs.flows, cls_factories, func_factory)
    fdef['Flows'].update(spec['Flows'])
    for param in ['Order', 'Desc']:
        try:
            fdef[param].extend(spec[param])
        except KeyError:
            pass

    CONF = importlib.import_module(cargs.config)

    if cargs.log_name:
        setup_logger(logger, cargs.log_name)
    else:
        setup_logger(logger)

    # Add own keys for signing/encrypting JWTs
Beispiel #6
0
def construct_app_args(args, oper, func, default_profiles):
    """

    :param args: Command arguments, argparse instance
    :param oper: Operations module
    :param func: Functions module
    :param default_profiles: The default profiles module
    :return: Application arguments
    """
    sys.path.insert(0, ".")
    CONF = importlib.import_module(args.config)

    #setup_logging("%s/rp_%s.log" % (SERVER_LOG_FOLDER, CONF.PORT), logger)

    fdef = {'Flows': {}, 'Order': [], 'Desc': {}}
    cls_factories = {'': oper.factory}
    func_factory = func.factory

    for flow_def in args.flows:
        spec = parse_yaml_conf(flow_def, cls_factories, func_factory)
        fdef['Flows'].update(spec['Flows'])
        fdef['Desc'].update(spec['Desc'])
        fdef['Order'].extend(spec['Order'])

    if args.profiles:
        profiles = importlib.import_module(args.profiles)
    else:
        profiles = default_profiles

    try:
        if args.operations:
            operations = importlib.import_module(args.operations)
        else:
            operations = oper
    except AttributeError:
        operations = oper

    # Add own keys for signing/encrypting JWTs
    jwks, keyjar, kidd = build_keyjar(CONF.KEYS)

    try:
        if args.staticdir:
            _sdir = args.staticdir
        else:
            _sdir = 'static'
    except AttributeError:
        _sdir = 'static'

    # If this instance is behind a reverse proxy or on its own
    if CONF.BASE.endswith('/'):
        CONF.BASE = CONF.BASE[:-1]
    if args.path2port:
        ppmap = read_path2port_map(args.path2port)
        _path = ppmap[str(CONF.PORT)]
        if args.xport:
            _port = CONF.PORT
            _base = '{}:{}/{}/'.format(CONF.BASE, str(CONF.PORT), _path)
        else:
            _base = '{}/{}/'.format(CONF.BASE, _path)
            if args.tls:
                _port = 443
            else:
                _port = 80
    else:
        _port = CONF.PORT
        if _port not in [443, 80]:
            _base = '{}:{}'.format(CONF.BASE, _port)
        else:
            _base = CONF.BASE
        _path = ''

    # -------- JWKS ---------------

    if args.path2port:
        jwks_uri = "{}{}/jwks_{}.json".format(_base, _sdir, _port)
        f = open('{}/jwks_{}.json'.format(_sdir, _port), "w")
    elif _port not in [443, 80]:
        jwks_uri = "{}:{}/{}/jwks_{}.json".format(CONF.BASE, _port, _sdir,
                                                  _port)
        f = open('{}/jwks_{}.json'.format(_sdir, _port), "w")
    else:
        jwks_uri = "{}/{}/jwks.json".format(CONF.BASE, _sdir)
        f = open('{}/jwks.json'.format(_sdir), "w")
    f.write(json.dumps(jwks))
    f.close()

    # -------- MAKO setup -----------
    try:
        if args.makodir:
            _dir = args.makodir
            if not _dir.endswith("/"):
                _dir += "/"
        else:
            _dir = "./"
    except AttributeError:
        _dir = './'

    LOOKUP = TemplateLookup(directories=[_dir + 'templates', _dir + 'htdocs'],
                            module_directory=_dir + 'modules',
                            input_encoding='utf-8',
                            output_encoding='utf-8')

    _client_info = CONF.CLIENT

    # Now when the basci URL for the RP is constructed update the
    # redirect_uris and the post_logout_redirect_uris
    try:
        ri = _client_info['registration_info']
    except KeyError:
        pass
    else:
        ri['redirect_uris'] = [r.format(_base) for r in ri['redirect_uris']]
        try:
            ri['post_logout_redirect_uris'] = [r.format(_base) for r in
                                               ri['post_logout_redirect_uris']]
        except KeyError:
            pass

    _base += '/'
    _client_info.update(
        {"base_url": _base, 'client_id': _base, "kid": kidd, "keyjar": keyjar,
         "jwks_uri": jwks_uri}
    )

    if args.insecure:
        _client_info['verify_ssl'] = False

    # Test profile either as a command line argument or if not that
    # from the configuration file
    if args.profile:
        _profile = args.profile
    else:
        _profile = CONF.TOOL['profile']

    # Application arguments
    app_args = {
        "flows": fdef['Flows'], "conf": CONF,
        "client_info": _client_info, "order": fdef['Order'],
        "profiles": profiles, "operation": operations, "cache": {},
        "profile": _profile, "lookup": LOOKUP, "desc": fdef['Desc'],
    }

    return _path, app_args
Beispiel #7
0
def test_flows():
    cls_factories = {'': oper.factory}
    func_factory = func.factory
    x = parse_yaml_conf('oidc_flows.yaml', cls_factories, func_factory)
    assert len(x['Flows']) == 103