loolwsd/LOOLWSD.hpp | 14 ++++++++------ loolwsd/Storage.hpp | 13 +++++++++---- 2 files changed, 17 insertions(+), 10 deletions(-)
New commits: commit e5fcdb890e54568aa62fbc61c3454d6f2d106758 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Tue Mar 8 19:50:35 2016 -0500 loolwsd: corrections to file and wopi URI handling Change-Id: I7389a30931be01a40714167039055a758187bd82 Reviewed-on: https://gerrit.libreoffice.org/23053 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> diff --git a/loolwsd/LOOLWSD.hpp b/loolwsd/LOOLWSD.hpp index 77d0ea0..33f6913 100644 --- a/loolwsd/LOOLWSD.hpp +++ b/loolwsd/LOOLWSD.hpp @@ -39,12 +39,12 @@ public: Log::info("DocumentURI: url: " + url + ", jailRoot: " + jailRoot + ", childId: " + childId); // TODO: Sanitize the url and limit access! - auto uriPublic = Poco::URI(url); - uriPublic.normalize(); + std::string decodedUrl; + Poco::URI::decode(url, decodedUrl); + auto uriPublic = Poco::URI(decodedUrl); + Log::info("Public URI [" + uriPublic.toString() + "]."); - const auto publicFilePath = uriPublic.getPath(); - - if (publicFilePath.empty()) + if (uriPublic.getPath().empty()) throw std::runtime_error("Invalid URL."); // This lock could become a bottleneck. @@ -62,6 +62,8 @@ public: auto uriJailed = uriPublic; if (uriPublic.isRelative() || uriPublic.getScheme() == "file") { + uriPublic.normalize(); + Log::info("Public URI [" + uriPublic.toString() + "] is a file."); std::unique_ptr<StorageBase> storage(new LocalStorage(jailRoot, jailPath.toString())); const auto localPath = storage->getFilePathFromURI(uriPublic.getPath()); uriJailed = Poco::URI(Poco::URI("file://"), localPath); @@ -78,7 +80,7 @@ public: auto document = std::shared_ptr<DocumentURI>(new DocumentURI(uriPublic, uriJailed, childId)); - Log::info("DocumentURI [" + publicFilePath + "] created."); + Log::info("DocumentURI [" + uriPublic.toString() + "] created."); return document; } diff --git a/loolwsd/Storage.hpp b/loolwsd/Storage.hpp index 8fcf773..5dadb9d 100644 --- a/loolwsd/Storage.hpp +++ b/loolwsd/Storage.hpp @@ -131,21 +131,26 @@ public: /// uri format: http://server/<...>/wopi*/files/<id>/content std::string getFilePathFromURI(const std::string& uri) override { + Log::info("Downloading URI [" + uri + "]."); + Poco::URI uriObject(uri); Poco::Net::HTTPClientSession session(uriObject.getHost(), uriObject.getPort()); - Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, uri, Poco::Net::HTTPMessage::HTTP_1_1); - Poco::Net::HTTPResponse response; + Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, uriObject.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1); session.sendRequest(request); + Poco::Net::HTTPResponse response; std::istream& rs = session.receiveResponse(response); Log::info() << "WOPI::GetFile Status: " << response.getStatus() << " " << response.getReason() << Log::end; //TODO: Get proper filename. - const std::string local_filename = _localStorePath + "/filename"; + const auto filename = "filename"; + const std::string local_filename = Poco::Path(getRootPath(), filename).toString(); std::ofstream ofs(local_filename); std::copy(std::istreambuf_iterator<char>(rs), std::istreambuf_iterator<char>(), std::ostreambuf_iterator<char>(ofs)); - return local_filename; + + // Now return the jailed path. + return Poco::Path(_jailPath, filename).toString(); } bool restoreFileToURI(const std::string& path, const std::string& uri) override _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits