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 // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_xmlsecurity.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <xmlsecurity/macrosecurity.hxx>
28*b1cdbd2cSJim Jagielski #include <xmlsecurity/certificatechooser.hxx>
29*b1cdbd2cSJim Jagielski #include <xmlsecurity/certificateviewer.hxx>
30*b1cdbd2cSJim Jagielski #include <xmlsecurity/biginteger.hxx>
31*b1cdbd2cSJim Jagielski 
32*b1cdbd2cSJim Jagielski #include <osl/file.hxx>
33*b1cdbd2cSJim Jagielski #include <vcl/help.hxx>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #include <com/sun/star/xml/crypto/XSecurityEnvironment.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/security/SerialNumberAdapter.hpp>
38*b1cdbd2cSJim Jagielski #include <comphelper/sequence.hxx>
39*b1cdbd2cSJim Jagielski #include <sfx2/filedlghelper.hxx>
40*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Exception.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XFolderPicker.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
45*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski #include "dialogs.hrc"
50*b1cdbd2cSJim Jagielski #include "resourcemanager.hxx"
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski /* HACK: disable some warnings for MS-C */
53*b1cdbd2cSJim Jagielski #ifdef _MSC_VER
54*b1cdbd2cSJim Jagielski #pragma warning (disable : 4355)	// 4355: this used in initializer-list
55*b1cdbd2cSJim Jagielski #endif
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski 
IMPL_LINK(MacroSecurity,OkBtnHdl,void *,EMPTYARG)60*b1cdbd2cSJim Jagielski IMPL_LINK( MacroSecurity, OkBtnHdl, void*, EMPTYARG )
61*b1cdbd2cSJim Jagielski {
62*b1cdbd2cSJim Jagielski 	mpLevelTP->ClosePage();
63*b1cdbd2cSJim Jagielski 	mpTrustSrcTP->ClosePage();
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski 	EndDialog( RET_OK );
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski 	return 0;
68*b1cdbd2cSJim Jagielski }
69*b1cdbd2cSJim Jagielski 
MacroSecurity(Window * _pParent,const cssu::Reference<cssu::XComponentContext> & _rxCtx,const cssu::Reference<dcss::xml::crypto::XSecurityEnvironment> & _rxSecurityEnvironment)70*b1cdbd2cSJim Jagielski MacroSecurity::MacroSecurity( Window* _pParent, const cssu::Reference< cssu::XComponentContext> &_rxCtx, const cssu::Reference< dcss::xml::crypto::XSecurityEnvironment >& _rxSecurityEnvironment )
71*b1cdbd2cSJim Jagielski 	:TabDialog			( _pParent, XMLSEC_RES( RID_XMLSECTP_MACROSEC ) )
72*b1cdbd2cSJim Jagielski 	,maTabCtrl			( this, XMLSEC_RES( 1 ) )
73*b1cdbd2cSJim Jagielski 	,maOkBtn			( this, XMLSEC_RES( BTN_OK ) )
74*b1cdbd2cSJim Jagielski 	,maCancelBtn		( this, XMLSEC_RES( BTN_CANCEL ) )
75*b1cdbd2cSJim Jagielski 	,maHelpBtn			( this, XMLSEC_RES( BTN_HELP ) )
76*b1cdbd2cSJim Jagielski 	,maResetBtn			( this, XMLSEC_RES( BTN_RESET ) )
77*b1cdbd2cSJim Jagielski {
78*b1cdbd2cSJim Jagielski 	FreeResource();
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski 	mxCtx = _rxCtx;
81*b1cdbd2cSJim Jagielski 	mxSecurityEnvironment = _rxSecurityEnvironment;
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski 	mpLevelTP = new MacroSecurityLevelTP( &maTabCtrl, this );
84*b1cdbd2cSJim Jagielski 	mpTrustSrcTP = new MacroSecurityTrustedSourcesTP( &maTabCtrl, this );
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski 	maTabCtrl.SetTabPage( RID_XMLSECTP_SECLEVEL, mpLevelTP );
87*b1cdbd2cSJim Jagielski 	maTabCtrl.SetTabPage( RID_XMLSECTP_TRUSTSOURCES, mpTrustSrcTP );
88*b1cdbd2cSJim Jagielski 	maTabCtrl.SetCurPageId( RID_XMLSECTP_SECLEVEL );
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski 	maOkBtn.SetClickHdl( LINK( this, MacroSecurity, OkBtnHdl ) );
91*b1cdbd2cSJim Jagielski }
92*b1cdbd2cSJim Jagielski 
~MacroSecurity()93*b1cdbd2cSJim Jagielski MacroSecurity::~MacroSecurity()
94*b1cdbd2cSJim Jagielski {
95*b1cdbd2cSJim Jagielski 	delete maTabCtrl.GetTabPage( RID_XMLSECTP_TRUSTSOURCES );
96*b1cdbd2cSJim Jagielski 	delete maTabCtrl.GetTabPage( RID_XMLSECTP_SECLEVEL );
97*b1cdbd2cSJim Jagielski }
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 
MacroSecurityTP(Window * _pParent,const ResId & _rResId,MacroSecurity * _pDlg)100*b1cdbd2cSJim Jagielski MacroSecurityTP::MacroSecurityTP( Window* _pParent, const ResId& _rResId, MacroSecurity* _pDlg )
101*b1cdbd2cSJim Jagielski 	:TabPage		( _pParent, _rResId )
102*b1cdbd2cSJim Jagielski 	,mpDlg			( _pDlg )
103*b1cdbd2cSJim Jagielski {
104*b1cdbd2cSJim Jagielski }
105*b1cdbd2cSJim Jagielski 
MacroSecurityLevelTP(Window * _pParent,MacroSecurity * _pDlg)106*b1cdbd2cSJim Jagielski MacroSecurityLevelTP::MacroSecurityLevelTP( Window* _pParent, MacroSecurity* _pDlg )
107*b1cdbd2cSJim Jagielski 	:MacroSecurityTP	( _pParent, XMLSEC_RES( RID_XMLSECTP_SECLEVEL ), _pDlg )
108*b1cdbd2cSJim Jagielski 	,maSecLevelFL		( this, XMLSEC_RES( FL_SECLEVEL ) )
109*b1cdbd2cSJim Jagielski     ,maSecReadonlyFI    ( this, XMLSEC_RES( FI_SEC_READONLY ))
110*b1cdbd2cSJim Jagielski     ,maVeryHighRB       ( this, XMLSEC_RES( RB_VERYHIGH ) )
111*b1cdbd2cSJim Jagielski 	,maHighRB			( this, XMLSEC_RES( RB_HIGH ) )
112*b1cdbd2cSJim Jagielski 	,maMediumRB			( this, XMLSEC_RES( RB_MEDIUM ) )
113*b1cdbd2cSJim Jagielski 	,maLowRB			( this, XMLSEC_RES( RB_LOW ) )
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski 	FreeResource();
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski     maLowRB.SetClickHdl( LINK( this, MacroSecurityLevelTP, RadioButtonHdl ) );
118*b1cdbd2cSJim Jagielski     maMediumRB.SetClickHdl( LINK( this, MacroSecurityLevelTP, RadioButtonHdl ) );
119*b1cdbd2cSJim Jagielski     maHighRB.SetClickHdl( LINK( this, MacroSecurityLevelTP, RadioButtonHdl ) );
120*b1cdbd2cSJim Jagielski     maVeryHighRB.SetClickHdl( LINK( this, MacroSecurityLevelTP, RadioButtonHdl ) );
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski 	mnCurLevel = (sal_uInt16) mpDlg->maSecOptions.GetMacroSecurityLevel();
123*b1cdbd2cSJim Jagielski     sal_Bool bReadonly = mpDlg->maSecOptions.IsReadOnly( SvtSecurityOptions::E_MACRO_SECLEVEL );
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski     RadioButton* pCheck = 0;
126*b1cdbd2cSJim Jagielski     switch( mnCurLevel )
127*b1cdbd2cSJim Jagielski 	{
128*b1cdbd2cSJim Jagielski         case 3: pCheck = &maVeryHighRB;   break;
129*b1cdbd2cSJim Jagielski         case 2: pCheck = &maHighRB;       break;
130*b1cdbd2cSJim Jagielski         case 1: pCheck = &maMediumRB;     break;
131*b1cdbd2cSJim Jagielski         case 0: pCheck = &maLowRB;        break;
132*b1cdbd2cSJim Jagielski 	}
133*b1cdbd2cSJim Jagielski     if(pCheck)
134*b1cdbd2cSJim Jagielski         pCheck->Check();
135*b1cdbd2cSJim Jagielski     else
136*b1cdbd2cSJim Jagielski     {
137*b1cdbd2cSJim Jagielski         DBG_ERROR("illegal macro security level");
138*b1cdbd2cSJim Jagielski     }
139*b1cdbd2cSJim Jagielski     maSecReadonlyFI.Show(bReadonly);
140*b1cdbd2cSJim Jagielski     if(bReadonly)
141*b1cdbd2cSJim Jagielski     {
142*b1cdbd2cSJim Jagielski         //move to the selected button
143*b1cdbd2cSJim Jagielski         if( pCheck && pCheck != &maVeryHighRB)
144*b1cdbd2cSJim Jagielski         {
145*b1cdbd2cSJim Jagielski             long nDiff = pCheck->GetPosPixel().Y() - maVeryHighRB.GetPosPixel().Y();
146*b1cdbd2cSJim Jagielski             Point aPos(maSecReadonlyFI.GetPosPixel());
147*b1cdbd2cSJim Jagielski             aPos.Y() += nDiff;
148*b1cdbd2cSJim Jagielski             maSecReadonlyFI.SetPosPixel(aPos);
149*b1cdbd2cSJim Jagielski         }
150*b1cdbd2cSJim Jagielski         maVeryHighRB.Enable(sal_False);
151*b1cdbd2cSJim Jagielski         maHighRB.Enable(sal_False);
152*b1cdbd2cSJim Jagielski         maMediumRB.Enable(sal_False);
153*b1cdbd2cSJim Jagielski         maLowRB.Enable(sal_False);
154*b1cdbd2cSJim Jagielski     }
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski }
157*b1cdbd2cSJim Jagielski 
IMPL_LINK(MacroSecurityLevelTP,RadioButtonHdl,RadioButton *,EMPTYARG)158*b1cdbd2cSJim Jagielski IMPL_LINK( MacroSecurityLevelTP, RadioButtonHdl, RadioButton*, EMPTYARG )
159*b1cdbd2cSJim Jagielski {
160*b1cdbd2cSJim Jagielski     sal_uInt16 nNewLevel = 0;
161*b1cdbd2cSJim Jagielski 	if( maVeryHighRB.IsChecked() )
162*b1cdbd2cSJim Jagielski 		nNewLevel = 3;
163*b1cdbd2cSJim Jagielski 	else if( maHighRB.IsChecked() )
164*b1cdbd2cSJim Jagielski 		nNewLevel = 2;
165*b1cdbd2cSJim Jagielski 	else if( maMediumRB.IsChecked() )
166*b1cdbd2cSJim Jagielski 		nNewLevel = 1;
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski     if ( nNewLevel != mnCurLevel )
169*b1cdbd2cSJim Jagielski     {
170*b1cdbd2cSJim Jagielski         mnCurLevel = nNewLevel;
171*b1cdbd2cSJim Jagielski         mpDlg->EnableReset();
172*b1cdbd2cSJim Jagielski     }
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski     return 0;
175*b1cdbd2cSJim Jagielski }
176*b1cdbd2cSJim Jagielski 
ClosePage(void)177*b1cdbd2cSJim Jagielski void MacroSecurityLevelTP::ClosePage( void )
178*b1cdbd2cSJim Jagielski {
179*b1cdbd2cSJim Jagielski     mpDlg->maSecOptions.SetMacroSecurityLevel( mnCurLevel );
180*b1cdbd2cSJim Jagielski }
181*b1cdbd2cSJim Jagielski 
ImplCheckButtons()182*b1cdbd2cSJim Jagielski void MacroSecurityTrustedSourcesTP::ImplCheckButtons()
183*b1cdbd2cSJim Jagielski {
184*b1cdbd2cSJim Jagielski 	bool bCertSelected = maTrustCertLB.FirstSelected() != NULL;
185*b1cdbd2cSJim Jagielski 	maViewCertPB.Enable( bCertSelected );
186*b1cdbd2cSJim Jagielski     maRemoveCertPB.Enable( bCertSelected && !mbAuthorsReadonly);
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski     bool bLocationSelected = maTrustFileLocLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND;
189*b1cdbd2cSJim Jagielski     maRemoveLocPB.Enable( bLocationSelected && !mbURLsReadonly);
190*b1cdbd2cSJim Jagielski }
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 
IMPL_LINK(MacroSecurityTrustedSourcesTP,ViewCertPBHdl,void *,EMPTYARG)193*b1cdbd2cSJim Jagielski IMPL_LINK( MacroSecurityTrustedSourcesTP, ViewCertPBHdl, void*, EMPTYARG )
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski 	if( maTrustCertLB.FirstSelected() )
196*b1cdbd2cSJim Jagielski 	{
197*b1cdbd2cSJim Jagielski         sal_uInt16 nSelected = sal_uInt16( sal_uIntPtr( maTrustCertLB.FirstSelected()->GetUserData() ) );
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski 		uno::Reference< dcss::security::XSerialNumberAdapter > xSerialNumberAdapter =
200*b1cdbd2cSJim Jagielski             ::com::sun::star::security::SerialNumberAdapter::create(mpDlg->mxCtx);
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski 		uno::Reference< dcss::security::XCertificate > xCert = mpDlg->mxSecurityEnvironment->getCertificate( maTrustedAuthors[nSelected][0], xSerialNumberAdapter->toSequence( maTrustedAuthors[nSelected][1] ) );
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski         // If we don't get it, create it from signature data:
205*b1cdbd2cSJim Jagielski         if ( !xCert.is() )
206*b1cdbd2cSJim Jagielski 			xCert = mpDlg->mxSecurityEnvironment->createCertificateFromAscii( maTrustedAuthors[nSelected][2] ) ;
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski 		DBG_ASSERT( xCert.is(), "*MacroSecurityTrustedSourcesTP::ViewCertPBHdl(): Certificate not found and can't be created!" );
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski         if ( xCert.is() )
211*b1cdbd2cSJim Jagielski         {
212*b1cdbd2cSJim Jagielski 		    CertificateViewer aViewer( this, mpDlg->mxSecurityEnvironment, xCert, sal_False );
213*b1cdbd2cSJim Jagielski 		    aViewer.Execute();
214*b1cdbd2cSJim Jagielski         }
215*b1cdbd2cSJim Jagielski 	}
216*b1cdbd2cSJim Jagielski     return 0;
217*b1cdbd2cSJim Jagielski }
218*b1cdbd2cSJim Jagielski 
IMPL_LINK(MacroSecurityTrustedSourcesTP,RemoveCertPBHdl,void *,EMPTYARG)219*b1cdbd2cSJim Jagielski IMPL_LINK( MacroSecurityTrustedSourcesTP, RemoveCertPBHdl, void*, EMPTYARG )
220*b1cdbd2cSJim Jagielski {
221*b1cdbd2cSJim Jagielski 	if( maTrustCertLB.FirstSelected() )
222*b1cdbd2cSJim Jagielski 	{
223*b1cdbd2cSJim Jagielski 		sal_uInt16 nAuthor = sal_uInt16( sal_uIntPtr( maTrustCertLB.FirstSelected()->GetUserData() ) );
224*b1cdbd2cSJim Jagielski         ::comphelper::removeElementAt( maTrustedAuthors, nAuthor );
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski 		FillCertLB();
227*b1cdbd2cSJim Jagielski         ImplCheckButtons();
228*b1cdbd2cSJim Jagielski 	}
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski     return 0;
231*b1cdbd2cSJim Jagielski }
232*b1cdbd2cSJim Jagielski 
IMPL_LINK(MacroSecurityTrustedSourcesTP,AddLocPBHdl,void *,EMPTYARG)233*b1cdbd2cSJim Jagielski IMPL_LINK( MacroSecurityTrustedSourcesTP, AddLocPBHdl, void*, EMPTYARG )
234*b1cdbd2cSJim Jagielski {
235*b1cdbd2cSJim Jagielski 	try
236*b1cdbd2cSJim Jagielski 	{
237*b1cdbd2cSJim Jagielski 		rtl::OUString aService( RTL_CONSTASCII_USTRINGPARAM( FOLDER_PICKER_SERVICE_NAME ) );
238*b1cdbd2cSJim Jagielski 		uno::Reference < lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
239*b1cdbd2cSJim Jagielski 		uno::Reference < ui::dialogs::XFolderPicker > xFolderPicker( xFactory->createInstance( aService ), uno::UNO_QUERY );
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski 		short nRet = xFolderPicker->execute();
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski 		if( ui::dialogs::ExecutableDialogResults::OK != nRet )
244*b1cdbd2cSJim Jagielski 			return 0;
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski 		rtl::OUString aPathStr = xFolderPicker->getDirectory();
247*b1cdbd2cSJim Jagielski 		INetURLObject aNewObj( aPathStr );
248*b1cdbd2cSJim Jagielski 		aNewObj.removeFinalSlash();
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski 		// then the new path also an URL else system path
251*b1cdbd2cSJim Jagielski 		::rtl::OUString aSystemFileURL = ( aNewObj.GetProtocol() != INET_PROT_NOT_VALID ) ?
252*b1cdbd2cSJim Jagielski 			aPathStr : aNewObj.getFSysPath( INetURLObject::FSYS_DETECT );
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski 		String aNewPathStr(aSystemFileURL);
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski         if ( osl::FileBase::getSystemPathFromFileURL( aSystemFileURL, aSystemFileURL ) == osl::FileBase::E_None )
257*b1cdbd2cSJim Jagielski             aNewPathStr = aSystemFileURL;
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski 		if( maTrustFileLocLB.GetEntryPos( aNewPathStr ) == LISTBOX_ENTRY_NOTFOUND )
260*b1cdbd2cSJim Jagielski 		{
261*b1cdbd2cSJim Jagielski 			maTrustFileLocLB.InsertEntry( aNewPathStr );
262*b1cdbd2cSJim Jagielski 		}
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski         ImplCheckButtons();
265*b1cdbd2cSJim Jagielski 	}
266*b1cdbd2cSJim Jagielski 	catch( uno::Exception& )
267*b1cdbd2cSJim Jagielski 	{
268*b1cdbd2cSJim Jagielski 		DBG_ERRORFILE( "MacroSecurityTrustedSourcesTP::AddLocPBHdl(): exception from folder picker" );
269*b1cdbd2cSJim Jagielski 	}
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski 	return 0;
272*b1cdbd2cSJim Jagielski }
273*b1cdbd2cSJim Jagielski 
IMPL_LINK(MacroSecurityTrustedSourcesTP,RemoveLocPBHdl,void *,EMPTYARG)274*b1cdbd2cSJim Jagielski IMPL_LINK( MacroSecurityTrustedSourcesTP, RemoveLocPBHdl, void*, EMPTYARG )
275*b1cdbd2cSJim Jagielski {
276*b1cdbd2cSJim Jagielski 	sal_uInt16	nSel = maTrustFileLocLB.GetSelectEntryPos();
277*b1cdbd2cSJim Jagielski 	if( nSel != LISTBOX_ENTRY_NOTFOUND )
278*b1cdbd2cSJim Jagielski 	{
279*b1cdbd2cSJim Jagielski 		maTrustFileLocLB.RemoveEntry( nSel );
280*b1cdbd2cSJim Jagielski         // --> PB 2004-09-21 #i33584#
281*b1cdbd2cSJim Jagielski         // after remove an entry, select another one if exists
282*b1cdbd2cSJim Jagielski         sal_uInt16 nNewCount = maTrustFileLocLB.GetEntryCount();
283*b1cdbd2cSJim Jagielski         if ( nNewCount > 0 )
284*b1cdbd2cSJim Jagielski         {
285*b1cdbd2cSJim Jagielski             if ( nSel >= nNewCount )
286*b1cdbd2cSJim Jagielski                 nSel = nNewCount - 1;
287*b1cdbd2cSJim Jagielski             maTrustFileLocLB.SelectEntryPos( nSel );
288*b1cdbd2cSJim Jagielski         }
289*b1cdbd2cSJim Jagielski         // <--
290*b1cdbd2cSJim Jagielski         ImplCheckButtons();
291*b1cdbd2cSJim Jagielski 	}
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski     return 0;
294*b1cdbd2cSJim Jagielski }
295*b1cdbd2cSJim Jagielski 
IMPL_LINK(MacroSecurityTrustedSourcesTP,TrustCertLBSelectHdl,void *,EMPTYARG)296*b1cdbd2cSJim Jagielski IMPL_LINK( MacroSecurityTrustedSourcesTP, TrustCertLBSelectHdl, void*, EMPTYARG )
297*b1cdbd2cSJim Jagielski {
298*b1cdbd2cSJim Jagielski     ImplCheckButtons();
299*b1cdbd2cSJim Jagielski 	return 0;
300*b1cdbd2cSJim Jagielski }
301*b1cdbd2cSJim Jagielski 
IMPL_LINK(MacroSecurityTrustedSourcesTP,TrustFileLocLBSelectHdl,void *,EMPTYARG)302*b1cdbd2cSJim Jagielski IMPL_LINK( MacroSecurityTrustedSourcesTP, TrustFileLocLBSelectHdl, void*, EMPTYARG )
303*b1cdbd2cSJim Jagielski {
304*b1cdbd2cSJim Jagielski     ImplCheckButtons();
305*b1cdbd2cSJim Jagielski 	return 0;
306*b1cdbd2cSJim Jagielski }
307*b1cdbd2cSJim Jagielski 
FillCertLB(void)308*b1cdbd2cSJim Jagielski void MacroSecurityTrustedSourcesTP::FillCertLB( void )
309*b1cdbd2cSJim Jagielski {
310*b1cdbd2cSJim Jagielski     maTrustCertLB.Clear();
311*b1cdbd2cSJim Jagielski 
312*b1cdbd2cSJim Jagielski     sal_uInt32 nEntries = maTrustedAuthors.getLength();
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski 	if ( nEntries && mpDlg->mxSecurityEnvironment.is() )
315*b1cdbd2cSJim Jagielski 	{
316*b1cdbd2cSJim Jagielski 		for( sal_uInt32 nEntry = 0 ; nEntry < nEntries ; ++nEntry )
317*b1cdbd2cSJim Jagielski 		{
318*b1cdbd2cSJim Jagielski 			cssu::Sequence< ::rtl::OUString >&				rEntry = maTrustedAuthors[ nEntry ];
319*b1cdbd2cSJim Jagielski 			uno::Reference< css::security::XCertificate >	xCert;
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski 			// create from RawData
322*b1cdbd2cSJim Jagielski 			xCert = mpDlg->mxSecurityEnvironment->createCertificateFromAscii( rEntry[ 2 ] );
323*b1cdbd2cSJim Jagielski 
324*b1cdbd2cSJim Jagielski 			SvLBoxEntry*    pLBEntry = maTrustCertLB.InsertEntry( XmlSec::GetContentPart( xCert->getSubjectName() ) );
325*b1cdbd2cSJim Jagielski 			maTrustCertLB.SetEntryText( XmlSec::GetContentPart( xCert->getIssuerName() ), pLBEntry, 1 );
326*b1cdbd2cSJim Jagielski 			maTrustCertLB.SetEntryText( XmlSec::GetDateTimeString( xCert->getNotValidAfter() ), pLBEntry, 2 );
327*b1cdbd2cSJim Jagielski 			pLBEntry->SetUserData( ( void* ) sal_Int32( nEntry ) );		// missuse user data as index
328*b1cdbd2cSJim Jagielski 		}
329*b1cdbd2cSJim Jagielski 	}
330*b1cdbd2cSJim Jagielski }
331*b1cdbd2cSJim Jagielski 
MacroSecurityTrustedSourcesTP(Window * _pParent,MacroSecurity * _pDlg)332*b1cdbd2cSJim Jagielski MacroSecurityTrustedSourcesTP::MacroSecurityTrustedSourcesTP( Window* _pParent, MacroSecurity* _pDlg )
333*b1cdbd2cSJim Jagielski 	:MacroSecurityTP	( _pParent, XMLSEC_RES( RID_XMLSECTP_TRUSTSOURCES ), _pDlg )
334*b1cdbd2cSJim Jagielski 	,maTrustCertFL		( this, XMLSEC_RES( FL_TRUSTCERT ) )
335*b1cdbd2cSJim Jagielski     ,maTrustCertROFI    ( this, XMLSEC_RES( FI_TRUSTCERT_RO ) )
336*b1cdbd2cSJim Jagielski     ,maTrustCertLB      ( this, XMLSEC_RES( LB_TRUSTCERT ) )
337*b1cdbd2cSJim Jagielski 	,maAddCertPB		( this, XMLSEC_RES( PB_ADD_TRUSTCERT ) )
338*b1cdbd2cSJim Jagielski 	,maViewCertPB		( this, XMLSEC_RES( PB_VIEW_TRUSTCERT ) )
339*b1cdbd2cSJim Jagielski 	,maRemoveCertPB		( this, XMLSEC_RES( PB_REMOVE_TRUSTCERT ) )
340*b1cdbd2cSJim Jagielski 	,maTrustFileLocFL	( this, XMLSEC_RES( FL_TRUSTFILELOC ) )
341*b1cdbd2cSJim Jagielski     ,maTrustFileROFI    ( this, XMLSEC_RES( FI_TRUSTFILE_RO ) )
342*b1cdbd2cSJim Jagielski     ,maTrustFileLocFI   ( this, XMLSEC_RES( FI_TRUSTFILELOC ) )
343*b1cdbd2cSJim Jagielski 	,maTrustFileLocLB	( this, XMLSEC_RES( LB_TRUSTFILELOC ) )
344*b1cdbd2cSJim Jagielski 	,maAddLocPB			( this, XMLSEC_RES( FL_ADD_TRUSTFILELOC ) )
345*b1cdbd2cSJim Jagielski 	,maRemoveLocPB		( this, XMLSEC_RES( FL_REMOVE_TRUSTFILELOC ) )
346*b1cdbd2cSJim Jagielski {
347*b1cdbd2cSJim Jagielski 	static long	nTabs[] = { 3, 0, 35*CS_LB_WIDTH/100, 70*CS_LB_WIDTH/100 };
348*b1cdbd2cSJim Jagielski 	maTrustCertLB.SetTabs( &nTabs[ 0 ] );
349*b1cdbd2cSJim Jagielski 	maTrustCertLB.InsertHeaderEntry( String( XMLSEC_RES( STR_HEADERBAR ) ) );
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski 	FreeResource();
352*b1cdbd2cSJim Jagielski 
353*b1cdbd2cSJim Jagielski 	maTrustCertLB.SetSelectHdl( LINK( this, MacroSecurityTrustedSourcesTP, TrustCertLBSelectHdl ) );
354*b1cdbd2cSJim Jagielski 	maAddCertPB.Hide();		// not used in the moment...
355*b1cdbd2cSJim Jagielski 	maViewCertPB.SetClickHdl( LINK( this, MacroSecurityTrustedSourcesTP, ViewCertPBHdl ) );
356*b1cdbd2cSJim Jagielski 	maViewCertPB.Disable();
357*b1cdbd2cSJim Jagielski 	maRemoveCertPB.SetClickHdl( LINK( this, MacroSecurityTrustedSourcesTP, RemoveCertPBHdl ) );
358*b1cdbd2cSJim Jagielski 	maRemoveCertPB.Disable();
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski 	maTrustFileLocLB.SetSelectHdl( LINK( this, MacroSecurityTrustedSourcesTP, TrustFileLocLBSelectHdl ) );
361*b1cdbd2cSJim Jagielski 	maAddLocPB.SetClickHdl( LINK( this, MacroSecurityTrustedSourcesTP, AddLocPBHdl ) );
362*b1cdbd2cSJim Jagielski 	maRemoveLocPB.SetClickHdl( LINK( this, MacroSecurityTrustedSourcesTP, RemoveLocPBHdl ) );
363*b1cdbd2cSJim Jagielski 	maRemoveLocPB.Disable();
364*b1cdbd2cSJim Jagielski 
365*b1cdbd2cSJim Jagielski     maTrustedAuthors = mpDlg->maSecOptions.GetTrustedAuthors();
366*b1cdbd2cSJim Jagielski     mbAuthorsReadonly = mpDlg->maSecOptions.IsReadOnly( SvtSecurityOptions::E_MACRO_TRUSTEDAUTHORS );
367*b1cdbd2cSJim Jagielski     maTrustCertROFI.Show( mbAuthorsReadonly );
368*b1cdbd2cSJim Jagielski     mbAuthorsReadonly ? maTrustCertLB.DisableTable() : maTrustCertLB.EnableTable();
369*b1cdbd2cSJim Jagielski //  unused button
370*b1cdbd2cSJim Jagielski //    maAddCertPB.Enable( !mbAuthorsReadonly );
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski     FillCertLB();
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski 	cssu::Sequence< rtl::OUString >	aSecureURLs = mpDlg->maSecOptions.GetSecureURLs();
375*b1cdbd2cSJim Jagielski     mbURLsReadonly = mpDlg->maSecOptions.IsReadOnly( SvtSecurityOptions::E_SECUREURLS );
376*b1cdbd2cSJim Jagielski     maTrustFileROFI.Show( mbURLsReadonly );
377*b1cdbd2cSJim Jagielski     maTrustFileLocLB.Enable( !mbURLsReadonly );
378*b1cdbd2cSJim Jagielski     maAddLocPB      .Enable( !mbURLsReadonly );
379*b1cdbd2cSJim Jagielski 
380*b1cdbd2cSJim Jagielski     sal_Int32 nEntryCnt = aSecureURLs.getLength();
381*b1cdbd2cSJim Jagielski 	for( sal_Int32 i = 0 ; i < nEntryCnt ; ++i )
382*b1cdbd2cSJim Jagielski     {
383*b1cdbd2cSJim Jagielski         ::rtl::OUString aSystemFileURL( aSecureURLs[ i ] );
384*b1cdbd2cSJim Jagielski         osl::FileBase::getSystemPathFromFileURL( aSystemFileURL, aSystemFileURL );
385*b1cdbd2cSJim Jagielski 		maTrustFileLocLB.InsertEntry( aSystemFileURL );
386*b1cdbd2cSJim Jagielski     }
387*b1cdbd2cSJim Jagielski }
388*b1cdbd2cSJim Jagielski 
ActivatePage()389*b1cdbd2cSJim Jagielski void MacroSecurityTrustedSourcesTP::ActivatePage()
390*b1cdbd2cSJim Jagielski {
391*b1cdbd2cSJim Jagielski 	mpDlg->EnableReset( false );
392*b1cdbd2cSJim Jagielski 	FillCertLB();
393*b1cdbd2cSJim Jagielski }
394*b1cdbd2cSJim Jagielski 
ClosePage(void)395*b1cdbd2cSJim Jagielski void MacroSecurityTrustedSourcesTP::ClosePage( void )
396*b1cdbd2cSJim Jagielski {
397*b1cdbd2cSJim Jagielski 	sal_uInt16	nEntryCnt = maTrustFileLocLB.GetEntryCount();
398*b1cdbd2cSJim Jagielski 	if( nEntryCnt )
399*b1cdbd2cSJim Jagielski 	{
400*b1cdbd2cSJim Jagielski 		cssu::Sequence< rtl::OUString >	aSecureURLs( nEntryCnt );
401*b1cdbd2cSJim Jagielski 		for( sal_uInt16 i = 0 ; i < nEntryCnt ; ++i )
402*b1cdbd2cSJim Jagielski         {
403*b1cdbd2cSJim Jagielski             ::rtl::OUString aURL( maTrustFileLocLB.GetEntry( i ) );
404*b1cdbd2cSJim Jagielski             osl::FileBase::getFileURLFromSystemPath( aURL, aURL );
405*b1cdbd2cSJim Jagielski 			aSecureURLs[ i ] = aURL;
406*b1cdbd2cSJim Jagielski         }
407*b1cdbd2cSJim Jagielski 
408*b1cdbd2cSJim Jagielski 		mpDlg->maSecOptions.SetSecureURLs( aSecureURLs );
409*b1cdbd2cSJim Jagielski 	}
410*b1cdbd2cSJim Jagielski     // --> PB 2004-09-21 #i33584#
411*b1cdbd2cSJim Jagielski     // don't forget to remove the old saved SecureURLs
412*b1cdbd2cSJim Jagielski     else
413*b1cdbd2cSJim Jagielski         mpDlg->maSecOptions.SetSecureURLs( cssu::Sequence< rtl::OUString >() );
414*b1cdbd2cSJim Jagielski     // <--
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski 	mpDlg->maSecOptions.SetTrustedAuthors( maTrustedAuthors );
417*b1cdbd2cSJim Jagielski }
418*b1cdbd2cSJim Jagielski /*-- 26.02.2004 13:31:04---------------------------------------------------
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
ReadOnlyImage(Window * pParent,const ResId rResId)421*b1cdbd2cSJim Jagielski ReadOnlyImage::ReadOnlyImage(Window* pParent, const ResId rResId) :
422*b1cdbd2cSJim Jagielski             FixedImage(pParent, rResId)
423*b1cdbd2cSJim Jagielski {
424*b1cdbd2cSJim Jagielski     sal_Bool bHighContrast = pParent->GetSettings().GetStyleSettings().GetHighContrastMode();
425*b1cdbd2cSJim Jagielski     SetImage( Image(XMLSEC_RES( bHighContrast ? RID_XMLSECTP_LOCK_HC : RID_XMLSECTP_LOCK )));
426*b1cdbd2cSJim Jagielski }
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski /*-- 26.02.2004 13:31:04---------------------------------------------------
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
~ReadOnlyImage()431*b1cdbd2cSJim Jagielski ReadOnlyImage::~ReadOnlyImage()
432*b1cdbd2cSJim Jagielski {
433*b1cdbd2cSJim Jagielski }
434*b1cdbd2cSJim Jagielski /*-- 26.02.2004 13:31:04---------------------------------------------------
435*b1cdbd2cSJim Jagielski 
436*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
RequestHelp(const HelpEvent & rHEvt)437*b1cdbd2cSJim Jagielski void ReadOnlyImage::RequestHelp( const HelpEvent& rHEvt )
438*b1cdbd2cSJim Jagielski {
439*b1cdbd2cSJim Jagielski     if( Help::IsBalloonHelpEnabled() || Help::IsQuickHelpEnabled() )
440*b1cdbd2cSJim Jagielski     {
441*b1cdbd2cSJim Jagielski         Rectangle   aLogicPix( LogicToPixel( Rectangle( Point(), GetOutputSize() ) ) );
442*b1cdbd2cSJim Jagielski         Rectangle   aScreenRect( OutputToScreenPixel( aLogicPix.TopLeft() ),
443*b1cdbd2cSJim Jagielski                                      OutputToScreenPixel( aLogicPix.BottomRight() ) );
444*b1cdbd2cSJim Jagielski 
445*b1cdbd2cSJim Jagielski         String aStr(ReadOnlyImage::GetHelpTip());
446*b1cdbd2cSJim Jagielski         if ( Help::IsBalloonHelpEnabled() )
447*b1cdbd2cSJim Jagielski             Help::ShowBalloon( this, rHEvt.GetMousePosPixel(), aScreenRect,
448*b1cdbd2cSJim Jagielski             aStr );
449*b1cdbd2cSJim Jagielski         else if ( Help::IsQuickHelpEnabled() )
450*b1cdbd2cSJim Jagielski             Help::ShowQuickHelp( this, aScreenRect, aStr );
451*b1cdbd2cSJim Jagielski     }
452*b1cdbd2cSJim Jagielski     else
453*b1cdbd2cSJim Jagielski         Window::RequestHelp( rHEvt );
454*b1cdbd2cSJim Jagielski }
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski /*-- 26.02.2004 14:20:21---------------------------------------------------
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
GetHelpTip()459*b1cdbd2cSJim Jagielski const String& ReadOnlyImage::GetHelpTip()
460*b1cdbd2cSJim Jagielski {
461*b1cdbd2cSJim Jagielski      static String  aStr(XMLSEC_RES( RID_XMLSECTP_READONLY_CONFIG_TIP));
462*b1cdbd2cSJim Jagielski      return aStr;
463*b1cdbd2cSJim Jagielski }
464*b1cdbd2cSJim Jagielski 
465