3#include "Poco/HexBinaryEncoder.h"
4#include "Poco/JWT/Signer.h"
5#include "Poco/JWT/Token.h"
6#include "Poco/Net/HTTPServerRequest.h"
7#include "Poco/SHA2Engine.h"
12static inline std::string hashPassword(
const std::string& password) {
13 Poco::SHA2Engine sha256;
14 sha256.update(password);
15 const Poco::DigestEngine::Digest& digest = sha256.digest();
18 Poco::HexBinaryEncoder hexEncoder(ss);
19 hexEncoder.write(
reinterpret_cast<const char*
>(&digest[0]),
static_cast<long>(digest.size()));
28static inline bool verifyPassword(
const std::string& password,
const std::string& storedHash) {
29 return hashPassword(password) == storedHash;
43 static inline bool is_authorized(
const Poco::Net::HTTPServerRequest& req,
47 if (not req.has(
"Authorization"))
50 const auto auth = req.get(
"Authorization");
51 const std::string bearer =
"Bearer ";
53 if (auth.rfind(bearer, 0) != 0)
57 const std::string jwt = auth.substr(bearer.size());
60 Poco::JWT::Signer signer(
"<secret>");
61 Poco::JWT::Token token;
62 signer.tryVerify(jwt, token);
64 const auto& claims{token.payload()};
65 for (
const auto& claim : claims) {
66 const auto& key{claim.first};
67 const auto& value{claim.second};
70 if (value.convert<
int>() >= minClearance) {
AuthClearance
Definition AuthUtils.hpp:35
@ PRIVATE
Definition AuthUtils.hpp:35
@ SECRET
Definition AuthUtils.hpp:35
@ TOP_SECRET
Definition AuthUtils.hpp:35
@ NONE
Definition AuthUtils.hpp:35
@ PUBLIC
Definition AuthUtils.hpp:35
@ BLACK
Definition AuthUtils.hpp:35
Definition AuthUtils.hpp:40
static bool is_authorized(const Poco::Net::HTTPServerRequest &req, AuthClearance minClearance=AuthClearance::SECRET)
Definition AuthUtils.hpp:43