Skip to content

Commit

Permalink
Merge pull request #109 from GeneriekPublicatiePlatformWoo/106-perfor…
Browse files Browse the repository at this point in the history
…mance-verbeteringen-voor-download/upload

feat: streamen bij upload/download, timeout configurabel
  • Loading branch information
nijmra authored Nov 28, 2024
2 parents 9b10d2a + 34cb0fb commit 64e1851
Show file tree
Hide file tree
Showing 7 changed files with 63 additions and 58 deletions.
3 changes: 2 additions & 1 deletion ODPC.Server/Authentication/AuthenticationExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,8 @@ public static void AddAuth(this IServiceCollection services, Action<AuthOptions>
});
}
services.AddAuthorizationBuilder()
.AddPolicy(AdminPolicy.Name, policy => policy.RequireRole(authOptions.AdminRole));
.AddPolicy(AdminPolicy.Name, policy => policy.RequireRole(authOptions.AdminRole))
.AddFallbackPolicy("LoggedIn", policy => policy.RequireAuthenticatedUser());
services.AddDistributedMemoryCache();
services.AddOpenIdConnectAccessTokenManagement();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,13 @@ public async Task ExecuteResultAsync(ActionContext context)
var response = context.HttpContext.Response;
var token = context.HttpContext.RequestAborted;

var config = context.HttpContext.RequestServices.GetRequiredService<IConfiguration>();
using var client = context.HttpContext.RequestServices.GetRequiredService<IOdrcClientFactory>().Create(reason);
using var httpResponse = await client.GetAsync(path, HttpCompletionOption.ResponseContentRead, token); ;
var timeoutInMinutes = int.TryParse(config["DOWNLOAD_TIMEOUT_MINUTES"], out var m)
? m
: 10;
client.Timeout = TimeSpan.FromMinutes(timeoutInMinutes);
using var httpResponse = await client.GetAsync(path, HttpCompletionOption.ResponseHeadersRead, token);

response.StatusCode = (int)httpResponse.StatusCode;
response.Headers.ContentLength = httpResponse.Content.Headers.ContentLength;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using Microsoft.AspNetCore.Mvc;
using ODPC.Apis.Odrc;

namespace ODPC.Features.Documenten.UploadBestandsdeel
{
public class UploadBestandsdeelEndpoint
{
public static void Map(IEndpointRouteBuilder builder) => builder.MapPut(
"api/{version}/documenten/{docUuid:guid}/bestandsdelen/{partUuid:guid}",
async (HttpRequest request, IOdrcClientFactory clientFactory, IConfiguration config, CancellationToken token) =>
{
using var client = clientFactory.Create("Upload bestandsdeel");
var timeoutInMinutes = int.TryParse(config["UPLOAD_TIMEOUT_MINUTES"], out var m)
? m
: 10;
client.Timeout = TimeSpan.FromMinutes(timeoutInMinutes);

using var content = new StreamContent(request.Body);
content.Headers.Add("Content-Type", request.Headers.ContentType.AsEnumerable());
content.Headers.ContentLength = request.Headers.ContentLength;

using var requestMessage = new HttpRequestMessage(HttpMethod.Put, request.Path);
requestMessage.Content = content;
using var response = await client.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead, token);

response.EnsureSuccessStatusCode();
return Results.NoContent();
})
.WithMetadata(new DisableRequestSizeLimitAttribute());
}
}
4 changes: 3 additions & 1 deletion ODPC.Server/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using ODPC.Authentication;
using ODPC.Data;
using ODPC.Features;
using ODPC.Features.Documenten.UploadBestandsdeel;
using Serilog;
using Serilog.Events;
using Serilog.Formatting.Json;
Expand Down Expand Up @@ -61,10 +62,11 @@ string GetRequiredConfig(string key)

app.UseAuthorization();

app.MapControllers().RequireAuthorization();
app.MapControllers();

app.MapOdpcAuthEndpoints();
app.MapHealthChecks("/healthz").AllowAnonymous();
UploadBestandsdeelEndpoint.Map(app);
app.MapFallbackToIndexHtml();

await using (var scope = app.Services.CreateAsyncScope())
Expand Down
4 changes: 3 additions & 1 deletion ODPC.Server/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,7 @@
"OIDC_ID_CLAIM_TYPE": "",
"ODRC_BASE_URL": "",
"ODRC_API_KEY": "",
"OIDC_ADMIN_ROLE": ""
"OIDC_ADMIN_ROLE": "",
"UPLOAD_TIMEOUT_MINUTES": "",
"DOWNLOAD_TIMEOUT_MINUTES": ""
}
34 changes: 18 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,21 @@ Als je een specifieke versie van het image van ODRC wil vastpinnen, zet je dit i

## Omgevingsvariabelen

