From d13143c1f3fa15a99777611199f850ac93733187 Mon Sep 17 00:00:00 2001 From: Ananias CARVALHO Date: Fri, 20 Sep 2024 12:14:28 +0200 Subject: [PATCH] feat: allow anonymous authentication --- README.md | 16 ++++++++++++++++ pyartifactory/models/auth.py | 1 + pyartifactory/objects/object.py | 16 ++++++++++------ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e38f161..8c2e3bd 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,9 @@ This library enables you to manage Artifactory resources such as users, groups, - [Install](#install) - [Usage](#usage) * [Authentication](#authentication) + + [Basic authentication](#basic-authentication) + + [Authentication with access token](#authentication-with-access-token) + + [Anonymous authentication](#anonymous-authentication) * [SSL Cert Verification Options](#ssl-cert-verification-options) * [Timeout option](#timeout-option) * [Admin objects](#admin-objects) @@ -69,11 +72,24 @@ pip install pyartifactory Since Artifactory 6.6.0 there is version 2 of the REST API for permission management, in case you have that version or higher, you need to pass api_version=2 to the constructor when you instantiate the class. +#### Basic authentication ```python from pyartifactory import Artifactory art = Artifactory(url="ARTIFACTORY_URL", auth=('USERNAME','PASSWORD_OR_API_KEY'), api_version=1) ``` +#### Authentication with access token +```python +from pyartifactory import Artifactory +art = Artifactory(url="ARTIFACTORY_URL", access_token="your-access-token") +``` + +#### Anonymous authentication +```python +from pyartifactory import Artifactory +art = Artifactory(url="ARTIFACTORY_URL", anonymous_auth=True) +``` + ### SSL Cert Verification Options Specify a local cert to use as client side certificate diff --git a/pyartifactory/models/auth.py b/pyartifactory/models/auth.py index 11c0264..f096863 100644 --- a/pyartifactory/models/auth.py +++ b/pyartifactory/models/auth.py @@ -14,6 +14,7 @@ class AuthModel(BaseModel): url: str auth: Tuple[str, SecretStr] access_token: Optional[str] = None + anonymous_auth: bool = False verify: Union[bool, str] = True cert: Optional[str] = None api_version: int = 1 diff --git a/pyartifactory/objects/object.py b/pyartifactory/objects/object.py index f830f4e..695f33d 100644 --- a/pyartifactory/objects/object.py +++ b/pyartifactory/objects/object.py @@ -19,6 +19,7 @@ def __init__(self, artifactory: AuthModel) -> None: self._artifactory.auth[1].get_secret_value(), ) self._access_token = self._artifactory.access_token + self._anonymous_auth = self._artifactory.anonymous_auth self._api_version = self._artifactory.api_version self._verify = self._artifactory.verify self._cert = self._artifactory.cert @@ -79,14 +80,17 @@ def _generic_http_method_request( :return: An HTTP response """ - if self._access_token is not None: - headers = kwargs.get("headers", {}) - headers["Authorization"] = f"Bearer {self._access_token}" - kwargs["headers"] = headers - + if self._anonymous_auth: auth = None else: - auth = self._auth + if self._access_token is not None: + headers = kwargs.get("headers", {}) + headers["Authorization"] = f"Bearer {self._access_token}" + kwargs["headers"] = headers + + auth = None + else: + auth = self._auth http_method = getattr(self.session, method) response: Response = http_method(