diff --git a/Framework/YCompany.Claims.Logging/Logger.cs b/Framework/YCompany.Claims.Logging/Logger.cs index 8984c36e..5a178977 100644 --- a/Framework/YCompany.Claims.Logging/Logger.cs +++ b/Framework/YCompany.Claims.Logging/Logger.cs @@ -22,6 +22,7 @@ public void Log(LogLevel logLevel, EventId eventId, TState state, Except if (IsEnabled(logLevel)) { // send log to queue for open search processing. + Console.WriteLine($"[{logLevel}] ({categoryName}) - {formatter(state, exception)}"); } } } diff --git a/Services/YCompanyIdentityServer/YCompanyIdentityServer/YCompanyIdentityServer.csproj b/Services/YCompanyIdentityServer/YCompanyIdentityServer/YCompanyIdentityServer.csproj index 975c4a07..8d88275a 100644 --- a/Services/YCompanyIdentityServer/YCompanyIdentityServer/YCompanyIdentityServer.csproj +++ b/Services/YCompanyIdentityServer/YCompanyIdentityServer/YCompanyIdentityServer.csproj @@ -12,12 +12,12 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/Services/YCompanyIdentityServer/YCompanyIdentityServer/appsettings.json b/Services/YCompanyIdentityServer/YCompanyIdentityServer/appsettings.json index 1f856020..28c51f9d 100644 --- a/Services/YCompanyIdentityServer/YCompanyIdentityServer/appsettings.json +++ b/Services/YCompanyIdentityServer/YCompanyIdentityServer/appsettings.json @@ -1,7 +1,7 @@ { "ConnectionStrings": { - "DefaultConnection": "Server=localhost\\MSSQLSERVER02;Database=ycompany;Trusted_Connection=True;", - "IdentityServer": "Server=localhost\\MSSQLSERVER02;Database=ycompany;Trusted_Connection=True;" + "DefaultConnection": "Server=IN-PG0351ZV;Database=ycompany;Trusted_Connection=True;Integrated Security=True;TrustServerCertificate=True", + "IdentityServer": "Server=IN-PG0351ZV;Database=ycompany;Trusted_Connection=True;Integrated Security=True;TrustServerCertificate=True" }, "Logging": { "LogLevel": { diff --git a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Controllers/ThirdPartyController.cs b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Controllers/ThirdPartyController.cs index cc3e3fc8..430f9c25 100644 --- a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Controllers/ThirdPartyController.cs +++ b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Controllers/ThirdPartyController.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using YCompany.Configurations; using YCompanyPaymentsAPI.Data; using YCompanyPaymentsAPI.Models; @@ -11,10 +12,12 @@ namespace YCompanyThirdPartyAPI.Controllers public class ThirdPartyController : ControllerBase { private readonly InsuranceContext _context; + private readonly IConfiguration _configuration; - public ThirdPartyController(InsuranceContext context) + public ThirdPartyController(InsuranceContext context, IConfiguration configuration) { _context = context; + _configuration = configuration; } [HttpGet] @@ -23,5 +26,17 @@ public IEnumerable Get() List result = _context.Policies.ToList(); return result; } + + //[HttpGet] + //public IActionResult GetValue() + //{ + // var metadata = new SecretManagerConfigurationSecurityMetadata + // { + // Key1 = _configuration["Key1"], + // Key2 = _configuration["Key2"] + // }; + // Console.WriteLine(metadata); + // return Ok(metadata); + //} } } \ No newline at end of file diff --git a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Migrations/20240215104723_init.Designer.cs b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Migrations/20240215104723_init.Designer.cs new file mode 100644 index 00000000..9df6c9bb --- /dev/null +++ b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Migrations/20240215104723_init.Designer.cs @@ -0,0 +1,386 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using YCompanyPaymentsAPI.Data; + +#nullable disable + +namespace YCompanyThirdPartyAPI.Migrations +{ + [DbContext(typeof(InsuranceContext))] + [Migration("20240215104723_init")] + partial class init + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.Coverage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Code") + .HasColumnType("nvarchar(max)"); + + b.Property("CoverageGroup") + .HasColumnType("nvarchar(max)"); + + b.Property("CoverageName") + .HasColumnType("nvarchar(max)"); + + b.Property("IsPolicyCoverage") + .HasColumnType("bit"); + + b.Property("IsVehicleCoverage") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.ToTable("Coverage"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.Driver", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("CreatedDate") + .HasColumnType("datetime2"); + + b.Property("DoB") + .HasColumnType("datetime2"); + + b.Property("EmailAddress") + .HasColumnType("nvarchar(max)"); + + b.Property("FirstName") + .HasColumnType("nvarchar(max)"); + + b.Property("IsPrimaryPolicyHolder") + .HasColumnType("bit"); + + b.Property("LastName") + .HasColumnType("nvarchar(max)"); + + b.Property("LicenseIssuedDate") + .HasColumnType("datetime2"); + + b.Property("LicenseIssuedState") + .HasColumnType("nvarchar(max)"); + + b.Property("LicenseNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PolicyId") + .HasColumnType("int"); + + b.Property("RelationWithPrimaryPolicyHolder") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("PolicyId"); + + b.ToTable("Driver"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.Policy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("AdditionalInfo") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("CreatedDate") + .HasColumnType("datetime2"); + + b.Property("PaymentOption") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PolicyEffectiveDate") + .HasColumnType("datetime2"); + + b.Property("PolicyExpirationDate") + .HasColumnType("datetime2"); + + b.Property("PolicyName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PolicyNumber") + .HasColumnType("int"); + + b.Property("TotalAmount") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Policies"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.PolicyCoverage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("CoverageId") + .HasColumnType("int"); + + b.Property("CreatedDate") + .HasColumnType("datetime2"); + + b.Property("PolicyId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CoverageId"); + + b.HasIndex("PolicyId"); + + b.ToTable("PolicyCoverage"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.Vehicle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("Color") + .HasColumnType("nvarchar(max)"); + + b.Property("Model") + .HasColumnType("nvarchar(max)"); + + b.Property("PolicyId") + .HasColumnType("int"); + + b.Property("VehicleNumberPlate") + .HasColumnType("nvarchar(max)"); + + b.Property("VehicleYear") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("PolicyId") + .IsUnique(); + + b.ToTable("Vehicles"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.VehicleCoverage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("CoverageId") + .HasColumnType("int"); + + b.Property("CreatedDate") + .HasColumnType("datetime2"); + + b.Property("VehicleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CoverageId"); + + b.HasIndex("VehicleId"); + + b.ToTable("VehicleCoverage"); + }); + + modelBuilder.Entity("YCompanyThirdPartyAPI.Models.VehicleDriver", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Active") + .HasColumnType("bit"); + + b.Property("CreatedDate") + .HasColumnType("datetime2"); + + b.Property("DriveForBusiness") + .HasColumnType("nvarchar(max)"); + + b.Property("DriverId") + .HasColumnType("int"); + + b.Property("EverydayMileage") + .HasColumnType("real"); + + b.Property("IsPrimaryDriver") + .HasColumnType("bit"); + + b.Property("VehicleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("DriverId"); + + b.HasIndex("VehicleId"); + + b.ToTable("VehicleDriver"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.Driver", b => + { + b.HasOne("YCompanyPaymentsAPI.Models.Policy", "Policy") + .WithMany("Drivers") + .HasForeignKey("PolicyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Policy"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.PolicyCoverage", b => + { + b.HasOne("YCompanyPaymentsAPI.Models.Coverage", "Coverage") + .WithMany("PolicyCoverages") + .HasForeignKey("CoverageId") + .IsRequired(); + + b.HasOne("YCompanyPaymentsAPI.Models.Policy", "Policy") + .WithMany("PolicyCoverages") + .HasForeignKey("PolicyId") + .IsRequired(); + + b.Navigation("Coverage"); + + b.Navigation("Policy"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.Vehicle", b => + { + b.HasOne("YCompanyPaymentsAPI.Models.Policy", "Policy") + .WithOne("Vehicle") + .HasForeignKey("YCompanyPaymentsAPI.Models.Vehicle", "PolicyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Policy"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.VehicleCoverage", b => + { + b.HasOne("YCompanyPaymentsAPI.Models.Coverage", "Coverage") + .WithMany("VehicleCoverages") + .HasForeignKey("CoverageId") + .IsRequired(); + + b.HasOne("YCompanyPaymentsAPI.Models.Vehicle", "Vehicle") + .WithMany("VehicleCoverages") + .HasForeignKey("VehicleId") + .IsRequired(); + + b.Navigation("Coverage"); + + b.Navigation("Vehicle"); + }); + + modelBuilder.Entity("YCompanyThirdPartyAPI.Models.VehicleDriver", b => + { + b.HasOne("YCompanyPaymentsAPI.Models.Driver", "Driver") + .WithMany("VehicleDrivers") + .HasForeignKey("DriverId") + .IsRequired(); + + b.HasOne("YCompanyPaymentsAPI.Models.Vehicle", "Vehicle") + .WithMany("VehicleDrivers") + .HasForeignKey("VehicleId") + .IsRequired(); + + b.Navigation("Driver"); + + b.Navigation("Vehicle"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.Coverage", b => + { + b.Navigation("PolicyCoverages"); + + b.Navigation("VehicleCoverages"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.Driver", b => + { + b.Navigation("VehicleDrivers"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.Policy", b => + { + b.Navigation("Drivers"); + + b.Navigation("PolicyCoverages"); + + b.Navigation("Vehicle"); + }); + + modelBuilder.Entity("YCompanyPaymentsAPI.Models.Vehicle", b => + { + b.Navigation("VehicleCoverages"); + + b.Navigation("VehicleDrivers"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Migrations/20240215104723_init.cs b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Migrations/20240215104723_init.cs new file mode 100644 index 00000000..a817a9a6 --- /dev/null +++ b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Migrations/20240215104723_init.cs @@ -0,0 +1,259 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace YCompanyThirdPartyAPI.Migrations +{ + /// + public partial class init : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Policy_Coverage"); + + migrationBuilder.DropTable( + name: "Vehicle_Coverage"); + + migrationBuilder.DropTable( + name: "Vehicle_Driver"); + + migrationBuilder.CreateTable( + name: "PolicyCoverage", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Active = table.Column(type: "bit", nullable: false), + CreatedDate = table.Column(type: "datetime2", nullable: false), + PolicyId = table.Column(type: "int", nullable: false), + CoverageId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_PolicyCoverage", x => x.Id); + table.ForeignKey( + name: "FK_PolicyCoverage_Coverage_CoverageId", + column: x => x.CoverageId, + principalTable: "Coverage", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_PolicyCoverage_Policies_PolicyId", + column: x => x.PolicyId, + principalTable: "Policies", + principalColumn: "Id"); + }); + + migrationBuilder.CreateTable( + name: "VehicleCoverage", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Active = table.Column(type: "bit", nullable: false), + CreatedDate = table.Column(type: "datetime2", nullable: false), + VehicleId = table.Column(type: "int", nullable: false), + CoverageId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_VehicleCoverage", x => x.Id); + table.ForeignKey( + name: "FK_VehicleCoverage_Coverage_CoverageId", + column: x => x.CoverageId, + principalTable: "Coverage", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_VehicleCoverage_Vehicles_VehicleId", + column: x => x.VehicleId, + principalTable: "Vehicles", + principalColumn: "Id"); + }); + + migrationBuilder.CreateTable( + name: "VehicleDriver", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + DriveForBusiness = table.Column(type: "nvarchar(max)", nullable: true), + IsPrimaryDriver = table.Column(type: "bit", nullable: false), + EverydayMileage = table.Column(type: "real", nullable: false), + CreatedDate = table.Column(type: "datetime2", nullable: false), + Active = table.Column(type: "bit", nullable: false), + VehicleId = table.Column(type: "int", nullable: false), + DriverId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_VehicleDriver", x => x.Id); + table.ForeignKey( + name: "FK_VehicleDriver_Driver_DriverId", + column: x => x.DriverId, + principalTable: "Driver", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_VehicleDriver_Vehicles_VehicleId", + column: x => x.VehicleId, + principalTable: "Vehicles", + principalColumn: "Id"); + }); + + migrationBuilder.CreateIndex( + name: "IX_PolicyCoverage_CoverageId", + table: "PolicyCoverage", + column: "CoverageId"); + + migrationBuilder.CreateIndex( + name: "IX_PolicyCoverage_PolicyId", + table: "PolicyCoverage", + column: "PolicyId"); + + migrationBuilder.CreateIndex( + name: "IX_VehicleCoverage_CoverageId", + table: "VehicleCoverage", + column: "CoverageId"); + + migrationBuilder.CreateIndex( + name: "IX_VehicleCoverage_VehicleId", + table: "VehicleCoverage", + column: "VehicleId"); + + migrationBuilder.CreateIndex( + name: "IX_VehicleDriver_DriverId", + table: "VehicleDriver", + column: "DriverId"); + + migrationBuilder.CreateIndex( + name: "IX_VehicleDriver_VehicleId", + table: "VehicleDriver", + column: "VehicleId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "PolicyCoverage"); + + migrationBuilder.DropTable( + name: "VehicleCoverage"); + + migrationBuilder.DropTable( + name: "VehicleDriver"); + + migrationBuilder.CreateTable( + name: "Policy_Coverage", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + CoverageId = table.Column(type: "int", nullable: false), + PolicyId = table.Column(type: "int", nullable: false), + Active = table.Column(type: "bit", nullable: false), + CreatedDate = table.Column(type: "datetime2", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Policy_Coverage", x => x.Id); + table.ForeignKey( + name: "FK_Policy_Coverage_Coverage_CoverageId", + column: x => x.CoverageId, + principalTable: "Coverage", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_Policy_Coverage_Policies_PolicyId", + column: x => x.PolicyId, + principalTable: "Policies", + principalColumn: "Id"); + }); + + migrationBuilder.CreateTable( + name: "Vehicle_Coverage", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + CoverageId = table.Column(type: "int", nullable: false), + VehicleId = table.Column(type: "int", nullable: false), + Active = table.Column(type: "bit", nullable: false), + CreatedDate = table.Column(type: "datetime2", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Vehicle_Coverage", x => x.Id); + table.ForeignKey( + name: "FK_Vehicle_Coverage_Coverage_CoverageId", + column: x => x.CoverageId, + principalTable: "Coverage", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_Vehicle_Coverage_Vehicles_VehicleId", + column: x => x.VehicleId, + principalTable: "Vehicles", + principalColumn: "Id"); + }); + + migrationBuilder.CreateTable( + name: "Vehicle_Driver", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + DriverId = table.Column(type: "int", nullable: false), + VehicleId = table.Column(type: "int", nullable: false), + Active = table.Column(type: "bit", nullable: false), + CreatedDate = table.Column(type: "datetime2", nullable: false), + DriveForBusiness = table.Column(type: "nvarchar(max)", nullable: true), + EverydayMileage = table.Column(type: "real", nullable: false), + IsPrimaryDriver = table.Column(type: "bit", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Vehicle_Driver", x => x.Id); + table.ForeignKey( + name: "FK_Vehicle_Driver_Driver_DriverId", + column: x => x.DriverId, + principalTable: "Driver", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_Vehicle_Driver_Vehicles_VehicleId", + column: x => x.VehicleId, + principalTable: "Vehicles", + principalColumn: "Id"); + }); + + migrationBuilder.CreateIndex( + name: "IX_Policy_Coverage_CoverageId", + table: "Policy_Coverage", + column: "CoverageId"); + + migrationBuilder.CreateIndex( + name: "IX_Policy_Coverage_PolicyId", + table: "Policy_Coverage", + column: "PolicyId"); + + migrationBuilder.CreateIndex( + name: "IX_Vehicle_Coverage_CoverageId", + table: "Vehicle_Coverage", + column: "CoverageId"); + + migrationBuilder.CreateIndex( + name: "IX_Vehicle_Coverage_VehicleId", + table: "Vehicle_Coverage", + column: "VehicleId"); + + migrationBuilder.CreateIndex( + name: "IX_Vehicle_Driver_DriverId", + table: "Vehicle_Driver", + column: "DriverId"); + + migrationBuilder.CreateIndex( + name: "IX_Vehicle_Driver_VehicleId", + table: "Vehicle_Driver", + column: "VehicleId"); + } + } +} diff --git a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Migrations/InsuranceContextModelSnapshot.cs b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Migrations/InsuranceContextModelSnapshot.cs index c253fae0..d161a0d2 100644 --- a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Migrations/InsuranceContextModelSnapshot.cs +++ b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Migrations/InsuranceContextModelSnapshot.cs @@ -147,7 +147,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Policies"); }); - modelBuilder.Entity("YCompanyPaymentsAPI.Models.Policy_Coverage", b => + modelBuilder.Entity("YCompanyPaymentsAPI.Models.PolicyCoverage", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -173,7 +173,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("PolicyId"); - b.ToTable("Policy_Coverage"); + b.ToTable("PolicyCoverage"); }); modelBuilder.Entity("YCompanyPaymentsAPI.Models.Vehicle", b => @@ -210,7 +210,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("Vehicles"); }); - modelBuilder.Entity("YCompanyPaymentsAPI.Models.Vehicle_Coverage", b => + modelBuilder.Entity("YCompanyPaymentsAPI.Models.VehicleCoverage", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -236,10 +236,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("VehicleId"); - b.ToTable("Vehicle_Coverage"); + b.ToTable("VehicleCoverage"); }); - modelBuilder.Entity("YCompanyThirdPartyAPI.Models.Vehicle_Driver", b => + modelBuilder.Entity("YCompanyThirdPartyAPI.Models.VehicleDriver", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -274,7 +274,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("VehicleId"); - b.ToTable("Vehicle_Driver"); + b.ToTable("VehicleDriver"); }); modelBuilder.Entity("YCompanyPaymentsAPI.Models.Driver", b => @@ -288,7 +288,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("Policy"); }); - modelBuilder.Entity("YCompanyPaymentsAPI.Models.Policy_Coverage", b => + modelBuilder.Entity("YCompanyPaymentsAPI.Models.PolicyCoverage", b => { b.HasOne("YCompanyPaymentsAPI.Models.Coverage", "Coverage") .WithMany("PolicyCoverages") @@ -316,7 +316,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("Policy"); }); - modelBuilder.Entity("YCompanyPaymentsAPI.Models.Vehicle_Coverage", b => + modelBuilder.Entity("YCompanyPaymentsAPI.Models.VehicleCoverage", b => { b.HasOne("YCompanyPaymentsAPI.Models.Coverage", "Coverage") .WithMany("VehicleCoverages") @@ -333,7 +333,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("Vehicle"); }); - modelBuilder.Entity("YCompanyThirdPartyAPI.Models.Vehicle_Driver", b => + modelBuilder.Entity("YCompanyThirdPartyAPI.Models.VehicleDriver", b => { b.HasOne("YCompanyPaymentsAPI.Models.Driver", "Driver") .WithMany("VehicleDrivers") diff --git a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Program.cs b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Program.cs index 8a4b1154..02ef59c2 100644 --- a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Program.cs +++ b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/Program.cs @@ -3,9 +3,19 @@ using Microsoft.OpenApi.Models; using System.Reflection; using YCompanyPaymentsAPI.Data; +using YCompany.Configurations; +using YCompanyClaimsAPI; +using Amazon.SecretsManager; var builder = WebApplication.CreateBuilder(args); +var accessKey = builder.Configuration["accessKey"]; +var secretAccessKey = builder.Configuration["secretAccessKey"]; +var client = new AmazonSecretsManagerClient(accessKey, secretAccessKey, Amazon.RegionEndpoint.EUNorth1); +builder.Configuration.AddSecurityConfiguration(client, "Development_YCompanyApi", "EUNorth1"); + +builder.Logging.AddColorConsoleLogger(); + // Add services to the container. builder.Services.AddDbContext((serviceProvider, dbContextOptionsBuilder) => { diff --git a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/YCompanyThirdPartyAPI.csproj b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/YCompanyThirdPartyAPI.csproj index 8ab27f52..645c4851 100644 --- a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/YCompanyThirdPartyAPI.csproj +++ b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/YCompanyThirdPartyAPI.csproj @@ -7,13 +7,14 @@ + - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -21,4 +22,9 @@ + + + + + diff --git a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/appsettings.json b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/appsettings.json index 7c640a45..9243e49b 100644 --- a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/appsettings.json +++ b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "DefaultConnection": "Server=localhost\\MSSQLSERVER02;Database=ycompany;Trusted_Connection=True;TrustServerCertificate=True;" + "DefaultConnection": "Server=IN-PG0351ZV;Database=ycompany;Trusted_Connection=True;Integrated Security=True;TrustServerCertificate=True" }, "Logging": { "LogLevel": { @@ -8,6 +8,8 @@ "Microsoft.AspNetCore": "Warning" } }, + "accessKey": "AKIAW3MD6UTCDA5LKXJ5", + "secretAccessKey": "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", "AllowedHosts": "*", "Authentication": { "Authority": "https://localhost:7000", diff --git a/ThirdPartyAndSeed/YCompanyThirdPartyAPI/config.json b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/config.json new file mode 100644 index 00000000..4737450b --- /dev/null +++ b/ThirdPartyAndSeed/YCompanyThirdPartyAPI/config.json @@ -0,0 +1,5 @@ +{ + "key1": "key1", + "key2": "key2" + +} \ No newline at end of file diff --git a/YCompany.Configurations/SecretManagerConfigurationExtensions.cs b/YCompany.Configurations/SecretManagerConfigurationExtensions.cs new file mode 100644 index 00000000..c8a4f6a9 --- /dev/null +++ b/YCompany.Configurations/SecretManagerConfigurationExtensions.cs @@ -0,0 +1,17 @@ +using Amazon.SecretsManager; +using Microsoft.Extensions.Configuration; +using System; +using System.Collections.Generic; +using System.Text; + +namespace YCompany.Configurations +{ + public static class SecretManagerConfigurationExtensions + { + public static IConfigurationBuilder AddSecurityConfiguration + (this IConfigurationBuilder builder, IAmazonSecretsManager client, string secretName, string region) + { + return builder.Add(new SecretManagerConfigurationSource(client, secretName, region)); + } + } +} diff --git a/YCompany.Configurations/SecretManagerConfigurationProvider.cs b/YCompany.Configurations/SecretManagerConfigurationProvider.cs index 9288b67a..41c7a1ee 100644 --- a/YCompany.Configurations/SecretManagerConfigurationProvider.cs +++ b/YCompany.Configurations/SecretManagerConfigurationProvider.cs @@ -1,9 +1,72 @@ -using System; +using Amazon.SecretsManager; +using Amazon.SecretsManager.Model; +using Microsoft.Extensions.Configuration; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Json; namespace YCompany.Configurations { - public class SecretManagerConfigurationProvider + public class SecretManagerConfigurationProvider : ConfigurationProvider { + private IAmazonSecretsManager _client; + private string _secretName; + private string _region; + + public SecretManagerConfigurationProvider(IAmazonSecretsManager client, string secretName, string region) + { + _client = client; + _secretName = secretName; + _region = region; + } + + public override async void Load() + { + var getSecretValueRequest = new GetSecretValueRequest() + { + SecretId = _secretName, + VersionStage = "AWSCURRENT" + }; + + try + { + var response = await _client.GetSecretValueAsync(getSecretValueRequest); + var secretString = response.SecretString; + //var text = File.ReadAllText("config.json"); + var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; + var content = JsonSerializer.Deserialize(secretString, options); + + if (content != null) + { + Data = new Dictionary + { + { "Key1", content.Key1 }, + { "Key2", content.Key2 } + }; + } + } + catch (ResourceNotFoundException) + { + Console.WriteLine("secret doesn't exist"); + } + catch (InvalidRequestException) + { + Console.WriteLine("the request is invalid"); + } + catch (InvalidParameterException) + { + Console.WriteLine("the request parameters are invalid"); + } + catch (DecryptionFailureException) + { + Console.WriteLine("the secret can't be decrypted"); + } + catch (InternalServiceErrorException) + { + Console.WriteLine("internal service error"); + } + } } } diff --git a/YCompany.Configurations/SecretManagerConfigurationSecurityMetadata.cs b/YCompany.Configurations/SecretManagerConfigurationSecurityMetadata.cs new file mode 100644 index 00000000..97c0a3a8 --- /dev/null +++ b/YCompany.Configurations/SecretManagerConfigurationSecurityMetadata.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace YCompany.Configurations +{ + public class SecretManagerConfigurationSecurityMetadata + { + public string Key1 { get; set; } + public string Key2 { get; set; } + } +} diff --git a/YCompany.Configurations/SecretManagerConfigurationSource.cs b/YCompany.Configurations/SecretManagerConfigurationSource.cs new file mode 100644 index 00000000..5cead766 --- /dev/null +++ b/YCompany.Configurations/SecretManagerConfigurationSource.cs @@ -0,0 +1,26 @@ +using Amazon.SecretsManager; +using Microsoft.Extensions.Configuration; +using System; +using System.Collections.Generic; +using System.Text; + +namespace YCompany.Configurations +{ + public class SecretManagerConfigurationSource : IConfigurationSource + { + private readonly IAmazonSecretsManager _client; + private readonly string _secretName; + private readonly string _region; + + public SecretManagerConfigurationSource(IAmazonSecretsManager client, string secretName, string region) + { + _client = client; + _secretName = secretName; + _region = region; + } + public IConfigurationProvider Build(IConfigurationBuilder builder) + { + return new SecretManagerConfigurationProvider(_client, _secretName, _region); + } + } +} diff --git a/YCompany.Configurations/YCompany.Configurations.csproj b/YCompany.Configurations/YCompany.Configurations.csproj index b4b43f4c..177501c9 100644 --- a/YCompany.Configurations/YCompany.Configurations.csproj +++ b/YCompany.Configurations/YCompany.Configurations.csproj @@ -5,4 +5,10 @@ enable + + + + + + diff --git a/YCompanyWebApplication/Program.cs b/YCompanyWebApplication/Program.cs index 065bb71f..2d874884 100644 --- a/YCompanyWebApplication/Program.cs +++ b/YCompanyWebApplication/Program.cs @@ -1,5 +1,7 @@ using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.OpenIdConnect; +using Microsoft.EntityFrameworkCore; +using YCompanyPaymentsAPI.Data; var builder = WebApplication.CreateBuilder(args); @@ -8,6 +10,10 @@ httpClient.BaseAddress = new Uri(builder.Configuration["API:PaymentAPI"]); }); */ + +builder.Services.AddDbContext(options => + options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); + builder.Services.AddHttpClient("ThirdPartyAPI", httpClient => { httpClient.BaseAddress = new Uri(builder.Configuration["API:ThirdPartyAPI"]); diff --git a/YCompanyWebApplication/YCompanyWebApplication.csproj b/YCompanyWebApplication/YCompanyWebApplication.csproj index fed560af..331f1954 100644 --- a/YCompanyWebApplication/YCompanyWebApplication.csproj +++ b/YCompanyWebApplication/YCompanyWebApplication.csproj @@ -13,4 +13,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + + + + diff --git a/YCompanyWebApplication/appsettings.json b/YCompanyWebApplication/appsettings.json index 6fff1510..6f198098 100644 --- a/YCompanyWebApplication/appsettings.json +++ b/YCompanyWebApplication/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "DefaultConnection": "Server=localhost\\MSSQLSERVER02;Database=ycompany;Trusted_Connection=True;" + "DefaultConnection": "Server=IN-PG0351ZV;Database=ycompany;Trusted_Connection=True;Integrated Security=True;TrustServerCertificate=True" }, "Logging": { "LogLevel": {