summaryrefslogtreecommitdiff
path: root/scripting/workben/ifc/scripting/_XScriptSecurity.java
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/workben/ifc/scripting/_XScriptSecurity.java')
-rw-r--r--scripting/workben/ifc/scripting/_XScriptSecurity.java409
1 files changed, 409 insertions, 0 deletions
diff --git a/scripting/workben/ifc/scripting/_XScriptSecurity.java b/scripting/workben/ifc/scripting/_XScriptSecurity.java
new file mode 100644
index 000000000000..ee5ade31e7f4
--- /dev/null
+++ b/scripting/workben/ifc/scripting/_XScriptSecurity.java
@@ -0,0 +1,409 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package ifc.script.framework.security;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Collection;
+
+import drafts.com.sun.star.script.framework.security.XScriptSecurity;
+import drafts.com.sun.star.script.framework.storage.XScriptStorageManager;
+
+import com.sun.star.lang.XMultiServiceFactory;
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.beans.XPropertySet;
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.uno.XComponentContext;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.uno.XInterface;
+import com.sun.star.frame.XModel;
+import com.sun.star.container.XNameReplace;
+import com.sun.star.util.XChangesBatch;
+import com.sun.star.reflection.InvocationTargetException;
+
+import ifc.script.framework.SecurityDialogUtil;
+
+import lib.MultiMethodTest;
+import lib.StatusException;
+import lib.Parameters;
+import util.SOfficeFactory;
+
+public class _XScriptSecurity extends MultiMethodTest {
+
+ public XScriptSecurity oObj = null;
+ private XScriptStorageManager storageManager = null;
+
+ /**
+ * Retrieves object relation.
+ */
+ public void before() throws StatusException {
+ }
+
+ public void after() throws StatusException {
+ }
+
+ public void _checkPermission() {
+ boolean result = true;
+
+ Collection c =
+ (Collection) tEnv.getObjRelation("_checkPermission");
+
+ Iterator tests;
+
+ if (c != null) {
+ tests = c.iterator();
+
+ while (tests.hasNext()) {
+ result &= runCheckPermissionTest((Parameters)tests.next());
+ }
+ }
+ else {
+ result = false;
+ }
+
+ // set security to always without confirmation dialog and empty path
+ // list so other tests can run without dialog popping up
+ setSecurity(2, "false", "false", null);
+
+ tRes.tested("checkPermission()", result);
+ }
+
+ private boolean runCheckPermissionTest(Parameters testdata) {
+ // description of test
+ String description = testdata.get("description");
+
+ // document location
+ String location = testdata.get("location");
+
+ //security settings
+ String runmacro = testdata.get("runmacro");
+ String confirm = testdata.get("confirm");
+ String warning = testdata.get("warning");
+ String pathlist = testdata.get("pathlist");
+
+ //do this test produce a dialog?
+ String dialog = testdata.get("dialog");
+ //is checkbox to be ticked?
+ String checkBoxStr = testdata.get("checkbox");
+ //name of button in dialog to press
+ String buttonName = testdata.get("buttonName");
+
+ //expected result
+ String expected = testdata.get("expected");
+ //do we need to check the pathlist?
+ String checkpath = testdata.get("checkpath");
+
+ String output = null;
+
+ log.println(description);
+
+ // get the officeBasic setting
+ int officeBasic = 0;
+ if( runmacro.equals("never") )
+ {
+ officeBasic = 0;
+ }
+ else if ( runmacro.equals("pathlist") )
+ {
+ officeBasic = 1;
+ }
+ else if ( runmacro.equals("always") )
+ {
+ officeBasic = 2;
+ }
+
+ // should pathlist include doc?
+ String secureURLs = null;
+ if( pathlist.equals("true") )
+ {
+ String uri = util.utils.getFullTestURL(location);
+ secureURLs = uri.substring(0, uri.lastIndexOf('/'));
+ }
+
+ if ( !setSecurity( officeBasic, confirm, warning, secureURLs ) )
+ {
+ log.println( "failed to set security" );
+ return false;
+ }
+
+ if( dialog.equals( "true" ) )
+ {
+ // is the checkbox to be ticked?
+ boolean checkBox = false;
+ if( checkBoxStr.equals( "true" ) )
+ {
+ checkBox = true;
+ }
+ new SecurityDialogUtil( tParam.getMSF(), buttonName, checkBox ).start();
+ }
+ // need to set up dialog utils thread first
+ int storageId = getStorageId(location);
+
+ try {
+ String uri = util.utils.getFullTestURL(location);
+ oObj.checkPermission(uri, "execute" );
+ output = "true";
+ }
+ catch (com.sun.star.security.AccessControlException ace) {
+ log.println("Couldn't invoke script:" + ace);
+ output = "com.sun.star.security.AccessControlException";
+ }
+ catch (com.sun.star.lang.IllegalArgumentException iae) {
+ log.println("Couldn't invoke script:" + iae);
+ output = "com.sun.star.lang.IllegalArgumentException";
+ }
+ catch (com.sun.star.uno.RuntimeException re) {
+ log.println("Couldn't invoke script:" + re);
+ output = "com.sun.star.uno.RuntimeException";
+ }
+
+ log.println("expected: " + expected + ", output: " + output);
+ if (output.equals(expected))
+ {
+ if( checkpath.equals("true") )
+ {
+ String setPath = getPathList();
+ String expectedPath = "empty";
+ if( checkBoxStr.equals( "true" ) )
+ {
+ String uri = util.utils.getFullTestURL(location);
+ expectedPath = uri.substring(0, uri.lastIndexOf('/'));
+ }
+ log.println("pathlist: expected: " + expectedPath + ", output: " + setPath);
+ if( setPath.equals( expectedPath ) )
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ else
+ return false;
+ }
+
+ private String getPathList()
+ {
+ String result = "";
+ try {
+ Object oProv = tParam.getMSF().createInstance(
+ "com.sun.star.configuration.ConfigurationProvider" );
+
+ XMultiServiceFactory xProv = (XMultiServiceFactory)
+ UnoRuntime.queryInterface(XMultiServiceFactory.class, oProv);
+
+ //the path to the security settings in the registry
+ PropertyValue aPathArg = new PropertyValue();
+ aPathArg.Name="nodepath";
+ aPathArg.Value="org.openoffice.Office.Common/Security/Scripting";
+ // we don't want to cache the write
+ PropertyValue aModeArg = new PropertyValue();
+ aModeArg.Name="lazywrite";
+ aModeArg.Value=new Boolean(false);
+
+ Object[] aArgs = new Object[2];
+ aArgs[0]=aPathArg;
+ aArgs[1]=aModeArg;
+ Object oConfigUpdate = xProv.createInstanceWithArguments(
+ "com.sun.star.configuration.ConfigurationAccess",
+ aArgs );
+ XPropertySet xPropertySet = (XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, oConfigUpdate );
+
+ String[] paths = (String[])xPropertySet.getPropertyValue("SecureURL");
+ if (paths == null || paths.length == 0)
+ result = "empty";
+ else
+ result = paths[0];
+
+ } catch (Exception e)
+ {
+ result = e.getClass().getName() + " getting list of secure URLs";
+ }
+ return result;
+ }
+
+ private boolean setSecurity( int officeBasic, String confirm,
+ String warning, String secureURLs )
+ {
+ boolean success=false;
+ try {
+ Object oProv = tParam.getMSF().createInstance(
+ "com.sun.star.configuration.ConfigurationProvider" );
+
+ XMultiServiceFactory xProv = (XMultiServiceFactory)
+ UnoRuntime.queryInterface(XMultiServiceFactory.class, oProv);
+
+ //the path to the security settings in the registry
+ PropertyValue aPathArg = new PropertyValue();
+ aPathArg.Name="nodepath";
+ aPathArg.Value="org.openoffice.Office.Common/Security/Scripting";
+ // we don't want to cache the write
+ PropertyValue aModeArg = new PropertyValue();
+ aModeArg.Name="lazywrite";
+ aModeArg.Value=new Boolean(false);
+
+ Object[] aArgs = new Object[2];
+ aArgs[0]=aPathArg;
+ aArgs[1]=aModeArg;
+ Object oConfigUpdate = xProv.createInstanceWithArguments(
+ "com.sun.star.configuration.ConfigurationUpdateAccess",
+ aArgs );
+ XNameReplace xNameReplace = (XNameReplace)UnoRuntime.queryInterface(
+ XNameReplace.class, oConfigUpdate );
+ XChangesBatch xChangesBatch = (XChangesBatch)UnoRuntime.queryInterface(
+ XChangesBatch.class, oConfigUpdate );
+
+ Object[] aSecureURLs;
+ if (secureURLs == null) {
+ aSecureURLs = new Object[0];
+ }
+ else {
+ aSecureURLs = new Object[1];
+ aSecureURLs[0] = secureURLs;
+ }
+ log.println("setting SecureURL");
+ xNameReplace.replaceByName( "SecureURL", aSecureURLs );
+
+ log.println("setting OfficeBasic");
+ xNameReplace.replaceByName( "OfficeBasic", new Integer(officeBasic) );
+
+ Boolean bConfirm = null;
+ if( ( confirm != null ) && ( confirm.equals("true") ) )
+ {
+ bConfirm = new Boolean( true );
+ }
+ else
+ {
+ bConfirm = new Boolean( false );
+ }
+ log.println("setting Confirmation");
+ xNameReplace.replaceByName( "Confirmation", bConfirm );
+
+ Boolean bWarning = null;
+ if( ( warning != null ) && ( warning.equals("true") ) )
+ {
+ bWarning = new Boolean( true );
+ }
+ else
+ {
+ bWarning = new Boolean( false );
+ }
+ log.println("setting Warning");
+ xNameReplace.replaceByName( "Warning", bWarning );
+
+ // and now commit the changes
+ xChangesBatch.commitChanges();
+ success=true;
+ } catch (Exception e) {
+ log.println("Error updating security settings: " +
+ e.getMessage() );
+ }
+ return success;
+ }
+
+ private int getStorageId(String location) {
+
+ XSimpleFileAccess access = null;
+ String uri = util.utils.getFullTestURL(location);
+
+ if (storageManager == null) {
+ try {
+ XPropertySet xProp = (XPropertySet)UnoRuntime.queryInterface(
+ XPropertySet.class, tParam.getMSF());
+
+ XComponentContext xContext = (XComponentContext)
+ UnoRuntime.queryInterface(XComponentContext.class,
+ xProp.getPropertyValue("DefaultContext"));
+
+ XInterface ifc = (XInterface)
+ xContext.getValueByName("/singletons/drafts.com.sun.star." +
+ "script.framework.storage.theScriptStorageManager");
+
+ storageManager = (XScriptStorageManager)
+ UnoRuntime.queryInterface(XScriptStorageManager.class, ifc);
+ }
+ catch( Exception e ) {
+ return -1;
+ }
+ }
+
+ access = getXSimpleFileAccess();
+ if (access == null)
+ return -1;
+
+ int id = storageManager.createScriptStorageWithURI(access, uri);
+
+ return id;
+ }
+
+ private XSimpleFileAccess getXSimpleFileAccess() {
+ XSimpleFileAccess access = null;
+
+ try {
+ Object fa = tParam.getMSF().createInstance(
+ "com.sun.star.ucb.SimpleFileAccess");
+
+ access = (XSimpleFileAccess)
+ UnoRuntime.queryInterface(XSimpleFileAccess.class, fa);
+ }
+ catch (com.sun.star.uno.Exception e) {
+ return null;
+ }
+ return access;
+ }
+
+ private XModel loadDocument(String name) {
+ XModel model = null;
+ SOfficeFactory factory = SOfficeFactory.getFactory(tParam.getMSF());
+
+ String fullname = util.utils.getFullTestURL(name);
+
+ try {
+ Object obj = factory.loadDocument(fullname);
+ model = (XModel) UnoRuntime.queryInterface(XModel.class, obj);
+ }
+ catch (com.sun.star.lang.IllegalArgumentException iae) {
+ return null;
+ }
+ catch (Exception e) {
+ return null;
+ }
+
+ try {
+ Thread.sleep(5000);
+ }
+ catch (InterruptedException ie) {
+ }
+
+ return model;
+ }
+}