/usr/lib/obs/server/BSNotify.pm is in obs-server 2.7.4-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #
# Copyright (c) 2008 Klaas Freitag, Novell Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program (see the file COPYING); if not, write to the
# Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
#
################################################################
#
# Module to talk to notification systems
#
package BSNotify;
use BSRPC;
use BSConfig;
use strict;
#
# Backend notifications are always routed through the source server. The API
# is processing them via /lastnotifications route and afterwards delivers
# them to the backend notifiy plugins via /notify_plugins.
#
sub notify {
my ($type, $p, $payload) = @_;
# strip
$p = { map {$_ => $p->{$_}} grep {defined($p->{$_}) && !ref($p->{$_})} sort keys %{$p || {}} };
my $param = {
'uri' => "$BSConfig::srcserver/notify/$type",
'request' => 'POST',
'headers' => [ 'Content-Type: application/x-www-form-urlencoded' ],
'timeout' => 60,
};
if ($payload) {
$param->{'headers'} = [ 'Content-Type: application/octet-stream' ];
$param->{'data'} = $payload;
}
my @args = map {"$_=$p->{$_}"} sort keys %$p;
eval {
BSRPC::rpc($param, undef, @args);
};
if ($@) {
die($@) if $payload; # payload transfers are fatal
warn($@) if $@;
}
}
#
# this is called from the /notify_plugins route that the API calls for all
# events (no matter the origin) if the API is configured to do so.
#
sub notify_plugins($$) {
my ($type, $paramRef) = @_;
return unless $BSConfig::notification_plugin;
my $plugins = $BSConfig::notification_plugin;
$plugins = [ split(' ', $plugins) ] unless ref($plugins); # compat
for my $plugin (@$plugins) {
my $notifier = loadPackage($plugin);
$notifier->notify($type, $paramRef);
}
}
sub loadPackage {
my ($plugin) = @_;
eval {
require "plugins/$plugin.pm";
};
warn("error: $@") if $@;
return $plugin->new();
}
1;
|