Commit graph

1189 commits

Author SHA1 Message Date
Kosta Harlan efecfc07dc Hooks: Use new style hook registration to allow for DI
Implement RecentChange_saveHook interface and pass Config via hook handler
declaration in extension.json.

Change-Id: I2bc5950eb6fc066b2f2a83ea84b700d02b075de9
2020-07-03 04:06:58 +00:00
jenkins-bot d891751f11 Merge "Don't make unchecked method call on object that might be null" 2020-07-01 16:07:53 +00:00
jenkins-bot a2c6b21925 Merge "Update hooks to use PageSaveComplete" 2020-06-30 10:40:51 +00:00
Umherirrender 3c53d6acb9 phpcs: Break long lines
Use the codesniffer default of length = 120

Change-Id: Ifbfd56b20432e54805d3a9bce22cda888c1fc74d
2020-06-27 12:05:03 +02:00
DannyS712 28a5eafe8c Update hooks to use PageSaveComplete
Extension requires MW 1.35+, always available

Bug: T250566
Change-Id: I1131a50f03002337d6b6eac18fdcb6adaaa896ce
2020-06-26 15:59:04 +00:00
Ammar Abdulhamid 2a8b694ae9 Don't make unchecked method call on object that might be null
The final iteration of Ie41331f made it clear that ::getTarget()
method of the special page can be null other than User object.
Since we know this we should not make unchecked method call on it.

Bug: T251687
Change-Id: Ib36a6c947b58780171cf5e7343e79d8724414b83
2020-06-25 11:57:05 +01:00
jenkins-bot 17b57a6f37 Merge "Echo: Add gender support for Mute user label" 2020-06-25 04:32:47 +00:00
Ammar Abdulhamid d029f18570 Echo: Add gender support for Mute user label
Bug: T251687
Depends-On: Ie41331fe37ba08dba343f2b229d2374c0443a074
Change-Id: I563f3f3df84cc12a4256feb158f2e1ccf7c69aad
2020-06-18 21:46:03 +01:00
jenkins-bot 8fe5e47b76 Merge "Push: Add additional job params for logging" 2020-06-18 10:55:37 +00:00
Michael Holloway a2412732f6 Push: Add additional job params for logging
Adds additional job parameters to help diagnose the apparent issue of
jobs being performed twice on Beta.

Bug: T255068
Change-Id: Ib257a24056539487e1110fe286fa4535c3fec94a
2020-06-17 17:58:21 -04:00
James D. Forrester a1fb5d5d75 Add ten millionth edit thank you notification, per demand on Facebook
Change-Id: I26a0dd0954f7f3f61014cde371fa0c46c4db78cb
2020-06-17 19:39:39 +01:00
jenkins-bot 12090e6b0c Merge "Push: Check that the event type is enabled before scheduling job" 2020-06-15 11:48:06 +00:00
jenkins-bot 33091d5c74 Merge "Parse messages in string context" 2020-06-15 01:19:01 +00:00
Michael Holloway 07c8c0afcf Push: Check that the event type is enabled before scheduling job
It is the notifier implementation's responsibility to check the user's
notification preferences before sending a notification. This adds the
check.

Change-Id: I4b7fd7ea444f5a6db6d79fadb48a440d4fdf0ac9
2020-06-12 16:30:29 -04:00
Paladox 374aeb5fa9 Increase "euw_wiki" VARCHAR length from 30 to 64
This is the same fix that has been done to Flow.

Database names are limited to 63 per [1], so by upping the limit
we allow longer db names (e.g db names longer than 30 characters).

[1] https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-limitations-database-objects.html

Change-Id: I0d26a77c1bb49719eebc6beead4d79a27fcd3826
2020-06-11 17:23:19 +00:00
jenkins-bot c82226835b Merge "s/slave/replica/" 2020-06-11 01:01:49 +00:00
Michael Holloway 657e914513 Push: Bail out of notification job early if no subscriptions found
Change-Id: Ica8e5c0496171dba4315c27072c2d865eb747e78
2020-06-10 15:38:23 -04:00
Gergő Tisza 153db72ec4 Ensure an array is passed to ApiEchoMute::lookupIds()
The nicer approach would be setting the parameter default to [],
but that breaks ApiSandbox.

Bug: T254699
Change-Id: I6c553e27248ff7d6c696f116cb34eb238dade440
2020-06-10 13:47:05 +00:00
jenkins-bot ea200ace05 Merge "Remove overbroad DB error catching in ApiEchoPushSubscriptionsCreate" 2020-06-10 11:52:35 +00:00
Michael Holloway c9a826190d Remove overbroad DB error catching in ApiEchoPushSubscriptionsCreate
Rather than catching all DB errors (and assuming they are duplicate
entry errors), ignore duplicate entry errors and use affectedRows() to
determine whether the subscription already existed.

