Kaydet (Commit) f0657475 authored tarafından Miklos Vajna's avatar Miklos Vajna

xmlsecurity: support tmp storage instead of tmp stream for OOXML

First step towards having a working export, since OOXML uses one stream
/ signature, so we need a storage for all signatures, not just a stream.

Change-Id: Id5edfd3ce7e8e4177b0071badc6eb4330a525281
üst e69c4f97
...@@ -57,6 +57,8 @@ private: ...@@ -57,6 +57,8 @@ private:
css::uno::Reference < css::embed::XStorage > mxStore; css::uno::Reference < css::embed::XStorage > mxStore;
css::uno::Reference < css::io::XStream > mxSignatureStream; css::uno::Reference < css::io::XStream > mxSignatureStream;
css::uno::Reference < css::io::XStream > mxTempSignatureStream; css::uno::Reference < css::io::XStream > mxTempSignatureStream;
/// Storage containing all OOXML signatures, unused for ODF.
css::uno::Reference<css::embed::XStorage> mxTempSignatureStorage;
SignatureInformations maCurrentSignatureInformations; SignatureInformations maCurrentSignatureInformations;
bool mbVerifySignatures; bool mbVerifySignatures;
bool mbSignaturesChanged; bool mbSignaturesChanged;
......
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
#include <vcl/layout.hxx> #include <vcl/layout.hxx>
#include <unotools/configitem.hxx> #include <unotools/configitem.hxx>
#include <comphelper/storagehelper.hxx>
using namespace css::security; using namespace css::security;
using namespace css::uno; using namespace css::uno;
...@@ -796,13 +797,26 @@ SignatureStreamHelper DigitalSignaturesDialog::ImplOpenSignatureStream( ...@@ -796,13 +797,26 @@ SignatureStreamHelper DigitalSignaturesDialog::ImplOpenSignatureStream(
sal_Int32 nStreamOpenMode, bool bTempStream) sal_Int32 nStreamOpenMode, bool bTempStream)
{ {
SignatureStreamHelper aHelper; SignatureStreamHelper aHelper;
if (mxStore.is())
{
uno::Reference<container::XNameAccess> xNameAccess(mxStore, uno::UNO_QUERY);
if (xNameAccess.is() && xNameAccess->hasByName("[Content_Types].xml"))
aHelper.nStorageFormat = embed::StorageFormats::OFOPXML;
}
if (bTempStream) if (bTempStream)
{ {
if (nStreamOpenMode & css::embed::ElementModes::TRUNCATE) if (nStreamOpenMode & css::embed::ElementModes::TRUNCATE)
{ {
//We write always into a new temporary stream. //We write always into a new temporary stream.
mxTempSignatureStream.set(css::io::TempFile::create(mxCtx), UNO_QUERY_THROW); mxTempSignatureStream.set(css::io::TempFile::create(mxCtx), UNO_QUERY_THROW);
aHelper.xSignatureStream = mxTempSignatureStream; if (aHelper.nStorageFormat != embed::StorageFormats::OFOPXML)
aHelper.xSignatureStream = mxTempSignatureStream;
else
{
mxTempSignatureStorage = comphelper::OStorageHelper::GetStorageOfFormatFromStream(ZIP_STORAGE_FORMAT_STRING, mxTempSignatureStream);
aHelper.xSignatureStorage = mxTempSignatureStorage;
}
} }
else else
{ {
...@@ -833,7 +847,7 @@ SignatureStreamHelper DigitalSignaturesDialog::ImplOpenSignatureStream( ...@@ -833,7 +847,7 @@ SignatureStreamHelper DigitalSignaturesDialog::ImplOpenSignatureStream(
if (nStreamOpenMode & css::embed::ElementModes::TRUNCATE) if (nStreamOpenMode & css::embed::ElementModes::TRUNCATE)
{ {
if (aHelper.xSignatureStream.is()) if (aHelper.xSignatureStream.is() && aHelper.nStorageFormat != embed::StorageFormats::OFOPXML)
{ {
css::uno::Reference < css::io::XTruncate > xTruncate( css::uno::Reference < css::io::XTruncate > xTruncate(
aHelper.xSignatureStream, UNO_QUERY_THROW); aHelper.xSignatureStream, UNO_QUERY_THROW);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment