mirror of
https://github.com/KeyZox71/webserv.git
synced 2025-05-10 20:48:46 +02:00
「🔨」 fix: fixed error with config and handled properly exception
This commit is contained in:
@ -25,8 +25,7 @@ cgi.go = "/bin/go"
|
||||
[server.location./redir]
|
||||
redirect = "https://kanel.ovh"
|
||||
|
||||
[serverr]
|
||||
server_names = { "ptnnnn.local"}
|
||||
[default]
|
||||
host = "127.0.0.1"
|
||||
port = 9090
|
||||
|
||||
@ -37,5 +36,5 @@ port = 9090
|
||||
methods = { "GET", "DELETE" }
|
||||
root = "/var/lib/docker/volumes/test_data/_data"
|
||||
dirlist = false
|
||||
cgi.py = "/bin/python
|
||||
cgi.py = "/bin/python"
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/14 12:20:06 by adjoly #+# #+# */
|
||||
/* Updated: 2025/05/01 12:48:12 by adjoly ### ########.fr */
|
||||
/* Updated: 2025/05/01 15:29:53 by adjoly ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -28,6 +28,8 @@ class Config {
|
||||
|
||||
Logger *getLogger(void) { return _log; }
|
||||
|
||||
Server *getDefaultServer(void) const { return _default; }
|
||||
|
||||
std::vector<Server *> getServers(void) { return _servers; }
|
||||
Server *getServer(size_t i) {
|
||||
try {
|
||||
@ -40,6 +42,7 @@ class Config {
|
||||
|
||||
private:
|
||||
std::vector<Server *> _servers;
|
||||
Server *_default;
|
||||
};
|
||||
|
||||
}; // namespace config
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/03/19 14:11:28 by adjoly #+# #+# */
|
||||
/* Updated: 2025/04/30 17:10:53 by adjoly ### ########.fr */
|
||||
/* Updated: 2025/05/01 15:32:31 by adjoly ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -25,6 +25,7 @@ namespace config {
|
||||
class Server {
|
||||
public:
|
||||
Server(toml::ANode *);
|
||||
Server(toml::ANode *, void *);
|
||||
~Server();
|
||||
|
||||
/**
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/14 14:14:39 by adjoly #+# #+# */
|
||||
/* Updated: 2025/05/01 13:22:48 by adjoly ### ########.fr */
|
||||
/* Updated: 2025/05/01 15:25:45 by adjoly ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -6,10 +6,11 @@
|
||||
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/14 12:53:54 by adjoly #+# #+# */
|
||||
/* Updated: 2025/05/01 11:21:47 by adjoly ### ########.fr */
|
||||
/* Updated: 2025/05/01 16:31:45 by adjoly ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "log.hpp"
|
||||
#include "node/default.hpp"
|
||||
#include "webserv.hpp"
|
||||
#include "cppeleven.hpp"
|
||||
@ -44,11 +45,24 @@ Config::Config(std::string &filename) {
|
||||
if (it->second->type() == toml::TABLE) {
|
||||
_log->info("taking server from table : " + it->first);
|
||||
try {
|
||||
if (it->first == "default") {
|
||||
_default = new Server(it->second, not_nullptr);
|
||||
} else {
|
||||
Server *srv = new Server(it->second);
|
||||
_servers.push_back(srv);
|
||||
}
|
||||
} catch (std::runtime_error &e) {
|
||||
_log->error(e.what());
|
||||
break;
|
||||
if (!_servers.empty()) {
|
||||
for (auto it = range(_servers))
|
||||
delete (*it);
|
||||
}
|
||||
if (_default != not_nullptr) {
|
||||
delete _default;
|
||||
}
|
||||
delete table;
|
||||
delete file;
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/03/24 15:10:07 by adjoly #+# #+# */
|
||||
/* Updated: 2025/05/01 10:08:15 by adjoly ### ########.fr */
|
||||
/* Updated: 2025/05/01 16:30:28 by adjoly ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
|
||||
using namespace webserv::config;
|
||||
|
||||
Server::Server(toml::ANode *node) : _table(node) {
|
||||
Server::Server(toml::ANode *node) : _routes(not_nullptr), _server_names(not_nullptr), _table(node) {
|
||||
bool found;
|
||||
|
||||
if (_table == not_nullptr)
|
||||
@ -31,7 +31,7 @@ Server::Server(toml::ANode *node) : _table(node) {
|
||||
if (host != not_nullptr) {
|
||||
_host = *static_cast<std::string *>(host);
|
||||
} else {
|
||||
delete _table;
|
||||
//delete _table;
|
||||
throw std::runtime_error(
|
||||
"no host specified - please specify one in server.host");
|
||||
}
|
||||
@ -88,10 +88,11 @@ Server::Server(toml::ANode *node) : _table(node) {
|
||||
}
|
||||
|
||||
Server::~Server(void) {
|
||||
for (auto it = prange(_routes)) {
|
||||
if (_routes != not_nullptr && !_routes->empty()) {
|
||||
for (auto it = prange(_routes))
|
||||
delete it->second;
|
||||
}
|
||||
delete _routes;
|
||||
}
|
||||
delete _err_pages;
|
||||
if (_server_names != not_nullptr)
|
||||
delete _server_names;
|
||||
@ -138,3 +139,53 @@ Route *Server::whatRoute(const URL &url) {
|
||||
}
|
||||
return not_nullptr;
|
||||
}
|
||||
|
||||
Server::Server(toml::ANode *node, void *) : _routes(not_nullptr), _server_names(not_nullptr), _table(node) {
|
||||
bool found;
|
||||
|
||||
if (_table == not_nullptr)
|
||||
return;
|
||||
|
||||
// host parsing
|
||||
void *host = accessValue("host", toml::STRING, _table, _log);
|
||||
if (host != not_nullptr) {
|
||||
_host = *static_cast<std::string *>(host);
|
||||
} else {
|
||||
delete _table;
|
||||
throw std::runtime_error(
|
||||
"no host specified - please specify one");
|
||||
}
|
||||
// port parsing
|
||||
void *port = accessValue("port", toml::INT, _table, _log);
|
||||
if (port != not_nullptr) {
|
||||
_port = *static_cast<unsigned short *>(port);
|
||||
} else {
|
||||
delete _table;
|
||||
throw std::runtime_error(
|
||||
"no port specified - please specify one");
|
||||
}
|
||||
|
||||
// error_pages parsing
|
||||
std::map<std::string, toml::ANode *> *map =
|
||||
static_cast<std::map<std::string, toml::ANode *> *>(
|
||||
accessValue("error_pages", toml::TABLE, _table, _log));
|
||||
if (map != not_nullptr) {
|
||||
_err_pages = _parseErrPages(map);
|
||||
} else
|
||||
_err_pages = not_nullptr;
|
||||
|
||||
// location parsing
|
||||
auto it = _table->accessIt("location", toml::TABLE, found);
|
||||
if (found == true && it != _table->getTable()->end()) {
|
||||
_routes = new std::map<URL, Route *>;
|
||||
std::map<std::string, toml::ANode *> *location_table =
|
||||
it->second->getTable();
|
||||
for (it = location_table->begin(); it != location_table->end(); it++) {
|
||||
if (_routes->find(URL(it->first)) != _routes->end()) {
|
||||
continue;
|
||||
}
|
||||
_routes->insert(std::make_pair(URL(it->first), new Route(it->second)));
|
||||
}
|
||||
}
|
||||
// delete _table;
|
||||
}
|
||||
|
11
src/main.cpp
11
src/main.cpp
@ -6,10 +6,11 @@
|
||||
/* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/02/03 15:45:07 by mmoussou #+# #+# */
|
||||
/* Updated: 2025/04/25 13:23:33 by adjoly ### ########.fr */
|
||||
/* Updated: 2025/05/01 16:32:06 by adjoly ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "cppeleven.hpp"
|
||||
#include <config/default.hpp>
|
||||
#include <csignal>
|
||||
#include <server/default.hpp>
|
||||
@ -39,6 +40,7 @@ void ft_sig(int sig) {
|
||||
}
|
||||
|
||||
int main(int ac, char **av) {
|
||||
_log = not_nullptr;
|
||||
if (help(ac, av)) {
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
@ -53,8 +55,11 @@ int main(int ac, char **av) {
|
||||
try {
|
||||
std::string str = av[1];
|
||||
conf = new config::Config(str);
|
||||
} catch (std::exception &e) {
|
||||
std::cout << e.what() << std::endl;
|
||||
} catch (std::exception &) {
|
||||
//std::cout << e.what() << std::endl;
|
||||
//delete conf;
|
||||
if (_log != not_nullptr)
|
||||
delete _log;
|
||||
return 1;
|
||||
}
|
||||
if (signal(SIGINT, &ft_sig) == SIG_ERR) {
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* By: mmoussou <mmoussou@student.42angouleme.fr +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/04/17 11:12:41 by mmoussou #+# #+# */
|
||||
/* Updated: 2025/05/01 13:22:55 by adjoly ### ########.fr */
|
||||
/* Updated: 2025/05/01 15:27:00 by adjoly ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -120,7 +120,7 @@ void Client::answer(void) {
|
||||
std::stringstream str;
|
||||
str << "response sent, for page : ";
|
||||
str << _request->getTarget();
|
||||
str << " with code : ";
|
||||
str << " with response code : ";
|
||||
str << _response.getStatusCode();
|
||||
_log->info(str.str());
|
||||
}
|
||||
|
Reference in New Issue
Block a user