mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
GDPR compliance.
This commit is contained in:
@@ -45,6 +45,11 @@ namespace DiscImageChef.Settings
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class DicSettings
|
public class DicSettings
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Level for GDPR compliance checking. Every time a new feature may share user information this level should go up, and the user asked to opt-in.
|
||||||
|
/// </summary>
|
||||||
|
public const ulong GdprLevel = 1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If set to <c>true</c>, reports will be saved locally
|
/// If set to <c>true</c>, reports will be saved locally
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -57,6 +62,10 @@ namespace DiscImageChef.Settings
|
|||||||
/// Statistics
|
/// Statistics
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public StatsSettings Stats;
|
public StatsSettings Stats;
|
||||||
|
/// <summary>
|
||||||
|
/// Set of GDPR compliance, if lower than <see cref="GdprLevel"/>, ask user for compliance.
|
||||||
|
/// </summary>
|
||||||
|
public ulong GdprCompliance;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Use this
|
// TODO: Use this
|
||||||
@@ -283,6 +292,8 @@ namespace DiscImageChef.Settings
|
|||||||
}
|
}
|
||||||
else Current.Stats = null;
|
else Current.Stats = null;
|
||||||
|
|
||||||
|
Current.GdprCompliance = parsedPreferences.TryGetValue("GdprCompliance", out obj) ? (ulong)((NSNumber)obj).ToLong() : 0;
|
||||||
|
|
||||||
prefsFs.Close();
|
prefsFs.Close();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -319,6 +330,7 @@ namespace DiscImageChef.Settings
|
|||||||
|
|
||||||
Current.SaveReportsGlobally = Convert.ToBoolean(key.GetValue("SaveReportsGlobally"));
|
Current.SaveReportsGlobally = Convert.ToBoolean(key.GetValue("SaveReportsGlobally"));
|
||||||
Current.ShareReports = Convert.ToBoolean(key.GetValue("ShareReports"));
|
Current.ShareReports = Convert.ToBoolean(key.GetValue("ShareReports"));
|
||||||
|
Current.GdprCompliance = Convert.ToUInt64(key.GetValue("GdprCompliance"));
|
||||||
|
|
||||||
bool stats = Convert.ToBoolean(key.GetValue("Statistics"));
|
bool stats = Convert.ToBoolean(key.GetValue("Statistics"));
|
||||||
if(stats)
|
if(stats)
|
||||||
@@ -385,7 +397,8 @@ namespace DiscImageChef.Settings
|
|||||||
NSDictionary root = new NSDictionary
|
NSDictionary root = new NSDictionary
|
||||||
{
|
{
|
||||||
{"SaveReportsGlobally", Current.SaveReportsGlobally},
|
{"SaveReportsGlobally", Current.SaveReportsGlobally},
|
||||||
{"ShareReports", Current.ShareReports}
|
{"ShareReports", Current.ShareReports},
|
||||||
|
{"GdprCompliance", Current.GdprCompliance}
|
||||||
};
|
};
|
||||||
if(Current.Stats != null)
|
if(Current.Stats != null)
|
||||||
{
|
{
|
||||||
@@ -431,6 +444,7 @@ namespace DiscImageChef.Settings
|
|||||||
{
|
{
|
||||||
key.SetValue("SaveReportsGlobally", Current.SaveReportsGlobally);
|
key.SetValue("SaveReportsGlobally", Current.SaveReportsGlobally);
|
||||||
key.SetValue("ShareReports", Current.ShareReports);
|
key.SetValue("ShareReports", Current.ShareReports);
|
||||||
|
key.SetValue("GdprCompliance", Current.GdprCompliance);
|
||||||
|
|
||||||
if(Current.Stats != null)
|
if(Current.Stats != null)
|
||||||
{
|
{
|
||||||
@@ -498,6 +512,7 @@ namespace DiscImageChef.Settings
|
|||||||
{
|
{
|
||||||
SaveReportsGlobally = true,
|
SaveReportsGlobally = true,
|
||||||
ShareReports = true,
|
ShareReports = true,
|
||||||
|
GdprCompliance = 0,
|
||||||
Stats = new StatsSettings
|
Stats = new StatsSettings
|
||||||
{
|
{
|
||||||
BenchmarkStats = true,
|
BenchmarkStats = true,
|
||||||
|
|||||||
@@ -38,19 +38,67 @@ namespace DiscImageChef.Commands
|
|||||||
{
|
{
|
||||||
static class Configure
|
static class Configure
|
||||||
{
|
{
|
||||||
internal static void DoConfigure()
|
internal static void DoConfigure(bool gdprChange)
|
||||||
{
|
{
|
||||||
|
if(gdprChange)
|
||||||
|
{
|
||||||
|
DicConsole.WriteLine("In compliance with the European Union General Data Protection Regulation 2016/679 (GDPR),\n" +
|
||||||
|
"we must give you the following information about DiscImageChef and ask if you want to opt-in\n" +
|
||||||
|
"in some information sharing.");
|
||||||
|
DicConsole.WriteLine();
|
||||||
|
DicConsole.WriteLine("Disclaimer: Because DiscImageChef is an open source software this information, and therefore,\n" +
|
||||||
|
"compliance with GDPR only holds true if you obtained a certificated copy from its original\n" +
|
||||||
|
"authors. In case of doubt, close DiscImageChef now and ask in our IRC support channel.");
|
||||||
|
DicConsole.WriteLine();
|
||||||
|
DicConsole.WriteLine("For any information sharing your IP address may be stored in our server, in a way that is not\n" +
|
||||||
|
"possible for any person, manual, or automated process, to link with your identity, unless\n" +
|
||||||
|
"specified otherwise.");
|
||||||
|
}
|
||||||
ConsoleKeyInfo pressedKey = new ConsoleKeyInfo();
|
ConsoleKeyInfo pressedKey = new ConsoleKeyInfo();
|
||||||
|
|
||||||
|
#region Device reports
|
||||||
|
DicConsole.WriteLine();
|
||||||
|
DicConsole.WriteLine("With the 'device-report' command, DiscImageChef creates a report of a device, that includes its\n" +
|
||||||
|
"manufacturer, model, firmware revision and/or version, attached bus, size, and supported commands.\n" +
|
||||||
|
"The serial number of the device is not stored in the report. If used with the debug parameter,\n" +
|
||||||
|
"extra information about the device will be stored in the report. This information is known to contain\n" +
|
||||||
|
"the device serial number in non-standard places that prevent the automatic removal of it on a handful\n" +
|
||||||
|
"of devices. A human-readable copy of the report in XML format is always created in the same directory\n" +
|
||||||
|
"where DiscImageChef is being run from.");
|
||||||
|
|
||||||
while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N)
|
while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N)
|
||||||
{
|
{
|
||||||
DicConsole.Write("Do you want to save device reports globally? (Y/N): ");
|
DicConsole.Write("Do you want to save device reports in shared folder of your computer? (Y/N): ");
|
||||||
pressedKey = System.Console.ReadKey();
|
pressedKey = System.Console.ReadKey();
|
||||||
DicConsole.WriteLine();
|
DicConsole.WriteLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings.Settings.Current.SaveReportsGlobally = pressedKey.Key == ConsoleKey.Y;
|
Settings.Settings.Current.SaveReportsGlobally = pressedKey.Key == ConsoleKey.Y;
|
||||||
|
|
||||||
|
pressedKey = new ConsoleKeyInfo();
|
||||||
|
DicConsole.WriteLine();
|
||||||
|
DicConsole.WriteLine("Sharing a report with us will send it to our server, that's in the european union territory, where it\n" +
|
||||||
|
"will be manually analized by an european union citizen to remove any trace of personal identification\n" +
|
||||||
|
"from it. Once that is done, it will be shared in our stats website, http://discimagechef.claunia.com\n" +
|
||||||
|
"These report will be used to improve DiscImageChef support, and in some cases, to provide emulation of the\n" +
|
||||||
|
"devices to other open-source projects. In any case, no information linking the report to you will be stored.");
|
||||||
|
while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N)
|
||||||
|
{
|
||||||
|
DicConsole.Write("Do you want to share your device reports with us? (Y/N): ");
|
||||||
|
pressedKey = System.Console.ReadKey();
|
||||||
|
DicConsole.WriteLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings.Settings.Current.ShareReports = pressedKey.Key == ConsoleKey.Y;
|
||||||
|
#endregion Device reports
|
||||||
|
|
||||||
|
#region Statistics
|
||||||
|
DicConsole.WriteLine();
|
||||||
|
DicConsole.WriteLine("DiscImageChef can store some usage statistics. These statistics are limited to the number of times a\n" +
|
||||||
|
"command is executed, a filesystem, partition, or device is used, the operating system version, and other.\n" +
|
||||||
|
"In no case, any information besides pure statistical usage numbers is stored, and they're just joint to the\n" +
|
||||||
|
"pool with no way of using them to identify you.");
|
||||||
|
|
||||||
pressedKey = new ConsoleKeyInfo();
|
pressedKey = new ConsoleKeyInfo();
|
||||||
while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N)
|
while(pressedKey.Key != ConsoleKey.Y && pressedKey.Key != ConsoleKey.N)
|
||||||
{
|
{
|
||||||
@@ -174,7 +222,9 @@ namespace DiscImageChef.Commands
|
|||||||
Settings.Settings.Current.Stats.VerifyStats = pressedKey.Key == ConsoleKey.Y;
|
Settings.Settings.Current.Stats.VerifyStats = pressedKey.Key == ConsoleKey.Y;
|
||||||
}
|
}
|
||||||
else Settings.Settings.Current.Stats = null;
|
else Settings.Settings.Current.Stats = null;
|
||||||
|
#endregion Statistics
|
||||||
|
|
||||||
|
Settings.Settings.Current.GdprCompliance = Settings.DicSettings.GdprLevel;
|
||||||
Settings.Settings.SaveSettings();
|
Settings.Settings.SaveSettings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ namespace DiscImageChef
|
|||||||
DicConsole.ErrorWriteLineEvent += System.Console.Error.WriteLine;
|
DicConsole.ErrorWriteLineEvent += System.Console.Error.WriteLine;
|
||||||
|
|
||||||
Settings.Settings.LoadSettings();
|
Settings.Settings.LoadSettings();
|
||||||
|
if(Settings.Settings.Current.GdprCompliance < Settings.DicSettings.GdprLevel)
|
||||||
|
Configure.DoConfigure(true);
|
||||||
Statistics.LoadStats();
|
Statistics.LoadStats();
|
||||||
if(Settings.Settings.Current.Stats != null && Settings.Settings.Current.Stats.ShareStats)
|
if(Settings.Settings.Current.Stats != null && Settings.Settings.Current.Stats.ShareStats)
|
||||||
Statistics.SubmitStats();
|
Statistics.SubmitStats();
|
||||||
@@ -196,7 +198,7 @@ namespace DiscImageChef
|
|||||||
}).WithParsed<ConfigureOptions>(opts =>
|
}).WithParsed<ConfigureOptions>(opts =>
|
||||||
{
|
{
|
||||||
PrintCopyright();
|
PrintCopyright();
|
||||||
Configure.DoConfigure();
|
Configure.DoConfigure(false);
|
||||||
}).WithParsed<StatsOptions>(opts =>
|
}).WithParsed<StatsOptions>(opts =>
|
||||||
{
|
{
|
||||||
PrintCopyright();
|
PrintCopyright();
|
||||||
|
|||||||
Reference in New Issue
Block a user