summaryrefslogtreecommitdiff
path: root/sfx2/source/appl/appopen.cxx
diff options
context:
space:
mode:
authorOliver Bolte <obo@openoffice.org>2009-09-07 14:41:16 +0000
committerOliver Bolte <obo@openoffice.org>2009-09-07 14:41:16 +0000
commit9fc697a9453d8334a9d923c70ec30ef23fd16e16 (patch)
tree197af40eece59c0aca1f9ac1ef8948cc7689dba8 /sfx2/source/appl/appopen.cxx
parent1e502bed77b503b4ebe4b08c569daa152bcf7bea (diff)
CWS-TOOLING: integrate CWS dr72
2009-08-26 10:24:00 +0200 dr r275402 : #i92645# CODEPAGE is encrypted... 2009-08-24 14:37:36 +0200 dr r275316 : #i10000# enable exceptions for xlroot.cxx 2009-08-24 14:33:15 +0200 dr r275313 : #i10000# link openssl under solaris correctly 2009-08-21 17:41:16 +0200 dr r275267 : #i10000# unxlngi6 warning 2009-08-21 15:35:56 +0200 dr r275265 : #i10000# remove files again, already deleted in previous milestone... 2009-08-21 11:24:57 +0200 dr r275227 : #160401# port to DEV300 2009-08-21 09:53:45 +0200 dr r275221 : #i92645# full support for encrypted Word2007 files 2009-08-21 09:50:52 +0200 dr r275219 : #i92645# final changes for decryption 2009-08-20 19:48:40 +0200 dr r275195 : #i104370# missing parentheses, patch from cmc 2009-08-20 18:28:22 +0200 dr r275193 : #i92645# rework package decryption to repair 'Reload Document' functionality 2009-08-20 13:55:14 +0200 dr r275179 : #i92645# add new property names 2009-08-19 19:24:21 +0200 dr r275159 : #160401# open writeprotected files read-only, merged to DEV300 2009-08-18 14:41:47 +0200 dr r275109 : #i92645# add 'Aborted' property 2009-08-18 11:20:34 +0200 dr r275084 : #i92645# write back password to medium 2009-08-17 17:52:51 +0200 dr r275066 : #i92645# detect Word2007 docs with oox detection impl, this adds support of encryped Word2007; correct detection of templates and macro-enabled docs 2009-08-17 17:51:31 +0200 dr r275065 : #i92645# detect Word2007 docs with oox detection impl, this adds support of encryped Word2007; correct detection of templates and macro-enabled docs 2009-08-17 11:06:39 +0200 dr r275035 : #i92645# more password handling 2009-08-17 11:05:21 +0200 dr r275034 : #i92645# use new password input mechanism for BIFF filter and dumper in oox 2009-08-14 16:33:53 +0200 nn r274996 : #i104228# DelBroadcastAreasInRange: remove area from hash_set before deleting 2009-08-14 16:27:12 +0200 nn r274995 : #i104059# restore a change lost in the integration of fhawfixes1 2009-08-14 16:24:00 +0200 dr r274994 : #i92645# adapt BIFF import to latest changes 2009-08-14 16:21:30 +0200 dr r274993 : #i92645# adapt BIFF import to latest changes 2009-08-14 16:20:43 +0200 dr r274992 : #i92645# do not add default passwords to media descriptor 2009-08-13 19:20:45 +0200 dr r274965 : #i92645# add a helper to request a document password 2009-08-13 19:09:35 +0200 dr r274964 : #i92645# add a helper to request a document password 2009-08-13 19:09:03 +0200 dr r274963 : #i92645# add a helper to request a document password 2009-08-13 14:35:01 +0200 dr r274946 : #i92645# comment typo 2009-08-13 14:33:47 +0200 dr r274945 : #i92645# add a helper to request a document password 2009-08-13 14:04:47 +0200 dr r274941 : #i92645# add a helper to request a document password 2009-08-13 14:04:22 +0200 dr r274940 : #i92645# add a helper to request a document password 2009-08-13 11:16:27 +0200 dr r274927 : #i42303# show quick help if field name too long for button 2009-08-13 10:55:48 +0200 dr r274925 : #i31600# cut field name and add ellipsis, if too long for button 2009-08-12 18:47:26 +0200 dr r274914 : #i92645# ask user for a password 2009-08-12 18:02:39 +0200 dr r274909 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:59:11 +0200 dr r274906 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:41:18 +0200 dr r274905 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:40:33 +0200 dr r274904 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:40:08 +0200 dr r274903 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:39:30 +0200 dr r274902 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:15:28 +0200 dr r274899 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-11 19:51:12 +0200 dr r274877 : #i92645# open encrypted MSOOXML package protected with standard XL password 'VelvetSweatshop'
Diffstat (limited to 'sfx2/source/appl/appopen.cxx')
-rw-r--r--sfx2/source/appl/appopen.cxx112
1 files changed, 56 insertions, 56 deletions
diff --git a/sfx2/source/appl/appopen.cxx b/sfx2/source/appl/appopen.cxx
index 1351b21dc2..669a76ba0c 100644
--- a/sfx2/source/appl/appopen.cxx
+++ b/sfx2/source/appl/appopen.cxx
@@ -1,7 +1,7 @@
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
+ *
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
@@ -48,7 +48,6 @@
#include <com/sun/star/system/SystemShellExecuteFlags.hpp>
#include <com/sun/star/document/MacroExecMode.hpp>
#include <com/sun/star/document/UpdateDocMode.hpp>
-#include <com/sun/star/task/XInteractionRequest.hpp>
#include <com/sun/star/task/ErrorCodeRequest.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/embed/ElementModes.hpp>
@@ -81,7 +80,7 @@
#include <svtools/templdlg.hxx>
#include <osl/file.hxx>
#include <svtools/extendedsecurityoptions.hxx>
-#include <svtools/docpasswdrequest.hxx>
+#include <comphelper/docpasswordhelper.hxx>
#include <vcl/svapp.hxx>
#include <vos/mutex.hxx>
@@ -247,6 +246,50 @@ void SetTemplate_Impl( const String &rFileName,
//--------------------------------------------------------------------
+class SfxDocPasswordVerifier : public ::comphelper::IDocPasswordVerifier
+{
+public:
+ inline explicit SfxDocPasswordVerifier( const Reference< embed::XStorage >& rxStorage ) :
+ mxStorage( rxStorage ) {}
+
+ virtual ::comphelper::DocPasswordVerifierResult
+ verifyPassword( const ::rtl::OUString& rPassword );
+
+private:
+ Reference< embed::XStorage > mxStorage;
+};
+
+::comphelper::DocPasswordVerifierResult SfxDocPasswordVerifier::verifyPassword( const ::rtl::OUString& rPassword )
+{
+ ::comphelper::DocPasswordVerifierResult eResult = ::comphelper::DocPasswordVerifierResult_WRONG_PASSWORD;
+ try
+ {
+ // check the password
+ // if the password correct is the stream will be opened successfuly
+ // and immediatelly closed
+ ::comphelper::OStorageHelper::SetCommonStoragePassword( mxStorage, rPassword );
+
+ mxStorage->openStreamElement(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "content.xml" ) ),
+ embed::ElementModes::READ | embed::ElementModes::NOCREATE );
+
+ // no exception -> success
+ eResult = ::comphelper::DocPasswordVerifierResult_OK;
+ }
+ catch( const packages::WrongPasswordException& )
+ {
+ eResult = ::comphelper::DocPasswordVerifierResult_WRONG_PASSWORD;
+ }
+ catch( const uno::Exception& )
+ {
+ // unknown error, do not try to ask again
+ eResult = ::comphelper::DocPasswordVerifierResult_ABORT;
+ }
+ return eResult;
+}
+
+//--------------------------------------------------------------------
+
sal_uInt32 CheckPasswd_Impl
(
//Window *pWin, // Parent des Dialogs
@@ -302,56 +345,13 @@ sal_uInt32 CheckPasswd_Impl
Reference< ::com::sun::star::task::XInteractionHandler > xInteractionHandler = pFile->GetInteractionHandler();
if( xInteractionHandler.is() )
{
- sal_Bool bRetry = sal_True;
- sal_Bool bGotPasswd = sal_False;
- ::rtl::OUString aPassword;
- ::com::sun::star::task::PasswordRequestMode nDlgMode = ::com::sun::star::task::PasswordRequestMode_PASSWORD_ENTER;
-
- while( bRetry )
- {
- bRetry = sal_False;
-
- RequestDocumentPassword* pPasswordRequest = new RequestDocumentPassword( nDlgMode,
- INetURLObject( pFile->GetOrigURL() ).GetMainURL( INetURLObject::DECODE_WITH_CHARSET ) );
-
- Reference< XInteractionRequest > rRequest( pPasswordRequest );
- xInteractionHandler->handle( rRequest );
-
- if ( pPasswordRequest->isPassword() )
- {
- aPassword = pPasswordRequest->getPassword();
- bGotPasswd = sal_True;
-
- try
- {
- // check the password
- // if the password correct is the stream will be opened successfuly
- // and immediatelly closed
- ::comphelper::OStorageHelper::SetCommonStoragePassword(
- xStorage,
- aPassword );
-
- xStorage->openStreamElement(
- ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "content.xml" ) ),
- embed::ElementModes::READ | embed::ElementModes::NOCREATE );
- }
- catch( const packages::WrongPasswordException& )
- {
- // reask for the password
- nDlgMode = ::com::sun::star::task::PasswordRequestMode_PASSWORD_REENTER;
- bRetry = sal_True;
- }
- catch( const uno::Exception& )
- {
- // do nothing special
- // the error will be detected by loading
- }
- }
- else
- bGotPasswd = sal_False;
- }
+ // use the comphelper password helper to request a password
+ ::rtl::OUString aDocumentName = INetURLObject( pFile->GetOrigURL() ).GetMainURL( INetURLObject::DECODE_WITH_CHARSET );
+ SfxDocPasswordVerifier aVerifier( xStorage );
+ ::rtl::OUString aPassword = ::comphelper::DocPasswordHelper::requestAndVerifyDocPassword(
+ aVerifier, ::rtl::OUString(), xInteractionHandler, aDocumentName, comphelper::DocPasswordRequestType_STANDARD );
- if ( bGotPasswd )
+ if ( aPassword.getLength() > 0 )
{
pSet->Put( SfxStringItem( SID_PASSWORD, aPassword ) );
@@ -893,7 +893,7 @@ void SfxApplication::OpenDocExec_Impl( SfxRequest& rReq )
nDialog = pSystemDialogItem->GetValue() ? SFX2_IMPL_DIALOG_SYSTEM : SFX2_IMPL_DIALOG_OOO;
String sStandardDir;
-
+
SFX_REQUEST_ARG( rReq, pStandardDirItem, SfxStringItem, SID_STANDARD_DIR, FALSE );
if ( pStandardDirItem )
sStandardDir = pStandardDirItem->GetValue();
@@ -1188,19 +1188,19 @@ void SfxApplication::OpenDocExec_Impl( SfxRequest& rReq )
return;
}
- else
+ else
{
// check for "internal" protocols that should not be forwarded to the system
Sequence < ::rtl::OUString > aProtocols(2);
- // add special protocols that always should be treated as internal
+ // add special protocols that always should be treated as internal
aProtocols[0] = ::rtl::OUString::createFromAscii("private:*");
aProtocols[1] = ::rtl::OUString::createFromAscii("vnd.sun.star.*");
try
{
// get registered protocol handlers from configuration
- Reference < XNameAccess > xAccess( ::comphelper::ConfigurationHelper::openConfig( ::comphelper::getProcessServiceFactory(),
+ Reference < XNameAccess > xAccess( ::comphelper::ConfigurationHelper::openConfig( ::comphelper::getProcessServiceFactory(),
::rtl::OUString::createFromAscii("org.openoffice.Office.ProtocolHandler/HandlerSet"), ::comphelper::ConfigurationHelper::E_READONLY ), UNO_QUERY );
if ( xAccess.is() )
{