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"
13static inline std::string hashPassword(
const std::string& password) {
14 Poco::SHA2Engine sha256;
15 sha256.update(password);
16 const Poco::DigestEngine::Digest& digest = sha256.digest();
19 Poco::HexBinaryEncoder hexEncoder(ss);
20 hexEncoder.write(
reinterpret_cast<const char*
>(&digest[0]),
static_cast<long>(digest.size()));
29static inline bool verifyPassword(
const std::string& password,
const std::string& storedHash) {
30 return hashPassword(password) == storedHash;
44 static inline bool is_authorized(
const Poco::Net::HTTPServerRequest& req,
48 if (not req.has(
"Authorization"))
51 const auto auth = req.get(
"Authorization");
52 const std::string bearer =
"Bearer ";
54 if (auth.rfind(bearer, 0) != 0)
58 const std::string jwt = auth.substr(bearer.size());
62 Poco::JWT::Signer signer(sec.getSecret(
"jwt_secret"));
63 Poco::JWT::Token token;
64 signer.tryVerify(jwt, token);
66 const auto& claims{token.payload()};
67 for (
const auto& claim : claims) {
68 const auto& key{claim.first};
69 const auto& value{claim.second};
72 if (value.convert<
int>() >= minClearance) {
AuthClearance
Definition AuthUtils.hpp:36
@ PRIVATE
Definition AuthUtils.hpp:36
@ SECRET
Definition AuthUtils.hpp:36
@ TOP_SECRET
Definition AuthUtils.hpp:36
@ NONE
Definition AuthUtils.hpp:36
@ PUBLIC
Definition AuthUtils.hpp:36
@ BLACK
Definition AuthUtils.hpp:36
static Secrets & getInstance()
Definition Secrets.cpp:19
Definition AuthUtils.hpp:41
static bool is_authorized(const Poco::Net::HTTPServerRequest &req, AuthClearance minClearance=AuthClearance::SECRET)
Definition AuthUtils.hpp:44