ORE Studio 0.0.4
Loading...
Searching...
No Matches
account_protocol.hpp
1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 *
3 * Copyright (C) 2025 Marco Craveiro <marco.craveiro@gmail.com>
4 *
5 * This program is free software; you can redistribute it and/or modify it under
6 * the terms of the GNU General Public License as published by the Free Software
7 * Foundation; either version 3 of the License, or (at your option) any later
8 * version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
13 * details.
14 *
15 * You should have received a copy of the GNU General Public License along with
16 * this program; if not, write to the Free Software Foundation, Inc., 51
17 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 *
19 */
20#ifndef ORES_IAM_MESSAGING_ACCOUNT_PROTOCOL_HPP
21#define ORES_IAM_MESSAGING_ACCOUNT_PROTOCOL_HPP
22
23#include <span>
24#include <iosfwd>
25#include <vector>
26#include <expected>
27#include <boost/uuid/uuid.hpp>
28#include "ores.comms/messaging/message_types.hpp"
29#include "ores.comms/messaging/message_traits.hpp"
30#include "ores.iam/domain/account.hpp"
31
32namespace ores::iam::messaging {
33
44 boost::uuids::uuid account_id; // Nil for create, valid UUID for update
45 std::string username;
46 std::string password; // Plain text for new accounts, optional for updates
47 std::string totp_secret;
48 std::string email;
49 std::string recorded_by;
50 std::string change_reason_code;
51 std::string change_commentary;
52
73 std::vector<std::byte> serialize() const;
74
78 static std::expected<save_account_request, ores::utility::serialization::error_code>
79 deserialize(std::span<const std::byte> data);
80};
81
82std::ostream& operator<<(std::ostream& s, const save_account_request& v);
83
88 bool success = false;
89 std::string message;
90 boost::uuids::uuid account_id; // ID of created/updated account
91
101 std::vector<std::byte> serialize() const;
102
106 static std::expected<save_account_response, ores::utility::serialization::error_code>
107 deserialize(std::span<const std::byte> data);
108};
109
110std::ostream& operator<<(std::ostream& s, const save_account_response& v);
111
119 std::uint32_t offset = 0;
121 std::uint32_t limit = 100;
122
130 std::vector<std::byte> serialize() const;
131
135 static std::expected<get_accounts_request, ores::utility::serialization::error_code>
136 deserialize(std::span<const std::byte> data);
137};
138
139std::ostream& operator<<(std::ostream& s, const get_accounts_request& v);
140
145 std::vector<domain::account> accounts;
147 std::uint32_t total_available_count = 0;
148
176 std::vector<std::byte> serialize() const;
177
181 static std::expected<get_accounts_response, ores::utility::serialization::error_code>
182 deserialize(std::span<const std::byte> data);
183};
184
185std::ostream& operator<<(std::ostream& s, const get_accounts_response& v);
186
195 std::vector<boost::uuids::uuid> account_ids;
196
205 std::vector<std::byte> serialize() const;
206
210 static std::expected<unlock_account_request, ores::utility::serialization::error_code>
211 deserialize(std::span<const std::byte> data);
212};
213
214std::ostream& operator<<(std::ostream& s, const unlock_account_request& v);
215
220 boost::uuids::uuid account_id;
221 bool success = false;
222 std::string message;
223};
224
225std::ostream& operator<<(std::ostream& s, const unlock_account_result& v);
226
234 std::vector<unlock_account_result> results;
235
247 std::vector<std::byte> serialize() const;
248
252 static std::expected<unlock_account_response, ores::utility::serialization::error_code>
253 deserialize(std::span<const std::byte> data);
254};
255
256std::ostream& operator<<(std::ostream& s, const unlock_account_response& v);
257
262 boost::uuids::uuid account_id;
263
270 std::vector<std::byte> serialize() const;
271
275 static std::expected<delete_account_request, ores::utility::serialization::error_code>
276 deserialize(std::span<const std::byte> data);
277};
278
279std::ostream& operator<<(std::ostream& s, const delete_account_request& v);
280
285 bool success = false;
286 std::string message;
287
296 std::vector<std::byte> serialize() const;
297
301 static std::expected<delete_account_response, ores::utility::serialization::error_code>
302 deserialize(std::span<const std::byte> data);
303};
304
305std::ostream& operator<<(std::ostream& s, const delete_account_response& v);
306
315 std::vector<boost::uuids::uuid> account_ids;
316
325 std::vector<std::byte> serialize() const;
326
330 static std::expected<lock_account_request, ores::utility::serialization::error_code>
331 deserialize(std::span<const std::byte> data);
332};
333
334std::ostream& operator<<(std::ostream& s, const lock_account_request& v);
335
340 boost::uuids::uuid account_id;
341 bool success = false;
342 std::string message;
343};
344
345std::ostream& operator<<(std::ostream& s, const lock_account_result& v);
346
354 std::vector<lock_account_result> results;
355
367 std::vector<std::byte> serialize() const;
368
372 static std::expected<lock_account_response, ores::utility::serialization::error_code>
373 deserialize(std::span<const std::byte> data);
374};
375
376std::ostream& operator<<(std::ostream& s, const lock_account_response& v);
377
386 std::vector<boost::uuids::uuid> account_ids;
387
396 std::vector<std::byte> serialize() const;
397
401 static std::expected<reset_password_request, ores::utility::serialization::error_code>
402 deserialize(std::span<const std::byte> data);
403};
404
405std::ostream& operator<<(std::ostream& s, const reset_password_request& v);
406
411 boost::uuids::uuid account_id;
412 bool success = false;
413 std::string message;
414};
415
416std::ostream& operator<<(std::ostream& s, const reset_password_result& v);
417
425 std::vector<reset_password_result> results;
426
438 std::vector<std::byte> serialize() const;
439
443 static std::expected<reset_password_response, ores::utility::serialization::error_code>
444 deserialize(std::span<const std::byte> data);
445};
446
447std::ostream& operator<<(std::ostream& s, const reset_password_response& v);
448
456 std::string new_password;
457
465 std::vector<std::byte> serialize() const;
466
470 static std::expected<change_password_request, ores::utility::serialization::error_code>
471 deserialize(std::span<const std::byte> data);
472};
473
474std::ostream& operator<<(std::ostream& s, const change_password_request& v);
475
480 bool success = false;
481 std::string message;
482
491 std::vector<std::byte> serialize() const;
492
496 static std::expected<change_password_response, ores::utility::serialization::error_code>
497 deserialize(std::span<const std::byte> data);
498};
499
500std::ostream& operator<<(std::ostream& s, const change_password_response& v);
501
509 std::string new_email;
510
518 std::vector<std::byte> serialize() const;
519
523 static std::expected<update_my_email_request, ores::utility::serialization::error_code>
524 deserialize(std::span<const std::byte> data);
525};
526
527std::ostream& operator<<(std::ostream& s, const update_my_email_request& v);
528
533 bool success = false;
534 std::string message;
535
544 std::vector<std::byte> serialize() const;
545
549 static std::expected<update_my_email_response, ores::utility::serialization::error_code>
550 deserialize(std::span<const std::byte> data);
551};
552
553std::ostream& operator<<(std::ostream& s, const update_my_email_response& v);
554
555}
556
557namespace ores::comms::messaging {
558
562template<>
563struct message_traits<iam::messaging::save_account_request> {
566 static constexpr message_type request_message_type =
567 message_type::save_account_request;
568};
569
573template<>
574struct message_traits<iam::messaging::get_accounts_request> {
577 static constexpr message_type request_message_type =
578 message_type::get_accounts_request;
579};
580
584template<>
585struct message_traits<iam::messaging::unlock_account_request> {
588 static constexpr message_type request_message_type =
589 message_type::unlock_account_request;
590};
591
595template<>
596struct message_traits<iam::messaging::delete_account_request> {
599 static constexpr message_type request_message_type =
600 message_type::delete_account_request;
601};
602
606template<>
607struct message_traits<iam::messaging::lock_account_request> {
610 static constexpr message_type request_message_type =
611 message_type::lock_account_request;
612};
613
617template<>
618struct message_traits<iam::messaging::reset_password_request> {
621 static constexpr message_type request_message_type =
622 message_type::reset_password_request;
623};
624
628template<>
629struct message_traits<iam::messaging::change_password_request> {
632 static constexpr message_type request_message_type =
633 message_type::change_password_request;
634};
635
639template<>
640struct message_traits<iam::messaging::update_my_email_request> {
643 static constexpr message_type request_message_type =
644 message_type::update_my_email_request;
645};
646
647}
648
649#endif
Contains messaging related infrastructure in the comms library.
Definition assets_protocol.hpp:122
Network messaging infrastructure for the IAM module.
Definition account_history_protocol.hpp:33
Traits template for mapping request types to their response types and message type enum values.
Definition message_traits.hpp:66
Request to save an account (create or update).
Definition account_protocol.hpp:43
std::vector< std::byte > serialize() const
Serialize request to bytes.
Definition account_protocol.cpp:58
static std::expected< save_account_request, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize request from bytes.
Definition account_protocol.cpp:72
Response from saving an account.
Definition account_protocol.hpp:87
std::vector< std::byte > serialize() const
Serialize response to bytes.
Definition account_protocol.cpp:116
static std::expected< save_account_response, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize response from bytes.
Definition account_protocol.cpp:125
Request to retrieve accounts with pagination support.
Definition account_protocol.hpp:117
std::uint32_t limit
Maximum number of records to return.
Definition account_protocol.hpp:121
static std::expected< get_accounts_request, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize request from bytes.
Definition account_protocol.cpp:157
std::vector< std::byte > serialize() const
Serialize request to bytes.
Definition account_protocol.cpp:149
std::uint32_t offset
Number of records to skip (0-based)
Definition account_protocol.hpp:119
Response containing accounts with pagination metadata.
Definition account_protocol.hpp:144
std::uint32_t total_available_count
Total number of accounts available (not just in this page)
Definition account_protocol.hpp:147
std::vector< std::byte > serialize() const
Serialize response to bytes.
Definition account_protocol.cpp:177
static std::expected< get_accounts_response, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize response from bytes.
Definition account_protocol.cpp:205
Request to unlock one or more locked accounts.
Definition account_protocol.hpp:194
std::vector< std::byte > serialize() const
Serialize request to bytes.
Definition account_protocol.cpp:282
static std::expected< unlock_account_request, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize request from bytes.
Definition account_protocol.cpp:292
Result for a single account unlock operation.
Definition account_protocol.hpp:219
Response containing results for unlock operation(s).
Definition account_protocol.hpp:233
std::vector< std::byte > serialize() const
Serialize response to bytes.
Definition account_protocol.cpp:321
static std::expected< unlock_account_response, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize response from bytes.
Definition account_protocol.cpp:333
Request to delete an account.
Definition account_protocol.hpp:261
std::vector< std::byte > serialize() const
Serialize request to bytes.
Definition account_protocol.cpp:368
static std::expected< delete_account_request, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize request from bytes.
Definition account_protocol.cpp:375
Response confirming account deletion.
Definition account_protocol.hpp:284
static std::expected< delete_account_response, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize response from bytes.
Definition account_protocol.cpp:396
std::vector< std::byte > serialize() const
Serialize response to bytes.
Definition account_protocol.cpp:388
Request to lock one or more accounts.
Definition account_protocol.hpp:314
static std::expected< lock_account_request, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize request from bytes.
Definition account_protocol.cpp:429
std::vector< std::byte > serialize() const
Serialize request to bytes.
Definition account_protocol.cpp:419
Result for a single account lock operation.
Definition account_protocol.hpp:339
Response containing results for lock operation(s).
Definition account_protocol.hpp:353
std::vector< std::byte > serialize() const
Serialize response to bytes.
Definition account_protocol.cpp:458
static std::expected< lock_account_response, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize response from bytes.
Definition account_protocol.cpp:470
Request to reset password for one or more accounts.
Definition account_protocol.hpp:385
std::vector< std::byte > serialize() const
Serialize request to bytes.
Definition account_protocol.cpp:505
static std::expected< reset_password_request, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize request from bytes.
Definition account_protocol.cpp:515
Result for a single password reset operation.
Definition account_protocol.hpp:410
Response containing results for password reset operation(s).
Definition account_protocol.hpp:424
static std::expected< reset_password_response, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize response from bytes.
Definition account_protocol.cpp:556
std::vector< std::byte > serialize() const
Serialize response to bytes.
Definition account_protocol.cpp:544
Request to change the current user's password.
Definition account_protocol.hpp:455
std::vector< std::byte > serialize() const
Serialize request to bytes.
Definition account_protocol.cpp:591
static std::expected< change_password_request, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize request from bytes.
Definition account_protocol.cpp:598
Response indicating whether password change succeeded.
Definition account_protocol.hpp:479
std::vector< std::byte > serialize() const
Serialize response to bytes.
Definition account_protocol.cpp:615
static std::expected< change_password_response, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize response from bytes.
Definition account_protocol.cpp:623
Request to update the current user's email address.
Definition account_protocol.hpp:508
static std::expected< update_my_email_request, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize request from bytes.
Definition account_protocol.cpp:650
std::vector< std::byte > serialize() const
Serialize request to bytes.
Definition account_protocol.cpp:643
Response indicating whether email update succeeded.
Definition account_protocol.hpp:532
std::vector< std::byte > serialize() const
Serialize response to bytes.
Definition account_protocol.cpp:666
static std::expected< update_my_email_response, ores::utility::serialization::error_code > deserialize(std::span< const std::byte > data)
Deserialize response from bytes.
Definition account_protocol.cpp:674