Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F1431756
ipRevealUtils.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
ipRevealUtils.js
View Options
/**
* Gets the revealed status key for a user.
*
* @param {string} user The username of the temporary account.
* @return {string}
*/
function
getRevealedStatusKey
(
user
)
{
return
'mw-checkuser-temp-'
+
user
;
}
/**
* Gets the revealed status of a user.
*
* @param {string} user The username of the temporary account to check.
* @return {null|true} The revealed status of the user (null if not revealed, true if revealed).
*/
function
getRevealedStatus
(
user
)
{
return
mw
.
storage
.
get
(
getRevealedStatusKey
(
user
)
);
}
/**
* Update the revealed status of a user to indicate that the user has been revealed.
*
* @param {string} user The username of the temporary account that has had its IPs revealed.
*/
function
setRevealedStatus
(
user
)
{
if
(
!
getRevealedStatus
(
getRevealedStatusKey
(
user
)
)
)
{
mw
.
storage
.
set
(
getRevealedStatusKey
(
user
),
true
,
mw
.
config
.
get
(
'wgCheckUserTemporaryAccountMaxAge'
)
);
}
}
/**
* Get the name of the auto-reveal status global preference.
*
* @return {string}
*/
function
getAutoRevealStatusPreferenceName
()
{
return
'checkuser-temporary-account-enable-auto-reveal'
;
}
/**
* Get the auto-reveal status from the global preference.
*
* @return {Promise}
*/
function
getAutoRevealStatus
()
{
const
deferred
=
$
.
Deferred
();
if
(
mw
.
config
.
get
(
'wgCheckUserTemporaryAccountAutoRevealAllowed'
)
)
{
const
api
=
new
mw
.
Api
();
api
.
get
(
{
action
:
'query'
,
meta
:
'globalpreferences'
,
gprprop
:
'preferences'
}
).
then
(
(
response
)
=>
{
let
preferences
;
try
{
preferences
=
response
.
query
.
globalpreferences
.
preferences
;
}
catch
(
e
)
{
preferences
=
{};
}
if
(
!
Object
.
prototype
.
hasOwnProperty
.
call
(
preferences
,
getAutoRevealStatusPreferenceName
()
)
)
{
deferred
.
resolve
(
false
);
return
;
}
const
autoRevealPreference
=
preferences
[
getAutoRevealStatusPreferenceName
()
]
||
0
;
const
expiry
=
Number
(
autoRevealPreference
);
if
(
expiry
>
(
Date
.
now
()
/
1000
)
)
{
deferred
.
resolve
(
expiry
);
}
else
{
// The expiry time has passed, so remove the row from the database table
setAutoRevealStatus
().
then
(
()
=>
deferred
.
resolve
(
false
),
()
=>
deferred
.
resolve
(
false
)
);
}
}
).
catch
(
()
=>
{
deferred
.
resolve
(
false
);
}
);
}
else
{
deferred
.
resolve
(
false
);
}
return
deferred
.
promise
();
}
/**
* Update the auto-reveal status of a user to switch on, switch off, or extend expiry.
*
* The value stored is the Unix timestamp of the expiry, in seconds. Auto-reveal is only supported
* if the GlobalPreferences extension is available, because the expiry is saved as a global
* preference so that the mode can be remembered across sites.
*
* @param {number|undefined} relativeExpiry Number of seconds the "on" mode should be enabled,
* or no argument to disable the mode.
* @return {Promise}
*/
function
setAutoRevealStatus
(
relativeExpiry
)
{
const
nowInSeconds
=
Math
.
round
(
Date
.
now
()
/
1000
);
const
oneDayInSeconds
=
86400
;
const
absoluteExpiry
=
relativeExpiry
?
nowInSeconds
+
relativeExpiry
:
undefined
;
if
(
absoluteExpiry
>
nowInSeconds
+
oneDayInSeconds
)
{
return
$
.
Deferred
().
reject
().
promise
();
}
const
api
=
new
mw
.
Api
();
return
api
.
postWithToken
(
'csrf'
,
{
action
:
'globalpreferences'
,
optionname
:
getAutoRevealStatusPreferenceName
(),
optionvalue
:
absoluteExpiry
}
);
}
module
.
exports
=
{
getRevealedStatus
:
getRevealedStatus
,
setRevealedStatus
:
setRevealedStatus
,
getAutoRevealStatus
:
getAutoRevealStatus
,
setAutoRevealStatus
:
setAutoRevealStatus
};
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, May 16, 21:02 (1 d, 15 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
81/f5/e9d211f18784414d17722a965c6e
Default Alt Text
ipRevealUtils.js (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment