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 +++++++++++++++++++++ bin/Robust.ini | 21 ++-- bin/config-include/config_IG.ini | 23 +++++ bin/config-include/config_MG.ini | 23 +++++ bin/config-include/config_localhost.ini | 1 + example/config/config.ini | 2 +- example/web/SledjHamr.png | Bin 0 -> 2025959 bytes example/web/about.html | 9 ++ example/web/help.html | 9 ++ example/web/loginpage.html | 24 +++++ example/web/password_help.html | 9 ++ example/web/register.html | 11 +++ 13 files changed, 236 insertions(+), 8 deletions(-) create mode 100644 OpenSim/Server/Handlers/Web/WebServerInConnector.cs create mode 100644 example/web/SledjHamr.png create mode 100644 example/web/about.html create mode 100644 example/web/help.html create mode 100644 example/web/loginpage.html create mode 100644 example/web/password_help.html create mode 100644 example/web/register.html 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; + } + + } +} diff --git a/bin/Robust.ini b/bin/Robust.ini index 00ad2ca..ca5829c 100644 --- a/bin/Robust.ini +++ b/bin/Robust.ini @@ -87,6 +87,10 @@ ;; Uncomment this if you want Groups V2, HG to work HGGroupsServiceConnector = "${Const|PublicPort}/OpenSim.Addons.Groups.dll:HGGroupsServiceRobustConnector" + ;; Basic web server. + WebServerInConnector = "${Const|PublicPort}/OpenSim.Server.Handlers.dll:WebServerInConnector" + + ; * This is common for all services, it's the network setup for the entire ; * server instance, if none is specified above ; * @@ -563,32 +567,32 @@ ; login page: optional: if it exists it will be used to tell the client to use ; this as splash page - welcome = ${Const|BaseURL}/drupal/loginpage + welcome = ${Const|BaseURL}:${Const|PublicPort}/web/loginpage.html ; helper uri: optional: if it exists it will be used to tell the client to use ; this for all economy related things ;economy = ${Const|BaseURL}/economy ; web page of grid: optional: page providing further information about your grid - about = ${Const|BaseURL}/drupal/ + about = ${Const|BaseURL}:${Const|PublicPort}/web/about.html ; account creation: optional: page providing further information about obtaining ; a user account on your grid - register = ${Const|BaseURL}/drupal/content/How_to_join + register = ${Const|BaseURL}:${Const|PublicPort}/web/register.html ; help: optional: page providing further assistance for users of your grid - help = ${Const|BaseURL}/drupal/Tags/help + help = ${Const|BaseURL}:${Const|PublicPort}/web/help.html ; password help: optional: page providing password assistance for users of your grid - password = ${Const|BaseURL}/drupal + password = ${Const|BaseURL}:${Const|PublicPort}/web/password_help.html ; HG address of the gatekeeper, if you have one ; this is the entry point for all the regions of the world - ; gatekeeper = ${Const|BaseURL}:${Const|PublicPort}/ + gatekeeper = ${Const|BaseURL}:${Const|PublicPort}/ ; HG user domain, if you have one ; this is the entry point for all user-related HG services - ; uas = ${Const|BaseURL}:${Const|PublicPort}/ + uas = ${Const|BaseURL}:${Const|PublicPort}/ [GatekeeperService] @@ -783,3 +787,6 @@ [MuteListService] LocalServiceModule = "OpenSim.Services.MuteListService.dll:MuteListService" + + +[WebService] diff --git a/bin/config-include/config_IG.ini b/bin/config-include/config_IG.ini index abe159b..81c5c9d 100644 --- a/bin/config-include/config_IG.ini +++ b/bin/config-include/config_IG.ini @@ -18,6 +18,7 @@ ConfigPath = "../../config" DbPath = "../../db" LogPath = "../../logs" + WebPath = "../../web" [Const] MOTD = "onefang needs a little coding or sysadmin work to keep IG going. Please help me find some." @@ -77,3 +78,25 @@ Region_Welcome = "DefaultRegion, FallbackRegion, Persistent" Region_Sandbox = "DefaultRegion, FallbackRegion, Persistent" Region_Kellietown = "DefaultRegion, FallbackRegion, Persistent" + +[GridInfoService] + ; login page: optional: if it exists it will be used to tell the client to use + ; this as splash page + welcome = ${Const|BaseURL}/drupal/loginpage + + ; helper uri: optional: if it exists it will be used to tell the client to use + ; this for all economy related things + ;economy = ${Const|BaseURL}/economy + + ; web page of grid: optional: page providing further information about your grid + about = ${Const|BaseURL}/drupal/ + + ; account creation: optional: page providing further information about obtaining + ; a user account on your grid + register = ${Const|BaseURL}/drupal/content/How_to_join + + ; help: optional: page providing further assistance for users of your grid + help = ${Const|BaseURL}/drupal/Tags/help + + ; password help: optional: page providing password assistance for users of your grid + password = ${Const|BaseURL}/drupal diff --git a/bin/config-include/config_MG.ini b/bin/config-include/config_MG.ini index a8992f8..62b523c 100644 --- a/bin/config-include/config_MG.ini +++ b/bin/config-include/config_MG.ini @@ -18,6 +18,7 @@ ConfigPath = "../../config" DbPath = "../../db" LogPath = "../../logs" + WebPath = "../../web" [Const] MOTD = "All of the World is a Stage, and Everyone's a Critic." @@ -98,3 +99,25 @@ Region_MisFitz_HyperPort = "FallbackRegion" Region_MisFitz_Sandbox = "FallbackRegion" Region_MisFitz_Continuum= "DefaultHGRegion" + +[GridInfoService] + ; login page: optional: if it exists it will be used to tell the client to use + ; this as splash page + welcome = ${Const|jOpensimURL}/index.php?option=com_opensim + + ; helper uri: optional: if it exists it will be used to tell the client to use + ; this for all economy related things + economy = ${Const|BaseURL}/_tools/helper/ + + ; web page of grid: optional: page providing further information about your grid + ;about = ${Const|BaseURL}/about + + ; account creation: optional: page providing further information about obtaining + ; a user account on your grid + ;register = ${Const|BaseURL}/register + + ; help: optional: page providing further assistance for users of your grid + ;help = ${Const|BaseURL}/help + + ; password help: optional: page providing password assistance for users of your grid + ;password = ${Const|BaseURL}/password diff --git a/bin/config-include/config_localhost.ini b/bin/config-include/config_localhost.ini index 9959ae1..e95b04c 100644 --- a/bin/config-include/config_localhost.ini +++ b/bin/config-include/config_localhost.ini @@ -18,6 +18,7 @@ ConfigPath = "../../config" DbPath = "../../db" LogPath = "../../logs" + WebPath = "../../web" [Const] MOTD = "Welcome to your local grid." diff --git a/example/config/config.ini b/example/config/config.ini index 7efdb44..e95b04c 100644 --- a/example/config/config.ini +++ b/example/config/config.ini @@ -18,7 +18,7 @@ ConfigPath = "../../config" DbPath = "../../db" LogPath = "../../logs" - + WebPath = "../../web" [Const] MOTD = "Welcome to your local grid." diff --git a/example/web/SledjHamr.png b/example/web/SledjHamr.png new file mode 100644 index 0000000..1660a90 Binary files /dev/null and b/example/web/SledjHamr.png differ diff --git a/example/web/about.html b/example/web/about.html new file mode 100644 index 0000000..e45f00a --- /dev/null +++ b/example/web/about.html @@ -0,0 +1,9 @@ + +About this grid + + + +This is a virtual world, usually called a grid, based on OpenSim_SC. +

 

