webserv/webserv/config/ServerConfig.hpp

41 lines
1.4 KiB
C++

#pragma once
#include <webserv/config/LocationConfig.hpp>
#include <map>
#include <string>
#include <vector>
class ServerConfig
{
public:
ServerConfig(const std::string &serverBlock);
[[nodiscard]] const std::string &getHost() const { return host_; }
[[nodiscard]] int getPort() const { return port_; }
[[nodiscard]] const std::string &getRoot() const { return root_; }
[[nodiscard]] const std::string &getCgiPass() const { return cgi_pass_; }
[[nodiscard]] const std::string &getCgiExt() const { return cgi_ext_; }
[[nodiscard]] const std::map<int, std::string> &getErrorPages() const { return error_page_; }
[[nodiscard]] const std::vector<std::string> &getIndexFiles() const { return index_files_; }
[[nodiscard]] const LocationConfig &getLocation(const std::string &path) const;
[[nodiscard]] std::vector<std::string> getLocationPaths() const;
void setServerFD(int fd) { server_fd_ = fd; }
[[nodiscard]] int getServerFD() const { return server_fd_; }
private:
std::string host_;
int port_;
int server_fd_;
std::string root_;
std::string cgi_pass_;
std::string cgi_ext_;
std::map<int, std::string> error_page_;
std::vector<std::string> index_files_;
std::map<std::string, LocationConfig> locations_;
void parseServerBlock(const std::string &block);
void parseDirectives(const std::string &declarations);
};