From: Lukas Wagner Date: Thu, 3 Aug 2023 12:17:01 +0000 (+0200) Subject: api: notification: allow fetching notification targets X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=e678a5dbfa5c5139127b4277fed94b1c52633b30;p=pve-manager.git api: notification: allow fetching notification targets The API call returns all entities that can be used as notification targets (endpoints, groups). Only targets for which the user has appropriate permissions are returned. Signed-off-by: Lukas Wagner --- diff --git a/PVE/API2/Cluster/Notifications.pm b/PVE/API2/Cluster/Notifications.pm index b4db7f8e..d6f29291 100644 --- a/PVE/API2/Cluster/Notifications.pm +++ b/PVE/API2/Cluster/Notifications.pm @@ -96,6 +96,7 @@ __PACKAGE__->register_method ({ { name => 'endpoints' }, { name => 'filters' }, { name => 'groups' }, + { name => 'targets' }, ]; return $result; @@ -130,6 +131,86 @@ __PACKAGE__->register_method ({ } }); +__PACKAGE__->register_method ({ + name => 'get_all_targets', + path => 'targets', + method => 'GET', + description => 'Returns a list of all entities that can be used as notification targets' . + ' (endpoints and groups).', + permissions => { + description => "Only lists entries where you have 'Mapping.Modify', 'Mapping.Use' or" + . " 'Mapping.Audit' permissions on '/mapping/notification/'.", + user => 'all', + }, + protected => 1, + parameters => { + additionalProperties => 0, + properties => {}, + }, + returns => { + type => 'array', + items => { + type => 'object', + properties => { + name => { + description => 'Name of the endpoint/group.', + type => 'string', + format => 'pve-configid', + }, + 'type' => { + description => 'Type of the endpoint or group.', + type => 'string', + enum => [qw(sendmail gotify group)], + }, + 'comment' => { + description => 'Comment', + type => 'string', + optional => 1, + }, + }, + }, + links => [ { rel => 'child', href => '{name}' } ], + }, + code => sub { + my $config = PVE::Notify::read_config(); + my $rpcenv = PVE::RPCEnvironment::get(); + + my $targets = eval { + my $result = []; + + for my $target (@{$config->get_sendmail_endpoints()}) { + push @$result, { + name => $target->{name}, + comment => $target->{comment}, + type => 'sendmail', + }; + } + + for my $target (@{$config->get_gotify_endpoints()}) { + push @$result, { + name => $target->{name}, + comment => $target->{comment}, + type => 'gotify', + }; + } + + for my $target (@{$config->get_groups()}) { + push @$result, { + name => $target->{name}, + comment => $target->{comment}, + type => 'group', + }; + } + + $result + }; + + raise_api_error($@) if $@; + + return filter_entities_by_privs($rpcenv, $targets); + } +}); + my $group_properties = { name => { description => 'Name of the group.',