From 5903b394563be843d901ede3a84ae53c74e4e943 Mon Sep 17 00:00:00 2001 From: Matteo Simone Date: Wed, 17 Jun 2015 22:37:44 -0700 Subject: [PATCH 1/2] Use window.crypto for uuid4 if present --- src/raven.js | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/raven.js b/src/raven.js index a2d2b35604b4..4bd21057c83f 100644 --- a/src/raven.js +++ b/src/raven.js @@ -805,13 +805,37 @@ function joinRegExp(patterns) { return new RegExp(sources.join('|'), 'i'); } -// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523 function uuid4() { - return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - var r = Math.random()*16|0, - v = c == 'x' ? r : (r&0x3|0x8); - return v.toString(16); - }); + var crypto = window.crypto || window.msCrypto; + + if (typeof(crypto) !== 'undefined' && crypto.getRandomValues) { + // Use window.crypto API if available + var arr = new Uint16Array(8); + crypto.getRandomValues(arr); + + // set 4 in byte 7 + arr[3] = arr[3] & 0xFFF | 0x4000; + // set 2 most significant bits of byte 9 to '10' + arr[4] = arr[4] & 0x3FFF | 0x8000; + + var pad = function(num) { + var v = num.toString(16); + while (v.length < 4) { + v = '0' + v; + } + return v; + }; + + return (pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + + pad(arr[5]) + pad(arr[6]) + pad(arr[7])); + } else { + // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523 + return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = Math.random()*16|0, + v = c == 'x' ? r : (r&0x3|0x8); + return v.toString(16); + }); + } } function logDebug(level, message) { From 757657cae77ab62a131c95612b992b9fb04173c5 Mon Sep 17 00:00:00 2001 From: Matteo Simone Date: Wed, 17 Jun 2015 22:47:50 -0700 Subject: [PATCH 2/2] Use isUndefined to check for crypto --- src/raven.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/raven.js b/src/raven.js index 4bd21057c83f..fb9d2a15499a 100644 --- a/src/raven.js +++ b/src/raven.js @@ -808,7 +808,7 @@ function joinRegExp(patterns) { function uuid4() { var crypto = window.crypto || window.msCrypto; - if (typeof(crypto) !== 'undefined' && crypto.getRandomValues) { + if (!isUndefined(crypto) && crypto.getRandomValues) { // Use window.crypto API if available var arr = new Uint16Array(8); crypto.getRandomValues(arr);