Page MenuHomePhabricator

Integrate MW_API with MediaWiki REST API framework
Open, Needs TriagePublic

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 created this task.Jul 2 2019, 9:26 AM
Restricted Application added a subscriber: Aklapper. · View Herald TranscriptJul 2 2019, 9:26 AM
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
Tgr added a comment.Jul 2 2019, 9:29 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).

Tgr updated the task description. (Show Details)Jul 3 2019, 2:57 PM
Anomie added a subscriber: Anomie.Jul 8 2019, 3:49 PM
  • (?) 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.