Updated 'Files' handlers to use the 'Principal' type. This patch updates the HTTP endpoint handlers in the Mesos `Files` process to accept the `Principal` type instead of an `Option<string>& principal`.
Review: https://reviews.apache.org/r/56619/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/a7a84a87 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/a7a84a87 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/a7a84a87 Branch: refs/heads/master Commit: a7a84a87ff4fef8e3062b72bf795fa9540ab5325 Parents: dc20257 Author: Greg Mann <[email protected]> Authored: Mon Mar 6 12:39:25 2017 -0800 Committer: Vinod Kone <[email protected]> Committed: Mon Mar 6 12:39:25 2017 -0800 ---------------------------------------------------------------------- src/files/files.cpp | 46 +++++++++++++++++++++++++--------------------- src/files/files.hpp | 8 ++++---- 2 files changed, 29 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/a7a84a87/src/files/files.cpp ---------------------------------------------------------------------- diff --git a/src/files/files.cpp b/src/files/files.cpp index 8327f80..f066146 100644 --- a/src/files/files.cpp +++ b/src/files/files.cpp @@ -83,6 +83,8 @@ using process::Process; using process::TLDR; using process::wait; // Necessary on some OS's to disambiguate. +using process::http::authentication::Principal; + using std::list; using std::map; using std::string; @@ -102,20 +104,20 @@ public: Future<Nothing> attach( const string& path, const string& name, - const Option<lambda::function<Future<bool>(const Option<string>&)>>& - authorized); + const Option<lambda::function<Future<bool>( + const Option<Principal>&)>>& authorized); void detach(const string& name); Future<Try<list<FileInfo>, FilesError>> browse( const string& path, - const Option<string>& principal); + const Option<Principal>& principal); Future<Try<tuple<size_t, string>, FilesError>> read( const size_t offset, const Option<size_t>& length, const string& path, - const Option<string>& principal); + const Option<Principal>& principal); protected: virtual void initialize(); @@ -128,7 +130,9 @@ private: // out of the chroot. Result<string> resolve(const string& path); - Future<bool> authorize(string requestedPath, const Option<string>& principal); + Future<bool> authorize( + string requestedPath, + const Option<Principal>& principal); // HTTP endpoints. @@ -139,7 +143,7 @@ private: // in the path (see `FileInfo` model override for the format). Future<http::Response> _browse( const http::Request& request, - const Option<string>& principal); + const Option<Principal>& principal); // Continuation of `read()`. Future<Try<tuple<size_t, string>, FilesError>> _read( @@ -151,21 +155,21 @@ private: // See the jquery pailer for the expected behavior. Future<http::Response> __read( const http::Request& request, - const Option<string>& principal); + const Option<Principal>& principal); // Returns the raw file contents for a given path. // Requests have the following parameters: // path: The directory to browse. Required. Future<http::Response> download( const http::Request& request, - const Option<string>& principal); + const Option<Principal>& principal); Future<http::Response> _download(const string& path); // Returns the internal virtual path mapping. Future<http::Response> debug( const http::Request& request, - const Option<string>& principal); + const Option<Principal>& principal); const static string BROWSE_HELP; const static string READ_HELP; @@ -177,7 +181,7 @@ private: // Set of authorization functions. They will be called whenever // access to the path used as key is requested, and will pass // as parameter the principal returned by the HTTP authenticator. - hashmap<string, lambda::function<Future<bool>(const Option<string>&)>> + hashmap<string, lambda::function<Future<bool>(const Option<Principal>&)>> authorizations; // The authentication realm, if any, into which this process' @@ -271,7 +275,7 @@ void FilesProcess::initialize() Future<Nothing> FilesProcess::attach( const string& path, const string& name, - const Option<lambda::function<Future<bool>(const Option<string>&)>>& + const Option<lambda::function<Future<bool>(const Option<Principal>&)>>& authorized) { Result<string> result = os::realpath(path); @@ -337,7 +341,7 @@ const string FilesProcess::BROWSE_HELP = HELP( Future<bool> FilesProcess::authorize( string requestedPath, - const Option<string>& principal) + const Option<Principal>& principal) { // The path may contain a trailing forward slash. Since we store the // authorization callbacks without the trailing slash, we must remove it here, @@ -363,7 +367,7 @@ Future<bool> FilesProcess::authorize( Future<http::Response> FilesProcess::_browse( const http::Request& request, - const Option<string>& principal) + const Option<Principal>& principal) { Option<string> path = request.url.query.get("path"); @@ -409,7 +413,7 @@ Future<http::Response> FilesProcess::_browse( Future<Try<list<FileInfo>, FilesError>> FilesProcess::browse( const string& path, - const Option<string>& principal) + const Option<Principal>& principal) { return authorize(path, principal) .then(defer(self(), @@ -484,7 +488,7 @@ const string FilesProcess::READ_HELP = HELP( Future<http::Response> FilesProcess::__read( const http::Request& request, - const Option<string>& principal) + const Option<Principal>& principal) { Option<string> path = request.url.query.get("path"); @@ -584,7 +588,7 @@ Future<Try<tuple<size_t, string>, FilesError>> FilesProcess::read( const size_t offset, const Option<size_t>& length, const string& path, - const Option<string>& principal) + const Option<Principal>& principal) { return authorize(path, principal) .then(defer(self(), @@ -719,7 +723,7 @@ const string FilesProcess::DOWNLOAD_HELP = HELP( Future<http::Response> FilesProcess::download( const http::Request& request, - const Option<string>& principal) + const Option<Principal>& principal) { Option<string> path = request.url.query.get("path"); @@ -790,7 +794,7 @@ const string FilesProcess::DEBUG_HELP = HELP( Future<http::Response> FilesProcess::debug( const http::Request& request, - const Option<string>& principal ) + const Option<Principal>& principal) { JSON::Object object; foreachpair (const string& name, const string& path, paths) { @@ -902,7 +906,7 @@ Files::~Files() Future<Nothing> Files::attach( const string& path, const string& name, - const Option<lambda::function<Future<bool>(const Option<string>&)>>& + const Option<lambda::function<Future<bool>(const Option<Principal>&)>>& authorized) { return dispatch(process, &FilesProcess::attach, path, name, authorized); @@ -917,7 +921,7 @@ void Files::detach(const string& name) Future<Try<list<FileInfo>, FilesError>> Files::browse( const string& path, - const Option<string>& principal) + const Option<Principal>& principal) { return dispatch(process, &FilesProcess::browse, path, principal); } @@ -927,7 +931,7 @@ Future<Try<tuple<size_t, string>, FilesError>> Files::read( const size_t offset, const Option<size_t>& length, const string& path, - const Option<string>& principal) + const Option<Principal>& principal) { return dispatch(process, &FilesProcess::read, http://git-wip-us.apache.org/repos/asf/mesos/blob/a7a84a87/src/files/files.hpp ---------------------------------------------------------------------- diff --git a/src/files/files.hpp b/src/files/files.hpp index 8cffc26..1e123fa 100644 --- a/src/files/files.hpp +++ b/src/files/files.hpp @@ -82,8 +82,8 @@ public: process::Future<Nothing> attach( const std::string& path, const std::string& name, - const Option<lambda::function< - process::Future<bool>(const Option<std::string>&)>>& + const Option<lambda::function<process::Future<bool>( + const Option<process::http::authentication::Principal>&)>>& authorized = None()); // Removes the specified name. @@ -92,14 +92,14 @@ public: // Returns a file listing for a directory similar to `ls -l`. process::Future<Try<std::list<FileInfo>, FilesError>> browse( const std::string& path, - const Option<std::string>& principal); + const Option<process::http::authentication::Principal>& principal); // Returns the size and data of file. process::Future<Try<std::tuple<size_t, std::string>, FilesError>> read( const size_t offset, const Option<size_t>& length, const std::string& path, - const Option<std::string>& principal); + const Option<process::http::authentication::Principal>& principal); private: FilesProcess* process;
