From bf27216a290c125f565d08700bb6693387fac9bf Mon Sep 17 00:00:00 2001 From: onefang Date: Sun, 4 Aug 2019 10:30:42 +1000 Subject: Add a basic generic web server, and a login page, plus stubs for the other basic pages. And update everyone to suit. --- OpenSim/Framework/Util.cs | 5 + .../Server/Handlers/Web/WebServerInConnector.cs | 107 +++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 OpenSim/Server/Handlers/Web/WebServerInConnector.cs (limited to 'OpenSim') diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index 18d6e4a..1afc5a4 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -1303,6 +1303,11 @@ namespace OpenSim.Framework return Path.Combine("..", "logs"); } + public static string webDir() + { + return Path.Combine("..", Path.Combine("..", "web")); + } + public static string logFile() { foreach (IAppender appender in LogManager.GetRepository().GetAppenders()) diff --git a/OpenSim/Server/Handlers/Web/WebServerInConnector.cs b/OpenSim/Server/Handlers/Web/WebServerInConnector.cs new file mode 100644 index 0000000..94c636f --- /dev/null +++ b/OpenSim/Server/Handlers/Web/WebServerInConnector.cs @@ -0,0 +1,107 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Reflection; +using System.Security; +using System.Text; +using log4net; +using OpenMetaverse; +using OpenMetaverse.StructuredData; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Framework.Servers.HttpServer; +using OpenSim.Server.Handlers.Base; + +namespace OpenSim.Server.Handlers.Web +{ + public class WebServerInConnector : ServiceConnector + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private IConfigSource m_Config; + private Hashtable mime = new Hashtable(); + + public WebServerInConnector(IConfigSource config, IHttpServer server, string configName) : base(config, server, configName) + { + m_Config = config; + mime.Add(".html", "text/html"); + mime.Add(".htm", "text/html"); + mime.Add(".shtml", "text/html"); + mime.Add(".txt", "text/plain"); + mime.Add(".css", "text/css"); + mime.Add(".js", "application/javascript"); + mime.Add(".png", "image/png"); + mime.Add(".jpeg", "image/jpeg"); + server.AddHTTPHandler("/web/", WebRequestHandler); + } + + private Hashtable WebRequestHandler(Hashtable request) + { + Hashtable reply = new Hashtable(); + + string reqpath = (string) request["uri"]; + string[] query = (string[]) request["querystringkeys"]; + Hashtable headers = (Hashtable) request["headers"]; + string method = (string) request["http-method"]; + string type = (string) request["content-type"]; + string body = (string) request["body"]; + string file = Path.Combine(Util.webDir(), reqpath.Remove(0, 5)); + + reply["int_response_code"] = 200; + if (File.Exists(file)) + { + string m = (string) mime[Path.GetExtension(file)]; + reply["content_type"] = m; + if (("image/jpeg" == m) || ("image/png" == m)) + { + reply["bin_response_data"] = File.ReadAllBytes(file); + } + else + { + StreamReader csr = File.OpenText(file); + reply["str_response_string"] = csr.ReadToEnd(); + csr.Close(); + } + } + else + { + m_log.ErrorFormat("[WEB SERVICE]: Unable to read {0}.", file); + reply["int_response_code"] = 404; + reply["content_type"] = "text/html"; + reply["str_response_string"] = "404 Unknown page" + + "404 error, can't find the " + reqpath + " page.

 

"; + } + + return reply; + } + + } +} -- cgit v1.1