123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /*
- 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.test;
-
- import org.apache.cordova.Whitelist;
- import org.apache.cordova.Config;
-
- import org.apache.cordova.CallbackContext;
- import org.apache.cordova.CordovaPlugin;
- import org.apache.cordova.PluginResult;
- import org.json.JSONArray;
- import org.json.JSONException;
-
- import org.apache.cordova.PluginManager;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
-
- public class WhitelistAPI extends CordovaPlugin {
- /**
- * Executes the request and returns PluginResult.
- *
- * @param action The action to execute.
- * @param args JSONArry of arguments for the plugin.
- * @param callbackContext The callback id used when calling back into JavaScript.
- * @return True if the action was valid, false if not.
- */
- public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
- if (action.equals("URLMatchesPatterns")) {
- String url = args.getString(0);
- JSONArray patterns = args.getJSONArray(1);
- Whitelist whitelist = new Whitelist();
- for (int i=0; i < patterns.length(); i++) {
- String pattern = patterns.getString(i);
- whitelist.addWhiteListEntry(pattern, false);
- }
- boolean isAllowed = whitelist.isUrlWhiteListed(url);
- callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, isAllowed));
- return true;
- } else if (action.equals("URLIsAllowed")) {
- String url = args.getString(0);
- /* This code exists for compatibility between 3.x and 4.x versions of Cordova.
- * Previously the CordovaWebView class had a method, getWhitelist, which would
- * return a Whitelist object. Since the fixed whitelist is removed in Cordova 4.x,
- * the correct call now is to shouldAllowRequest from the plugin manager.
- */
- Boolean isAllowed = null;
- try {
- Method isUrlWhiteListed = Config.class.getDeclaredMethod("isUrlWhitelisted", String.class);
- isAllowed = (Boolean)isUrlWhiteListed.invoke(url);
- } catch (NoSuchMethodException e) {
- } catch (IllegalAccessException e) {
- } catch (InvocationTargetException e) {
- }
- if (isAllowed == null) {
- try {
- Method gpm = webView.getClass().getMethod("getPluginManager");
- PluginManager pm = (PluginManager)gpm.invoke(webView);
- Method isAllowedMethod = pm.getClass().getMethod("shouldAllowRequest", String.class);
- isAllowed = (Boolean)isAllowedMethod.invoke(pm, url);
- if (isAllowed == null) {
- isAllowed = false;
- }
- } catch (NoSuchMethodException e) {
- } catch (IllegalAccessException e) {
- } catch (InvocationTargetException e) {
- }
- }
-
- callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, isAllowed));
- return true;
- }
- return false;
- }
- }
|