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