Skip to content
Merged
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
2 changes: 1 addition & 1 deletion BrixelAPI.SpaceAPI/Bootstrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace BrixelAPI.SpaceState
{
public class Bootstrapper
public static class Bootstrapper
{
public static void Configure(IServiceCollection serviceCollection, IConfiguration configuration)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,13 @@ public async Task<GetFullStatusResponse> Handle(GetFullStatusRequest request, Ca
var state = Domain.SpaceStateAggregate.SpaceState.GetConfiguredSpaceAPI();
var lastState = await _spaceStateRepository.GetLastLogAsync();

state.State.Open = lastState.IsOpen;
state.State.Lastchange = lastState.ChangedAtDateTime
.ToUniversalTime()
.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
if (lastState != null) {

state.State.Open = lastState.IsOpen;
state.State.Lastchange = lastState.ChangedAtDateTime
.ToUniversalTime()
.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
}

var response = new GetFullStatusResponse(state);
return response;
Expand Down
27 changes: 9 additions & 18 deletions SpaceAPI.Host/Program.cs
Original file line number Diff line number Diff line change
@@ -1,20 +1,11 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.AspNetCore.Builder;
var builder = WebApplication.CreateBuilder(args);

namespace SpaceAPI.Host
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
SpaceAPI.Host.WebApplicationBuilder.ConfigureServices(builder.Services, builder.Configuration);

public static IHostBuilder CreateHostBuilder(string[] args) =>
Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
var app = builder.Build();

SpaceAPI.Host.WebApplicationBuilder.Configure(app, app.Environment);


app.Run();
108 changes: 61 additions & 47 deletions SpaceAPI.Host/Startup.cs → SpaceAPI.Host/WebApplicationBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,58 +14,54 @@

namespace SpaceAPI.Host
{
public class Startup
public static class WebApplicationBuilder
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}

public IConfiguration Configuration { get; }

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
public static void ConfigureServices(IServiceCollection services, IConfiguration configuration)
{
var version = GetVersion();

var configurationSection = Configuration.GetSection(nameof(AuthConfig));
var configurationSection = configuration.GetSection(nameof(AuthConfig));
var authConfiguration = configurationSection.Get<AuthConfig>();
services.Configure<AuthConfig>(configurationSection);

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddControllers(options =>
{
options.RespectBrowserAcceptHeader = true;
});

services.AddAuthentication(authOptions =>
{
authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
authOptions.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
authOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
}).AddJsonOptions(o =>
{
options.Authority = authConfiguration.Authority;
options.Audience = authConfiguration.Audience;
//options.SaveToken = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateAudience = false
};
o.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull;
});

services.AddAuthorization(auth =>
{
var defaultPolicy =
new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.Build();

auth.DefaultPolicy = defaultPolicy;
AddAuthentication(services, authConfiguration);
AddAuthorization(services);
AddCors(services);
AddOpenAPI(services, version);

ConfigureVerticals(services, configuration);
}

private static void AddOpenAPI(IServiceCollection services, string version)
{
services.AddSwaggerGen(options =>
{
options.SwaggerDoc($"v{version}", new OpenApiInfo()
{
Version = version,
Title = "Brixel.SpaceAPI",
Description = "SpaceAPI of Brixel"
});
options.DocumentFilter<AdditionalParametersDocumentFilter>();
options.CustomOperationIds(
d => (d.ActionDescriptor as ControllerActionDescriptor)?.ActionName);
});
}

private static void AddCors(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddDefaultPolicy(
Expand All @@ -77,22 +73,40 @@ public void ConfigureServices(IServiceCollection services)
.AllowAnyHeader();
});
});
}

services.AddSwaggerGen(options =>
private static void AddAuthorization(IServiceCollection services)
{
services.AddAuthorization(auth =>
{
options.SwaggerDoc($"v{version}", new OpenApiInfo()
var defaultPolicy =
new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.Build();

auth.DefaultPolicy = defaultPolicy;
});
}

private static void AddAuthentication(IServiceCollection services, AuthConfig authConfiguration)
{
services.AddAuthentication(authOptions =>
{
authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
authOptions.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
authOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Authority = authConfiguration.Authority;
options.Audience = authConfiguration.Audience;
//options.SaveToken = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters()
{
Version = version,
Title = "Brixel.SpaceAPI",
Description = "SpaceAPI of Brixel"
});
options.DocumentFilter<AdditionalParametersDocumentFilter>();
options.CustomOperationIds(
d => (d.ActionDescriptor as ControllerActionDescriptor)?.ActionName);
ValidateAudience = false
};
});
services.AddMvcCore()
.AddApiExplorer();
ConfigureVerticals(services, Configuration);
}

private static string GetVersion()
Expand All @@ -101,13 +115,13 @@ private static string GetVersion()

}

private void ConfigureVerticals(IServiceCollection serviceCollection, IConfiguration configuration)
private static void ConfigureVerticals(IServiceCollection serviceCollection, IConfiguration configuration)
{
Bootstrapper.Configure(serviceCollection, configuration);
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
Expand Down
1 change: 0 additions & 1 deletion SpaceAPI.sln
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8EC462FD-D22E-90A8-E5CE-7E832BA40C5D}"
ProjectSection(SolutionItems) = preProject
docker-compose.yml = docker-compose.yml
.github\workflows\test.yml = .github\workflows\test.yml
EndProjectSection
EndProject
Global
Expand Down
Loading