#include "webserv.hpp" Route::Route(string location, JSONNode *datas) : _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()); } } } Route::~Route(void) {} string Route::getLocation(void) { return _location; } string Route::getRoot(void) { return _root; } string Route::getReturn(void) { return _ret; } std::vector Route::getIndexs(void) { return _indexs; } string Route::getAutoindex(string path) { if (!_autoindex) return ""; std::stringstream page; DIR *dir; struct dirent *entry; struct stat info; if ((dir = opendir(path.c_str())) == NULL) return ""; else { page << path << " files :\n"; while ((entry = readdir(dir)) != NULL) { if (entry->d_name[0] == '.') continue; page << "- " << entry->d_name << "\n"; if (stat(path.c_str(), &info) != 0) std::cerr << "stat() error on " << path << ": " << strerror(errno) << "\n"; } closedir(dir); } return page.str(); } string Route::read_file(string path) { string str; std::stringstream ret; struct stat info; if (stat(path.c_str(), &info) != 0) { std::cerr << "stat() error on " << path << ": " << strerror(errno) << "\n"; return ""; } std::ifstream file(path.c_str()); while (file) { std::getline(file, str); ret << str << "\n"; } return (ret.str()); } string Route::correctUri(string uri) { std::stringstream ret; std::vector::iterator it; std::vector::iterator it2; cout << "Correcting request: " << uri << " with root: " << _root << "\n"; ret << _root; std::vector loc_split = split(_location, '/'); std::vector uri_split = split(uri, '/'); it2 = uri_split.begin(); for (it = loc_split.begin(); it < loc_split.end(); it++) { while (*it2 == "") it2++; while (*it == "") it++; it2++; } while (it2 < uri_split.end()) { ret << "/" << *(it2++); } cout << "resutlt: " << ret.str() << "\n"; return ret.str(); }