Skip to content

Commit 5f62d2f

Browse files
Merge branch 'Develop'
2 parents ece59d4 + 2a6d20c commit 5f62d2f

21 files changed

+798
-648
lines changed

App/API/Endpoints.cs

+14-44
Original file line numberDiff line numberDiff line change
@@ -14,32 +14,15 @@ namespace Repository.App.API
1414
{
1515
public class Endpoints
1616
{
17-
// TODO: Delete this dict and its uses before hand-in
18-
static Dictionary<string, int> numUpdates = new Dictionary<string, int>();
19-
//static DatabaseManager databaseManager = new DatabaseManager(new MetadataDb());
20-
//static ResourceManager resourceManager = new ResourceManager(new FileDb(), new MetadataDb());
2117
public Endpoints(WebApplication app)
2218
{
23-
//databaseManager.TrackAllDynamicResources();
24-
25-
// TODO: Delete if we don't end up using MultiThreadFileWriter
26-
//var fileWriter = app.Services.GetRequiredService<MultiThreadFileWriter>();
27-
//fileWriter.WriteLine("yo", "c:\\myfile.txt");
28-
29-
// Rate limiting is added to some endpoints only, as it will keep the program stable.
30-
// The endpoints without rate limiting, such as ping, are endpoints we don't expect to break anything from a large amount of requests, and rate limiting would only be to prevent ddos attacks.
31-
// If we add rate limiting to these endpoints, we need to add another policy that allows a higher request rate than the one used for files.
32-
// Metadata already has an internal queue for writing updates, which means rate limiting isn't required.
33-
// TODO: metadata queue only applies when writing to the file, not reading from. This hasn't been an issue so far, but maybe rate limiting on metadata read requests could be useful.
3419
var ratePolicy = "fixed";
3520

3621
var _hostEnvironment = app.Environment;
3722
#region connection
3823
// To maintain connection
3924
app.MapGet("ping", (HttpContext httpContext) =>
4025
{
41-
//var appUrl = app.Urls.FirstOrDefault();
42-
//Console.WriteLine("Repo URL: " + appUrl);
4326
return "pong";
4427
});
4528

@@ -58,30 +41,25 @@ public Endpoints(WebApplication app)
5841
Console.WriteLine("Received GET request for file on resource id: " + resourceId);
5942
return manager.GetFileById(resourceId);
6043
});
61-
//.RequireRateLimiting(ratePolicy); // TODO: Find out if retrieving files without rate limiter can be an issue (especially with streaming)
6244

6345
// To save incomming files (.png, .xes, .bpmn, .pnml etc)
6446
app.MapPost("/resources", (HttpContext context, ResourceManager manager) => {
6547
Console.WriteLine("Received POST request to save file");
66-
var appUrl = app.Urls.FirstOrDefault();
67-
var formObject = context.Request.Form.ToFormObject();
48+
var request = context.Request;
49+
//var appUrl = $"{request.Scheme}://{request.Host}{request.PathBase}{request.Path}{request.QueryString}"; // Full URL with path and everything
50+
var appUrl = $"{request.Scheme}://{request.Host}{request.PathBase}";
51+
var formObject = context.Request.Form.ToFormObject(appUrl);
6852

6953
if (formObject == null) return Results.BadRequest("Invalid FormData keys");
7054
if (formObject.File == null) return Results.BadRequest("Exactly one file is required");
7155
if (formObject.Host == null) formObject.Host = $"{appUrl}/resources/";
72-
return manager.PostFile(formObject, appUrl!);
56+
return manager.PostFile(formObject);
7357
})
7458
.RequireRateLimiting(ratePolicy);
7559

7660
app.MapPut("/resources/{resourceId}", (HttpContext context, string resourceId, ResourceManager manager) =>
7761
{
7862
Console.WriteLine("Received PUT request to update file with id: " + resourceId);
79-
80-
// TODO: Delete the following section. Just to track number of updates and to print headers:
81-
if (numUpdates.ContainsKey(resourceId)) numUpdates[resourceId] += 1;
82-
else numUpdates[resourceId] = 1;
83-
Console.WriteLine($"Num updates for {resourceId} = {numUpdates[resourceId]}");
84-
8563
var requestFiles = context.Request.Form.Files;
8664
if (requestFiles?.Count != 1) return Results.BadRequest("Exactly one file is required");
8765
var formFile = requestFiles.Single();
@@ -113,32 +91,22 @@ public Endpoints(WebApplication app)
11391
return manager.GetChildrenMetadataList(resourceId);
11492
});
11593

94+
// To save metadata object without a file
11695
app.MapPost("/resources/metadata", (HttpRequest request, ResourceManager manager) =>
11796
{
11897
Console.WriteLine("Received POST request to create metadata object without a file");
119-
var appUrl = app.Urls.FirstOrDefault(); // TODO: This isn't the cleanest way to get our own URL. Maybe change at some point.
120-
121-
//request.EnableBuffering();
122-
//request.Body.Seek(0, SeekOrigin.Begin);
123-
//if (request.ContentLength == 0)
124-
// return Results.BadRequest("Invalid request. Body must have form data.");
98+
var appUrl = $"{request.Scheme}://{request.Host}{request.PathBase}";
12599

126100
var formObject = request.Form.ToFormObject();
127101
if (formObject == null) return Results.BadRequest("Invalid FormData keys");
128102
return manager.PostMetadata(formObject, appUrl!);
129-
//return manager.PostMetadata(request.Form, appUrl!);
130103
});
131104

105+
// To update metadata object only
132106
app.MapPut("/resources/metadata/{resourceId}", (HttpRequest request, string resourceId, ResourceManager manager) =>
133107
{
134108
Console.WriteLine("Received PUT request to update metadata object without a file");
135-
var appUrl = app.Urls.FirstOrDefault(); // TODO: This isn't the cleanest way to get our own URL. Maybe change at some point.
136-
137-
//request.EnableBuffering();
138-
//request.Body.Seek(0, SeekOrigin.Begin);
139-
//if (request.ContentLength == 0)
140-
// return Results.BadRequest("Invalid request. Body must have form data.");
141-
109+
var appUrl = $"{request.Scheme}://{request.Host}{request.PathBase}";
142110
return manager.UpdateMetadataObject(request.Form, appUrl!, resourceId);
143111
});
144112

@@ -151,19 +119,21 @@ public Endpoints(WebApplication app)
151119
return manager.GetFilteredList(bodyString);
152120
});
153121
#endregion
122+
154123
#region visualizers
155124
// To retrieve graph for given resourceId
156-
app.MapGet("/resources/graphs/{resourceId}", (string resourceId, ResourceManager manager) =>
125+
app.MapGet("/resources/graphs/{resourceId}", (HttpRequest request, string resourceId, ResourceManager manager) =>
157126
{
158127
Console.WriteLine("Received GET request for relation graph on resource id: " + resourceId);
159128
return manager.GetGraphForResource(resourceId);
160129
});
161130

162131
// To create/retrieve a histogram for an EventLog.
163-
app.MapPost("/resources/histograms/{resourceId}", (string resourceId, ResourceManager manager) =>
132+
app.MapPost("/resources/histograms/{resourceId}", (HttpRequest request, string resourceId, ResourceManager manager) =>
164133
{
165134
Console.WriteLine("Received POST request for histogram on resource id: " + resourceId);
166-
var appUrl = app.Urls.FirstOrDefault(); // TODO: This isn't the cleanest way to get our own URL. Maybe change at some point.
135+
//var appUrl = app.Urls.FirstOrDefault(); // TODO: This isn't the cleanest way to get our own URL. Maybe change at some point.
136+
var appUrl = $"{request.Scheme}://{request.Host}{request.PathBase}";
167137
return manager.GetHistogram(resourceId, appUrl);
168138
});
169139
#endregion

App/API/Registration.cs

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1-
namespace Repository.App.API
1+
using Newtonsoft.Json;
2+
using Newtonsoft.Json.Linq;
3+
using Repository.App.Entities;
4+
5+
namespace Repository.App.API
26
{
37
public class Registration
48
{
59
public static string GetConfiguration()
610
{
711
string path = Path.Combine(Directory.GetCurrentDirectory(), "configuration.json");
812
string config = File.ReadAllText(path);
9-
return config;
13+
var jsonConfig = JObject.Parse(config); // To remove comments
14+
string configFormat = JsonConvert.SerializeObject(jsonConfig, Formatting.Indented);
15+
return configFormat;
1016
}
1117
}
1218
}

App/API/RequestValidatorMiddleware.cs

-33
This file was deleted.

0 commit comments

Comments
 (0)