forked from tastytea/libravatarserv
Implemented default URL for missing images (#2)
This commit is contained in:
parent
a7d196ec38
commit
d9fab6928b
46
src/http.cpp
46
src/http.cpp
|
@ -34,6 +34,7 @@ const Request http::parse_request(const string &request)
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t size = 80;
|
uint16_t size = 80;
|
||||||
|
string fallback;
|
||||||
string digest = request.substr(8);
|
string digest = request.substr(8);
|
||||||
std::transform(digest.begin(), digest.end(), digest.begin(), ::tolower);
|
std::transform(digest.begin(), digest.end(), digest.begin(), ::tolower);
|
||||||
std::size_t pos_digest = digest.find('?');
|
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);
|
digest = digest.substr(0, pos_digest);
|
||||||
|
|
||||||
string answer;
|
string answer;
|
||||||
answer = get_parameter(request, "s");
|
|
||||||
if (!answer.empty())
|
|
||||||
{
|
{
|
||||||
size = static_cast<uint16_t>(std::stoul(answer));
|
answer = get_parameter(request, "s");
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
answer = get_parameter(request, "size");
|
|
||||||
if (!answer.empty())
|
if (!answer.empty())
|
||||||
{
|
{
|
||||||
size = static_cast<uint16_t>(std::stoul(answer));
|
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;
|
answer = get_parameter(request, "d");
|
||||||
}
|
if (!answer.empty())
|
||||||
if (size < 1)
|
{
|
||||||
{
|
fallback = answer;
|
||||||
size = 1;
|
}
|
||||||
|
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 ¶meter)
|
const string http::get_parameter(const string &request, const string ¶meter)
|
||||||
|
|
|
@ -62,8 +62,19 @@ int main()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cout << "Status: 404 Not Found\n\n";
|
|
||||||
cerr << "Error " << std::to_string(answer.error) << ": Could not open file.\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;
|
return 0;
|
||||||
|
|
|
@ -49,6 +49,7 @@ namespace http // http.cpp
|
||||||
{
|
{
|
||||||
const string digest;
|
const string digest;
|
||||||
uint16_t size;
|
uint16_t size;
|
||||||
|
const string fallback;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Request parse_request(const string &request);
|
const Request parse_request(const string &request);
|
||||||
|
|
Loading…
Reference in New Issue