public DropboxSender(ILogger <BackupCreatorService> logger, SecretsConfig secrets,
                      DropboxConfig dropboxConfig)
 {
     _logger        = logger;
     _secrets       = secrets;
     _dropboxConfig = dropboxConfig;
 }
 public OptionsController(IOptions <AppSettingsConfig> opt, IOptions <Data123Config> dat, IOptions <SecretsConfig> sec)
 {
     Options = opt.Value;
     Data    = dat.Value;
     //user-secret.cmd set AzureKey ABC
     Secrets = sec.Value;
 }
        private void ProcessSecret(KeyValuePair <string, string> secret, SecretsConfig secretsConfig, ref CodeWriter writer)
        {
            if (!secretsConfig.HasKey(secret.Key, out var valueConfig))
            {
                return;
            }

            if (valueConfig is null)
            {
                valueConfig = GenerateValueConfig(secret, secretsConfig);
                if (secretsConfig.Properties is null)
                {
                    // Sanity Check
                    secretsConfig.Properties = new List <ValueConfig>();
                }
                secretsConfig.Properties.Add(valueConfig);
            }

            var mapping       = valueConfig.PropertyType.GetPropertyTypeMapping();
            var accessibility = secretsConfig.Accessibility.ToString().ToLower();

            var standardOutput = PropertyBuilder(secret, mapping.Type, mapping.Handler, valueConfig.IsArray, false, accessibility);
            var safeOutput     = PropertyBuilder(secret, mapping.Type, mapping.Handler, valueConfig.IsArray, true, accessibility);

            writer.AppendAttribute(CompileGeneratedAttribute);
            writer.AppendLine(standardOutput, safeOutput);
        }
Пример #4
0
        public WantedBusService(SecretsConfig config, LicensePlateRepository azureRepository, LicenseApiService licenseService)
        {
            _config = config;

            _connectionString = config.WantedConnectionString;
            _wantedTopic      = config.WantedTopic;
            _subscriptionKey  = config.SubscriptionKey;
            _licenseService   = licenseService;
            _azureRepository  = azureRepository;
        }
 public HomeAssistantWebSocketConnector(
     ILogger <HomeAssistantWebSocketConnector> logger,
     IWebSocketConnector webSocketConnector,
     SecretsConfig secretsConfig,
     HomeAssistantConnector connector)
 {
     this.logger             = logger;
     this.webSocketConnector = webSocketConnector;
     this.secretsConfig      = secretsConfig;
     this.connector          = connector;
 }
 public TestBuildConfiguration()
 {
     ConfigHelper.SaveDefaultConfig(".");
     SecretsConfig = new SecretsConfig
     {
         ClassName  = "Secrets",
         Delimiter  = ";",
         Namespace  = "Helpers",
         Prefix     = "UNIT_TEST_",
         Properties = new List <ValueConfig>()
     };
 }
Пример #7
0
        public LicensePlateBusService(SecretsConfig config,
                                      LicenseApiService licenseService,
                                      LicensePlateRepository repo,
                                      FileRepository fileRepo,
                                      BlobRepository blob)
        {
            _config = config;

            _connectionString = config.ReadConnectionString;
            _readTopicName    = config.ReadTopic;
            _subscriptionKey  = config.SubscriptionKey;
            _licenseService   = licenseService;
            _repo             = repo;
            _blob             = blob;
            _fileRepo         = fileRepo;
        }
Пример #8
0
        public void ProcessSecretHidesValueForSafeOutput(bool firstRun)
        {
            var value     = "TestValue";
            var pair      = new KeyValuePair <string, JToken>(TestKey, value);
            var generator = GetGenerator();
            var config    = new SecretsConfig()
            {
                Properties = new List <ValueConfig> {
                    new ValueConfig {
                        Name = TestKey, PropertyType = PropertyType.String
                    }
                }
            };
            var output = generator.ProcessSecret(pair, config, firstRun, true);

            Assert.DoesNotContain(value, output);
            Assert.Contains("*****", output);
        }
Пример #9
0
        public void ProcessSecretGeneratesIntegerValue(bool firstRun)
        {
            var key       = "TestKey";
            var value     = 2;
            var pair      = new KeyValuePair <string, JToken>(key, value);
            var generator = GetGenerator();
            var config    = new SecretsConfig()
            {
                Properties = new List <ValueConfig> {
                    new ValueConfig {
                        Name = TestKey, PropertyType = PropertyType.Int
                    }
                }
            };

            var output = generator.ProcessSecret(pair, config, firstRun);

            Assert.Contains($"const int {key}", output);
        }
Пример #10
0
        public void ProcessSecretValue(bool firstRun, bool isArray, PropertyType type, string typeDeclaration, string value, string valueDeclaration)
        {
            var pair        = new KeyValuePair <string, JToken>(TestKey, value);
            var generator   = GetGenerator();
            var valueConfig = new ValueConfig
            {
                Name         = TestKey,
                PropertyType = type,
                IsArray      = isArray
            };
            var secretsConfig = new SecretsConfig {
                Properties = new List <ValueConfig> {
                    valueConfig
                }
            };
            var output = generator.ProcessSecret(pair, secretsConfig, firstRun);

            Assert.Contains($"{typeDeclaration} {TestKey}", output);
            Assert.Contains(valueDeclaration, output);
        }
        public void ProcessSecretGeneratesIntegerValue(Accessibility accessibility, bool firstRun)
        {
            var key       = "TestKey";
            var value     = "2";
            var pair      = new KeyValuePair <string, string>(key, value);
            var generator = GetGenerator();
            var config    = new SecretsConfig()
            {
                Accessibility = accessibility,
                Properties    = new List <ValueConfig> {
                    new ValueConfig {
                        Name = TestKey, PropertyType = PropertyType.Int
                    }
                }
            };

            var output = generator.ProcessSecret(pair, config, firstRun);

            Assert.Contains($"{accessibility.ToString().ToLower()} const int {key}", output);
        }
        internal string ProcessSecret(KeyValuePair <string, string> secret, SecretsConfig secretsConfig, bool saveOutput, bool safeOutput = false)
        {
            if (!secretsConfig.HasKey(secret.Key, out var valueConfig) && !saveOutput)
            {
                return(null);
            }

            if (valueConfig is null)
            {
                valueConfig = GenerateValueConfig(secret, secretsConfig);
                if (secretsConfig.Properties is null)
                {
                    // Sanity Check
                    secretsConfig.Properties = new List <ValueConfig>();
                }
                secretsConfig.Properties.Add(valueConfig);
            }

            var mapping       = valueConfig.PropertyType.GetPropertyTypeMapping();
            var accessibility = secretsConfig.Accessibility.ToString().ToLower();

            return(PropertyBuilder(secret, mapping.Type, mapping.Handler, valueConfig.IsArray, safeOutput, accessibility));
        }
Пример #13
0
        internal string ProcessSecret(KeyValuePair <string, JToken> secret, SecretsConfig secretsConfig, bool saveOutput, bool safeOutput = false)
        {
            //var valueConfig = secretsConfig.ContainsKey(secret.Key) ? secretsConfig[secret.Key] : null;
            if (!secretsConfig.HasKey(secret.Key, out var valueConfig) && !saveOutput)
            {
                return(null);
            }

            if (valueConfig is null)
            {
                valueConfig = GenerateValueConfig(secret, secretsConfig);
                if (secretsConfig.Properties is null)
                {
                    // Sanity Check
                    secretsConfig.Properties = new List <ValueConfig>();
                }
                secretsConfig.Properties.Add(valueConfig);
            }

            var mapping = valueConfig.PropertyType.GetPropertyTypeMapping();

            return(PropertyBuilder(secret, mapping.Type, mapping.Format, valueConfig.IsArray, safeOutput));
        }
        internal CodeWriter GenerateClass(SecretsConfig secretsConfig, IDictionary <string, string> secrets)
        {
            var writer = new CodeWriter();

            writer.AppendLine("// ------------------------------------------------------------------------------");
            writer.AppendLine("//  <autogenerated>");
            writer.AppendLine("//      This code was generated by Mobile.BuildTools. For more information  please visit");
            writer.AppendLine("//      https://mobilebuildtools.com or to file an issue please see");
            writer.AppendLine("//      https://github.com/dansiegel/Mobile.BuildTools");
            writer.AppendLine("//");
            writer.AppendLine("//      Changes to this file may cause incorrect behavior and will be lost when");
            writer.AppendLine("//      the code is regenerated.");
            writer.AppendLine("//");
            writer.AppendLine("//      When I wrote this, only God and I understood what I was doing");
            writer.AppendLine("//      Now, God only knows.");
            writer.AppendLine("//");
            writer.AppendLine("//      NOTE: This file should be excluded from source control.");
            writer.AppendLine("//  </autogenerated>");
            writer.AppendLine("// ------------------------------------------------------------------------------");
            writer.AppendLine();
            writer.AppendLine("using System;");
            writer.AppendLine("using GeneratedCodeAttribute = System.CodeDom.Compiler.GeneratedCodeAttribute;");
            using (writer.Block($"namespace {GetNamespace(secretsConfig.Namespace)}"))
            {
                writer.AppendAttribute(CompileGeneratedAttribute);
                using (writer.Block($"{secretsConfig.Accessibility.ToString().ToLower()} static partial class {secretsConfig.ClassName}"))
                {
                    foreach (var secret in secrets)
                    {
                        ProcessSecret(secret, secretsConfig, ref writer);
                        writer.AppendLine();
                    }
                }
            }

            return(writer);
        }
