Index: binaries/data/config/default.cfg =================================================================== --- binaries/data/config/default.cfg +++ binaries/data/config/default.cfg @@ -475,6 +475,7 @@ [userreport] ; Opt-in online user reporting system url = "http://feedback.wildfiregames.com/report/upload/v1/" +privacy_policy = "0" ; Version (hash) of the Privacy Policy that the user has accepted [view] ; Camera control settings scroll.speed = 120.0 Index: binaries/data/mods/public/gui/manual/userreport.txt =================================================================== --- binaries/data/mods/public/gui/manual/userreport.txt +++ /dev/null @@ -1,12 +0,0 @@ -As a free, open source game, we don't have the resources to test on a wide range of systems, but we want to provide the best quality experience to as many players as possible. When you enable automatic feedback, we'll receive data to help us understand the hardware we should focus on supporting, and to identify performance problems we should fix. - -The following data will be sent to our server: - -• A random user ID (stored in %APPDATA%\\0ad\\config\\user.cfg on Windows, ~/.config/0ad/config/user.cfg on Unix), to let us detect repeated reports from the same user. -• Game version number and basic build settings (optimisation mode, CPU architecture, timestamp, compiler version). -• Hardware details: OS version, graphics driver version, OpenGL capabilities, screen size, CPU details, RAM size. -• Performance details: a snapshot of timing data a few seconds after you start a match or change graphics settings. - -The data will only be a few kilobytes each time you run the game, so bandwidth usage is minimal. - -We will store the submitted data on our server, and may publish statistics or non-user-identifiable details to help other game developers with similar questions. We will store the IP address that submitted the data, to help detect abuse of the service, but will not publish it. The published data can be seen at http://feedback.wildfiregames.com/ Index: binaries/data/mods/public/gui/pregame/Privacy_Policy.txt =================================================================== --- /dev/null +++ binaries/data/mods/public/gui/pregame/Privacy_Policy.txt @@ -0,0 +1,32 @@ +0 A.D. Empires Ascendant User Reporter Privacy Policy + +Document Date: 2018-07-25 + +Definitions: + * The "service" is the 0 A.D. Empires Ascendant User Reporter provided by Wildfire Games (WFG). + * "Abuse" is any unauthorized use of the service, including, but not limited to, unsolicited mass messaging, denial of service, exploitation of vulnerabilities or fraud. + * "We" are Wildfire Games team members. + * "You" are the user of the service. + * The "User ID" is a random generated number stored in %APPDATA%\\0ad\\config\\user.cfg on Windows or ~/.config/0ad/config/user.cfg on Unix on your computer. + +We process the following user data: + 1. To comply with possible legal obligations in case of Abuse, we store the IP address. Unless Abuse has been detected, your IP address will be stored for up to one month. + 2. The User ID acts as your pseudonym among all users of the service. It is selected at random and is only associated with your IP in case of Abuse. + 3. To make the game run correctly on most systems, we determine the hardware of users, and to identify performance problems in the project, we store data about the following subjects: + a. Game version number and basic build settings (optimization mode, CPU architecture, timestamp, compiler version). + b. Hardware details: OS version, graphics driver version, OpenGL capabilities, screen size, CPU details, RAM size, Sound card. + +We reserve the right to: + 1. Store IP addresses for up to one month for the purpose of preventing Abuse. + 2. Gather and publish anonymous statistics about the stored data, excluding the IP address and User ID, on http://feedback.wildfiregames.com/. + 3. Erase any data older than one month. + +You understand that: + * The IP address is the only information processed that could reliably identify your natural person. + * The User ID is random thus doesn't allow us to identify you. + * Unless your IP address is stored for a legal obligation such as Abuse, your user data will become anonymous if you stop using this service and the IP address is erased (after one month). + +If you wish to file a personal data request in accordance with the General Data Protection Regulation: + * Please write an email to user-data@wildfiregames.com. + * You will have to provide the User ID to select your data from the database and your IP address to prevent Abuse of data requests. + * Note that statistics can be seen on http://feedback.wildfiregames.com/. Index: binaries/data/mods/public/gui/pregame/mainmenu.js =================================================================== --- binaries/data/mods/public/gui/pregame/mainmenu.js +++ binaries/data/mods/public/gui/pregame/mainmenu.js @@ -24,7 +24,7 @@ // Initialize currentSubmenuType with placeholder to avoid null when switching currentSubmenuType = "submenuSinglePlayer"; - EnableUserReport(Engine.IsUserReportEnabled()); + initUserReport(); // Only show splash screen(s) once at startup, but not again after hotloading g_ShowSplashScreens = hotloadData ? hotloadData.showSplashScreens : initData && initData.isStartup; @@ -49,6 +49,17 @@ "lobby"); } +function initUserReport() +{ + let userReportPrivacyPolicy = Engine.TranslateLines(Engine.ReadFile("gui/pregame/Privacy_Policy.txt")); + Engine.GetGUIObjectByName("userReportPrivacyPolicyMainText").caption = userReportPrivacyPolicy; + + let agreeTerms = Engine.CalculateMD5(userReportPrivacyPolicy) == Engine.ConfigDB_GetValue("user", "userreport.privacy_policy"); + Engine.GetGUIObjectByName("userReportPrivacyPolicyCheckbox").checked = agreeTerms; + EnableUserReport(agreeTerms && Engine.IsUserReportEnabled()); + updateUserReportPrivacyPolicyFeedback(); +} + function getHotloadData() { return { "showSplashScreens": g_ShowSplashScreens }; @@ -172,11 +183,39 @@ ShowRenderPathMessage(); } +function acceptUserReportPrivacyPolicy(accept) +{ + if (accept) + saveSettingAndWriteToUserConfig( + "userreport.privacy_policy", + Engine.CalculateMD5(Engine.GetGUIObjectByName("userReportPrivacyPolicyMainText").caption)); + else + { + EnableUserReport(false); + saveSettingAndWriteToUserConfig("userreport.privacy_policy", "0"); + } + updateUserReportPrivacyPolicyFeedback(accept); +} + function EnableUserReport(Enabled) { Engine.GetGUIObjectByName("userReportDisabled").hidden = Enabled; Engine.GetGUIObjectByName("userReportEnabled").hidden = !Enabled; Engine.SetUserReportEnabled(Enabled); + updateUserReportPrivacyPolicyFeedback(); +} + +function updateUserReportPrivacyPolicyFeedback() +{ + let agreeTerms = Engine.GetGUIObjectByName("userReportPrivacyPolicyCheckbox").checked; + + let enableButtonUserReportPrivacyPolicy = Engine.GetGUIObjectByName("enableButtonUserReportPrivacyPolicy"); + enableButtonUserReportPrivacyPolicy.enabled = agreeTerms; + enableButtonUserReportPrivacyPolicy.tooltip = agreeTerms ? "" : translate("Please agree to the Privacy Policy."); + + let userReportEnabled = Engine.IsUserReportEnabled(); + enableButtonUserReportPrivacyPolicy.hidden = userReportEnabled; + Engine.GetGUIObjectByName("disableButtonUserReportPrivacyPolicy").hidden = !userReportEnabled; } /** Index: binaries/data/mods/public/gui/pregame/mainmenu.xml =================================================================== --- binaries/data/mods/public/gui/pregame/mainmenu.xml +++ binaries/data/mods/public/gui/pregame/mainmenu.xml @@ -60,18 +60,9 @@ You can automatically send us anonymous feedback that will help us fix bugs, and improve performance and compatibility. - - Enable Feedback - EnableUserReport(true); - - Technical Details - - Engine.PushGuiPage("page_manual.xml", { - "page": "manual/userreport", - "title": getTechnicalDetails() - }); - + Enable Feedback + Engine.GetGUIObjectByName("userReportPrivacyPolicy").hidden = false; @@ -89,17 +80,54 @@ Disable Feedback - EnableUserReport(false); - - - Technical Details - Engine.PushGuiPage("page_manual.xml", { - "page": "manual/userreport", - "title": getTechnicalDetails() - }); + EnableUserReport(false); + + Privacy Policy + Engine.GetGUIObjectByName("userReportPrivacyPolicy").hidden = false; + + + +