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;
        }
Beispiel #7
0
        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();
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
            };

        }