diff --git a/ParadoxSaveParser.WebAPI/Program.cs b/ParadoxSaveParser.WebAPI/Program.cs index 64c0d37..133af0d 100644 --- a/ParadoxSaveParser.WebAPI/Program.cs +++ b/ParadoxSaveParser.WebAPI/Program.cs @@ -108,7 +108,9 @@ public static class Program var router = new SimpleRouter(loggerRoot); router.DefaultRoute = new ServeFilesRouteHandler("public"); router.MapRoute("/getSaveStatus", HttpMethod.GET, new GetSaveStatusHandler(_mainCancel.Token)); - router.MapRoute("/uploadSave/eu4", HttpMethod.POST, new UploadSaveHandler(_mainCancel.Token, bgJobManager, saveParsingSearchExpressions)); + router.MapRoute("/uploadSave/eu4", HttpMethod.POST, new UploadSaveHandler(_mainCancel.Token, + bgJobManager, saveParsingSearchExpressions)); + router.MapRoute("/getSaveData", HttpMethod.GET, new GetSaveDataHandler(_mainCancel.Token)); var app = new WebApp(_config.BaseUrl, loggerRoot, router, _mainCancel.Token); app.Run().GetAwaiter().GetResult(); diff --git a/ParadoxSaveParser.WebAPI/Routes/GetSaveDataHandler.cs b/ParadoxSaveParser.WebAPI/Routes/GetSaveDataHandler.cs new file mode 100644 index 0000000..878d405 --- /dev/null +++ b/ParadoxSaveParser.WebAPI/Routes/GetSaveDataHandler.cs @@ -0,0 +1,33 @@ +using System.Net; +using ParadoxSaveParser.WebAPI.HttpHelpers; + +namespace ParadoxSaveParser.WebAPI.Routes; + +internal class GetSaveDataHandler : RouteHandlerBase +{ + public GetSaveDataHandler(CancellationToken cancelAllToken) + : base(cancelAllToken) + { + } + + public override async Task HandleRequest( + HttpListenerContext ctx, ContextLogger requestLogger) + { + var idOrError = RequestHelper.GetQueryValue(ctx, "id"); + if (idOrError.HasError) + return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken, idOrError.Error!); + string id = idOrError.Value!; + + IOPath dataFilePath = PathHelper.GetParsedSaveFilePath(id); + if (!File.Exists(dataFilePath)) + return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken, + new ErrorMessage(HttpStatusCode.InternalServerError, + $"Save with id {id} not found") + ); + + await using var dataFile = File.OpenRead(dataFilePath); + + return await ReturnHelper.ResponseStream(ctx, requestLogger, _cancelAllToken, + dataFile, contentType: "application/json"); + } +} \ No newline at end of file diff --git a/ParadoxSaveParser.WebAPI/Routes/GetSaveStatusHandler.cs b/ParadoxSaveParser.WebAPI/Routes/GetSaveStatusHandler.cs index de72635..bef7e63 100644 --- a/ParadoxSaveParser.WebAPI/Routes/GetSaveStatusHandler.cs +++ b/ParadoxSaveParser.WebAPI/Routes/GetSaveStatusHandler.cs @@ -16,11 +16,12 @@ internal class GetSaveStatusHandler : RouteHandlerBase var idOrError = RequestHelper.GetQueryValue(ctx, "id"); if (idOrError.HasError) return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken, idOrError.Error!); - - if (!Program._saveMetadataStorage.TryGetValue(idOrError.Value!, out var meta)) + string id = idOrError.Value!; + + if (!Program._saveMetadataStorage.TryGetValue(id, out var meta)) return await ReturnHelper.ResponseError(ctx, requestLogger, _cancelAllToken, new ErrorMessage(HttpStatusCode.InternalServerError, - $"Save with id {idOrError.Value} not found") + $"Save with id {id} not found") ); return await ReturnHelper.ResponseJson(ctx, requestLogger, _cancelAllToken, meta);