Hello !

I have been looking through the web for quite some time, tried a lot
of things and didn't find any working solution to my problem, so I
wish someone here will have a solution for me :-) !

I am trying to deploy a GAE Java app, and I am going through a
corporate proxy, which requires authentication.

The proxy config looks like this :

user : DOMAIN\username
password : pass
http proxy : proxy_http.something.com:8000
https proxy : proxy_https.something.com:8000

I read this : 
http://code.google.com/appengine/docs/java/tools/uploadinganapp.html#Using_an_HTTP_Proxy

=> The values for --http_proxy and --proxy_https must match
"proxy_http.something.com:8000", and does not work when matching
"http://DOMAIN\username:p...@proxy_http.something.com:8000"; =>
(unknown host)

I tried to set the proxy informations by modifying appcfg.cmd and
adding some java proxy arguments :

-Dhttp.proxyHost="http://DOMAIN
\username:p...@proxy_http.something.com"  -Dhttp.proxyPort=8000
-Dhttps.proxyHost="http://DOMAIN
\username:p...@proxy_https.something.com"  -Dhttps.proxyPort=8000

=> still unknown host error.

I also tried this :

-Dhttp.proxyHost="proxy_http.something.com"  -Dhttp.proxyPort=8000
-Dhttp.proxyUser="DOMAIN\username" -Dhttp.proxyPassword=pass
-Dhttps.proxyHost="proxy_https.something.com"  -Dhttps.proxyPort=8000
-Dhttps.proxyUser="DOMAIN\username" -Dhttps.proxyPassword=pass

The host is resolved but then it tries to use the proxy and gets an
Authentication failure exception.

Then I tried to call AppCfg.main myself, and the the proxy and Proxy
auth in the JVM prior to calling it :

public class Test {

    public static void main(String[] args) {

        Authenticator.setDefault(new ProxyAuthenticator("DOMAIN\
\username", "pass"));

        System.setProperty("http.proxyHost",
"proxy_https.something.com");
        System.setProperty("http.proxyPort", "8000");
        System.setProperty("https.proxyHost",
"proxy_https.something.com");
        System.setProperty("https.proxyPort", "8000");

        String[] appArgs = { "update", "PATH TO MY WAR FOLDER" };

        AppCfg.main(appArgs);
    }

    static class ProxyAuthenticator extends Authenticator {

        private String user, password;

        public ProxyAuthenticator(String user, String password) {
            this.user = user;
            this.password = password;
        }

        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(user,
password.toCharArray());
        }
    }

}

However, I still get the Authentication failure exception. Here is the
stacktrace :

Unable to update:
java.io.IOException: Authentication failure
        at
sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:
1402)
        at
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:
168)
        at
sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:
836)
        at
sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:
230)
        at
com.google.appengine.tools.admin.ServerConnection.connect(ServerConnection.java:
340)
        at
com.google.appengine.tools.admin.ServerConnection.send(ServerConnection.java:
133)
        at
com.google.appengine.tools.admin.ServerConnection.post(ServerConnection.java:
82)
        at
com.google.appengine.tools.admin.AppVersionUpload.send(AppVersionUpload.java:
559)
        at
com.google.appengine.tools.admin.AppVersionUpload.beginTransaction(AppVersionUpload.java:
376)
        at
com.google.appengine.tools.admin.AppVersionUpload.doUpload(AppVersionUpload.java:
111)
        at
com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:
56)
        at com.google.appengine.tools.admin.AppCfg
$UpdateAction.execute(AppCfg.java:527)
        at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:130)
        at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:58)
        at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:54)
        at com.googlecode.android_frameworks.server.Test.main(Test.java:20)
com.google.appengine.tools.admin.AdminException: Unable to update app:
Authentication failure
        at
com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:
62)
        at com.google.appengine.tools.admin.AppCfg
$UpdateAction.execute(AppCfg.java:527)
        at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:130)
        at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:58)
        at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:54)
        at com.googlecode.android_frameworks.server.Test.main(Test.java:20)
Caused by: java.io.IOException: Authentication failure
        at
sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:
1402)
        at
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:
168)
        at
sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:
836)
        at
sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:
230)
        at
com.google.appengine.tools.admin.ServerConnection.connect(ServerConnection.java:
340)
        at
com.google.appengine.tools.admin.ServerConnection.send(ServerConnection.java:
133)
        at
com.google.appengine.tools.admin.ServerConnection.post(ServerConnection.java:
82)
        at
com.google.appengine.tools.admin.AppVersionUpload.send(AppVersionUpload.java:
559)
        at
com.google.appengine.tools.admin.AppVersionUpload.beginTransaction(AppVersionUpload.java:
376)
        at
com.google.appengine.tools.admin.AppVersionUpload.doUpload(AppVersionUpload.java:
111)
        at
com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:
56)
        ... 5 more

Seems that GAE uses a
sun.net.www.protocol.https.HttpsURLConnectionImpl, and it doesn't seem
to take the Authenticator into account.

Has anyone already achieved to upload java gae applications through an
authenticated proxy ? Any hint would be great !

Also, are the sources available ? I might soon try to retro-engineer
the com.google.appengine.tools.admin classes to understand how it
deploys the whole stuff...

Cheers,
Piwaï

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to