Brion VIBBER has submitted this change and it was merged.

Change subject: Add M#getSessionId
......................................................................


Add M#getSessionId

Use it to generate/fetch a random session ID stored in localStorage.

Change-Id: I501e5a7a4e04797dcc372346262771e8f97aa58b
---
M javascripts/common/mf-application.js
M tests/js/test_application.js
2 files changed, 37 insertions(+), 0 deletions(-)

Approvals:
  Brion VIBBER: Verified; Looks good to me, approved



diff --git a/javascripts/common/mf-application.js 
b/javascripts/common/mf-application.js
index c22d425..fd4a72e 100644
--- a/javascripts/common/mf-application.js
+++ b/javascripts/common/mf-application.js
@@ -187,6 +187,32 @@
                }
        }
 
+       /**
+        * Retrieve and, if not present, generate a random session ID
+        * (32 alphanumeric characters).
+        *
+        * @return {string}
+        */
+       function getSessionId() {
+               var sessionId;
+               if ( typeof localStorage === 'undefined' ) {
+                       return null;
+               }
+               sessionId = localStorage.getItem( 'sessionId' );
+
+               if ( !sessionId ) {
+                       // FIXME: use mw.user.generateRandomSessionId when we 
can,
+                       // as of now mediawiki.user has no mobile target (yay, 
targets in RL!)
+                       sessionId = '';
+                       while ( sessionId.length < 32 ) {
+                               // http://stackoverflow.com/a/8084248/365238
+                               sessionId += 
Math.random().toString(36).slice(2, 32 + 2 - sessionId.length);
+                       }
+                       localStorage.setItem( 'sessionId', sessionId );
+               }
+               return sessionId;
+       }
+
        $( init );
 
        $.extend( M, {
@@ -196,6 +222,7 @@
                getApiUrl: getApiUrl,
                getOrigin: getOrigin,
                getPageArrayFromApiResponse: getPageArrayFromApiResponse,
+               getSessionId: getSessionId,
                isLoggedIn: isLoggedIn,
                log: log,
                message: message,
diff --git a/tests/js/test_application.js b/tests/js/test_application.js
index f599f07..867bdd5 100644
--- a/tests/js/test_application.js
+++ b/tests/js/test_application.js
@@ -42,4 +42,14 @@
        strictEqual( MFE.require( 'testModule2' ), 'test module 2' );
 } );
 
+
+module( 'MobileFrontend common functions' );
+
+test( '#getSessionId', function() {
+       var sessionId = MFE.getSessionId();
+       strictEqual( typeof sessionId, 'string', 'session ID is a string' );
+       strictEqual( sessionId.length, 32, 'session ID is 32 chars long' );
+       strictEqual( MFE.getSessionId(), sessionId, 'session ID is not 
regenerated if present' );
+} );
+
 }( jQuery, mw.mobileFrontend ) );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I501e5a7a4e04797dcc372346262771e8f97aa58b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: JGonera <jgon...@wikimedia.org>
Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org>
Gerrit-Reviewer: awjrichards <aricha...@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