14#include "Poco/HexBinaryEncoder.h"
15#include "Poco/JWT/Signer.h"
16#include "Poco/JWT/Token.h"
17#include "Poco/Net/HTTPServerRequest.h"
18#include "Poco/SHA2Engine.h"
24static inline std::string hashPassword(
const std::string& password) {
25 Poco::SHA2Engine sha256;
26 sha256.update(password);
27 const Poco::DigestEngine::Digest& digest = sha256.digest();
30 Poco::HexBinaryEncoder hexEncoder(ss);
31 hexEncoder.write(
reinterpret_cast<const char*
>(&digest[0]),
static_cast<long>(digest.size()));
40static inline bool verifyPassword(
const std::string& password,
const std::string& storedHash) {
41 return hashPassword(password) == storedHash;
55 static inline bool is_authorized(
const Poco::Net::HTTPServerRequest& req,
59 if (not req.has(
"Authorization"))
62 const auto auth = req.get(
"Authorization");
63 const std::string bearer =
"Bearer ";
65 if (auth.rfind(bearer, 0) != 0)
69 const std::string jwt = auth.substr(bearer.size());
73 Poco::JWT::Signer signer(sec.getSecret(
"jwt_secret"));
74 Poco::JWT::Token token;
75 signer.tryVerify(jwt, token);
77 const auto& claims{token.payload()};
78 for (
const auto& claim : claims) {
79 const auto& key{claim.first};
80 const auto& value{claim.second};
83 if (value.convert<
int>() >= minClearance) {
AuthClearance
Definition AuthUtils.hpp:47
@ PRIVATE
Definition AuthUtils.hpp:47
@ SECRET
Definition AuthUtils.hpp:47
@ TOP_SECRET
Definition AuthUtils.hpp:47
@ NONE
Definition AuthUtils.hpp:47
@ PUBLIC
Definition AuthUtils.hpp:47
@ BLACK
Definition AuthUtils.hpp:47
static Secrets & getInstance()
Definition Secrets.cpp:19
Definition AuthUtils.hpp:52
static bool is_authorized(const Poco::Net::HTTPServerRequest &req, AuthClearance minClearance=AuthClearance::SECRET)
Definition AuthUtils.hpp:55