Malloy
Loading...
Searching...
No Matches
manager.hpp
1#pragma once
2
3#include "types.hpp"
4#include "../response.hpp"
5#include "../request.hpp"
6
7#include <chrono>
8#include <memory>
9#include <mutex>
10#include <optional>
11#include <string>
12
13namespace malloy::http::sessions
14{
15 struct storage;
16 struct session;
17
18 class manager
19 {
20 public:
24 constexpr static const char* cookie_name = "sessionId";
25
33 explicit
34 manager(std::shared_ptr<storage> storage);
35
41 manager(const manager& other) = delete;
42
48 manager(manager&& other) noexcept = delete;
49
53 virtual
54 ~manager() = default;
55
62 manager&
63 operator=(const manager& rhs) = delete;
64
71 manager&
72 operator=(manager&& rhs) noexcept = delete;
73
82 [[nodiscard]]
83 std::shared_ptr<session>
84 get(const request_header<>& hdr);
85
94 [[nodiscard]]
95 std::shared_ptr<session>
96 get(const request<>& req)
97 {
98 return get(req.base());
99 }
100
109 [[nodiscard]]
110 std::shared_ptr<session>
111 get(const id_type& id);
112
123 [[nodiscard]]
124 std::shared_ptr<session>
125 start(const request<>& req, response<>& resp);
126
135 void
136 destroy(const request<>& req, response<>& resp);
137
144 std::size_t
145 destroy_expired(const std::chrono::seconds& max_lifetime);
146
153 [[nodiscard]]
154 bool
155 is_valid(const request<>& req)
156 {
157 return is_valid(req.base());
158 }
159
166 [[nodiscard]]
167 bool
169
176 [[nodiscard]]
177 bool
178 is_valid(const id_type& id);
179
180 private:
181 std::shared_ptr<storage> m_storage;
182 std::mutex m_lock; // protects sessions
183
190 [[nodiscard]]
191 std::optional<id_type>
192 get_id(const request_header<>& hdr) const;
193
197 [[nodiscard]]
198 static
199 id_type
200 generate_id();
201 };
202
203}
Definition: request.hpp:19
Definition: response.hpp:22
Definition: manager.hpp:19
manager & operator=(const manager &rhs)=delete
manager(manager &&other) noexcept=delete
void destroy(const request<> &req, response<> &resp)
Definition: manager.cpp:82
std::size_t destroy_expired(const std::chrono::seconds &max_lifetime)
Definition: manager.cpp:104
std::shared_ptr< session > get(const request<> &req)
Definition: manager.hpp:96
bool is_valid(const request<> &req)
Definition: manager.hpp:155
manager(const manager &other)=delete
std::shared_ptr< session > start(const request<> &req, response<> &resp)
Definition: manager.cpp:46
static constexpr const char * cookie_name
Definition: manager.hpp:24
std::shared_ptr< session > get(const request_header<> &hdr)
Definition: manager.cpp:20
manager & operator=(manager &&rhs) noexcept=delete
boost::beast::http::request_header< Fields > request_header
Definition: types.hpp:39
Definition: storage.hpp:17