public async Task AnswerGetRequest(RequestContext context) { var path = context.path.Split('?')[0]; if (path == "/stats" || path.EndsWith("/status") || path.Contains("show-status")) { PrintStatus(context); Console.WriteLine(DateTime.Now); return; } if (path.StartsWith("/command/")) { await HandleCommand(context); return; } if (path == "/low") { var relevant = Updater.LastAuctionCount.Where(a => a.Value > 0 && a.Value < 72); await context.WriteAsync(JSON.Stringify(relevant)); return; } if (context.HostName.StartsWith("skyblock") && !Program.LightClient) { context.Redirect("https://sky.coflnet.com" + path); return; } if (path == "/" || path.IsNullOrEmpty()) { path = "index.html"; } if (path == "/players") { await PrintPlayers(context); return; } if (path == "/items") { await PrintItems(context); return; } if (path == "/api/items/bazaar") { await PrintBazaarItems(context); return; } if (path == "/api/items/search") { await SearchItems(context); return; } byte[] contents; var relativePath = $"files/{path}"; if (path.StartsWith("/static/skin")) { GetSkin(relativePath); } if (path.StartsWith("/static/icon")) { await IconResolver.Instance.Resolve(context, path); return; } if (!FileController.Exists(relativePath)) { //res.StatusCode = (int)System.Net.HttpStatusCode.NotFound; //return; // vue.js will handle it internaly relativePath = $"files/index.html"; } try { contents = FileController.ReadAllBytes(relativePath); } catch (Exception) { await context.WriteAsync("File not found, maybe you fogot to upload the fronted"); return; } context.SetContentType("text/html"); //context.ContentEncoding = Encoding.UTF8; if (relativePath == "files/index.html" && !path.EndsWith(".js") && !path.EndsWith(".css")) { var watch = Stopwatch.StartNew(); await HtmlModifier.ModifyContent(path, contents, context); if (context is WebsocketRequestContext httpContext) if (path.StartsWith("/static")) TrackingService.Instance.TrackPage(httpContext.original.Request?.Url?.ToString(), "", null, null, watch.Elapsed); else TrackingService.Instance.TrackPage(httpContext.original.Request?.Url?.ToString(), "", httpContext.original.Request?.UrlReferrer?.ToString(), httpContext.original.Request?.UserAgent, watch.Elapsed); return; } if (path.EndsWith(".png") || path.StartsWith("/static/skin")) { context.SetContentType("image/png"); } else if (path.EndsWith(".css")) { context.SetContentType("text/css"); } if (path.EndsWith(".js") || path.StartsWith("/static/js")) { context.SetContentType("text/javascript"); } if (relativePath == "files/index.html") { context.AddHeader("cache-control", "private"); context.SetStatusCode(404); await context.WriteAsync("/* This file was not found. Retry in a few miniutes :) */"); return; } context.AddHeader("cache-control", "public,max-age=" + (3600 * 24 * 30)); context.WriteAsync(contents); }