28#include <osl/file.hxx>
31#include <com/sun/star/xml/crypto/XSecurityEnvironment.hpp>
35#include <com/sun/star/uno/Exception.hpp>
36#include <com/sun/star/ui/dialogs/FolderPicker.hpp>
37#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
52 m_xLevelTP->ClosePage();
53 m_xTrustSrcTP->ClosePage();
58 css::uno::Reference<css::xml::crypto::XSecurityEnvironment> xSecurityEnvironment)
59 : GenericDialogController(pParent,
"xmlsec/ui/macrosecuritydialog.ui",
"MacroSecurityDialog")
60 , m_xSecurityEnvironment(
std::move(xSecurityEnvironment))
61 , m_xTabCtrl(m_xBuilder->weld_notebook(
"tabcontrol"))
62 , m_xOkBtn(m_xBuilder->weld_button(
"ok"))
63 , m_xResetBtn(m_xBuilder->weld_button(
"reset"))
70 m_xTabCtrl->set_current_page(
"SecurityLevelPage");
76 if (rPage ==
"SecurityLevelPage")
77 m_xLevelTP->ActivatePage();
78 else if (rPage ==
"SecurityTrustPage")
79 m_xTrustSrcTP->ActivatePage();
84 : m_xBuilder(
Application::CreateBuilder(pParent, rUIXMLDescription))
99 :
MacroSecurityTP(pParent,
"xmlsec/ui/securitylevelpage.ui",
"SecurityLevelPage", pDlg)
100 , m_xVeryHighRB(m_xBuilder->weld_radio_button(
"vhigh"))
101 , m_xHighRB(m_xBuilder->weld_radio_button(
"high"))
102 , m_xMediumRB(m_xBuilder->weld_radio_button(
"med"))
103 , m_xLowRB(m_xBuilder->weld_radio_button(
"low"))
104 , m_xVHighImg(m_xBuilder->weld_widget(
"vhighimg"))
105 , m_xHighImg(m_xBuilder->weld_widget(
"highimg"))
106 , m_xMedImg(m_xBuilder->weld_widget(
"medimg"))
107 , m_xLowImg(m_xBuilder->weld_widget(
"lowimg"))
117 m_xLowRB->get_preferred_size().Width()}));
118 int nMaxWidth =
m_xLowRB->get_approximate_digit_width() * 60;
119 if (nPrefWidth > nMaxWidth)
122 m_xLowRB->set_size_request(nMaxWidth, -1);
126 m_xHighRB->set_size_request(nMaxWidth, -1);
159 OSL_FAIL(
"illegal macro security level");
161 if (bReadonly && pImage)
173 sal_uInt16 nNewLevel = 0;
174 if( m_xVeryHighRB->get_active() )
176 else if( m_xHighRB->get_active() )
178 else if( m_xMediumRB->get_active() )
181 if ( nNewLevel != mnCurLevel )
183 mnCurLevel = nNewLevel;
184 m_pDlg->EnableReset();
205 OUString aMsg =
XsResId(STR_BROKEN_MACRO_CERTIFICATE_DATA);
206 aMsg = aMsg.replaceFirst(
"%{data}", rData);
208 VclMessageType::Error, VclButtonsType::Ok, aMsg));
214 int nEntry = m_xTrustCertLB->get_selected_index();
218 const sal_uInt16 nSelected = m_xTrustCertLB->get_id(nEntry).toUInt32();
219 uno::Reference< css::security::XCertificate > xCert;
222 xCert = m_pDlg->m_xSecurityEnvironment->getCertificate(m_aTrustedAuthors[nSelected].SubjectName,
227 TOOLS_WARN_EXCEPTION(
"xmlsecurity.dialogs",
"matching certificate not found for: " << m_aTrustedAuthors[nSelected].SubjectName);
234 xCert = m_pDlg->m_xSecurityEnvironment->createCertificateFromAscii(m_aTrustedAuthors[nSelected].RawData);
238 TOOLS_WARN_EXCEPTION(
"xmlsecurity.dialogs",
"certificate data couldn't be parsed: " << m_aTrustedAuthors[nSelected].RawData);
244 CertificateViewer aViewer(m_pDlg->getDialog(), m_pDlg->m_xSecurityEnvironment, xCert,
false,
nullptr);
249 ShowBrokenCertificateError(m_aTrustedAuthors[nSelected].RawData);
254 int nEntry = m_xTrustCertLB->get_selected_index();
257 sal_uInt16 nAuthor = m_xTrustCertLB->get_id(nEntry).toUInt32();
258 m_aTrustedAuthors.erase(m_aTrustedAuthors.begin() + nAuthor);
269 uno::Reference < uno::XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
270 uno::Reference < ui::dialogs::XFolderPicker2 > xFolderPicker =
sfx2::createFolderPicker(xContext, m_pDlg->getDialog());
272 short nRet = xFolderPicker->execute();
274 if( ui::dialogs::ExecutableDialogResults::OK != nRet )
277 OUString aPathStr = xFolderPicker->getDirectory();
282 OUString aSystemFileURL = ( aNewObj.
GetProtocol() != INetProtocol::NotValid ) ?
283 aPathStr : aNewObj.
getFSysPath( FSysStyle::Detect );
285 OUString aNewPathStr(aSystemFileURL);
287 if ( osl::FileBase::getSystemPathFromFileURL( aSystemFileURL, aSystemFileURL ) == osl::FileBase::E_None )
288 aNewPathStr = aSystemFileURL;
290 if (m_xTrustFileLocLB->find_text(aNewPathStr) == -1)
291 m_xTrustFileLocLB->append_text(aNewPathStr);
295 catch( uno::Exception& )
297 TOOLS_WARN_EXCEPTION(
"xmlsecurity.dialogs",
"MacroSecurityTrustedSourcesTP::AddLocPBHdl(): exception from folder picker" );
303 sal_Int32 nSel = m_xTrustFileLocLB->get_selected_index();
307 m_xTrustFileLocLB->remove(nSel);
310 int nNewCount = m_xTrustFileLocLB->n_children();
313 if (nSel >= nNewCount)
314 nSel = nNewCount - 1;
315 m_xTrustFileLocLB->select(nSel);
339 for( sal_uInt32 nEntry = 0 ; nEntry < nEntries ; ++nEntry )
347 m_xTrustCertLB->append(OUString::number(nEntry), xmlsec::GetContentPart(xCert->getSubjectName(), xCert->getCertificateKind()));
348 m_xTrustCertLB->set_text(nEntry, xmlsec::GetContentPart(xCert->getIssuerName(), xCert->getCertificateKind()), 1);
356 OUString sData = rEntry.
RawData;
358 OUString sException = OStringToOUString(
exceptionToString(tools_warn_exception), RTL_TEXTENCODING_UTF8);
359 if (!sException.isEmpty())
360 sData +=
" / " + sException;
368 :
MacroSecurityTP(pParent,
"xmlsec/ui/securitytrustpage.ui",
"SecurityTrustPage", pDlg)
369 , m_xTrustCertROFI(m_xBuilder->weld_image(
"lockcertimg"))
370 , m_xTrustCertLB(m_xBuilder->weld_tree_view(
"certificates"))
371 , m_xViewCertPB(m_xBuilder->weld_button(
"viewcert"))
372 , m_xRemoveCertPB(m_xBuilder->weld_button(
"removecert"))
373 , m_xTrustFileROFI(m_xBuilder->weld_image(
"lockfileimg"))
374 , m_xTrustFileLocLB(m_xBuilder->weld_tree_view(
"locations"))
375 , m_xAddLocPB(m_xBuilder->weld_button(
"addfile"))
376 , m_xRemoveLocPB(m_xBuilder->weld_button(
"removefile"))
378 auto nColWidth =
m_xTrustCertLB->get_approximate_digit_width() * 12;
379 std::vector<int> aWidths
381 o3tl::narrowing<int>(nColWidth * 2),
382 o3tl::narrowing<int>(nColWidth * 2)
410 for (
const auto& rSecureURL : aSecureURLs)
412 OUString aSystemFileURL( rSecureURL );
413 osl::FileBase::getSystemPathFromFileURL( aSystemFileURL, aSystemFileURL );
429 std::vector< OUString > aSecureURLs;
430 for (sal_Int32
i = 0;
i < nEntryCnt; ++
i)
433 osl::FileBase::getFileURLFromSystemPath(
aURL,
aURL );
434 aSecureURLs.push_back(
aURL);
Reference< XExecutableDialog > m_xDialog
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, const ILibreOfficeKitNotifier *pNotifier=nullptr)
INetProtocol GetProtocol() const
OUString getFSysPath(FSysStyle eStyle, sal_Unicode *pDelimiter=nullptr) const
std::unique_ptr< weld::RadioButton > m_xHighRB
std::unique_ptr< weld::RadioButton > m_xLowRB
MacroSecurityLevelTP(weld::Container *pParent, MacroSecurity *pDlg)
std::unique_ptr< weld::Widget > m_xVHighImg
std::unique_ptr< weld::Widget > m_xLowImg
virtual void ClosePage() override
std::unique_ptr< weld::RadioButton > m_xMediumRB
std::unique_ptr< weld::RadioButton > m_xVeryHighRB
std::unique_ptr< weld::Widget > m_xMedImg
std::unique_ptr< weld::Widget > m_xHighImg
virtual ~MacroSecurityTP()
virtual void ActivatePage()
MacroSecurityTP(weld::Container *pParent, const OUString &rUIXMLDescription, const OUString &rID, MacroSecurity *pDlg)
std::unique_ptr< weld::Button > m_xAddLocPB
std::unique_ptr< weld::TreeView > m_xTrustCertLB
std::unique_ptr< weld::Button > m_xRemoveCertPB
void FillCertLB(const bool bShowWarnings=false)
std::unique_ptr< weld::TreeView > m_xTrustFileLocLB
MacroSecurityTrustedSourcesTP(weld::Container *pParent, MacroSecurity *pDlg)
std::unique_ptr< weld::Image > m_xTrustCertROFI
virtual void ActivatePage() override
virtual void ClosePage() override
std::vector< SvtSecurityOptions::Certificate > m_aTrustedAuthors
std::unique_ptr< weld::Button > m_xRemoveLocPB
std::unique_ptr< weld::Image > m_xTrustFileROFI
void ShowBrokenCertificateError(std::u16string_view rData)
std::unique_ptr< weld::Button > m_xViewCertPB
MacroSecurity(weld::Window *pParent, css::uno::Reference< css::xml::crypto::XSecurityEnvironment > xSecurityEnvironment)
std::unique_ptr< weld::Notebook > m_xTabCtrl
css::uno::Reference< css::xml::crypto::XSecurityEnvironment > m_xSecurityEnvironment
void EnableReset(bool bEnable=true)
friend class MacroSecurityTrustedSourcesTP
friend class MacroSecurityLevelTP
std::unique_ptr< weld::Button > m_xOkBtn
std::unique_ptr< MacroSecurityTP > m_xLevelTP
std::unique_ptr< MacroSecurityTP > m_xTrustSrcTP
virtual Dialog * getDialog() override
virtual void set_active(bool active)=0
OString exceptionToString(const css::uno::Any &caught)
#define TOOLS_WARN_EXCEPTION(area, stream)
css::uno::Any DbgGetCaughtException()
#define LINK(Instance, Class, Member)
IMPL_LINK(MacroSecurity, ActivatePageHdl, const OUString &, rPage, void)
IMPL_LINK_NOARG(MacroSecurity, OkBtnHdl, weld::Button &, void)
void SetMacroSecurityLevel(sal_Int32 _nLevel)
bool IsReadOnly(EOption eOption)
void SetSecureURLs(std::vector< OUString > &&urlList)
void SetTrustedAuthors(const std::vector< Certificate > &rAuthors)
sal_Int32 GetMacroSecurityLevel()
std::vector< SvtSecurityOptions::Certificate > GetTrustedAuthors()
std::vector< OUString > GetSecureURLs()
css::uno::Reference< css::ui::dialogs::XFolderPicker2 > createFolderPicker(const css::uno::Reference< css::uno::XComponentContext > &rContext, weld::Window *pPreferredParent)
OUString GetDateTimeString(const css::util::DateTime &_rDT)
Sequence< sal_Int8 > numericStringToBigInteger(std::u16string_view numeral)
Reference< XNameAccess > m_xContainer
OUString XsResId(TranslateId aId)