jenkins-bot has submitted this change and it was merged.

Change subject: mediawiki.user: Simplify mw.user.generateRandomSessionId
......................................................................


mediawiki.user: Simplify mw.user.generateRandomSessionId

* Remove lookup table for hex strings.
* Convert 32 bit instead of 8 bit to hex at once.

Change-Id: I6e6ac9e0813c4ba540e0a53b8e6667162cb60bf7
---
M resources/src/mediawiki/mediawiki.user.js
1 file changed, 16 insertions(+), 28 deletions(-)

Approvals:
  Krinkle: Looks good to me, approved
  Nuria: Looks good to me, but someone else must approve
  jenkins-bot: Verified



diff --git a/resources/src/mediawiki/mediawiki.user.js 
b/resources/src/mediawiki/mediawiki.user.js
index 240d1bd..c4c91f9 100644
--- a/resources/src/mediawiki/mediawiki.user.js
+++ b/resources/src/mediawiki/mediawiki.user.js
@@ -2,11 +2,9 @@
  * @class mw.user
  * @singleton
  */
-/* global Uint8Array */
+/* global Uint32Array */
 ( function ( mw, $ ) {
-       var i,
-               userInfoPromise,
-               byteToHex = [];
+       var userInfoPromise;
 
        /**
         * Get the current user's groups or rights
@@ -19,12 +17,6 @@
                        userInfoPromise = new mw.Api().getUserInfo();
                }
                return userInfoPromise;
-       }
-
-       // Map from numbers 0-255 to a hex string (with padding)
-       for ( i = 0; i < 256; i++ ) {
-               // Padding: Add a full byte (0x100, 256) and strip the extra 
character
-               byteToHex[ i ] = ( i + 256 ).toString( 16 ).slice( 1 );
        }
 
        // mw.user with the properties options and tokens gets defined in 
mediawiki.js.
@@ -51,36 +43,32 @@
                 * @return {string} 64 bit integer in hex format, padded
                 */
                generateRandomSessionId: function () {
-                       /* eslint-disable no-bitwise */
-                       var rnds, i, r,
-                               hexRnds = new Array( 8 ),
+                       var rnds, i,
+                               hexRnds = new Array( 2 ),
                                // Support: IE 11
                                crypto = window.crypto || window.msCrypto;
 
-                       // Based on 
https://github.com/broofa/node-uuid/blob/bfd9f96127/uuid.js
                        if ( crypto && crypto.getRandomValues ) {
-                               // Fill an array with 8 random values, each of 
which is 8 bits.
-                               // Note that Uint8Array is array-like but does 
not implement Array.
-                               rnds = new Uint8Array( 8 );
+                               // Fill an array with 2 random values, each of 
which is 32 bits.
+                               // Note that Uint32Array is array-like but does 
not implement Array.
+                               rnds = new Uint32Array( 2 );
                                crypto.getRandomValues( rnds );
                        } else {
-                               rnds = new Array( 8 );
-                               for ( i = 0; i < 8; i++ ) {
-                                       if ( ( i & 3 ) === 0 ) {
-                                               r = Math.random() * 0x100000000;
-                                       }
-                                       rnds[ i ] = r >>> ( ( i & 3 ) << 3 ) & 
255;
-                               }
+                               rnds = [
+                                       Math.floor( Math.random() * 0x100000000 
),
+                                       Math.floor( Math.random() * 0x100000000 
)
+                               ];
                        }
-                       // Convert from number to hex
-                       for ( i = 0; i < 8; i++ ) {
-                               hexRnds[ i ] = byteToHex[ rnds[ i ] ];
+                       // Convert number to a string with 16 hex characters
+                       for ( i = 0; i < 2; i++ ) {
+                               // Add 0x100000000 before converting to hex and 
strip the extra character
+                               // after converting to keep the leading zeros.
+                               hexRnds[ i ] = ( rnds[ i ] + 0x100000000 
).toString( 16 ).slice( 1 );
                        }
 
                        // Concatenation of two random integers with entropy n 
and m
                        // returns a string with entropy n+m if those strings 
are independent
                        return hexRnds.join( '' );
-                       /* eslint-enable no-bitwise */
                },
 
                /**

-- 
To view, visit https://gerrit.wikimedia.org/r/190640
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I6e6ac9e0813c4ba540e0a53b8e6667162cb60bf7
Gerrit-PatchSet: 15
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Gerrit Patch Uploader <gerritpatchuploa...@gmail.com>
Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de>
Gerrit-Reviewer: Esanders <esand...@wikimedia.org>
Gerrit-Reviewer: Fomafix <foma...@googlemail.com>
Gerrit-Reviewer: Gerrit Patch Uploader <gerritpatchuploa...@gmail.com>
Gerrit-Reviewer: Jack Phoenix <j...@countervandalism.net>
Gerrit-Reviewer: Krinkle <krinklem...@gmail.com>
Gerrit-Reviewer: Nuria <nu...@wikimedia.org>
Gerrit-Reviewer: Ori.livneh <o...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to