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