1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski #ifndef _DRAFTS_COM_SUN_STAR_SCRIPT_FRAMEWORK_STORAGE_SCRIPTSTORAGEMANAGER_HXX_ 26*b1cdbd2cSJim Jagielski #define _DRAFTS_COM_SUN_STAR_SCRIPT_FRAMEWORK_STORAGE_SCRIPTSTORAGEMANAGER_HXX_ 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski #include <hash_map> 29*b1cdbd2cSJim Jagielski #include <map> 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx> 32*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase4.hxx> 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp> 35*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XEventListener.hpp> 36*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/IllegalArgumentException.hpp> 37*b1cdbd2cSJim Jagielski #include <com/sun/star/security/AccessControlException.hpp> 38*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/RuntimeException.hpp> 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski #include <drafts/com/sun/star/script/framework/storage/XScriptStorageManager.hpp> 41*b1cdbd2cSJim Jagielski #include <drafts/com/sun/star/script/framework/storage/XScriptStorageRefresh.hpp> 42*b1cdbd2cSJim Jagielski #include <drafts/com/sun/star/script/framework/storage/XScriptInfo.hpp> 43*b1cdbd2cSJim Jagielski #include <drafts/com/sun/star/script/framework/security/XScriptSecurity.hpp> 44*b1cdbd2cSJim Jagielski #include "ScriptSecurityManager.hxx" 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski namespace scripting_impl 48*b1cdbd2cSJim Jagielski { 49*b1cdbd2cSJim Jagielski // for simplification 50*b1cdbd2cSJim Jagielski #define css ::com::sun::star 51*b1cdbd2cSJim Jagielski #define dcsssf ::drafts::com::sun::star::script::framework 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski // Define a map used to store the ScriptingStorages key;d by ID 54*b1cdbd2cSJim Jagielski typedef ::std::map < sal_Int32, css::uno::Reference < css::uno::XInterface > > 55*b1cdbd2cSJim Jagielski ScriptStorage_map; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski typedef ::std::hash_map < ::rtl::OUString, sal_Int32, ::rtl::OUStringHash> 58*b1cdbd2cSJim Jagielski StorageId_hash; 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski class ScriptStorageManager : public 61*b1cdbd2cSJim Jagielski ::cppu::WeakImplHelper4 < dcsssf::storage::XScriptStorageManager, 62*b1cdbd2cSJim Jagielski dcsssf::security::XScriptSecurity, css::lang::XServiceInfo, 63*b1cdbd2cSJim Jagielski css::lang::XEventListener > 64*b1cdbd2cSJim Jagielski { 65*b1cdbd2cSJim Jagielski public: 66*b1cdbd2cSJim Jagielski explicit ScriptStorageManager( 67*b1cdbd2cSJim Jagielski const css::uno::Reference< css::uno::XComponentContext > & xContext ) 68*b1cdbd2cSJim Jagielski SAL_THROW ( ( css::uno::RuntimeException ) ); 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski ~ScriptStorageManager() SAL_THROW ( () ); 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski // XServiceInfo implementation 74*b1cdbd2cSJim Jagielski //====================================================================== 75*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getImplementationName() 76*b1cdbd2cSJim Jagielski throw( css::uno::RuntimeException ); 77*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------- 78*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) 79*b1cdbd2cSJim Jagielski throw( css::uno::RuntimeException ); 80*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------- 81*b1cdbd2cSJim Jagielski virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() 82*b1cdbd2cSJim Jagielski throw( css::uno::RuntimeException ); 83*b1cdbd2cSJim Jagielski //====================================================================== 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski //XScriptStorageManager 86*b1cdbd2cSJim Jagielski //====================================================================== 87*b1cdbd2cSJim Jagielski /** 88*b1cdbd2cSJim Jagielski create a ScriptStorage using the XSimpleFileAccess passed as an 89*b1cdbd2cSJim Jagielski argument, and return a ID for getting the associated ScriptStorage 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski @params xSFA 92*b1cdbd2cSJim Jagielski an implementation of XSimpleFileAccess that knows its own base URL 93*b1cdbd2cSJim Jagielski and can thus take URLs relative to that base. 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski @returns an unsigned short ScriptStorage ID, which can be used in the 96*b1cdbd2cSJim Jagielski getScriptStorage method 97*b1cdbd2cSJim Jagielski */ 98*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL createScriptStorage( 99*b1cdbd2cSJim Jagielski const css::uno::Reference< css::ucb::XSimpleFileAccess > & xSFA ) 100*b1cdbd2cSJim Jagielski throw ( css::uno::RuntimeException ); 101*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------- 102*b1cdbd2cSJim Jagielski /** 103*b1cdbd2cSJim Jagielski create a ScriptStorage using the XSimpleFileAccess, and a string URL 104*b1cdbd2cSJim Jagielski and return a ID for getting the associated ScriptStorage 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski @params xSFA 107*b1cdbd2cSJim Jagielski a standard implementation of XSimpleFileAccess 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski @params stringURI 110*b1cdbd2cSJim Jagielski a string URI to the head of the script storage 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski @returns an unsigned short ScriptStorage ID, which can be used in the 113*b1cdbd2cSJim Jagielski getScriptStorage method 114*b1cdbd2cSJim Jagielski */ 115*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL 116*b1cdbd2cSJim Jagielski createScriptStorageWithURI( 117*b1cdbd2cSJim Jagielski const css::uno::Reference< css::ucb::XSimpleFileAccess >& xSFA, 118*b1cdbd2cSJim Jagielski const ::rtl::OUString& stringURI ) 119*b1cdbd2cSJim Jagielski throw ( css::uno::RuntimeException ); 120*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------- 121*b1cdbd2cSJim Jagielski /** 122*b1cdbd2cSJim Jagielski get a ScriptStorage component using its scriptStorageID 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski @params scriptStorageID 125*b1cdbd2cSJim Jagielski the usigned short returned by one of the methods above. ID=0 is 126*b1cdbd2cSJim Jagielski reserved for the application/share scripts, and ID=1 is reserved 127*b1cdbd2cSJim Jagielski for the application/user scripts 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski @returns an XInterface to a component that implements the ScriptStorage 130*b1cdbd2cSJim Jagielski service 131*b1cdbd2cSJim Jagielski */ 132*b1cdbd2cSJim Jagielski virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getScriptStorage( 133*b1cdbd2cSJim Jagielski sal_Int32 scriptStorageID ) 134*b1cdbd2cSJim Jagielski throw ( css::uno::RuntimeException ); 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski /** 137*b1cdbd2cSJim Jagielski get a ScriptStorage ID using storage URI 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski @param scriptStorageURI 140*b1cdbd2cSJim Jagielski the file URL for the document will retrieve storage id for the document, special treatment is reserved for the strings "USER"and "SHARE" which 141*b1cdbd2cSJim Jagielski retrieve storage id for application/user application/share areas respectively. 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski @returns as long ScriptStorage ID (-1 if no storage exists), which can be used in getScriptStorage method. 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski */ 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL getScriptStorageID( const ::rtl::OUString& scriptStorageURI ) 149*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski /** 152*b1cdbd2cSJim Jagielski refresh a storage component using its URI 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski @param StringURI 155*b1cdbd2cSJim Jagielski URI of storage area, for documents, url to document eg, file:///home/user/ADocument.sxw To refresh the storage for user or share area, use USER or SHARE respectively instead or a url. 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski */ 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski virtual void SAL_CALL refreshScriptStorage(const ::rtl::OUString & stringURI) 160*b1cdbd2cSJim Jagielski throw ( css::uno::RuntimeException ); 161*b1cdbd2cSJim Jagielski //====================================================================== 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski //XScriptSecurity 164*b1cdbd2cSJim Jagielski //====================================================================== 165*b1cdbd2cSJim Jagielski //---------------------------------------------------------------------- 166*b1cdbd2cSJim Jagielski /** 167*b1cdbd2cSJim Jagielski the language independent interface for invocation 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski @param scriptURI 170*b1cdbd2cSJim Jagielski a string containing the script URI 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski @returns 173*b1cdbd2cSJim Jagielski the value returned from the function being invoked 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski @throws IllegalArgumentException 176*b1cdbd2cSJim Jagielski if there is no matching script name 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski */ 179*b1cdbd2cSJim Jagielski virtual void SAL_CALL ScriptStorageManager::checkPermission( 180*b1cdbd2cSJim Jagielski const rtl::OUString & scriptStorageURI, 181*b1cdbd2cSJim Jagielski const rtl::OUString & permissionRequest ) 182*b1cdbd2cSJim Jagielski throw ( css::uno::RuntimeException, css::lang::IllegalArgumentException, 183*b1cdbd2cSJim Jagielski css::security::AccessControlException ); 184*b1cdbd2cSJim Jagielski //====================================================================== 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski //XEventListener 187*b1cdbd2cSJim Jagielski //====================================================================== 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) 190*b1cdbd2cSJim Jagielski throw ( css::uno::RuntimeException ); 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski private: 193*b1cdbd2cSJim Jagielski ScriptStorageManager( const ScriptStorageManager & ); 194*b1cdbd2cSJim Jagielski ScriptStorageManager& operator= ( const ScriptStorageManager & ); 195*b1cdbd2cSJim Jagielski 196*b1cdbd2cSJim Jagielski void removeScriptDocURIHashEntry( const ::rtl::OUString & origURI ); 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski // to obtain other services if needed 199*b1cdbd2cSJim Jagielski css::uno::Reference< css::uno::XComponentContext > m_xContext; 200*b1cdbd2cSJim Jagielski css::uno::Reference< css::lang::XMultiComponentFactory > m_xMgr; 201*b1cdbd2cSJim Jagielski ::osl::Mutex m_mutex; 202*b1cdbd2cSJim Jagielski ScriptStorage_map m_ScriptStorageMap; 203*b1cdbd2cSJim Jagielski StorageId_hash m_StorageIdOrigURIHash; 204*b1cdbd2cSJim Jagielski sal_Int32 m_count; 205*b1cdbd2cSJim Jagielski scripting_securitymgr::ScriptSecurityManager m_securityMgr; 206*b1cdbd2cSJim Jagielski 207*b1cdbd2cSJim Jagielski void setupAppStorage( const css::uno::Reference< css::util::XMacroExpander > & xME, 208*b1cdbd2cSJim Jagielski const ::rtl::OUString & storageStr, 209*b1cdbd2cSJim Jagielski const ::rtl::OUString & appStr) 210*b1cdbd2cSJim Jagielski SAL_THROW ( ( css::uno::RuntimeException ) ); 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielski sal_Int32 setupAnyStorage( 213*b1cdbd2cSJim Jagielski const css::uno::Reference< css::ucb::XSimpleFileAccess> & xSFA, 214*b1cdbd2cSJim Jagielski const ::rtl::OUString & storageStr, 215*b1cdbd2cSJim Jagielski const ::rtl::OUString & origStringURI ) 216*b1cdbd2cSJim Jagielski SAL_THROW ( ( css::uno::RuntimeException ) ); 217*b1cdbd2cSJim Jagielski 218*b1cdbd2cSJim Jagielski }; 219*b1cdbd2cSJim Jagielski } // scripting_impl 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski #endif //_COM_SUN_STAR_SCRIPTING_STORAGE_SCRIPTSTORAGEMANAGER_HXX_ 222