Skip to content

Commit

Permalink
Custom Provider Fixes (#2)
Browse files Browse the repository at this point in the history
  • Loading branch information
derekmckinnon authored Dec 8, 2023
1 parent 557a098 commit 75f221e
Show file tree
Hide file tree
Showing 84 changed files with 74,866 additions and 15 deletions.
9 changes: 9 additions & 0 deletions CatConsult.AppConfigConfigurationProvider.sln
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{F4804EB1-9
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CatConsult.AppConfigConfigurationProvider.Tests", "test\CatConsult.AppConfigConfigurationProvider.Tests\CatConsult.AppConfigConfigurationProvider.Tests.csproj", "{5BCD0D06-51FF-4D7B-A859-691F21B736D8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{03616476-829B-41EC-B71C-D789761F4B80}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppConfigTesting", "samples\AppConfigTesting\AppConfigTesting.csproj", "{D8BF1775-AB83-4D76-8BF5-DD650564B089}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -37,9 +41,14 @@ Global
{5BCD0D06-51FF-4D7B-A859-691F21B736D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5BCD0D06-51FF-4D7B-A859-691F21B736D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5BCD0D06-51FF-4D7B-A859-691F21B736D8}.Release|Any CPU.Build.0 = Release|Any CPU
{D8BF1775-AB83-4D76-8BF5-DD650564B089}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D8BF1775-AB83-4D76-8BF5-DD650564B089}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D8BF1775-AB83-4D76-8BF5-DD650564B089}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D8BF1775-AB83-4D76-8BF5-DD650564B089}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{1DBEE150-2B63-4ABF-BFF0-0A10B96243B6} = {2EBD0916-3F74-4F30-B57E-CF1B3689B1E6}
{5BCD0D06-51FF-4D7B-A859-691F21B736D8} = {F4804EB1-93DD-4C2C-AB36-98486FC22471}
{D8BF1775-AB83-4D76-8BF5-DD650564B089} = {03616476-829B-41EC-B71C-D789761F4B80}
EndGlobalSection
EndGlobal
25 changes: 23 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,37 @@ ApplicationId:EnvironmentId:ProfileId[:ReloadAfter]

`ReloadAfter` is an optional 4th parameter that configures the reload/refresh period.
It is an integer that represents time in seconds.
If not specified, it defaults to the provider's default setting, which is 30 seconds.
If not specified, it defaults to the provider's default setting, which is 90 seconds.

The default `ReloadAfter` setting can be overridden as well:

```json
{
"AppConfig": {
"Defaults": {
"ReloadAfter": 90
"ReloadAfter": 120
}
}
}
```

## Sample

A sample ASP.NET Web Application is available in the `samples/AppConfigTesting` folder.

In your own AWS environment, copy the contents of `yamltest.yml` into a new AppConfig freeform configuration profile.

Then, use `dotnet user-secrets` to specify the AppConfig profile:

```shell
dotnet user-secrets set "AppConfig:Profiles:0" "abc1234:def5678:ghi9123"
```

Finally, ensure that you have the correct AWS credentials/profile configured in your environment, and run the sample:

```shell
dotnet run
```

Experiment by changing the configuration on AppConfig and deploying. After a while, you should see the application reload the configuration automatically
when you refresh the home page.
14 changes: 14 additions & 0 deletions samples/AppConfigTesting/AppConfigTesting.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>6e991e9d-ddfa-43e1-b82e-4f95fdabeaf4</UserSecretsId>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\src\CatConsult.AppConfigConfigurationProvider\CatConsult.AppConfigConfigurationProvider.csproj" />
</ItemGroup>

</Project>
26 changes: 26 additions & 0 deletions samples/AppConfigTesting/Pages/Error.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
@page
@model ErrorModel
@{
ViewData["Title"] = "Error";
}

<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>

@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}

<h3>Development Mode</h3>
<p>
Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
27 changes: 27 additions & 0 deletions samples/AppConfigTesting/Pages/Error.cshtml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace AppConfigTesting.Pages;

