0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-05-29 08:13:46 +02:00

ircd:Ⓜ️:fed::user::keys::claim: Separate content creation functions from ctor.

ircd:Ⓜ️:fed::user::keys::query: Separate content creation functions from ctor.
This commit is contained in:
Jason Volk 2019-07-30 12:12:26 -07:00
parent de986d2272
commit ed56ef680a
2 changed files with 133 additions and 98 deletions

View file

@ -23,7 +23,11 @@ struct ircd::m::v1::user::keys::query
using opts = v1::user::opts;
using devices = vector_view<const string_view>;
using user_devices = std::pair<m::user::id, devices>;
using user_devices_map = std::map<m::user::id, json::array>;
using users_devices = const vector_view<const user_devices>;
using users_devices_map = std::map<m::user::id, json::array>;
static json::object make_content(const mutable_buffer &, const users_devices &);
static json::object make_content(const mutable_buffer &, const users_devices_map &);
explicit operator json::object() const
{
@ -36,11 +40,11 @@ struct ircd::m::v1::user::keys::query
const mutable_buffer &,
opts);
query(const user_devices_map &,
query(const users_devices_map &,
const mutable_buffer &,
opts);
query(const vector_view<const user_devices> &,
query(const users_devices &,
const mutable_buffer &,
opts);
@ -67,7 +71,11 @@ struct ircd::m::v1::user::keys::claim
using device = std::pair<string_view, string_view>;
using devices = vector_view<const device>;
using user_devices = std::pair<m::user::id, devices>;
using user_devices_map = std::map<m::user::id, json::object>;
using users_devices = vector_view<const user_devices>;
using users_devices_map = std::map<m::user::id, json::object>;
static json::object make_content(const mutable_buffer &, const users_devices &);
static json::object make_content(const mutable_buffer &, const users_devices_map &);
explicit operator json::object() const
{
@ -80,11 +88,11 @@ struct ircd::m::v1::user::keys::claim
const mutable_buffer &,
opts);
claim(const user_devices_map &,
claim(const users_devices_map &,
const mutable_buffer &,
opts);
claim(const vector_view<const user_devices> &,
claim(const users_devices &,
const mutable_buffer &,
opts);

View file

@ -905,35 +905,14 @@ ircd::m::v1::user::keys::query::query(const user_devices &v,
{
}
ircd::m::v1::user::keys::query::query(const vector_view<const user_devices> &v,
ircd::m::v1::user::keys::query::query(const users_devices &v,
const mutable_buffer &buf,
opts opts)
:query{[&v, &buf, &opts]
{
json::stack out{buf};
{
json::stack::object top{out};
json::stack::object device_keys
{
top, "device_keys"
};
for(const user_devices &ud : v)
{
json::stack::member user
{
device_keys, ud.first
};
json::stack::array devices{user};
for(const string_view &device_id : ud.second)
devices.append(device_id);
}
}
const json::object &content
{
out.completed()
make_content(buf, v)
};
return query
@ -944,29 +923,14 @@ ircd::m::v1::user::keys::query::query(const vector_view<const user_devices> &v,
{
}
ircd::m::v1::user::keys::query::query(const user_devices_map &map,
ircd::m::v1::user::keys::query::query(const users_devices_map &m,
const mutable_buffer &buf,
opts opts)
:query{[&map, &buf, &opts]
:query{[&m, &buf, &opts]
{
json::stack out{buf};
{
json::stack::object top{out};
json::stack::object device_keys
{
top, "device_keys"
};
for(const auto &p : map)
json::stack::member user
{
device_keys, p.first, p.second
};
}
const json::object &content
{
out.completed()
make_content(buf, m)
};
return query
@ -1018,6 +982,55 @@ ircd::m::v1::user::keys::query::query(const json::object &content,
{
}
ircd::json::object
ircd::m::v1::user::keys::query::make_content(const mutable_buffer &buf,
const users_devices &v)
{
json::stack out{buf};
{
json::stack::object top{out};
json::stack::object device_keys
{
top, "device_keys"
};
for(const auto &[user_id, devices] : v)
{
json::stack::array array
{
device_keys, user_id
};
for(const auto &device_id : devices)
array.append(device_id);
}
}
return out.completed();
}
ircd::json::object
ircd::m::v1::user::keys::query::make_content(const mutable_buffer &buf,
const users_devices_map &m)
{
json::stack out{buf};
{
json::stack::object top{out};
json::stack::object device_keys
{
top, "device_keys"
};
for(const auto &[user_id, devices] : m)
json::stack::member
{
device_keys, user_id, devices
};
}
return out.completed();
}
//
// claim
//
@ -1071,41 +1084,14 @@ ircd::m::v1::user::keys::claim::claim(const user_devices &ud,
{
}
ircd::m::v1::user::keys::claim::claim(const vector_view<const user_devices> &v,
ircd::m::v1::user::keys::claim::claim(const users_devices &v,
const mutable_buffer &buf,
opts opts)
:claim{[&v, &buf, &opts]
{
json::stack out{buf};
{
json::stack::object top{out};
json::stack::object one_time_keys
{
top, "one_time_keys"
};
for(const auto &ud : v)
{
json::stack::object user
{
one_time_keys, ud.first
};
for(const auto &device : ud.second)
{
const auto &device_id(device.first);
const auto &algorithm_name(device.second);
json::stack::member
{
user, device_id, algorithm_name
};
}
}
}
const json::object &content
{
out.completed()
make_content(buf, v)
};
return claim
@ -1116,33 +1102,14 @@ ircd::m::v1::user::keys::claim::claim(const vector_view<const user_devices> &v,
{
}
ircd::m::v1::user::keys::claim::claim(const user_devices_map &map,
ircd::m::v1::user::keys::claim::claim(const users_devices_map &m,
const mutable_buffer &buf,
opts opts)
:claim{[&map, &buf, &opts]
:claim{[&m, &buf, &opts]
{
json::stack out{buf};
{
json::stack::object top{out};
json::stack::object one_time_keys
{
top, "one_time_keys"
};
for(const auto &p : map)
{
const m::user::id &user_id(p.first);
const json::object &devices(p.second);
json::stack::member user
{
one_time_keys, user_id, devices
};
}
}
const json::object &content
{
out.completed()
make_content(buf, m)
};
return claim
@ -1194,6 +1161,66 @@ ircd::m::v1::user::keys::claim::claim(const json::object &content,
{
}
ircd::json::object
ircd::m::v1::user::keys::claim::make_content(const mutable_buffer &buf,
const users_devices &v)
{
json::stack out{buf};
{
json::stack::object top{out};
json::stack::object one_time_keys
{
top, "one_time_keys"
};
for(const auto &[user_id, devices] : v)
{
json::stack::object user
{
one_time_keys, user_id
};
for(const auto &[device_id, algorithm_name] : devices)
json::stack::member
{
user, device_id, algorithm_name
};
}
}
return out.completed();
}
ircd::json::object
ircd::m::v1::user::keys::claim::make_content(const mutable_buffer &buf,
const users_devices_map &v)
{
json::stack out{buf};
{
json::stack::object top{out};
json::stack::object one_time_keys
{
top, "one_time_keys"
};
for(const auto &[user_id, devices] : v)
{
json::stack::object user
{
one_time_keys, user_id
};
for(const auto &[device_id, algorithm_name] : devices)
json::stack::member
{
user, device_id, algorithm_name
};
}
}
return out.completed();
}
///////////////////////////////////////////////////////////////////////////////
//
// v1/user.h