Skip to content

Commit 59c90be

Browse files
authored
Generate valid machine id (#245)
* Fix machine id generated by using Unity machine identifier * EOL * Code description * Prepare code for unit tests n * EOL * Rename interface to IMachineIdentifierProvider * Follow the naming pattern and remove DataProvider from Id providers
1 parent 674cf73 commit 59c90be

17 files changed

+193
-127
lines changed

Runtime/Common/GuidHelper.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System;
2+
using System.Security.Cryptography;
3+
using System.Text;
24

35
namespace Backtrace.Unity.Extensions
46
{
@@ -23,5 +25,20 @@ public static bool IsNullOrEmpty(string guid)
2325
const string emptyGuid = "00000000-0000-0000-0000-000000000000";
2426
return string.IsNullOrEmpty(guid) || guid == emptyGuid;
2527
}
28+
29+
/// <summary>
30+
/// Converts a random string into a guid representation.
31+
/// </summary>
32+
public static Guid FromString(string value)
33+
{
34+
if (string.IsNullOrEmpty(value))
35+
{
36+
return Guid.Empty;
37+
}
38+
// to make sure we're supporting old version of Unity that can use .NET 3.5
39+
// we're using an older API to generate a GUID.
40+
MD5 md5 = new MD5CryptoServiceProvider();
41+
return new Guid(md5.ComputeHash(Encoding.UTF8.GetBytes(value)));
42+
}
2643
}
2744
}

Runtime/Model/Attributes/MachineAttributeProvider.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Backtrace.Unity.Common;
2-
using Backtrace.Unity.Extensions;
32
using System;
43
using System.Collections.Generic;
54
using System.Globalization;

Tests/Runtime/Client/Mocks.meta renamed to Runtime/Model/DataProvider.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Backtrace.Unity.Tests.Runtime")]
2+
namespace Backtrace.Unity.Model.DataProvider
3+
{
4+
internal interface IMachineIdentifierProvider
5+
{
6+
string Get();
7+
}
8+
}

Runtime/Model/DataProvider/IMachineIdentifierProvider.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Backtrace.Unity.Tests.Runtime")]
2+
namespace Backtrace.Unity.Model.DataProvider
3+
{
4+
internal interface ISessionStorageDataProvider
5+
{
6+
void SetString(string key, string value);
7+
string GetString(string key);
8+
}
9+
}

Runtime/Model/DataProvider/ISessionStorageDataProvider.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using Backtrace.Unity.Extensions;
2+
using System;
3+
using System.Linq;
4+
using System.Net.NetworkInformation;
5+
6+
namespace Backtrace.Unity.Model.DataProvider
7+
{
8+
internal class NetworkIdentifierProvider : IMachineIdentifierProvider
9+
{
10+
public string Get()
11+
{
12+
var interfaces = NetworkInterface.GetAllNetworkInterfaces()
13+
.Where(n => n.OperationalStatus == OperationalStatus.Up);
14+
15+
foreach (var @interface in interfaces)
16+
{
17+
var physicalAddress = @interface.GetPhysicalAddress();
18+
if (physicalAddress == null)
19+
{
20+
continue;
21+
}
22+
var macAddress = physicalAddress.ToString();
23+
if (string.IsNullOrEmpty(macAddress))
24+
{
25+
continue;
26+
}
27+
string hex = macAddress.Replace(":", string.Empty);
28+
var value = Convert.ToInt64(hex, 16);
29+
return GuidHelper.FromLong(value).ToString();
30+
}
31+
32+
return null;
33+
}
34+
}
35+
}

Runtime/Model/DataProvider/NetworkIdentifierProvider.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using UnityEngine;
2+
3+
namespace Backtrace.Unity.Model.DataProvider
4+
{
5+
internal class SessionStorageDataProvider : ISessionStorageDataProvider
6+
{
7+
public string GetString(string key)
8+
{
9+
return PlayerPrefs.GetString(key);
10+
}
11+
12+
public void SetString(string key, string value)
13+
{
14+
PlayerPrefs.SetString(key, value);
15+
}
16+
}
17+
}

0 commit comments

Comments
 (0)