Clean up param handling in ApiStashEdit
authorAryeh Gregor <ayg@aryeh.name>
Mon, 6 Aug 2018 16:53:45 +0000 (19:53 +0300)
committerAaron Schulz <aschulz@wikimedia.org>
Mon, 6 Aug 2018 19:04:43 +0000 (19:04 +0000)
It doesn't make sense to submit both stashedtexthash and text, so
requireOnlyOneParameter() is correct.  This simplifies the code and
gives a more helpful error message. (Previously if both parameters were
passed, we would ignore text unless stashedtexthash was empty, in which
case we would ignore it.)

Change-Id: I306b15eefb6fd4379a3eed88d84113c2e43c4a95

includes/api/ApiStashEdit.php

index 23163c2..bf956dc 100644 (file)
@@ -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( [ '<var>stashedtexthash</var>', '<var>text</var>' ] ),
-                               2,
-                       ], 'missingparam' );
                }
 
                $textContent = ContentHandler::makeContent(