Пример #15
0
        protected override void ExecuteInternal()
        {
            var secrets = GetMergedSecrets();

            var  replacement     = string.Empty;
            var  safeReplacement = string.Empty;
            var  secretsConfig   = Build.GetSecretsConfig();
            bool saveConfig      = secretsConfig is null;

            if (saveConfig)
            {
                secretsConfig = new SecretsConfig()
                {
                    ClassName  = "Secrets",
                    Namespace  = "Helpers",
                    Delimiter  = ";",
                    Prefix     = "BuildTools_",
                    Properties = new List <ValueConfig>()
                };
            }

            foreach (var secret in secrets)
            {
                replacement     += ProcessSecret(secret, secretsConfig, saveConfig);
                safeReplacement += ProcessSecret(secret, secretsConfig, false, true);
            }

            if (saveConfig)
            {
                if (Build.Configuration.ProjectSecrets is null)
                {
                    Build.Configuration.ProjectSecrets = new Dictionary <string, SecretsConfig>();
                }
                Build.Configuration.ProjectSecrets.Add(Build.ProjectName, secretsConfig);
                Build.SaveConfiguration();
            }

            if (string.IsNullOrEmpty(secretsConfig.Namespace))
            {
                secretsConfig.Namespace = "Helpers";
            }

            if (string.IsNullOrEmpty(secretsConfig.ClassName))
            {
                secretsConfig.ClassName = "Secrets";
            }

            replacement = Regex.Replace(replacement, "\n\n$", "");

            var secretsClass = GenerateClass(replacement, secretsConfig);

            Log.LogMessage(Build.Configuration.Debug ? secretsClass : GenerateClass(Regex.Replace(safeReplacement, "\n\n$", ""), secretsConfig));

            var namespacePath    = string.Join($"{Path.PathSeparator}", secretsConfig.Namespace.Split('.').Where(x => !string.IsNullOrEmpty(x)));
            var fileName         = $"{secretsConfig.ClassName}.cs";
            var projectFile      = Path.Combine(namespacePath, fileName);
            var intermediateFile = Path.Combine(Build.IntermediateOutputPath, namespacePath, fileName);
            var outputFile       = File.Exists(projectFile) ? projectFile : intermediateFile;

            Log.LogMessage($"Writing Secrets Class to: '{outputFile}'");
            var generatedFile = new TaskItem(outputFile);

            generatedFile.SetMetadata("Visible", bool.TrueString);
            generatedFile.SetMetadata("Link", projectFile);
            Outputs = generatedFile;

            var parentDirectory = Directory.GetParent(outputFile);

            if (!Directory.Exists(parentDirectory.FullName))
            {
                Directory.CreateDirectory(parentDirectory.FullName);
            }

            File.WriteAllText(outputFile, secretsClass);
        }
