10 #include <officecfg/Office/Common.hxx>
11 #include <osl/file.hxx>
12 #include <osl/security.hxx>
16 #include <com/sun/star/xml/crypto/NSSInitializer.hpp>
17 #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
18 #include <com/sun/star/ui/dialogs/FolderPicker.hpp>
24 : GenericDialogController(pParent,
"cui/ui/certdialog.ui",
"CertDialog")
25 , m_xManualButton(m_xBuilder->weld_button(
"add"))
27 , m_xCertPathList(m_xBuilder->weld_tree_view(
"paths"))
28 , m_sAddDialogText(m_xBuilder->weld_label(
"certdir")->get_label())
29 , m_sManualLabel(m_xBuilder->weld_label(
"manual")->get_label())
49 uno::Reference<xml::crypto::XNSSInitializer> xCipherContextSupplier = xml::crypto::NSSInitializer::create(xContext);
51 OUString sActivePath = xCipherContextSupplier->getNSSPath();
52 auto aProductList = xCipherContextSupplier->getNSSProfiles();
55 const char*
const productNames[4] = {
62 for (
const auto& rNSSProfile : std::as_const(aProductList))
64 if (rNSSProfile.Type == mozilla::MozillaProductType_Default)
66 if (rNSSProfile.Name ==
"MOZILLA_CERTIFICATE_FOLDER" && !rNSSProfile.Path.isEmpty())
68 AddCertPath(
"$MOZILLA_CERTIFICATE_FOLDER", rNSSProfile.Path);
71 else if (rNSSProfile.Name ==
"MANUAL")
76 OUString sEntry = OUString::createFromAscii(
77 productNames[static_cast<int>(rNSSProfile.Type)]) +
":" + rNSSProfile.Name;
78 AddCertPath(sEntry, rNSSProfile.Path, rNSSProfile.Path == sActivePath);
82 OUString sManualCertPath = officecfg::Office::Common::Security::Scripting::ManualCertDir::get();
83 if (!sManualCertPath.isEmpty())
86 catch (
const uno::Exception&)
93 if (sUserSetCertPath.isEmpty())
96 ::osl::DirectoryItem aUserPathItem;
97 OUString sUserSetCertURLPath;
98 osl::FileBase::getFileURLFromSystemPath(sUserSetCertPath, sUserSetCertURLPath);
99 if (::osl::FileBase::E_None == ::osl::DirectoryItem::get(sUserSetCertURLPath, aUserPathItem))
101 ::osl::FileStatus aStatus( osl_FileStatus_Mask_Validate );
102 if (::osl::FileBase::E_None == aUserPathItem.getFileStatus(aStatus))
112 std::shared_ptr< comphelper::ConfigurationChanges > batch(
114 const int nEntry = m_xCertPathList->get_selected_index();
115 officecfg::Office::Common::Security::Scripting::CertDir::set(
116 nEntry == -1 ? OUString() : m_xCertPathList->get_id(nEntry), batch);
117 officecfg::Office::Common::Security::Scripting::ManualCertDir::set(m_sManualPath, batch);
120 catch (
const uno::Exception &)
137 uno::Reference<xml::crypto::XNSSInitializer> xCipherContextSupplier = xml::crypto::NSSInitializer::create(xContext);
139 if (!xCipherContextSupplier->getIsNSSinitialized())
141 return (xCipherContextSupplier->getNSSPath() ==
m_xCertPathList->get_id(nEntry));
143 catch (
const uno::Exception&)
155 HandleEntryChecked(m_xCertPathList->get_iter_index_in_parent(rRowCol.first));
166 for (
int i = 0;
i < nCount; ++
i)
181 if (sCertPath == rPath)
214 if (!m_sManualPath.isEmpty())
215 osl::FileBase::getFileURLFromSystemPath(m_sManualPath, sURL);
217 osl::Security().getHomeDir(sURL);
218 xFolderPicker->setDisplayDirectory(sURL);
219 xFolderPicker->setDescription(m_sAddDialogText);
221 if (xFolderPicker->execute() == ui::dialogs::ExecutableDialogResults::OK)
223 sURL = xFolderPicker->getDirectory();
225 if (osl::FileBase::E_None == osl::FileBase::getSystemPathFromFileURL(sURL, aPath))
226 AddCertPath(m_sManualLabel, aPath);
229 catch (
const uno::Exception &)
#define LINK(Instance, Class, Member)
void HandleEntryChecked(int nRow)
void AddManualCertPath(const OUString &sUserSetCertPath, bool bSelect=true)
std::unique_ptr< weld::Button > m_xOKButton
std::pair< const TreeIter &, int > iter_col
std::unique_ptr< weld::Button > m_xOKButton
void AddCertPath(const OUString &rProfile, const OUString &rPath, bool bSelect=true)
static std::shared_ptr< ConfigurationChanges > create(css::uno::Reference< css::uno::XComponentContext > const &context=comphelper::getProcessComponentContext())
IMPL_LINK(CertPathDialog, CheckHdl_Impl, const weld::TreeView::iter_col &, rRowCol, void)
virtual ~CertPathDialog() override
#define TOOLS_WARN_EXCEPTION(area, stream)
std::unique_ptr< weld::TreeView > m_xCertPathList
bool isActiveServicePath() const
IMPL_LINK_NOARG(CertPathDialog, OKHdl_Impl, weld::Button &, void)
Reference< XExecutableDialog > m_xDialog
Reference< XComponentContext > getProcessComponentContext()
std::unique_ptr< weld::Button > m_xManualButton
CertPathDialog(weld::Window *pParent)