Пример #1
0
        public async Task <UserTrackingSettings> GetTelemetrySettings(Guid telemetryKey)
        {
            Program program = await this.Work.Programs.GetByTelemetryKey(telemetryKey).ConfigureAwait(false);

            if (program == null)
            {
                throw new BadRequestException($"Program with Key [{telemetryKey}] does not exist");
            }
            var storedSettings = program.UserTrackingSettings;

            if (storedSettings != null)
            {
                try
                {
                    UserTrackingSettings deserialized = JsonConvert.DeserializeObject <UserTrackingSettings>(storedSettings);
                    return(deserialized);
                }
                catch (Exception ex)
                {
                    this.telemetryClient.TrackException(new InvalidOperationException($"ERROR while deserializing {nameof(UserTrackingSettings)}", ex), new Dictionary <string, string>()
                    {
                        { $"Method", Routes.GetTelemetrySettings },
                        { $"{nameof(Program.TelemetryKey)}", telemetryKey.ToString() }
                    });
                }
            }
            return(new UserTrackingSettings()
            {
                UserIdentifierMode = UserIdentifierMode.RandomFriendlyName,
                ShareIdentifierWithOtherTelimenaApps = false
            });
        }
Пример #2
0
        private UserInfo GetStoredUserInfo(UserTrackingSettings settings)
        {
            switch (settings.UserIdentifierMode)
            {
            case UserIdentifierMode.RandomFriendlyName:
                UserInfo randomized = this.GetUserIdentifier(UserRandomFileName, settings.ShareIdentifierWithOtherTelimenaApps);
                if (randomized == null || string.IsNullOrEmpty(randomized.UserIdentifier) || string.IsNullOrEmpty(randomized.MachineName))
                {
                    return(null);
                }
                return(randomized);

            case UserIdentifierMode.AnonymousGUID:
                UserInfo guidized = this.GetUserIdentifier(UserGuidFileName, settings.ShareIdentifierWithOtherTelimenaApps);
                if (guidized == null || string.IsNullOrEmpty(guidized.UserIdentifier) || string.IsNullOrEmpty(guidized.MachineName))
                {
                    return(null);
                }
                return(guidized);

            case UserIdentifierMode.NoTelemetry:
                return(new UserInfo());

            case UserIdentifierMode.TrackPersonalData:
                return(new UserInfo {
                    UserIdentifier = Environment.UserName, MachineName = Environment.MachineName
                });

            default:
                return(new UserInfo());
            }
        }
Пример #3
0
        private UserTrackingSettings DeserializeAndStoreSettings(string serializedSettings)
        {
            UserTrackingSettings settings = this.Deserialize(serializedSettings);

            if (settings == null)
            {
                settings = this.GetStoredSettings();
                if (settings == null)
                {
                    if (this.initialUserInfo != null)
                    {
                        settings = new UserTrackingSettings()
                        {
                            ShareIdentifierWithOtherTelimenaApps = false,
                            UserIdentifierMode = UserIdentifierMode.Custom
                        };
                    }
                    else
                    {
                        settings = new UserTrackingSettings()
                        {
                            ShareIdentifierWithOtherTelimenaApps = false,
                            UserIdentifierMode = UserIdentifierMode.AnonymousGUID
                        };
                    }
                }
            }
            else
            {
                this.StoreSettings(settings);
            }

            return(settings);
        }
Пример #4
0
        private void StoreSettings(UserTrackingSettings settings)
        {
            try
            {
                string stringified = this.serializer.Serialize(settings);

                string path = Path.Combine(this.locator.GetWorkingDirectory().FullName, TrackingSettingsFileName);
                File.WriteAllText(path, stringified);
            }
            catch (Exception ex)
            {
                TelemetryDebugWriter.WriteError("Error while storing user tracking settings: " + ex);
            }
        }
Пример #5
0
        public async Task LoadUserInfo()
        {
            if (this.properties.UserInfo != null && this.properties.UserInfo.UserIdentifier != NotYetComputedUser)
            {
                return;
            }

            string settingsString = await this.settingsProvider.GetUserTrackingSettings(this.properties.TelemetryKey);

            this.Settings = this.DeserializeAndStoreSettings(settingsString);

            UserInfo userInfo = this.GetUserInfo();

            this.properties.UserInfo = userInfo;
        }
 private UserTrackingSettings GetUserTrackingSettings(Program program)
 {
     try
     {
         UserTrackingSettings deserialized = JsonConvert.DeserializeObject <UserTrackingSettings>(program.UserTrackingSettings);
         return(deserialized);
     }
     catch (Exception)
     {
         return(new UserTrackingSettings()
         {
             UserIdentifierMode = UserIdentifierMode.RandomFriendlyName,
             ShareIdentifierWithOtherTelimenaApps = false
         });
     }
 }
Пример #7
0
        public UserInfo GetStoredUserInfo()
        {
            UserTrackingSettings storedSettings = this.GetStoredSettings();

            if (storedSettings != null)
            {
                var storedInfo = this.GetStoredUserInfo(storedSettings);
                if (storedInfo != null)
                {
                    return(storedInfo);
                }
            }
            return(new UserInfo()
            {
                UserIdentifier = NotYetComputedUser
            });
        }
Пример #8
0
        public async Task <IHttpActionResult> SetTelemetrySettings(Guid telemetryKey, UserTrackingSettings settings)
        {
            Program program = await this.Work.Programs.GetByTelemetryKey(telemetryKey).ConfigureAwait(false);

            if (program == null)
            {
                throw new BadRequestException($"Program with Key [{telemetryKey}] does not exist");
            }

            var serialized = JsonConvert.SerializeObject(settings);

            program.UserTrackingSettings = serialized;

            await this.Work.CompleteAsync().ConfigureAwait(false);

            return(this.Ok("Updated user tracking settings"));
        }