सामग्री पर जाएं

के लिए संदर्भ ultralytics/hub/auth.py

नोट

यह फ़ाइल यहाँ उपलब्ध है https://github.com/ultralytics/ultralytics/बूँद/मुख्य/ultralytics/hub/auth.py। यदि आप कोई समस्या देखते हैं तो कृपया पुल अनुरोध का योगदान करके इसे ठीक करने में मदद करें 🛠️। 🙏 धन्यवाद !



ultralytics.hub.auth.Auth

एपीआई कुंजी हैंडलिंग, कुकी-आधारित प्रमाणीकरण और हेडर जनरेशन सहित प्रमाणीकरण प्रक्रियाओं का प्रबंधन करता है।

कक्षा प्रमाणीकरण के विभिन्न तरीकों का समर्थन करती है: 1. सीधे एपीआई कुंजी का उपयोग करना। 2. ब्राउज़र कुकीज़ का उपयोग करके प्रमाणीकरण (विशेष रूप से Google कोलाब में)। 3. उपयोगकर्ता को एपीआई कुंजी दर्ज करने के लिए प्रेरित करना।

विशेषताएँ:

नाम प्रकार विवरण: __________
id_token str or bool

पहचान सत्यापन के लिए उपयोग किया जाने वाला टोकन, जिसे गलत के रूप में प्रारंभ किया गया है.

api_key str or bool

प्रमाणीकरण के लिए API कुंजी, False के रूप में प्रारंभ की गई.

model_key bool

मॉडल कुंजी के लिए प्लेसहोल्डर, False के रूप में प्रारंभ किया गया.

में स्रोत कोड ultralytics/hub/auth.py
class Auth:
    """
    Manages authentication processes including API key handling, cookie-based authentication, and header generation.

    The class supports different methods of authentication:
    1. Directly using an API key.
    2. Authenticating using browser cookies (specifically in Google Colab).
    3. Prompting the user to enter an API key.

    Attributes:
        id_token (str or bool): Token used for identity verification, initialized as False.
        api_key (str or bool): API key for authentication, initialized as False.
        model_key (bool): Placeholder for model key, initialized as False.
    """

    id_token = api_key = model_key = False

    def __init__(self, api_key="", verbose=False):
        """
        Initialize the Auth class with an optional API key.

        Args:
            api_key (str, optional): May be an API key or a combination API key and model ID, i.e. key_id
        """
        # Split the input API key in case it contains a combined key_model and keep only the API key part
        api_key = api_key.split("_")[0]

        # Set API key attribute as value passed or SETTINGS API key if none passed
        self.api_key = api_key or SETTINGS.get("api_key", "")

        # If an API key is provided
        if self.api_key:
            # If the provided API key matches the API key in the SETTINGS
            if self.api_key == SETTINGS.get("api_key"):
                # Log that the user is already logged in
                if verbose:
                    LOGGER.info(f"{PREFIX}Authenticated ✅")
                return
            else:
                # Attempt to authenticate with the provided API key
                success = self.authenticate()
        # If the API key is not provided and the environment is a Google Colab notebook
        elif is_colab():
            # Attempt to authenticate using browser cookies
            success = self.auth_with_cookies()
        else:
            # Request an API key
            success = self.request_api_key()

        # Update SETTINGS with the new API key after successful authentication
        if success:
            SETTINGS.update({"api_key": self.api_key})
            # Log that the new login was successful
            if verbose:
                LOGGER.info(f"{PREFIX}New authentication successful ✅")
        elif verbose:
            LOGGER.info(f"{PREFIX}Retrieve API key from {API_KEY_URL}")

    def request_api_key(self, max_attempts=3):
        """
        Prompt the user to input their API key.

        Returns the model ID.
        """
        import getpass

        for attempts in range(max_attempts):
            LOGGER.info(f"{PREFIX}Login. Attempt {attempts + 1} of {max_attempts}")
            input_key = getpass.getpass(f"Enter API key from {API_KEY_URL} ")
            self.api_key = input_key.split("_")[0]  # remove model id if present
            if self.authenticate():
                return True
        raise ConnectionError(emojis(f"{PREFIX}Failed to authenticate ❌"))

    def authenticate(self) -> bool:
        """
        Attempt to authenticate with the server using either id_token or API key.

        Returns:
            (bool): True if authentication is successful, False otherwise.
        """
        try:
            if header := self.get_auth_header():
                r = requests.post(f"{HUB_API_ROOT}/v1/auth", headers=header)
                if not r.json().get("success", False):
                    raise ConnectionError("Unable to authenticate.")
                return True
            raise ConnectionError("User has not authenticated locally.")
        except ConnectionError:
            self.id_token = self.api_key = False  # reset invalid
            LOGGER.warning(f"{PREFIX}Invalid API key ⚠️")
            return False

    def auth_with_cookies(self) -> bool:
        """
        Attempt to fetch authentication via cookies and set id_token. User must be logged in to HUB and running in a
        supported browser.

        Returns:
            (bool): True if authentication is successful, False otherwise.
        """
        if not is_colab():
            return False  # Currently only works with Colab
        try:
            authn = request_with_credentials(f"{HUB_API_ROOT}/v1/auth/auto")
            if authn.get("success", False):
                self.id_token = authn.get("data", {}).get("idToken", None)
                self.authenticate()
                return True
            raise ConnectionError("Unable to fetch browser authentication details.")
        except ConnectionError:
            self.id_token = False  # reset invalid
            return False

    def get_auth_header(self):
        """
        Get the authentication header for making API requests.

        Returns:
            (dict): The authentication header if id_token or API key is set, None otherwise.
        """
        if self.id_token:
            return {"authorization": f"Bearer {self.id_token}"}
        elif self.api_key:
            return {"x-api-key": self.api_key}

