Commit graph

330 commits

Author SHA1 Message Date
James D. Forrester
356f0b00d2 EditPage, ApiEditPage: Use parantheses to be explicit about order of evaluation
Follow-up for 48c8cee183, caught by the
forthcoming release of MediaWiki-CodeSniffer.

Change-Id: Ib75df401916e8a0d750844ec364c5ab8f92ff003
2024-07-29 11:42:24 -04:00
Umherirrender
7ba9818e07 api: Use namespaced classes
Changes to the use statements done automatically via script

Change-Id: Icc5b59f9ef6319d1fb785fcda17f43c94f94cc38
2024-06-14 21:38:40 +00:00
WMDE-Fisch
f089276e0f Replace deprecated status->getErrors calls in API classes
Change-Id: I770a98e7cc3e2bc78e363dd73439ab8b8599e0da
2024-06-13 13:27:01 +02:00
Ebrahim Byagowi
12660db261 Add MediaWiki\Watchlist namespace to the related classes
This adds MediaWiki\Watchlist namespace to the classes of watchlist
directory and adds deprecation notice since 1.43 to the just created
unnamespaced aliases of the classes.

Bug: T353458
Change-Id: I4234f8fe62bb3bde6f5271c7ba31a2420b0f4b90
2024-05-22 01:23:10 +03:30
Ebrahim Byagowi
97d1202784 Add namespace and deprecation alias to TextContent
This patch introduces a namespace declaration for the
MediaWiki\Content to TextContent and establishes a class
alias marked as deprecated since version 1.43.

Bug: T353458
Change-Id: Ic251b1ddfcf6db9c85cb54cddf912aa827d2bc3a
2024-05-19 23:23:01 +03:30
Kosta Harlan
48c8cee183
Temporary accounts: Perform redirect for first successful edit
Why:

- We want to make sure that the top-level redirect fires for temporary
  accounts which were created in an edit attempt, but did not yet save
  an edit

What:

- In EditPage and ApiEditPage, perform the redirect if there is a saved
  temp user as part of the current process, or if the user account is a
  temporary one and it has no edits. Note that this means the top-level
  redirect would be performed if a temp user creates a first edit on a
  non-home wiki:
   - logged out user makes a failed attempt on wiki A, temp account is
     created
   - same user makes a successful edit on wiki A, redirect hook fires
   - same user visits wiki B and makes a succesful edit, redirect hook
     fires

Note:

- We could consider setting a query parameter like
  `createdinrequest=1` to signal to TempUserCreatedRedirect
  implementations that the temporary account was created in the current
  request, and did not exist earlier. But I am not sure if we have a use
  case for needing that, so have left it out of this patch.