+ + diff --git a/example/web/help.html b/example/web/help.html new file mode 100644 index 0000000..64194ca --- /dev/null +++ b/example/web/help.html @@ -0,0 +1,9 @@ + +Help for this grid + + + +Include help for your grid here. +

 

+ + diff --git a/example/web/loginpage.html b/example/web/loginpage.html new file mode 100644 index 0000000..aa58e6b --- /dev/null +++ b/example/web/loginpage.html @@ -0,0 +1,24 @@ + +This grid + + + +

 

+

 

+

Add your fancy splash page for your grid here.

+

 

+

 

+

There may be some new members.   Welcome new members.

+

 

+

There are likely some members of this grid.

+

 

+

There maybe some people online now.

+

 

+

There maybe some visitors from the hypergrid.

+

 

+

There is probably at least one region, maybe more.

+

 

+

Some people might have been on in the last month.

+

 

+ + diff --git a/example/web/password_help.html b/example/web/password_help.html new file mode 100644 index 0000000..129fb7d --- /dev/null +++ b/example/web/password_help.html @@ -0,0 +1,9 @@ + +Password help for this grid + + + +Include password help for your grid here. +

 

+ + diff --git a/example/web/register.html b/example/web/register.html new file mode 100644 index 0000000..a316f41 --- /dev/null +++ b/example/web/register.html @@ -0,0 +1,11 @@ + +Account for this grid + + + +Include account registration help for your grid here. +

 

+

If you want to register an acocunt on this grid, ask the person that runs it to do that for you.

+

 

+ + -- cgit v1.1