23 #include "static_processor.h" 24 #include <webview/file_reply.h> 25 #include <webview/error_reply.h> 27 #include <core/exception.h> 28 #include <logging/logger.h> 51 const char *htdocs_dir,
55 __baseurl = strdup(baseurl);
56 __baseurl_len = strlen(__baseurl);
57 __htdocs_dir = strdup(htdocs_dir);
58 __htdocs_dir_len = strlen(__htdocs_dir);
74 const char *upload_data,
75 size_t *upload_data_size,
78 if ( strncmp(__baseurl, url, __baseurl_len) == 0 ) {
80 std::string file_path = std::string(__htdocs_dir) + std::string(url).substr(__baseurl_len);
83 char *realfile = realpath(file_path.c_str(), rf);
85 if (errno == ENOENT) {
87 }
else if (errno == EACCES) {
91 strerror_r(errno, tmp,
sizeof(tmp));
93 "File access failed: %s", tmp);
96 if (strncmp(realfile, __htdocs_dir, __htdocs_dir_len) == 0) {
101 __logger->log_error(
"WebStaticReqProc",
102 "Cannot fulfill request for file %s," 103 " exception follows", url);
104 __logger->log_error(
"WebStaticReqProc", e);
111 "Access forbidden, breakout detected.");
116 __logger->log_error(
"WebStaticReqProc",
"Called for invalid base url " 117 "(url: %s, baseurl: %s)", url, __baseurl);
Dynamic raw file transfer reply.
Fawkes library namespace.
Base class for exceptions in Fawkes.
iterator begin()
Get iterator for messages.
virtual ~WebviewStaticRequestProcessor()
Destructor.
virtual fawkes::WebReply * process_request(const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **session_data)
Process a request.
WebviewStaticRequestProcessor(const char *baseurl, const char *htdocs_dir, fawkes::Logger *logger)
Constructor.