using EnvelopeGenerator.Common; using EnvelopeGenerator.Common.My.Resources; using EnvelopeGenerator.Web.Services; using Microsoft.Extensions.Primitives; namespace EnvelopeGenerator.Web.Handler { public class FileHandler { public async static Task HandleFile(HttpContext ctx, DatabaseService database, LoggingService logging) { var logger = logging.LogConfig.GetLogger("FileHandler"); string envelopeKey = (string)ctx.Request.RouteValues["envelopeKey"]; logger.Info("Downloading file with EnvelopeKey [{0}]", envelopeKey); Tuple result = Helpers.DecodeEnvelopeReceiverId(envelopeKey); logger.Info("EnvelopeUUID: [{0}]", result.Item1); logger.Info("ReceiverSignature: [{0}]", result.Item2); EnvelopeResponse response = database.LoadEnvelope(envelopeKey); var envelope = response.Envelope; logger.Info("Envelope [{0}] loaded", envelope.Id); logger.Info("Contains [{0}] documents", envelope.Documents.Count); logger.Info("Contains [{0}] receivers", envelope.Receivers.Count); int documentId = getDocumentIndex(ctx); var document = getDocument(envelope, documentId); try { var bytes = await File.ReadAllBytesAsync(document.Filepath); logger.Info("Serving file, size: [{0}]", bytes.Length); return Results.File(bytes); } catch (Exception e) { logger.Error(e); return Results.Problem(); } } private static int getDocumentIndex(HttpContext ctx) { int documentId = 0; StringValues documentIndexString; if (ctx.Request.Query.TryGetValue("index", out documentIndexString)) { int.TryParse(documentIndexString.First(), out documentId); } return documentId; } private static EnvelopeDocument getDocument(Common.Envelope envelope, int documentId) { var document = envelope.Documents.First(); if (documentId > 0) { var documentById = envelope.Documents. Where(d => d.Id == documentId). FirstOrDefault(); if (documentById != null) { document = documentById; } } return document; } public static Task HandleGetData(HttpContext ctx, DatabaseService database, LoggingService logging) { var logger = logging.LogConfig.GetLogger("FileHandler"); string envelopeKey = (string)ctx.Request.RouteValues["envelopeKey"]; logger.Info("Fetching data for envelope with EnvelopeKey [{0}]", envelopeKey); Tuple result = Helpers.DecodeEnvelopeReceiverId(envelopeKey); logger.Info("EnvelopeUUID: [{0}]", result.Item1); logger.Info("ReceiverSignature: [{0}]", result.Item2); var response = database.LoadEnvelope(envelopeKey); var envelope = response.Envelope; logger.Info("Envelope [{0}] loaded", envelope.Id); logger.Info("Contains [{0}] documents", envelope.Documents.Count); logger.Info("Contains [{0}] receivers", envelope.Receivers.Count); return Task.FromResult(Results.Json(response)); } } }