__init__(api_key='', verbose=False)

वैकल्पिक एपीआई कुंजी के साथ प्रमाणीकरण वर्ग को प्रारंभ करें।

पैरामीटर:

नाम प्रकार विवरण: __________ चूक
api_key str

एपीआई कुंजी या संयोजन एपीआई कुंजी और मॉडल आईडी, i.e. key_id हो सकता है

''
में स्रोत कोड ultralytics/hub/auth.py
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 5354555657 58596061 626364 656667
def __init__(self, api_key="", verbose=False):
    """
    Initialize the Auth class with an optional API key.

    Args:
        api_key (str, optional): May be an API key or a combination API key and model ID, i.e. key_id
    """
    # Split the input API key in case it contains a combined key_model and keep only the API key part
    api_key = api_key.split("_")[0]

    # Set API key attribute as value passed or SETTINGS API key if none passed
    self.api_key = api_key or SETTINGS.get("api_key", "")

    # If an API key is provided
    if self.api_key:
        # If the provided API key matches the API key in the SETTINGS
        if self.api_key == SETTINGS.get("api_key"):
            # Log that the user is already logged in
            if verbose:
                LOGGER.info(f"{PREFIX}Authenticated ✅")
            return
        else:
            # Attempt to authenticate with the provided API key
            success = self.authenticate()
    # If the API key is not provided and the environment is a Google Colab notebook
    elif is_colab():
        # Attempt to authenticate using browser cookies
        success = self.auth_with_cookies()
    else:
        # Request an API key
        success = self.request_api_key()

    # Update SETTINGS with the new API key after successful authentication
    if success:
        SETTINGS.update({"api_key": self.api_key})
        # Log that the new login was successful
        if verbose:
            LOGGER.info(f"{PREFIX}New authentication successful ✅")
    elif verbose:
        LOGGER.info(f"{PREFIX}Retrieve API key from {API_KEY_URL}")

auth_with_cookies()

