You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by ji...@codehaus.org on 2004/07/23 08:23:11 UTC
[jira] Updated: (MAVEN-456) unable to access remote repository via https
The following issue has been updated:
Updater: Brett Porter (mailto:brett@codehaus.org)
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: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;
}
----------------------------------------
---------------------------------------------------------------------
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: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org