работающая авторизация

This commit is contained in:
2024-11-05 10:33:52 +03:00
parent b561dedb2b
commit 0eacd76810
10 changed files with 150 additions and 61 deletions

View File

@@ -32,6 +32,32 @@ namespace http::server {
Url::~Url() = default;
Request::Request() = default;
void Request::reset() {
method = "";
queryUri = "";
if (url != nullptr) {
url.reset(nullptr);
}
is_keep_alive = false;
http_version_major = 0;
http_version_minor = 0;
headers.clear();
payload.clear();
}
std::string Request::getHeaderValue(const std::string &headerName) const {
for (const auto& header: headers) {
if (boost::iequals(header.name, headerName)) {
return header.value;
}
}
return "";
}
Request::~Request() = default;
RequestParser::RequestParser()
: state_(method_start) {
@@ -39,6 +65,7 @@ namespace http::server {
void RequestParser::reset() {
state_ = method_start;
contentLenghtHeader = 0;
}
RequestParser::result_type RequestParser::consume(Request &req, char input) {
@@ -216,9 +243,22 @@ namespace http::server {
case expecting_newline_3:
if (input == '\n') {
req.url = std::make_unique<Url>(req.queryUri);
return good;
auto content_len = req.getHeaderValue("content-length");
if (content_len.empty()) {
return good;
}
contentLenghtHeader = std::stol(content_len);
state_ = expecting_payload;
return indeterminate;
}
return bad;
case expecting_payload:
req.payload.push_back(input);
if (req.payload.size() <= contentLenghtHeader - 1) {
return indeterminate;
}
return good;
default:
return bad;
}