|
Lines 560-565
class UCSHttpServer(_UCSServer):
Link Here
|
| 560 |
UCSHttpServer.password_manager.add_password(realm=None, uri=uri, user=self.baseurl.username, passwd=self.baseurl.password) |
560 |
UCSHttpServer.password_manager.add_password(realm=None, uri=uri, user=self.baseurl.username, passwd=self.baseurl.password) |
| 561 |
req = urllib.request.Request(uri) # noqa: S310 |
561 |
req = urllib.request.Request(uri) # noqa: S310 |
| 562 |
|
562 |
|
|
|
563 |
# Add preemptive authentication for JFrog Artifactory compatibility |
| 564 |
has_credentials = False |
| 565 |
# Try to get credentials from password manager first |
| 566 |
username_pm, password_pm = UCSHttpServer.password_manager.find_user_password(None, uri) |
| 567 |
|
| 568 |
credentials_to_use = None |
| 569 |
if username_pm and password_pm: |
| 570 |
credentials_to_use = f"{username_pm}:{password_pm}" |
| 571 |
self.log.debug('Using credentials from password manager for %s', uri) |
| 572 |
elif self.baseurl.username and self.baseurl.password: |
| 573 |
credentials_to_use = f"{self.baseurl.username}:{self.baseurl.password}" |
| 574 |
self.log.debug('Using credentials from baseurl for %s', uri) |
| 575 |
|
| 576 |
if credentials_to_use: |
| 577 |
has_credentials = True |
| 578 |
# Use ISO8859-1 encoding as per HTTP Basic Auth standard |
| 579 |
encoded_creds = base64.b64encode(credentials_to_use.encode('ISO8859-1')).decode('ASCII') |
| 580 |
req.add_header("Authorization", f"Basic {encoded_creds}") |
| 581 |
|
| 563 |
def get_host() -> str: |
582 |
def get_host() -> str: |
| 564 |
return req.host |
583 |
return req.host |
| 565 |
|
584 |
|
|
Lines 618-623
class UCSHttpServer(_UCSServer):
Link Here
|
| 618 |
self.log.debug("Failed %s %s: %s", req.get_method(), req.get_full_url(), res, exc_info=True) |
637 |
self.log.debug("Failed %s %s: %s", req.get_method(), req.get_full_url(), res, exc_info=True) |
| 619 |
if res.code == httplib.UNAUTHORIZED: # 401 |
638 |
if res.code == httplib.UNAUTHORIZED: # 401 |
| 620 |
raise ConfigurationError(uri, 'credentials not accepted') |
639 |
raise ConfigurationError(uri, 'credentials not accepted') |
|
|
640 |
if res.code == httplib.FORBIDDEN: # 403 |
| 641 |
# JFrog Artifactory may return 403 instead of 401 for authentication failures |
| 642 |
if has_credentials: |
| 643 |
raise ConfigurationError(uri, 'authentication failed (forbidden)') |
| 644 |
else: |
| 645 |
raise ConfigurationError(uri, 'access forbidden') |
| 621 |
if res.code == httplib.PROXY_AUTHENTICATION_REQUIRED: # 407 |
646 |
if res.code == httplib.PROXY_AUTHENTICATION_REQUIRED: # 407 |
| 622 |
raise ProxyError(uri, 'credentials not accepted') |
647 |
raise ProxyError(uri, 'credentials not accepted') |
| 623 |
if res.code in (httplib.BAD_GATEWAY, httplib.GATEWAY_TIMEOUT): # 502 504 |
648 |
if res.code in (httplib.BAD_GATEWAY, httplib.GATEWAY_TIMEOUT): # 502 504 |