wsd/DocumentBroker.cpp | 3 ++- wsd/LOOLWSD.cpp | 8 +++++++- wsd/LOOLWSD.hpp | 7 +++++++ wsd/Storage.hpp | 4 +++- 4 files changed, 19 insertions(+), 3 deletions(-)
New commits: commit 194faa6d693416ece2e17da34871b109e5243a6f Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Tue Jun 6 23:43:48 2017 -0400 wsd: force readonly for view file types per discovery.xml File extensions marked as view (as opposed to edit) in discovery.xml are now forced to be read-only, regardless of what the client tries to request. Change-Id: I3eb00c33ff716800dc317f7377281c6d5f0909d7 Reviewed-on: https://gerrit.libreoffice.org/38480 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index a80b9395..d2c44b63 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -431,7 +431,8 @@ bool DocumentBroker::load(const std::shared_ptr<ClientSession>& session, const s username = wopifileinfo->_username; userExtraInfo = wopifileinfo->_userExtraInfo; - if (!wopifileinfo->_userCanWrite) + if (!wopifileinfo->_userCanWrite || + LOOLWSD::IsViewFileExtension(wopiStorage->getFileExtension())) { LOG_DBG("Setting the session as readonly"); session->setReadOnly(); diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 445027e2..07d371c8 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -550,6 +550,7 @@ std::string LOOLWSD::LOKitVersion; std::string LOOLWSD::ConfigFile = LOOLWSD_CONFIGDIR "/loolwsd.xml"; Util::RuntimeConstant<bool> LOOLWSD::SSLEnabled; Util::RuntimeConstant<bool> LOOLWSD::SSLTermination; +std::set<std::string> LOOLWSD::ViewFileExtensions; static std::string UnitTestLibrary; @@ -2176,7 +2177,12 @@ private: for (unsigned long it = 0; it < listNodes->length(); ++it) { - static_cast<Element*>(listNodes->item(it))->setAttribute(urlsrc, uriValue); + Element* elem = static_cast<Element*>(listNodes->item(it)); + elem->setAttribute(urlsrc, uriValue); + + // Set the View extensions cache as well. + if (elem->getAttribute("name") == "view") + LOOLWSD::ViewFileExtensions.insert(elem->getAttribute("ext")); } std::ostringstream ostrXML; diff --git a/wsd/LOOLWSD.hpp b/wsd/LOOLWSD.hpp index 46538dc0..a608c6c1 100644 --- a/wsd/LOOLWSD.hpp +++ b/wsd/LOOLWSD.hpp @@ -55,6 +55,7 @@ public: static std::atomic<unsigned> NumConnections; static bool TileCachePersistent; static std::unique_ptr<TraceFileWriter> TraceDumper; + static std::set<std::string> ViewFileExtensions; /// Flag to shutdown the server. std::atomic<bool> ShutdownFlag; @@ -81,6 +82,12 @@ public: return LOOLWSD::SSLTermination.get(); } + /// Return truee iff extension is marked as view action in discovery.xml. + static bool IsViewFileExtension(const std::string& extension) + { + return ViewFileExtensions.find(extension) != ViewFileExtensions.end(); + } + /// Returns the value of the specified application configuration, /// of the default, if one doesn't exist. template<typename T> diff --git a/wsd/Storage.hpp b/wsd/Storage.hpp index 60c73275..09002bde 100644 --- a/wsd/Storage.hpp +++ b/wsd/Storage.hpp @@ -95,7 +95,9 @@ public: void forceSave() { _forceSave = true; } /// Returns the basic information about the file. - FileInfo getFileInfo() { return _fileInfo; } + const FileInfo& getFileInfo() const { return _fileInfo; } + + std::string getFileExtension() const { return Poco::Path(_fileInfo._filename).getExtension(); } /// Returns a local file path for the given URI. /// If necessary copies the file locally first. _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits