The following issue has been updated: Updater: Brett Porter (mailto:[EMAIL PROTECTED]) Date: Fri, 23 Jul 2004 2:21 AM Comment: might already work - test Changes: Fix Version changed to 1.1 --------------------------------------------------------------------- For a full history of the issue, see:
http://jira.codehaus.org/browse/MAVEN-456?page=history --------------------------------------------------------------------- View the issue: http://jira.codehaus.org/browse/MAVEN-456 Here is an overview of the issue: --------------------------------------------------------------------- Key: MAVEN-456 Summary: unable to access remote repository via https Type: Improvement Status: Unassigned Priority: Major Original Estimate: Unknown Time Spent: Unknown Remaining: Unknown Project: maven Components: core Fix Fors: 1.1 Versions: 1.0-beta-10 Assignee: Reporter: Christoph Gruenwald Created: Mon, 2 Jun 2003 5:43 AM Updated: Fri, 23 Jul 2004 2:21 AM Description: 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:[EMAIL PROTECTED] 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; } ---------------------------------------- --------------------------------------------------------------------- JIRA INFORMATION: 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 If you want more information on JIRA, or have a bug to report see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]