[Libreoffice-commits] online.git: wsd/DocumentBroker.cpp wsd/Storage.cpp wsd/Storage.hpp
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Wed Nov 28 08:07:55 UTC 2018
wsd/DocumentBroker.cpp | 2
wsd/Storage.cpp | 102 ++++++++++++++++++++++++-------------------------
wsd/Storage.hpp | 29 ++++++++++++-
3 files changed, 77 insertions(+), 56 deletions(-)
New commits:
commit ed9c756c9ed9150f361340a2eb4dade9ec405935
Author: Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Wed Nov 28 09:07:29 2018 +0100
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Wed Nov 28 09:07:35 2018 +0100
StorageBase: make members private
Rename getUri() to getUriString(), so getUri() can expose a const
reference to _uri.
Change-Id: I0cd0faf08ba31bdf6a605be657e7ca2cf5fb33a6
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 9a2df5053..5b45a84d9 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -707,7 +707,7 @@ bool DocumentBroker::load(const std::shared_ptr<ClientSession>& session, const s
// Use the local temp file's timestamp.
_lastFileModifiedTime = Poco::File(_storage->getRootFilePath()).getLastModified();
- _tileCache.reset(new TileCache(_storage->getUri(), _lastFileModifiedTime, _cacheRoot, LOOLWSD::TileCachePersistent));
+ _tileCache.reset(new TileCache(_storage->getUriString(), _lastFileModifiedTime, _cacheRoot, LOOLWSD::TileCachePersistent));
_tileCache->setThreadOwner(std::this_thread::get_id());
}
diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp
index a3f86e743..a42534eaa 100644
--- a/wsd/Storage.cpp
+++ b/wsd/Storage.cpp
@@ -258,15 +258,15 @@ std::atomic<unsigned> LocalStorage::LastLocalStorageId;
std::unique_ptr<LocalStorage::LocalFileInfo> LocalStorage::getLocalFileInfo()
{
- const Poco::Path path = Poco::Path(_uri.getPath());
- LOG_DBG("Getting info for local uri [" << LOOLWSD::anonymizeUrl(_uri.toString()) << "], path [" << LOOLWSD::anonymizeUrl(path.toString()) << "].");
+ const Poco::Path path = Poco::Path(getUri().getPath());
+ LOG_DBG("Getting info for local uri [" << LOOLWSD::anonymizeUrl(getUri().toString()) << "], path [" << LOOLWSD::anonymizeUrl(path.toString()) << "].");
const auto& filename = path.getFileName();
const Poco::File file = Poco::File(path);
const Poco::Timestamp lastModified = file.getLastModified();
const size_t size = file.getSize();
- _fileInfo = FileInfo({filename, "localhost", lastModified, size});
+ setFileInfo(FileInfo({filename, "localhost", lastModified, size}));
// Set automatic userid and username
return std::unique_ptr<LocalStorage::LocalFileInfo>(new LocalFileInfo({"localhost" + std::to_string(LastLocalStorageId), "LocalHost#" + std::to_string(LastLocalStorageId++)}));
@@ -276,53 +276,53 @@ std::string LocalStorage::loadStorageFileToLocal(const Authorization& /*auth*/)
{
#ifndef MOBILEAPP
// /chroot/jailId/user/doc/childId/file.ext
- const std::string filename = Poco::Path(_uri.getPath()).getFileName();
- _jailedFilePath = Poco::Path(getLocalRootPath(), filename).toString();
- _jailedFilePathAnonym = LOOLWSD::anonymizeUrl(_jailedFilePath);
- LOG_INF("Public URI [" << LOOLWSD::anonymizeUrl(_uri.getPath()) <<
- "] jailed to [" << _jailedFilePathAnonym << "].");
+ const std::string filename = Poco::Path(getUri().getPath()).getFileName();
+ setRootFilePath(Poco::Path(getLocalRootPath(), filename).toString());
+ setRootFilePathAnonym(LOOLWSD::anonymizeUrl(getRootFilePath()));
+ LOG_INF("Public URI [" << LOOLWSD::anonymizeUrl(getUri().getPath()) <<
+ "] jailed to [" << getRootFilePathAnonym() << "].");
// Despite the talk about URIs it seems that _uri is actually just a pathname here
- const std::string publicFilePath = _uri.getPath();
+ const std::string publicFilePath = getUri().getPath();
- if (!FileUtil::checkDiskSpace(_jailedFilePath))
+ if (!FileUtil::checkDiskSpace(getRootFilePath()))
{
- throw StorageSpaceLowException("Low disk space for " + _jailedFilePathAnonym);
+ throw StorageSpaceLowException("Low disk space for " + getRootFilePathAnonym());
}
- LOG_INF("Linking " << LOOLWSD::anonymizeUrl(publicFilePath) << " to " << _jailedFilePathAnonym);
- if (!Poco::File(_jailedFilePath).exists() && link(publicFilePath.c_str(), _jailedFilePath.c_str()) == -1)
+ LOG_INF("Linking " << LOOLWSD::anonymizeUrl(publicFilePath) << " to " << getRootFilePathAnonym());
+ if (!Poco::File(getRootFilePath()).exists() && link(publicFilePath.c_str(), getRootFilePath().c_str()) == -1)
{
// Failed
- LOG_WRN("link(\"" << LOOLWSD::anonymizeUrl(publicFilePath) << "\", \"" << _jailedFilePathAnonym << "\") failed. Will copy. "
+ LOG_WRN("link(\"" << LOOLWSD::anonymizeUrl(publicFilePath) << "\", \"" << getRootFilePathAnonym() << "\") failed. Will copy. "
"Linking error: " << Util::symbolicErrno(errno) << " " << strerror(errno));
}
try
{
// Fallback to copying.
- if (!Poco::File(_jailedFilePath).exists())
+ if (!Poco::File(getRootFilePath()).exists())
{
- LOG_INF("Copying " << LOOLWSD::anonymizeUrl(publicFilePath) << " to " << _jailedFilePathAnonym);
- Poco::File(publicFilePath).copyTo(_jailedFilePath);
+ LOG_INF("Copying " << LOOLWSD::anonymizeUrl(publicFilePath) << " to " << getRootFilePathAnonym());
+ Poco::File(publicFilePath).copyTo(getRootFilePath());
_isCopy = true;
}
}
catch (const Poco::Exception& exc)
{
- LOG_ERR("copyTo(\"" << LOOLWSD::anonymizeUrl(publicFilePath) << "\", \"" << _jailedFilePathAnonym << "\") failed: " << exc.displayText());
+ LOG_ERR("copyTo(\"" << LOOLWSD::anonymizeUrl(publicFilePath) << "\", \"" << getRootFilePathAnonym() << "\") failed: " << exc.displayText());
throw;
}
- _isLoaded = true;
+ setLoaded(true);
// Now return the jailed path.
#ifndef KIT_IN_PROCESS
if (LOOLWSD::NoCapsForKit)
- return _jailedFilePath;
+ return getRootFilePath();
else
- return Poco::Path(_jailPath, filename).toString();
+ return Poco::Path(getJailPath(), filename).toString();
#else
- return _jailedFilePath;
+ return getRootFilePath();
#endif
#else // MOBILEAPP
@@ -340,22 +340,22 @@ StorageBase::SaveResult LocalStorage::saveLocalFileToStorage(const Authorization
{
try
{
- LOG_TRC("Saving local file to local file storage (isCopy: " << _isCopy << ") for " << _jailedFilePathAnonym);
+ LOG_TRC("Saving local file to local file storage (isCopy: " << _isCopy << ") for " << getRootFilePathAnonym());
// Copy the file back.
- if (_isCopy && Poco::File(_jailedFilePath).exists())
+ if (_isCopy && Poco::File(getRootFilePath()).exists())
{
- LOG_INF("Copying " << _jailedFilePathAnonym << " to " << LOOLWSD::anonymizeUrl(_uri.getPath()));
- Poco::File(_jailedFilePath).copyTo(_uri.getPath());
+ LOG_INF("Copying " << getRootFilePathAnonym() << " to " << LOOLWSD::anonymizeUrl(getUri().getPath()));
+ Poco::File(getRootFilePath()).copyTo(getUri().getPath());
}
// update its fileinfo object. This is used later to check if someone else changed the
// document while we are/were editing it
- _fileInfo._modifiedTime = Poco::File(_uri.getPath()).getLastModified();
- LOG_TRC("New FileInfo modified time in storage " << _fileInfo._modifiedTime);
+ getFileInfo()._modifiedTime = Poco::File(getUri().getPath()).getLastModified();
+ LOG_TRC("New FileInfo modified time in storage " << getFileInfo()._modifiedTime);
}
catch (const Poco::Exception& exc)
{
- LOG_ERR("copyTo(\"" << _jailedFilePathAnonym << "\", \"" << LOOLWSD::anonymizeUrl(_uri.getPath()) <<
+ LOG_ERR("copyTo(\"" << getRootFilePathAnonym() << "\", \"" << LOOLWSD::anonymizeUrl(getUri().getPath()) <<
"\") failed: " << exc.displayText());
return StorageBase::SaveResult::FAILED;
}
@@ -424,7 +424,7 @@ Poco::Timestamp iso8601ToTimestamp(const std::string& iso8601Time, const std::st
std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Authorization& auth)
{
// update the access_token to the one matching to the session
- Poco::URI uriObject(_uri);
+ Poco::URI uriObject(getUri());
auth.authorizeURI(uriObject);
const std::string uriAnonym = LOOLWSD::anonymizeUrl(uriObject.toString());
@@ -518,7 +518,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au
// Anonymize key values.
if (LOOLWSD::AnonymizeFilenames || LOOLWSD::AnonymizeUsernames)
{
- Util::mapAnonymized(Util::getFilenameFromURL(filename), Util::getFilenameFromURL(_uri.toString()));
+ Util::mapAnonymized(Util::getFilenameFromURL(filename), Util::getFilenameFromURL(getUri().toString()));
JsonUtil::findJSONValue(object, "ObfuscatedUserId", obfuscatedUserId, false);
if (!obfuscatedUserId.empty())
@@ -599,7 +599,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au
}
const Poco::Timestamp modifiedTime = iso8601ToTimestamp(lastModifiedTime, "LastModifiedTime");
- _fileInfo = FileInfo({filename, ownerId, modifiedTime, size});
+ setFileInfo(FileInfo({filename, ownerId, modifiedTime, size}));
return std::unique_ptr<WopiStorage::WOPIFileInfo>(new WOPIFileInfo(
{userId, obfuscatedUserId, userName, userExtraInfo, watermarkText, canWrite,
@@ -615,11 +615,11 @@ std::string WopiStorage::loadStorageFileToLocal(const Authorization& auth)
{
// WOPI URI to download files ends in '/contents'.
// Add it here to get the payload instead of file info.
- Poco::URI uriObject(_uri);
+ Poco::URI uriObject(getUri());
uriObject.setPath(uriObject.getPath() + "/contents");
auth.authorizeURI(uriObject);
- Poco::URI uriObjectAnonym(_uri);
+ Poco::URI uriObjectAnonym(getUri());
uriObjectAnonym.setPath(LOOLWSD::anonymizeUrl(uriObjectAnonym.getPath()) + "/contents");
const std::string uriAnonym = uriObjectAnonym.toString();
@@ -660,19 +660,19 @@ std::string WopiStorage::loadStorageFileToLocal(const Authorization& auth)
}
else // Successful
{
- _jailedFilePath = Poco::Path(getLocalRootPath(), _fileInfo._filename).toString();
- _jailedFilePathAnonym = LOOLWSD::anonymizeUrl(_jailedFilePath);
- std::ofstream ofs(_jailedFilePath);
+ setRootFilePath(Poco::Path(getLocalRootPath(), getFileInfo()._filename).toString());
+ setRootFilePathAnonym(LOOLWSD::anonymizeUrl(getRootFilePath()));
+ std::ofstream ofs(getRootFilePath());
std::copy(std::istreambuf_iterator<char>(rs),
std::istreambuf_iterator<char>(),
std::ostreambuf_iterator<char>(ofs));
ofs.close();
- LOG_INF("WOPI::GetFile downloaded " << getFileSize(_jailedFilePath) << " bytes from [" <<
- uriAnonym << "] -> " << _jailedFilePathAnonym << " in " << diff.count() << "s");
+ LOG_INF("WOPI::GetFile downloaded " << getFileSize(getRootFilePath()) << " bytes from [" <<
+ uriAnonym << "] -> " << getRootFilePathAnonym() << " in " << diff.count() << "s");
- _isLoaded = true;
+ setLoaded(true);
// Now return the jailed path.
- return Poco::Path(_jailPath, _fileInfo._filename).toString();
+ return Poco::Path(getJailPath(), getFileInfo()._filename).toString();
}
}
catch (const Poco::Exception& pexc)
@@ -690,12 +690,12 @@ StorageBase::SaveResult WopiStorage::saveLocalFileToStorage(const Authorization&
// TODO: Check if this URI has write permission (canWrite = true)
const bool isSaveAs = !saveAsPath.empty() && !saveAsFilename.empty();
- const std::string filePath(isSaveAs ? saveAsPath : _jailedFilePath);
+ const std::string filePath(isSaveAs ? saveAsPath : getRootFilePath());
const std::string filePathAnonym = LOOLWSD::anonymizeUrl(filePath);
const size_t size = getFileSize(filePath);
- Poco::URI uriObject(_uri);
+ Poco::URI uriObject(getUri());
uriObject.setPath(isSaveAs? uriObject.getPath(): uriObject.getPath() + "/contents");
auth.authorizeURI(uriObject);
const std::string uriAnonym = LOOLWSD::anonymizeUrl(uriObject.toString());
@@ -715,14 +715,14 @@ StorageBase::SaveResult WopiStorage::saveLocalFileToStorage(const Authorization&
{
// normal save
request.set("X-WOPI-Override", "PUT");
- request.set("X-LOOL-WOPI-IsModifiedByUser", _isUserModified? "true": "false");
- request.set("X-LOOL-WOPI-IsAutosave", _isAutosave? "true": "false");
+ request.set("X-LOOL-WOPI-IsModifiedByUser", isUserModified()? "true": "false");
+ request.set("X-LOOL-WOPI-IsAutosave", getIsAutosave()? "true": "false");
- if (!_forceSave)
+ if (!getForceSave())
{
// Request WOPI host to not overwrite if timestamps mismatch
request.set("X-LOOL-WOPI-Timestamp",
- Poco::DateTimeFormatter::format(Poco::DateTime(_fileInfo._modifiedTime),
+ Poco::DateTimeFormatter::format(Poco::DateTime(getFileInfo()._modifiedTime),
Poco::DateTimeFormat::ISO8601_FRAC_FORMAT));
}
}
@@ -824,7 +824,7 @@ StorageBase::SaveResult WopiStorage::saveLocalFileToStorage(const Authorization&
{
const std::string lastModifiedTime = JsonUtil::getJSONValue<std::string>(object, "LastModifiedTime");
LOG_TRC(wopiLog << " returns LastModifiedTime [" << lastModifiedTime << "].");
- _fileInfo._modifiedTime = iso8601ToTimestamp(lastModifiedTime, "LastModifiedTime");
+ getFileInfo()._modifiedTime = iso8601ToTimestamp(lastModifiedTime, "LastModifiedTime");
if (isSaveAs)
{
@@ -839,7 +839,7 @@ StorageBase::SaveResult WopiStorage::saveLocalFileToStorage(const Authorization&
// Reset the force save flag now, if any, since we are done saving
// Next saves shouldn't be saved forcefully unless commanded
- _forceSave = false;
+ forceSave(false);
}
else
{
@@ -885,8 +885,8 @@ StorageBase::SaveResult WopiStorage::saveLocalFileToStorage(const Authorization&
std::string WebDAVStorage::loadStorageFileToLocal(const Authorization& /*auth*/)
{
// TODO: implement webdav GET.
- _isLoaded = true;
- return _uri.toString();
+ setLoaded(true);
+ return getUri().toString();
}
StorageBase::SaveResult WebDAVStorage::saveLocalFileToStorage(const Authorization& /*auth*/, const std::string& /*saveAsPath*/, const std::string& /*saveAsFilename*/)
diff --git a/wsd/Storage.hpp b/wsd/Storage.hpp
index bccaa66a6..39ee3f036 100644
--- a/wsd/Storage.hpp
+++ b/wsd/Storage.hpp
@@ -127,7 +127,11 @@ public:
virtual ~StorageBase() {}
- const std::string getUri() const { return _uri.toString(); }
+ const Poco::URI& getUri() const { return _uri; }
+
+ const std::string getUriString() const { return _uri.toString(); }
+
+ const std::string& getJailPath() const { return _jailPath; };
/// Returns the root path to the jailed file.
const std::string& getRootFilePath() const { return _jailedFilePath; };
@@ -140,20 +144,37 @@ public:
_jailedFilePath = newPath;
}
+ const std::string& getRootFilePathAnonym() const { return _jailedFilePathAnonym; };
+
+ void setRootFilePathAnonym(const std::string& newPath)
+ {
+ _jailedFilePathAnonym = newPath;
+ }
+
+ void setLoaded(bool isLoaded) { _isLoaded = isLoaded; }
+
bool isLoaded() const { return _isLoaded; }
/// Asks the storage object to force overwrite to storage upon next save
/// even if document turned out to be changed in storage
- void forceSave() { _forceSave = true; }
+ void forceSave(bool newSave = true) { _forceSave = newSave; }
+
+ bool getForceSave() const { return _forceSave; }
/// To be able to set the WOPI extension header appropriately.
void setUserModified(bool isUserModified) { _isUserModified = isUserModified; }
+ bool isUserModified() const { return _isUserModified; }
+
/// To be able to set the WOPI 'is autosave?' header appropriately.
void setIsAutosave(bool isAutosave) { _isAutosave = isAutosave; }
+ bool getIsAutosave() const { return _isAutosave; }
+
+ void setFileInfo(const FileInfo& fileInfo) { _fileInfo = fileInfo; }
+
/// Returns the basic information about the file.
- const FileInfo& getFileInfo() const { return _fileInfo; }
+ FileInfo& getFileInfo() { return _fileInfo; }
std::string getFileExtension() const { return Poco::Path(_fileInfo._filename).getExtension(); }
@@ -181,7 +202,7 @@ protected:
/// Returns the root path of the jail directory of docs.
std::string getLocalRootPath() const;
-protected:
+private:
const Poco::URI _uri;
std::string _localStorePath;
std::string _jailPath;
More information about the Libreoffice-commits
mailing list