[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
[IgnoreAntiforgeryToken]
public class ErrorModel : PageModel
{
public string? RequestId { get; set; }

public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);

private readonly ILogger<ErrorModel> _logger;

public ErrorModel(ILogger<ErrorModel> logger)
{
_logger = logger;
}

public void OnGet()
{
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
}
}

14 changes: 14 additions & 0 deletions samples/AppConfigTesting/Pages/Index.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
@page
@using Microsoft.Extensions.Options
@model IndexModel
@inject IOptionsSnapshot<YamlTest> Options
@{
ViewData["Title"] = "Home page";
}

<div class="text-center">
<p>Name: @Options.Value.Person?.Name</p>
<p>Age: @Options.Value.Person?.Age</p>
<br>
<p>Is this a test? @Options.Value.Test</p>
</div>
19 changes: 19 additions & 0 deletions samples/AppConfigTesting/Pages/Index.cshtml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace AppConfigTesting.Pages;

public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;

public IndexModel(ILogger<IndexModel> logger)
{
_logger = logger;
}

public void OnGet()
{

}
}
8 changes: 8 additions & 0 deletions samples/AppConfigTesting/Pages/Privacy.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
@page
@model PrivacyModel
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p>Use this page to detail your site's privacy policy.</p>
19 changes: 19 additions & 0 deletions samples/AppConfigTesting/Pages/Privacy.cshtml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace AppConfigTesting.Pages;

public class PrivacyModel : PageModel
{
private readonly ILogger<PrivacyModel> _logger;

public PrivacyModel(ILogger<PrivacyModel> logger)
{
_logger = logger;
}

public void OnGet()
{
}
}

51 changes: 51 additions & 0 deletions samples/AppConfigTesting/Pages/Shared/_Layout.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - AppConfigTesting</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/AppConfigTesting.styles.css" asp-append-version="true" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand" asp-area="" asp-page="/Index">AppConfigTesting</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>

<footer class="border-top footer text-muted">
<div class="container">
&copy; 2023 - AppConfigTesting - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>

<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>

@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
48 changes: 48 additions & 0 deletions samples/AppConfigTesting/Pages/Shared/_Layout.cshtml.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
for details on configuring this project to bundle and minify static web assets. */

a.navbar-brand {
white-space: normal;
text-align: center;
word-break: break-all;
}

a {
color: #0077cc;
}

.btn-primary {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}

.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}

.border-top {
border-top: 1px solid #e5e5e5;
}
.border-bottom {
border-bottom: 1px solid #e5e5e5;
}

.box-shadow {
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
}

button.accept-policy {
font-size: 1rem;
line-height: inherit;
}

.footer {
position: absolute;
bottom: 0;
width: 100%;
white-space: nowrap;
line-height: 60px;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
3 changes: 3 additions & 0 deletions samples/AppConfigTesting/Pages/_ViewImports.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@using AppConfigTesting
@namespace AppConfigTesting.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
3 changes: 3 additions & 0 deletions samples/AppConfigTesting/Pages/_ViewStart.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@{
Layout = "_Layout";
}
46 changes: 46 additions & 0 deletions samples/AppConfigTesting/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
using CatConsult.AppConfigConfigurationProvider;

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddAppConfig();

// Add services to the container.
builder.Services.AddRazorPages();

builder.Services.AddOptions<YamlTest>()
.BindConfiguration("YamlTest");

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

public class YamlTest
{
public bool Test { get; set; }

public Person Person { get; set; } = new();
}

public class Person
{
public string Name { get; set; } = string.Empty;

public int Age { get; set; }
}
28 changes: 28 additions & 0 deletions samples/AppConfigTesting/Properties/launchSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:42296",
"sslPort": 44307
}
},
"profiles": {
"AppConfigTesting": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7150;http://localhost:5018",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Loading

0 comments on commit 75f221e

Please sign in to comment.