]> git.ipfire.org Git - thirdparty/squid.git/blob - src/auth/CredentialsCache.h
Maintenance: No ptr copy in future CredentialsCache::insert()s (#1807)
[thirdparty/squid.git] / src / auth / CredentialsCache.h
1 /*
2 * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #ifndef SQUID_SRC_AUTH_CREDENTIALSCACHE_H
10 #define SQUID_SRC_AUTH_CREDENTIALSCACHE_H
11
12 #include "auth/User.h"
13 #include "cbdata.h"
14 #include "sbuf/Algorithms.h"
15
16 #include <unordered_map>
17
18 namespace Auth {
19
20 /// Cache of Auth::User credentials, keyed by Auth::User::userKey
21 class CredentialsCache
22 {
23 CBDATA_CLASS(CredentialsCache);
24
25 public:
26 explicit CredentialsCache(const char *name, const char * const eventName);
27
28 ~CredentialsCache() = default;
29 CredentialsCache(const CredentialsCache&) = delete;
30 CredentialsCache& operator=(const CredentialsCache&) = delete;
31
32 /// \returns a pointer to cached credentials, or nil if none found
33 Auth::User::Pointer lookup(const SBuf &userKey) const;
34
35 /// add an user to the cache with the provided key
36 void insert(const SBuf &userKey, const Auth::User::Pointer &anAuth_user);
37
38 /// clear cache
39 void reset() { store_.clear(); }
40
41 /// \returns number of cached usernames
42 size_t size() const { return store_.size(); }
43
44 /** periodic cleanup function, removes timed-out entries
45 *
46 * Must be static to support EVH interface. Argument will be this
47 */
48 static void Cleanup(void *);
49
50 /// cache garbage collection, removes timed-out entries
51 void cleanup();
52
53 /**
54 * Cleanup cache data after a reconfiguration has occurred.
55 * Similar to cleanup() but also flushes stale config dependent
56 * state from retained entries.
57 */
58 void doConfigChangeCleanup();
59
60 /// \returns alphanumerically sorted list of usernames
61 std::vector<Auth::User::Pointer> sortedUsersList() const;
62
63 private:
64 void scheduleCleanup();
65
66 /// whether a cleanup (garbage collection) event has been scheduled
67 bool gcScheduled_;
68
69 /// key is User::userKey(), mapped value is User::Pointer
70 typedef std::unordered_map<SBuf, Auth::User::Pointer> StoreType;
71 StoreType store_;
72
73 // c-string raw pointer used as event name
74 const char * const cacheCleanupEventName;
75 };
76
77 } /* namespace Auth */
78
79 #endif /* SQUID_SRC_AUTH_CREDENTIALSCACHE_H */
80