userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
standalone_checker.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/server/handlers/auth/digest/standalone_checker.hpp
4
/// @brief @copybrief server::handlers::auth::digest::AuthStandaloneCheckerBase
5
6
#
include
<
chrono
>
7
#
include
<
cstdint
>
8
#
include
<
functional
>
9
#
include
<
random
>
10
#
include
<
string_view
>
11
12
#
include
<
userver
/
cache
/
expirable_lru_cache
.
hpp
>
13
#
include
<
userver
/
concurrent
/
mpsc_queue
.
hpp
>
14
#
include
<
userver
/
concurrent
/
variable
.
hpp
>
15
#
include
<
userver
/
crypto
/
hash
.
hpp
>
16
#
include
<
userver
/
rcu
/
rcu_map
.
hpp
>
17
#
include
<
userver
/
server
/
handlers
/
auth
/
digest
/
auth_checker_base
.
hpp
>
18
#
include
<
userver
/
server
/
handlers
/
auth
/
digest
/
auth_checker_settings
.
hpp
>
19
#
include
<
userver
/
server
/
handlers
/
auth
/
digest
/
directives_parser
.
hpp
>
20
#
include
<
userver
/
server
/
handlers
/
auth
/
digest
/
nonce_cache_settings_component
.
hpp
>
21
#
include
<
userver
/
server
/
http
/
http_request
.
hpp
>
22
#
include
<
userver
/
server
/
http
/
http_response
.
hpp
>
23
#
include
<
userver
/
server
/
http
/
http_status
.
hpp
>
24
#
include
<
userver
/
server
/
request
/
request_context
.
hpp
>
25
26
USERVER_NAMESPACE_BEGIN
27
28
namespace
server::
handlers
::auth::digest {
29
30
struct
NonceInfo
final
{
31
NonceInfo();
32
NonceInfo(
const
std::string& nonce, TimePoint expiration_time, std::int64_t nonce_count);
33
std::string nonce;
34
TimePoint expiration_time;
35
std::int64_t nonce_count;
36
};
37
38
/// @ingroup userver_base_classes
39
///
40
/// @brief Class for digest authentication checker. Implements a stand-alone
41
/// digest-authentication logic.
42
class
AuthStandaloneCheckerBase
:
public
AuthCheckerBase
{
43
public
:
44
AuthStandaloneCheckerBase(
45
const
AuthCheckerSettings
& digest_settings,
46
std::string&& realm,
47
const
SecdistConfig& secdist_config,
48
const
NonceCacheSettings
& nonce_cache_settings
49
);
50
51
/// @brief Compatibility overload accepting nonce-cache geometry directly.
52
AuthStandaloneCheckerBase
(
53
const
AuthCheckerSettings
& digest_settings,
54
std::string&& realm,
55
const
SecdistConfig& secdist_config,
56
std::size_t ways,
57
std::size_t way_size
58
);
59
60
[[
nodiscard
]]
bool
SupportsUserAuth
()
const
noexcept
override
{
return
true
; }
61
62
std::optional<UserData>
FetchUserData
(
const
std::string& username)
const
override
;
63
void
SetUserData
(
64
const
std::string& username,
65
const
std::string& nonce,
66
std::int64_t nonce_count,
67
TimePoint nonce_creation_time
68
)
const
override
;
69
70
void
PushUnnamedNonce
(std::string nonce)
const
override
;
71
std::optional<TimePoint>
GetUnnamedNonceCreationTime
(
const
std::string& nonce)
const
override
;
72
73
virtual
std::optional<UserData::HA1> GetHA1(std::string_view username)
const
= 0;
74
75
private
:
76
using
NonceCache =
cache
::ExpirableLruCache<std::string, TimePoint>;
77
// potentially we store ALL user's data
78
// great chance to occupy large block of memory
79
mutable
rcu
::
RcuMap
<std::string,
concurrent
::Variable<NonceInfo>> user_data_;
80
// cache for "unnamed" nonces,
81
// i.e initial nonces not tied to any user
82
mutable
NonceCache unnamed_nonces_;
83
};
84
85
}
// namespace server::handlers::auth::digest
86
87
USERVER_NAMESPACE_END
userver
server
handlers
auth
digest
standalone_checker.hpp
Generated on
for userver by
Doxygen
1.17.0