#include "webserv.hpp" /* |==========| * Route constructor: * A route is a class which is used with each request to know how to handle uri * requested They are defined with conf file from locations block for raw routes * and from servers blocks for Server class which herite from Route * * Input: The Server parent for locations blocks, the uri which lead to the * route and the JSON node giving conf datas * Output: A Route object */ Route::Route(Server *server, string location, JSONNode *datas) : _server(server), _location(location) { JSONObject object = datas->obj(); JSONNode *tmp; if ((tmp = object["root"])) _root = tmp->str(); if ((tmp = object["return"])) _ret = tmp->str(); if ((tmp = object["autoindex"])) _autoindex = tmp->boo(); if ((tmp = object["indexs"])) { JSONList indexs = tmp->lst(); for (JSONList::iterator it = indexs.begin(); it < indexs.end(); it++) { _indexs.push_back((*it)->str()); } } if ((tmp = object["allowed_methods"])) { JSONList headers = tmp->lst(); for (JSONList::iterator it = headers.begin(); it < headers.end(); it++) { _allowed_methods.push_back((*it)->str()); } } if ((tmp = object["cgi"])) { JSONObject cgis = tmp->obj(); for (JSONObject::iterator it = cgis.begin(); it != cgis.end(); it++) { _cgi[(*it).first] = (*it).second->str(); } } if ((tmp = object["client_max_body_size"])) _client_max_body_size = tmp->nbr(); } /* Route destructor */ Route::~Route(void) {} /* Getters ... */ string Route::getLocation(void) { return _location; } string Route::getRoot(void) { return _root; } string Route::getReturn(void) { return _ret; } /* |==========| * Find either an autoindex or an index into the directory required by request * * Input: The uri client asked, the real local path to the directory * Output: The file or the autoindex page to display */ string Route::getIndex(string uri, string path) { std::stringstream content; std::stringstream ret; DIR *dir; struct dirent *entry; struct stat info; std::vector< string >::iterator it; cout << "get index(): path=" << path << "\n"; if ((dir = opendir(path.c_str())) == NULL) return ""; else { content << "