X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiStashEdit.php;h=ab9ae8e4e1d8bd4489086eb2751a2bdfba33dc84;hb=ab94b635267bb6b2be253cb27c840b6a56fcd080;hp=23163c2489d998b86be8e112c859f9e6be07d65c;hpb=30ec9d51c6c17cd47f25cc74a0517878ed18df10;p=lhc%2Fweb%2Fwiklou.git
diff --git a/includes/api/ApiStashEdit.php b/includes/api/ApiStashEdit.php
index 23163c2489..ab9ae8e4e1 100644
--- a/includes/api/ApiStashEdit.php
+++ b/includes/api/ApiStashEdit.php
@@ -67,11 +67,11 @@ class ApiStashEdit extends ApiBase {
);
}
- $this->requireAtLeastOneParameter( $params, 'stashedtexthash', 'text' );
+ $this->requireOnlyOneParameter( $params, 'stashedtexthash', 'text' );
$text = null;
$textHash = null;
- if ( strlen( $params['stashedtexthash'] ) ) {
+ if ( $params['stashedtexthash'] !== null ) {
// Load from cache since the client indicates the text is the same as last stash
$textHash = $params['stashedtexthash'];
if ( !preg_match( '/^[0-9a-f]{40}$/', $textHash ) ) {
@@ -82,16 +82,11 @@ class ApiStashEdit extends ApiBase {
if ( !is_string( $text ) ) {
$this->dieWithError( 'apierror-stashedit-missingtext', 'missingtext' );
}
- } elseif ( $params['text'] !== null ) {
- // Trim and fix newlines so the key SHA1's match (see WebRequest::getText())
+ } else {
+ // 'text' was passed. Trim and fix newlines so the key SHA1's
+ // match (see WebRequest::getText())
$text = rtrim( str_replace( "\r\n", "\n", $params['text'] ) );
$textHash = sha1( $text );
- } else {
- $this->dieWithError( [
- 'apierror-missingparam-at-least-one-of',
- Message::listParam( [ 'stashedtexthash', 'text' ] ),
- 2,
- ], 'missingparam' );
}
$textContent = ContentHandler::makeContent(
@@ -156,14 +151,13 @@ class ApiStashEdit extends ApiBase {
$stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
$stats->increment( "editstash.cache_stores.$status" );
- $this->getResult()->addValue(
- null,
- $this->getModuleName(),
- [
- 'status' => $status,
- 'texthash' => $textHash
- ]
- );
+ $ret = [ 'status' => $status ];
+ // If we were rate-limited, we still return the pre-existing valid hash if one was passed
+ if ( $status !== 'ratelimited' || $params['stashedtexthash'] !== null ) {
+ $ret['texthash'] = $textHash;
+ }
+
+ $this->getResult()->addValue( null, $this->getModuleName(), $ret );
}
/**
@@ -240,6 +234,7 @@ class ApiStashEdit extends ApiBase {
return self::ERROR_CACHE;
}
} else {
+ // @todo Doesn't seem reachable, see @todo in buildStashValue
$logger->info( "Uncacheable parser output for key '{cachekey}' ('{title}') [{code}].",
[ 'cachekey' => $key, 'title' => $titleStr, 'code' => $code ] );
return self::ERROR_UNCACHEABLE;
@@ -407,7 +402,7 @@ class ApiStashEdit extends ApiBase {
) {
// If an item is renewed, mind the cache TTL determined by config and parser functions.
// Put an upper limit on the TTL for sanity to avoid extreme template/file staleness.
- $since = time() - wfTimestamp( TS_UNIX, $parserOutput->getTimestamp() );
+ $since = time() - wfTimestamp( TS_UNIX, $parserOutput->getCacheTime() );
$ttl = min( $parserOutput->getCacheExpiry() - $since, self::MAX_CACHE_TTL );
// Avoid extremely stale user signature timestamps (T84843)
@@ -416,6 +411,9 @@ class ApiStashEdit extends ApiBase {
}
if ( $ttl <= 0 ) {
+ // @todo It doesn't seem like this can occur, because it would mean an entry older than
+ // getCacheExpiry() seconds, which is much longer than PRESUME_FRESH_TTL_SEC, and
+ // anything older than PRESUME_FRESH_TTL_SEC will have been thrown out already.
return [ null, 0, 'no_ttl' ];
}