कुकीज़ के माध्यम से प्रमाणीकरण प्राप्त करने का प्रयास करें और id_token सेट करें। उपयोगकर्ता को लॉग इन होना चाहिए HUB और एक में चल रहा है समर्थित ब्राउज़र।

देता:

प्रकार विवरण: __________
bool

यदि प्रमाणीकरण सफल होता है तो सत्य, अन्यथा असत्य।

में स्रोत कोड ultralytics/hub/auth.py
104 105 106 107 108 109110 111 112 113 114 115 116 117 118 119120 121 122 123
def auth_with_cookies(self) -> bool:
    """
    Attempt to fetch authentication via cookies and set id_token. User must be logged in to HUB and running in a
    supported browser.

    Returns:
        (bool): True if authentication is successful, False otherwise.
    """
    if not is_colab():
        return False  # Currently only works with Colab
    try:
        authn = request_with_credentials(f"{HUB_API_ROOT}/v1/auth/auto")
        if authn.get("success", False):
            self.id_token = authn.get("data", {}).get("idToken", None)
            self.authenticate()
            return True
        raise ConnectionError("Unable to fetch browser authentication details.")
    except ConnectionError:
        self.id_token = False  # reset invalid
        return False

authenticate()

id_token या एपीआई कुंजी का उपयोग करके सर्वर के साथ प्रमाणित करने का प्रयास करें।

देता:

प्रकार विवरण: __________
bool

यदि प्रमाणीकरण सफल होता है तो सत्य, अन्यथा असत्य।

में स्रोत कोड ultralytics/hub/auth.py
def authenticate(self) -> bool:
    """
    Attempt to authenticate with the server using either id_token or API key.

    Returns:
        (bool): True if authentication is successful, False otherwise.
    """
    try:
        if header := self.get_auth_header():
            r = requests.post(f"{HUB_API_ROOT}/v1/auth", headers=header)
            if not r.json().get("success", False):
                raise ConnectionError("Unable to authenticate.")
            return True
        raise ConnectionError("User has not authenticated locally.")
    except ConnectionError:
        self.id_token = self.api_key = False  # reset invalid
        LOGGER.warning(f"{PREFIX}Invalid API key ⚠️")
        return False

get_auth_header()

एपीआई अनुरोध करने के लिए प्रमाणीकरण हेडर प्राप्त करें।

देता:

प्रकार विवरण: __________
dict

प्रमाणीकरण शीर्षलेख यदि id_token या एपीआई कुंजी सेट है, अन्यथा कोई नहीं।

में स्रोत कोड ultralytics/hub/auth.py
125 126 127 128 129 130 131 132 133 134135
def get_auth_header(self):
    """
    Get the authentication header for making API requests.

    Returns:
        (dict): The authentication header if id_token or API key is set, None otherwise.
    """
    if self.id_token:
        return {"authorization": f"Bearer {self.id_token}"}
    elif self.api_key:
        return {"x-api-key": self.api_key}

request_api_key(max_attempts=3)

उपयोगकर्ता को अपनी एपीआई कुंजी इनपुट करने के लिए संकेत दें।

मॉडल आईडी लौटाता है।

में स्रोत कोड ultralytics/hub/auth.py
def request_api_key(self, max_attempts=3):
    """
    Prompt the user to input their API key.

    Returns the model ID.
    """
    import getpass

    for attempts in range(max_attempts):
        LOGGER.info(f"{PREFIX}Login. Attempt {attempts + 1} of {max_attempts}")
        input_key = getpass.getpass(f"Enter API key from {API_KEY_URL} ")
        self.api_key = input_key.split("_")[0]  # remove model id if present
        if self.authenticate():
            return True
    raise ConnectionError(emojis(f"{PREFIX}Failed to authenticate ❌"))





2023-11-12 बनाया गया, अपडेट किया गया 2023-11-25
लेखक: ग्लेन-जोचर (3)