Пример #16
0
        internal ValueConfig GenerateValueConfig(KeyValuePair <string, JToken> secret, SecretsConfig config)
        {
            var  value      = secret.Value.ToString();
            var  valueArray = Regex.Split(value, $"(?<!\\\\){config.Delimiter}").Select(x => x.Replace($"\\{config.Delimiter}", config.Delimiter));
            bool isArray    = false;

            if (valueArray.Count() > 1)
            {
                value = valueArray.FirstOrDefault();
            }
            var type = PropertyType.String;

            if (bool.TryParse(value, out _))
            {
                type = PropertyType.Bool;
            }
            else if (Regex.IsMatch(value, @"\d+\.\d+") && double.TryParse(value, out _))
            {
                type = PropertyType.Double;
            }
            else if (int.TryParse(value, out _))
            {
                type = PropertyType.Int;
            }

            return(new ValueConfig
            {
                Name = secret.Key,
                IsArray = isArray,
                PropertyType = type
            });
        }
Пример #17
0
 internal string GenerateClass(string replacement, SecretsConfig secretsConfig) =>
 $"{AutoGeneratedMessage}\n\nusing System;\n\nnamespace {GetNamespace(secretsConfig.Namespace)}\n{{\n{TabSpace}internal static class {secretsConfig.ClassName}\n{TabSpace}{{\n{replacement}\n{TabSpace}}}\n}}\n";
Пример #18
0
 public LicenseApiService(SecretsConfig config, HttpClient client)
 {
     _client = client;
     _config = config;
 }
        protected override void ExecuteInternal()
        {
            if (!SecretsFileLocations.Any(x => File.Exists(x)))
            {
                Log.LogMessage("No secrets.json was found in either the Project or Solution Directory.");
                return;
            }

            var secrets = GetMergedSecrets();

            var replacement     = string.Empty;
            var safeReplacement = string.Empty;
            var secretsConfig   = Build.GetSecretsConfig();
            var saveConfig      = secretsConfig is null;

            if (saveConfig)
            {
                secretsConfig = new SecretsConfig()
                {
                    ClassName  = "Secrets",
                    Namespace  = "Helpers",
                    Delimiter  = ";",
                    Prefix     = "BuildTools_",
                    Properties = new List <ValueConfig>()
                };
            }

            if (saveConfig)
            {
                if (Build.Configuration.ProjectSecrets is null)
                {
                    Build.Configuration.ProjectSecrets = new Dictionary <string, SecretsConfig>();
                }
                Build.Configuration.ProjectSecrets.Add(Build.ProjectName, secretsConfig);
                Build.SaveConfiguration();
            }

            if (string.IsNullOrEmpty(secretsConfig.Namespace))
            {
                secretsConfig.Namespace = "Helpers";
            }

            if (string.IsNullOrEmpty(secretsConfig.ClassName))
            {
                secretsConfig.ClassName = "Secrets";
            }

            var writer       = GenerateClass(secretsConfig, secrets);
            var secretsClass = writer.ToString();

            Log.LogMessage(Build.Configuration.Debug ? secretsClass : writer.SafeOutput);

            var namespacePath    = string.Join($"{Path.PathSeparator}", secretsConfig.Namespace.Split('.').Where(x => !string.IsNullOrEmpty(x)));
            var fileName         = $"{secretsConfig.ClassName}.g.cs";
            var projectFile      = Path.Combine(namespacePath, fileName);
            var intermediateFile = Path.Combine(Build.IntermediateOutputPath, namespacePath, fileName);

            Log.LogMessage($"Writing Secrets Class to: '{intermediateFile}'");
            var generatedFile = new TaskItem(intermediateFile);

            generatedFile.SetMetadata("Visible", bool.TrueString);
            generatedFile.SetMetadata("Link", projectFile);
            if (File.Exists(projectFile))
            {
                generatedFile.SetMetadata("DependentUpon", $"{secretsConfig.ClassName}.cs");
            }

            Outputs = generatedFile;

            var parentDirectory = Directory.GetParent(intermediateFile);

            if (!Directory.Exists(parentDirectory.FullName))
            {
                Directory.CreateDirectory(parentDirectory.FullName);
            }

            File.WriteAllText(intermediateFile, secretsClass);
        }
Пример #20
0
 public HomeAssistantHttpClientFactory(HomeAssistantConfiguration homeAssistantConfiguration,
                                       SecretsConfig secretsConfig)
 {
     this.homeAssistantConfiguration = homeAssistantConfiguration;
     this.secretsConfig = secretsConfig;
 }