diff --git a/Src/StackifyLib/Web/RealUserMonitoring.cs b/Src/StackifyLib/Web/RealUserMonitoring.cs index 8de8d5d..10e517e 100644 --- a/Src/StackifyLib/Web/RealUserMonitoring.cs +++ b/Src/StackifyLib/Web/RealUserMonitoring.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Security.Cryptography; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -9,8 +9,12 @@ namespace StackifyLib.Web public static class RealUserMonitoring { private static readonly RandomNumberGenerator Rng = new RNGCryptoServiceProvider(); - - public static string GetHeaderScript() + + /// + /// Generate the header script for including RUM + /// + /// nonce value, defaults to a cryptographic unique string if left null + public static string GetHeaderScript(string nonce = null) { var rumScriptUrl = Config.RumScriptUrl; var rumKey = Config.RumKey; @@ -52,13 +56,16 @@ public static string GetHeaderScript() settings["Trans"] = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(reportingUrl)); } - // generate nonce for strict CSP rules + return string.Format("", + settings.ToString(Formatting.None), rumScriptUrl, rumKey, nonce ?? GetNonce()); + } + + // generate nonce for strict CSP rules + private static string GetNonce() + { var nonceBytes = new byte[20]; Rng.GetNonZeroBytes(nonceBytes); - var nonce = Convert.ToBase64String(nonceBytes); - - return string.Format("", - settings.ToString(Formatting.None), rumScriptUrl, rumKey, nonce); + return Convert.ToBase64String(nonceBytes); } } }