Merge branch 'main' into 4.0.x
This commit is contained in:
		
						commit
						8e1f7f23d9
					
				|  | @ -31,6 +31,9 @@ import javax.xml.xpath.XPathConstants; | |||
| import javax.xml.xpath.XPathFactory; | ||||
| 
 | ||||
| import org.gradle.api.artifacts.repositories.MavenArtifactRepository; | ||||
| import org.gradle.api.artifacts.repositories.PasswordCredentials; | ||||
| import org.gradle.api.credentials.Credentials; | ||||
| import org.gradle.internal.artifacts.repositories.AuthenticationSupportedInternal; | ||||
| import org.w3c.dom.Document; | ||||
| import org.w3c.dom.NodeList; | ||||
| import org.xml.sax.InputSource; | ||||
|  | @ -83,9 +86,10 @@ final class MavenMetadataVersionResolver implements VersionResolver { | |||
| 			.toUri(); | ||||
| 		try { | ||||
| 			HttpHeaders headers = new HttpHeaders(); | ||||
| 			String username = repository.getCredentials().getUsername(); | ||||
| 			PasswordCredentials credentials = credentialsOf(repository); | ||||
| 			String username = (credentials != null) ? credentials.getUsername() : null; | ||||
| 			if (username != null) { | ||||
| 				headers.setBasicAuth(username, repository.getCredentials().getPassword()); | ||||
| 				headers.setBasicAuth(username, credentials.getPassword()); | ||||
| 			} | ||||
| 			HttpEntity<Void> request = new HttpEntity<>(headers); | ||||
| 			String metadata = this.rest.exchange(url, HttpMethod.GET, request, String.class).getBody(); | ||||
|  | @ -112,4 +116,25 @@ final class MavenMetadataVersionResolver implements VersionResolver { | |||
| 		return versions; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Retrives the configured credentials of the given {@code repository}. We cannot use | ||||
| 	 * {@link MavenArtifactRepository#getCredentials()} as, if the repository has no | ||||
| 	 * credentials, it has the unwanted side-effect of assigning an empty set of username | ||||
| 	 * and password credentials to the repository which may cause subsequent "Username | ||||
| 	 * must not be null!" failures. | ||||
| 	 * @param repository the repository that is the source of the credentials | ||||
| 	 * @return the configured password credentials or {@code null} | ||||
| 	 */ | ||||
| 	private PasswordCredentials credentialsOf(MavenArtifactRepository repository) { | ||||
| 		Credentials credentials = ((AuthenticationSupportedInternal) repository).getConfiguredCredentials().getOrNull(); | ||||
| 		if (credentials != null) { | ||||
| 			if (credentials instanceof PasswordCredentials passwordCredentials) { | ||||
| 				return passwordCredentials; | ||||
| 			} | ||||
| 			throw new IllegalStateException("Repository '%s (%s)' has credentials '%s' that are not PasswordCredentials" | ||||
| 				.formatted(repository.getName(), repository.getUrl(), credentials)); | ||||
| 		} | ||||
| 		return null; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue