You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by "Brett Porter (JIRA)" <ji...@codehaus.org> on 2005/05/16 09:53:41 UTC
[jira] Updated: (MAVEN-456) unable to access remote repository via https
[ http://jira.codehaus.org/browse/MAVEN-456?page=all ]
Brett Porter updated MAVEN-456:
-------------------------------
Fix Version: (was: 1.1-beta-1)
1.1-beta-2
> unable to access remote repository via https
> --------------------------------------------
>
> Key: MAVEN-456
> URL: http://jira.codehaus.org/browse/MAVEN-456
> Project: maven
> Type: Improvement
> Components: core
> Versions: 1.0-beta-10
> Reporter: Christoph Gruenwald
> Fix For: 1.1-beta-2
>
>
> the remote repository is only accessable through http; it is not possible to access it via https.
> i needed to modify two methods in the class httputils to get this running (see below).
> ----------------------------------------
> public static void getFile( String url,
> File destinationFile,
> boolean ignoreErrors,
> boolean useTimestamp,
> String proxyHost,
> String proxyPort,
> String proxyUserName,
> String proxyPassword )
> throws Exception
> {
> String[] s = parseUrl( url );
>
> // *** MODIFIED - BEGIN ***
>
> // need to create url with separated parameters
> String protocol = s[0];
> String username = s[1];
> String password = s[2];
> String hostname = s[3];
> String hostport = s[4];
> String parsedUrl = s[5];
>
> /*
> String username = s[0];
> String password = s[1];
> String parsedUrl = s[2];
>
> URL source = new URL( parsedUrl );
> */
>
> URL source = new URL(protocol, hostname, Integer.parseInt(hostport), parsedUrl);
>
> // *** MODIFIED - END ***
> //set the timestamp to the file date.
> long timestamp = 0;
> boolean hasTimestamp = false;
> if ( useTimestamp && destinationFile.exists() )
> {
> timestamp = destinationFile.lastModified();
> hasTimestamp = true;
> }
> //set proxy connection
> useProxyUser( proxyHost, proxyPort, proxyUserName, proxyPassword );
> //set up the URL connection
> URLConnection connection = source.openConnection();
>
> // *** MODIFIED - BEGIN ***
>
> // need to set <code>javax.net.ssl.HostnameVerifier</code> for <code>javax.net.ssl.HttpsURLConnection</code>, otherwise connection will be refused
> if (connection instanceof javax.net.ssl.HttpsURLConnection) {
> ( (javax.net.ssl.HttpsURLConnection) connection).setHostnameVerifier(
> new javax.net.ssl.HostnameVerifier() {
> public boolean verify(String hostname, javax.net.ssl.SSLSession session) {
> return true;
> }
> }
> );
> }
>
> // *** MODIFIED - END ***
>
> //modify the headers
> //NB: things like user authentication could go in here too.
> if ( useTimestamp && hasTimestamp )
> {
> connection.setIfModifiedSince( timestamp );
> }
> // prepare Java 1.1 style credentials
> if ( username != null || password != null )
> {
> String up = username + ":" + password;
> String encoding = null;
> // check to see if sun's Base64 encoder is available.
> try
> {
> sun.misc.BASE64Encoder encoder =
> (sun.misc.BASE64Encoder) Class.forName(
> "sun.misc.BASE64Encoder" ).newInstance();
> encoding = encoder.encode( up.getBytes() );
> }
> catch ( Exception ex )
> {
> // Do nothing, as for MavenSession we will never use
> // auth and we will eventually move over httpclient
> // in the commons.
> }
> connection.setRequestProperty( "Authorization", "Basic " + encoding );
> }
> ...
> }
> ----------------------------------------
> static String[] parseUrl( String url )
> {
> // *** MODIFIED - BEGIN ***
>
> // parsed url into more paramters - it must be created with separated parameters
> // this also fixes a bug caused in <code>org.apache.maven.verifier.DependencyVerifier#getRemoteArtifact(Artifact)</code> when a https-url is used
>
> /*
> String[] parsedUrl = new String[3];
> parsedUrl[0] = null;
> parsedUrl[1] = null;
> parsedUrl[2] = url;
> // We want to be able to deal with Basic Auth where the username
> // and password are part of the URL. An example of the URL string
> // we would like to be able to parse is like the following:
> //
> // http://username:password@repository.mycompany.com
> int i = url.indexOf( "@" );
> if ( i > 0 )
> {
> String s = url.substring( 7, i );
> int j = s.indexOf( ":" );
> parsedUrl[0] = s.substring( 0, j );
> parsedUrl[1] = s.substring( j + 1 );
> parsedUrl[2] = "http://" + url.substring( i + 1 );
> }
> */
> int pos0 = url.indexOf("://"); int step0 = 3;
> if (pos0 == -1) {
> pos0 = url.indexOf(":/"); step0 = 2;
> }
>
> int pos1 = url.indexOf('@');
> int pos2 = url.indexOf(':', pos0 + step0);
> if (pos2 > pos1)
> pos2 = -1;
>
> int pos3 = url.indexOf(':', (pos1 == -1 ? pos0 + step0 : pos1));
> int pos4 = url.indexOf('/', pos0 + step0);
>
> String[] parsedUrl = new String[6];
>
> parsedUrl[0] = url.substring(0, pos0);
> parsedUrl[1] = pos2 == -1 ? null : url.substring(pos0 + step0, pos2);
> parsedUrl[2] = pos2 == -1 ? null : url.substring(pos2 + 1, pos1);
> parsedUrl[3] = url.substring((pos1 == -1 ? pos0 + step0 : pos1 + 1), (pos3 == -1 ? (pos4 == -1 ? url.length() : pos4) : pos3));
> parsedUrl[4] = pos3 == -1 ? "-1" : url.substring(pos3 + 1, (pos4 == -1 ? url.length() : pos4));
> parsedUrl[5] = pos4 == -1 ? null : url.substring(pos4);
> // *** MODIFIED - END ***
> return parsedUrl;
> }
> ----------------------------------------
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org