Why: - The REST API takes an optional renderid param when converting HTML back to source wikitext, which is user-provided and may be invalid. - Invalid render IDs cause an InvalidArgumentException to be thrown that causes a 500 response. What: - Introduce a new error message for invalid render IDs in the REST API. - Return a 400 with this new error message for HTML reverse-parses with an invalid render ID. Bug: T385568 Change-Id: I062419fe8952329a39781a49cdca2e94c3996447 (cherry picked from commit cd1d42a5066e4bcb9b9d4ed9b4f7714fd428fea3)
91 lines
6.6 KiB
JSON
91 lines
6.6 KiB
JSON
{
|
|
"@metadata": {
|
|
"authors": [
|
|
"Bill Pirkle",
|
|
"Tim Starling"
|
|
]
|
|
},
|
|
"rest-prefix-mismatch": "The requested path ($1) was not inside the REST API base path ($2)",
|
|
"rest-bad-prefix": "The endpoint path ($1) does not contain a valid module prefix",
|
|
"rest-wrong-method": "The request method ($1) was not {{PLURAL:$3|the allowed method for this path|one of the allowed methods for this path}} ($2)",
|
|
"rest-no-match": "The requested relative path ($1) did not match any known handler",
|
|
"rest-unknown-module": "The requested module name ($1) is not known",
|
|
"rest-nonexistent-title": "The specified page ($1) does not exist",
|
|
"rest-nonexistent-title-revision": "The specified revision ($1) does not exist for the specified page ($2)",
|
|
"rest-nonexistent-revision": "The specified revision ($1) does not exist",
|
|
"rest-nonexistent-user": "The specified user ($1) does not exist",
|
|
"rest-invalid-user": "The specified username ($1) is invalid",
|
|
"rest-invalid-ip": "The specified IP ($1) is invalid",
|
|
"rest-invalid-title": "The specified title ($1) does not refer to a wiki page.",
|
|
"rest-unsupported-content-type": "Unsupported Content-Type: $1",
|
|
"rest-permission-error": "Permission denied: $1",
|
|
"rest-permission-denied-anon": "Not accessible by anonymous user",
|
|
"rest-permission-denied-title": "The user does not have rights to read title ($1)",
|
|
"rest-permission-denied-revision": "User doesn't have access to the requested revision ($1).",
|
|
"rest-rate-limit-exceeded": "A rate limit was exceeded. Please try again later.",
|
|
"rest-resource-limit-exceeded": "Resources limits exceeded processing the request.",
|
|
"rest-pagehistory-incompatible-params": "Parameters \"older_than\" and \"newer_than\" cannot both be specified",
|
|
"rest-pagehistory-param-range-error": "Revision id must be greater than 0",
|
|
"rest-pagehistory-timestamp-error": "Unable to retrieve timestamp for the specified revision ($1)",
|
|
"rest-pagehistorycount-type-unrecognized": "The specified count type ($1) is not valid",
|
|
"rest-pagehistorycount-parameters-invalid": "The specified combination of parameters is not supported.",
|
|
"rest-compare-page-mismatch": "The specified revisions belong to different pages; refusing to compare them.",
|
|
"rest-compare-permission-denied": "User doesn't have access to the requested revisions",
|
|
"rest-compare-nonexistent": "The revision specified by the $1 parameter does not exist.",
|
|
"rest-compare-inaccessible": "The revision specified by the $1 parameter is not publicly accessible.",
|
|
"rest-compare-wrong-content": "The $1 slot of the revision specified by the $2 parameter has a content type which cannot be converted to text.",
|
|
"rest-compare-wikidiff2": "This endpoint requires wikidiff2 1.9.0 or later.",
|
|
"rest-pagehistorycount-too-many-revisions": "The specified title contains too many revisions to retrieve this count.",
|
|
"rest-search-error": "Error when returning search results: $1",
|
|
"rest-page-source-type-error": "The content type of the page source requested is unsupported",
|
|
"rest-no-revision": "Unable to retrieve revision for title $1",
|
|
"rest-media-too-many-links": "Too many media links found on title $1 ($2 allowed)",
|
|
"rest-html-backend-error": "Unable to fetch Parsoid HTML: $1",
|
|
"rest-html-stash-failure": "Unable to stash Parsoid HTML.",
|
|
"rest-bad-json-body": "Bad request body, must be a JSON object.",
|
|
"rest-json-body-parse-error": "Parsing request body as JSON failed: $1",
|
|
"rest-missing-body-field": "Mandatory field \"$1\" missing from request body.",
|
|
"rest-body-validation-error": "Invalid request body: $1",
|
|
"rest-extraneous-body-fields": "Extraneous fields found in request body: $1",
|
|
"rest-bad-content-model": "Bad content model: $1",
|
|
"rest-update-cannot-create-page": "The page \"$1\" cannot be created since it already exists. To update the existing page, provide the base revision ID in the structure under \"latest\" key in the request body.",
|
|
"rest-extraneous-csrf-token": "Extraneous CSRF token found. CSRF tokens must not be used when using authentication mechanisms such as OAuth that are safe against CSRF attacks.",
|
|
"rest-cannot-load-file": "The file for title \"$1\" cannot be loaded.",
|
|
"rest-cross-origin-anon-write": "Anonymous cross-origin write requests are not allowed",
|
|
"rest-requires-safe-against-csrf": "This endpoint requires a CSRF-safe session provider.",
|
|
"rest-badtoken": "The CSRF token provided is invalid.",
|
|
"rest-badtoken-missing": "The <var>token</var> parameter is required unless using a CSRF-safe authentication method.",
|
|
"rest-badtoken-nosession": "CSRF error - no session.",
|
|
"rest-mock-error": "Mock error.",
|
|
"rest-specified-revision-unavailable": "The specified revision is deleted or suppressed.",
|
|
"rest-previous-revision-unavailable": "Could not find previous revision. Has the page been locked or deleted?",
|
|
"rest-requires-content-type-header": "A Content-Type header must be supplied with a request payload.",
|
|
"rest-transform-missing-html": "No html was supplied.",
|
|
"rest-transform-missing-title": "No title or wikitext was provided.",
|
|
"rest-unsupported-target-format": "The requested target format is not supported.",
|
|
"rest-parsoid-resource-exceeded": "Resource limit exceeded",
|
|
"rest-parsoid-error": "Parsoid error.",
|
|
"rest-parsoid-bad-render-id": "Bad Parsoid render ID: $1",
|
|
"rest-bad-stash-key": "Bad stash key.",
|
|
"rest-html-key-expected": "Expected <var>html</var> key in body",
|
|
"rest-invalid-transform": "Invalid transform: $1 to $2",
|
|
"rest-request-body-expected": "The $1 request method expects a request body",
|
|
"rest-request-body-unaccepted": "The $1 request method does not accept a request body",
|
|
"rest-unmapped-action-error": "Unmapped action module error: $1",
|
|
"rest-unsupported-transform-input": "Unsupported input: $1",
|
|
"rest-bad-etag": "Bad ETag: $1",
|
|
"rest-no-stashed-content": "No stashed content found for $1",
|
|
"rest-unsupported-profile-version": "Unsupported profile version: $1",
|
|
"rest-no-json-decode": "Payload does not JSON decode to an array",
|
|
"rest-parsoid-unsupported-media": "Unsupported Media Type",
|
|
"rest-missing-revision-html": "Missing revision html",
|
|
"rest-missing-revision-html-content-type": "Content-type of revision html is missing.",
|
|
"rest-unsupported-profile-conversion": "We do not know how to do this conversion.",
|
|
"rest-edit-conflict": "Edit conflict ($1)",
|
|
"rest-unknown-parsoid-transformation": "Unknown transformation.",
|
|
"rest-target-variant-required": "Target variant is required.",
|
|
"rest-unsupported-language-conversion": "Unsupported language conversion: $1 to $2",
|
|
"rest-unknown-content-model": "Unknown content model: $1",
|
|
"rest-page-bundle-validation-error": "PageBundle does not match contentVersion: $1",
|
|
"rest-param-desc-revision-id": "Revision id"
|
|
}
|