Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

User:Justarandomamerican/globalUserLock.js: Difference between revisions

From WikiOasis Meta
Undo revision 4633 by Justarandomamerican (talk)
Tag: Undo
Me attempting to get a Claude script to work
Line 627: Line 627:
// ── API helpers ────────────────────────────────────────────────────────────
// ── API helpers ────────────────────────────────────────────────────────────


function getCsrfToken() {
function getSetGlobalAccountStatusToken() {
return $.ajax( {
return $.ajax( {
url:  API_ENDPOINT,
url:  API_ENDPOINT,
data: { action: 'query', meta: 'tokens', type: 'csrf', format: 'json' }
data: { action: 'query', meta: 'tokens', type: 'setglobalaccountstatus', format: 'json' }
} ).then( function ( data ) {
} ).then( function ( data ) {
return data.query.tokens.csrftoken;
return data.query.tokens.setglobalaccountstatustoken;
} );
} );
}
}
Line 705: Line 705:
/**
/**
* Lock a single global account via the CentralAuth API.
* Lock a single global account via the CentralAuth API.
* Uses action=setglobalaccountstatus per Extension:CentralAuth/API.
*
* @param {string}  username
* @param {string}  token    setglobalaccountstatus token
* @param {string}  reason
* @param {boolean} hide      Apply "lists" (hidden from global user list) flag
* @param {boolean} suppress  Apply "suppressed" flag (overrides hide)
*/
*/
function lockAccount( username, token, reason, hide, suppress ) {
function lockAccount( username, token, reason, hide, suppress ) {
const states = { locked: 'lock' };
// hidden param: '' = not hidden, 'lists' = hidden from list, 'suppressed' = suppressed
let hidden = '';
if ( suppress ) {
if ( suppress ) {
states.hidden = 'suppress';
hidden = 'suppressed';
} else if ( hide ) {
} else if ( hide ) {
states.hidden = 'hide';
hidden = 'lists';
}
}
const statechange = Object.entries( states )
.map( function ( pair ) { return pair[ 0 ] + '=' + pair[ 1 ]; } )
.join( '|' );


return $.ajax( {
return $.ajax( {
Line 722: Line 726:
method: 'POST',
method: 'POST',
data: {
data: {
action:     'centralauth',
action: 'setglobalaccountstatus',
user:       username,
user:   username,
reason:     reason,
locked: 'lock',
statechange: statechange,
hidden: hidden,
token:       token,
reason: reason,
format:     'json'
token: token,
format: 'json'
}
}
} );
} );
Line 868: Line 873:
$( '#gul-progress' ).addClass( 'visible' );
$( '#gul-progress' ).addClass( 'visible' );
setProgress( 0, selected.length );
setProgress( 0, selected.length );
setStatus( 'Fetching CSRF token…', 'info' );
setStatus( 'Fetching token…', 'info' );


getCsrfToken()
getSetGlobalAccountStatusToken()
.then( function ( token ) {
.then( function ( token ) {
setStatus( 'Locking ' + selected.length + ' account(s)…', 'info' );
setStatus( 'Locking ' + selected.length + ' account(s)…', 'info' );
Line 916: Line 921:
setBadge( username, 'failed',
setBadge( username, 'failed',
'Error: ' + mw.html.escape( data.error.info || data.error.code ) );
'Error: ' + mw.html.escape( data.error.info || data.error.code ) );
} else if ( data.setglobalaccountstatus ) {
locked++;
setBadge( username, 'locked', 'Locked ✓' );
} else {
} else {
// Unexpected response shape — treat as success if no error key
locked++;
locked++;
setBadge( username, 'locked', 'Locked ✓' );
setBadge( username, 'locked', 'Locked ✓' );
Line 938: Line 947:
.fail( function () {
.fail( function () {
setStatus(
setStatus(
'Failed to obtain CSRF token. Are you logged in with sufficient rights?',
'Failed to obtain token. Are you logged in with the centralauth-lock right?',
'error'
'error'
);
);
Cookies help us deliver our services. By using our services, you agree to our use of cookies.