From e35e4a7974d3949500b7d94625d9a08394fa94d8 Mon Sep 17 00:00:00 2001 From: Damian Minkov Date: Sat, 18 May 2013 11:49:26 +0300 Subject: [PATCH] Creates authenticate windows service that will create the dialog and will show it to user used with different impl on android and desktop. Expose some common functionality in httputil and reuse it in xcap implementation in sip provider. Wraps sslSocketFactory to use the constructor that is common for android and desktop httpclient lib. Creates separate bundle for httpclient libs in order to separate it from httputil bundle which will be used in android. --- .classpath | 184 +++++++++--------- build.xml | 37 ++-- lib/felix.client.run.properties | 2 + .../commons-logging-1.1.1.jar | Bin 60841 -> 0 bytes .../commons-logging-1.1.2.jar | Bin 0 -> 62051 bytes lib/installer-exclude/httpclient.manifest.mf | 38 ++++ .../certificate/CertificateServiceImpl.java | 33 +++- .../CertificateVerificationActivator.java | 11 ++ .../impl/certificate/certificate.manifest.mf | 1 + .../protocol/sip/sip.provider.manifest.mf | 1 + .../protocol/sip/xcap/BaseHttpXCapClient.java | 149 +++++++------- .../protocol/sip/xcap/HttpXCapClient.java | 15 -- .../desktoputil/AuthenticationWindow.java | 6 +- .../desktoputil/DesktopUtilActivator.java | 38 ++++ .../provisioning/provisioning.manifest.mf | 1 + .../gui/AuthenticationWindowService.java | 95 +++++++++ .../service/httputil/HttpUtilActivator.java | 11 ++ .../service/httputil/HttpUtils.java | 44 +++-- .../service/httputil/SSLSocketFactoryEx.java | 156 +++++++++++++++ .../service/httputil/httputil.manifest.mf | 10 +- 20 files changed, 598 insertions(+), 234 deletions(-) delete mode 100644 lib/installer-exclude/commons-logging-1.1.1.jar create mode 100644 lib/installer-exclude/commons-logging-1.1.2.jar create mode 100644 lib/installer-exclude/httpclient.manifest.mf create mode 100644 src/net/java/sip/communicator/service/gui/AuthenticationWindowService.java create mode 100644 src/net/java/sip/communicator/service/httputil/SSLSocketFactoryEx.java diff --git a/.classpath b/.classpath index cdfb90ba6..3ada0efd0 100644 --- a/.classpath +++ b/.classpath @@ -1,92 +1,92 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build.xml b/build.xml index dfdee9395..fec3a1b27 100644 --- a/build.xml +++ b/build.xml @@ -921,7 +921,8 @@ bundle-plugin-icqaccregwizz,bundle-plugin-jabberaccregwizz, bundle-plugin-msnaccregwizz,bundle-plugin-sipaccregwizz, bundle-plugin-yahooaccregwizz,bundle-plugin-aimaccregwizz, - bundle-commons-codec,bundle-httputil,bundle-plugin-spellcheck, + bundle-commons-codec,bundle-commons-logging, + bundle-httputil,bundle-plugin-spellcheck, bundle-version-impl,bundle-shutdown-timeout,bundle-windows-clean-shutdown, bundle-growlnotification,bundle-swingnotification,bundle-galagonotification, bundle-sparkle, bundle-plugin-branding, @@ -1964,20 +1965,8 @@ javax.swing.event, javax.swing.border"/> - - - - - - - - - + @@ -1999,9 +1988,21 @@ javax.swing.event, javax.swing.border"/> manifest="${src}/net/java/sip/communicator/service/httputil/httputil.manifest.mf"> - - + + + + + + @@ -2369,7 +2370,7 @@ javax.swing.event, javax.swing.border"/> - + diff --git a/lib/felix.client.run.properties b/lib/felix.client.run.properties index 42d6d9e0a..42cd65434 100644 --- a/lib/felix.client.run.properties +++ b/lib/felix.client.run.properties @@ -60,6 +60,8 @@ felix.auto.start.32= \ felix.auto.start.35= \ reference:file:sc-bundles/commons-codec.jar \ + reference:file:sc-bundles/commons-logging.jar \ + reference:file:sc-bundles/httpclient.jar \ reference:file:sc-bundles/httputil.jar felix.auto.start.40= \ diff --git a/lib/installer-exclude/commons-logging-1.1.1.jar b/lib/installer-exclude/commons-logging-1.1.1.jar deleted file mode 100644 index 8758a96b70cfba9466bacca19c0d99b87cf53734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60841 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
    {@^= z#dJv%@%X>ez!qkL<$^8Ta>+I5`CqwyDB}W41Y3UNlE}{IKN9_OaG)@<*OvqjLjIND zr^^mj{rM6xJM>qGz-s%c7BuY8z>4)=^5{qWiU&rz7Zw^;TlNwf^~LW(|72IlhfyiL zgeHmlUFe@|2CyQQm(ZFqzYG0M(h_z+UG%U%y{<>G0nlTrO{4FP;WW`u}qK`u!mK@;)5) z-1_1u`j2*D9PxMKzn>-l9PDz>xd0pZHQ3L=|M{r;yRVs^!~=ipCM+22`)>!=mqUsC mzf*kJ$Jk2_;lG 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 literal 0 HcmV?d00001 diff --git a/lib/installer-exclude/httpclient.manifest.mf b/lib/installer-exclude/httpclient.manifest.mf new file mode 100644 index 000000000..31b24ee1a --- /dev/null +++ b/lib/installer-exclude/httpclient.manifest.mf @@ -0,0 +1,38 @@ +Bundle-Name: Apache Http Client +Bundle-Description: Apache Http Client +Bundle-Vendor: jitsi.org +Bundle-Version: 4.2.3 +System-Bundle: yes +Import-Package: org.apache.commons.logging, + javax.net.ssl +Export-Package: org.apache.http, + org.apache.http.entity, + org.apache.http.entity.mime, + org.apache.http.entity.mime.content, + org.apache.http.impl, + org.apache.http.impl.conn, + org.apache.http.impl.entity, + org.apache.http.impl.io, + org.apache.http.io, + org.apache.http.message, + org.apache.http.params, + org.apache.http.protocol, + org.apache.http.util, + org.apache.http.annotation, + org.apache.http.auth, + org.apache.http.auth.params, + org.apache.http.client, + org.apache.http.client.entity, + org.apache.http.client.methods, + org.apache.http.client.params, + org.apache.http.client.protocol, + org.apache.http.client.utils, + org.apache.http.conn, + org.apache.http.conn.params, + org.apache.http.conn.routing, + org.apache.http.conn.scheme, + org.apache.http.conn.ssl, + org.apache.http.conn.util, + org.apache.http.impl.client + + diff --git a/src/net/java/sip/communicator/impl/certificate/CertificateServiceImpl.java b/src/net/java/sip/communicator/impl/certificate/CertificateServiceImpl.java index 1a1557c3b..751d7f4a5 100644 --- a/src/net/java/sip/communicator/impl/certificate/CertificateServiceImpl.java +++ b/src/net/java/sip/communicator/impl/certificate/CertificateServiceImpl.java @@ -19,9 +19,9 @@ import javax.net.ssl.*; import javax.security.auth.callback.*; -import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.service.certificate.*; import net.java.sip.communicator.service.credentialsstorage.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.httputil.*; import net.java.sip.communicator.util.Logger; @@ -430,14 +430,29 @@ public void handle(Callback[] callbacks) } else { - AuthenticationWindow aw = - new AuthenticationWindow( - f.getName(), - null, - kt.getName(), - false, - null - ); + AuthenticationWindowService + authenticationWindowService = + CertificateVerificationActivator + .getAuthenticationWindowService(); + + if(authenticationWindowService == null) + { + logger.error( + "No AuthenticationWindowService " + + "implementation"); + throw new IOException("User cancel"); + } + + AuthenticationWindowService.AuthenticationWindow + aw = authenticationWindowService.create( + f.getName(), + null, + kt.getName(), + false, + false, + null, null, null, null, + null, null, null); + aw.setAllowSavePassword(false); aw.setVisible(true); if (!aw.isCanceled()) diff --git a/src/net/java/sip/communicator/impl/certificate/CertificateVerificationActivator.java b/src/net/java/sip/communicator/impl/certificate/CertificateVerificationActivator.java index eeee7e3b0..528ec4774 100644 --- a/src/net/java/sip/communicator/impl/certificate/CertificateVerificationActivator.java +++ b/src/net/java/sip/communicator/impl/certificate/CertificateVerificationActivator.java @@ -8,6 +8,7 @@ import net.java.sip.communicator.service.certificate.*; import net.java.sip.communicator.service.credentialsstorage.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.util.*; import org.jitsi.service.configuration.*; @@ -154,4 +155,14 @@ public static VerifyCertificateDialogService getCertificateDialogService() } return certificateDialogService; } + + /** + * Returns service to show authentication window. + * @return return service to show authentication window. + */ + public static AuthenticationWindowService getAuthenticationWindowService() + { + return ServiceUtils.getService( + bundleContext, AuthenticationWindowService.class); + } } diff --git a/src/net/java/sip/communicator/impl/certificate/certificate.manifest.mf b/src/net/java/sip/communicator/impl/certificate/certificate.manifest.mf index 2c5516828..981e58a4a 100644 --- a/src/net/java/sip/communicator/impl/certificate/certificate.manifest.mf +++ b/src/net/java/sip/communicator/impl/certificate/certificate.manifest.mf @@ -6,6 +6,7 @@ Bundle-Version: 0.0.1 System-Bundle: yes Export-Package: net.java.sip.communicator.service.certificate Import-Package: org.osgi.framework, + net.java.sip.communicator.service.gui, net.java.sip.communicator.util, net.java.sip.communicator.plugin.desktoputil, org.jitsi.service.configuration, diff --git a/src/net/java/sip/communicator/impl/protocol/sip/sip.provider.manifest.mf b/src/net/java/sip/communicator/impl/protocol/sip/sip.provider.manifest.mf index 5e5e90650..7430ef0b3 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/sip.provider.manifest.mf +++ b/src/net/java/sip/communicator/impl/protocol/sip/sip.provider.manifest.mf @@ -19,6 +19,7 @@ Import-Package: ch.imvs.sdes4j.srtp, net.java.sip.communicator.service.certificate, net.java.sip.communicator.service.gui, net.java.sip.communicator.service.hid, + net.java.sip.communicator.service.httputil, net.java.sip.communicator.service.netaddr, net.java.sip.communicator.service.netaddr.event, net.java.sip.communicator.service.protocol, diff --git a/src/net/java/sip/communicator/impl/protocol/sip/xcap/BaseHttpXCapClient.java b/src/net/java/sip/communicator/impl/protocol/sip/xcap/BaseHttpXCapClient.java index 96e9f1a08..326cf9347 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/xcap/BaseHttpXCapClient.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/xcap/BaseHttpXCapClient.java @@ -10,7 +10,6 @@ import java.net.*; import java.net.URI; -import javax.net.ssl.*; import javax.sip.address.*; import net.java.sip.communicator.impl.protocol.sip.*; @@ -19,17 +18,15 @@ import net.java.sip.communicator.impl.protocol.sip.xcap.utils.*; import net.java.sip.communicator.service.certificate.*; import net.java.sip.communicator.service.gui.*; +import net.java.sip.communicator.service.httputil.*; import net.java.sip.communicator.util.*; import org.apache.http.*; import org.apache.http.auth.*; +import org.apache.http.client.*; import org.apache.http.client.methods.*; -import org.apache.http.conn.*; -import org.apache.http.conn.scheme.*; -import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.*; import org.apache.http.impl.client.*; -import org.apache.http.params.*; import org.osgi.framework.*; /** @@ -68,11 +65,6 @@ public abstract class BaseHttpXCapClient implements HttpXCapClient public static final String XCAP_ERROR_CONTENT_TYPE = "application/xcap-error+xml"; - /** - * The default timeout (10 seconds) - */ - private static int DEFAULT_TIMEOUT = 10 * 1000; - /** * Current server uri. */ @@ -98,11 +90,6 @@ public abstract class BaseHttpXCapClient implements HttpXCapClient */ private boolean connected; - /** - * How many seconds should the client wait for HTTP response. - */ - private int timeout; - /** * The service we use to interact with user regarding certificates. */ @@ -113,8 +100,6 @@ public abstract class BaseHttpXCapClient implements HttpXCapClient */ public BaseHttpXCapClient() { - timeout = DEFAULT_TIMEOUT; - ServiceReference guiVerifyReference = SipActivator.getBundleContext().getServiceReference( CertificateService.class.getName()); @@ -194,15 +179,13 @@ public XCapHttpResponse get(XCapResourceId resourceId) protected XCapHttpResponse get(URI uri) throws XCapException { - DefaultHttpClient httpClient = createHttpClient(); + DefaultHttpClient httpClient = null; try { + httpClient = createHttpClient(); + HttpGet getMethod = new HttpGet(uri); getMethod.setHeader("Connection", "close"); - Credentials credentials = - new UsernamePasswordCredentials(getUserName(), password); - httpClient.getCredentialsProvider(). - setCredentials(AuthScope.ANY, credentials); HttpResponse response = httpClient.execute(getMethod); XCapHttpResponse result = createResponse(response); @@ -246,7 +229,8 @@ protected XCapHttpResponse get(URI uri) } finally { - httpClient.getConnectionManager().shutdown(); + if(httpClient != null) + httpClient.getConnectionManager().shutdown(); } } @@ -292,9 +276,11 @@ static void showError(Exception ex, String title, String message) public XCapHttpResponse put(XCapResource resource) throws XCapException { - DefaultHttpClient httpClient = createHttpClient(); + DefaultHttpClient httpClient = null; try { + httpClient = createHttpClient(); + URI resourceUri = getResourceURI(resource.getId()); HttpPut putMethod = new HttpPut(resourceUri); putMethod.setHeader("Connection", "close"); @@ -302,10 +288,7 @@ public XCapHttpResponse put(XCapResource resource) stringEntity.setContentType(resource.getContentType()); stringEntity.setContentEncoding("UTF-8"); putMethod.setEntity(stringEntity); - Credentials credentials = - new UsernamePasswordCredentials(getUserName(), password); - httpClient.getCredentialsProvider(). - setCredentials(AuthScope.ANY, credentials); + if (logger.isDebugEnabled()) { String logMessage = String.format( @@ -327,7 +310,8 @@ public XCapHttpResponse put(XCapResource resource) } finally { - httpClient.getConnectionManager().shutdown(); + if(httpClient != null) + httpClient.getConnectionManager().shutdown(); } } @@ -343,16 +327,15 @@ public XCapHttpResponse delete(XCapResourceId resourceId) throws XCapException { assertConnected(); - DefaultHttpClient httpClient = createHttpClient(); + DefaultHttpClient httpClient = null; try { + httpClient = createHttpClient(); + URI resourceUri = getResourceURI(resourceId); HttpDelete deleteMethod = new HttpDelete(resourceUri); deleteMethod.setHeader("Connection", "close"); - Credentials credentials = - new UsernamePasswordCredentials(getUserName(), password); - httpClient.getCredentialsProvider(). - setCredentials(AuthScope.ANY, credentials); + if (logger.isDebugEnabled()) { String logMessage = String.format( @@ -373,7 +356,8 @@ public XCapHttpResponse delete(XCapResourceId resourceId) } finally { - httpClient.getConnectionManager().shutdown(); + if(httpClient != null) + httpClient.getConnectionManager().shutdown(); } } @@ -397,26 +381,6 @@ public URI getUri() return uri; } - /** - * Gets operation timeout.The deffault value is 10 seconds. - * - * @return operation timeout. - */ - public int getTimeout() - { - return timeout; - } - - /** - * Sets operation timeout. The deffault value is 10 seconds. - * - * @param timeout operation timeout. - */ - public void setTimeout(int timeout) - { - this.timeout = timeout; - } - /** * Utility method throwing an exception if the user is not connected. * @@ -456,32 +420,16 @@ protected URI getResourceURI(XCapResourceId resourceId) * @return the HTTP client. */ private DefaultHttpClient createHttpClient() + throws IOException { - //TODO: move to HttpUtil - DefaultHttpClient httpClient = new DefaultHttpClient(); - try - { - // make sure we use Certificate Verification Service if - // for some reason the certificate needs to be shown to user - // for approval - ClientConnectionManager ccm = httpClient.getConnectionManager(); - SchemeRegistry sr = ccm.getSchemeRegistry(); - SSLContext ctx = - certificateVerification.getSSLContext( - certificateVerification.getTrustManager(uri.getHost())); - org.apache.http.conn.ssl.SSLSocketFactory ssf = - new org.apache.http.conn.ssl.SSLSocketFactory(ctx, - SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); - sr.register(new Scheme("https", 443, ssf)); - } - catch(Throwable e) - { - logger.error("Cannot add our trust manager to httpClient", e); - } - HttpParams httpParams = httpClient.getParams(); - HttpConnectionParams.setConnectionTimeout(httpParams, timeout); - HttpConnectionParams.setSoTimeout(httpParams, timeout); - return httpClient; + XCapCredentialsProvider credentialsProvider + = new XCapCredentialsProvider(); + credentialsProvider.setCredentials( + AuthScope.ANY, + new UsernamePasswordCredentials(getUserName(), password)); + + return HttpUtils.getHttpClient( + null , null, uri.getHost(), credentialsProvider); } /** @@ -584,4 +532,45 @@ protected String getXCapErrorMessage(XCapHttpResponse response) return null; } } + + /** + * Our credentials provider simple impl. + */ + private class XCapCredentialsProvider + implements CredentialsProvider + { + /** + * The credentials to use. + */ + private Credentials credentials; + + /** + * Sets credentials no matter of the scope. + * @param authscope the scope is not used. + * @param credentials the credentials to use + */ + public void setCredentials(AuthScope authscope, + Credentials credentials) + { + this.credentials = credentials; + } + + /** + * Returns the credentials no matter of the scope. + * @param authscope not important + * @return the credentials. + */ + public Credentials getCredentials(AuthScope authscope) + { + return credentials; + } + + /** + * Clears credentials. + */ + public void clear() + { + credentials = null; + } + } } diff --git a/src/net/java/sip/communicator/impl/protocol/sip/xcap/HttpXCapClient.java b/src/net/java/sip/communicator/impl/protocol/sip/xcap/HttpXCapClient.java index 1c4d4ce55..73ec40e5e 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/xcap/HttpXCapClient.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/xcap/HttpXCapClient.java @@ -89,19 +89,4 @@ public XCapHttpResponse delete(XCapResourceId resourceId) * @return server location. */ public URI getUri(); - - /** - * Gets operation timeout. - * - * @return operation timeout. - */ - public int getTimeout(); - - /** - * Sets operation timeout. - * - * @param timeout operation timeout. - */ - public void setTimeout(int timeout); - } diff --git a/src/net/java/sip/communicator/plugin/desktoputil/AuthenticationWindow.java b/src/net/java/sip/communicator/plugin/desktoputil/AuthenticationWindow.java index c5199d83c..dc53b138b 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/AuthenticationWindow.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/AuthenticationWindow.java @@ -11,6 +11,7 @@ import javax.swing.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.util.Logger; import org.jitsi.util.*; @@ -23,7 +24,8 @@ */ public class AuthenticationWindow extends SIPCommDialog - implements ActionListener + implements ActionListener, + AuthenticationWindowService.AuthenticationWindow { private static final long serialVersionUID = 1L; @@ -172,7 +174,7 @@ public AuthenticationWindow(String server, * the user that something went wrong * @param signupLink an URL that allows the user to sign up */ - private AuthenticationWindow(String userName, + AuthenticationWindow(String userName, char[] password, String server, boolean isUserNameEditable, diff --git a/src/net/java/sip/communicator/plugin/desktoputil/DesktopUtilActivator.java b/src/net/java/sip/communicator/plugin/desktoputil/DesktopUtilActivator.java index b2dcf5188..de92b2814 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/DesktopUtilActivator.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/DesktopUtilActivator.java @@ -5,6 +5,7 @@ import java.security.cert.*; import javax.imageio.*; +import javax.swing.*; import net.java.sip.communicator.service.browserlauncher.*; import net.java.sip.communicator.service.certificate.*; @@ -71,6 +72,43 @@ public String showInputDialog(boolean prevSuccess) } }, null); + + bundleContext.registerService( + AuthenticationWindowService.class.getName(), + new AuthenticationWindowService() + { + public AuthenticationWindow create( + String userName, + char[] password, + String server, + boolean isUserNameEditable, + boolean isRememberPassword, + Object icon, + String windowTitle, + String windowText, + String usernameLabelText, + String passwordLabelText, + String errorMessage, + String signupLink) + { + ImageIcon imageIcon = null; + + if(icon instanceof ImageIcon) + imageIcon = (ImageIcon)icon; + + return new net.java.sip.communicator.plugin.desktoputil + .AuthenticationWindow( + userName, password, + server, + isUserNameEditable, isRememberPassword, + imageIcon, + windowTitle, windowText, + usernameLabelText, passwordLabelText, + errorMessage, + signupLink); + } + }, + null); } /** diff --git a/src/net/java/sip/communicator/plugin/provisioning/provisioning.manifest.mf b/src/net/java/sip/communicator/plugin/provisioning/provisioning.manifest.mf index afa6e8594..8b95d2c55 100644 --- a/src/net/java/sip/communicator/plugin/provisioning/provisioning.manifest.mf +++ b/src/net/java/sip/communicator/plugin/provisioning/provisioning.manifest.mf @@ -19,6 +19,7 @@ Import-Package: org.osgi.framework, org.jitsi.util, net.java.sip.communicator.util, net.java.sip.communicator.plugin.desktoputil, + org.apache.http.params, javax.swing, javax.swing.event, javax.swing.table, diff --git a/src/net/java/sip/communicator/service/gui/AuthenticationWindowService.java b/src/net/java/sip/communicator/service/gui/AuthenticationWindowService.java new file mode 100644 index 000000000..f134444e3 --- /dev/null +++ b/src/net/java/sip/communicator/service/gui/AuthenticationWindowService.java @@ -0,0 +1,95 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.service.gui; + +import javax.swing.*; + +/** + * Creates and show authentication window, normally to fill in username and + * password. + * @author Damian Minkov + */ +public interface AuthenticationWindowService +{ + /** + * Creates an instance of the AuthenticationWindow implementation. + * + * @param server the server name + * @param isUserNameEditable indicates if the user name is editable + * @param icon the icon to display on the left of the authentication window + * @param windowTitle customized window title + * @param windowText customized window text + * @param usernameLabelText customized username field label text + * @param passwordLabelText customized password field label text + * @param errorMessage an error message if this dialog is shown to indicate + * the user that something went wrong + * @param signupLink an URL that allows the user to sign up + */ + public AuthenticationWindow create(String userName, + char[] password, + String server, + boolean isUserNameEditable, + boolean isRememberPassword, + Object icon, + String windowTitle, + String windowText, + String usernameLabelText, + String passwordLabelText, + String errorMessage, + String signupLink); + + /** + * The window interface used by implementers. + */ + public interface AuthenticationWindow + { + /** + * Shows window implementation. + * + * @param isVisible specifies whether we should be showing or hiding the + * window. + */ + public void setVisible(final boolean isVisible); + + /** + * Indicates if this window has been canceled. + * + * @return true if this window has been canceled, + * false - otherwise. + */ + public boolean isCanceled(); + + /** + * Returns the user name entered by the user or previously set if the + * user name is not editable. + * + * @return the user name. + */ + public String getUserName(); + + /** + * Returns the password entered by the user. + * + * @return the password. + */ + public char[] getPassword(); + + /** + * Indicates if the password should be remembered. + * + * @return true if the password should be remembered, + * false - otherwise. + */ + public boolean isRememberPassword(); + + /** + * Shows or hides the "save password" checkbox. + * @param allow the checkbox is shown when allow is true + */ + public void setAllowSavePassword(boolean allow); + } +} diff --git a/src/net/java/sip/communicator/service/httputil/HttpUtilActivator.java b/src/net/java/sip/communicator/service/httputil/HttpUtilActivator.java index 325aab5de..225a3432c 100644 --- a/src/net/java/sip/communicator/service/httputil/HttpUtilActivator.java +++ b/src/net/java/sip/communicator/service/httputil/HttpUtilActivator.java @@ -2,6 +2,7 @@ import net.java.sip.communicator.service.certificate.*; import net.java.sip.communicator.service.credentialsstorage.*; +import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.resources.*; import net.java.sip.communicator.util.*; @@ -146,4 +147,14 @@ public static ConfigurationService getConfigurationService() } return configurationService; } + + /** + * Returns service to show authentication window. + * @return return service to show authentication window. + */ + public static AuthenticationWindowService getAuthenticationWindowService() + { + return ServiceUtils.getService( + bundleContext, AuthenticationWindowService.class); + } } diff --git a/src/net/java/sip/communicator/service/httputil/HttpUtils.java b/src/net/java/sip/communicator/service/httputil/HttpUtils.java index 2bf7abb33..c3226265d 100644 --- a/src/net/java/sip/communicator/service/httputil/HttpUtils.java +++ b/src/net/java/sip/communicator/service/httputil/HttpUtils.java @@ -14,7 +14,7 @@ import javax.net.ssl.*; import net.java.sip.communicator.util.Logger; -import net.java.sip.communicator.plugin.desktoputil.*; +import net.java.sip.communicator.service.gui.*; import org.apache.http.*; import org.apache.http.Header; @@ -24,7 +24,6 @@ import org.apache.http.client.params.*; import org.apache.http.client.utils.*; import org.apache.http.conn.scheme.*; -import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.*; import org.apache.http.entity.mime.*; import org.apache.http.entity.mime.content.*; @@ -524,11 +523,11 @@ else if(i == passwordParamIx && creds != null) * in the new client * @param address the address we will be connecting to */ - private static DefaultHttpClient getHttpClient( + public static DefaultHttpClient getHttpClient( String usernamePropertyName, String passwordPropertyName, final String address, - HTTPCredentialsProvider credentialsProvider) + CredentialsProvider credentialsProvider) throws IOException { HttpParams params = new BasicHttpParams(); @@ -559,12 +558,16 @@ private static DefaultHttpClient getHttpClient( // note to any reviewer concerned about ALLOW_ALL_HOSTNAME_VERIFIER: // the SSL context obtained from the certificate service takes care of // certificate validation - Scheme sch = - new Scheme("https", 443, new SSLSocketFactory(sslCtx, - SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)); - httpClient.getConnectionManager().getSchemeRegistry().register(sch); - //TODO: wrap the SSLSocketFactory to use our own DNS resolution - //TODO: register socketfactory for http to use our own DNS resolution + try + { + Scheme sch = + new Scheme("https", 443, new SSLSocketFactoryEx(sslCtx)); + httpClient.getConnectionManager().getSchemeRegistry().register(sch); + } + catch(Throwable t) + { + logger.error("Error creating ssl socket factory", t); + } // set proxy from default jre settings ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner( @@ -679,11 +682,24 @@ public Credentials getCredentials(AuthScope authscope) // if password is not saved ask user for credentials if(pass == null) { - - AuthenticationWindow authWindow = - new AuthenticationWindow( + AuthenticationWindowService authenticationWindowService = + HttpUtilActivator.getAuthenticationWindowService(); + + if(authenticationWindowService == null) + { + logger.error( + "No AuthenticationWindowService implementation"); + return null; + } + + AuthenticationWindowService.AuthenticationWindow authWindow = + authenticationWindowService.create( authUsername, null, - authscope.getHost(), true, null, errorMessage, + authscope.getHost(), + true, + false, + null, null, null, null, null, + errorMessage, HttpUtilActivator.getResources().getSettingsString( "plugin.provisioning.SIGN_UP_LINK")); authWindow.setVisible(true); diff --git a/src/net/java/sip/communicator/service/httputil/SSLSocketFactoryEx.java b/src/net/java/sip/communicator/service/httputil/SSLSocketFactoryEx.java new file mode 100644 index 000000000..fee8e9842 --- /dev/null +++ b/src/net/java/sip/communicator/service/httputil/SSLSocketFactoryEx.java @@ -0,0 +1,156 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.service.httputil; + +import org.apache.http.conn.*; +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.params.*; + +import javax.net.ssl.*; +import java.io.*; +import java.net.*; +import java.security.*; + +/** + * Wrapper for SSLSocketFactory to use the constructor which is available + * in android. The certificate validation is handled by the SSLContext + * which we use to create sockets for this factory. + * + * TODO: wrap the SSLSocketFactory to use our own DNS resolution + * TODO: register socketfactory for http to use our own DNS resolution + * + * @author Damian Minkov + */ +public class SSLSocketFactoryEx + extends SSLSocketFactory +{ + /** + * The context that will be used to create sockets. + */ + private SSLContext context; + + /** + * Constructor using the super constructor available for android. + * + * @param context the context to use + * @throws UnrecoverableKeyException + * @throws KeyStoreException + * @throws KeyManagementException + * @throws NoSuchAlgorithmException + */ + public SSLSocketFactoryEx(SSLContext context) + throws + UnrecoverableKeyException, + KeyStoreException, + KeyManagementException, + NoSuchAlgorithmException + { + super((KeyStore) null); + + this.context = context; + } + + /** + * Creates socket. + * @param params + * @return + * @throws IOException + */ + public Socket createSocket(final HttpParams params) + throws + IOException + { + return this.context.getSocketFactory().createSocket(); + } + + /** + * @since 4.2 + */ + public Socket createLayeredSocket( + final Socket socket, + final String host, + final int port, + final HttpParams params) + throws IOException, + UnknownHostException + { + return this.context.getSocketFactory() + .createSocket( + socket, + host, + port, + true); + } + + /** + * @since 4.1 + */ + public Socket connectSocket( + final Socket socket, + final InetSocketAddress remoteAddress, + final InetSocketAddress localAddress, + final HttpParams params) + throws IOException, + UnknownHostException, + ConnectTimeoutException + { + if(remoteAddress == null) + { + throw new IllegalArgumentException("Remote address may not be null"); + } + if(params == null) + { + throw new IllegalArgumentException("HTTP parameters may not be null"); + } + Socket sock = socket != null ? + socket : this.context.getSocketFactory().createSocket(); + if(localAddress != null) + { + sock.setReuseAddress(HttpConnectionParams.getSoReuseaddr(params)); + sock.bind(localAddress); + } + + int connTimeout = HttpConnectionParams.getConnectionTimeout(params); + int soTimeout = HttpConnectionParams.getSoTimeout(params); + + try + { + sock.setSoTimeout(soTimeout); + sock.connect(remoteAddress, connTimeout); + } + catch(SocketTimeoutException ex) + { + throw new ConnectTimeoutException("Connect to " + remoteAddress + " timed out"); + } + + String hostname; + if(remoteAddress instanceof HttpInetSocketAddress) + { + hostname = ((HttpInetSocketAddress) remoteAddress) + .getHttpHost().getHostName(); + } + else + { + hostname = remoteAddress.getHostName(); + } + + SSLSocket sslsock; + // Setup SSL layering if necessary + if(sock instanceof SSLSocket) + { + sslsock = (SSLSocket) sock; + } + else + { + int port = remoteAddress.getPort(); + sslsock = (SSLSocket) this.context.getSocketFactory() + .createSocket(sock, hostname, port, true); + } + + return sslsock; + } +} diff --git a/src/net/java/sip/communicator/service/httputil/httputil.manifest.mf b/src/net/java/sip/communicator/service/httputil/httputil.manifest.mf index 3aae98642..435c0f90e 100644 --- a/src/net/java/sip/communicator/service/httputil/httputil.manifest.mf +++ b/src/net/java/sip/communicator/service/httputil/httputil.manifest.mf @@ -32,6 +32,7 @@ Import-Package: org.xml.sax, net.java.sip.communicator.service.resources, net.java.sip.communicator.service.certificate, net.java.sip.communicator.service.credentialsstorage, + net.java.sip.communicator.service.gui, net.java.sip.communicator.service.keybindings, net.java.sip.communicator.service.netaddr, net.java.sip.communicator.service.netaddr.event, @@ -47,14 +48,12 @@ Import-Package: org.xml.sax, org.apache.commons.codec.digest, org.apache.commons.codec.binary, org.apache.commons.logging, - javax.net.ssl, - javax.security.auth.x500 -Export-Package: net.java.sip.communicator.service.httputil, org.apache.http, org.apache.http.entity, org.apache.http.entity.mime, org.apache.http.entity.mime.content, org.apache.http.impl, + org.apache.http.impl.conn, org.apache.http.impl.entity, org.apache.http.impl.io, org.apache.http.io, @@ -77,4 +76,7 @@ Export-Package: net.java.sip.communicator.service.httputil, org.apache.http.conn.scheme, org.apache.http.conn.ssl, org.apache.http.conn.util, - org.apache.http.impl.client + org.apache.http.impl.client, + javax.net.ssl, + javax.security.auth.x500 +Export-Package: net.java.sip.communicator.service.httputil