示例#1
0
def validate_auth_config(auth):
    if not keychain.has_auth_attr(auth, 'auth_type'):
        return False
    if not keychain.has_auth_attr(auth, 'auth_params'):
        return False

    return True
示例#2
0
def validate_auth_config(auth):
    if not keychain.has_auth_attr(auth, 'auth_params'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'token'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'local_endpoint'):
        return False

    return True
示例#3
0
def validate_auth_config(auth):
    if not keychain.has_auth_attr(auth, 'auth_type'):
        return False
    if not keychain.has_auth_attr(auth, 'auth_params'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'transfer_token'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'local_endpoint'):
        return False

    return True
示例#4
0
文件: fetch_http.py 项目: stain/bdbag
def validate_auth_config(auth):
    if not keychain.has_auth_attr(auth, 'auth_uri'):
        return False
    if not keychain.has_auth_attr(auth, 'auth_type'):
        return False
    if not keychain.has_auth_attr(auth, 'auth_method'):
        return False
    if not keychain.has_auth_attr(auth, 'auth_params'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'username'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'password'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'username_field'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'password_field'):
        return False

    return True
示例#5
0
def validate_auth_config(auth):
    if not keychain.has_auth_attr(auth, 'auth_uri'):
        return False
    if not keychain.has_auth_attr(auth, 'auth_type'):
        return False
    if not keychain.has_auth_attr(auth, 'auth_method'):
        return False
    if not keychain.has_auth_attr(auth, 'auth_params'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'username'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'password'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'username_field'):
        return False
    if not keychain.has_auth_attr(auth.auth_params, 'password_field'):
        return False

    return True
示例#6
0
def get_session(url, auth_config):

    session = None
    response = None

    for auth in list((entry for entry in auth_config if hasattr(entry, 'uri') and (entry.uri.lower() in url.lower()))):

        try:
            if not validate_auth_config(auth):
                continue

            if auth.uri in SESSIONS:
                session = SESSIONS[auth.uri]
                break
            else:
                session = get_new_session()

            if auth.auth_type == 'cookie':
                if auth.auth_params and hasattr(auth.auth_params, 'cookies'):
                    cookies = auth.auth_params.cookies
                    for cookie in cookies:
                        name, value = cookie.split('=', 1)
                        session.cookies.set(name, value, domain=urlsplit(auth.uri).hostname, path='/')
                    SESSIONS[auth.uri] = session
                    break

            # if we get here the assumption is that the auth_type is either http-basic or http-form
            auth_uri = auth.uri
            if keychain.has_auth_attr(auth, 'auth_uri'):
                auth_uri = auth.auth_uri

            if not (keychain.has_auth_attr(auth.auth_params, 'username') and
                    keychain.has_auth_attr(auth.auth_params, 'password')):
                logging.warning(
                    "Missing required parameters [username, password] for auth_type [%s] for keychain entry [%s]" %
                    (auth.auth_type, auth.uri))
                continue

            if auth.auth_type == 'http-basic':
                session.auth = (auth.auth_params.username, auth.auth_params.password)
                auth_method = "post"
                if keychain.has_auth_attr(auth.auth_params, 'auth_method'):
                    auth_method = auth.auth_params.auth_method.lower()
                if auth_method == 'post':
                    response = session.post(auth_uri, auth=session.auth)
                elif auth_method == 'get':
                    response = session.get(auth_uri, auth=session.auth)
                else:
                    logging.warning("Unsupported auth_method [%s] for auth_type [%s] for keychain entry [%s]" %
                                    (auth_method, auth.auth_type, auth.uri))
            elif auth.auth_type == 'http-form':
                response = session.post(auth_uri,
                                        {auth.auth_params.username_field or "username": auth.auth_params.username,
                                         auth.auth_params.password_field or "password": auth.auth_params.password})
            if response.status_code > 203:
                logger.warning(
                    'Authentication failed with Status Code: %s %s\n' % (response.status_code, response.text))
            else:
                logger.info("Session established: %s", auth.uri)
                SESSIONS[auth.uri] = session
                break

        except Exception as e:
            logger.warning("Unhandled exception during HTTP(S) authentication: %s" % get_typed_exception(e))

    if not session:
        url_parts = urlsplit(url)
        base_url = str("%s://%s" % (url_parts.scheme, url_parts.netloc))
        session = SESSIONS.get(base_url, None)
        if not session:
            session = get_new_session()
            SESSIONS[base_url] = session

    return session