Implemented default URL for missing images (#2)

This commit is contained in:
tastytea 2018-11-26 05:00:07 +01:00
parent a7d196ec38
commit d9fab6928b
Signed by untrusted user: tastytea
GPG Key ID: CFC39497F1B26E07
3 changed files with 45 additions and 15 deletions

View File

@ -34,6 +34,7 @@ const Request http::parse_request(const string &request)
}
uint16_t size = 80;
string fallback;
string digest = request.substr(8);
std::transform(digest.begin(), digest.end(), digest.begin(), ::tolower);
std::size_t pos_digest = digest.find('?');
@ -43,30 +44,47 @@ const Request http::parse_request(const string &request)
digest = digest.substr(0, pos_digest);
string answer;
answer = get_parameter(request, "s");
if (!answer.empty())
{
size = static_cast<uint16_t>(std::stoul(answer));
}
else
{
answer = get_parameter(request, "size");
answer = get_parameter(request, "s");
if (!answer.empty())
{
size = static_cast<uint16_t>(std::stoul(answer));
}
else
{
answer = get_parameter(request, "size");
if (!answer.empty())
{
size = static_cast<uint16_t>(std::stoul(answer));
}
}
if (size > 512)
{
size = 512;
}
if (size < 1)
{
size = 1;
}
}
if (size > 512)
{
size = 512;
}
if (size < 1)
{
size = 1;
answer = get_parameter(request, "d");
if (!answer.empty())
{
fallback = answer;
}
else
{
answer = get_parameter(request, "default");
if (!answer.empty())
{
fallback = answer;
}
}
}
}
return { digest, size };
return { digest, size, fallback };
}
const string http::get_parameter(const string &request, const string &parameter)

View File

@ -62,8 +62,19 @@ int main()
}
else
{
cout << "Status: 404 Not Found\n\n";
cerr << "Error " << std::to_string(answer.error) << ": Could not open file.\n";
if (avatar.fallback.empty())
{
cout << "Status: 404 Not Found\n\n";
}
else
{
if (avatar.fallback.substr(0, 4) == "http")
{
cout << "Status: 307 Temporary Redirect\n";
cout << "Location: " << avatar.fallback << endl << endl;
}
}
}
return 0;

View File

@ -49,6 +49,7 @@ namespace http // http.cpp
{
const string digest;
uint16_t size;
const string fallback;
};
const Request parse_request(const string &request);