Page MenuHomePhabricator

Integrate MW_API with MediaWiki REST API framework
Closed, ResolvedPublic

Description

Defining the MW_API constant (which is basically a way to say that we have entered the application via api.php) triggers various API-related behaviors:

  • (needed) disables inserting a title parameter into $_GET (WebRequest::interpolateTitle)
  • (?) allows use of the Promise-Non-Write-API-Action header (WebStart.php)
  • (needed with modifications) switches to simple error output (minimal HTML + header instead of full wiki page) (MWExceptionRenderer::output, MWException::report, ErrorPageError::report)
  • (needed) only allow certain authentication methods (bot passwords, centralauthtoken, OAuth) via the API (BotPasswordSessionProvider::provideSessionInfo, CentralAuthTokenSessionProvider::provideSessionInfo, MWOAuthSessionProvider::provideSessionInfo)
  • (probably needed) skips CentralAuth edge login, marks session to do it on the next non-API request (CentralAuthHooks::doCentralLoginRedirect)
  • (needed if we want a REST login API, harmless otherwise) suppress some messaging / special handling during certain logins that would not make sense / would be hard to implement in the API (CentralAuthPrimaryAuthenticationProvider::beginPrimaryAuthentication, ConfirmAccountPreAuthenticationProvider::testForAccountCreation)
  • (irrelevant) some kinda action API specific error handling hack in CirrusSearch (CirrusSearch::prefixSearch, CirrusSearch\Hooks::onSearchGetNearMatch)
  • (needed) marking the action as originating from the API in various logs/stats (CirrusSearch\Util::getExecutionContext, AuthManagerStatsdHandler::getEntryPoint, WikimediaEventsHooks::onPageContentSaveComplete, CampaignsSecondaryAuthenticationProvider::beginSecondaryAccountCreation)
  • (unwanted) hacky way of identifying (along with looking at $_GET['action']) when we are in a specific API module (WikimediaEventsHooks::onUserSaveOptions)
  • (needed) identifying human actions for analytics or similar purposes (WikimediaEventsHooks::onRecentChangeSaveCrossWikiUpload, WikimediaEventsHooks::onRecentChangeSaveEditCampaign, WikipediaAppCounter::isWikipediaAppMwApiRequest)
  • (never made sense in the first place) do not display captcha when functionality is accessed via the API (SimpleCaptcha::confirmEmailUser)
  • (probably needed) dirty parser hacks, see T111346#1642128 (HtmlPageLinkRendererBeginHookHandler::doHtmlPageLinkRendererBegin)

The REST API will also need many of those, but probably not all, and maybe not always exactly in the same way (e.g. it triggers bare-HTML fatal error rendering; for the REST API we might want to make it plaintext instead.) That needs to be handled somehow, maybe by splitting it into MW_ACTION_API and MW_REST_API.

Event Timeline

Tgr renamed this task from Integrate MW_API with MediaWiki REST API fvramework to Integrate MW_API with MediaWiki REST API framework.Jul 2 2019, 9:26 AM

The immediate need is error formatting. This is how an error looks with MW_API set:

