]> git.proxmox.com Git - pve-manager.git/commitdiff
api: notification: allow fetching notification targets
authorLukas Wagner <l.wagner@proxmox.com>
Thu, 3 Aug 2023 12:17:01 +0000 (14:17 +0200)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Wed, 16 Aug 2023 09:10:53 +0000 (11:10 +0200)
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 <l.wagner@proxmox.com>
PVE/API2/Cluster/Notifications.pm

index b4db7f8e60a7be9acc6214eadfeef6c0761cafc2..d6f29291a3fb0bf5bac7b4922942f6757787a4f1 100644 (file)
@@ -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/<name>'.",
+       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.',