Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using YCompany.Configurations;
using YCompanyPaymentsAPI.Data;
using YCompanyPaymentsAPI.Models;

Expand All @@ -11,17 +13,31 @@ namespace YCompanyThirdPartyAPI.Controllers
public class ThirdPartyController : ControllerBase
{
private readonly InsuranceContext _context;
private readonly MyApiCredentials _myApiCredentials;

public ThirdPartyController(InsuranceContext context)

public ThirdPartyController(InsuranceContext context, IOptions<MyApiCredentials> options)
{
_context = context;
_myApiCredentials = options.Value;
}

//[HttpGet]
//public IEnumerable<Policy> Get()
//{
// List<Policy> result = _context.Policies.ToList();
// return result;
//}

[HttpGet]
public IEnumerable<Policy> Get()
public IActionResult GetKey()
{
List<Policy> result = _context.Policies.ToList();
return result;
var metadata = new MyApiCredentials
{
ApiKey = _myApiCredentials.ApiKey,
UserId = _myApiCredentials.UserId
};
return Ok(metadata);
}
}
}
7 changes: 7 additions & 0 deletions ThirdPartyAndSeed/YCompanyThirdPartyAPI/Program.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Models;
using System.Reflection;
using YCompany.Configurations;
using YCompanyPaymentsAPI.Data;

var builder = WebApplication.CreateBuilder(args);
builder.Host.ConfigureAppConfiguration(((_, configurationBuilder) =>
{
configurationBuilder.AddAmazonSecretsManager("<your region>", "<secret name>");
}));

// Add services to the container.
builder.Services.AddDbContext<InsuranceContext>((serviceProvider, dbContextOptionsBuilder) =>
Expand Down Expand Up @@ -39,6 +45,7 @@


builder.Services.AddControllers();
builder.Services.Configure<MyApiCredentials>(builder.Configuration);
builder.Services.AddCors(corsOptions =>
{
corsOptions.AddDefaultPolicy(corsPolicyBuilder =>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
Expand All @@ -7,18 +7,23 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="AWSSDK.SecretsManager" Version="3.7.302.30" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.14" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.25" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\YCompany.Configurations\YCompany.Configurations.csproj" />
</ItemGroup>

</Project>
2 changes: 1 addition & 1 deletion ThirdPartyAndSeed/YCompanyThirdPartyAPI/appsettings.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost\\MSSQLSERVER02;Database=ycompany;Trusted_Connection=True;TrustServerCertificate=True;"
"DefaultConnection": "Server=IN-PG03521Q;Database=ycompany;Integrated Security=True;TrustServerCertificate=True;"
},
"Logging": {
"LogLevel": {
Expand Down
20 changes: 20 additions & 0 deletions YCompany.Configurations/SecretManagerConfigurationExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using Microsoft.Extensions.Configuration;


namespace YCompany.Configurations
{
public static class CustomConfigurationExtensions
{
public static void AddAmazonSecretsManager(this IConfigurationBuilder configurationBuilder,
string region,
string secretName)
{
var configurationSource =
new AmazonSecretsManagerConfigurationSource(region, secretName);

configurationBuilder.Add(configurationSource);
}
}

}

61 changes: 58 additions & 3 deletions YCompany.Configurations/SecretManagerConfigurationProvider.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,64 @@
using System;
using Amazon;
using Amazon.Runtime;
using Amazon.SecretsManager;
using Amazon.SecretsManager.Model;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;

namespace YCompany.Configurations
{
public class SecretManagerConfigurationProvider
public class AmazonSecretsManagerConfigurationProvider : ConfigurationProvider
{
private readonly string _region;
private readonly string _secretName;

public AmazonSecretsManagerConfigurationProvider(string region, string secretName)
{
_region = region;
_secretName = secretName;
}

public override async void Load()
{
var secret = await GetSecret();

Data = JsonSerializer.Deserialize<Dictionary<string, string>>(secret);
}
private async Task<string> GetSecret()
{
string secretName = "my-key";
string region = "eu-north-1";

AWSCredentials credentials = new BasicAWSCredentials("AKIAYS2NUQSEQSBBZPPA", "uIDN9E+ZZh7nuV0UvmoGEMxfcnCJ8zVdxeY1xdgs");
IAmazonSecretsManager client = new AmazonSecretsManagerClient(credentials, RegionEndpoint.GetBySystemName(region));


GetSecretValueRequest request = new GetSecretValueRequest
{
SecretId = secretName,
VersionStage = "AWSCURRENT", // VersionStage defaults to AWSCURRENT if unspecified.
};

GetSecretValueResponse response;

try
{
response = await client.GetSecretValueAsync(request);
}
catch (Exception e)
{
throw e;
}

string secret = response.SecretString;

return secret;
}
}

}
}

24 changes: 24 additions & 0 deletions YCompany.Configurations/SecretManagerConfigurationSource.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Text;

namespace YCompany.Configurations
{
public class AmazonSecretsManagerConfigurationSource : IConfigurationSource
{
private readonly string _region;
private readonly string _secretName;

public AmazonSecretsManagerConfigurationSource(string region, string secretName)
{
_region = region;
_secretName = secretName;
}

public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new AmazonSecretsManagerConfigurationProvider(_region, _secretName);
}
}
}
9 changes: 9 additions & 0 deletions YCompany.Configurations/SecurityMetadata.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace YCompany.Configurations
{
public class MyApiCredentials
{
public string ApiKey { get; set; }
public string UserId { get; set; }
public string Password { get; set; }
}
}
7 changes: 7 additions & 0 deletions YCompany.Configurations/YCompany.Configurations.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,11 @@
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="AWSSDK.SecretsManager" Version="3.7.302.30" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
<PackageReference Include="System.Text.Json" Version="7.0.0" />
</ItemGroup>

</Project>