Show a dialog to request username and password to the user on authentication request

This commit is contained in:
jabarros 2014-08-28 12:30:32 +02:00
parent 06fc13164e
commit d3d0816ed7
2 changed files with 70 additions and 3 deletions

View file

@ -286,4 +286,6 @@
<string name="prefs_add_account">Add account</string> <string name="prefs_add_account">Add account</string>
<string name="auth_redirect_non_secure_connection_title">Secure connection is redirected through an unsecured route.</string> <string name="auth_redirect_non_secure_connection_title">Secure connection is redirected through an unsecured route.</string>
<string name="saml_authentication_required_text">Authentication required</string>
</resources> </resources>

View file

@ -24,16 +24,17 @@ import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory; import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import com.owncloud.android.lib.common.network.NetworkUtils; import android.app.AlertDialog;
import com.owncloud.android.utils.Log_OC; import android.app.AlertDialog.Builder;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.net.http.SslCertificate; import android.net.http.SslCertificate;
import android.net.http.SslError; import android.net.http.SslError;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.text.InputType;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.webkit.CookieManager; import android.webkit.CookieManager;
@ -42,6 +43,12 @@ import android.webkit.SslErrorHandler;
import android.webkit.WebResourceResponse; import android.webkit.WebResourceResponse;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.LinearLayout;
import com.owncloud.android.R;
import com.owncloud.android.lib.common.network.NetworkUtils;
import com.owncloud.android.utils.Log_OC;
/** /**
@ -195,6 +202,10 @@ public class SsoWebViewClient extends WebViewClient {
@Override @Override
public void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm) { public void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm) {
Log_OC.d(TAG, "onReceivedHttpAuthRequest : " + host); Log_OC.d(TAG, "onReceivedHttpAuthRequest : " + host);
// Toast.makeText(mContext, "onReceivedHttpAuthRequest : " + host, Toast.LENGTH_LONG).show();
createAuthenticationDialog(view, handler);
} }
@Override @Override
@ -230,4 +241,58 @@ public class SsoWebViewClient extends WebViewClient {
return false; return false;
} }
/**
* Create dialog for request authentication to the user
* @param webView
* @param handler
*/
private void createAuthenticationDialog(WebView webView, HttpAuthHandler handler) {
final WebView mWebView = webView;
final HttpAuthHandler mHandler = handler;
// Create field for username
final EditText usernameET = new EditText(mContext);
usernameET.setHint(mContext.getText(R.string.auth_username));
// Create field for password
final EditText passwordET = new EditText(mContext);
passwordET.setHint(mContext.getText(R.string.auth_password));
passwordET.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
// Prepare LinearLayout for dialog
LinearLayout ll = new LinearLayout(mContext);
ll.setOrientation(LinearLayout.VERTICAL);
ll.addView(usernameET);
ll.addView(passwordET);
Builder authDialog = new AlertDialog
.Builder(mContext)
.setTitle(mContext.getText(R.string.saml_authentication_required_text))
.setView(ll)
.setCancelable(false)
.setPositiveButton(mContext.getText(R.string.common_ok),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String username = usernameET.getText().toString().trim();
String password = passwordET.getText().toString().trim();
// Proceed with the authentication
mHandler.proceed(username, password);
dialog.dismiss();
}
})
.setNegativeButton(mContext.getText(R.string.common_cancel),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
mWebView.stopLoading();
}
});
if (mWebView!=null) {
authDialog.show();
}
}
} }