1<!DOCTYPE html><html><head><title>Internal Server Error</title></head><body><h1>Internal Server Error</h1><p>[f1a823505e3ea9d69c158506] /w/rest.php/dev.wiki.local.wmftest.net/v3/transform/wikitext/to/html LogicException from line 51 of /vagrant/srv/parsoid/extension/src/Rest/Handler/TransformHandler.php: No title or wikitext was provided.<br />
2Backtrace:<br />
3#0 /vagrant/mediawiki/includes/Rest/Router.php(293): MWParsoid\Rest\Handler\TransformHandler-&gt;execute()<br />
4#1 /vagrant/mediawiki/includes/Rest/Router.php(280): MediaWiki\Rest\Router-&gt;executeHandler(MWParsoid\Rest\Handler\TransformHandler)<br />
5#2 /vagrant/mediawiki/includes/Rest/EntryPoint.php(65): MediaWiki\Rest\Router-&gt;execute(MediaWiki\Rest\RequestFromGlobals)<br />
6#3 /vagrant/mediawiki/includes/Rest/EntryPoint.php(53): MediaWiki\Rest\EntryPoint-&gt;execute()<br />
7#4 /vagrant/mediawiki/rest.php(29): MediaWiki\Rest\EntryPoint::main()<br />
8#5 /var/www/w/rest.php(5): require(string)<br />
9#6 {main}<br />
10</p></body></html>
Without it:
1<!DOCTYPE html>
2<html class="client-nojs" lang="en" dir="ltr">
3<head>
4<meta charset="UTF-8"/>
5<title>Internal error - devwiki</title>
6<script>document.documentElement.className=document.documentElement.className.replace(/(^|\s)client-nojs(\s|$)/,"$1client-js$2");RLCONF={"wgCanonicalNamespace":"Special","wgCanonicalSpecialPageName":"Badtitle","wgNamespaceNumber":-1,"wgPageName":"Special:Badtitle/rest.php","wgTitle":"Badtitle/rest.php","wgCurRevisionId":0,"wgRevisionId":0,"wgArticleId":0,"wgIsArticle":!1,"wgIsRedirect":!1,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgBreakFrames":!0,"wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"Special:Badtitle/rest.php","wgRelevantArticleId":0,"wgRequestId":"fba815d09c1c66fe1f0373e2","wgCSPNonce":
7!1,"wgIsProbablyEditable":!1,"wgRelevantPageIsProbablyEditable":!1,"wgMFDisplayWikibaseDescriptions":{"search":!1,"nearby":!1,"watchlist":!1,"tagline":!1}};RLSTATE={"site.styles":"ready","noscript":"ready","user.styles":"ready","user":"ready","user.options":"ready","user.tokens":"loading","mediawiki.legacy.shared":"ready","mediawiki.legacy.commonPrint":"ready","mediawiki.skinning.interface":"ready","skins.vector.styles":"ready"};RLPAGEMODULES=["site","mediawiki.page.startup","mediawiki.page.ready","mediawiki.searchSuggest","mediawiki.debug","ext.eventLogging","skins.vector.js"];</script>
8<script>(RLQ=window.RLQ||[]).push(function(){mw.loader.implement("user.tokens@0tffind",function($,jQuery,require,module){/*@nomin*/mw.user.tokens.set({"editToken":"+\\","patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"});
9});});</script>
10<link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=mediawiki.legacy.commonPrint%2Cshared%7Cmediawiki.skinning.interface%7Cskins.vector.styles&amp;only=styles&amp;skin=vector"/>
11<script async="" src="/w/load.php?lang=en&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector"></script>
12<meta name="ResourceLoaderDynamicStyles" content=""/>
13<meta name="generator" content="MediaWiki 1.34.0-alpha"/>
14<meta name="robots" content="noindex,nofollow"/>
15<link rel="shortcut icon" href="/favicon.ico"/>
16<link rel="search" type="application/opensearchdescription+xml" href="/w/opensearch_desc.php" title="devwiki (en)"/>
17<link rel="EditURI" type="application/rsd+xml" href="http://dev.wiki.local.wmftest.net:11000/w/api.php?action=rsd"/>
18<link rel="alternate" type="application/atom+xml" title="devwiki Atom feed" href="/w/index.php?title=Special:RecentChanges&amp;feed=atom"/>
19<!--[if lt IE 9]><script src="/w/load.php?modules=html5shiv&amp;only=scripts&amp;raw=1&amp;sync=1"></script><![endif]-->
20</head>
21<body class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns--1 ns-special mw-special-Badtitle page-Special_Badtitle_rest_php rootpage-Special_Badtitle_rest_php skin-vector action-view">
22<div id="mw-page-base" class="noprint"></div>
23<div id="mw-head-base" class="noprint"></div>
24<div id="content" class="mw-body" role="main">
25 <a id="top"></a>
26
27 <div class="mw-indicators mw-body-content">
28</div>
29
30 <h1 id="firstHeading" class="firstHeading" lang="en">Internal error</h1>
31
32 <div id="bodyContent" class="mw-body-content">
33
34 <div id="contentSub"></div>
35
36
37
38 <div id="jump-to-nav"></div>
39 <a class="mw-jump-link" href="#mw-head">Jump to navigation</a>
40 <a class="mw-jump-link" href="#p-search">Jump to search</a>
41 <div id="mw-content-text"><div class="errorbox mw-content-ltr"><p>[fba815d09c1c66fe1f0373e2] /w/rest.php/dev.wiki.local.wmftest.net/v3/transform/wikitext/to/html LogicException from line 51 of /vagrant/srv/parsoid/extension/src/Rest/Handler/TransformHandler.php: No title or wikitext was provided.</p><p>Backtrace:</p><p>#0 /vagrant/mediawiki/includes/Rest/Router.php(293): MWParsoid\Rest\Handler\TransformHandler-&gt;execute()<br />
42#1 /vagrant/mediawiki/includes/Rest/Router.php(280): MediaWiki\Rest\Router-&gt;executeHandler(MWParsoid\Rest\Handler\TransformHandler)<br />
43#2 /vagrant/mediawiki/includes/Rest/EntryPoint.php(65): MediaWiki\Rest\Router-&gt;execute(MediaWiki\Rest\RequestFromGlobals)<br />
44#3 /vagrant/mediawiki/includes/Rest/EntryPoint.php(53): MediaWiki\Rest\EntryPoint-&gt;execute()<br />
45#4 /vagrant/mediawiki/rest.php(29): MediaWiki\Rest\EntryPoint::main()<br />
46#5 /var/www/w/rest.php(5): require(string)<br />
47#6 {main}</p></div>
48</div>
49
50 <div class="printfooter">Retrieved from "<a dir="ltr" href="http://dev.wiki.local.wmftest.net:11000/wiki/Special:Badtitle/rest.php">http://dev.wiki.local.wmftest.net:11000/wiki/Special:Badtitle/rest.php</a>"</div>
51
52 <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div>
53
54 <div class="visualClear"></div>
55
56 </div>
57</div>
58
59 <div id="mw-navigation">
60 <h2>Navigation menu</h2>
61 <div id="mw-head">
62 <div id="p-personal" role="navigation" aria-labelledby="p-personal-label">
63 <h3 id="p-personal-label">Personal tools</h3>
64 <ul>
65 <li id="pt-anonuserpage">Not logged in</li><li id="pt-anontalk"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n">Talk</a></li><li id="pt-anoncontribs"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y">Contributions</a></li><li id="pt-createaccount"><a href="/w/index.php?title=Special:CreateAccount&amp;returnto=Special%3ABadtitle%2Frest.php" title="You are encouraged to create an account and log in; however, it is not mandatory">Create account</a></li><li id="pt-login"><a href="/w/index.php?title=Special:UserLogin&amp;returnto=Special%3ABadtitle%2Frest.php" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o">Log in</a></li> </ul>
66 </div>
67 <div id="left-navigation">
68 <div id="p-namespaces" role="navigation" class="vectorTabs" aria-labelledby="p-namespaces-label">
69 <h3 id="p-namespaces-label">Namespaces</h3>
70 <ul>
71 <li id="ca-nstab-special" class="selected"><span><a href="/w/rest.php/dev.wiki.local.wmftest.net/v3/transform/wikitext/to/html" title="This is a special page, and it cannot be edited">Special page</a></span></li> </ul>
72 </div>
73 <div id="p-variants" role="navigation" class="vectorMenu emptyPortlet" aria-labelledby="p-variants-label">
74 <input type="checkbox" class="vectorMenuCheckbox" aria-labelledby="p-variants-label" />
75 <h3 id="p-variants-label">
76 <span>Variants</span>
77 </h3>
78 <ul class="menu">
79 </ul>
80 </div>
81 </div>
82 <div id="right-navigation">
83 <div id="p-views" role="navigation" class="vectorTabs emptyPortlet" aria-labelledby="p-views-label">
84 <h3 id="p-views-label">Views</h3>
85 <ul>
86 </ul>
87 </div>
88 <div id="p-cactions" role="navigation" class="vectorMenu emptyPortlet" aria-labelledby="p-cactions-label">
89 <input type="checkbox" class="vectorMenuCheckbox" aria-labelledby="p-cactions-label" />
90 <h3 id="p-cactions-label"><span>More</span></h3>
91 <ul class="menu">
92 </ul>
93 </div>
94 <div id="p-search" role="search">
95 <h3>
96 <label for="searchInput">Search</label>
97 </h3>
98 <form action="/w/index.php" id="searchform">
99 <div id="simpleSearch">
100 <input type="search" name="search" placeholder="Search devwiki" title="Search devwiki [f]" accesskey="f" id="searchInput"/><input type="hidden" value="Special:Search" name="title"/><input type="submit" name="fulltext" value="Search" title="Search the pages for this text" id="mw-searchButton" class="searchButton mw-fallbackSearchButton"/><input type="submit" name="go" value="Go" title="Go to a page with this exact name if it exists" id="searchButton" class="searchButton"/> </div>
101 </form>
102 </div>
103 </div>
104 </div>
105 <div id="mw-panel">
106 <div id="p-logo" role="banner"><a class="mw-wiki-logo" href="/wiki/Main_Page" title="Visit the main page"></a></div>
107 <div class="portal" role="navigation" id="p-navigation" aria-labelledby="p-navigation-label">
108 <h3 id="p-navigation-label">Navigation</h3>
109 <div class="body">
110 <ul>
111 <li id="n-mainpage-description"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z">Main page</a></li><li id="n-recentchanges"><a href="/wiki/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r">Recent changes</a></li><li id="n-randompage"><a href="/wiki/Special:Random" title="Load a random page [x]" accesskey="x">Random page</a></li><li id="n-help-mediawiki"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents">Help about MediaWiki</a></li> </ul>
112 </div>
113 </div>
114 <div class="portal" role="navigation" id="p-tb" aria-labelledby="p-tb-label">
115 <h3 id="p-tb-label">Tools</h3>
116 <div class="body">
117 <ul>
118 <li id="t-specialpages"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q">Special pages</a></li><li id="t-print"><a href="/w/index.php?title=Special:Badtitle/rest.php&amp;printable=yes" rel="alternate" title="Printable version of this page [p]" accesskey="p">Printable version</a></li> </ul>
119 </div>
120 </div>
121 </div>
122 </div>
123 <div id="footer" role="contentinfo">
124 <ul id="footer-places">
125 <li id="footer-places-privacy"><a href="/wiki/Wiki:Privacy_policy" title="Wiki:Privacy policy">Privacy policy</a></li>
126 <li id="footer-places-about"><a href="/wiki/Wiki:About" title="Wiki:About">About devwiki</a></li>
127 <li id="footer-places-disclaimer"><a href="/wiki/Wiki:General_disclaimer" title="Wiki:General disclaimer">Disclaimers</a></li>
128 <li id="footer-places-mobileview"><a href="http://dev.wiki.local.wmftest.net:11000/w/index.php?title=Special:Badtitle/rest.php&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li>
129 </ul>
130 <ul id="footer-icons" class="noprint">
131 <li id="footer-poweredbyico">
132 <a href="https://www.mediawiki.org/"><img src="/w/resources/assets/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" srcset="/w/resources/assets/poweredby_mediawiki_132x47.png 1.5x, /w/resources/assets/poweredby_mediawiki_176x62.png 2x" width="88" height="31"/></a> </li>
133 </ul>
134 <div style="clear: both;"></div>
135 </div>
136
137<script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"debugInfo":{"mwVersion":"1.34.0-alpha","phpEngine":"PHP","phpVersion":"7.2.16-1+0~20190307202415.17+stretch~1.gbpa7be82+wmf1","gitRevision":"8816dfbf1890d3da9f950e0d09ef87ca6c27c271","gitBranch":"review/gerg_tisza/520066","gitViewUrl":"https://gerrit.wikimedia.org/g/mediawiki/core.git/+/8816dfbf1890d3da9f950e0d09ef87ca6c27c271","time":0.31394004821777344,"log":[{"msg":"MWDebug output complete","type":"log","caller":"MWDebug::getDebugHTML"}],"debugLog":[],"queries":[],"request":{"method":"POST","url":"/w/rest.php/dev.wiki.local.wmftest.net/v3/transform/wikitext/to/html","headers":{"HOST":"dev.wiki.local.wmftest.net:11000","USER-AGENT":"curl/7.58.0","ACCEPT":"*/*","COOKIE":"XDEBUG_SESSION=XDEBUG_ECLIPSE","CONTENT-LENGTH":"54","CONTENT-TYPE":"application/x-www-form-urlencoded"},"params":{"{\"wikitexts\":\"foo_''bar''_'''baz'''\",\"body_only\":true}":"","title":"dev.wiki.local.wmftest.net/v3/transform/wikitext/to/html"}},"memory":"6.34 MB","memoryPeak":"6.76 MB","includes":[{"name":"/var/www/w/rest.php","size":"193 bytes"},{"name":"/var/www/w/dblist.php","size":"368 bytes"},{"name":"/vagrant/settings.d/wikis/dbConf/10-mobilewiki-dbConf.php","size":"243 bytes"},{"name":"/vagrant/settings.d/wikis/dbConf/10-wiki-dbConf.php","size":"226 bytes"},{"name":"/var/www/w/MWMultiVersion.php","size":"8 KB"},{"name":"/var/www/w/defines.php","size":"392 bytes"},{"name":"/vagrant/mediawiki/rest.php","size":"955 bytes"},{"name":"/vagrant/mediawiki/includes/WebStart.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/Setup.php","size":"32 KB"},{"name":"/vagrant/mediawiki/includes/AutoLoader.php","size":"5 KB"},{"name":"/vagrant/mediawiki/autoload.php","size":"130 KB"},{"name":"/vagrant/mediawiki/includes/Defines.php","size":"11 KB"},{"name":"/vagrant/mediawiki/includes/libs/mime/defines.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/defines.php","size":"770 bytes"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/database/IDatabase.php","size":"81 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/loadbalancer/ILoadBalancer.php","size":"26 KB"},{"name":"/vagrant/mediawiki/includes/DefaultSettings.php","size":"291 KB"},{"name":"/vagrant/mediawiki/includes/SiteConfiguration.php","size":"18 KB"},{"name":"/vagrant/mediawiki/includes/WebRequest.php","size":"38 KB"},{"name":"/vagrant/mediawiki/includes/libs/IP.php","size":"22 KB"},{"name":"/vagrant/mediawiki/includes/GlobalFunctions.php","size":"90 KB"},{"name":"/vagrant/mediawiki/vendor/autoload.php","size":"178 bytes"},{"name":"/vagrant/mediawiki/vendor/composer/autoload_real.php","size":"3 KB"},{"name":"/vagrant/mediawiki/vendor/composer/ClassLoader.php","size":"13 KB"},{"name":"/vagrant/mediawiki/vendor/composer/include_paths.php","size":"412 bytes"},{"name":"/vagrant/mediawiki/vendor/composer/autoload_static.php","size":"258 KB"},{"name":"/vagrant/mediawiki/vendor/symfony/polyfill-php73/bootstrap.php","size":"981 bytes"},{"name":"/vagrant/mediawiki/vendor/symfony/polyfill-php73/Php73.php","size":"642 bytes"},{"name":"/vagrant/mediawiki/vendor/symfony/polyfill-php72/bootstrap.php","size":"1 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/at-ease/src/Wikimedia/Functions.php","size":"2 KB"},{"name":"/vagrant/mediawiki/vendor/ralouphie/getallheaders/src/getallheaders.php","size":"2 KB"},{"name":"/vagrant/mediawiki/vendor/symfony/var-dumper/Resources/functions/dump.php","size":"806 bytes"},{"name":"/vagrant/mediawiki/vendor/guzzlehttp/promises/src/functions_include.php","size":"167 bytes"},{"name":"/vagrant/mediawiki/vendor/guzzlehttp/promises/src/functions.php","size":"12 KB"},{"name":"/vagrant/mediawiki/vendor/guzzlehttp/psr7/src/functions_include.php","size":"156 bytes"},{"name":"/vagrant/mediawiki/vendor/guzzlehttp/psr7/src/functions.php","size":"26 KB"},{"name":"/vagrant/mediawiki/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php","size":"396 bytes"},{"name":"/vagrant/mediawiki/vendor/wikimedia/timestamp/src/defines.php","size":"2 KB"},{"name":"/vagrant/mediawiki/vendor/giorgiosironi/eris/src/Generator/functions.php","size":"346 bytes"},{"name":"/vagrant/mediawiki/vendor/guzzlehttp/guzzle/src/functions_include.php","size":"160 bytes"},{"name":"/vagrant/mediawiki/vendor/guzzlehttp/guzzle/src/functions.php","size":"10 KB"},{"name":"/vagrant/mediawiki/vendor/psy/psysh/src/functions.php","size":"12 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/base-convert/src/Functions.php","size":"4 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/relpath/src/RelPath/RelPath.php","size":"2 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/relpath/src/Wikimedia/RelPath.php","size":"4 KB"},{"name":"/vagrant/mediawiki/vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest.php","size":"21 KB"},{"name":"/vagrant/mediawiki/vendor/wmde/hamcrest-html-matchers/src/functions.php","size":"2 KB"},{"name":"/vagrant/mediawiki/vendor/psr/log/Psr/Log/LoggerInterface.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/HeaderCallback.php","size":"2 KB"},{"name":"/vagrant/mediawiki/LocalSettings.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/registration/ExtensionRegistry.php","size":"13 KB"},{"name":"/vagrant/LocalSettings.php","size":"4 KB"},{"name":"/vagrant/settings.d/wikis/CommonSettings.php","size":"3 KB"},{"name":"/vagrant/settings.d/wikis/LoadWgConf.php","size":"2 KB"},{"name":"/vagrant/settings.d/wikis/mobilewiki/wgConf.php","size":"887 bytes"},{"name":"/vagrant/settings.d/wikis/wiki/wgConf.php","size":"806 bytes"},{"name":"/vagrant/settings.d/puppet-managed/01-psr3.php","size":"3 KB"},{"name":"/vagrant/settings.d/puppet-managed/04-parsoid-vrs.php","size":"472 bytes"},{"name":"/vagrant/settings.d/puppet-managed/05-EventBus.php","size":"2 KB"},{"name":"/vagrant/settings.d/puppet-managed/05-EventLogging.php","size":"863 bytes"},{"name":"/vagrant/settings.d/puppet-managed/10-MinervaNeue.php","size":"277 bytes"},{"name":"/vagrant/settings.d/puppet-managed/10-MobileFrontend.php","size":"913 bytes"},{"name":"/vagrant/settings.d/puppet-managed/10-Monolog.php","size":"1 KB"},{"name":"/vagrant/settings.d/puppet-managed/10-PageImages.php","size":"773 bytes"},{"name":"/vagrant/settings.d/puppet-managed/10-SyntaxHighlight_GeSHi.php","size":"883 bytes"},{"name":"/vagrant/settings.d/puppet-managed/10-TextExtracts.php","size":"793 bytes"},{"name":"/vagrant/settings.d/puppet-managed/10-Vector.php","size":"252 bytes"},{"name":"/vagrant/settings.d/10-Debugging.php","size":"306 bytes"},{"name":"/vagrant/settings.d/10-LocalSettings.php","size":"243 bytes"},{"name":"/vagrant/settings.d/10-Parsoid.php","size":"141 bytes"},{"name":"/vagrant/settings.d/wikis/wiki/settings.d/puppet-managed/00-RESTBase-VRS.php","size":"473 bytes"},{"name":"/vagrant/settings.d/wikis/wiki/settings.d/puppet-managed/05-RESTBase-VisualEditor.php","size":"229 bytes"},{"name":"/vagrant/settings.d/wikis/wiki/settings.d/puppet-managed/10-devwiki_suppress_group.php","size":"437 bytes"},{"name":"/vagrant/mediawiki/includes/debug/logger/LoggerFactory.php","size":"3 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/object-factory/src/ObjectFactory.php","size":"9 KB"},{"name":"/vagrant/mediawiki/includes/debug/logger/MonologSpi.php","size":"8 KB"},{"name":"/vagrant/mediawiki/includes/debug/logger/Spi.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/profiler/Profiler.php","size":"8 KB"},{"name":"/vagrant/mediawiki/includes/profiler/ProfilerStub.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/TransactionProfiler.php","size":"11 KB"},{"name":"/vagrant/mediawiki/vendor/psr/log/Psr/Log/LoggerAwareInterface.php","size":"297 bytes"},{"name":"/vagrant/mediawiki/vendor/psr/log/Psr/Log/NullLogger.php","size":"651 bytes"},{"name":"/vagrant/mediawiki/vendor/psr/log/Psr/Log/AbstractLogger.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/shell/Shell.php","size":"7 KB"},{"name":"/vagrant/mediawiki/includes/objectcache/ObjectCache.php","size":"14 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Logger.php","size":"22 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/ResettableInterface.php","size":"943 bytes"},{"name":"/vagrant/mediawiki/includes/debug/logger/monolog/WikiProcessor.php","size":"2 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php","size":"1 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php","size":"521 bytes"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php","size":"604 bytes"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php","size":"1 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php","size":"3 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php","size":"5 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php","size":"1 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php","size":"4 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/debug/logger/monolog/LineFormatter.php","size":"5 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php","size":"5 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php","size":"10 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php","size":"787 bytes"},{"name":"/vagrant/mediawiki/includes/debug/logger/monolog/SyslogHandler.php","size":"3 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php","size":"3 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php","size":"3 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/debug/logger/monolog/LogstashFormatter.php","size":"3 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php","size":"5 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php","size":"2 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/WikiMap.php","size":"10 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/database/domain/DatabaseDomain.php","size":"7 KB"},{"name":"/vagrant/mediawiki/includes/libs/objectcache/APCUBagOStuff.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/libs/objectcache/BagOStuff.php","size":"32 KB"},{"name":"/vagrant/mediawiki/includes/libs/objectcache/IExpiringStore.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/libs/objectcache/serialized/SerializedValueContainer.php","size":"1 KB"},{"name":"/vagrant/mediawiki/extensions/EventBus/vendor/autoload.php","size":"178 bytes"},{"name":"/vagrant/mediawiki/extensions/EventBus/vendor/composer/autoload_real.php","size":"2 KB"},{"name":"/vagrant/mediawiki/extensions/EventBus/vendor/composer/autoload_static.php","size":"31 KB"},{"name":"/vagrant/mediawiki/extensions/EventBus/vendor/symfony/polyfill-mbstring/bootstrap.php","size":"5 KB"},{"name":"/vagrant/srv/parsoid/vendor/autoload.php","size":"178 bytes"},{"name":"/vagrant/srv/parsoid/vendor/composer/autoload_real.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/composer/autoload_static.php","size":"275 KB"},{"name":"/vagrant/srv/parsoid/vendor/symfony/polyfill-ctype/bootstrap.php","size":"1 KB"},{"name":"/vagrant/srv/parsoid/vendor/sabre/event/lib/coroutine.php","size":"4 KB"},{"name":"/vagrant/srv/parsoid/vendor/sabre/event/lib/Loop/functions.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/sabre/event/lib/Promise/functions.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/upload/UploadBase.php","size":"66 KB"},{"name":"/vagrant/mediawiki/includes/language/LanguageCode.php","size":"7 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/at-ease/src/Wikimedia/AtEase/AtEase.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/debug/MWDebug.php","size":"15 KB"},{"name":"/vagrant/mediawiki/includes/MediaWikiServices.php","size":"26 KB"},{"name":"/vagrant/mediawiki/includes/libs/services/ServiceContainer.php","size":"15 KB"},{"name":"/vagrant/mediawiki/vendor/psr/container/src/ContainerInterface.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/libs/services/DestructibleService.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/config/GlobalVarConfig.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/config/Config.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/exception/MWExceptionHandler.php","size":"23 KB"},{"name":"/vagrant/mediawiki/includes/libs/filebackend/fsfile/TempFSFile.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/libs/filebackend/fsfile/FSFile.php","size":"6 KB"},{"name":"/vagrant/mediawiki/includes/context/RequestContext.php","size":"17 KB"},{"name":"/vagrant/mediawiki/includes/context/IContextSource.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/language/MessageLocalizer.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/context/MutableContext.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/lbfactory/LBFactory.php","size":"24 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/lbfactory/ILBFactory.php","size":"14 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/ChronologyProtector.php","size":"13 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/assert/src/Assert.php","size":"7 KB"},{"name":"/vagrant/mediawiki/skins/MinervaNeue/includes/ServiceWiring.php","size":"3 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/ServiceWiring.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/extension/ServiceWiring.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/ServiceWiring.php","size":"26 KB"},{"name":"/vagrant/mediawiki/includes/Hooks.php","size":"8 KB"},{"name":"/vagrant/mediawiki/includes/config/ConfigFactory.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/libs/services/SalvageableService.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/db/MWLBFactory.php","size":"13 KB"},{"name":"/vagrant/mediawiki/includes/config/ServiceOptions.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/ConfiguredReadOnlyMode.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/libs/objectcache/RedisBagOStuff.php","size":"13 KB"},{"name":"/vagrant/mediawiki/includes/deferred/DeferredUpdates.php","size":"15 KB"},{"name":"/vagrant/mediawiki/includes/libs/redis/RedisConnectionPool.php","size":"12 KB"},{"name":"/vagrant/mediawiki/includes/libs/stats/BufferingStatsdDataFactory.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactory.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Factory/StatsdDataFactoryInterface.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/libs/stats/IBufferingStatsdDataFactory.php","size":"933 bytes"},{"name":"/vagrant/mediawiki/includes/libs/objectcache/WANObjectCache.php","size":"100 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/lbfactory/LBFactorySimple.php","size":"4 KB"},{"name":"/vagrant/mediawiki/languages/Language.php","size":"156 KB"},{"name":"/vagrant/mediawiki/includes/title/MediaWikiTitleCodec.php","size":"16 KB"},{"name":"/vagrant/mediawiki/includes/title/TitleFormatter.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/title/TitleParser.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/Title.php","size":"136 KB"},{"name":"/vagrant/mediawiki/includes/linker/LinkTarget.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/dao/IDBAccessObject.php","size":"3 KB"},{"name":"/vagrant/mediawiki/languages/classes/LanguageEn.php","size":"2 KB"},{"name":"/vagrant/mediawiki/languages/LanguageConverter.php","size":"34 KB"},{"name":"/vagrant/mediawiki/languages/FakeConverter.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/cache/localisation/LocalisationCache.php","size":"32 KB"},{"name":"/vagrant/mediawiki/includes/cache/localisation/LCStoreCDB.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/cache/localisation/LCStore.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/PathRouter.php","size":"13 KB"},{"name":"/vagrant/mediawiki/includes/session/PHPSessionHandler.php","size":"10 KB"},{"name":"/vagrant/mediawiki/includes/session/SessionManager.php","size":"28 KB"},{"name":"/vagrant/mediawiki/includes/session/SessionManagerInterface.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/libs/objectcache/CachedBagOStuff.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/libs/objectcache/HashBagOStuff.php","size":"4 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/php-session-serializer/src/Wikimedia/PhpSessionSerializer.php","size":"11 KB"},{"name":"/vagrant/mediawiki/includes/session/CookieSessionProvider.php","size":"13 KB"},{"name":"/vagrant/mediawiki/includes/session/SessionProvider.php","size":"20 KB"},{"name":"/vagrant/mediawiki/includes/session/SessionProviderInterface.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/session/SessionInfo.php","size":"8 KB"},{"name":"/vagrant/mediawiki/includes/session/BotPasswordSessionProvider.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/session/ImmutableSessionProviderWithCookie.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/utils/MWCryptRand.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/libs/redis/RedisConnRef.php","size":"8 KB"},{"name":"/vagrant/mediawiki/includes/session/SessionId.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/session/SessionBackend.php","size":"20 KB"},{"name":"/vagrant/mediawiki/includes/user/User.php","size":"159 KB"},{"name":"/vagrant/mediawiki/includes/user/UserIdentity.php","size":"2 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Utils.php","size":"529 bytes"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/scoped-callback/src/ScopedCallback.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/session/Session.php","size":"19 KB"},{"name":"/vagrant/mediawiki/includes/MWTimestamp.php","size":"6 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/timestamp/src/ConvertibleTimestamp.php","size":"12 KB"},{"name":"/vagrant/mediawiki/includes/WebResponse.php","size":"8 KB"},{"name":"/vagrant/mediawiki/includes/StubUserLang.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/StubObject.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/OutputPage.php","size":"122 KB"},{"name":"/vagrant/mediawiki/includes/context/ContextSource.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderModule.php","size":"31 KB"},{"name":"/vagrant/mediawiki/extensions/EventLogging/includes/EventLoggingHooks.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/Pingback.php","size":"8 KB"},{"name":"/vagrant/mediawiki/includes/deferred/MWCallableUpdate.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/deferred/DeferrableUpdate.php","size":"258 bytes"},{"name":"/vagrant/mediawiki/includes/deferred/DeferrableCallback.php","size":"193 bytes"},{"name":"/vagrant/mediawiki/includes/deferred/TransactionRoundAwareUpdate.php","size":"542 bytes"},{"name":"/vagrant/mediawiki/includes/Rest/EntryPoint.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/libs/IEUrlExtension.php","size":"9 KB"},{"name":"/vagrant/mediawiki/includes/Rest/RequestFromGlobals.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/Rest/RequestBase.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/Rest/RequestInterface.php","size":"8 KB"},{"name":"/vagrant/mediawiki/includes/Rest/Router.php","size":"8 KB"},{"name":"/vagrant/mediawiki/includes/Rest/ResponseFactory.php","size":"8 KB"},{"name":"/vagrant/mediawiki/vendor/guzzlehttp/psr7/src/Uri.php","size":"21 KB"},{"name":"/vagrant/mediawiki/vendor/psr/http-message/src/UriInterface.php","size":"12 KB"},{"name":"/vagrant/mediawiki/includes/Rest/PathTemplateMatcher/PathMatcher.php","size":"6 KB"},{"name":"/vagrant/srv/parsoid/extension/src/Rest/Handler/TransformHandler.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/extension/src/Rest/Handler/ParsoidHandler.php","size":"25 KB"},{"name":"/vagrant/mediawiki/includes/Rest/Handler.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/extension/src/ParsoidServices.php","size":"812 bytes"},{"name":"/vagrant/srv/parsoid/extension/src/Config/SiteConfig.php","size":"19 KB"},{"name":"/vagrant/srv/parsoid/src/Config/SiteConfig.php","size":"23 KB"},{"name":"/vagrant/srv/parsoid/extension/src/Config/PageConfigFactory.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/Revision/RevisionStoreFactory.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/Storage/BlobStoreFactory.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/externalstore/ExternalStoreAccess.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/externalstore/ExternalStoreFactory.php","size":"6 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/loadbalancer/LoadBalancer.php","size":"72 KB"},{"name":"/vagrant/mediawiki/includes/Storage/NameTableStoreFactory.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/Revision/SlotRoleRegistry.php","size":"7 KB"},{"name":"/vagrant/mediawiki/includes/Storage/NameTableStore.php","size":"12 KB"},{"name":"/vagrant/mediawiki/includes/CommentStore.php","size":"23 KB"},{"name":"/vagrant/mediawiki/includes/ActorMigration.php","size":"12 KB"},{"name":"/vagrant/mediawiki/includes/Revision/RevisionStore.php","size":"89 KB"},{"name":"/vagrant/mediawiki/includes/Revision/RevisionFactory.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/Revision/RevisionLookup.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/Storage/SqlBlobStore.php","size":"19 KB"},{"name":"/vagrant/mediawiki/includes/Storage/BlobStore.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/parser/Parser.php","size":"203 KB"},{"name":"/vagrant/mediawiki/includes/parser/ParserFactory.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/MagicWordFactory.php","size":"6 KB"},{"name":"/vagrant/mediawiki/includes/specialpage/SpecialPageFactory.php","size":"23 KB"},{"name":"/vagrant/mediawiki/includes/linker/LinkRendererFactory.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/cache/GenderCache.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/title/NamespaceInfo.php","size":"17 KB"},{"name":"/vagrant/mediawiki/includes/interwiki/ClassicInterwikiLookup.php","size":"11 KB"},{"name":"/vagrant/mediawiki/includes/interwiki/InterwikiLookup.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/libs/MapCacheLRU.php","size":"11 KB"},{"name":"/vagrant/mediawiki/includes/cache/LinkCache.php","size":"9 KB"},{"name":"/vagrant/mediawiki/includes/parser/ParserOptions.php","size":"39 KB"},{"name":"/vagrant/mediawiki/includes/skins/Skin.php","size":"46 KB"},{"name":"/vagrant/mediawiki/includes/skins/SkinFactory.php","size":"3 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/MobileFrontendHooks.php","size":"44 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/amc/Hooks.php","size":"2 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/amc/UserMode.php","size":"2 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/features/IUserMode.php","size":"518 bytes"},{"name":"/vagrant/srv/parsoid/extension/src/Config/DataAccess.php","size":"8 KB"},{"name":"/vagrant/srv/parsoid/src/Config/DataAccess.php","size":"5 KB"},{"name":"/vagrant/mediawiki/vendor/guzzlehttp/psr7/src/LazyOpenStream.php","size":"880 bytes"},{"name":"/vagrant/mediawiki/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php","size":"3 KB"},{"name":"/vagrant/mediawiki/vendor/psr/http-message/src/StreamInterface.php","size":"5 KB"},{"name":"/vagrant/mediawiki/vendor/guzzlehttp/psr7/src/Stream.php","size":"7 KB"},{"name":"/vagrant/srv/parsoid/extension/src/Rest/FormatHelper.php","size":"6 KB"},{"name":"/vagrant/mediawiki/includes/Rest/HeaderContainer.php","size":"6 KB"},{"name":"/vagrant/mediawiki/includes/json/FormatJson.php","size":"11 KB"},{"name":"/vagrant/mediawiki/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php","size":"953 bytes"},{"name":"/vagrant/mediawiki/includes/exception/MWExceptionRenderer.php","size":"10 KB"},{"name":"/vagrant/mediawiki/includes/libs/HttpStatus.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/language/Message.php","size":"38 KB"},{"name":"/vagrant/mediawiki/includes/libs/MessageSpecifier.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/cache/MessageCache.php","size":"45 KB"},{"name":"/vagrant/mediawiki/includes/libs/objectcache/EmptyBagOStuff.php","size":"2 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/cdb/src/Reader.php","size":"2 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/cdb/src/Reader/PHP.php","size":"8 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/cdb/src/Util.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/cache/dependency/FileDependency.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/cache/dependency/CacheDependency.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/cache/dependency/GlobalDependency.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/cache/dependency/MainConfigDependency.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/cache/dependency/ConstantDependency.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/parser/Sanitizer.php","size":"65 KB"},{"name":"/vagrant/mediawiki/includes/parser/MWTidy.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/tidy/RemexDriver.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/tidy/TidyDriverBase.php","size":"508 bytes"},{"name":"/vagrant/mediawiki/includes/parser/RemexStripTagHandler.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/Tokenizer/TokenHandler.php","size":"4 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/Tokenizer/Tokenizer.php","size":"52 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/PropGuard.php","size":"476 bytes"},{"name":"/vagrant/mediawiki/includes/parser/CoreParserFunctions.php","size":"42 KB"},{"name":"/vagrant/mediawiki/includes/MagicWord.php","size":"12 KB"},{"name":"/vagrant/mediawiki/includes/parser/CoreTagHooks.php","size":"6 KB"},{"name":"/vagrant/mediawiki/includes/MagicWordArray.php","size":"8 KB"},{"name":"/vagrant/mediawiki/extensions/SyntaxHighlight_GeSHi/includes/SyntaxHighlight.php","size":"18 KB"},{"name":"/vagrant/mediawiki/includes/parser/ParserOutput.php","size":"42 KB"},{"name":"/vagrant/mediawiki/includes/parser/CacheTime.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/parser/LinkHolderArray.php","size":"18 KB"},{"name":"/vagrant/mediawiki/includes/parser/StripState.php","size":"7 KB"},{"name":"/vagrant/mediawiki/includes/profiler/SectionProfiler.php","size":"14 KB"},{"name":"/vagrant/mediawiki/includes/parser/Preprocessor_Hash.php","size":"25 KB"},{"name":"/vagrant/mediawiki/includes/parser/Preprocessor.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPFrame_Hash.php","size":"16 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPFrame.php","size":"5 KB"},{"name":"/vagrant/mediawiki/extensions/EventLogging/includes/JsonSchemaHooks.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPDStack_Hash.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPDStack.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPDStackElement_Hash.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPDStackElement.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPDPart_Hash.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPDPart.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPNode_Hash_Tree.php","size":"9 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPNode.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPNode_Hash_Array.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/page/Article.php","size":"86 KB"},{"name":"/vagrant/mediawiki/includes/page/Page.php","size":"894 bytes"},{"name":"/vagrant/mediawiki/includes/ContentSecurityPolicy.php","size":"16 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/MobileContext.php","size":"32 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/devices/DeviceDetectorService.php","size":"1 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/devices/DeviceDetector.php","size":"2 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/devices/AMFDeviceDetector.php","size":"828 bytes"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/devices/CustomHeaderDeviceDetector.php","size":"1 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/devices/UADeviceDetector.php","size":"3 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/devices/DeviceProperties.php","size":"2 KB"},{"name":"/vagrant/mediawiki/skins/Vector/includes/SkinVector.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/skins/SkinTemplate.php","size":"47 KB"},{"name":"/vagrant/mediawiki/extensions/PageImages/includes/PageImages.php","size":"6 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/database/Database.php","size":"146 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/database/IMaintainableDatabase.php","size":"11 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/database/DatabaseMysqli.php","size":"7 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/database/DatabaseMysqlBase.php","size":"44 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/database/utils/GeneralizedSql.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/database/DBConnRef.php","size":"23 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/database/resultwrapper/ResultWrapper.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/libs/rdbms/database/resultwrapper/IResultWrapper.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdDataInterface.php","size":"726 bytes"},{"name":"/vagrant/srv/parsoid/vendor/liuggio/statsd-php-client/src/Liuggio/StatsdClient/Entity/StatsdData.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/utfnormal/src/Constants.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/cache/LinkBatch.php","size":"6 KB"},{"name":"/vagrant/mediawiki/includes/title/TitleValue.php","size":"6 KB"},{"name":"/vagrant/mediawiki/skins/Vector/includes/VectorTemplate.php","size":"15 KB"},{"name":"/vagrant/mediawiki/includes/skins/BaseTemplate.php","size":"24 KB"},{"name":"/vagrant/mediawiki/includes/skins/QuickTemplate.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/linker/LinkRenderer.php","size":"12 KB"},{"name":"/vagrant/mediawiki/includes/Permissions/PermissionManager.php","size":"45 KB"},{"name":"/vagrant/mediawiki/includes/Html.php","size":"33 KB"},{"name":"/vagrant/mediawiki/includes/specialpage/SpecialPage.php","size":"26 KB"},{"name":"/vagrant/mediawiki/includes/Linker.php","size":"73 KB"},{"name":"/vagrant/mediawiki/includes/libs/HtmlArmor.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/libs/StringUtils.php","size":"11 KB"},{"name":"/vagrant/mediawiki/includes/parser/PPNode_Hash_Text.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/parser/BlockLevelPass.php","size":"17 KB"},{"name":"/vagrant/mediawiki/includes/tidy/RemexCompatFormatter.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/Serializer/HtmlFormatter.php","size":"6 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/Serializer/Formatter.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/DOM/DOMFormatter.php","size":"452 bytes"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/HTMLData.php","size":"106 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/Serializer/Serializer.php","size":"10 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/Serializer/AbstractSerializer.php","size":"239 bytes"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/TreeHandler.php","size":"7 KB"},{"name":"/vagrant/mediawiki/includes/tidy/RemexCompatMunger.php","size":"16 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/TreeBuilder.php","size":"22 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/ActiveFormattingElements.php","size":"9 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/CachingStack.php","size":"12 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/Stack.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/Dispatcher.php","size":"11 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/TemplateModeStack.php","size":"960 bytes"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/Initial.php","size":"4 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InsertionMode.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/BeforeHtml.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/BeforeHead.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InHead.php","size":"4 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InHeadNoscript.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/AfterHead.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InBody.php","size":"17 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/Text.php","size":"927 bytes"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InTable.php","size":"5 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InTableText.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InCaption.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InColumnGroup.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InTableBody.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InRow.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InCell.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InSelect.php","size":"4 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InSelectInTable.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InTemplate.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/AfterBody.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InFrameset.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/AfterFrameset.php","size":"1 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/AfterAfterBody.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/AfterAfterFrameset.php","size":"1 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InForeignContent.php","size":"6 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InPre.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InTextarea.php","size":"2 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/Serializer/SerializerNode.php","size":"710 bytes"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/Tokenizer/PlainAttributes.php","size":"1 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/Tokenizer/Attributes.php","size":"972 bytes"},{"name":"/vagrant/mediawiki/includes/tidy/RemexMungerData.php","size":"3 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/Element.php","size":"5 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/FormattingElement.php","size":"157 bytes"},{"name":"/vagrant/mediawiki/includes/actions/Action.php","size":"12 KB"},{"name":"/vagrant/mediawiki/includes/auth/AuthManager.php","size":"84 KB"},{"name":"/vagrant/mediawiki/includes/auth/TemporaryPasswordPrimaryAuthenticationProvider.php","size":"14 KB"},{"name":"/vagrant/mediawiki/includes/auth/AbstractPasswordPrimaryAuthenticationProvider.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/auth/AbstractPrimaryAuthenticationProvider.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/auth/AbstractAuthenticationProvider.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/auth/AuthenticationProvider.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/auth/PrimaryAuthenticationProvider.php","size":"17 KB"},{"name":"/vagrant/mediawiki/includes/auth/LocalPasswordPrimaryAuthenticationProvider.php","size":"10 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoader.php","size":"56 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderContext.php","size":"11 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderStartUpModule.php","size":"16 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/MessageBlobStore.php","size":"7 KB"},{"name":"/vagrant/mediawiki/resources/Resources.php","size":"96 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderSiteModule.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderWikiModule.php","size":"17 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderSiteStylesModule.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderUserModule.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderUserStylesModule.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderUserDefaultsModule.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderUserOptionsModule.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderUserTokensModule.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderSkinModule.php","size":"7 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderFileModule.php","size":"40 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderLessVarFileModule.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderFilePath.php","size":"2 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderForeignApiModule.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderLanguageDataModule.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderOOUIFileModule.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderOOUIModule.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderOOUIIconPackModule.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderOOUIImageModule.php","size":"5 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderImageModule.php","size":"15 KB"},{"name":"/vagrant/mediawiki/skins/Vector/includes/ResourceLoaderLessModule.php","size":"2 KB"},{"name":"/vagrant/mediawiki/skins/MinervaNeue/includes/ResourceLoaderLessVarFileModule.php","size":"1 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/modules/ResourceLoaderFileModuleWithMFConfig.php","size":"742 bytes"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/modules/MobileMainPageStyleModule.php","size":"1 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/modules/MobileSiteModule.php","size":"995 bytes"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/modules/MobileSiteStylesModule.php","size":"928 bytes"},{"name":"/vagrant/mediawiki/skins/MinervaNeue/includes/MinervaHooks.php","size":"9 KB"},{"name":"/vagrant/mediawiki/tests/qunit/QUnitTestResources.php","size":"6 KB"},{"name":"/vagrant/mediawiki/includes/FauxRequest.php","size":"6 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/ResourceLoaderClientHtml.php","size":"14 KB"},{"name":"/vagrant/mediawiki/includes/content/ContentHandler.php","size":"47 KB"},{"name":"/vagrant/mediawiki/includes/Revision/MainSlotRoleHandler.php","size":"4 KB"},{"name":"/vagrant/mediawiki/includes/Revision/SlotRoleHandler.php","size":"5 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/amc/Manager.php","size":"2 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/features/UserModes.php","size":"977 bytes"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/features/StableUserMode.php","size":"1 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/features/IFeature.php","size":"1 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/features/BetaUserMode.php","size":"1 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/features/FeaturesManager.php","size":"4 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/features/Feature.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/resourceloader/DerivativeResourceLoaderContext.php","size":"5 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/wrappedstring/src/WrappedString.php","size":"4 KB"},{"name":"/vagrant/mediawiki/vendor/wikimedia/wrappedstring/src/WrappedStringList.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/libs/JavaScriptMinifier.php","size":"28 KB"},{"name":"/vagrant/mediawiki/includes/Xml.php","size":"26 KB"},{"name":"/vagrant/mediawiki/includes/user/LoggedOutEditToken.php","size":"1 KB"},{"name":"/vagrant/mediawiki/includes/session/Token.php","size":"3 KB"},{"name":"/vagrant/mediawiki/includes/XmlJsCode.php","size":"2 KB"},{"name":"/vagrant/mediawiki/extensions/MobileFrontend/includes/MobileFrontendSkinHooks.php","size":"10 KB"},{"name":"/vagrant/mediawiki/includes/GitInfo.php","size":"11 KB"},{"name":"/vagrant/srv/parsoid/vendor/wikimedia/utfnormal/src/Validator.php","size":"22 KB"}]}});mw.config.set({"wgBackendResponseTime":302});});</script>
138</body>
139</html>

It's a big difference in DX, given that people will test POST requests with curl (at least until we have some sort of sandbox included in the API framework).

  • (?) allows use of the Promise-Non-Write-API-Action header (WebStart.php)

Probably a question for Performance-Team, that's something Aaron added for the cross-DC stuff. See rMWcbdb16da1d86: Add header to flag API POST requests with no write intentions.

  • (needed if we want a REST login API, harmless otherwise) suppress some messaging / special handling during certain logins that would not make sense / would be hard to implement in the API (CentralAuthPrimaryAuthenticationProvider::beginPrimaryAuthentication, ConfirmAccountPreAuthenticationProvider::testForAccountCreation)

The CentralAuth thing would be reasonably harmless. It's there to prevent deprecated uses of action=login from breaking on SUL-renamed users. Presumably a new REST login API wouldn't have that.

ConfirmAccount doesn't seem too difficult to fix, it's just checking WebRequest directly instead of using an AuthenticationRequest for its parameter. Probably no one bothered because the use case for that code path is "You clicked a link in an email we sent you to create your account" and a link in an email isn't going to go to the API.

  • (needed) marking the action as originating from the API in various logs/stats (CirrusSearch\Util::getExecutionContext, AuthManagerStatsdHandler::getEntryPoint, WikimediaEventsHooks::onPageContentSaveComplete, CampaignsSecondaryAuthenticationProvider::beginSecondaryAccountCreation)
  • (unwanted) hacky way of identifying (along with looking at $_GET['action']) when we are in a specific API module (WikimediaEventsHooks::onUserSaveOptions)
  • (needed) identifying human actions for analytics or similar purposes (WikimediaEventsHooks::onRecentChangeSaveCrossWikiUpload, WikimediaEventsHooks::onRecentChangeSaveEditCampaign, WikipediaAppCounter::isWikipediaAppMwApiRequest)

eew.

  • (probably needed) dirty parser hacks, see T111346#1642128 (HtmlPageLinkRendererBeginHookHandler::doHtmlPageLinkRendererBegin)

Also eew. Ideally that code shouldn't be using $wgTitle or the like in the first place. I haven't checked to see what it's actually trying to do though.

Anomie assigned this task to tstarling.

That needs to be handled somehow, maybe by splitting it into MW_ACTION_API and MW_REST_API.

Appears to have been taken care of by rMWb7ce7aacb0fb: Add MW_REST_API and MW_ENTRY_POINT adding MW_REST_API, and also MW_ENTRY_POINT. The Action API continues to use MW_API for historical reasons. I'm going to mark this resolved since the ask was taken care of.

Any use cases that need treatment for the REST API can be handled using one of the added constants, as for example rEOAUb64cecda8588: Make OAuth work with the REST API. If necessary, separate tasks should be filed for them.