All checks were successful
Deploy / build-deploy (push) Successful in 4m19s
49 lines
1.6 KiB
C++
49 lines
1.6 KiB
C++
/*
|
|
catcrafts.net
|
|
Copyright (C) 2026 Catcrafts
|
|
|
|
The source code of this website is made available for viewing purposes only.
|
|
No permission is granted to copy, modify, distribute, or create derivative works.
|
|
*/
|
|
|
|
// Order tokens and the human-facing references derived from them. The token
|
|
// is the only credential an order page has, so its shape check is a security
|
|
// boundary: anything that is not exactly 32 lowercase hex characters must
|
|
// never reach a lookup.
|
|
|
|
import std;
|
|
import Catcrafts.Shared;
|
|
import Catcrafts.Server;
|
|
|
|
using namespace Catcrafts;
|
|
|
|
namespace {
|
|
|
|
int failures = 0;
|
|
|
|
void Check(bool ok, std::string_view what, std::string_view got = {}) {
|
|
if (ok) return;
|
|
++failures;
|
|
std::println(std::cerr, "FAIL: {}{}{}", what,
|
|
got.empty() ? "" : " got: ", got);
|
|
}
|
|
|
|
} // namespace
|
|
|
|
int main() {
|
|
Check(IsOrderToken("0123456789abcdef0123456789abcdef"), "token: valid shape");
|
|
Check(!IsOrderToken("0123456789ABCDEF0123456789ABCDEF"), "token: uppercase rejected");
|
|
Check(!IsOrderToken("0123456789abcdef0123456789abcde"), "token: short rejected");
|
|
Check(!IsOrderToken("0123456789abcdef0123456789abcdeg"), "token: non-hex rejected");
|
|
const std::string tok = Server::NewOrderToken();
|
|
Check(IsOrderToken(tok), "token: generator emits valid tokens", tok);
|
|
Check(Server::NewOrderToken() != tok, "token: not constant");
|
|
Check(Server::ReferenceFromToken("abcdef0123456789abcdef0123456789") == "CC-ABCDEF",
|
|
"reference: derived and uppercased");
|
|
|
|
if (failures != 0) {
|
|
std::println(std::cerr, "{} check(s) failed", failures);
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|