17
17
#pragma warning restore 1587
18
18
19
19
using System ;
20
- using System . Linq ;
20
+ using Identifiable ;
21
21
22
22
namespace VWOFmeSdk . Utils
23
23
{
24
24
public static class UUIDUtils
25
25
{
26
- /// <summary>
27
- /// This method generates a random UUID.
28
- /// </summary>
29
- /// <param name="apiKey"></param>
30
- /// <returns></returns>
31
- public static string GetRandomUUID ( string apiKey )
32
- {
33
- var namespaceUUID = new Guid ( "00000000-0000-0000-0000-000000000000" ) ;
34
- var randomUUID = Guid . NewGuid ( ) ;
35
- return new Guid ( namespaceUUID . ToByteArray ( ) ) . ToString ( ) ;
36
- }
26
+ private static readonly Guid UrlNamespace = new Guid ( "6ba7b811-9dad-11d1-80b4-00c04fd430c8" ) ; // The namespace for URLs
27
+ private static readonly string VWO_NAMESPACE_URL = "https://vwo.com" ;
37
28
38
29
/// <summary>
39
30
/// This method generates a UUID for a given userId and accountId.
@@ -43,31 +34,27 @@ public static string GetRandomUUID(string apiKey)
43
34
/// <returns></returns>
44
35
public static string GetUUID ( string userId , string accountId )
45
36
{
46
- var vwoNamespace = Guid . Parse ( "00000000-0000-0000-0000-000000000000" ) ;
47
- var userIdNamespace = GenerateUUID ( accountId , vwoNamespace . ToString ( ) ) ;
48
- var uuidForUserIdAccountId = GenerateUUID ( userId , userIdNamespace . ToString ( ) ) ;
49
- return uuidForUserIdAccountId . ToString ( ) . Replace ( "-" , "" ) . ToUpper ( ) ;
37
+ var accountIdAsString = accountId . ToString ( ) ;
38
+
39
+ // Compute the UUID using NamedGuid.Compute from the Identifiable library
40
+ var vwoNamespaceGuid = NamedGuid . Compute ( NamedGuidAlgorithm . SHA1 , UrlNamespace , VWO_NAMESPACE_URL ) ;
41
+ var accountIdGuid = NamedGuid . Compute ( NamedGuidAlgorithm . SHA1 , vwoNamespaceGuid , accountIdAsString ) ;
42
+ var userIdGuid = NamedGuid . Compute ( NamedGuidAlgorithm . SHA1 , accountIdGuid , userId ) ;
43
+
44
+ var uuid = userIdGuid . ToString ( "N" ) . ToUpper ( ) ; // Format as a UUID string (no hyphens)
45
+ return uuid ;
50
46
}
51
47
52
48
/// <summary>
53
- /// This method generates a UUID for a given name and namespaceId .
49
+ /// This method generates a random UUID .
54
50
/// </summary>
55
- /// <param name="name"></param>
56
- /// <param name="namespaceId"></param>
51
+ /// <param name="apiKey"></param>
57
52
/// <returns></returns>
58
- private static Guid GenerateUUID ( string name , string namespaceId )
53
+ public static string GetRandomUUID ( string apiKey )
59
54
{
60
- if ( string . IsNullOrEmpty ( name ) || string . IsNullOrEmpty ( namespaceId ) )
61
- {
62
- return default ;
63
- }
64
-
65
- var namespaceBytes = new Guid ( namespaceId ) . ToByteArray ( ) ;
66
- var nameBytes = System . Text . Encoding . UTF8 . GetBytes ( name ) ;
67
- var hash = System . Security . Cryptography . SHA1 . Create ( ) . ComputeHash ( namespaceBytes . Concat ( nameBytes ) . ToArray ( ) ) ;
68
- hash [ 6 ] = ( byte ) ( 0x50 | ( hash [ 6 ] & 0xf ) ) ;
69
- hash [ 8 ] = ( byte ) ( 0x80 | ( hash [ 8 ] & 0x3f ) ) ;
70
- return new Guid ( hash . Take ( 16 ) . ToArray ( ) ) ;
55
+ var namespaceUUID = new Guid ( "00000000-0000-0000-0000-000000000000" ) ;
56
+ var randomUUID = Guid . NewGuid ( ) ;
57
+ return new Guid ( namespaceUUID . ToByteArray ( ) ) . ToString ( ) ;
71
58
}
72
59
}
73
60
}
0 commit comments