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()26 WebServer::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()40 WebServer::~WebServer()
41 {
42   delete m_webServer;
43 }
44 
start()45 void WebServer::start()
46 {
47   m_webServer = new webserver::WebServer(this);
48 }
49 
onProcessRequest(webserver::IRequest * request,webserver::IResponse * response)50 void 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