45{
46 const auto parsedUri =
ParseUri(url);
48
49 const auto amzDateIt = parsedQuery.find("X-Amz-Date");
50
51 if (amzDateIt == parsedQuery.end())
52 return false;
53
55
57 return false;
58
59 const auto amzExpiresIt = parsedQuery.find("X-Amz-Expires");
60
61 if (amzExpiresIt == parsedQuery.end())
62 return false;
63
64 int64_t expiresSeconds;
65
67 amzExpiresIt->second.data(),
68 amzExpiresIt->second.data() + amzExpiresIt->second.size(),
69 expiresSeconds);
70
71 if (expiresParseResult.ec != std::errc {})
72 return false;
73
74 return (time + std::chrono::seconds { expiresSeconds }) <
75 std::chrono::system_clock::now();
76}
FromCharsResult FromChars(const char *buffer, const char *last, float &value) noexcept
Parse a string into a single precision floating point value, always uses the dot as decimal.
QueryFields ParseUriQuery(std::string_view query, std::string_view delimiter) noexcept
Parses URI query and returns QueryFields structure with parsed fields.
UriFields ParseUri(std::string_view uri) noexcept
bool ParseISO8601Date(const std::string &dateString, SystemTime *time)
std::chrono::system_clock::time_point SystemTime