Example #1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            try
            {
                services.Configure <CookiePolicyOptions>(options =>
                {
                    // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                    options.CheckConsentNeeded    = context => true;
                    options.MinimumSameSitePolicy = SameSiteMode.None;
                });

                services.AddMvc(opt => { opt.EnableEndpointRouting = true; });
                services.AddControllersWithViews().AddRazorRuntimeCompilation();

                services.AddControllers();
                services.AddRazorPages();
                services.AddCors();
                services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
                services.AddTransient <IPrincipal>(provider => provider.GetService <IHttpContextAccessor>().HttpContext.User);

                // APPSETTINGS
                var appSettings = AppSettingsBuilder.Build();
                services.AddSingleton(x => appSettings);

                AddBusinesLogic(services, Configuration, _env, appSettings);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
Example #2
0
        public static void AddStartupEnvironmentsWithServices(
            string solutionDirectory,
            string projectName,
            string dbName,
            List <ApiEnvironment> environments,
            SwaggerConfig swaggerConfig,
            int port,
            bool useJwtAuth,
            string projectBaseName,
            IFileSystem fileSystem)
        {
            AppSettingsBuilder.CreateWebApiAppSettings(solutionDirectory, dbName, projectBaseName);

            if (environments.Where(e => e.EnvironmentName == "Development").Count() == 0)
            {
                environments.Add(new ApiEnvironment {
                    EnvironmentName = "Development", ProfileName = $"{projectName} (Development)"
                });
            }

            foreach (var env in environments)
            {
                WebApiLaunchSettingsModifier.AddProfile(solutionDirectory, env, port, projectBaseName);
            }
            if (!swaggerConfig.IsSameOrEqualTo(new SwaggerConfig()))
            {
                SwaggerBuilder.RegisterSwaggerInStartup(solutionDirectory, projectBaseName);
            }
        }
 public AppSettingsDecoratorBuilder(
     [NotNull] AppSettingsBuilder appSettingsBuilder,
     [NotNull] IKeyValueConfigurationDecorator decorator)
 {
     AppSettingsBuilder = appSettingsBuilder ?? throw new ArgumentNullException(nameof(appSettingsBuilder));
     Decorator          = decorator ?? throw new ArgumentNullException(nameof(decorator));
 }
Example #4
0
        private static void AddStartupEnvironmentsWithServices(string solutionDirectory, ApiTemplate template)
        {
            // add a development environment by default for local work if none exists
            if (template.Environments.Where(e => e.EnvironmentName == "Development").Count() == 0)
            {
                template.Environments.Add(new ApiEnvironment {
                    EnvironmentName = "Development", ProfileName = $"{template.SolutionName} (Development)"
                });
            }

            foreach (var env in template.Environments)
            {
                // default startup is already built in cleanup phase
                if (env.EnvironmentName != "Startup")
                {
                    StartupBuilder.CreateStartup(solutionDirectory, env.EnvironmentName, template);
                }

                AppSettingsBuilder.CreateAppSettings(solutionDirectory, env, template.DbContext.DatabaseName, template);
                LaunchSettingsModifier.AddProfile(solutionDirectory, env);

                //services
                if (!template.SwaggerConfig.IsSameOrEqualTo(new SwaggerConfig()))
                {
                    SwaggerBuilder.RegisterSwaggerInStartup(solutionDirectory, env);
                }
            }
        }
        private static AppSettingsBuilder AddUserSettings(this AppSettingsBuilder builder, string?basePath)
        {
            if (string.IsNullOrWhiteSpace(basePath))
            {
                return(builder);
            }

            return(builder.Add(new UserJsonConfiguration(basePath)));
        }
 protected virtual void Dispose(bool isDisposing)
 {
     if (isDisposing && !_isDisposed)
     {
         Previous?.Dispose();
         AppSettingsBuilder?.Dispose();
         _isDisposed = true;
     }
 }
Example #7
0
            public void Then_the_user_should_have_no_special_claims()
            {
                _action.ActionAgainst.Email = "*****@*****.**";
                AppSettingsBuilder.WithSetting(AppSettingKey.AdminEmailWhitelist, "|[email protected]|");

                PerformAction();

                Assert.IsEmpty(_action.ActionAgainst.Claims);
            }
Example #8
0
            public void Then_the_user_should_have_special_claims()
            {
                _action.ActionAgainst.Email = "*****@*****.**";
                AppSettingsBuilder.WithSetting(AppSettingKey.AdminEmailWhitelist, String.Format("|{0}|", _action.ActionAgainst.Email));

                PerformAction();

                Assert.IsNotEmpty(_action.ActionAgainst.Claims);
            }
        private static AppSettingsBuilder AddReflectionSettings(this AppSettingsBuilder appSettingsBuilder,
                                                                IReadOnlyCollection <Assembly>?scanAssemblies,
                                                                IKeyValueConfiguration?configuration = null)
        {
            if (scanAssemblies is null)
            {
                return(appSettingsBuilder);
            }

            foreach (var currentAssembly in scanAssemblies.Where(assembly => assembly.FullName is { })
Example #10
0
        /// <summary>
        /// Adds an <see cref="IConfigurationSource"/> for app settings to the given <see cref="IConfigurationBuilder"/>.
        /// </summary>
        /// <param name="configurationBuilder">The configuration builder.</param>
        /// <param name="buildAction">The action to build app settings.</param>
        /// <returns>The configuration builder.</returns>
        /// <remarks>
        /// This extension provides a simple way to add default values as well as descriptions for app settings
        /// directly into an application. The source for these is a simple in-memory collection, and additional
        /// key/value pairs are added so that the initial value and descriptions of these settings can still be
        /// retrieved even if the settings themselves get overridden by another configuration source.
        /// </remarks>
        public static IConfigurationBuilder AddAppSettings(this IConfigurationBuilder configurationBuilder, Action <IAppSettingsBuilder> buildAction)
        {
            IAppSettingsBuilder appSettingsBuilder = new AppSettingsBuilder();

            buildAction(appSettingsBuilder);

            IEnumerable <KeyValuePair <string, string> > appSettings = appSettingsBuilder.Build();

            configurationBuilder.AddInMemoryCollection(appSettings);
            return(configurationBuilder);
        }
        public static AppSettingsBuilder AddEnvironmentVariables(
            this AppSettingsBuilder builder,
            IReadOnlyDictionary <string, string> environmentVariables)
        {
            var nameValueCollection = new NameValueCollection();

            foreach (var environmentVariable in environmentVariables)
            {
                nameValueCollection.Add(environmentVariable.Key, environmentVariable.Value);
            }

            return(builder.Add(new InMemoryKeyValueConfiguration(nameValueCollection)));
        }
        public static AppSettingsBuilder AddCommandLineArgsSettings(
            this AppSettingsBuilder builder,
            IEnumerable <string> args)
        {
            if (args is null)
            {
                return(builder);
            }

            var inMemoryKeyValueConfiguration = args.ToKeyValueConfiguration();

            return(builder.Add(inMemoryKeyValueConfiguration));
        }
        private static AppSettingsBuilder AddLoggingSettings(this AppSettingsBuilder builder)
        {
            var loggingSettings = new NameValueCollection
            {
                { "Logging:LogLevel:Default", "Warning" },
                { "Logging:LogLevel:System.Net.Http.HttpClient", "Warning" },
                { "LogLevel:System.Net.Http.HttpClient", "Warning" }
            };

            var memoryKeyValueConfiguration = new InMemoryKeyValueConfiguration(loggingSettings);

            return(builder.Add(memoryKeyValueConfiguration));
        }
Example #14
0
        public static AppSettingsBuilder AddUserSettings([NotNull] this AppSettingsBuilder builder, string basePath)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (string.IsNullOrWhiteSpace(basePath))
            {
                return(builder);
            }

            return(builder.Add(new UserJsonConfiguration(basePath)));
        }
Example #15
0
        public static AppSettingsBuilder AddReflectionSettings(
            [NotNull] this AppSettingsBuilder appSettingsBuilder,
            IEnumerable <Assembly>?scanAssemblies,
            Action <Exception>?exceptionHandler = null)
        {
            if (appSettingsBuilder is null)
            {
                throw new ArgumentNullException(nameof(appSettingsBuilder));
            }

            if (scanAssemblies is null)
            {
                return(appSettingsBuilder);
            }

            foreach (var currentAssembly in scanAssemblies.OrderBy(assembly => assembly.FullName))
            {
                if (currentAssembly.IsDynamic)
                {
                    continue;
                }

                try
                {
                    appSettingsBuilder =
                        appSettingsBuilder.Add(
                            new ReflectionKeyValueConfiguration(currentAssembly));
                }
                catch (FileLoadException ex)
                {
                    exceptionHandler?.Invoke(ex);
                }
                catch (FileNotFoundException ex)
                {
                    exceptionHandler?.Invoke(ex);
                }
                catch (TypeLoadException ex)
                {
                    exceptionHandler?.Invoke(ex);
                }
                catch (ReflectionTypeLoadException ex)
                {
                    exceptionHandler?.Invoke(ex);
                }
            }

            return(appSettingsBuilder);
        }
Example #16
0
        public void AppSettingIsAddForEverySettingNode()
        {
            AppSettingsNode settingsNode = new AppSettingsNode();

            base.ApplicationNode.AddNode(settingsNode);

            settingsNode.AddNode(new AppSettingNode("key", "value"));

            AppSettingsBuilder settingsBuilder = new AppSettingsBuilder(settingsNode);
            AppSettingsSection settingsSection = settingsBuilder.Build();

            Assert.IsNotNull(settingsSection);
            Assert.AreEqual(1, settingsSection.Settings.Count);
            Assert.AreEqual("key", settingsSection.Settings.AllKeys[0]);
            Assert.AreEqual("value", settingsSection.Settings["key"].Value);
        }
Example #17
0
        public static void AddAuthServer(string solutionDirectory, IFileSystem fileSystem, AuthServerTemplate template)
        {
            SolutionBuilder.BuildAuthServerProject(solutionDirectory, template.Name, fileSystem);

            AuthServerLaunchSettingsBuilder.CreateLaunchSettings(solutionDirectory, template.Name, template.Port, fileSystem);
            StartupBuilder.CreateAuthServerStartup(solutionDirectory, template.Name, fileSystem);
            ProgramBuilder.CreateAuthServerProgram(solutionDirectory, template.Name, fileSystem);
            AuthServerConfigBuilder.CreateConfig(solutionDirectory, template, fileSystem);
            AppSettingsBuilder.CreateAuthServerAppSettings(solutionDirectory, template.Name, fileSystem);

            AuthServerPackageJsonBuilder.CreatePackageJson(solutionDirectory, template.Name, fileSystem);
            AuthServerTailwindConfigBuilder.CreateTailwindConfig(solutionDirectory, template.Name, fileSystem);
            AuthServerPostCssBuilder.CreatePostCss(solutionDirectory, template.Name, fileSystem);

            // controllers
            AuthServerAccountControllerBuilder.CreateAccountController(solutionDirectory, template.Name, fileSystem);
            AuthServerExternalControllerBuilder.CreateExternalController(solutionDirectory, template.Name, fileSystem);
            // AuthServerHomeControllerBuilder.CreateHomeController(projectDirectory, template.Name, fileSystem);

            // view models + models
            AuthServerAccountViewModelsBuilder.CreateViewModels(solutionDirectory, template.Name, fileSystem);
            AuthServerSharedViewModelsBuilder.CreateViewModels(solutionDirectory, template.Name, fileSystem);
            AuthServerExternalModelsBuilder.CreateModels(solutionDirectory, template.Name, fileSystem);
            AuthServerAccountModelsBuilder.CreateModels(solutionDirectory, template.Name, fileSystem);

            // views
            AuthServerAccountViewsBuilder.CreateLoginView(solutionDirectory, template.Name, fileSystem);
            AuthServerAccountViewsBuilder.CreateLogoutView(solutionDirectory, template.Name, fileSystem);
            AuthServerAccountViewsBuilder.CreateAccessDeniedView(solutionDirectory, template.Name, fileSystem);
            AuthServerSharedViewsBuilder.CreateLayoutView(solutionDirectory, template.Name, fileSystem);
            AuthServerSharedViewsBuilder.CreateStartView(solutionDirectory, template.Name, fileSystem);
            AuthServerSharedViewsBuilder.CreateViewImports(solutionDirectory, template.Name, fileSystem);

            // css files for TW
            AuthServerCssBuilder.CreateOutputCss(solutionDirectory, template.Name, fileSystem);
            AuthServerCssBuilder.CreateSiteCss(solutionDirectory, template.Name, fileSystem);

            // helpers
            AuthServerTestUsersBuilder.CreateTestModels(solutionDirectory, template.Name, fileSystem);
            AuthServerExtensionsBuilder.CreateExtensions(solutionDirectory, template.Name, fileSystem);
            SecurityHeadersAttributeBuilder.CreateAttribute(solutionDirectory, template.Name, fileSystem);
        }
Example #18
0
 static async Task Main(string[] args)
 {
     await new HostBuilder()
     .ConfigureHostConfiguration((configHost) =>
     {
         configHost.AddEnvironmentVariables("DOTNET_");
     })
     .ConfigureAppConfiguration((hostBuilder, config) =>
     {
         config.SetBasePath(Directory.GetCurrentDirectory());
         config.AddJsonFile("appsettings.json", optional: true);
         config.AddJsonFile($"appsettings.{hostBuilder.HostingEnvironment.EnvironmentName}.json", optional: true);
         config.AddEnvironmentVariables("fiksArkivMock_");
     })
     .ConfigureServices((hostContext, services) =>
     {
         services.AddSingleton(AppSettingsBuilder.CreateAppSettings(hostContext.Configuration));
         services.AddHostedService <ArkivService>();
     })
     .RunConsoleAsync();
 }
        public static MultiSourceKeyValueConfiguration InitializeConfiguration(
            [NotNull] Func <string, string> basePath,
            ILogger logger)
        {
            if (basePath == null)
            {
                throw new ArgumentNullException(nameof(basePath));
            }

            string environmentBasedSettingsPath =
                Environment.GetEnvironmentVariable(Configuration.ConfigurationConstants.JsonSettingsFile);

            string environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production";

            AppSettingsBuilder appSettingsBuilder = KeyValueConfigurationManager
                                                    .Add(new ReflectionKeyValueConfiguration(typeof(ConfigurationInitialization).Assembly))
                                                    .Add(new JsonKeyValueConfiguration(basePath("settings.json"), false))
                                                    .Add(new JsonKeyValueConfiguration(basePath($"settings.{environmentName}.json"), false))
                                                    .Add(new JsonKeyValueConfiguration(basePath($"settings.{Environment.MachineName}.json"), false));

            if (environmentBasedSettingsPath.HasValue() && File.Exists(environmentBasedSettingsPath))
            {
                appSettingsBuilder =
                    appSettingsBuilder.Add(new JsonKeyValueConfiguration(environmentBasedSettingsPath,
                                                                         true));

                logger.Information("Added environment based configuration from key '{Key}', file '{File}'", Configuration.ConfigurationConstants.JsonSettingsFile, environmentBasedSettingsPath);
            }

            MultiSourceKeyValueConfiguration multiSourceKeyValueConfiguration = appSettingsBuilder
                                                                                .Add(new EnvironmentVariableKeyValueConfigurationSource())
                                                                                .Add(new UserConfiguration())
                                                                                .DecorateWith(new ExpandKeyValueConfigurationDecorator())
                                                                                .Build();

            logger.Information("Configuration done using chain {Chain}",
                               multiSourceKeyValueConfiguration.SourceChain);

            return(multiSourceKeyValueConfiguration);
        }
Example #20
0
        public static void Main(string[] args)
        {
            var       appSettings  = new AppSettingsBuilder().Build();
            var       dataReciever = new DataReciever();
            var       stack        = new ConcurrentStack <int>();
            const int numbersCount = 2018;

            using (var coundownEvent = new CountdownEvent(numbersCount))
            {
                Enumerable
                .Range(0, numbersCount)
                .ToList()
                .ForEach(i =>
                {
                    var state = new DataRecieverTaskState(i + 1, appSettings.Host, appSettings.Port, stack, coundownEvent);
                    ThreadPool.QueueUserWorkItem(dataReciever.PrcessNumber, state);
                });

                coundownEvent.Wait();
            }
            var mediana = CalculateMediana(stack);

            Console.Out.WriteLine($"Mediana: {mediana}");
        }
        public static MultiSourceKeyValueConfiguration InitializeConfiguration(
            IReadOnlyList <string> args,
            [NotNull] Func <string, string> basePath,
            ILogger logger,
            IReadOnlyCollection <Assembly> scanAssemblies,
            string contentBasePath)
        {
            if (basePath == null)
            {
                throw new ArgumentNullException(nameof(basePath));
            }

            string environmentBasedSettingsPath =
                Environment.GetEnvironmentVariable(ConfigurationConstants.JsonSettingsFile);

            string environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production";

            AppSettingsBuilder appSettingsBuilder = KeyValueConfigurationManager
                                                    .Add(new InMemoryKeyValueConfiguration(new NameValueCollection()));

            foreach (Assembly currentAssembly in scanAssemblies.OrderBy(assembly => assembly.FullName))
            {
                appSettingsBuilder =
                    appSettingsBuilder.Add(
                        new ReflectionKeyValueConfiguration(currentAssembly));
            }

            var loggingSettings = new NameValueCollection
            {
                { "Logging:LogLevel:Default", "Warning" },
                { "Logging:LogLevel:System.Net.Http.HttpClient", "Warning" },
                { "LogLevel:System.Net.Http.HttpClient", "Warning" }
            };

            FileInfo MachineSpecificConfig(DirectoryInfo directoryInfo)
            {
                return(directoryInfo.GetFiles($"settings.{Environment.MachineName}.json").SingleOrDefault());
            }

            string MachineSpecificFile()
            {
                var baseDirectory = new DirectoryInfo(basePath(null));

                FileInfo machineSpecificConfig = null;

                DirectoryInfo currentDirectory = baseDirectory;

                while (machineSpecificConfig is null && currentDirectory != null)
                {
                    try
                    {
                        machineSpecificConfig = MachineSpecificConfig(currentDirectory);

                        currentDirectory = currentDirectory.Parent;
                    }
                    catch (Exception ex) when(!ex.IsFatal())
                    {
                        logger.Warning(ex, "Could not find machine specific config file in any parent directory starting with base directory {BaseDirectory}", baseDirectory.FullName);
                        return(null);
                    }
                }

                return(machineSpecificConfig?.FullName);
            }

            appSettingsBuilder = appSettingsBuilder
                                 .Add(new InMemoryKeyValueConfiguration(loggingSettings))
                                 .Add(new JsonKeyValueConfiguration(basePath("settings.json"), false))
                                 .Add(new JsonKeyValueConfiguration(basePath($"settings.{environmentName}.json"), false));

            string machineSpecificFile = MachineSpecificFile();

            if (!string.IsNullOrWhiteSpace(machineSpecificFile))
            {
                appSettingsBuilder = appSettingsBuilder.Add(new JsonKeyValueConfiguration(machineSpecificFile));
            }

            if (environmentBasedSettingsPath.HasValue() && File.Exists(environmentBasedSettingsPath))
            {
                appSettingsBuilder =
                    appSettingsBuilder.Add(new JsonKeyValueConfiguration(environmentBasedSettingsPath,
                                                                         true));

                logger.Information("Added environment based configuration from key '{Key}', file '{File}'",
                                   ConfigurationConstants.JsonSettingsFile,
                                   environmentBasedSettingsPath);
            }

            var nameValueCollection = new NameValueCollection(StringComparer.OrdinalIgnoreCase);

            const char variableAssignmentCharacter = '=';

            foreach (string arg in args.Where(a => a.Count(c => c == variableAssignmentCharacter) == 1 && a.Length >= 3))
            {
                string[] parts = arg.Split(variableAssignmentCharacter, StringSplitOptions.RemoveEmptyEntries);

                if (parts.Length != 2)
                {
                    Console.WriteLine($"arg {arg} has length {parts.Length}");
                    continue;
                }

                string key   = parts[0];
                string value = parts[1];

                nameValueCollection.Add(key, value);
            }

            var inMemoryKeyValueConfiguration = new InMemoryKeyValueConfiguration(nameValueCollection);

            MultiSourceKeyValueConfiguration multiSourceKeyValueConfiguration = appSettingsBuilder
                                                                                .Add(new JsonKeyValueConfiguration(Path.Combine(contentBasePath, "config.user"), throwWhenNotExists: false))
                                                                                .Add(new EnvironmentVariableKeyValueConfigurationSource())
                                                                                .Add(inMemoryKeyValueConfiguration)
                                                                                .DecorateWith(new ExpandKeyValueConfigurationDecorator())
                                                                                .Build();

            logger.Information("Configuration done using chain {Chain}",
                               multiSourceKeyValueConfiguration.SourceChain);

            return(multiSourceKeyValueConfiguration);
        }
Example #22
0
 public DecoratorDelegator(AppSettingsBuilder appSettingsBuild) : base(appSettingsBuild, new NullDecorator())
 {
 }
 public static AppSettingsBuilder Add(this AppSettingsBuilder builder, AppSettingsBuilder next) =>
 builder.Add(next.KeyValueConfiguration);