Bug: T359405
Change-Id: If4b8c561383f993606c0ba565591871195a1f8c2
2024-04-29 10:55:23 +02:00
Taavi Väänänen
9cb7cd443c
Use ignore comments for MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage
Instead of globally ignoring this sniff, convert the current violations
(which set the variable so can't be fixed easily yet) to use local phpcs
comments to silence the errors.

Change-Id: I490cbf4915e2705383edb4a2fc5ddc1efd55c960
2024-04-22 14:17:02 +03:00
James D. Forrester
4bae64d1c7 Namespace includes/context
Bug: T353458
Change-Id: I4dbef138fd0110c14c70214282519189d70c94fb
2024-02-08 11:07:01 -05:00
Dreamy Jazz
3b3f1d7851 Handle collisions from SerialProvider::acquireIndex
Why:
* When using the TempUserCreator::create or ::acquireAndStashName to
  get temporary account when the chosen username already existed, that
  temporary account is treated as if it doesn't exist. This causes
  confusing "userexists" errors and also causes the user to be logged
  into an already existing temporary account.
* Furthermore, because the user existence check in AuthManager::auto
  CreateUser only checks the local wiki, if an existing temporary
  account exists globally but not on the local wiki then the code
  sign a new user into an existing temporary account.
* This is very bad behaviour, though shouldn't happen unless the
  serialMapping configuration uses a SerialMapping class that could
  provide duplicates and/or the configuration has been changed to
  use a different SerialMapping class.
* There is a need to change the SerialMapping class in use to a
  different class, which means that the code will attempt to use
  temporary account usernames which already exist.
* As such, the code that is generating the temporary account usernames
  based on the SerialMapping and SerialProvider should be aware that
  it may produce an already existing temporary account username, even
  if the SerialMapping class being used is asserted to never provide
  duplicates.
* Therefore, the code that generates temporary account usernames
  should always attempt to verify that a automatically generated
  temporary account name does not already exist on the wiki.

What:
* Update TempUserCreator::acquireName to check to see if the username
  it generates already exists centrally using the CentralIdLookup.
  If it does, then the method returns null. Otherwise, the username
  that hasn't been used yet is returned.
* Create the private method TempUserCreator::attemptAutoCreate that
  attempts an autocreate for a temporary account name, and optionally
  logs the account in.
* Update TempUserCreator::create to use ::attemptAutoCreate to
  first to check if the account can be created and then again once
  the account is created to actually login to that temporary account.
  This is done to prevent logins to existing temporary accounts on
  the local wiki. The second call to actually perform the login is
  necessary as there is no other way to login to a temporary account.
* Update TempUserCreator::acquireAndStashName to respond to the changes
  to ::acquireName, such that it returns null if ::acquireName returns
  null and also does not modify the session.
* Update EditPage::maybeActivateTempUserCreate to return a Status and
  return a good status in all cases except when a temporary account
  name could not be acquired.
* Add IEditObject::AS_UNABLE_TO_ACQUIRE_TEMP_ACCOUNT, and use it as
  the value of the fatal status returned by EditPage
  ::internalAttemptSave if a temporary account name could not be
  acquired. This will cause the display of a useful error to the
  user on edit.
* Update ApiEditPage and ApiAcquireTempUserName to die with an error
  if a temporary account username was unable to be acquired.
* Provide tests for the untested ApiAcquireTempUserName.php file
  including testing the new behaviour.
* Add and update tests for TempUserCreator.php

Bug: T353390
Change-Id: Id3a316ea0eba544d51d4ffcdfb03e35f4b3c54cc
2023-12-21 14:49:42 +00:00
Martin Urbanec
29af4dd074 Move user options related classes into its own namespace
There are a couple of user options related classes already,
and the T321527 work on dynamic defaults is going to add
even more. Let's move them into a separate namespace
to make core a bit more organized.

Old name is kept as an alias for compatibility purposes.

Bug: T321527
Bug: T352284
Change-Id: I9822eb1553870b876d0b8a927e4e86c27d83bd52
2023-11-29 13:27:13 +01:00
Ammarpad
42e166dd83 StatusValue: Allow passing arbitrary data to augment result
This allows extensions and hooks to pass around additional data
about the operation result arbitrarily to supplement value and errors.

When two StatusValue instances are to be merged, it's responsibility
of the caller to ensure either only one has this extra data or none,
but never both (since the type is unrestricted). If necessary, the
caller should merge them before invoking StatusValue::merge.

Bug: T326479
Change-Id: Ibe3f1f8b81bcfcb18551d3ca4cda464e4bdbcbce
2023-11-28 14:58:22 +01:00
Thalia
9396cd6eed Add ApiCreateTempUserTrait for APIs that create temporary users
Refactor EditPage's logic for getting a redirect URL into a trait
that can be shared between classes that exteend ApiBase.

Bug: T349223
Change-Id: I7cafa0bfc17a75d44e1d83b9561b4b2778b5f132
2023-11-01 13:29:02 +00:00
James D. Forrester
1d0b7ae1e2 Namespace User under \MediaWiki\User
Bug: T166010
Change-Id: I7257302b485588af31384d4f7fc8e30551f161f1
2023-09-19 19:18:16 +00:00
Bartosz Dziewoński
365a588238 Use real type hints for services etc. in api/ except ApiQuery*.php
Mostly used find-and-replace:

Find:
/\*[\*\s]+@var (I?[A-Z](\w+)(?:Interface)?)[\s\*]+/\s*(private|protected|public) (\$[a-z]\w+;\n)((?=\s*/\*[\*\s]+@var (I?[A-Z](\w+)(?:Interface)?))\n|)
Replace with:
\3 \1 \4

Followed by some manual review to make sure I'm not changing too much,
omitting some changes that looked too complicated and anything that
caused test failures, and some whitespace fixes.

Change-Id: I6ec7587607df4f1a4f448a096c3e44c4e5270b70
2023-08-29 01:04:26 +00:00
Bartosz Dziewoński
14e598f850 ApiWatchlistTrait: Use real type hints, remove duplicate definitions
Change-Id: Ib1407641222935a370f3e8e492558faa9f3f2bdf
2023-08-29 00:59:07 +00:00
Bartosz Dziewoński
6ac1c4789d ApiEditPage: Check permissions of the temp user if we will create one
Bug: T342770
Change-Id: I024c79551ca9d67e4e7e91cce028b25718141232
2023-08-08 20:26:10 +02:00
Bartosz Dziewoński
604f2d732a ApiEditPage: Return URL to finish creating temp account if enabled
Bug: T338002
Change-Id: I6cdc014fb39d35ce1f091b53dc3a9c4a3c95f9e9
2023-06-22 11:30:07 +02:00
James D. Forrester
ad06527fb4 Reorg: Namespace the Title class
This is moderately messy.

Process was principally:

* xargs rg --files-with-matches '^use Title;' | grep 'php$' | \
  xargs -P 1 -n 1 sed -i -z 's/use Title;/use MediaWiki\\Title\\Title;/1'
* rg --files-without-match 'MediaWiki\\Title\\Title;' . | grep 'php$' | \
  xargs rg --files-with-matches 'Title\b' | \
  xargs -P 1 -n 1 sed -i -z 's/\nuse /\nuse MediaWiki\\Title\\Title;\nuse /1'
* composer fix

Then manual fix-ups for a few files that don't have any use statements.

Bug: T166010
Follows-Up: Ia5d8cb759dc3bc9e9bbe217d0fb109e2f8c4101a
Change-Id: If8fc9d0d95fc1a114021e282a706fc3e7da3524b
2023-03-02 08:46:53 -05:00
Amir Sarabadani
5323501d53 Reorg: Move EditPage.php to MediaWiki\EditPage
Also moving TemplatesOnThisPageFormatter to the same namesapce as it's
only used by EditPage

Bug: T321882
Change-Id: Ibefc44eb64aedb430148b109090584c3e35794ab
2023-02-15 22:40:10 +01:00
DannyS712
c1db64b808 Make use of ??= in more places
New feature from PHP 7.4

Change-Id: Ifa7a9bc7b2ec415ad7ecb23f4c1776f51f58fd6b
2022-12-17 01:10:13 +00:00
Amir Sarabadani
bbe704b5c1 Reorg: Move some of request related classes to MediaWiki/Request
Redoing I5ea70120d74 but without moving WebRequest that caused issues
with phan-taint-plugin.

Moving:
 - DerivativeRequest
 - FauxRequest
 - FauxRequestUpload
 - PathRouter
 - WebRequestUpload

Bug: T321882
Change-Id: I832b133aaf61ee9f6190b0227d2f3de99bd1717b
2022-10-28 10:15:31 +00:00
Zabe
f6b9381d7f Revert "Reorg: Move some of request related classes to MediaWiki/Request"
This reverts commit 2bdc0b2b72.

Reason for revert: T166010#8349431

Bug: T166010
Change-Id: Idcd3025647aec99532f5d69b9c1718c531761283
2022-10-27 13:14:16 +00:00
Amir Sarabadani
2bdc0b2b72 Reorg: Move some of request related classes to MediaWiki/Request
Moving:
 - DerivativeRequest
 - FauxRequest
 - FauxRequestUpload
 - PathRouter
 - WebRequest
 - WebRequestUpload

Bug: T166010
Change-Id: I5ea70120d745f2876ae31d039f3f8a51e49e9ad8
2022-10-26 16:49:10 +02:00
Daimona Eaytoy
947ff7c0f5 build: Update mediawiki/mediawiki-phan-config to 0.12.0
This patch only adds and removes suppressions, which must be done in the
same patch as the version bump.

Bug: T298571
Change-Id: I4044d4d9ce82b3dae7ba0af85bf04f22cb1dd347
2022-10-08 15:45:42 +02:00
Bartosz Dziewoński
0fbe063a0c ApiEditPage: Create temporary account on edit attempt if enabled
Bug: T307056
Change-Id: I5a9ccf44f5cf563dfe9c40df22a6153e7d9425d7
2022-09-30 16:20:22 +02:00
Reedy
b4717c2f0d api: Swap wfMessage() for $this->msg()
Change-Id: I5c80a2a36f601a46802170dd4747a32ecc7dffb3
2022-08-13 15:21:29 +01:00
Reedy
f45fefec0e api: Replace numerous more deprecated constants
Change-Id: I498a315b8b4b56d5e2f939e797adbe0487cd7d07
2022-06-06 02:24:41 +01:00
Reedy
0b5084f868 api: Replace numerous deprecated constants
Change-Id: I34ffcb70efbfa257da8dab6e0790aa0d697caf5b
2022-06-06 00:18:50 +01:00
Taavi Väänänen
ac07cc0362 SECURITY: ApiEditPage: update title after redirects
Otherwise permission checks are directed to the old title which makes it
possibly to bypass protection via redirects.

Bug: T309028
Change-Id: I157df365439b09416639e6ea2beefc01b60e6264
2022-06-02 22:48:29 +02:00
Aryeh Gregor
666ca1bdf3 Use MainConfigNames instead of string literals, #2
This covers all occurrences of /onfig->.*get( '/ in includes/.
Undoubtedly there are still plenty more to go.

Change-Id: I33196c4153437778496f40436bcde399638ac361
2022-04-13 18:55:46 +03:00
jenkins-bot
3f11e9a34e Merge "api: Simplify param handling for undoafter on action=edit" 2022-03-30 18:07:47 +00:00
Umherirrender
1d08f5cbfb api: Simplify param handling for undoafter on action=edit
The param is set to min => 0, no extra check needed
Not given parameter are null, but null == 0 is true as well

Found by phan (T259172)

Bug: T259172
Change-Id: I2e4ab82b90370eb9e0f49ce37d680ef4aaddead9
2022-03-30 17:32:01 +00:00
Umherirrender
7aa0884029 phan: Remove PhanTypePossiblyInvalidDimOffset suppression
Make phan stricter about array keys
Remaining false positive issues are suppressed.
The suppression and the setting change can only be done together

Bug: T304887
Depends-On: I3105a5fd4826f8667b5232834defc5ec93be32a1
Depends-On: Ie9610a6e83731468311edb3ed17f80fc509de385
Change-Id: I701f12ab94478c3b8e7fd82110ade74a8e6b04ef
2022-03-28 23:26:49 +02:00
Umherirrender
1f71eccf63 phan: Disable null_casts_as_any_type setting
Make phan stricter about null types by setting null_casts_as_any_type to
false (the default in mediawiki-phan-config)
Remaining false positive issues are suppressed.
The suppression and the setting change can only be done together

Bug: T242536
Bug: T301991
Change-Id: I0f295382b96fb3be8037a01c10487d9d591e7e01
2022-03-21 18:25:07 +00:00
jdlrobson
3869cc522b Edits via API should set cookie for anons
Bug: T295910
Change-Id: Ice45db0cb685439603c676f790a146e7e5bb50df
2021-12-17 18:09:36 +00:00
Derick Alangi
8fe9e0317f Introduce Redirect(Lookup&Store) services to handle redirects
The concept of a redirect chain didn't really work for a value of
max redirect > 1. In the ideal world, we just want to have a source
which points to target (source -> target) discarding the concept of
a redirect chain completely.

Having something like: source -> target -> target1 -> target2 doesn't
really work well with the current database design.

NOTE: Support for $wgMaxRedirect will be removed soon hence
deprecation without interfaces for replacement.

Bug: T290639
Change-Id: I469de6f85e405e8ddbe7abaa5b99b77cb9cf415d
2021-12-01 19:14:22 +01:00
Ammarpad
77165e665e ApiEditPage: Harden content model mismatch checks
Bug: T290607
Change-Id: Ibced84ae6ee1648a3b8bcf616c3c0561394a3fdc
2021-10-02 21:13:51 +01:00
Kunal Mehta
a85f569dd1 Revert "Use CsrfTokenSet as CSRF token source"
This reverts commit 0d75fdb4f7.

Bug: T287542
Change-Id: Iedd3461869f973f8d621a39e6ad4674cbb577551
2021-08-05 15:48:26 -07:00
Petr Pchelko
0d75fdb4f7 Use CsrfTokenSet as CSRF token source
Change-Id: I079d2c802d9b48d6abf7f37fa9ef7dafac631345
2021-07-12 14:19:15 -07:00
Umherirrender
773f6b6322 api: Replace deprecated User::getOption in ApiEditPage
Change-Id: Ic20c8c6402d80ca8b5a426b3d10fbe3efb0e89a4
2021-07-06 23:10:28 +02:00
Umherirrender
d146800ee8 api: Inject services into ApiWatchlistTrait
Bug: T259960
Change-Id: I73596f8c924ec4a02a7042608d19a35f82bb752a
2021-07-06 20:15:30 +00:00
Umherirrender
c9319f7b55 api: Replace deprecated WikiPage::factory in ApiEditPage
Change-Id: Ic62d9144f64c32a3d403984a0e04f590c9a67188
2021-07-02 14:35:14 +02:00
Umherirrender
576ccf392d api: Inject services into ApiEditPage
Bug: T259960
Change-Id: Idf6eee7fed14495a8ab6e05a768fcb28178a4c2f
2021-06-30 22:30:28 +02:00
Roman Stolar
6ebaa5caf6 Remove the fallback for create rights (covered in PM edit rights check).
Remove key to i18n message, no longer being used.

Bug: T272079
Change-Id: Id6566e5241b06ba377c2eca083221ee02556365f
2021-06-30 17:30:30 +03:00
Bartosz Dziewoński
2361889b78 Use the edited page's title for magic words in action=edit error messages
Allow specifying the title used for rendering error messages in
ApiErrorFormatter.

Then, specify one in ApiEditPage (and a few similar modules that deal
with single pages) once we've figured out which page is being edited.

Bug: T247661
Change-Id: Ic3d70efc23744ef6e90abc445f3babebf45c4697
2021-05-21 18:00:36 +02:00
Umherirrender
cf541752e0 Add comment to fall-through cases in switch
Fix new coming sniff
PSR2.ControlStructures.SwitchDeclaration.TerminatingComment

Bug: T182546
Change-Id: I3f8d43c730981d8faaa72910d7f3b58a14a8372f
2021-04-15 17:31:12 +00:00
DannyS712
3413868d0d Clean up some logic in ApiEditPage
Should be a no-op

Change-Id: I292aa153eb0bf4fdda099995073904c0c9c96d99
2021-04-12 05:36:10 +00:00
Petr Pchelko
ee7d3e9335 Convert ChangeTags public interface to Authority.
Bug: T275507
Change-Id: I3b7f99391ab299df2b046a2878010cf6afe7fed7
2021-02-24 14:09:16 -07:00
Thiemo Kreuz
ca56a3a1b8 Safe-guard switch possibly doing bad comparisons
Old PHP versions are fine doing a `switch` with anything, even
if the types don't match. This changed. More recent PHP versions
start to bring up notices and such when a `switch` accidentially
compares e.g. an object with an int.

Bug: T255177
Bug: T258790
Change-Id: Ib415bd2fb394b95b02737b6df50e4e1fbbc440d3
2021-02-10 19:42:25 +01:00
jenkins-bot
fab3c6ed57 Merge "ApiEditPage: Document that it is extended" 2020-10-06 18:50:01 +00:00