public ActionResult GetResourceForHtml(GetResourceForHtmlParameters parameters) { try { if (!string.IsNullOrEmpty(parameters.ResourceName) && parameters.ResourceName.IndexOf("/", StringComparison.Ordinal) >= 0) { parameters.ResourceName = parameters.ResourceName.Replace("/", ""); } var resource = new HtmlResource(parameters.ResourceName) { //ResourceName = parameters.ResourceName, //ResourceType = Utils.GetResourceType(parameters.ResourceName), DocumentPageNumber = parameters.PageNumber }; var stream = _htmlHandler.GetResource(parameters.DocumentPath, resource); if (stream == null || stream.Length == 0) { return(new HttpStatusCodeResult((int)HttpStatusCode.Gone)); } return(File(stream, Utils.GetMimeType(parameters.ResourceName))); } catch (Exception e) { return(this.JsonOrJsonP(new FailedResponse { Reason = e.Message }, null)); } }
protected void Page_Load(object sender, EventArgs e) { _htmlHandler = (ViewerHtmlHandler)Session["htmlHandler"]; GetResourceForHtmlParameters parameters = new GetResourceForHtmlParameters(); parameters.DocumentPath = GetValueFromQueryString("documentPath"); parameters.ResourceName = GetValueFromQueryString("resourceName"); parameters.PageNumber = int.Parse(GetValueFromQueryString("pageNumber") != String.Empty ? GetValueFromQueryString("pageNumber") : "0"); if (!string.IsNullOrEmpty(parameters.ResourceName) && parameters.ResourceName.IndexOf("/", StringComparison.Ordinal) >= 0) { parameters.ResourceName = parameters.ResourceName.Replace("/", ""); } try { var resource = new HtmlResource { ResourceName = parameters.ResourceName, ResourceType = Utils.GetResourceType(parameters.ResourceName), DocumentPageNumber = parameters.PageNumber }; var stream = _htmlHandler.GetResource(parameters.DocumentPath, resource); if (stream == null || stream.Length == 0) { Response.StatusCode = ((int)HttpStatusCode.Gone); Response.End(); } else { byte[] Bytes = new byte[stream.Length]; stream.Read(Bytes, 0, Bytes.Length); //string contentDispositionString = "attachment; filename=\"" + parameters.ResourceName + "\""; string contentDispositionString = new ContentDisposition { FileName = parameters.ResourceName, Inline = true }.ToString(); HttpContext.Current.Response.ContentType = Utils.GetImageMimeTypeFromFilename(parameters.ResourceName); HttpContext.Current.Response.AddHeader("Content-Disposition", contentDispositionString); HttpContext.Current.Response.AddHeader("Content-Length", stream.Length.ToString()); HttpContext.Current.Response.OutputStream.Write(Bytes, 0, Bytes.Length); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.End(); } } catch { } }
public ActionResult GetResourceForHtml(GetResourceForHtmlParameters parameters) { if (!string.IsNullOrEmpty(parameters.ResourceName) && parameters.ResourceName.IndexOf("/", StringComparison.Ordinal) >= 0) { parameters.ResourceName = parameters.ResourceName.Replace("/", ""); } var resource = new HtmlResource { ResourceName = parameters.ResourceName, ResourceType = Utils.GetResourceType(parameters.ResourceName), DocumentPageNumber = parameters.PageNumber }; var stream = _htmlHandler.GetResource(parameters.DocumentPath, resource); if (stream == null || stream.Length == 0) { return(new HttpStatusCodeResult((int)HttpStatusCode.Gone)); } return(File(stream, Utils.GetImageMimeTypeFromFilename(parameters.ResourceName))); }
private async Task ProcessRequest(HttpListenerContext context) {/* * <!DOCTYPE html> * <html lang="en"> * * <head> * */ try { var cookie = context.Request.Cookies["token"]; if (cookie != null) { string base64 = Convert.ToBase64String(Token); if (cookie.Value != base64) { return; } } else { return; } if (_resources.Any(x => x.Key == context.Request.RawUrl)) { HtmlResource resource = _resources.First(x => x.Key == context.Request.RawUrl).Value; byte[] bytes = { }; if (resource.Id == 0) { #if TESTING string data = $"<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n<script>const version = \"TESTING_MODE\";</script>\r\n" + Encoding.UTF8.GetString((byte[])Properties.Resources.ResourceManager.GetObject($"_{resource.Id}")); #else string data = $"<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n<script>const version = \"{Engine.Version}\";</script>\r\n" + Encoding.UTF8.GetString((byte[])Properties.Resources.ResourceManager.GetObject($"_{resource.Id}")); #endif bytes = Encoding.UTF8.GetBytes(data); } else { bytes = (byte[])Properties.Resources.ResourceManager.GetObject($"_{resource.Id}"); } context.Response.ContentLength64 = bytes.Length; context.Response.ContentType = resource.Type; await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); } else { switch (context.Request.RawUrl) { case "/utils/login_form": if (!Engine.LocalSettings.NightMode) { new LoginWindowLight().ShowDialog(); } else { new LoginWindowDark().ShowDialog(); } context.Response.StatusCode = 200; context.Response.ContentType = "text/plain"; await context.Response.OutputStream.WriteAsync(new byte[] { }, 0, 0); context.Response.OutputStream.Close(); break; case "/engine/start": Engine.Start(); context.Response.StatusCode = 200; byte[] bytes = Encoding.UTF8.GetBytes("Started!"); await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); break; case "/engine/stop": Engine.Stop(); context.Response.ContentType = "text/plain"; context.Response.StatusCode = 200; bytes = new byte[] { }; string statusd = Engine.GetStatus(); if ((!Engine.LocalSettings.AutoOpen || Engine.LocalSettings.OpenInDownloader) && Engine.FoundCurrentSearch > 0) { bytes = Encoding.UTF8.GetBytes("Beatmaps_viewer"); } await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); break; case "/engine/status": bytes = Encoding.UTF8.GetBytes(Engine.GetStatus()); context.Response.ContentLength64 = bytes.Length; context.Response.ContentType = "text/plain"; context.Response.StatusCode = 200; await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); break; case "/engine/beatmaps/ranked": context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; bytes = Encoding.UTF8.GetBytes(Engine.GetRankedJson()); await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); break; case "/engine/beatmaps/clear": context.Response.StatusCode = 200; context.Response.ContentType = "text/plain"; Engine.Clear(); await context.Response.OutputStream.WriteAsync(new byte [] { }, 0, 0); context.Response.OutputStream.Close(); break; case "/engine/beatmaps/loved": context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; bytes = Encoding.UTF8.GetBytes(Engine.GetLovedJson()); await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); break; case "/engine/beatmaps/unranked": context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; bytes = Encoding.UTF8.GetBytes(Engine.GetUnrankedJson()); await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); return; case "/engine/beatmaps/save": System.Windows.Forms.SaveFileDialog dialog = new System.Windows.Forms.SaveFileDialog { Filter = "osu!Sync|*.nw520-osbl|Text file|*.txt" }; if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { if (dialog.FilterIndex == 1) { System.IO.File.WriteAllBytes(dialog.FileName, new ExportFormats.OsuSync(Engine.FoundBeatmaps).GetBytes()); } else if (dialog.FilterIndex == 2) { System.IO.File.WriteAllBytes(dialog.FileName, new ExportFormats.TextFile(Engine.FoundBeatmaps).GetBytes()); } } context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; await context.Response.OutputStream.WriteAsync(new byte[] { }, 0, 0); context.Response.OutputStream.Close(); break; case "/engine/mirror": context.Response.StatusCode = 200; context.Response.ContentType = "text/plain"; bytes = Encoding.UTF8.GetBytes("MIRROR"); await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); return; case "/downloader/dls": bytes = Encoding.UTF8.GetBytes( await BeatmapDownloader.DownloadStatusAsync()); context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); return; default: if (context.Request.RawUrl.Contains("/engine/settings")) { context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; if (context.Request.HttpMethod == "PATCH") { string query = context.Request.QueryString["p"]; PatchSettings(query); await context.Response.OutputStream.WriteAsync(new byte[] { }, 0, 0); } else if (context.Request.HttpMethod == "GET") { bytes = Encoding.UTF8.GetBytes(GetSettings()); await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); } else { await BadRequest(context); return; } context.Response.OutputStream.Close(); return; } else if (context.Request.RawUrl.Contains("/engine/beatmaps/ranked")) { string query = context.Request.QueryString["p"]; context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; bytes = Encoding.UTF8.GetBytes(Engine.GetRankedPageJson(int.Parse(query))); await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); } else if (context.Request.RawUrl.Contains("/engine/beatmaps/unranked")) { string query = context.Request.QueryString["p"]; context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; bytes = Encoding.UTF8.GetBytes(Engine.GetUnrankedPageJson(int.Parse(query))); await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); } else if (context.Request.RawUrl.Contains("/engine/beatmaps/loved")) { string query = context.Request.QueryString["p"]; context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; bytes = Encoding.UTF8.GetBytes(Engine.GetLovedPageJson(int.Parse(query))); await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); } else if (context.Request.RawUrl.Contains("/utils/open_beatmapset_mirror")) { string query = context.Request.QueryString["id"]; string query_bId = context.Request.QueryString["b_id"]; if (query != string.Empty) { context.Response.StatusCode = 200; context.Response.ContentType = "text/plain"; if (!int.TryParse(query, out int i)) { break; } switch (Engine.LocalSettings.Mirror) { case Engine.DownloadMirrors.Hexide: Process.Start($"https://osu.hexide.com/beatmaps/{query}/download/novid/no-video.osz"); break; case Engine.DownloadMirrors.Bloodcat: Process.Start($"https://bloodcat.com/osu/s/{query}"); break; default: break; } await context.Response.OutputStream.WriteAsync(new byte[] { }, 0, 0); context.Response.OutputStream.Close(); } return; } else if (context.Request.RawUrl.Contains("/utils/open_beatmapset")) { string query = context.Request.QueryString["id"]; string query_bId = context.Request.QueryString["b_id"]; if (query != string.Empty) { context.Response.StatusCode = 200; context.Response.ContentType = "text/plain"; if (!int.TryParse(query, out int i)) { break; } if (Engine.LocalSettings.OpenInGame) { Process.Start($"osu://s/{query}"); } else { if (!Engine.Ripple) { Process.Start($"https://osu.ppy.sh/s/{query}"); } else { Process.Start($"https://ripple.moe/b/{query_bId}"); } } await context.Response.OutputStream.WriteAsync(new byte[] { }, 0, 0); context.Response.OutputStream.Close(); } return; } else if (context.Request.RawUrl.Contains("/images/get_beatmap_image_nodisk")) { await _thumbnailsSemaphore.WaitAsync(); try { string query = context.Request.QueryString["id"]; context.Response.StatusCode = 200; bytes = await ThumbnailDownloader.MainThumbnailDownloader.GetThumbnailNoDisk(int.Parse(query)); context.Response.ContentLength64 = bytes.Length; context.Response.ContentType = "image/jpeg"; await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); return; } finally { _thumbnailsSemaphore.Release(); } } else if (context.Request.RawUrl.Contains("/images/get_beatmap_image")) { await _thumbnailsSemaphore.WaitAsync(); try { string query = context.Request.QueryString["id"]; context.Response.StatusCode = 200; bytes = await ThumbnailDownloader.MainThumbnailDownloader.GetThumbnail(int.Parse(query)); context.Response.ContentLength64 = bytes.Length; context.Response.ContentType = "image/jpeg"; await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); return; } finally { _thumbnailsSemaphore.Release(); } } else if (context.Request.RawUrl.Contains("/sounds/play")) { context.Response.StatusCode = 200; context.Response.ContentType = "text/plain"; if (Engine.LocalSettings.SoundEffects) { string query = context.Request.QueryString["id"]; switch (query) { case "Click": Utils.PlayWavAsync(Properties.Resources.Click); break; case "Switch": Utils.PlayWavAsync(Properties.Resources.Switch); break; case "Downloaded": Utils.PlayWavAsync(Properties.Resources.Downloaded); break; default: break; } } await context.Response.OutputStream.WriteAsync(new byte[] { }, 0, 0); context.Response.OutputStream.Close(); } else if (context.Request.RawUrl.Contains("/downloader/search_unranked")) { string query = context.Request.QueryString["query"]; string page = "1"; try { page = context.Request.QueryString["page"]; } catch { } bytes = Encoding.UTF8.GetBytes( await BeatmapDownloader.SearchUnranked(query, int.Parse(page))); context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); return; } else if (context.Request.RawUrl.Contains("/downloader/search")) { string query = context.Request.QueryString["query"]; string page = "0"; try { page = context.Request.QueryString["page"]; } catch { } if (page == null) { page = "0"; } bytes = Encoding.UTF8.GetBytes( await BeatmapDownloader.Search(query, int.Parse(page))); context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); return; } else if (context.Request.RawUrl.Contains("/downloader/start")) { string query0 = context.Request.QueryString["id"]; string query1 = context.Request.QueryString["author"]; string query2 = context.Request.QueryString["artist"]; string query3 = context.Request.QueryString["title"]; string query4 = context.Request.QueryString["status"]; if (await BeatmapDownloader.Exists(int.Parse(query0))) { if (!MainWindow.Current.DownloadBeatmapAgainMessageBox()) { await context.Response.OutputStream.WriteAsync(new byte[] { }, 0, 0); context.Response.OutputStream.Close(); break; } else { await BeatmapDownloader.Delete(int.Parse(query0)); } } bytes = Encoding.UTF8.GetBytes( (await BeatmapDownloader .RegisterDownload(int.Parse(query0), int.Parse(query4), query2, query1, query3)) .ToString()); context.Response.StatusCode = 200; context.Response.ContentType = "text/plain"; await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); return; } else if (context.Request.RawUrl.Contains("/downloader/stop")) { string query = context.Request.QueryString["id"]; int status = await BeatmapDownloader.Stop(int.Parse(query)); context.Response.StatusCode = status; context.Response.ContentType = "text/plain"; await context.Response.OutputStream.WriteAsync(new byte[] { }, 0, 0); context.Response.OutputStream.Close(); return; } else if (context.Request.RawUrl.Contains("/downloader/run")) { string query = context.Request.QueryString["id"]; int status = await BeatmapDownloader.RunBeatmap(int.Parse(query)); context.Response.StatusCode = status; context.Response.ContentType = "text/plain"; await context.Response.OutputStream.WriteAsync(new byte[] { }, 0, 0); context.Response.OutputStream.Close(); return; } else if (context.Request.RawUrl.Contains("/downloader/dls")) { try { string query = context.Request.QueryString["id"]; bytes = Encoding.UTF8.GetBytes( await BeatmapDownloader.DownloadStatusAsync(int.Parse(query))); } catch (Exception e) { bytes = Encoding.UTF8.GetBytes("ERROR"); } context.Response.StatusCode = 200; context.Response.ContentType = "application/json"; await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); return; } else if (context.Request.RawUrl.Contains("/ui_mode/")) { string mode = string.Empty; if (Engine.LocalSettings.NightMode) { mode = "../css/night.css"; } else { mode = "../css/main.css"; } context.Response.StatusCode = 200; context.Response.ContentType = "text/plain"; bytes = Encoding.UTF8.GetBytes(mode); await context.Response.OutputStream.WriteAsync(bytes, 0, bytes.Length); context.Response.OutputStream.Close(); return; } await BadRequest(context); break; } } } catch (Exception e) { Logger.MainLogger.Log(Logger.LogTypes.Error, e.ToString()); } }
public ActionResult GetResourceForHtml(GetResourceForHtmlParameters parameters) { if (!string.IsNullOrEmpty(parameters.ResourceName) && parameters.ResourceName.IndexOf("/", StringComparison.Ordinal) >= 0) parameters.ResourceName = parameters.ResourceName.Replace("/", ""); var resource = new HtmlResource { ResourceName = parameters.ResourceName, ResourceType = Utils.GetResourceType(parameters.ResourceName), DocumentPageNumber = parameters.PageNumber == 0 ? 1 : parameters.PageNumber }; var stream = _htmlHandler.GetResource(parameters.DocumentPath, resource); if (stream == null || stream.Length == 0) return new HttpStatusCodeResult((int)HttpStatusCode.Gone); return File(stream, Utils.GetMimeType(parameters.ResourceName)); }