Cavoke  1.1.0
A Platform for creating and hosting multiplayer turn-based board games
Loading...
Searching...
No Matches
AuthFilter.h
1#pragma once
2
3#include <drogon/HttpAppFramework.h>
4#include <drogon/HttpFilter.h>
5#include <jwt-cpp/jwt.h>
6#include <jwt-cpp/traits/nlohmann-json/traits.h>
7#include "sql-models/Users.h"
8#include "utils.h"
9
10using namespace drogon;
11using nlohmann_verifier =
12 jwt::verifier<jwt::default_clock, jwt::traits::nlohmann_json>;
23class AuthFilter : public HttpFilter<AuthFilter> {
24public:
25 AuthFilter();
26 void doFilter(const HttpRequestPtr &req,
27 FilterCallback &&fcb,
28 FilterChainCallback &&fccb) override;
29
30 struct AuthConfig {
31 std::string type;
32 std::string algorithm;
33 std::string audience;
34 std::string issuer;
35 std::string public_key;
36 };
38 static std::string get_user_id(const HttpRequestPtr &);
39
40private:
41 std::optional<nlohmann_verifier> verifier;
42
43 static std::string extract_token_from_header(
44 const std::string &auth_header);
45
46 mutable MAPPER_TYPE(drogon_model::cavoke_orm::Users) mp_users =
47 MAPPER_FOR(drogon_model::cavoke_orm::Users);
48
49 void register_user(const std::string &) const;
50
51 static const std::string AUTHORIZATION_HEADER;
52 static const std::string TOKEN_PREFIX;
53 static const std::string SETTINGS_KEYNAME;
54 static const std::string USER_ID_NAME;
55};
56
57NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(AuthFilter::AuthConfig,
58 type,
59 algorithm,
60 audience,
61 issuer,
62 public_key)
static std::string get_user_id(const HttpRequestPtr &)
Acquires user_id parsed during AuthFilter's execution.
Definition: AuthFilter.cc:82