mirror of
https://github.com/apache/cordova-android.git
synced 2025-03-15 07:41:03 +08:00
CB-8201 Add support for auth dialogs into Cordova Android
This commit is contained in:
parent
240f27ce97
commit
11002d4a56
51
framework/src/org/apache/cordova/CordovaHttpAuthHandler.java
Normal file
51
framework/src/org/apache/cordova/CordovaHttpAuthHandler.java
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.cordova;
|
||||||
|
|
||||||
|
import android.webkit.HttpAuthHandler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies interface for HTTP auth handler object which is used to handle auth requests and
|
||||||
|
* specifying user credentials.
|
||||||
|
*/
|
||||||
|
public class CordovaHttpAuthHandler implements ICordovaHttpAuthHandler {
|
||||||
|
|
||||||
|
private final HttpAuthHandler handler;
|
||||||
|
|
||||||
|
public CordovaHttpAuthHandler(HttpAuthHandler handler) {
|
||||||
|
this.handler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instructs the WebView to cancel the authentication request.
|
||||||
|
*/
|
||||||
|
public void cancel () {
|
||||||
|
this.handler.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instructs the WebView to proceed with the authentication with the given credentials.
|
||||||
|
*
|
||||||
|
* @param username
|
||||||
|
* @param password
|
||||||
|
*/
|
||||||
|
public void proceed (String username, String password) {
|
||||||
|
this.handler.proceed(username, password);
|
||||||
|
}
|
||||||
|
}
|
@ -198,4 +198,20 @@ public class CordovaPlugin {
|
|||||||
*/
|
*/
|
||||||
public void onReset() {
|
public void onReset() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the system received an HTTP authentication request. Plugin can use
|
||||||
|
* the supplied HttpAuthHandler to process this auth challenge.
|
||||||
|
*
|
||||||
|
* @param view The WebView that is initiating the callback
|
||||||
|
* @param handler The HttpAuthHandler used to set the WebView's response
|
||||||
|
* @param host The host requiring authentication
|
||||||
|
* @param realm The realm for which authentication is required
|
||||||
|
*
|
||||||
|
* @return Returns True if plugin will resolve this auth challenge, otherwise False
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public boolean onReceivedHttpAuthRequest(CordovaWebView view, ICordovaHttpAuthHandler handler, String host, String realm) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,15 +115,22 @@ public class CordovaWebViewClient 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) {
|
||||||
|
|
||||||
// Get the authentication token
|
// Get the authentication token (if specified)
|
||||||
AuthenticationToken token = this.getAuthenticationToken(host, realm);
|
AuthenticationToken token = this.getAuthenticationToken(host, realm);
|
||||||
if (token != null) {
|
if (token != null) {
|
||||||
handler.proceed(token.getUserName(), token.getPassword());
|
handler.proceed(token.getUserName(), token.getPassword());
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
// Handle 401 like we'd normally do!
|
// Check if there is some plugin which can resolve this auth challenge
|
||||||
super.onReceivedHttpAuthRequest(view, handler, host, realm);
|
PluginManager pluginManager = this.appView.pluginManager;
|
||||||
|
if (pluginManager != null && pluginManager.onReceivedHttpAuthRequest(this.appView, new CordovaHttpAuthHandler(handler), host, realm)) {
|
||||||
|
this.appView.loadUrlTimeout++;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// By default handle 401 like we'd normally do!
|
||||||
|
super.onReceivedHttpAuthRequest(view, handler, host, realm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.cordova;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies interface for HTTP auth handler object which is used to handle auth requests and
|
||||||
|
* specifying user credentials.
|
||||||
|
*/
|
||||||
|
public interface ICordovaHttpAuthHandler {
|
||||||
|
/**
|
||||||
|
* Instructs the WebView to cancel the authentication request.
|
||||||
|
*/
|
||||||
|
public void cancel ();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instructs the WebView to proceed with the authentication with the given credentials.
|
||||||
|
*
|
||||||
|
* @param username The user name
|
||||||
|
* @param password The password
|
||||||
|
*/
|
||||||
|
public void proceed (String username, String password);
|
||||||
|
}
|
@ -242,6 +242,27 @@ public class PluginManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the system received an HTTP authentication request. Plugins can use
|
||||||
|
* the supplied HttpAuthHandler to process this auth challenge.
|
||||||
|
*
|
||||||
|
* @param view The WebView that is initiating the callback
|
||||||
|
* @param handler The HttpAuthHandler used to set the WebView's response
|
||||||
|
* @param host The host requiring authentication
|
||||||
|
* @param realm The realm for which authentication is required
|
||||||
|
*
|
||||||
|
* @return Returns True if there is a plugin which will resolve this auth challenge, otherwise False
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public boolean onReceivedHttpAuthRequest(CordovaWebView view, ICordovaHttpAuthHandler handler, String host, String realm) {
|
||||||
|
for (CordovaPlugin plugin : this.pluginMap.values()) {
|
||||||
|
if (plugin != null && plugin.onReceivedHttpAuthRequest(view, handler, host, realm)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the activity will start interacting with the user.
|
* Called when the activity will start interacting with the user.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user