public Response ProcessRequest(NancyContext context, string path) { path = string.Concat("~", path.Substring(PathPrefix.Length)); using (bundles.GetReadLock()) { Bundle bundle; IAsset asset; if (!bundles.TryGetAssetByPath(path, out asset, out bundle)) { logger.Info("ProcessRequest : Asset '{0}' not found", path); return new HtmlResponse(HttpStatusCode.NotFound); } var actualETag = "\"" + asset.Hash.ToHexString() + "\""; var givenETag = context.Request.Headers["If-None-Match"]; if(givenETag.Equals(actualETag)) { logger.Info("ProcessRequest : Asset '{0}' not modified", path); var notModified = new HtmlResponse(HttpStatusCode.NotModified); notModified.ContentType = bundle.ContentType; return notModified; } logger.Info("ProcessRequest : Asset '{0}' returned", path); var response = new StreamResponse(asset.OpenStream, bundle.ContentType); response.WithHeader("ETag", actualETag); return response; } }
public override Response ProcessRequest(NancyContext context) { if (!context.Request.Url.Path.StartsWith(HandlerRoot, StringComparison.InvariantCultureIgnoreCase)) { return null; } var path = context.Request.Url.Path.Remove(0, HandlerRoot.Length + 1); var match = Regex.Match(path, @"^(?<filename>.*)_[a-z0-9]+_(?<extension>[a-z]+)$", RegexOptions.IgnoreCase); if (match.Success == false) { if (Logger != null) Logger.Error("RawFileRouteHandler.ProcessRequest : Invalid file path in URL '{0}'", path); return null; } var extension = match.Groups["extension"].Value; var filePath = Path.Combine(applicationRoot, string.Concat(match.Groups["filename"].Value, ".", extension).Replace('/', '\\')); if (!File.Exists(filePath)) { if (Logger != null) Logger.Error("RawFileRouteHandler.ProcessRequest : Raw file does not exist '{0}'", filePath); return null; } var response = new StreamResponse(() => File.OpenRead(filePath), MimeTypes.GetMimeType(filePath)); if (Logger != null) Logger.Trace("RawFileRouteHandler.ProcessRequest : Returned response for '{0}'", context.Request.Url.Path); return response; }
public override Response ProcessRequest(NancyContext context) { if (!context.Request.Url.Path.StartsWith(HandlerRoot, StringComparison.InvariantCultureIgnoreCase)) { return null; } var path = Regex.Match(string.Concat("~", context.Request.Url.Path.Remove(0, HandlerRoot.Length)), @"^[^\?]*").Value; var bundles = BundleContainer.FindBundlesContainingPath(path).ToList(); if (bundles == null) { //if (Logger != null) // Logger.Error("AssetRouteHandler.ProcessRequest : Bundle not found for path '{0}'", context.Request.Url.Path); return null; } IAsset asset; Bundle bundle; if (!bundles.TryGetAssetByPath(path, out asset, out bundle)) { //if (Logger != null) // Logger.Error("AssetRouteHandler.ProcessRequest : Asset not found for path '{0}'", context.Request.Url.Path); return null; } var response = new StreamResponse(asset.OpenStream, bundle.ContentType); //if (Logger != null) // Logger.Trace("AssetRouteHandler.ProcessRequest : Returned response for '{0}'", context.Request.Url.Path); return response; }
private static dynamic BuildFileDownloadResponse(IRootPathProvider pathProvider, string fileName) { var mimeType = MimeTypes.GetMimeType(fileName); var path = Path.Combine(pathProvider.GetRootPath(), fileName); Func<Stream> file = () => new FileStream(path, FileMode.Open); var response = new StreamResponse(file, mimeType); var fileInfo = new FileInfo(path); return response.AsAttachment(fileInfo.Name); }
public void Should_copy_stream_to_output_when_body_invoked() { var inputStream = new MemoryStream(); inputStream.Write(new byte[] { 1, 2, 3, 4, 5 }, 0, 5); var response = new StreamResponse(() => inputStream, "test"); var outputStream = new MemoryStream(); response.Contents.Invoke(outputStream); outputStream.ToArray().ShouldEqualSequence(new byte[] { 1, 2, 3, 4, 5 }); }
public virtual Response GetResponse(string resourceUrl) { var filePath = Map(resourceUrl); if (_diskProvider.FileExists(filePath, _caseSensitive)) { var response = new StreamResponse(() => GetContentStream(filePath), MimeTypes.GetMimeType(filePath)); return response; } _logger.Warn("File {0} not found", filePath); return NotFoundResponse; }
public void Should_throw_exception_when_stream_is_non_readable() { // Given var inputStream = A.Fake<Stream>(); A.CallTo(() => inputStream.CanRead).Returns(false); var response = new StreamResponse(() => inputStream, "test"); var outputStream = new MemoryStream(); // When var exception = Record.Exception(() => response.Contents.Invoke(outputStream)); // Then exception.ShouldNotBeNull(); }
public void Should_copy_stream_to_output_when_body_invoked() { // Given var streamContent = new byte[] { 1, 2, 3, 4, 5 }; var inputStream = new MemoryStream(streamContent); var response = new StreamResponse(() => inputStream, "test"); var outputStream = new MemoryStream(); // When response.Contents.Invoke(outputStream); // Then outputStream.ToArray().ShouldEqualSequence(streamContent); }
public void Should_return_content_of_stream_from_current_location_of_stream() { // Given var streamContent = new byte[] { 1, 2, 3, 4, 5 }; var inputStream = new MemoryStream(streamContent) { Position = 2 }; var response = new StreamResponse(() => inputStream, "test"); var outputStream = new MemoryStream(); var expectedContent = new byte[] { 3, 4, 5 }; // When response.Contents.Invoke(outputStream); // Then outputStream.ToArray().ShouldEqualSequence(expectedContent); }
public ClientModule() { Get[PATH_CLIENT + "/getPOApplicationStatus"] = parameter => { try { Process[] processes = Process.GetProcesses(); List <string> processImageName = new List <string>(); try { foreach (Process p in processes) { if (!String.IsNullOrEmpty(p.MainWindowTitle)) { processImageName.Add(p.MainModule.ModuleName); } } } catch { } var isRunning = processImageName.Select(x => string.Compare(x, ProjectName) == 0 || string.Compare(x, ProjectName64) == 0).FirstOrDefault(); var message = "Applikasi Tidak Ditemukan"; if (isRunning) { message = "Aplikasi sedang running"; } return(Response.AsJson(new { IsRunning = isRunning, message = message })); } catch (Exception ex) { return(Response.AsJson(new { IsRunning = false, message = ex.Message }, HttpStatusCode.ExpectationFailed)); } }; //overwrite local file with file from server Post[PATH_CLIENT + "/overwriteXmlSetting"] = parameter => { var message = string.Empty; try { log.Info("Mulai : /client/overwriteXmlSetting"); log.Info($"Request dari IP:{this.Request.UserHostAddress}"); var body = Nancy.IO.RequestStream.FromStream(Request.Body).AsString(); log.Info("Memparsing isi dari request API "); RequestOverwriteXmlSetting setting = JsonConvert.DeserializeObject <RequestOverwriteXmlSetting>(body); log.Info("Parsing sukses"); log.Info($"Mencari file {setting.file_name} di direktori : { AssemblyDirectory }"); System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(AssemblyDirectory); System.IO.FileInfo info = new System.IO.FileInfo(setting.file_name); if (info.Exists) { log.Info($"file {setting.file_name} ditemukan"); //overwrite existing xml with content //StreamReader reader = new StreamReader(info.FullName,false); using (StreamWriter writer = new StreamWriter(info.Name, true)) { { writer.Write(setting.file_content); } writer.Close(); } message = $"Sukses mengganti content xml file {setting.file_name}"; log.Info("End : /client/overwriteXmlSetting"); return(Response.AsJson(new { message = message })); } else { log.Info($"Setting xml {setting.file_name} tidak ditemukan"); message = $"File Setting {setting.file_name} Tidak Ditemukan pada Client"; log.Info("End : /client/overwriteXmlSetting"); return(Response.AsJson(new { message = message }, HttpStatusCode.NotFound)); } } catch (System.Exception ex) { log.Fatal("Error : /client/overwriteXmlSetting", ex); message = $"Error, {ex.Message}"; return(Response.AsJson(new { message = message }, HttpStatusCode.ExpectationFailed)); } }; Post[PATH_CLIENT + "/downloadFile"] = parameter => { log.Info("Start : /client/downloadUpdateFile"); log.Info($"incoming request from IP:{this.Request.UserHostAddress}"); var body = Nancy.IO.RequestStream.FromStream(Request.Body).AsString(); log.Info("Deserialize object from json body"); DownloadUpdate setting = JsonConvert.DeserializeObject <DownloadUpdate>(body); string[] files = Directory.GetFiles(AssemblyDirectory); var result = string.Empty; foreach (string item in files) { FileInfo localFile = new FileInfo(item); if (string.Compare(localFile.Name, setting.fileName) == 0) { result = item; break; } } if (!string.IsNullOrEmpty(result)) { FileInfo info = new FileInfo(result); if (info.Exists) { var file = new System.IO.FileStream(info.FullName, System.IO.FileMode.Open); var response = new Nancy.Responses.StreamResponse(() => file, MimeTypes.GetMimeType(setting.fileName)); return(response.AsAttachment(setting.fileName)); } else { return(Response.AsJson(new { message = "File Tidak Ditemukan" }, HttpStatusCode.NoContent)); } } else { return(Response.AsJson(new { message = "File Tidak Ditemukan" }, HttpStatusCode.NoContent)); } }; Post[PATH_CLIENT + "/restartSender"] = parameter => { log.Info("Start : /client/restartSender"); log.Info($"incoming request from IP:{this.Request.UserHostAddress} @{DateTime.Now}"); var body = Nancy.IO.RequestStream.FromStream(Request.Body).AsString(); log.Info("Deserialize object from json body"); RestartRequest request = JsonConvert.DeserializeObject <RestartRequest>(body); try { System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.CreateNoWindow = false; startInfo.FileName = request.ApplicationName; foreach (var process in System.Diagnostics.Process.GetProcessesByName(request.ApplicationName)) { process.Kill(); break; } System.Diagnostics.Process.Start(startInfo); return(Response.AsJson(new { message = "Aplikasi Sukses Di Restart" }, HttpStatusCode.NoContent)); } catch { return(Response.AsJson(new { message = "Aplikasi Gagal DiRestart" }, HttpStatusCode.NoContent)); } }; }
public PreBillingModule(IRepository<PreBilling> preBillingDBRepository, IRepository<AccountMeta> accountMetaRepository, IRepository<UserMeta> userMetaRepository, ICacheProvider<PreBilling> preBillingCacheProvider, IReportApiClient reportApiClient) { this.RequiresAnyClaim(new[] { RoleType.Admin.ToString(), RoleType.ProductManager.ToString(), RoleType.Support.ToString() }); _preBillingDBRepository = preBillingDBRepository; _preBillingRepository = preBillingCacheProvider.CacheClient.GetAll(); var endDateFilter = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 25); var startDateFilter = new DateTime(DateTime.UtcNow.Year, (DateTime.UtcNow.Month - 1), 26); Before += async (ctx, ct) => { this.Info(() => "Before Hook - PreBilling"); await CheckCache(ct); return null; }; After += async (ctx, ct) => this.Info(() => "After Hook - PreBilling"); Get["/PreBilling/"] = _ => { var preBillStartDateFilter = Request.Query["startDate"]; var preBillEndDateFilter = Request.Query["endDate"]; if (!preBillStartDateFilter.HasValue && !preBillEndDateFilter.HasValue) return Negotiate.WithView("Index"); if (preBillStartDateFilter.HasValue) startDateFilter = preBillStartDateFilter; if (preBillEndDateFilter.HasValue) endDateFilter = preBillEndDateFilter; endDateFilter = endDateFilter.AddHours(23).AddMinutes(59).AddSeconds(59); var customerClientList = new List<PreBillingDto>(); foreach (var transaction in _preBillingRepository) { var customerClientIndex = customerClientList.FindIndex(x => x.Id == transaction.CustomerId || x.Id == transaction.ClientId); if (customerClientIndex > 0) continue; var customerClient = new PreBillingDto(); var customerTransactions = _preBillingRepository.Where(x => x.CustomerId == transaction.CustomerId && (x.Created >= startDateFilter && x.Created <= endDateFilter)) .DistinctBy(x => x.UserTransaction.TransactionId); var customerPackages = customerTransactions.Where(x => x.CustomerId == transaction.CustomerId) .Select(x => x.Package.PackageId).Distinct().Count(); var customerUsers = customerTransactions.Where(x => x.CustomerId == transaction.CustomerId).DistinctBy(x => x.User.UserId).Count(); var clientTransactions = _preBillingRepository.Where(x => x.ClientId == transaction.ClientId && (x.Created >= startDateFilter && x.Created <= endDateFilter)) .DistinctBy(x => x.UserTransaction.TransactionId); var clientPackagesTotal = clientTransactions.Where(x => x.ClientId == transaction.ClientId) .Select(x => x.Package.PackageId).Distinct().Count(); var clientUsers = customerTransactions.Where(x => x.ClientId == transaction.ClientId).DistinctBy(x => x.User.UserId).Count(); if (customerTransactions.Count() < 0 && clientTransactions.Count() < 0) continue; // Customer if (transaction.ClientId == new Guid()) { customerClient = new PreBillingDto { Id = transaction.CustomerId, CustomerName = transaction.CustomerName, Transactions = customerTransactions.Count(), Products = customerPackages, AccountMeta = accountMetaRepository.FirstOrDefault(x => x.AccountNumber == transaction.AccountNumber), }; customerClient.Users = customerUsers; } // Client if (transaction.CustomerId == new Guid()) { customerClient = new PreBillingDto { Id = transaction.ClientId, CustomerName = transaction.ClientName, Transactions = clientTransactions.Count(), Products = clientPackagesTotal, AccountMeta = accountMetaRepository.FirstOrDefault(x => x.AccountNumber == transaction.AccountNumber) }; customerClient.Users = clientUsers; } if ((transaction.ClientId == new Guid()) && (transaction.CustomerId == new Guid())) continue; if (customerClientIndex < 0 && customerClient.Transactions > 0) customerClientList.Add(customerClient); } return Negotiate .WithView("Index") .WithMediaRangeModel(MediaRange.FromString("application/json"), new { data = customerClientList }); }; Get["/PreBilling/CustomerClient/{searchId}/Users"] = param => { var preBillStartDateFilter = Request.Query["startDate"]; var preBillEndDateFilter = Request.Query["endDate"]; if (preBillStartDateFilter.HasValue) startDateFilter = preBillStartDateFilter; if (preBillEndDateFilter.HasValue) endDateFilter = preBillEndDateFilter; endDateFilter = endDateFilter.AddHours(23).AddMinutes(59).AddSeconds(59); var searchId = new Guid(param.searchId); var customerUsersDetailList = new List<UserDto>(); var preBillingRepo = _preBillingRepository.Where(x => (x.CustomerId == searchId || x.ClientId == searchId) && (x.Created >= startDateFilter && x.Created <= endDateFilter)).DistinctBy(x => x.UserTransaction.TransactionId); foreach (var transaction in preBillingRepo) { var userTransactionsList = new List<TransactionDto>(); var userMeta = userMetaRepository.FirstOrDefault(x => x.Id == transaction.User.UserId) ?? new UserMeta { Id = transaction.User.UserId, Username = transaction.User.Username }; // Filter repo for user transaction; var userTransactions = preBillingRepo.Where(x => x.User.UserId == transaction.User.UserId) .Select(x => new TransactionDto { TransactionId = x.UserTransaction.TransactionId, RequestId = x.UserTransaction.RequestId, IsBillable = x.UserTransaction.IsBillable }).Distinct(); foreach (var userTransaction in userTransactions) { var userTransIndex = userTransactionsList.FindIndex(x => x.TransactionId == userTransaction.TransactionId); if (userTransIndex < 0) userTransactionsList.Add(userTransaction); } var user = Mapper.Map<PreBilling, UserDto>(transaction); Mapper.Map(userMeta, user); user.Transactions = userTransactionsList; var userIndex = customerUsersDetailList.FindIndex(x => x.UserId == user.UserId); if (userIndex < 0) customerUsersDetailList.Add(user); } return Response.AsJson(new { data = customerUsersDetailList }); }; Get["/PreBilling/CustomerClient/{searchId}/Packages"] = param => { var preBillStartDateFilter = Request.Query["startDate"]; var preBillEndDateFilter = Request.Query["endDate"]; if (preBillStartDateFilter.HasValue) startDateFilter = preBillStartDateFilter; if (preBillEndDateFilter.HasValue) endDateFilter = preBillEndDateFilter; endDateFilter = endDateFilter.AddHours(23).AddMinutes(59).AddSeconds(59); var searchId = new Guid(param.searchId); var customerPackagesDetailList = new List<PackageDto>(); var preBillingRepo = _preBillingRepository.Where(x => (x.CustomerId == searchId || x.ClientId == searchId) && (x.Created >= startDateFilter && x.Created <= endDateFilter)).DistinctBy(x => x.UserTransaction.TransactionId); foreach (var transaction in preBillingRepo) { var packageTransactions = preBillingRepo.Where(x => x.Package.PackageId == transaction.Package.PackageId).Distinct(); var package = Mapper.Map<Package, PackageDto>(transaction.Package); package.PackageTransactions = packageTransactions.Count(); package.Created = transaction.Created; var packageIndex = customerPackagesDetailList.FindIndex(x => x.PackageId == package.PackageId); if (packageIndex < 0) customerPackagesDetailList.Add(package); if (packageIndex >= 0) { if (customerPackagesDetailList[packageIndex].Created < package.Created) { customerPackagesDetailList[packageIndex] = package; } } } return Response.AsJson(new { data = customerPackagesDetailList }); }; Get["/PreBillingDump"] = _ => { var preBillStartDateFilter = Request.Query["startDate"]; var preBillEndDateFilter = Request.Query["endDate"]; if (preBillStartDateFilter.HasValue) startDateFilter = preBillStartDateFilter; if (preBillEndDateFilter.HasValue) endDateFilter = preBillEndDateFilter; endDateFilter = endDateFilter.AddHours(23).AddMinutes(59).AddSeconds(59); var preBilling = _preBillingRepository.Where(x => x.Created >= startDateFilter && x.Created <= endDateFilter); var report = new ReportDto { Template = new ReportTemplate { ShortId = "418Ky2Cj" }, Data = new ReportData { PreBillingData = Mapper.Map<IEnumerable<PreBilling>, IEnumerable<PreBillingRecord>>(preBilling) } }; var token = Context.Request.Headers.Authorization.Split(' ')[1]; reportApiClient.Post(token, "/PreBillingReportDownload?startDate=" + startDateFilter + "&endDate="+ endDateFilter, null, report, null); var file = new FileStream(@"D:\LSA Reports\PreBilling " + startDateFilter.ToString("MMMM dd yyyy") + " - " + endDateFilter.ToString("MMMM dd yyyy") + ".xlsx", FileMode.Open); string fileName = "PreBilling_" + startDateFilter.ToString("MMMM-dd-yyyy") + "_" + endDateFilter.ToString("MMMM-dd-yyyy") + ".xlsx"; var response = new StreamResponse(() => file, MimeTypes.GetMimeType(fileName)); response.WithCookie("fileDownload", "true", DateTime.UtcNow.AddSeconds(10), "", "/"); return response.AsAttachment(fileName); }; }