1 // Aseprite 2 // Copyright (C) 2001-2015 David Capello 3 // 4 // This program is distributed under the terms of 5 // the End-User License Agreement for Aseprite. 6 7 #ifdef HAVE_CONFIG_H 8 #include "config.h" 9 #endif 10 11 #ifdef ENABLE_WEBSERVER 12 13 #include "app/webserver.h" 14 15 #include "base/fs.h" 16 #include "base/path.h" 17 #include "app/resource_finder.h" 18 #include "webserver/webserver.h" 19 20 #include <fstream> 21 22 #define API_VERSION 1 23 24 namespace app { 25 WebServer()26WebServer::WebServer() 27 : m_webServer(NULL) 28 { 29 ResourceFinder rf; 30 rf.includeDataDir("www"); 31 32 while (rf.next()) { 33 if (base::is_directory(rf.filename())) { 34 m_wwwpath = rf.filename(); 35 break; 36 } 37 } 38 } 39 ~WebServer()40WebServer::~WebServer() 41 { 42 delete m_webServer; 43 } 44 start()45void WebServer::start() 46 { 47 m_webServer = new webserver::WebServer(this); 48 } 49 onProcessRequest(webserver::IRequest * request,webserver::IResponse * response)50void WebServer::onProcessRequest(webserver::IRequest* request, 51 webserver::IResponse* response) 52 { 53 std::string uri = request->getUri(); 54 if (!uri.empty() && uri[uri.size()-1] == '/') 55 uri.erase(uri.size()-1); 56 57 if (uri == "/version") { 58 response->setContentType("text/plain"); 59 response->getStream() << "{\"package\":\"" << PACKAGE "\"," 60 << "\"version\":\"" << VERSION << "\"," 61 << "\"webserver\":\"" << m_webServer->getName() << "\"," 62 << "\"api\":\"" << API_VERSION << "\"}"; 63 } 64 else { 65 if (uri == "/" || uri.empty()) 66 uri = "/index.html"; 67 68 std::string fn = base::join_path(m_wwwpath, uri); 69 if (base::is_file(fn)) { 70 response->sendFile(fn.c_str()); 71 } 72 else { 73 response->setStatusCode(404); 74 response->getStream() << "Not found\n" 75 << "URI = " << uri << "\n" 76 << "Local file = " << fn; 77 } 78 } 79 } 80 81 } 82 83 #endif // ENABLE_WEBSERVER 84