public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath) { var request = args.Request; var response = args.Response; if (!LoginServer.Instance.Conf.Login.IsTrustedSource(request.ClientIp)) return; var name = request.Parameter("name"); var pass = request.Parameter("pass"); // Check parameters if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pass)) { response.Send("0"); return; } // Get account var account = LoginServer.Instance.Database.GetAccount(name); if (account == null) { response.Send("0"); return; } // Check password var passwordCorrect = Password.Check(pass, account.Password); // Response response.Send(passwordCorrect ? "1" : "0"); }
public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath) { var request = args.Request; var response = args.Response; response.ContentType = "text/css"; response.CacheControl = "public, max-age: 3600"; if (cache == null) { var sb = new StringBuilder(); foreach (var entry in AuraData.FeaturesDb.Entries) { var feature = entry.Value.Name; var enabled = entry.Value.Enabled; sb.AppendLine(string.Format("*[data-feature='{0}'] {{ display: {1}; }}", feature, enabled ? "inline" : "none")); sb.AppendLine(string.Format("*[data-feature='!{0}'] {{ display: {1}; }}", feature, !enabled ? "inline" : "none")); } cache = sb.ToString(); } response.Send(cache); }
protected virtual void TriggerHttpRequest(HttpRequestEventArgs e) { if (this.HttpRequest != null) { this.HttpRequest(this, e); } }
public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath) { var request = args.Request; var response = args.Response; var status = this.CreateStatusText(); response.Headers.Add("Access-Control-Allow-Origin", "*"); response.ContentType = "text/plain"; response.Send(status); }
public void AddHttpRequestMessage(HttpRequestEventArgs e) { HttpWebRequest request = e.Request; ListBoxItem lbi = new ListBoxItem(); string headers = ""; headers += request.Method + " " + request.RequestUri + "\n"; headers = request.Headers.Cast<string>().Aggregate(headers, (current, key) => current + (key + ":" + request.Headers[key] + "\n")); lbi.Content = request.Method; lbi.Tag = headers + e.Content; lbi.ToolTip = headers + e.Content; Debug_http_msg_listbox.Items.Add(lbi); }
void Server_RequestReceived(object sender, HttpRequestEventArgs e) { foreach (var handler in _handlers) { if (handler.Path == e.Request.Path) { handler.Handle(e.Context); return; } } Assert.Fail("No handler matched '{0}'", e.Request.Path); }
private static void WebServer_IncomingRequest(object sender, HttpRequestEventArgs e) { HttpListenerContext httpContext = e.RequestContext; try { HandleRequest(httpContext); } catch (Exception exception) { Console.WriteLine(exception); } }
public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath) { var request = args.Request; var response = args.Response; response.ContentType = "text/plain"; // Get file var file = request.File("ui"); if (file == null) { Log.Debug("UiStorageController: Missing file."); return; } // Check file name if (!Regex.IsMatch(file.FileName, @"^[0-9]{16}\.xml$")) { Log.Debug("UiStorageController: Invalid file name '{0}'.", file.FileName); return; } var charId = request.Parameter("char_id", null); var serverName = request.Parameter("name_server", null); var loadSuccess = request.Parameter("ui_load_success", null); // Check parameters if (!Regex.IsMatch(charId, @"^[0-9]{16}$") || !Regex.IsMatch(charId, @"^[0-9A-Za-z_ ]+$")) { Log.Debug("UiStorageController: Invalid character id ({0}) or server name ({1}).", charId, serverName); return; } var group = charId.Substring(charId.Length - 3); // Move file try { file.MoveTo("user/web/upload/ui/" + serverName + "/" + group + "/" + file.FileName); } catch (Exception ex) { Log.Exception(ex, "UiStorageController: Failed to move file."); } // Success response.Send("1"); }
public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath) { var request = args.Request; var response = args.Response; var server = args.Context.Server; if (pages == null) pages = GetPages(server); var handlebars = server.GetEngine("hbs"); var commonmark = server.GetEngine("md"); Page page = null; string content; var pageTitle = GetPageName(request.RawQueryString); if (string.IsNullOrWhiteSpace(pageTitle)) pageTitle = DefaultPageTitle; if (pages.TryGetValue(pageTitle, out page)) { var pageFilePath = server.GetLocalPath("wiki/pages/" + page.FileName + ".md"); if (page.Contents == null || File.GetLastWriteTime(pageFilePath) > page.LastUpdate) { page.Contents = GetPageContents(server, pageFilePath); page.LastUpdate = DateTime.Now; } content = page.Contents; } else { content = handlebars.RenderFile(server.GetLocalPath("wiki/templates/notfound.htm"), new { pageTitle }); } var sidebar = commonmark.RenderFile(server.GetLocalPath("wiki/pages/sidebar.md")); // Render response.Send(handlebars.RenderFile(server.GetLocalPath("wiki/templates/main.htm"), new { sidebar, content, })); }
public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath) { var request = args.Request; var response = args.Response; if (!LoginServer.Instance.Conf.Login.IsTrustedSource(request.ClientIp)) return; var msg = request.Parameter("msg", null); if (string.IsNullOrWhiteSpace(msg)) { response.Send("0"); return; } Send.Internal_Broadcast(msg); response.Send("1"); }
public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath) { var request = args.Request; var response = args.Response; var server = args.Context.Server; var handlebars = server.GetEngine("hbs"); var onlineCharacters = GetOnlineCharacters(); var onlineCount = onlineCharacters.Count; var anyOnline = onlineCount != 0; // Render response.Send(handlebars.RenderFile(server.GetLocalPath("online-list/templates/main.htm"), new { onlineCharacters, onlineCount, anyOnline, })); }
public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath) { var request = args.Request; var response = args.Response; var charId = request.Parameter("char_id"); var serverName = request.Parameter("name_server"); var userFile = request.File("userfile"); var userText = request.File("usertext"); if (charId == null || !Regex.IsMatch(charId, @"^[0-9]+$") || serverName == null || !Regex.IsMatch(serverName, @"^[0-9A-Za-z_]+$") || userFile == null || userText == null) return; var key = charId.Substring(charId.Length - 3); var folder = "user/web/upload/avatar/" + serverName + "/" + key + "/" + charId + "/"; userFile.MoveTo(folder + "snapshot.jpg"); userText.MoveTo(folder + "snapshot.txt"); response.Send("1"); }
public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath) { var request = args.Request; var response = args.Response; var server = request.Parameter("server", ""); var characterId = request.Parameter("characterid", ""); var characterName = request.Parameter("charname", ""); var file = request.File("filename"); // Check char name if (!Regex.IsMatch(characterName, @"^[0-9A-Za-z_]+$")) { Log.Debug("UploadVisualChatController: Invalid character name ({0}).", characterName); return; } // Check file if (file == null) { Log.Debug("UploadVisualChatController: File missing (Names: {0}).", string.Join(", ", request.Files.AllKeys)); return; } if (file.FileName != "visualchat.png" || file.ContentType != "image/png") { Log.Debug("UploadVisualChatController: Invalid file ({0}, {1}).", file.FileName, file.ContentType); return; } // Move file var fileName = string.Format("chat_{0:yyyyMMdd_HHmmss}_{1}.png", DateTime.Now, characterName); file.MoveTo("user/web/upload/visual-chat/" + fileName); // Response, URL to image response.Send(string.Format("http://{0}:{1}/upload/visual-chat/{2}", request.LocalEndPoint.Address, request.HttpPort, fileName)); }
public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath) { var request = args.Request; var response = args.Response; var server = args.Context.Server; var guildIdStr = request.Parameter("guildid"); var accountName = request.Parameter("userid"); var serverName = request.Parameter("userserver"); var characterIdStr = request.Parameter("userchar"); var sessionKeyStr = request.Parameter("key"); // Check parameters if (guildIdStr == null || accountName == null || serverName == null || characterIdStr == null || sessionKeyStr == null) { response.Send("Invalid parameter (1)."); return; } if (!_number.IsMatch(guildIdStr) || !_number.IsMatch(characterIdStr) || !_number.IsMatch(sessionKeyStr)) { response.Send("Invalid parameter (2)."); return; } var guildId = Convert.ToInt64(guildIdStr); var characterId = Convert.ToInt64(characterIdStr); var sessionKey = Convert.ToInt64(sessionKeyStr); // Check session if (!WebServer.Instance.Database.CheckSession(accountName, sessionKey)) { response.Send("Please log in first."); return; } // Check character if (!WebServer.Instance.Database.AccountHasCharacter(accountName, characterId, serverName)) { response.Send("Invalid character."); return; } // Check guild var guild = WebServer.Instance.Database.GetGuild(guildId); if (guild == null) { response.Send("Guild not found."); return; } // Check member var guildMember = guild.GetMember(characterId); if (guildMember == null) { response.Send("You're not a member of this guild."); return; } // Determine ability to level up var levelUpDisabled = true; var levelUpRequirements = ""; if (guild.Level < GuildLevel.Grand) { int points, gold; if (guild.GetLevelUpRequirements(out points, out gold) && points < guild.Points && gold < guild.Gold) { levelUpDisabled = false; } levelUpRequirements = string.Format("Guild Points: {0:n0}, Gold: {1:n0}", points, gold); } string success = null; string error = null; // Leader actions if (guildMember.IsLeader) { // Settings: Change messages if (request.Parameter("intro") != null) { this.ChangeMessages(request, guild, ref success, ref error); } // Settings: Change leader else if (request.Parameter("leader") != null) { this.ChangeLeader(request, guild, ref success, ref error); } // Settings: Disband else if (request.Parameter("disband") != null) { this.Disband(request, guild, ref success, ref error); } // Settings: Level up else if (!levelUpDisabled && request.Parameter("levelUp") != null) { this.LevelUp(request, guild, ref success, ref error); } } // Leader/Officer actions if (guildMember.IsLeaderOrOfficer) { // Members: Accept application if (request.Parameter("acceptApplication") != null) { var id = Convert.ToInt64(request.Parameter("acceptApplication")); var member = guild.GetMember(id); if (member == null) { error = "Applicant not found."; } else { this.AcceptApplication(request, guild, member, ref success, ref error); } } // Members: Decline application else if (request.Parameter("declineApplication") != null) { var id = Convert.ToInt64(request.Parameter("declineApplication")); var member = guild.GetMember(id); if (member == null) { error = "Applicant not found."; } else { this.DeclineApplication(request, guild, member, ref success, ref error); } } // Members: Remove member else if (request.Parameter("removeMember") != null) { var memberId = Convert.ToInt64(request.Parameter("removeMember")); var member = guild.GetMember(memberId); if (member == null) { error = "Character not found."; } else { this.RemoveMember(request, guild, member, ref success, ref error); } } } // Applicant actions if (guildMember.IsApplicant) { // Menu: Cancel application if (request.Parameter("cancelApplication") != null) { this.CancelApplication(request, guild, guildMember, ref success, ref error); } } // Non-leader actions if (!guildMember.IsLeader) { // Menu: Leave guild if (request.Parameter("leaveGuild") != null) { this.LeaveGuild(request, guild, guildMember, ref success, ref error); } } // Get non-declined members, ordered by their rank and name, putting applicants after the leaders. var members = guild.GetMembers().Where(a => a.Rank != GuildMemberRank.Declined).OrderBy(a => a.Rank == GuildMemberRank.Applied ? 25 : (int)a.Rank * 10).ThenBy(a => a.Name); var url = string.Format("/guild_home.cs?guildid={0}&userid={1}&userserver={2}&userchar={3}&key={4}", guildIdStr, accountName, serverName, characterIdStr, sessionKeyStr); // Render var engine = server.GetEngine("hbs"); response.Send(engine.RenderFile(server.GetLocalPath("templates/guild.htm"), new { url = url, guild = guild, members = members, member = guildMember, success = success, error = error, messageMaxLength = MessageMaxLength, levelUpDisabled = levelUpDisabled, levelUpRequirements = levelUpRequirements, })); }
public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath) { var request = args.Request; var response = args.Response; var server = args.Context.Server; var pageFolder = Path.GetDirectoryName(localPath); var templatePath = Path.Combine(pageFolder, "template.htm"); var name = request.Parameter("name"); var pass1 = request.Parameter("password1"); var pass2 = request.Parameter("password2"); var error = ""; var success = ""; if (name != null && pass1 != null && pass2 != null) { if (pass1 != pass2) { error = "The passwords don't match."; goto L_Send; } if (name.Length < 4) { name = ""; error = "Username too short (min. 4 characters)."; goto L_Send; } if (pass1.Length < 6) { error = "Password too short (min. 6 characters)."; goto L_Send; } if (!Regex.IsMatch(name, @"^[0-9A-Za-z]+$")) { error = "Username contains invalid characters."; goto L_Send; } if (WebServer.Instance.Database.AccountExists(name)) { error = "Account already exists."; goto L_Send; } var passHash = Password.RawToMD5SHA256(pass1); WebServer.Instance.Database.CreateAccount(name, passHash, 0); Log.Info("New account created: {0}", name); name = ""; success = "Account created successfully."; } L_Send: var engine = server.GetEngine("hbs"); response.Send(engine.RenderFile(templatePath, new { error, success, name })); }
private void HttpServerOnConnect(object sender, HttpRequestEventArgs e) { //HttpServer.Log.Debug(e.Request.UserAgent); }
private void HandleToken(RequestMethod method, HttpRequestEventArgs args, Authentication auth) { //Register the action auth.RecordAction("auth:token"); //Make sure its a valid method if (method != RequestMethod.Post) { args.Response.WriteRest(new Rest.RestResponse(Rest.RestStatus.BadMethod, msg: "Post was expected")); return; } //Validate the payload if (args.Request.ContentType != ContentType.FormUrlEncoded || !args.Request.HasEntityBody) { args.Response.WriteRest(new RestResponse(RestStatus.BadRequest, msg: "The payload must be x-www-form-urlencoded")); return; } //Only bots can use this endpoint if (!auth.IsBot) { args.Response.WriteRest(new RestResponse(RestStatus.Forbidden, msg: "Only bots are allowed to use this endpoint")); return; } //Read the body byte[] buffer = new byte[BUFFER_SIZE]; int len = args.Request.InputStream.Read(buffer, 0, BUFFER_SIZE); string content = args.Request.ContentEncoding.GetString(buffer, 0, len); //Parse into a NVK then into a query NameValueCollection nvk = System.Web.HttpUtility.ParseQueryString(content); Query query = new Query(nvk); //Validate the body string grantType, code; //============ Validate the code if (!query.TryGetString("code", out code)) { args.Response.WriteRest(new RestResponse(RestStatus.BadRequest, msg: "Invalid Code. Missing.")); return; } //============== Validate the grant if (!query.TryGetString("grant_type", out grantType) && !(grantType == "authorization_code" || grantType == "refresh_token")) { args.Response.WriteRest(new RestResponse(RestStatus.BadRequest, msg: "Invalid Grant")); return; } if (grantType == "refresh_token") { //We are going to refresh this users token. Authentication user = API.GetAuthenticationFromRefreshToken(code); if (user == null) { args.Response.WriteRest(new RestResponse(RestStatus.BadRequest, msg: "Invalid Code")); return; } //refresh the users token user.Token = GenerateToken(TimeSpan.FromHours(24), user.Name); args.Response.WriteRest(new RestResponse(RestStatus.OK, res: user.Token.Value)); return; } if (grantType == "authorization_code") { //We are going to return a new token from the code. //Look for the pending token and remove it from the listing. bool foundToken = false; Authentication.AuthToken token; lock (_pendingTokenLock) { if (_pendingTokens.TryGetValue(code, out token)) { foundToken = true; _pendingTokens.Remove(code); } } //Make sure we actually found it if (!foundToken) { args.Response.WriteRest(new RestResponse(RestStatus.BadRequest, msg: "Invalid Code")); return; } //Return the new stuffs args.Response.WriteRest(new RestResponse(RestStatus.OK, res: token)); return; } }
public void YRoute(YingRouteType ytype, HttpRequestEventArgs yargs) { getYConsole().sendYMessage($"{ytype.ToString()} > {yargs.Request.RawUrl}"); //getYConsole().sendYMessage($"{ytype.ToString()} > {yargs.Request.RawUrl}"); HttpListenerRequest yrequest = yargs.Request; HttpListenerResponse yresponse = yargs.Response; yroutes[ytype].ForEach((y) => { if (y.isYMatch || yargs.Request.RawUrl == y.YUri) { int ycount = Regex.Matches(yargs.Request.RawUrl, y.YUri).Count; if (y.isYMatch && Regex.Matches(yargs.Request.RawUrl, y.YUri).Count == 0) { return; } try { YingResponse yyresponse = y.YAction.Invoke(yrequest); YResponseBuilder(yresponse, HttpStatusCode.OK, yyresponse.ytype, Encoding.UTF8); yresponse.WriteContent(yyresponse.ycontext); /*try * { * Regex yregex = new Regex("", RegexOptions.Compiled); * yregex.Match(Convert.ToString()); * } * catch (FormatException yexception) { } * catch (InvalidCastException yexception) { } * catch (OverflowException yexception) { } * catch (Exception yexception) { }*/ } catch (YingAuthenticationException yexception) { YResponseBuilder(yresponse, (HttpStatusCode)yexception.getYCode(), ".json", Encoding.UTF8); yresponse.WriteContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new YingError { error = yexception.getYError(), errorMessage = yexception.Message, cause = null }))); } catch (YingHttpException yexception) { YResponseBuilder(yresponse, (HttpStatusCode)yexception.getYCode(), ".html", Encoding.UTF8); } catch (Exception yexception) { YResponseBuilder(yresponse, HttpStatusCode.InternalServerError, ".html", Encoding.UTF8); } return; } }); /*YResponseBuilder(yresponse, new YingResponseInfo * { * YStatusCode = HttpStatusCode.NotFound, * YStatusDescription = "Ying", * * YContentType = YingMimeMapping.YGetMimeType(".json"), * YContentEncoding = Encoding.UTF8 * });*/ /*yresponse.WriteContent(Encoding.UTF8.GetBytes("{\"Ying\": \"颖\"}" /*JsonMapper.ToJson()*/ /*));*/ //y.Response.WriteContent }
public void OnHttpRequest(object aSender, HttpRequestEventArgs ea) { AddLog(String.Format("Request to {0}", ea.Request.Header.RequestPath)); }
/// <summary> /// プロキシエンジンを指定して初期化 /// </summary> /// <param name="engine">プロキシエンジン</param> public HttpProxy(Spi.IReadOnlyHttpProxyEngine engine) { this.proxyEngine = engine; engine.HttpRequestSent += (sender, args) => this.HttpRequestSent?.Invoke(sender, ReadOnlyHttpRequestEventArgs.Convert(args)); engine.HttpResponseSent += (sender, args) => this.HttpResponseSent?.Invoke(sender, ReadOnlySessionEventArgs.Convert(args)); engine.FatalException += (sender, args) => this.FatalException?.Invoke(sender, ExceptionEventArgs.Convert(args)); if (engine is Spi.IHttpProxyEngine writableEngine) { writableEngine.HttpRequestReceived += (sender, args) => this.HttpRequestReceived?.Invoke(sender, HttpRequestEventArgs.Convert(args)); writableEngine.HttpResponseReceived += (sender, args) => this.HttpResponseReceived?.Invoke(sender, SessionEventArgs.Convert(args)); } if (engine is Spi.IReadOnlyWebSocketProxyEngine rowsEngine) { rowsEngine.ClientWebSocketMessageSent += (sender, args) => this.ClientWebSocketMessageSent?.Invoke(sender, ReadOnlyWebSocketMessageEventArgs.Convert(args)); rowsEngine.ServerWebSocketMessageSent += (sender, args) => this.ServerWebSocketMessageSent?.Invoke(sender, ReadOnlyWebSocketMessageEventArgs.Convert(args)); } if (engine is Spi.IWebSocketProxyEngine wsEngine) { wsEngine.ClientWebSocketMessageReceived += (sender, args) => this.ClientWebSocketMessageReceived?.Invoke(sender, WebSocketMessageEventArgs.Convert(args)); wsEngine.ServerWebSocketMessageReceived += (sender, args) => this.ServerWebSocketMessageReceived?.Invoke(sender, WebSocketMessageEventArgs.Convert(args)); } }
private void OnRequest(object sender, HttpRequestEventArgs args) { Router.HandleRequest(args.Request, args.Response); }
private void HandleRequest(object sender, HttpRequestEventArgs e) { var requestId = GetConnectedId(); DumpConnectedInfo(requestId, e); e.RequestContext.Response.StatusCode = 200; e.RequestContext.Response.ContentType = contentType; var sourcei = _serverSource.GetSource(); try { while (_serverSource.Reset(sourcei)) { while (!_serverSource.IsSourceEnded(sourcei)) { var frame = _serverSource.GetNextFrame(sourcei, _settings.FrameDelay); if (frame != null) { WriteFrame(e.RequestContext.Response.OutputStream, frame); e.RequestContext.Response.OutputStream.Flush(); } } } e.RequestContext.Response.OutputStream.Close(); } finally { _serverSource.DisposeClient(sourcei); _log.Debug("{0} Disconnected", requestId); } }
public override void Handle(HttpRequestEventArgs args, string requestuestPath, string localPath) { var request = args.Request; var response = args.Response; var server = args.Context.Server; if (pages == null) { pages = GetPages(server); } var handlebars = server.GetEngine("hbs"); var commonmark = server.GetEngine("md"); var name = "main"; var exists = true; var pageName = GetPageName(request.RawQueryString); if (!string.IsNullOrWhiteSpace(pageName)) { if (!pages.TryGetValue(pageName, out name)) { exists = false; } } var pageFilePath = server.GetLocalPath("wiki/pages/" + name + ".md"); if (pageFilePath == null) { exists = false; } string content; if (exists) { content = commonmark.RenderFile(pageFilePath); } else { content = handlebars.RenderFile(server.GetLocalPath("wiki/templates/notfound.htm"), new { pageName }); } var sidebar = commonmark.RenderFile(server.GetLocalPath("wiki/pages/sidebar.md")); // Insert table of contents // (TODO: Cache, so it doesn't have to be done every time.) //if (content.Contains(_tocCheck)) //{ // var toc = this.GenerateTableOfContents(ref content); // content = content.Replace(_tocCheck, toc); //} // Render response.Send(handlebars.RenderFile(server.GetLocalPath("wiki/templates/main.htm"), new { sidebar, content, })); }
protected override void OnConnect(HttpRequestEventArgs ev) { }
private void OnProcessGetRequestStarted() { HttpRequestEventArgs args = new HttpRequestEventArgs(); ProcessGetRequestStarted?.Invoke(this, args); }
/// <summary> /// AresTcpSocket can also act as a miniature WebServer and can handle HEAD/GET/POST requests /// </summary> private void ClientHttpRequestReceived(object sender, HttpRequestEventArgs e) { if (!(sender is ISocket socket)) { return; } Stats.PacketsReceived++; Stats.AddInput(e.Transferred); PendingConnection connection; lock (pending) connection = pending.Find(s => s.Equals(sender)); if (connection != null) { //upgrading to a websocket connection? if (e.Headers.TryGetValue("CONNECTION", out string upgrade) && e.Headers.TryGetValue("UPGRADE", out string upgrade_type)) { if (Config.UseWebSockets) { e.Headers.TryGetValue("ORIGIN", out string origin); e.Headers.TryGetValue("SEC-WEBSOCKET-VERSION", out string version); e.Headers.TryGetValue("SEC-WEBSOCKET-KEY", out string key); var my_headers = new Dictionary <string, string>(); if (!string.IsNullOrEmpty(origin)) { my_headers.Add("Access-Control-Allow-Origin", origin); my_headers.Add("Access-Control-Allow-Credentials", "true"); my_headers.Add("Access-Control-Allow-Headers", "content-type"); } connection.Socket.IsWebSocket = true; connection.Socket.SendBytes(Http.WebSocketAcceptHeaderBytes(key, my_headers.ToArray())); } else //websockets disabled { Logging.Info( "AresServer", "Connection rejected from '{0}'. Chatroom is not configured to allow WebSocket connections.", socket.RemoteEndPoint.Address ); connection.Socket.Disconnect(); } } else if (PluginHost.OnHttpRequest(socket, e)) { Logging.Info( "AresServer", "Http request from '{0}' for resource '{1}' denied.", socket.RemoteEndPoint.Address, e.RequestUri ); connection.Socket.Disconnect(); } } else { //Http request is not from a pending connection IClient user = Users.Find(s => s.Socket == sender); //if not pending, they have at least sent a login packet but are processing, if (user != null && user.LoggedIn) { if (PluginHost.OnHttpRequest(user, e)) { Logging.Info( "AresServer", "Http request from '{0}' ({1}) for resource '{2}' denied.", user.Name, user.ExternalIp, e.RequestUri ); } } else { //this doesn't appear to happen typically, it would just be racing against !LoggedIn if it did. //dc for now unless it causes problems in the future. connection.Socket.Disconnect(); } } }
private async void HttpServer_RequestReceived(object sender, HttpRequestEventArgs e) { LogMessage("Request: " + e.Request.Uri.AbsolutePath); HttpResponse response = new HttpResponse(); string format; using (StreamWriter writer = new StreamWriter(response.Body)) { writer.WriteLine("<html><head><title>WP8 HTTP Server</title></head><body>"); switch (e.Request.Uri.AbsolutePath) { case "/": writer.WriteLine("<h1>Welcome!</h1>"); writer.WriteLine("<ul>"); writer.WriteLine("<li><a href='device'>Device Information</a></li>"); writer.WriteLine("<li><a href='memory'>Memory Information</a></li>"); writer.WriteLine("<li><a href='date'>Current Date & Time</a></li>"); writer.WriteLine("</ul>"); break; case "/device": writer.WriteLine("<h1>Device Information</h1>"); writer.WriteLine("<ul>"); format = "<li><strong>{0}:</strong> {1}</li>"; writer.WriteLine(format, "OS Version", Environment.OSVersion); writer.WriteLine(format, "Device Manufacturer", DeviceStatus.DeviceManufacturer); writer.WriteLine(format, "Device Name", DeviceStatus.DeviceName); writer.WriteLine(format, "Hardware Version", DeviceStatus.DeviceHardwareVersion); writer.WriteLine(format, "Firmware Version", DeviceStatus.DeviceFirmwareVersion); writer.WriteLine(format, "Current Power Source", DeviceStatus.PowerSource); writer.WriteLine("</ul>"); writer.WriteLine("<a href='/'>Home</a>"); break; case "/memory": writer.WriteLine("<h1>Memory Information</h1>"); writer.WriteLine("<ul>"); format = "<li><strong>{0}:</strong> {1:0.00} MB</li>"; writer.WriteLine(format, "App Memory Usage", DeviceStatus.ApplicationCurrentMemoryUsage / 1024d / 1024d); writer.WriteLine(format, "App Peak Usage", DeviceStatus.ApplicationPeakMemoryUsage / 1024d / 1024d); writer.WriteLine(format, "App Memory Limit", DeviceStatus.ApplicationMemoryUsageLimit / 1024d / 1024d); writer.WriteLine(format, "Device Total Memory", DeviceStatus.DeviceTotalMemory / 1024d / 1024d); writer.WriteLine("</ul>"); writer.WriteLine("<a href='/'>Home</a>"); break; case "/date": writer.WriteLine("<h1>Current Date & Time</h1>"); writer.WriteLine(DateTime.Now.ToString() + "<br /><br />"); writer.WriteLine("<a href='/'>Home</a>"); break; default: response.StatusCode = HttpStatusCode.NotFound; writer.WriteLine("<h1>404: Not found</h1>"); writer.WriteLine("<a href='/'>Home</a>"); break; } writer.WriteLine("</body></html>"); writer.Flush(); await e.Request.SendResponse(response); } }
private void nServer_RequestReceived(object sender, HttpRequestEventArgs e) { e.Response.Headers.Add("Connection", "close"); e.Response.Headers.Add("Content-Encoding", "gzip"); e.Response.Headers.Add("Content-Type", "application/xml;charset=utf-8"); e.Response.Headers.Add("Status-Code", "200"); log.Info(String.Format("Received Http-{0} request from {1}.", e.Request.HttpMethod, e.Request.RawUrl)); Byte[] baResponseArray = null; List <String> splittedPath = new List <String>(e.Request.Path.Split('/')); String ioPath = Path.Combine(DataEx.dir_Server, e.Request.Path.Substring(1) + ".xml"); if (splittedPath.Count >= 3) { String targetClassString = changeCaseFirst(splittedPath[2], true); if (splittedPath.Count == 3) { splittedPath.Insert(0, ""); targetClassString = "Root"; } Double dummy; Boolean isNumber = Double.TryParse(splittedPath[3], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out dummy); String targetMethodString = changeCaseFirst(isNumber ? splittedPath[4] : splittedPath[3], false); if (!supportedMethods.Contains(targetMethodString)) { log.Warn(String.Format("Method for {0} wasn't found, using fallback XML method.", targetMethodString)); if (File.Exists(ioPath)) { log.Info(String.Format("Reading XML file {0}.", ioPath)); baResponseArray = getResponseData(File.ReadAllText(ioPath, Encoding.UTF8)); } else { log.Warn(String.Format("File {0} wasn't found, sending only 200OK.", ioPath)); } } else { Type targetClass = Type.GetType("OfflineServer.Servers.Http.Classes." + targetClassString); MethodInfo targetMethod = targetClass.GetMethod(targetMethodString); request = e.Request; log.Info(String.Format("Processing OfflineServer.HttpServer.Classes.{0}.{1}().", targetClassString, targetMethodString)); baResponseArray = getResponseData((string)targetMethod.Invoke(null, null)); } } else { if (File.Exists(ioPath)) { log.Info(String.Format("Reading XML file {0}.", ioPath)); baResponseArray = getResponseData(File.ReadAllText(ioPath, Encoding.UTF8)); } else { log.Warn(String.Format("File {0} wasn't found, sending only 200OK.", ioPath)); } } if (baResponseArray == null) { baResponseArray = getResponseData(" "); } e.Response.OutputStream.Write(baResponseArray, 0, baResponseArray.Length); e.Response.OutputStream.Flush(); // e.Request.RequestType gives the method used, GET - POST - PUSH etc. // e.Request.Url gives the full Uri including EVERYTHING // e.Request.RawUrl gives the Path following the IP. EX: if 127.0.0.1:4444/test/path.xml?test=true then /test/path.xml?test=true // e.Request.Path gives only the Path, not adding the params at the end. EX: if 127.0.0.1:4444/test/path.xml?test=true then /test/path.xml // e.Request.Params gives only the Params, not adding anything else. }
private static void WebSock_OnGet(object sender, HttpRequestEventArgs e) { throw new NotImplementedException(); }
private void HandleHTTPGet(object sender, HttpRequestEventArgs e) { var req = e.Request; var res = e.Response; var path = req.RawUrl; if (path.Contains("?")) { path = path.Split(new char [] { '?' }, 2)[0]; } if (path == "/") { path += "index.html"; } // Workarround for the React Single Page issue if ( path.StartsWith("/console") || path.StartsWith("/explorer") || path.StartsWith("/charts") || path.StartsWith("/config") ) { path = "/index.html"; } if (path.StartsWith(directoryHandler.BasePath)) { try { directoryHandler.HandleAccess(httpsv, e); } catch (Exception ex) { var output = $"Error reading file: {ex}"; res.StatusCode = (int)HttpStatusCode.InternalServerError; res.WriteContent(Encoding.UTF8.GetBytes(output)); } return; } var content = GetFile(path); if (content == null) { res.StatusCode = (int)HttpStatusCode.NotFound; const string res404 = "File not found"; res.WriteContent(Encoding.UTF8.GetBytes(res404)); return; } if (path.EndsWith(".html")) { res.ContentEncoding = Encoding.UTF8; } else if (path.EndsWith(".js")) { res.ContentEncoding = Encoding.UTF8; } res.ContentType = MimeTypes.GetMimeType(Path.GetExtension(path)); res.WriteContent(content); }
private void Server_RequestReceived(object sender, HttpRequestEventArgs e) { WriteLine($"Raw URL: {e.Request.RawUrl}"); WriteLine($"URL: {e.Request.Url}"); WriteLine($"Path: {e.Request.Path}"); string ErrorMessage = ""; string DirectoryName = e.Request.Directory(); string FileName = e.Request.FileName(); string Path = e.Request.Path; string [] splitPath = Path.Split('/'); if (!Directory.Exists(ServerDirectory)) { ErrorMessage = "<H2>Error!! Requested Directory does not exists</H2><Br>"; WriteLine("HTTP folder not found: " + ServerDirectory + DirectoryName); BuildHeader(e, 404, "404 Not Found"); e.Response.OutputStream.WriteString(ErrorMessage); return; } if (e.Request.Path.EndsWith("/")) { // we need to find the default file FileName = DefaultFileName( ); } MemoryStream virtualFileStream = null; DynamicFileRequestedEventArgs fe = new DynamicFileRequestedEventArgs(e); if (DynamicFileRequestedEvent != null) { virtualFileStream = DynamicFileRequestedEvent(this, fe); } if (virtualFileStream != null) { // send virtual file e.Response.ContentType = mimeTypeMappings.TryGetValue( System.IO.Path.GetExtension(fe.FileName), out string mime) ? mime : "application/octet-stream"; e.Response.CacheControl = "no-cache"; virtualFileStream.CopyTo(e.Response.OutputStream); return; } string filePath = DirectoryName == "/" ? System.IO.Path.Combine(ServerDirectory, FileName) : System.IO.Path.Combine(ServerDirectory, DirectoryName, FileName); if (FileName.EndsWith(".py")) { ScriptProcessor.ProcessScriptFile(filePath, e); return; } else { // look for a static file if (File.Exists(filePath)) { try { // set mime type e.Response.ContentType = mimeTypeMappings.TryGetValue( System.IO.Path.GetExtension(FileName), out string mime) ? mime : "application/octet-stream"; if (mime.Contains("image") || mime.Contains("javascript") || mime.Contains("css")) { // allow images, css and javascript to cache e.Response.CacheControl = "max-age=36000"; } else { e.Response.CacheControl = "no-cache"; } Stream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); fs.CopyTo(e.Response.OutputStream); fs.Close( ); return; } catch { } } else { // return 404 ErrorMessage = "<H2>404 Error! File Does Not Exist...</H2>"; BuildHeader(e, 404, "404 Not Found"); e.Response.OutputStream.WriteString(ErrorMessage); } } }
private void HttpServerRequest(object sender, HttpRequestEventArgs e) { // Get request var request = e.Request; // Get responce var response = e.Response; // Split our url to parts string[] pathParts = request.RawUrl.Trim().Split('/'); if (pathParts.Length > 1 && string.IsNullOrEmpty(pathParts[1])) { if (!httpRequestHandlers.ContainsKey("home")) { if (httpRequestHandlers.ContainsKey("404")) { httpRequestHandlers["404"].Invoke(request, response); } else { byte[] contents = Encoding.UTF8.GetBytes(pageNotFoundHtml); response.ContentType = "text/html"; response.ContentEncoding = Encoding.UTF8; response.ContentLength64 = contents.LongLength; response.Close(contents, true); } } else { httpRequestHandlers["home"].Invoke(request, response); } } else { // Crear all spaces from path string cleanedPath = string.Join("/", pathParts.Where(s => !string.IsNullOrEmpty(s)).ToArray()); // Find question mark int indexOfQuestionMark = cleanedPath.IndexOf('?'); // If question markis found if (indexOfQuestionMark >= 0) { // Get path without question mark cleanedPath = cleanedPath.Substring(0, indexOfQuestionMark); } // If path contains if (cleanedPath.EndsWith("/")) { // Remove it cleanedPath = cleanedPath.Substring(0, cleanedPath.Length - 1); } if (!httpRequestHandlers.ContainsKey(cleanedPath)) { if (request.HttpMethod.ToLower() == "get") { if (httpRequestHandlers.ContainsKey("404")) { httpRequestHandlers["404"].Invoke(request, response); } else { byte[] contents = Encoding.UTF8.GetBytes(pageNotFoundHtml); response.ContentType = "text/html"; response.ContentEncoding = Encoding.UTF8; response.ContentLength64 = contents.LongLength; response.Close(contents, true); } } else { response.StatusCode = (int)HttpStatusCode.NotFound; response.Close(); } } else { httpRequestHandlers[cleanedPath].Invoke(request, response); } } }
private static void ProceedPrintRequest(HttpRequestEventArgs e) { var printer = e.Request.QueryString.Get("printer"); var documentName = e.Request.QueryString.Get("title"); bool printerInstalled = false; // check if user specified printer if (printer == null) { Utility.ResponseWrite(e.Response, "Printer not specified"); e.Response.ContentType = "text/plain"; e.Response.StatusCode = 400; return; } // check if printer installed foreach (string installedPrinter in PrinterSettings.InstalledPrinters) { if (installedPrinter == printer) { printerInstalled = true; break; } } if (!printerInstalled) { Utility.ResponseWrite(e.Response, "Printer not installed: " + printer); e.Response.ContentType = "text/plain"; e.Response.StatusCode = 400; return; } // perform printing bool opened = myPrinter.OpenPrint(printer, documentName != null ? documentName : "Receipt"); // check if printer has opened for printing if (!opened) { ServerController.LogWarn("Can not open printer [" + printer + "]. Print failed."); Utility.ResponseWrite(e.Response, "Can not open printer [" + printer + "]. Print failed."); e.Response.ContentType = "text/plain"; e.Response.StatusCode = 500; return; } if (!e.Request.HasEntityBody) { Utility.ResponseWrite(e.Response, "Invalid raw printing data."); e.Response.ContentType = "text/plain"; e.Response.StatusCode = 400; return; } // get data and send to printer. then close print job byte[] data = Utility.GetRequestPostDataAsBytes(e.Request); myPrinter.SendToPrinter(printer, data, data.Length); myPrinter.ClosePrint(); // response with success Utility.ResponseWrite(e.Response, "Print job has been sent to printer successfully!"); e.Response.ContentType = "text/plain"; e.Response.StatusCode = 200; e.Response.Close(); return; }
private void HttpServer_OnPost(object sender, HttpRequestEventArgs e) { HttpServerRequest(sender, e); }
public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath) { var request = args.Request; var response = args.Response; // Check feature if (!AuraData.FeaturesDb.IsEnabled("GuildListBoard")) { var sbe = new StringBuilder(); using (var sw = new StringWriter(sbe)) using (var writer = new XmlTextWriter(sw)) { writer.Formatting = Formatting.Indented; writer.WriteStartDocument(); writer.WriteStartElement("Guildlist"); writer.WriteAttributeString("RowCount", "0"); writer.WriteAttributeString("NowPage", "1"); writer.WriteEndElement(); writer.WriteEndDocument(); } response.Send(sbe.ToString()); return; } //var characterIdStr = request.Parameter("CharacterId"); var serverName = request.Parameter("Name_Server"); var pageStr = request.Parameter("Page"); var sortByStr = request.Parameter("SortField"); var sortTypeStr = request.Parameter("SortType"); var guildLevelStr = request.Parameter("GuildLevelIndex"); var memberAmountStr = request.Parameter("GuildMemberIndex"); var guildTypeStr = request.Parameter("GuildType"); var searchText = request.Parameter("SearchWord"); //var passport = request.Parameter("Passport"); // Check parameters if (serverName == null || pageStr == null || sortByStr == null || sortTypeStr == null || guildLevelStr == null || memberAmountStr == null || guildTypeStr == null || searchText == null) { response.Send("Invalid parameter (1)."); return; } int page; GuildSortBy sortBy; GuildSortType sortType; GuildSearchLevel guildLevel; GuildSearchMembers memberAmount; GuildType guildType; if (!int.TryParse(pageStr, out page) || !Enum.TryParse<GuildSortBy>(sortByStr, out sortBy) || !Enum.TryParse<GuildSortType>(sortTypeStr, out sortType) || !Enum.TryParse<GuildSearchLevel>(guildLevelStr, out guildLevel) || !Enum.TryParse<GuildSearchMembers>(memberAmountStr, out memberAmount) || !Enum.TryParse<GuildType>(guildTypeStr, out guildType)) { response.Send("Invalid parameter (2)."); return; } var perPage = 10; // Client limit if (page < 1) page = 1; var allGuilds = WebServer.Instance.Database.GetGuildList(serverName, sortBy, sortType, guildLevel, memberAmount, guildType, searchText); var guilds = allGuilds.Skip((page - 1) * perPage).Take(perPage); var sb = new StringBuilder(); using (var sw = new StringWriter(sb)) using (var writer = new XmlTextWriter(sw)) { writer.Formatting = Formatting.Indented; writer.WriteStartDocument(); writer.WriteStartElement("Guildlist"); writer.WriteAttributeString("RowCount", allGuilds.Count.ToString()); writer.WriteAttributeString("NowPage", page.ToString()); foreach (var guild in guilds) { writer.WriteStartElement("Guild"); writer.WriteAttributeString("guildid", guild.Id.ToString()); writer.WriteAttributeString("levelindex", guild.LevelIndex.ToString()); writer.WriteAttributeString("membercnt", guild.MemberCount.ToString()); writer.WriteAttributeString("guildname", guild.Name); writer.WriteAttributeString("guildtype", ((int)guild.Type).ToString()); writer.WriteAttributeString("mastername", guild.LeaderName); writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndDocument(); } response.Send(sb.ToString()); }
private void DumpConnectedInfo(string requestId, HttpRequestEventArgs e) { _log.Debug("{0} Connected", requestId); var user = e.RequestContext.User; if (user != null) { _log.Debug("{0} identity info: Name = {1}, Is Authenticated = {2}, Authentication Type = {3}", requestId, e.RequestContext.User.Identity.Name, e.RequestContext.User.Identity.IsAuthenticated, e.RequestContext.User.Identity.AuthenticationType); } _log.Debug("{0} request info: Agent = {1}, Host Address = {2}, Host Name = {3}", requestId, e.RequestContext.Request.UserAgent, e.RequestContext.Request.UserHostAddress, e.RequestContext.Request.UserHostName); }
private void HandleAuthorize(RequestMethod method, HttpRequestEventArgs args, Authentication auth) { //Register the action auth.RecordAction("auth:authorize"); //Make sure its a valid method if (method != RequestMethod.Get) { args.Response.StatusCode = (int)HttpStatusCode.MethodNotAllowed; args.Response.Close(); return; } //Only users may use this endpoing if (!auth.IsUser) { args.Response.StatusCode = (int)HttpStatusCode.Forbidden; args.Response.Close(); return; } //Prepare the query params Query query = new Query(args.Request); string clientID, redirectURL, responseType, state; BotAccount botAccount = null; //Get the state state = query.GetString("state", ""); //Validate the clientID if (!query.TryGetString("client_id", out clientID) || !API.ScanBotAccounts(clientID, out botAccount)) { args.Response.StatusCode = (int)HttpStatusCode.Forbidden; args.Response.WriteText("Invalid client_id. Please do not ever use this service again, it maybe trying to steal your credentials!"); return; } //Validate the redirect if (!query.TryGetString("redirect_uri", out redirectURL) || !redirectURL.Equals(botAccount.AuthRedirect)) { args.Response.StatusCode = (int)HttpStatusCode.Forbidden; args.Response.WriteText("redirect_uri not supplied from auth application or does not match bot account."); return; } //Validate the response tpye if (!query.TryGetString("response_type", out responseType) || !(responseType == "code" || responseType == "token")) { args.Response.StatusCode = (int)HttpStatusCode.Forbidden; args.Response.WriteText("response_type not supplied from auth application or is invalid."); return; } //If its a token lets return the token asap if (responseType == "token") { //Only admin bots can get tokens if (!botAccount.IsAdmin) { args.Response.StatusCode = (int)HttpStatusCode.Forbidden; args.Response.WriteText("response_type not supplied from auth application or is invalid."); return; } //Generate some values auth.Token = GenerateToken(TimeSpan.FromHours(1), auth.Name); //Return with the token Redirect(args, $"{redirectURL}?access_token={auth.Token.Value.AccessToken}&expires_in={auth.Token.Value.Expiry.ToUnixEpoch()}&state={state}"); return; } //Its a simple code one. if (responseType == "code") { //Generate some values; string code = GenerateRandomString(RNG, 16); auth.Token = GenerateToken(TimeSpan.FromHours(24), auth.Name); //Add to the list lock (_pendingTokenLock) _pendingTokens.Add(code, auth.Token.Value); //Redirect Redirect(args, $"{redirectURL}?code={code}&state={state}"); return; } }
private void Httpsv_OnGet(object sender, HttpRequestEventArgs e) { var req = e.Request; var res = e.Response; string rawUrl = req.RawUrl; MAction emm = new MAction(); if (Path.GetExtension(req.RawUrl).Length > 0) { string path = AppDomain.CurrentDomain.BaseDirectory + req.RawUrl; string contentType = MimeMapping.GetMimeMapping(path); byte[] buffer = File.ReadAllBytes(path); res.ContentType = contentType; res.WriteContent(buffer); } else { int index = rawUrl.IndexOf('?'); if (index > 0) { rawUrl = rawUrl.Substring(0, index); } string result = string.Empty; try { if (dic.ContainsKey(rawUrl)) { emm = dic[rawUrl]; var action = container.Resolve(emm.controllerType); object[] objs = new object[emm.parameterInfo.Length]; int i = 0; foreach (var item in emm.parameterInfo) { if (item.ParameterType == typeof(int)) { objs[i] = int.Parse(e.Request.QueryString.Get(item.Name)); } else { objs[i] = e.Request.QueryString.Get(item.Name); } i = i + 1; } var data = emm.action.Invoke(action, objs); e.Response.ContentType = "application/json"; if (data == null) { e.Response.StatusCode = 204; } else { byte[] buffer = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(data)); e.Response.WriteContent(buffer); } } else { e.Response.StatusCode = 404; } } catch (Exception ex) { if (emm.exceptionFilter == null) { byte[] buffer = Encoding.UTF8.GetBytes(ex.Message + ex.StackTrace); e.Response.WriteContent(buffer); e.Response.StatusCode = 500; } else { if (emm.exceptionFilter != null) { if (ex.InnerException != null) { emm.exceptionFilter.OnException(ex.InnerException, e); } else { emm.exceptionFilter.OnException(ex, e); } } } } } }
public void recvRequest(object sender, HttpRequestEventArgs e) { using (var writer = new StreamWriter(e.Response.OutputStream)) { HttpRequest request = e.Request; // Obtain a response object. HttpResponse response = e.Response; // Construct a response. System.Collections.Specialized.NameValueCollection headers = request.Headers; Console.WriteLine("Got Request: " + request.HttpMethod + " " + request.Url.AbsoluteUri.ToString() + "!"); if (request.HttpMethod.ToLower().Equals("head") || request.HttpMethod.ToLower().Equals("get") || request.HttpMethod.ToLower().Equals("post") || request.HttpMethod.ToLower().Equals("options") || request.HttpMethod.ToLower().Equals("put")) { if (request.Url.AbsoluteUri.ToString().Contains("localhost/GETHASHES")) { Console.WriteLine("Sending 401..."); if (headers["Authorization"] == null && workingUri == null) { Console.WriteLine("Got request for hashes..."); response.Headers.Add("WWW-Authenticate", "NTLM"); response.StatusCode = 401; state = 0; } else { String authHeader = headers["Authorization"]; byte[] ntlmBlock = getNtlmBlock(authHeader); if (ntlmBlock != null && (workingUri == null || workingUri == request.Url.AbsoluteUri.ToString())) { workingUri = request.Url.AbsoluteUri.ToString(); if (state == 0) { Console.WriteLine("Parsing initial NTLM auth...\n" + authHeader); smbRelayThread = new Thread(() => smbRelay.startSMBRelay(ntlmQueue, this.cmd)); smbRelayThread.Start(); ntlmQueue.Enqueue(ntlmBlock); byte[] challenge = null; Config.signalHandlerClient.WaitOne(); challenge = ntlmQueue.Dequeue(); Console.WriteLine("Got SMB challenge " + Convert.ToBase64String(challenge)); if (challenge != null) { response.Headers.Add("WWW-Authenticate", "NTLM " + Convert.ToBase64String(challenge)); state = state + 1; response.StatusCode = 401; } } else if (state == 1 && request.Url.AbsoluteUri.ToString().Equals(workingUri)) { Console.WriteLine("Parsing final auth..."); if (ntlmBlock[8] == 3) { Console.WriteLine(Convert.ToBase64String(ntlmBlock)); } ntlmQueue.Enqueue(ntlmBlock); Config.signalHandler.Set(); response.StatusCode = 200; state = state + 1; Config.signalHandlerClient.WaitOne(); byte[] checkStatus = ntlmQueue.Dequeue(); if (checkStatus[0] == 99) { writer.Close(); smbRelayThread.Abort(); finished.Set(); return; } else { workingUri = null; } } } } writer.Close(); return; } else if (request.Url.AbsoluteUri.ToString().Equals("http://127.0.0.1/wpad.dat") || request.Url.AbsoluteUri.ToString().Equals("http://wpad/wpad.dat")) { Console.WriteLine("Spoofing wpad..."); response.StatusCode = 200; String responseTxt = "function FindProxyForURL(url,host){if (dnsDomainIs(host, \"localhost\")) return \"DIRECT\";"; for (int i = 0; i < wpad_exclude.Length; i++) { responseTxt = responseTxt + "if (dnsDomainIs(host, \"" + wpad_exclude[i] + "\")) return \"DIRECT\";"; } responseTxt = responseTxt + "return \"PROXY 127.0.0.1:80\";}"; writer.Write(responseTxt); } else if (workingUri == null && !request.Url.AbsoluteUri.ToString().Contains("wpad") && !request.Url.AbsoluteUri.ToString().Contains("favicon")) { Random rnd = new Random(); int sess = rnd.Next(1, 1000000); response.Headers.Add("Location", "http://localhost/GETHASHES" + sess); Console.WriteLine("Redirecting to target.." + response.Headers["Location"]); response.StatusCode = 302; writer.Close(); } } else if (request.HttpMethod.ToLower().Equals("propfind")) { if (request.Url.AbsoluteUri.ToString().Equals("http://localhost/test")) { Console.WriteLine("Got PROPFIND for /test... Responding"); response.StatusCode = 207; response.ContentType = "application/xml"; writer.Write("<?xml version='1.0' encoding='UTF-8'?><ns0:multistatus xmlns:ns0=\"DAV:\"><ns0:response><ns0:href>/test/</ns0:href><ns0:propstat><ns0:prop><ns0:resourcetype><ns0:collection /></ns0:resourcetype><ns0:creationdate>2015-08-03T14:53:38Z</ns0:creationdate><ns0:getlastmodified>Tue, 11 Aug 2015 15:48:25 GMT</ns0:getlastmodified><ns0:displayname>test</ns0:displayname><ns0:lockdiscovery /><ns0:supportedlock><ns0:lockentry><ns0:lockscope><ns0:exclusive /></ns0:lockscope><ns0:locktype><ns0:write /></ns0:locktype></ns0:lockentry><ns0:lockentry><ns0:lockscope><ns0:shared /></ns0:lockscope><ns0:locktype><ns0:write /></ns0:locktype></ns0:lockentry></ns0:supportedlock></ns0:prop><ns0:status>HTTP/1.1 200 OK</ns0:status></ns0:propstat></ns0:response></ns0:multistatus>"); writer.Close(); } else { Console.WriteLine("Got PROPFIND for " + request.Url.AbsoluteUri.ToString() + " returning 404"); response.StatusCode = 404; writer.Close(); } } else { Console.WriteLine("Got " + request.HttpMethod + " for " + request.Url.AbsoluteUri.ToString() + " replying 404"); response.StatusCode = 404; writer.Close(); } } }
private void Httpsv_OnPost(object sender, HttpRequestEventArgs e) { MAction emm = new MAction(); string logResult = string.Empty; try { byte[] bf = new byte[e.Request.ContentLength64]; string result = Encoding.UTF8.GetString(GetResult(e, bf)); //获取http请求内容 logResult = result; if (dic.ContainsKey(e.Request.RawUrl)) { emm = dic[e.Request.RawUrl]; object obj; object[] objs = new object[emm.parameterInfo.Length]; if (emm.parameterInfo.Length > 1) { throw new Exception("POST方法只允许有一个参数"); } else if (emm.parameterInfo.Length == 0) { obj = new object(); } else { obj = Newtonsoft.Json.JsonConvert.DeserializeObject(result, emm.parameterInfo[0].ParameterType); objs[0] = obj; } var action = container.Resolve(emm.controllerType); var data = emm.action.Invoke(action, objs); e.Response.ContentType = "application/json"; if (data == null) { e.Response.StatusCode = 204; } else { byte[] buffer = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(data)); e.Response.WriteContent(buffer); } } else { e.Response.StatusCode = 404; } } catch (Exception ex) { if (emm.exceptionFilter == null) { byte[] buffer = Encoding.UTF8.GetBytes(ex.Message + ex.StackTrace); e.Response.WriteContent(buffer); e.Response.StatusCode = 500; } else { if (emm.exceptionFilter != null) { if (ex.InnerException != null) { emm.exceptionFilter.OnException(ex.InnerException, e); } else { emm.exceptionFilter.OnException(ex, e); } } } } }
private void Server_HandleRequest(object sender, HttpRequestEventArgs e) { var user = (RemoteCommUserPrincipal)e.Request.User; e.Response.Charset = Encoding.UTF8; var statusCode = HttpStatusCode.NotImplemented; IEnumerable <char> statusDescription = null; var urlParts = e.Request .Address .AbsolutePath .Split('/') .Select(p => p.ToLower().Trim()) .ToArray(); if ((urlParts.Length == 3) || (urlParts.Length == 4 && urlParts[3] == string.Empty)) { switch (urlParts[1]) // action { case "exec": switch (e.Request.TryGetKnownMethod()) { case HttpMethod.POST: { // create dictionary from UTF-8 JSON string in body var @params = this._SERIALIZER .FromJson <IDictionary <string, object> >(Encoding.UTF8 .GetString(e.Request.GetBodyData())); var funcNameOrId = urlParts[2]; if (!string.IsNullOrWhiteSpace(funcNameOrId)) { var locator = ServiceLocator.Current.GetInstance <IFunctionLocator>(); IFunction func; Guid id; if (Guid.TryParse(funcNameOrId, out id)) { // try find by ID func = CollectionHelper.SingleOrDefault(locator.GetAllFunctions(), f => f.Id == id); } else { // try find by full name func = CollectionHelper.SingleOrDefault(locator.GetAllFunctions(), f => funcNameOrId == (f.FullName ?? string.Empty).ToLower().Trim()); } if (func != null) { if (this.IsFunctionAllowed(func, user)) { IFunctionExecutionContext execCtx; if (@params != null) { execCtx = func.Execute(parameters: @params, autoStart: true); } else { execCtx = func.Execute(autoStart: true); } if (execCtx.Errors != null && execCtx.Errors.Count > 0) { // raise 500 error throw new AggregateException(execCtx.Errors); } var result = new { code = execCtx.ResultCode, msg = string.IsNullOrWhiteSpace(execCtx.ResultMessage) ? null : execCtx.ResultMessage.Trim(), @params = execCtx.ResultParameters, }; e.Response.ContentType = "application/json"; e.Response.Write(chars: this._SERIALIZER .ToJson(result)); statusCode = HttpStatusCode.OK; } else { e.Response.IsForbidden = true; } } else { e.Response.DocumentNotFound = true; } } else { statusCode = HttpStatusCode.BadRequest; statusDescription = "Invalid function name or ID"; } } break; default: // invalid HTTP method statusCode = HttpStatusCode.MethodNotAllowed; break; } break; default: // unknown action statusCode = HttpStatusCode.BadRequest; statusDescription = "Unknown action"; break; } } else { statusCode = HttpStatusCode.BadRequest; statusDescription = "Invalid request URI"; } e.Response.StatusCode = statusCode; e.Response.StatusDescription = statusDescription.AsString(); }
public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath) { var request = args.Request; var response = args.Response; // Check feature if (!AuraData.FeaturesDb.IsEnabled("GuildListBoard")) { var sbe = new StringBuilder(); using (var sw = new StringWriter(sbe)) using (var writer = new XmlTextWriter(sw)) { writer.Formatting = Formatting.Indented; writer.WriteStartDocument(); writer.WriteStartElement("Guildlist"); writer.WriteAttributeString("RowCount", "0"); writer.WriteAttributeString("NowPage", "1"); writer.WriteEndElement(); writer.WriteEndDocument(); } response.Send(sbe.ToString()); return; } //var characterIdStr = request.Parameter("CharacterId"); var serverName = request.Parameter("Name_Server"); var pageStr = request.Parameter("Page"); var sortByStr = request.Parameter("SortField"); var sortTypeStr = request.Parameter("SortType"); var guildLevelStr = request.Parameter("GuildLevelIndex"); var memberAmountStr = request.Parameter("GuildMemberIndex"); var guildTypeStr = request.Parameter("GuildType"); var searchText = request.Parameter("SearchWord"); //var passport = request.Parameter("Passport"); // Check parameters if (serverName == null || pageStr == null || sortByStr == null || sortTypeStr == null || guildLevelStr == null || memberAmountStr == null || guildTypeStr == null || searchText == null) { response.Send("Invalid parameter (1)."); return; } int page; GuildSortBy sortBy; GuildSortType sortType; GuildSearchLevel guildLevel; GuildSearchMembers memberAmount; GuildType guildType; if (!int.TryParse(pageStr, out page) || !Enum.TryParse <GuildSortBy>(sortByStr, out sortBy) || !Enum.TryParse <GuildSortType>(sortTypeStr, out sortType) || !Enum.TryParse <GuildSearchLevel>(guildLevelStr, out guildLevel) || !Enum.TryParse <GuildSearchMembers>(memberAmountStr, out memberAmount) || !Enum.TryParse <GuildType>(guildTypeStr, out guildType)) { response.Send("Invalid parameter (2)."); return; } var perPage = 10; // Client limit if (page < 1) { page = 1; } var allGuilds = WebServer.Instance.Database.GetGuildList(serverName, sortBy, sortType, guildLevel, memberAmount, guildType, searchText); var guilds = allGuilds.Skip((page - 1) * perPage).Take(perPage); var sb = new StringBuilder(); using (var sw = new StringWriter(sb)) using (var writer = new XmlTextWriter(sw)) { writer.Formatting = Formatting.Indented; writer.WriteStartDocument(); writer.WriteStartElement("Guildlist"); writer.WriteAttributeString("RowCount", allGuilds.Count.ToString()); writer.WriteAttributeString("NowPage", page.ToString()); foreach (var guild in guilds) { writer.WriteStartElement("Guild"); writer.WriteAttributeString("guildid", guild.Id.ToString()); writer.WriteAttributeString("levelindex", guild.LevelIndex.ToString()); writer.WriteAttributeString("membercnt", guild.MemberCount.ToString()); writer.WriteAttributeString("guildname", guild.Name); writer.WriteAttributeString("guildtype", ((int)guild.Type).ToString()); writer.WriteAttributeString("mastername", guild.LeaderName); writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndDocument(); } response.Send(sb.ToString()); }
public void Process(HttpListenerContext context, string baseFolderPath, string[] httpMethods) { HttpListenerRequest request = context.Request; HttpListenerResponse response = context.Response; string httpMethod = request.HttpMethod.ToLower(); string httpPath = request.RawUrl.Split('?')[0]; string foundMethod = Array.Find(httpMethods, method => method == httpMethod); if (foundMethod != null) { if (httpPath == "/") { string indexPath = Path.Combine(baseFolderPath, "index.html"); if (File.Exists(indexPath)) { string bufferStr = File.ReadAllText(indexPath); byte[] buffer = Encoding.UTF8.GetBytes(bufferStr); response.ContentLength64 = buffer.Length; Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); output.Close(); response.Close(); } } else { httpPath = httpPath.Substring(1).Replace("/", @"\"); string filePath = Path.Combine(baseFolderPath, httpPath); string contentType = ""; if (File.Exists(filePath)) { string ext = Path.GetExtension(filePath).TrimStart(".".ToCharArray()); if (_helpers.MimeTypes.ContainsKey(ext)) { contentType = _helpers.MimeTypes[ext]; } else { contentType = GetContentType(ext); } byte[] buffer = File.ReadAllBytes(filePath); response.ContentLength64 = buffer.Length; response.ContentType = contentType; Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); output.Close(); response.Close(); } else { HttpConnectionDetails details = new HttpConnectionDetails( response, httpPath, httpMethod, request.ContentLength64, request.ContentType); StreamReader reader = new StreamReader(request.InputStream, request.ContentEncoding); string body = reader.ReadToEnd(); request.InputStream.Close(); reader.Close(); HttpRequestEventArgs args = new HttpRequestEventArgs(body, details); _onHttpRequestChanged(this, args); } } } }
public override void Handle(HttpRequestEventArgs args, string requestedPath, string localPath) { var request = args.Request; var response = args.Response; var server = args.Context.Server; var guildIdStr = request.Parameter("guildid"); var accountName = request.Parameter("userid"); var serverName = request.Parameter("userserver"); var characterIdStr = request.Parameter("userchar"); var sessionKeyStr = request.Parameter("key"); // Check parameters if (guildIdStr == null || accountName == null || serverName == null || characterIdStr == null || sessionKeyStr == null) { response.Send("Invalid parameter (1)."); return; } if (!_number.IsMatch(guildIdStr) || !_number.IsMatch(characterIdStr) || !_number.IsMatch(sessionKeyStr)) { response.Send("Invalid parameter (2)."); return; } var guildId = Convert.ToInt64(guildIdStr); var characterId = Convert.ToInt64(characterIdStr); var sessionKey = Convert.ToInt64(sessionKeyStr); // Check session if (!WebServer.Instance.Database.CheckSession(accountName, sessionKey)) { response.Send("Please log in first."); return; } // Check character if (!WebServer.Instance.Database.AccountHasCharacter(accountName, characterId, serverName)) { response.Send("Invalid character."); return; } // Check guild var guild = WebServer.Instance.Database.GetGuild(guildId); if (guild == null) { response.Send("Guild not found."); return; } // Check member var guildMember = guild.GetMember(characterId); if (guildMember == null) { response.Send("You're not a member of this guild."); return; } // Determine ability to level up var levelUpDisabled = true; var levelUpRequirements = ""; if (guild.Level < GuildLevel.Grand) { int points, gold; if (guild.GetLevelUpRequirements(out points, out gold) && points < guild.Points && gold < guild.Gold) levelUpDisabled = false; levelUpRequirements = string.Format("Guild Points: {0:n0}, Gold: {1:n0}", points, gold); } string success = null; string error = null; // Leader actions if (guildMember.IsLeader) { // Settings: Change messages if (request.Parameter("intro") != null) this.ChangeMessages(request, guild, ref success, ref error); // Settings: Change leader else if (request.Parameter("leader") != null) this.ChangeLeader(request, guild, ref success, ref error); // Settings: Disband else if (request.Parameter("disband") != null) this.Disband(request, guild, ref success, ref error); // Settings: Level up else if (!levelUpDisabled && request.Parameter("levelUp") != null) this.LevelUp(request, guild, ref success, ref error); } // Leader/Officer actions if (guildMember.IsLeaderOrOfficer) { // Members: Accept application if (request.Parameter("acceptApplication") != null) { var id = Convert.ToInt64(request.Parameter("acceptApplication")); var member = guild.GetMember(id); if (member == null) error = "Applicant not found."; else this.AcceptApplication(request, guild, member, ref success, ref error); } // Members: Decline application else if (request.Parameter("declineApplication") != null) { var id = Convert.ToInt64(request.Parameter("declineApplication")); var member = guild.GetMember(id); if (member == null) error = "Applicant not found."; else this.DeclineApplication(request, guild, member, ref success, ref error); } // Members: Remove member else if (request.Parameter("removeMember") != null) { var memberId = Convert.ToInt64(request.Parameter("removeMember")); var member = guild.GetMember(memberId); if (member == null) error = "Character not found."; else this.RemoveMember(request, guild, member, ref success, ref error); } } // Applicant actions if (guildMember.IsApplicant) { // Menu: Cancel application if (request.Parameter("cancelApplication") != null) this.CancelApplication(request, guild, guildMember, ref success, ref error); } // Non-leader actions if (!guildMember.IsLeader) { // Menu: Leave guild if (request.Parameter("leaveGuild") != null) this.LeaveGuild(request, guild, guildMember, ref success, ref error); } // Get non-declined members, ordered by their rank and name, putting applicants after the leaders. var members = guild.GetMembers().Where(a => a.Rank != GuildMemberRank.Declined).OrderBy(a => a.Rank == GuildMemberRank.Applied ? 25 : (int)a.Rank * 10).ThenBy(a => a.Name); var url = string.Format("/guild_home.cs?guildid={0}&userid={1}&userserver={2}&userchar={3}&key={4}", guildIdStr, accountName, serverName, characterIdStr, sessionKeyStr); // Render var engine = server.GetEngine("hbs"); response.Send(engine.RenderFile(server.GetLocalPath("templates/guild.htm"), new { url = url, guild = guild, members = members, member = guildMember, success = success, error = error, messageMaxLength = MessageMaxLength, levelUpDisabled = levelUpDisabled, levelUpRequirements = levelUpRequirements, })); }
public abstract void OnHttpGet(object sender, HttpRequestEventArgs e);
private static void PrintResults(HttpRequestEventArgs httpRequestEventArgs) { }
public void HandleAccess(HttpServer server, HttpRequestEventArgs e) { var req = e.Request; var res = e.Response; var upperPath = ""; var path = req.RawUrl.Split(new char[] { '?' }, 2)[0]; var relPath = path.Replace(BasePath, "").UrlDecode(); var download = req.QueryString["download"] != null; if (relPath.StartsWith("/")) { relPath = relPath.Substring(1); } if (relPath.Length > 0) { var tmp = !relPath.EndsWith("/") ? relPath + "/" : relPath; upperPath = Path.Combine(BasePath, Path.GetDirectoryName(Path.GetDirectoryName(tmp))); } var folder = Path.Combine(dataFolder, relPath); if (folder.Contains("../")) { folder.Replace("../", ""); } if (File.Exists(folder)) { if (folder.Contains(".dcs") && !download) { // Assemble DCS Header table List <DCSHeader> headers = DCSParser.parseDCS(folder); string dcsList = ""; headers.ForEach(a => { dcsList += String.Format( "\t<tr>\n" + "\t\t<th>{0}</th>\n" + "\t\t<th>{1}</th>\n" + "\t\t<th>{2}</th>\n" + "\t\t<th>{3}</th>\n" + "\t\t<th>{4}</th>\n" + "\t\t<th>{5}</th>\n" + "\t\t<th>{6}</th>\n" + "\t\t<th>{7}</th>\n" + "\t\t<th>{8}</th>\n" + "\t</tr>\n", a.Address, a.DateTime.ToString(), a.Status, a.Signal, a.FrequencyOffset, a.ModIndexNormal, a.DataQualNominal, a.Channel, a.SourceCode); }); string listTable = "<table cellpadding=\"5\"cellspacing=\"0\">\n" + "\t<tr>\n" + "\t\t<th>Address</th>\n" + "\t\t<th>Date / Time</th>\n" + "\t\t<th>Status</th>\n" + "\t\t<th>Signal</th>\n" + "\t\t<th>Frequency Offset</th>\n" + "\t\t<th>MIN</th>\n" + "\t\t<th>DQN</th>\n" + "\t\t<th>Channel</th>\n" + "\t\t<th>Source Code</th>\n" + "\t</tr>\n" + "\t<tr><th colspan=\"9\"><hr></th></tr>\n" + "{0}\n" + "</table>\n"; listTable = string.Format(listTable, dcsList); string output = string.Format( "<html>\n" + "\t<head>\n" + "\t\t<title>OpenSatelliteProject - {0}</title>\n" + "\t</head>\n" + "\t<body>\n" + "\t<h2>OpenSatelliteProject {0}</h2>\n" + "\tDownload File: <a href=\"{2}\">{0}</a></BR>\n" + "\t</BR>\n" + "\t{1}\n" + "\t</body>\n" + "</html>", "/" + relPath.UrlDecode(), listTable, path + "?download=1"); res.StatusCode = (int)HttpStatusCode.OK; res.WriteContent(Encoding.UTF8.GetBytes(output)); } else { // Handle File load try { res.ContentType = Presets.GetMimeType(Path.GetExtension(folder)); res.StatusCode = (int)HttpStatusCode.OK; res.SendChunked = true; using (FileStream f = File.OpenRead(folder)) { Stream o = res.OutputStream; byte[] buffer = new byte[bufferSize]; long totalBytes = f.Length; long readBytes = 0; while (readBytes < totalBytes) { int rb = f.Read(buffer, 0, bufferSize); readBytes += rb; o.Write(buffer, 0, rb); } o.Close(); } } catch (Exception ex) { string output = string.Format("Error reading file: {0}", ex); res.StatusCode = (int)HttpStatusCode.InternalServerError; res.WriteContent(Encoding.UTF8.GetBytes(output)); } } } else if (Directory.Exists(folder)) { // Handle Directory Listing. List <string> files = Directory.GetFiles(folder).Where(x => !x.EndsWith(".lrit")).OrderBy(a => a).ToList(); List <string> dirs = Directory.GetDirectories(folder).OrderBy(a => a).ToList(); string dirList = ""; string fileList = ""; if (upperPath.Length > 0) { dirList += string.Format("\t<tr>\n" + "\t\t<td><img src=\"/static/folder.gif\"></td>\n" + "\t\t<td><a href=\"{0}\">{1}</a></td>\n" + "\t\t<td>{2}</td>\n" + "\t\t<td>{3}</td>\n" + "\t</tr>\n", upperPath, "..", "", "-"); } foreach (var file in dirs) { var name = Path.GetFileName(file); var time = Directory.GetLastWriteTime(file); var url = Path.Combine(req.RawUrl, name.UrlEncode()); dirList += string.Format("\t<tr>\n" + "\t\t<td><img src=\"/static/folder.gif\"></td>\n" + "\t\t<td><a href=\"{0}\">{1}</a></td>\n" + "\t\t<td>{2}</td>\n" + "\t\t<td>{3}</td>\n" + "\t</tr>\n", url, name, time, "-"); } foreach (var file in files) { var name = Path.GetFileName(file); var time = File.GetLastWriteTime(file); var size = new System.IO.FileInfo(file).Length; var url = Path.Combine(req.RawUrl, name.UrlEncode()); fileList += string.Format("\t<tr>\n" + "\t\t<td><img src=\"/static/file.gif\"></td>\n" + "\t\t<td><a href=\"{0}\">{1}</a></td>\n" + "\t\t<td>{2}</td>\n" + "\t\t<td>{3}</td>\n" + "\t</tr>\n", url, name, time, LLTools.BytesToString(size)); } string listTable = "<table cellpadding=\"5\"cellspacing=\"0\">\n" + "\t<tr><th valign=\"top\"><img src=\"/static/blank.gif\"></th><th>Name</th><th>Last modified</th><th>Size</th></tr>\n" + "\t<tr><th colspan=\"4\"><hr></th></tr>\n" + "{0}\n" + "{1}" + "</table>\n"; listTable = string.Format(listTable, dirList, fileList); string output = string.Format( "<html>\n" + "\t<head>\n" + "\t\t<title>OpenSatelliteProject - {0}</title>\n" + "\t</head>\n" + "\t<body>\n" + "\t<h2>OpenSatelliteProject {0}</h2>\n" + "\t</BR>\n" + "\t{1}\n" + "\t</body>\n" + "</html>", "/" + relPath.UrlDecode(), listTable); res.StatusCode = (int)HttpStatusCode.OK; res.WriteContent(Encoding.UTF8.GetBytes(output)); } else { res.StatusCode = (int)HttpStatusCode.NotFound; string res404 = "File not found"; res.WriteContent(Encoding.UTF8.GetBytes(res404)); } }
private void OnGetMstInfoJsonHttpRequestHandler(HttpRequestEventArgs eventArgs) { var response = eventArgs.Response; HtmlDocument html = new HtmlDocument(); html.Title = "MST Info"; html.AddMeta(new KeyValuePair <string, string>("charset", "utf-8")); html.AddMeta(new KeyValuePair <string, string>("name", "viewport"), new KeyValuePair <string, string>("content", "width=device-width, initial-scale=1")); html.Links.Add(new HtmlLinkElement() { Href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css", Rel = "stylesheet", Integrity = "sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl", Crossorigin = "anonymous" }); html.Scripts.Add(new HtmlScriptElement() { Src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js", Integrity = "sha384-b5kHyXgcpbZJO/tY9Ul7kGkf1S0CWuKcCD38l8YkeH8z8QjE0GmW1gYU5S9FOnJ0", Crossorigin = "anonymous" }); html.Body.AddClass("body"); var container = html.CreateElement("div"); container.AddClass("container-fluid pt-5"); html.Body.AppendChild(container); var h1 = html.CreateElement("h1"); h1.InnerText = $"{Mst.Name} {Mst.Version}"; container.AppendChild(h1); var row = html.CreateElement("div"); row.AddClass("row"); container.AppendChild(row); var col1 = html.CreateElement("div"); col1.AddClass("col-md-4"); row.AppendChild(col1); var col2 = html.CreateElement("div"); col2.AddClass("col-md-8"); row.AppendChild(col2); GenerateMachineInfo(html, col1); GenerateListOfModules(html, col2); byte[] contents = Encoding.UTF8.GetBytes(html.ToString()); response.ContentType = "text/html"; response.ContentEncoding = Encoding.UTF8; response.ContentLength64 = contents.LongLength; response.Close(contents, true); }
public DynamicFileRequestedEventArgs(HttpRequestEventArgs args) { request = args; }