Change-Id: I4d50cb8222e52cc1a4e1f0fb3f596f36cb565dbb
2020-06-09 23:48:12 -04:00
jenkins-bot 2a38f60ab8 Merge "Push: Submit requests to configured service endpoint" 2020-06-09 17:08:31 +00:00
Reedy aa702c1471 s/slave/replica/
Bug: T254646
Change-Id: I4de3985fd8568ce07919623efe2981bc0b6c54e5
2020-06-09 02:09:44 +01:00
DannyS712 9564e1ae50 Docs: Use replica instead of slave
Bug: T254646
Change-Id: I06387e33c5207ea59db34dba3b482893ff103288
2020-06-08 23:49:00 +00:00
Michael Holloway 1d31fd753a Push: Submit requests to configured service endpoint
Finishes the implementation of the stubbed NotificationServiceClient.
Sends push notification request messages to the endpoint configured in
the EchoPushServiceBaseUrl setting. For example, to send messages to an
instance of mediawiki/services/push-notifications running on the host
machine while running MediaWiki in Docker, add the following line to
LocalSettings.php:

 $wgEchoPushServiceBaseUrl = 'http://172.17.0.1:8900/v1/message';

Bug: T252899
Change-Id: Icab7825e9080d6b1a4cfc5e12fed1da221ce4610
2020-06-08 13:37:24 +00:00
Michael Holloway a5bcc65504 Fix push subscription retrieval
Updates the push subscription query to retrieve a provider string rather
than only its numeric internal ID.

Change-Id: I910173409e48e8b6a6739d3122165c40b0d52b7f
2020-06-08 13:58:42 +02:00
Umherirrender 2fe223e45c Pass function name to database functions
Useful for logging

Change-Id: I95d466224ff984653051990b540f29e243915e3f
2020-06-07 03:35:53 +02:00
Umherirrender 0b850dd88d Parse messages in string context
Change-Id: I62f0da3aaa0fd1467043aeb0e0dc3482f6b6600f
2020-06-06 21:28:08 +02:00
jenkins-bot 51ddc6f5db Merge "Parse messages in string context" 2020-06-04 22:01:41 +00:00
Kosta Harlan fb21b0abef Muted pages: Adjust config to not show missing titles
Bug: T46787
Change-Id: Ibb760615670ce36d198627b1628ee311b6fcb628
2020-06-03 12:49:26 +02:00
Umherirrender b19d4fd63b Parse messages in string context
Change-Id: I456558cb50bfe2398e24a7e9e65e939a0f936b77
2020-06-02 21:08:02 +00:00
jenkins-bot a9391e1035 Merge "Add push notifier" 2020-06-02 18:21:46 +00:00
jenkins-bot de09ddd4d9 Merge "Add push subscription management" 2020-06-02 18:21:42 +00:00
Michael Holloway ce7a46f7ed Add push notifier
Provides a basic push notifier implementation. Since the push service is
not yet in place, all it does for now is log debug output when a
notification is to be sent.

To register the push notifier, add the following configuration to
LocalSettings.php:

 $wgEchoNotifiers['push'] = [ 'EchoPush\\PushNotifier', 'notifyWithPush' ];
 $wgDefaultNotifyTypeAvailability['push'] = true;
 $wgNotifyTypeAvailabilityByCategory['system']['push'] = false;
 $wgNotifyTypeAvailabilityByCategory['system-noemail']['push'] = false;

We'll register the notifier in configuration for now, rather than
hard-coding the default in extension.json, in order to have control over
when and where it rolls out (beta vs. prod, as well as which wikis).

Since the push notifier implementation depends on jobs being processed
by the job queue, I also recommend adding the following configuration
setting to ensure that all pending jobs are processed at the end of each
web request:

 // ensure all pending jobs are processed when a web request completes
 $wgJobRunRate = PHP_INT_MAX;

Bug: T252899
Change-Id: Ie7f222443045d30620ff297b006104ef18a074a8
2020-06-02 13:40:04 -04:00
Michael Holloway a3674974f1 Add push subscription management
Adds DB tables for storing push subscriptions, some DB interaction code
for retrieving them within MediaWiki, and a set of API modules for
managing them from the outside world.

When testing this patch, be sure to run maintenance/update.php to create
the new tables, and set $wgEchoEnablePush = true in LocalSettings.php
to enable the API new API module.

N.B. The current DB schema is centered on app push subscriptions. Web
push subscriptions require slightly different handling, since they are
provided by browsers as a JSON blob rather than a token string. How to
handle web push subscriptions is a question we can defer until the time
comes to add web push support.

Subscription data is stored in the echo_push_subscription table, with
provider names normalized into the echo_push_provider table. We expect to
be looking up subscriptions by central user ID, so that column is indexed.
The subscription data also includes a column to store SHA256 digests of
the subscriber tokens. This is for use as a unique key constraint, since
we expect every push token to be univerally unique, and the token values
themselves may be too large to reasonably index in MySQL.

Bug: T252899
Change-Id: I3928761b3fba12e54ff4850e9a05c68ec7772f62
2020-06-02 13:40:00 -04:00
Umherirrender 24ab1eb35c build: Bump phan to 0.10.2, remove taint-check
Change-Id: I27fe6a6d248a25e70f4b18f36cf75736ef949bc5
2020-05-31 16:57:07 +02:00
DannyS712 37cde0b9f2 UserClearNewTalkNotification: Only require a UserIdentity
Bug: T253435
Change-Id: I5e0d7a6300dfd6acda754e6334a6e3f58900d753
2020-05-29 08:40:47 +00:00
Roan Kattouw 28f432b150
Add dynamic secondary action to mute/unmute page-linked notifications
Also adds an API module for muting and unmuting pages (and users).

