https://bugzilla.wikimedia.org/show_bug.cgi?id=64822

            Bug ID: 64822
           Summary: ve.ui.MWMediaSearchWidget.js: JSONP does not work on
                    local private wikis
           Product: VisualEditor
           Version: unspecified
          Hardware: All
                OS: All
            Status: UNCONFIRMED
          Severity: normal
          Priority: Unprioritized
         Component: Editing Tools
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected], [email protected],
                    [email protected], [email protected],
                    [email protected]
       Web browser: ---
   Mobile Platform: ---

Tested on MW 1.22.6 with stable snapshot of VisualEditor, but looking at the
master branches I'm quite sure that this still applies.

Steps to reproduce
==================

1. Set wiki to have read access only for users:

   $wgGroupPermissions['*']['read'] = false;
   $wgGroupPermissions['user']['read'] = true;

   Note that if testing on local environment, you will have to first open VE
with the 'Edit' button, so that Parsoid is not locked out by this
configuration.

2. Open the 'Media' button in the VE toolbar and search for something.
3. The AJAX request will return 'readapidenied', because it won't recognise the
user credentials.


Cause
=====

ve.ui.MWMediaSearchWidget.js makes a JSONP request to the localhost. However,
MediaWiki's ApiMain.php:180
(https://git.wikimedia.org/blob/mediawiki%2Fcore.git/9db61c9ab58b11b639a1f95916b37b57530ec674/includes%2Fapi%2FApiMain.php#L180)
will remove user credentials from JSONP requests for security reasons.
Therefore, the user is treated as not being logged in and the 'readapidenied'
message is returned.



Solution
========

There is already a TODO here from Trevor Parschal bf268e82:

    // TODO: Only use JSON-P for cross-domain.
    // jQuery has this logic built-in (if url is not same-origin ..)
    // but isn't working for some reason.

However, I can't see anything in the jQuery $.ajax docs that says it will
switch from JSONP to JSON for same-origin requests.

So if it's not automatic, the obvious fix is to add a function that checks for
same-origin in the Javascript. But since this issue is hard to debug and may
occur again for other extension developers, I think it would be better to patch
the MW core so that it only strips user credentials for cross-origin JSONP
requests ApiMain.php:180. 

I didn't want to make a patch for this without checking about the security
implications, and also to ask if there is an existing utility function in
MediaWiki which checks if a request is same-origin?  


Workaround
==========

If you are only searching the private wiki and no external sources, a temporary
workaround is to change "'datatype': 'jsonp'" to "'datatype': 'json'"  in
ve.ui.MWMediaSearchWidget.js

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
Wikibugs-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikibugs-l

Reply via email to