public IActionResult GetModConfig(string modDllName)
        {
            var modConfig = GetModAppConfig(modDllName);

            if (modConfig == null)
            {
                return(NotFound());
            }

            var modConfigFile = Path.Combine(EmpyrionConfiguration.SaveGameModPath, modConfig.Current.ModConfigFile);

            if (!System.IO.File.Exists(modConfigFile))
            {
                return(NotFound());
            }


            DateTimeOffset?LastModified = new DateTimeOffset(System.IO.File.GetLastWriteTime(modConfigFile));

            return(PhysicalFile(
                       modConfigFile,
                       "application/" + Path.GetExtension(modConfigFile).Substring(1).ToLower(),
                       Path.GetFileName(modConfigFile),
                       LastModified,
                       new Microsoft.Net.Http.Headers.EntityTagHeaderValue("\"" + ETagGenerator.GetETag(modConfigFile, System.IO.File.ReadAllBytes(modConfigFile)) + "\""),
                       true
                       ));
        }
        public IActionResult GetPlayfieldMap(string aPlayfieldname)
        {
            if (!Directory.Exists(MapsPath))
            {
                return(NotFound());
            }
            if (PlayfieldManager.Playfields == null)
            {
                PlayfieldManager.ReadPlayfields();
            }

            var PlayfieldMap = Path.Combine(
                EmpyrionConfiguration.SaveGameModPath,
                "EWA",
                "Maps",
                aPlayfieldname,
                "map.png");

            if (!System.IO.File.Exists(PlayfieldMap) && PlayfieldManager.Playfields == null)
            {
                return(NotFound());
            }

            var CurrentPlayfield = PlayfieldManager.Playfields.FirstOrDefault(P => P.name == aPlayfieldname);

            if (!System.IO.File.Exists(PlayfieldMap) && (CurrentPlayfield == null || CurrentPlayfield.isPlanet))
            {
                return(NotFound());
            }

            if (!CurrentPlayfield.isPlanet &&
                (!System.IO.File.Exists(PlayfieldMap) || (DateTime.Now - System.IO.File.GetLastWriteTime(PlayfieldMap)).TotalDays > 1))
            {
                try { ReadFromHubbleImages(PlayfieldMap); }
                catch (Exception Error)
                {
                    Logger.LogError(Error, "LoadSpace: {0} to {1}", aPlayfieldname, PlayfieldMap);
                    PlayfieldMap = Path.Combine(EmpyrionConfiguration.ModPath, @"EWALoader\EWA\ClientApp\dist\ClientApp\empty.png");
                }
            }

            DateTimeOffset?LastModified = new DateTimeOffset(System.IO.File.GetLastWriteTime(PlayfieldMap));

            return(PhysicalFile(
                       PlayfieldMap,
                       "image/png",
                       aPlayfieldname + ".png",
                       LastModified,
                       new Microsoft.Net.Http.Headers.EntityTagHeaderValue("\"" + ETagGenerator.GetETag(PlayfieldMap, System.IO.File.ReadAllBytes(PlayfieldMap)) + "\""),
                       true
                       ));
        }
Exemple #3
0
    public void OnActionExecuted(ActionExecutedContext context)
    {
        if (context.HttpContext.Request.Method == "GET")
        {
            if (_statusCodes.Contains(context.HttpContext.Response.StatusCode))
            {
                //I just serialize the result to JSON, could do something less costly
                var content = JsonConvert.SerializeObject(context.Result);

                var etag = ETagGenerator.GetETag(context.HttpContext.Request.Path.ToString(), Encoding.UTF8.GetBytes(content));

                if (context.HttpContext.Request.Headers.Keys.Contains("If-None-Match") && context.HttpContext.Request.Headers["If-None-Match"].ToString() == etag)
                {
                    context.Result = new StatusCodeResult(304);
                }
                context.HttpContext.Response.Headers.Add("ETag", new[] { etag });
            }
        }
    }
        private IActionResult GetImage(ImageType type, Guid userId, string name, string v)
        {
            string baseUrl = Constants.DefaultCdnPath;

            name = name.Replace(Constants.DefaultImagePath, string.Empty);

            try
            {
                string storageBasePath = FormatBasePath(type, userId, baseUrl);

                string url = UrlFormatter.CdnCommon(userId, name);

                if (!string.IsNullOrWhiteSpace(v))
                {
                    url += "?v=" + v;
                }

                byte[] data;

                using (WebClient webClient = new WebClient())
                {
                    data = webClient.DownloadData(url);
                }

                string etag = ETagGenerator.GetETag(httpContextAccessor.HttpContext.Request.Path.ToString(), data);
                if (httpContextAccessor.HttpContext.Request.Headers.Keys.Contains(HeaderNames.IfNoneMatch) && httpContextAccessor.HttpContext.Request.Headers[HeaderNames.IfNoneMatch].ToString() == etag)
                {
                    return(new StatusCodeResult(StatusCodes.Status304NotModified));
                }
                httpContextAccessor.HttpContext.Response.Headers.Add(HeaderNames.ETag, new[] { etag });

                return(File(new MemoryStream(data), "image/jpeg"));
            }
            catch (Exception ex)
            {
                string msg = $"Unable to save get the Image.";
                logger.Log(LogLevel.Error, ex, msg);

                return(ReturnDefaultImage(type));
            }
        }