diff --git a/PostFundManagement.Api/Endpoints/Communications/SendInviteEndpoint.cs b/PostFundManagement.Api/Endpoints/Communications/SendInviteEndpoint.cs new file mode 100644 index 0000000..0e194fb --- /dev/null +++ b/PostFundManagement.Api/Endpoints/Communications/SendInviteEndpoint.cs @@ -0,0 +1,25 @@ +using PostFundManagement.Domain.Abstractions; +using PostFundManagement.Domain.Api; +using PostFundManagement.Domain.Extensions; + +namespace PostFundManagement.Api.Endpoints.Communications; + +[ApiVersionTarget(1)] +public class SendInviteEndpoint : IEndpoint +{ + public void Map(IEndpointRouteBuilder builder) + { + builder.MapPost("api/communications/invite", () => + { + throw new NotImplementedException(); + }) + .RequireAuthorization() + .WithDescription("Trigger an invite to an organization or candidate (specifying NotificationPlatform)") + .WithName(typeof(SendInviteEndpoint).ToEndpointName()) + .MapToApiVersion(new ApiVersion(1)) + .Produces(StatusCodes.Status200OK) + .Produces(StatusCodes.Status400BadRequest) + .Produces(StatusCodes.Status401Unauthorized) + .WithTags(EndpointTags.Communications); + } +} \ No newline at end of file diff --git a/PostFundManagement.Api/Extensions/Security.cs b/PostFundManagement.Api/Extensions/Security.cs index d638f7d..3a16f10 100644 --- a/PostFundManagement.Api/Extensions/Security.cs +++ b/PostFundManagement.Api/Extensions/Security.cs @@ -54,18 +54,18 @@ public static class Security services.AddDataProtection().PersistKeysToDbContext() .ProtectKeysWithCertificate(certificate) - .SetApplicationName("LiteCharmsApp"); + .SetApplicationName("PfmApp"); - services.Configure(options => options.ApplicationDiscriminator = "LiteCharmsApp"); + services.Configure(options => options.ApplicationDiscriminator = "PfmApp"); services.ConfigureCookieOidcSameSiteSupport(); - var configSection = configuration.GetSection(nameof(SecuritySettings)); + var configSection = configuration.GetSection(nameof(SecurityClientSettings)); - var authOptions = new SecuritySettings(); + var authOptions = new SecurityClientSettings(); configSection.Bind(authOptions); - services.Configure(configSection); + services.Configure(configSection); services.AddAuthentication(options => { @@ -76,7 +76,7 @@ public static class Security { options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.Cookie.SameSite = SameSiteMode.Lax; - options.Cookie.Name = "LiteCharmsApp.Session"; + options.Cookie.Name = "PfmApp.Session"; }) .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options => { @@ -123,4 +123,31 @@ public static class Security return services; } + + public static IServiceCollection AddApiSecurity(this IServiceCollection services, IConfiguration configuration) + { + var configSection = configuration.GetSection(nameof(SecuritySettings)); + + var authOptions = new SecuritySettings(); + configSection.Bind(authOptions); + + services.Configure(configSection); + + services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) + .AddJwtBearer(options => + { + options.Authority = authOptions.Authority; + options.Audience = authOptions.Audience; + options.TokenValidationParameters = new TokenValidationParameters + { + ValidIssuer = authOptions.Authority, + ValidateAudience = true, + ValidateIssuer = true, + }; + }); + + services.AddAuthorization(); + + return services; + } } \ No newline at end of file diff --git a/PostFundManagement.Api/PostFundManagement.Api.csproj b/PostFundManagement.Api/PostFundManagement.Api.csproj index 66b2287..eb05e7e 100644 --- a/PostFundManagement.Api/PostFundManagement.Api.csproj +++ b/PostFundManagement.Api/PostFundManagement.Api.csproj @@ -23,6 +23,8 @@ + + diff --git a/PostFundManagement.Api/Program.cs b/PostFundManagement.Api/Program.cs index 1c6611e..a2b45e8 100644 --- a/PostFundManagement.Api/Program.cs +++ b/PostFundManagement.Api/Program.cs @@ -16,17 +16,16 @@ builder.Services.AddApiServices(builder.Configuration); builder.Services.AddMediator(); builder.Services.AddSecurityApiSdk(builder.Configuration); -builder.Services.AddWebSecurity(builder.Configuration); +builder.Services.AddApiSecurity(builder.Configuration); builder.Services.AddScoped(typeof(IPipelineBehavior<,>), typeof(TelemetryPipelineBehavior<,>)); builder.Services.AddScoped(typeof(IPipelineBehavior<,>), typeof(LoggingPipelineBehavior<,>)); builder.Services.AddQuartzScheduler(DefaultSchedulerName, builder.Configuration); - builder.Services.AddEmailServices(builder.Configuration); +builder.Services.AddHashServices(builder.Configuration); builder.Services.AddHttpClient(); -builder.Services.AddHashServices(builder.Configuration); builder.Services.AddDataProtectionDatabase(builder.Configuration); builder.Services.AddApplicationDbContext(builder.Configuration); diff --git a/PostFundManagement.Domain/Extensions/EndpointTags.cs b/PostFundManagement.Domain/Extensions/EndpointTags.cs new file mode 100644 index 0000000..ff74f2c --- /dev/null +++ b/PostFundManagement.Domain/Extensions/EndpointTags.cs @@ -0,0 +1,16 @@ +namespace PostFundManagement.Domain.Extensions; + +public static class EndpointTags +{ + public const string Governance = nameof(Governance); + + public const string Projects = nameof(Projects); + + public const string Grants = nameof(Grants); + + public const string Execution = nameof(Execution); + + public const string Evidence = "Evidence & M&E"; + + public const string Communications = nameof(Communications); +} \ No newline at end of file