mirror of
https://github.com/mmueller41/genode.git
synced 2026-01-21 12:32:56 +01:00
depot_query: query user information
The new '<user name"...">' node allows for querying the download location and public key of the specified name.
This commit is contained in:
committed by
Christian Helmuth
parent
f5fb9684db
commit
6552313098
@@ -110,6 +110,7 @@ struct Depot_query::Main
|
|||||||
|
|
||||||
Reporter _directory_reporter { _env, "directory" };
|
Reporter _directory_reporter { _env, "directory" };
|
||||||
Reporter _blueprint_reporter { _env, "blueprint" };
|
Reporter _blueprint_reporter { _env, "blueprint" };
|
||||||
|
Reporter _user_reporter { _env, "user" };
|
||||||
|
|
||||||
typedef String<64> Rom_label;
|
typedef String<64> Rom_label;
|
||||||
typedef String<16> Architecture;
|
typedef String<16> Architecture;
|
||||||
@@ -122,6 +123,7 @@ struct Depot_query::Main
|
|||||||
|
|
||||||
void _scan_depot_user_pkg(Archive::User const &user, Directory &dir, Xml_generator &xml);
|
void _scan_depot_user_pkg(Archive::User const &user, Directory &dir, Xml_generator &xml);
|
||||||
void _query_pkg(Directory::Path const &path, Xml_generator &xml);
|
void _query_pkg(Directory::Path const &path, Xml_generator &xml);
|
||||||
|
void _query_user(Archive::User const &user, Xml_generator &xml);
|
||||||
|
|
||||||
void _handle_config()
|
void _handle_config()
|
||||||
{
|
{
|
||||||
@@ -131,6 +133,7 @@ struct Depot_query::Main
|
|||||||
|
|
||||||
_directory_reporter.enabled(config.has_sub_node("scan"));
|
_directory_reporter.enabled(config.has_sub_node("scan"));
|
||||||
_blueprint_reporter.enabled(config.has_sub_node("query"));
|
_blueprint_reporter.enabled(config.has_sub_node("query"));
|
||||||
|
_user_reporter .enabled(config.has_sub_node("user"));
|
||||||
|
|
||||||
_root.apply_config(config.sub_node("vfs"));
|
_root.apply_config(config.sub_node("vfs"));
|
||||||
|
|
||||||
@@ -140,7 +143,6 @@ struct Depot_query::Main
|
|||||||
_architecture = config.attribute_value("arch", Architecture());
|
_architecture = config.attribute_value("arch", Architecture());
|
||||||
|
|
||||||
if (_directory_reporter.enabled()) {
|
if (_directory_reporter.enabled()) {
|
||||||
|
|
||||||
Reporter::Xml_generator xml(_directory_reporter, [&] () {
|
Reporter::Xml_generator xml(_directory_reporter, [&] () {
|
||||||
config.for_each_sub_node("scan", [&] (Xml_node node) {
|
config.for_each_sub_node("scan", [&] (Xml_node node) {
|
||||||
Archive::User const user = node.attribute_value("user", Archive::User());
|
Archive::User const user = node.attribute_value("user", Archive::User());
|
||||||
@@ -152,12 +154,18 @@ struct Depot_query::Main
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (_blueprint_reporter.enabled()) {
|
if (_blueprint_reporter.enabled()) {
|
||||||
|
|
||||||
Reporter::Xml_generator xml(_blueprint_reporter, [&] () {
|
Reporter::Xml_generator xml(_blueprint_reporter, [&] () {
|
||||||
config.for_each_sub_node("query", [&] (Xml_node node) {
|
config.for_each_sub_node("query", [&] (Xml_node node) {
|
||||||
_query_pkg(node.attribute_value("pkg", Directory::Path()), xml); });
|
_query_pkg(node.attribute_value("pkg", Directory::Path()), xml); });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_user_reporter.enabled()) {
|
||||||
|
Reporter::Xml_generator xml(_user_reporter, [&] () {
|
||||||
|
config.for_each_sub_node("user", [&] (Xml_node node) {
|
||||||
|
_query_user(node.attribute_value("name", Archive::User()), xml); });
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Main(Env &env) : _env(env) { _handle_config(); }
|
Main(Env &env) : _env(env) { _handle_config(); }
|
||||||
@@ -300,5 +308,28 @@ void Depot_query::Main::_query_pkg(Directory::Path const &pkg_path, Xml_generato
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Depot_query::Main::_query_user(Archive::User const &user, Xml_generator &xml)
|
||||||
|
{
|
||||||
|
Directory user_dir(_root, Directory::Path("depot/", user));
|
||||||
|
|
||||||
|
xml.attribute("name", user);
|
||||||
|
|
||||||
|
File_content download(_heap, user_dir, "download", File_content::Limit{4*1024});
|
||||||
|
typedef String<256> Url;
|
||||||
|
download.for_each_line<Url>([&] (Url const &url) {
|
||||||
|
log("user url: ", url);
|
||||||
|
xml.node("url", [&] () { xml.append_sanitized(url.string()); }); });
|
||||||
|
|
||||||
|
File_content pubkey(_heap, user_dir, "pubkey", File_content::Limit{8*1024});
|
||||||
|
xml.node("pubkey", [&] () {
|
||||||
|
typedef String<80> Line;
|
||||||
|
pubkey.for_each_line<Line>([&] (Line const &line) {
|
||||||
|
xml.append_sanitized(line.string());
|
||||||
|
xml.append("\n");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Component::construct(Genode::Env &env) { static Depot_query::Main main(env); }
|
void Component::construct(Genode::Env &env) { static Depot_query::Main main(env); }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user