# - Martin Barisits <*****@*****.**>, 2019 # - Tomas Javurek <*****@*****.**>, 2020 # - Benedikt Ziemons <*****@*****.**>, 2021 from __future__ import print_function from six import string_types from six.moves.urllib.parse import urlparse from rucio.common import exception from rucio.common.extra import import_extras from rucio.core.rse import get_rse_attribute from rucio.rse.protocols.protocol import RSEProtocol from rucio.transfertool.globusLibrary import getTransferClient, send_delete_task EXTRA_MODULES = import_extras(['globus_sdk']) if EXTRA_MODULES['globus_sdk']: from globus_sdk import TransferAPIError # pylint: disable=import-error class GlobusRSEProtocol(RSEProtocol): """ This class is to support Globus as a Rucio RSE protocol. Inherits from abstract base class RSEProtocol.""" def __init__(self, protocol_attr, rse_settings, logger=None): """ Initializes the object with information about the referred RSE. :param props: Properties of the requested protocol """ super(GlobusRSEProtocol, self).__init__(protocol_attr, rse_settings, logger=logger) self.globus_endpoint_id = get_rse_attribute(key='globus_endpoint_id', rse_id=self.rse.get('id'))
from functools import wraps from inspect import isgeneratorfunction from retrying import retry from threading import Lock from os.path import basename from sqlalchemy import create_engine, event from sqlalchemy.exc import DatabaseError, DisconnectionError, OperationalError, TimeoutError from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, scoped_session from rucio.common.config import config_get from rucio.common.exception import RucioException, DatabaseException from rucio.common.extra import import_extras EXTRA_MODULES = import_extras(['MySQLdb', 'pymysql']) try: main_script = os.path.basename(sys.argv[0]) CURRENT_COMPONENT = main_script.split('-')[1] except: CURRENT_COMPONENT = None DATABASE_SECTION = 'database' try: if CURRENT_COMPONENT: sql_connection = config_get('%s-database' % CURRENT_COMPONENT, 'default', check_config_table=False).strip() if sql_connection and len(sql_connection): DATABASE_SECTION = '%s-database' % CURRENT_COMPONENT
from requests import Session, Response from requests.exceptions import ConnectionError from requests.status_codes import codes from six.moves.configparser import NoOptionError, NoSectionError from six.moves.urllib.parse import urlparse from rucio import version from rucio.common import exception from rucio.common.config import config_get, config_get_bool, config_get_int from rucio.common.exception import (CannotAuthenticate, ClientProtocolNotSupported, NoAuthInformation, MissingClientParameter, MissingModuleException, ServerConnectionException) from rucio.common.extra import import_extras from rucio.common.utils import build_url, get_tmp_dir, my_key_generator, parse_response, ssh_sign, setup_logger EXTRA_MODULES = import_extras(['requests_kerberos']) if EXTRA_MODULES['requests_kerberos']: from requests_kerberos import HTTPKerberosAuth # pylint: disable=import-error LOG = setup_logger(module_name=__name__) REGION = make_region(function_key_generator=my_key_generator).configure( 'dogpile.cache.memory', expiration_time=60, ) STATUS_CODES_TO_RETRY = [502, 503, 504] MAX_RETRY_BACK_OFF_SECONDS = 10
import zlib from enum import Enum from uuid import uuid4 as uuid from xml.etree import ElementTree import requests from six import string_types, text_type, binary_type, ensure_text, PY3 from six.moves import StringIO, zip_longest as izip_longest from six.moves.urllib.parse import urlparse, urlencode, quote, parse_qsl, urlunparse from rucio.common.config import config_get from rucio.common.exception import MissingModuleException, InvalidType, InputValidationError, MetalinkJsonParsingError, RucioException from rucio.common.extra import import_extras from rucio.common.types import InternalAccount, InternalScope EXTRA_MODULES = import_extras(['paramiko']) if EXTRA_MODULES['paramiko']: try: from paramiko import RSAKey except Exception: EXTRA_MODULES['paramiko'] = False # HTTP code dictionary. Not complete. Can be extended if needed. codes = { # Informational. 200: '200 OK', 201: '201 Created', 202: '202 Accepted', # Client Error.
long = int unicode = str if sys.version_info > (3, 2): import html def html_escape(s, quote=True): return html.escape(s, quote) else: import cgi def html_escape(s, quote=True): return cgi.escape(s, quote) # pylint: disable-msg=E1101 EXTRA_MODULES = import_extras(['onelogin']) if EXTRA_MODULES['onelogin']: from onelogin.saml2.auth import OneLogin_Saml2_Auth # pylint: disable=import-error SAML_SUPPORT = True else: SAML_SUPPORT = False # check if there is preferred server side config for webui authentication AUTH_TYPE = config_get('webui', 'auth_type', False, None) if AUTH_TYPE == 'oidc': try: AUTH_ISSUER_WEBUI = config_get('webui', 'auth_issuer') except: render_template( "problem.html",