| Variabele | Uitleg |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `POSTGRES_DB` | Naam van de database bij ODPC |
| `POSTGRES_USER` | Gebruikersnaam voor toegang van ODPC tot de DB |
| `POSTGRES_PASSWORD` | Wachtwoord van de Postgres user |
| `POSTGRES_HOST` | Hostnaam van de Postgres database server |
| `POSTGRES_PORT` | Poort om verbinding te maken met de Postgres database server |
| `OIDC_AUTHORITY` | URL van de OpenID Connect Identity Provider <details> <summary>Meer informatie </summary>Bijvoorbeeld: `https://login.microsoftonline.com/ce1a3f2d-2265-4517-a8b4-3e4f381461ab/v2.0` </details> |
| `OIDC_CLIENT_ID` | Voor toegang tot de OpenID Connect Identity Provider <details> <summary>Meer informatie </summary>Bijvoorbeeld: `54f66f54-71e5-45f1-8634-9158c41f602a` </details> |
| `OIDC_CLIENT_SECRET` | Secret voor de OpenID Connect Identity Provider <details> <summary>Meer informatie </summary>Bijvoorbeeld: `VM2B!ccnebNe.M*gxH63*NXc8iTiAGhp` </details> |
| `OIDC_ROLE_CLAIM_TYPE` | De naam van de claim in het JWT token van de OpenID Connect Provider waarin de rollen van de ingelogde gebruiker staan. <br/> (default waarde is `roles`) |
| `OIDC_ADMIN_ROLE` | De waarde van de role claim in het JWT token van de OpenID Connect Provider voor beheerders <details> <summary>Meer informatie </summary>Bijvoorbeeld: `odpc-admin` </details> |
| `OIDC_ID_CLAIM_TYPE` | De naam van de claim in het JWT token van de OpenID Connect Provider waarin de unieke identificatie van de ingelogde gebruiker staat. <br/> (default waarde is `preferred_username` met een fallback op `email`) |
| `OIDC_NAME_CLAIM_TYPE` | De naam van de claim in het JWT token van de OpenID Connect Provider waarin de volledige naam van de ingelogde gebruiker staat <br/> (default waarde is `name`) |
| `ODRC_BASE_URL` | De base url van de ODRC (Registratiecomponent) waarmee gekoppeld moet worden. <details> <summary>Meer informatie </summary>Bijvoorbeeld: `https://odrc.mijn-gemeente.nl` </details> |
| `ODRC_API_KEY` | De geheime sleutel voor de ODRC (Registratiecomponent) waarmee gekoppeld moet worden. <details> <summary>Meer informatie </summary>Bijvoorbeeld: `VM2B!ccnebNe.M*gxH63*NXc8iTiAGhp`</details> |
| Variabele | Uitleg |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `POSTGRES_DB` | Naam van de database bij ODPC |
| `POSTGRES_USER` | Gebruikersnaam voor toegang van ODPC tot de DB |
| `POSTGRES_PASSWORD` | Wachtwoord van de Postgres user |
| `POSTGRES_HOST` | Hostnaam van de Postgres database server |
| `POSTGRES_PORT` | Poort om verbinding te maken met de Postgres database server |
| `OIDC_AUTHORITY` | URL van de OpenID Connect Identity Provider <details> <summary>Meer informatie </summary>Bijvoorbeeld: `https://login.microsoftonline.com/ce1a3f2d-2265-4517-a8b4-3e4f381461ab/v2.0` </details> |
| `OIDC_CLIENT_ID` | Voor toegang tot de OpenID Connect Identity Provider <details> <summary>Meer informatie </summary>Bijvoorbeeld: `54f66f54-71e5-45f1-8634-9158c41f602a` </details> |
| `OIDC_CLIENT_SECRET` | Secret voor de OpenID Connect Identity Provider <details> <summary>Meer informatie </summary>Bijvoorbeeld: `VM2B!ccnebNe.M*gxH63*NXc8iTiAGhp` </details> |
| `OIDC_ROLE_CLAIM_TYPE` | De naam van de claim in het JWT token van de OpenID Connect Provider waarin de rollen van de ingelogde gebruiker staan. <br/> (default waarde is `roles`) |
| `OIDC_ADMIN_ROLE` | De waarde van de role claim in het JWT token van de OpenID Connect Provider voor beheerders <details> <summary>Meer informatie </summary>Bijvoorbeeld: `odpc-admin` </details> |
| `OIDC_ID_CLAIM_TYPE` | De naam van de claim in het JWT token van de OpenID Connect Provider waarin de unieke identificatie van de ingelogde gebruiker staat. <br/> (default waarde is `preferred_username` met een fallback op `email`) |
| `OIDC_NAME_CLAIM_TYPE` | De naam van de claim in het JWT token van de OpenID Connect Provider waarin de volledige naam van de ingelogde gebruiker staat <br/> (default waarde is `name`) |
| `ODRC_BASE_URL` | De base url van de ODRC (Registratiecomponent) waarmee gekoppeld moet worden. <details> <summary>Meer informatie </summary>Bijvoorbeeld: `https://odrc.mijn-gemeente.nl` </details> |
| `ODRC_API_KEY` | De geheime sleutel voor de ODRC (Registratiecomponent) waarmee gekoppeld moet worden. <details> <summary>Meer informatie </summary>Bijvoorbeeld: `VM2B!ccnebNe.M*gxH63*NXc8iTiAGhp`</details> |
| `UPLOAD_TIMEOUT_MINUTES` | Het aantal minuten dat het uploaden van bestanden maximaal mag duren. <br/> (default waarde is `10`) |
| `DOWNLOAD_TIMEOUT_MINUTES` | Het aantal minuten dat het downloaden van bestanden maximaal mag duren. <br/> (default waarde is `10`) |

0 comments on commit 64e1851

Please sign in to comment.