Bug: T46787
Bug: T115264
Change-Id: Icf4e4bfa9fd7fa27b4c40892e3d5ce000eb22d5a
2020-05-27 15:20:08 +02:00
Tim Starling 5252624729 Use HttpRequestFactory::createMultiClient()
Use the globally configured request timeout instead of MultiHttpClient's
hard-coded default. This means that the request timeout for
ForeignWikiRequest will typically be reduced from 900s to 25s.

Bug: T245170
Depends-On: I8252f6c854b98059f4916d5460ea71cf4b580149
Change-Id: I1c3d96720709253ad15bb8528cdd132571de2e4e
2020-05-21 14:23:28 +10:00
Clara Andrew-Wani 6dd0f21968 Use new TalkPageNotificationManager
Bug: T239640
Change-Id: Iba015bf246250fc144022d92b88eb00882dd1d3a
2020-05-15 12:58:14 -04:00
jenkins-bot 304f82c314 Merge "Add page linked event title muted list" 2020-05-12 21:08:47 +00:00
jenkins-bot c4faa9a99d Merge "Pass a user to EchoEvent::create" 2020-05-06 16:22:19 +00:00
DannyS712 868fb32c2e Pass a user to EchoEvent::create
Followup to 84a0d9ab57

Change-Id: I5a671e4cf5aa0d18b7e7bb59b57e410a91d462ab
2020-05-06 15:59:16 +00:00
Kosta Harlan 1560528dc7 Add page linked event title muted list
* Add a section on the preference form to allow users to mute articles
  from generating "page linked" notices
* The preference will save the article title as an article ID

Depends-On: Ia0ddf78646ec4c8ae0b84b6d5b46ef5e51c8e8c1
Bug: T46787
Change-Id: I67f751eae5fdc5bccff7fe3047227d432c1cb8d5
2020-05-06 12:38:55 +02:00
jenkins-bot 4ff2b21819 Merge "Replace use of ArticleRollbackComplete hook with RollbackComplete" 2020-05-06 00:16:45 +00:00
DannyS712 84a0d9ab57 Replace use of ArticleRollbackComplete hook with RollbackComplete
Extension requires MW 1.35+, so the hook is always available

Bug: T250543
Change-Id: I65a4e64cac05193e57b79be4afc3584e04007b5f
2020-05-05 22:44:40 +00:00
Tim Starling 41d53fde50 Don't put a whole User object in extra[mentioned-users]
DiscussionParser::getUserMentions() returns mentions in an array of the
form [ID => ID]. UserLocator says "we shouldn't receive User instances,
but allow it for backward compatability". But
DiscussionParser::generateEventsForRevision() was putting User objects
into the extra when there is a mention in the edit summary.

I noticed this when I accidentally made User objects be unserializable
in a core patch.

So, I made generateEventsForRevision() generate mention arrays in the
same ID=>ID format as getUserMentions().

Change-Id: I7c6d25950c8887b50426863c7b0a2d5d007559dd
2020-05-05 14:41:49 +10:00
Edward Chernenko 87053b91a6 Be compatible with third-party extensions that use NewMessagesAlert
1. Preamble:
Currently Extension:Echo unconditionally suppresses NewMessagesAlert,
because "You have new messages" is replaced by Echo notification.

2. Problem:
Some third-party extensions (such as Extension:Moderation) can use
GetNewMessagesAlert hook to inject their own notification, which must
not be suppressed.
By returning "false" from GetNewMessagesAlert hook, Echo stops those
third-party extensions from showing their notifications too.

3. Solution:
Allow those third-party extension to tell Echo "don't suppress this"
by returning false from the hook EchoCanAbortNewMessagesAlert.
This change has no impact on situations when no such third-party
extensions are installed.

4. How it was handled before this change:
Old solution for those extensions was to remove the hook of Echo from
$wgHooks, which was a dirty hack and is not compatible with T240307.

Change-Id: I433e30c5f639b5f20838804e8fa7c94a4bcf5349
2020-04-21 10:12:51 +03:00
DannyS712 55b018cdd4 Use LinksUpdate::getRevisionRecord
Bug: T249397
Change-Id: I335e12fc2f57a9ca07f985482eb4c339933ef13f
2020-04-08 02:31:43 +00:00
jenkins-bot 01c00b670a Merge "Use MediaWikiServices::getAuthManager" 2020-04-06 09:37:49 +00:00
Reedy 2661c3a787 Add getter for EventPresentationModel::$distributionType
There are cases where we want to vary on $distributionType what is sent.
If it's an email (for example), we might want more information and
context which is unneeded via the web notification.

Bug: T249408
Change-Id: I68cedfa8389e1d935b02ca7475bf42262005d2bc
2020-04-05 19:00:16 +00:00