MDL-61742 messaging: Do not send messages from inactive providers
authorDavid Mudrák <david@moodle.com>
Thu, 15 Feb 2018 19:34:50 +0000 (20:34 +0100)
committerDavid Mudrák <david@moodle.com>
Fri, 31 Aug 2018 10:15:30 +0000 (12:15 +0200)
commit39d2c6885693cfc8c2874cdbf019665fbdc2b8b0
tree0ee83a044438972fc960d7fc05dbd53a4cb794fe
parent175b3708c92f3f19529ccab62dcc196c46ba6423
MDL-61742 messaging: Do not send messages from inactive providers

Before this patch, we only checked that the given provider has been
configured in the user or system preferences. However, if the provider's
component is disabled, it does not even appear in these preferences.
Additionally, there was no check that the message / notification
provider is among providers allowed to be consumed by the recipient.

The patch checks that the message origin is among providers returned by
the message_get_providers_for_user() so disabled plugins can't act as
sources of messages and users can't receive messages from providers they
do not have capability for. This mitigates the risk of abusing a plugin
as a source of spam, for example.

Unit test is fixed and extended. When the $CFG->messaging is disabled,
no messages between users should be sent (I can't understand why the
unit test was written in an opposite way). Added assertions for the
raised debugging message.
lib/messagelib.php
lib/phpunit/tests/advanced_test.php
lib/tests/messagelib_test.php
message/tests/externallib_test.php