Ejemplo n.º 1
0
        public string RenderPage(RequestContext request)
        {
            if (File.Exists(Template))
            {
                string page = ApplyTemplate(request, File.ReadAllText(Template));
                //Global tags
                //Do page parts first.
                Scripting.ApplyTag("section:Header", File.ReadAllText("Data/templates/section.header.html"), ref page);
                Scripting.ApplyTag("section:Footer", File.ReadAllText("Data/templates/section.footer.html"), ref page);
                //Then persistance objects.
                foreach (var v in Persistance.API)
                {
                    Scripting.ApplyTag("persistance:" + v.Key, v.Value.ToString(), ref page);
                }
                //User tags.
                Scripting.ApplyTag("user:Id", UserSession.CurrentSession.UserId.ToString(), ref page);
                Scripting.ApplyTag("user:Name", UserSession.CurrentSession.Username, ref page);
                Scripting.ApplyTag("session:Id", UserSession.CurrentSession.SessionId.ToString(), ref page);
                //Then the nav.
                Scripting.ApplyTag("nav", ApplyNav(), ref page);
                //End

                return page;
            }
            else
            {
                return Render();
            }
        }
Ejemplo n.º 2
0
 public ProcessingResult Process(RequestContext context)
 {
     // Init our vars.
     IRequest request = context.Request;
     IResponse response = context.Response;
     StreamWriter sw = new StreamWriter(response.Body);
     sw.AutoFlush = true;
     // Get the page.
     Page page;
     string uri = request.Uri.AbsolutePath.Remove(0, 1);
     // Check if it exists.
     if (!_pages.ContainsKey(uri))
     {
         return ProcessingResult.Continue;
     }
     // Handle content.
     page = _pages[uri];
     if ((request.Method == Method.Post
         || (request.Method == Method.Get && request.QueryString.Count > 0))
         && page is IPostHandler)
     {
         sw.WriteLine(((IPostHandler)page).Post(request.Parameters));
     }
     else
     {
         sw.Write(page.RenderPage(context));
     }
     response.Add(new StringHeader("X-Content-Class", "Dynamic"));
     return ProcessingResult.SendResponse;
 }
Ejemplo n.º 3
0
        public ProcessingResult Process(RequestContext context)
        {
            var ep = endpoints.Where(e => context.Request.Uri.AbsolutePath.StartsWith(e.Url)).ToList();

            if (ep.Count == 0)
                throw new NotFoundException("Handler not found");

            foreach (var endpoint in ep)
                endpoint.Process(context);

            context.Response.Status = HttpStatusCode.OK;
            context.Response.Connection.Type = ConnectionType.Close;

            return ProcessingResult.Abort;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Process a request.
        /// </summary>
        /// <param name="context">Request information</param>
        /// <returns>What to do next.</returns>
        public ProcessingResult Process(RequestContext context)
        {
            // should add information about the file here.

            // Lets send the header.
            ResponseWriter generator = new ResponseWriter();
            generator.SendHeaders(context.HttpContext, context.Response);

            // loop through file contents.
            BinaryWriter writer = new BinaryWriter(context.HttpContext.Stream);
            


            // Abort is needed since we've used the network
            // stream directly. Else the framework will try to use the
            // response object + network stream to send another response.
            return ProcessingResult.Abort; 
        }
Ejemplo n.º 5
0
        public ProcessingResult Process(RequestContext requestcontext)
        {
            IRequest request = requestcontext.Request;
            IResponse response = requestcontext.Response;
            IHttpContext context = requestcontext.HttpContext;

            if (SessionManager.Current.SessionId == null)
            {
                SessionManager.Create();
                SessionManager.Current.SessionId = Guid.NewGuid().ToString().Replace("-", String.Empty);
            }
            if (request.Method == Method.Post && request.Parameters.Count == 3)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("({0}) <Web Interface> AJAX request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri);
                Console.WriteLine("({0}) <Web Interface> AJAX parameters width={1}&height={2}&rooturl={3}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("width").Value, request.Parameters.Get("height").Value, request.Parameters.Get("rooturl").Value);
                Console.WriteLine("({0}) <Web Interface> AJAX session id {1}", DateTime.Now.ToString("hh:mm"), SessionManager.Current.SessionId);
                response.ContentType = new ContentTypeHeader("application/json");
                response.Status = HttpStatusCode.OK;
                var stream = new MemoryStream(ASCIIEncoding.Default.GetBytes("{\"session\":\"" + SessionManager.Current.SessionId + "\",\"data\":\"Connected to server-side. Welcome to WCell.Terminal\"}"));
                response.ContentLength.Value = stream.Length;
                var generator = new ResponseWriter();
                generator.SendHeaders(context, response);
                generator.SendBody(context, stream);
                Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + SessionManager.Current.SessionId + "\",\"data\":\"Connected to server-side. Welcome to WCell.Terminal\"}");
                return ProcessingResult.Abort;
            }
            else
            {
                if (context.IsSecure)
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("({0}) <Web Interface> Secure HTTP request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri);
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("({0}) <Web Interface> HTTP request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri);
                }
            }
            return ProcessingResult.Continue;
        }
Ejemplo n.º 6
0
 public ProcessingResult Process(RequestContext context)
 {
     // Init our vars.
     IRequest request = context.Request;
     IResponse response = context.Response;
     // Get the page.
     byte[] resource;
     string uri = request.Uri.AbsolutePath.Remove(0, 1);
     // Check if it exists.
     if (!File.Exists("Data/static/" + uri))
     {
         return ProcessingResult.Continue;
     }
     resource = File.ReadAllBytes("Data/static/" + uri);
     response.Add(new StringHeader("Cache-Control", "max-age=28800"));
     response.Add(new StringHeader("X-Content-Class", "Static"));
     response.Body.Write(resource, 0, resource.Length);
     response.ContentType = new ContentTypeHeader(MIMEAssistant.GetMIMEType("Data/static/" + uri));
     return ProcessingResult.SendResponse;
 }
Ejemplo n.º 7
0
        public ProcessingResult Process(RequestContext context)
        {
            IRequest request = context.Request;
            IResponse response = context.Response;

            var nancyRequest = ConvertRequestToNancyRequest(request);
            using (var nancyContext = engine.HandleRequest(nancyRequest))
            {
                using (MemoryStream mstream = new MemoryStream())
                {
                    nancyContext.Response.Contents.Invoke(mstream);

                    response.ContentType.Value = nancyContext.Response.ContentType;
                    response.ContentLength.Value = mstream.Length;
                    var generator = HttpFactory.Current.Get<ResponseWriter>();
                    generator.SendHeaders(context.HttpContext, response);
                    generator.SendBody(context.HttpContext, mstream);
                }
            }
            return ProcessingResult.Abort;
        }
Ejemplo n.º 8
0
        /// <summary>
        /// A request have arrived but not yet been processed yet.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <remarks>
        /// Default implementation adds a <c>Date</c> header and <c>Server</c> header.
        /// </remarks>
        protected virtual void OnBeforeRequest(RequestContext context)
        {
            if (context.Request.ContentLength.Value > MaxContentSize)
                throw new HttpException(HttpStatusCode.RequestEntityTooLarge, "Too large body, limit is " + MaxContentSize);

            context.Response.Add(new DateHeader("Date", DateTime.UtcNow));
            context.Response.Add(new StringHeader("Server", ServerName));
        }
Ejemplo n.º 9
0
 /// <summary>
 /// All server modules are about to be invoked.
 /// </summary>
 /// <param name="context">The context.</param>
 /// <remarks>
 /// Called when routers have been invoked but no modules yet.
 /// </remarks>
 protected virtual void OnBeforeModules(RequestContext context)
 {
 }
Ejemplo n.º 10
0
 /// <summary>
 /// Called before anything else.
 /// </summary>
 /// <param name="context">The context.</param>
 /// <remarks>
 /// Looks after a <see cref="AuthorizationHeader"/> in the request and will
 /// use the <see cref="AuthenticationProvider"/> if found.
 /// </remarks>
 protected virtual void OnAuthentication(RequestContext context)
 {
     var authHeader = (AuthorizationHeader) context.Request.Headers[AuthorizationHeader.NAME];
     if (authHeader != null)
         AuthenticationProvider.Authenticate(context.Request);
 }
Ejemplo n.º 11
0
        private ProcessingResult HandleRequest(RequestEventArgs e)
        {
            var context = new RequestContext
                              {
                                  HttpContext = e.Context,
                                  Request = e.Request,
                                  Response = e.Response
                              };

            OnAuthentication(context);
            OnBeforeRequest(context);
            PrepareRequest(this, e);


            if (e.Request.ContentLength.Value > 0)
                DecodeBody(e.Request);

            // Process routers.
            ProcessingResult result = ProcessRouters(context);
            if (ProcessResult(result, e))
                _logger.Debug("Routers processed the request.");


            // process modules.
            result = ProcessModules(context);
            if (ProcessResult(result, e))
                return result;

            RequestReceived(this, e);


            return ProcessingResult.Continue;
        }
Ejemplo n.º 12
0
        public ProcessingResult Process(RequestContext context)
        {
            int intServerID = 0;
            MCServer s;
            string json;
            JObject jProps;

            if (context.Request.Uri.AbsoluteUri.Contains(@"/api/"))
            {
                //must be authenticated

                //what is the action?
                if (context.Request.Method == Method.Post && WebSession.Current.UserName == "admin")
                {
                    String strResponse = "";
                    IParameterCollection param = context.Request.Parameters;
                    switch (context.Request.Parameters["action"])
                    {
                        case "log":
                            //grabs lines from the log.
                            int intStartID = Convert.ToInt32(context.Request.Parameters["start"]);
                            int intNumRows = Convert.ToInt32(context.Request.Parameters["rows"]);
                            int intServer = Convert.ToInt32(context.Request.Parameters["serverid"]);
                            string strLevel = context.Request.Parameters["level"];

                            DataSet ds = Database.ReturnLogRows(intStartID, intNumRows, strLevel, intServer);

                            strResponse = JsonConvert.SerializeObject(ds, Formatting.Indented);
                            break;
                        case "list":
                            //List available servers
                            strResponse = "{ \"servers\" : [";
                            foreach (KeyValuePair<int, MCServer> kvp in Core.Servers)
                            {
                                strResponse += "{ \"id\" : " + kvp.Value.ServerID + ", " +
                                                 "\"title\" : \"" + kvp.Value.ServerTitle + "\", " +
                                                 "\"ver\" : \"" + kvp.Value.ServerVersion + "\" } ,";
                            };
                            strResponse = strResponse.Remove(strResponse.Length - 1);
                            strResponse += "]}";
                            break;
                        case "status":
                            //Get status of a server
                            s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])];
                            strResponse = "{ \"serverid\" : " + s.ServerID + "," +
                                            "\"status\" : \"" + s.Running + "\"," +
                                            "\"ram\" : " + s.GetMemory() + "," +
                                            "\"vm\" : " + s.GetVMemory() + "," +
                                            "\"restartneeded\" : \"" + s.RestartNeeded + "\"," +
                                            "\"restartwhenfree\" : \"" + s.RestartWhenFree + "\"," +
                                            "\"gamemode\" : \"" + s.GameMode + "\"," +
                                            "\"players\" : [";
                            if (s.Players.Count > 0)
                            {
                                foreach (KeyValuePair<string, Objects.Player> kvp in s.Players)
                                {
                                    strResponse += " { \"name\": \"" + kvp.Value.Username + "\", \"level\": \"" + kvp.Value.Level + "\" },";
                                };
                                strResponse = strResponse.Remove(strResponse.Length - 1);
                            }
                            strResponse += "]}";
                            break;
                        case "overviewer":
                            //Maps a server
                            s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])];
                            string strRenderModes = "";
                            if (param["normal"] == "true") strRenderModes += "normal";
                            if (param["lighting"] == "true")
                            {
                                if (strRenderModes != "") strRenderModes += ",";
                                strRenderModes += "lighting";
                            }
                            if (param["night"] == "true")
                            {
                                if (strRenderModes != "") strRenderModes += ",";
                                strRenderModes += "night";
                            }
                            if (param["spawn"] == "true")
                            {
                                if (strRenderModes != "") strRenderModes += ",";
                                strRenderModes += "spawn";
                            }
                            if (param["cave"] == "true")
                            {
                                if (strRenderModes != "") strRenderModes += ",";
                                strRenderModes += "cave";
                            }
                            AddOns.Overviewer over = new AddOns.Overviewer(s, "rendermodes=" + strRenderModes);
                            over.Start();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "c10t":
                            //Images a server
                            s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])];
                            AddOns.c10t c10t = new AddOns.c10t(s, "night=" + param["night"] + "&mode=" + param["mode"]);
                            c10t.Start();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "tectonicus":
                            //Maps a server
                            s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])];
                            AddOns.Tectonicus tecton = new AddOns.Tectonicus(s, "lighting=" + param["lighting"] + "&night=" + param["night"] + "&delete=" + param["delete"]);
                            tecton.Start();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "start":
                            //Starts a server
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Start();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "stop":
                            //Stops a server
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Stop();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "restart":
                            //Restarts a server
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Restart();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "delayed-restart":
                            //Restarts a server after a specified time and warns players
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].DelayedRestart(Convert.ToInt32(param["delay"]));
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "restart-when-free":
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].RestartIfEmpty();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "command":
                            //Sends literal command to a server
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Send(context.Request.Parameters["message"]);
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "get-yams-settings":
                            DataSet dsSettings = Database.ReturnSettings();
                            JsonConvert.SerializeObject(dsSettings, Formatting.Indented);
                            break;
                        case "save-yams-settings":
                            //Settings update
                            foreach (Parameter p in param)
                            {
                                if (p.Name != "action") Database.SaveSetting(p.Name, p.Value);
                            }
                            break;
                        case "get-server-settings":
                            //retrieve all server settings as JSON
                            intServerID = Convert.ToInt32(param["serverid"]);
                            strResponse = "{ \"serverid\" : " + intServerID + "," +
                                              "\"title\" : \"" + Database.GetSetting(intServerID, "ServerTitle") + "\"," +
                                              "\"optimisations\" : \"" + Database.GetSetting(intServerID, "ServerEnableOptimisations") + "\"," +
                                              "\"memory\" : \"" + Database.GetSetting(intServerID, "ServerAssignedMemory") + "\"," +
                                              "\"autostart\" : \"" + Database.GetSetting(intServerID, "ServerAutoStart") + "\"," +
                                              "\"type\" : \"" + Database.GetSetting(intServerID, "ServerType") + "\"," +
                                              "\"motd\" : \"" + Database.GetSetting("motd", "MC", intServerID) + "\"";
                            strResponse += "}";
                            break;
                        case "get-mc-settings":
                            //retrieve all server settings as JSON
                            intServerID = Convert.ToInt32(param["serverid"]);

                            json = File.ReadAllText(YAMS.Core.RootFolder + @"\lib\properties.json");
                            jProps = JObject.Parse(json);

                            strResponse = "";

                            foreach(JObject option in jProps["options"]) {
                                strResponse += "<p><label for=\"" + (string)option["key"] + "\" title=\"" + (string)option["description"] + "\">" + (string)option["name"] + "</label>";

                                string strValue = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty((string)option["key"]);

                                switch ((string)option["type"])
                                {
                                    case "string":
                                        strResponse += "<input type=\"text\" name=\"" + (string)option["key"] + "\" value=\"" + strValue + "\" />";
                                        break;
                                    case "boolean":
                                        strResponse += "<select name=\"" + (string)option["key"] + "\">";
                                        strResponse += "<option value=\"true\"";
                                        if (strValue == "true") strResponse += " selected";
                                        strResponse += ">True</option>";
                                        strResponse += "<option value=\"false\"";
                                        if (strValue == "false") strResponse += " selected";
                                        strResponse += ">False</option>";
                                        strResponse += "</select>";
                                        break;
                                    case "integer":
                                        strResponse += "<select name=\"" + (string)option["key"] + "\">";
                                        int intValue = Convert.ToInt32(strValue);
                                        for (var i = Convert.ToInt32((string)option["min"]); i <= Convert.ToInt32((string)option["max"]); i++)
                                        {
                                            strResponse += "<option value=\"" + i.ToString() + "\"";
                                            if (intValue == i) strResponse += " selected";
                                            strResponse += ">" + i.ToString() + "</option>";
                                        }
                                        strResponse += "</select>";
                                        break;
                                    case "array":
                                        strResponse += "<select name=\"" + (string)option["key"] + "\">";
                                        string strValues = (string)option["values"];
                                        string[] elements = strValues.Split(',');
                                        foreach (string values in elements)
                                        {
                                            string[] options = values.Split('|');
                                            strResponse += "<option value=\"" + options[0] + "\"";
                                            if (strValue == options[0]) strResponse += " selected";
                                            strResponse += ">" + options[1] + "</option>";
                                        }
                                        strResponse += "</select>";
                                        break;
                                }

                                strResponse += "</p>";
                            }

                            break;
                        case "save-server-settings":
                            intServerID = Convert.ToInt32(param["serverid"]);
                            Database.UpdateServer(intServerID, "ServerTitle", param["title"]);
                            Database.UpdateServer(intServerID, "ServerType", param["type"]);
                            Database.UpdateServer(intServerID, "ServerAssignedMemory", Convert.ToInt32(param["memory"]));
                            if (param["optimisations"] == "true") Database.UpdateServer(intServerID, "ServerEnableOptimisations", true);
                            else Database.UpdateServer(intServerID, "ServerEnableOptimisations", false);
                            if (param["autostart"] == "true") Database.UpdateServer(intServerID, "ServerAutoStart", true);
                            else Database.UpdateServer(intServerID, "ServerAutoStart", false);
                            Database.SaveSetting(intServerID, "motd", param["message"]);

                            //Save the server's MC settings
                            MCServer thisServer = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])];

                            json = File.ReadAllText(YAMS.Core.RootFolder + @"\lib\properties.json");
                            jProps = JObject.Parse(json);

                            strResponse = "";

                            foreach (JObject option in jProps["options"])
                            {
                                thisServer.SaveProperty((string)option["key"], param[(string)option["key"]]);
                            }

                            if (thisServer.Running) thisServer.RestartIfEmpty();

                            break;
                        case "get-config-file":
                            List<string> listConfig = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].ReadConfig(param["file"]);
                            strResponse = JsonConvert.SerializeObject(listConfig, Formatting.Indented);
                            break;
                        case "upload-world":
                            var test = context.Request.Files["new-world"];
                            break;
                        case "delete-world":
                            bool bolRandomSeed = false;
                            if (param["randomseed"] == "true") bolRandomSeed = true;
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].ClearWorld(bolRandomSeed);
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "about":
                            Dictionary<string, string> dicAbout = new Dictionary<string, string> {
                                { "dll" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Library.dll")).FileVersion },
                                { "svc" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Service.exe")).FileVersion },
                                { "gui" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Updater.exe")).FileVersion },
                                { "db" , Database.GetSetting("DBSchema", "YAMS") }
                            };
                            strResponse = JsonConvert.SerializeObject(dicAbout, Formatting.Indented);
                            break;
                        case "installed-apps":
                            Dictionary<string, string> dicApps = new Dictionary<string, string> {
                                { "bukkit" , Database.GetSetting("BukkitInstalled", "YAMS") },
                                { "overviewer" , Database.GetSetting("OverviewerInstalled", "YAMS") },
                                { "c10t" , Database.GetSetting("C10tInstalled", "YAMS") },
                                { "biomeextractor" , Database.GetSetting("BiomeExtractorInstalled", "YAMS") },
                                { "tectonicus" , Database.GetSetting("TectonicusInstalled", "YAMS") },
                                { "nbtoolkit" , Database.GetSetting("NBToolkitInstalled", "YAMS") }
                            };
                            strResponse = JsonConvert.SerializeObject(dicApps, Formatting.Indented);
                            break;
                        case "update-apps":
                            Database.SaveSetting("OverviewerInstalled", param["overviewer"]);
                            Database.SaveSetting("C10tInstalled", param["c10t"]);
                            Database.SaveSetting("BiomeExtractorInstalled", param["biomeextractor"]);
                            Database.SaveSetting("TectonicusInstalled", param["tectonicus"]);
                            Database.SaveSetting("NBToolkitInstalled", param["nbtoolkit"]);
                            Database.SaveSetting("BukkitInstalled", param["bukkit"]);
                            strResponse = "done";
                            break;
                        case "force-autoupdate":
                            AutoUpdate.CheckUpdates();
                            break;
                        default:
                            return ProcessingResult.Abort;
                    }

                    context.Response.Reason = "Completed - YAMS";
                    context.Response.Connection.Type = ConnectionType.Close;
                    byte[] buffer = Encoding.UTF8.GetBytes(strResponse);
                    context.Response.Body.Write(buffer, 0, buffer.Length);
                }
                else
                {
                    // not a post, so say bye bye!
                    return ProcessingResult.Abort;
                }

                return ProcessingResult.SendResponse;
            }
            else if (context.Request.Uri.AbsoluteUri.Contains(@"/admin"))
            {

                if (WebSession.Current.UserName != "admin")
                {
                    context.Response.Reason = "Completed - YAMS";
                    context.Response.Connection.Type = ConnectionType.Close;
                    byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\login.html"));
                    context.Response.Body.Write(buffer, 0, buffer.Length);
                    return ProcessingResult.SendResponse;
                }
                else
                {
                    context.Response.Reason = "Completed - YAMS";
                    context.Response.Connection.Type = ConnectionType.Close;
                    byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\index.html"));
                    context.Response.Body.Write(buffer, 0, buffer.Length);
                    return ProcessingResult.SendResponse;
                }
            }
            else if (context.Request.Uri.AbsoluteUri.Contains(@"/login"))
            {
                //This is a login request, check it's legit
                string userName = context.Request.Form["strUsername"];
                string password = context.Request.Form["strPassword"];

                if (userName == "admin" && password == Database.GetSetting("AdminPassword", "YAMS"))
                {
                    WebSession.Create();
                    WebSession.Current.UserName = "******";
                    context.Response.Redirect(@"/admin");
                    return ProcessingResult.SendResponse;
                }
                else
                {
                    context.Response.Reason = "Completed - YAMS";
                    context.Response.Connection.Type = ConnectionType.Close;
                    byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\login.html"));
                    context.Response.Body.Write(buffer, 0, buffer.Length);
                    return ProcessingResult.SendResponse;
                }
            }
            else if (context.Request.Uri.AbsoluteUri.Equals(@"/")) {
                    context.Response.Redirect(@"/admin");
                    return ProcessingResult.SendResponse;
            }
            else
            {
                return ProcessingResult.Abort;
            }
        }
Ejemplo n.º 13
0
 protected virtual string ApplyTemplate(RequestContext request, string template)
 {
     return template;
 }
 /// <summary>
 /// Process a request.
 /// </summary>
 /// <param name="context">Request information</param>
 /// <returns>What to do next.</returns>
 /// <exception cref="InternalServerException">Failed to find file extension</exception>
 /// <exception cref="ForbiddenException">Forbidden file type.</exception>
 public ProcessingResult Process(RequestContext context)
 {
     var processingResult = _fileModule.Process(context);
     if (CacheDuration > 0)
         context.Response.Add(new StringHeader("Cache-Control", "max-age=" + CacheDuration.ToString()));
     return processingResult;
 }
Ejemplo n.º 15
0
        public ProcessingResult Process(RequestContext context)
        {
            IServableContent hit = null;
            content.TryGetValue(context.Request.Uri.AbsolutePath, out hit);
            var runner = hit as ActionRunner;

            if (runner != null)
            {
                var service = (JsonService)runner.Type.GetConstructor(Type.EmptyTypes).Invoke(null);
                string result = null;
                try
                {
                    result = runner.Invoke(service, context.Request);
                }
                catch (Exception e)
                {
                    Logger.ReportException("Failed to execute action in MBWeb: " + context.Request.Uri.AbsolutePath, e);
                    throw;
                }

                var body = new MemoryStream();
                var bytes = Encoding.UTF8.GetBytes(result);
                body.Write(bytes, 0, bytes.Length);

                context.Response.ContentLength.Value = body.Length;

                context.Response.Add(new ContentTypeHeader("application/json"));

                var generator = new ResponseWriter();
                generator.SendHeaders(context.HttpContext, context.Response);
                generator.SendBody(context.HttpContext, body);

                return ProcessingResult.Abort;
            }

            EmbeddedContent embeddedContent = hit as EmbeddedContent;
            if (embeddedContent != null)
            {
                var actual = new MemoryStream();

                using (var body = embeddedContent.Stream)
                {
                    StreamReader reader = new StreamReader(body);
                    var read = reader.ReadToEnd();
                    var bytes = Encoding.UTF8.GetBytes(read);

                    actual.Write(bytes, 0, bytes.Length);
                    context.Response.ContentLength.Value = bytes.Length;
                    actual.Seek(0, SeekOrigin.Begin);
                }

                context.Response.Add(embeddedContent.ContentTypeHeader);
                var generator = new ResponseWriter();
                generator.SendHeaders(context.HttpContext, context.Response);
                generator.SendBody(context.HttpContext, actual);

                return ProcessingResult.Abort;
            }

            // fake 404 for now
            var badRequest = new MemoryStream(Encoding.UTF8.GetBytes("Not Found : " + context.Request.Uri.AbsolutePath));
            var rw = new ResponseWriter();
            context.Response.ContentLength.Value = badRequest.Length;
            rw.SendHeaders(context.HttpContext, context.Response);
            rw.SendBody(context.HttpContext, badRequest);
            return ProcessingResult.Abort;
        }
Ejemplo n.º 16
0
 public void Process(RequestContext context)
 {
     Application.Exit();
 }
Ejemplo n.º 17
0
        public ProcessingResult Process(RequestContext requestcontext)
        {
            IRequest request = requestcontext.Request;
            IResponse response = requestcontext.Response;
            IHttpContext context = requestcontext.HttpContext;

            if (request.Method == Method.Post)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("({0}) <Web Interface> AJAX request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri);

                if (HasParameter(request.Parameters, request.Parameters.Get("rooturl")))
                {
                    if (SessionManager.Current == null)
                    {
                        SessionManager.Create();
                        SessionManager.Current.FirstRun = true;
                        SessionManager.Save(SessionManager.Current);
                        Console.WriteLine("({0}) <Web Interface> Created new session with id {1}", DateTime.Now.ToString("hh:mm"), SessionManager.Current.SessionId);
                    }
                    Console.WriteLine("({0}) <Web Interface> AJAX parameters width={1}&height={2}&rooturl={3}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("width").Value, request.Parameters.Get("height").Value, request.Parameters.Get("rooturl").Value);
                    response.ContentType = new ContentTypeHeader("application/json");
                    response.Status = HttpStatusCode.OK;
                    var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + SessionManager.Current.SessionId + "\",\"data\":\"\"}"));
                    response.ContentLength.Value = stream.Length;
                    var generator = new ResponseWriter();
                    generator.SendHeaders(context, response);
                    generator.SendBody(context, stream);
                    Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + SessionManager.Current.SessionId + "\",\"data\":\"\"}");
                }

                if (HasParameter(request.Parameters, request.Parameters.Get("session")))
                {
                    Console.WriteLine("({0}) <Web Interface> AJAX parameters width={1}&height={2}&session={3}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("width").Value, request.Parameters.Get("height").Value, request.Parameters.Get("session").Value);
                    //Console.WriteLine("({0}) <Web Interface> Trying to load session with id {1}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("session").Value);
                    session = SessionManager.Load(request.Parameters.Get("session").Value);

                    if (session == null)
                    {
                        Console.WriteLine("({0}) <Web Interface> Failed to load session with id {1}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("session").Value);
                        response.ContentType = new ContentTypeHeader("application/json");
                        response.Status = HttpStatusCode.OK;
                        var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + request.Parameters.Get("session").Value + "\",\"data\":\"Failed to load session !\"}"));
                        response.ContentLength.Value = stream.Length;
                        var generator = new ResponseWriter();
                        generator.SendHeaders(context, response);
                        generator.SendBody(context, stream);
                        Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + request.Parameters.Get("session").Value + "\",\"data\":\"Failed to load session !\"}");
                    }
                    else
                    {
                        //Console.WriteLine("({0}) <Web Interface> Loaded session with id {1}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("session").Value);
                        if (request.Parameters.Get("session").Value == session.SessionId)
                        {
                            if (HasParameter(request.Parameters, request.Parameters.Get("keys")))
                            {
                                lastkeys = request.Parameters.Get("keys").Value;
                                while (lastkeys != null)
                                {
                                    Thread.Sleep(50);
                                    if (lastkeys == null)
                                    {
                                        if (request.Parameters.Get("session").Value == lastsession)
                                        {
                                            response.ContentType = new ContentTypeHeader("text/html; charset=utf-8");
                                            response.Status = HttpStatusCode.OK;
                                            var stream2 = new MemoryStream(Encoding.UTF8.GetBytes("OK"));
                                            response.ContentLength.Value = stream2.Length;
                                            var generator2 = new ResponseWriter();
                                            generator2.SendHeaders(context, response);
                                            generator2.SendBody(context, stream2);
                                            Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "OK");
                                            lastsession = null;
                                            break;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                if (session.FirstRun)
                                {
                                    lastkeys = null;
                                    response.ContentType = new ContentTypeHeader("application/json");
                                    response.Status = HttpStatusCode.OK;
                                    var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + session.SessionId + "\",\"data\":\"Connected to server-side.\\r\\nWelcome to WCell.Terminal !\\r\\n\"}"));
                                    response.ContentLength.Value = stream.Length;
                                    var generator = new ResponseWriter();
                                    generator.SendHeaders(context, response);
                                    generator.SendBody(context, stream);
                                    Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + session.SessionId + "\",\"data\":\"Connected to server-side. Welcome to WCell.Terminal !\"}");
                                    session.FirstRun = false;
                                    SessionManager.Save(session);
                                }
                                else
                                {
                                    while (lastkeys == null)
                                    {
                                        Thread.Sleep(50);
                                        if (lastkeys != null)
                                        {
                                            string stringValue = "";
                                            if (lastkeys.Length == 2)
                                            {
                                                int value = Convert.ToInt32(lastkeys, 16);
                                                if (value <= Int32.MaxValue)
                                                {
                                                    stringValue = Char.ConvertFromUtf32(value);
                                                }
                                                else
                                                {
                                                    /*Console.WriteLine("({0}) <Web Interface> Problem with lastkeys ({1}): {2}", DateTime.Now.ToString("hh:mm"), e, lastkeys);
                                                    stringValue = "\\r\\nProblem with lastkeys: " + lastkeys + "\\r\\n";*/
                                                    if (lastkeys.Length > 2)
                                                    {
                                                        string[] strArray = SplitString(lastkeys, 2);
                                                        if (strArray != null)
                                                        {
                                                            foreach (string str in strArray)
                                                            {
                                                                if (!String.IsNullOrWhiteSpace(str))
                                                                {
                                                                    value = Convert.ToInt32(str, 16);
                                                                    stringValue += Char.ConvertFromUtf32(value);
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                /*Console.WriteLine("({0}) <Web Interface> Problem with lastkeys ({1}): {2}", DateTime.Now.ToString("hh:mm"), e, lastkeys);
                                                stringValue = "\\r\\nProblem with lastkeys: " + lastkeys + "\\r\\n";*/
                                                if (lastkeys.Length > 2)
                                                {
                                                    string[] strArray = SplitString(lastkeys, 2);
                                                    if (strArray != null)
                                                    {
                                                        foreach (string str in strArray)
                                                        {
                                                            if (!String.IsNullOrWhiteSpace(str))
                                                            {
                                                                int value = Convert.ToInt32(str, 16);
                                                                stringValue += Char.ConvertFromUtf32(value);
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            if (stringValue == "\r")
                                            {
                                                stringValue = "\\r\\n";
                                            }
                                            if (stringValue == "\x7f")
                                            {
                                                stringValue = "\\b \\b";
                                            }
                                            if (stringValue == "\f")
                                            {
                                                stringValue = "\\f";
                                            }
                                            if (stringValue == "\t")
                                            {
                                                stringValue = "\\t";
                                            }
                                            if (lastsession == null)
                                            {
                                                lastsession = session.SessionId;
                                            }
                                            response.ContentType = new ContentTypeHeader("application/json");
                                            response.Status = HttpStatusCode.OK;
                                            var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + lastsession + "\",\"data\":\"" + stringValue + "\"}"));
                                            response.ContentLength.Value = stream.Length;
                                            var generator = new ResponseWriter();
                                            generator.SendHeaders(context, response);
                                            generator.SendBody(context, stream);
                                            Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + lastsession + "\",\"data\":\"" + stringValue + "\"}");
                                            lastkeys = null;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "Invalid Session: " + request.Parameters.Get("session").Value);
                        }
                    }
                }
                return ProcessingResult.Abort;
            }
            else
            {
                if (context.IsSecure)
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("({0}) <Web Interface> Secure HTTP request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri);
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("({0}) <Web Interface> HTTP request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri);
                }
            }
            return ProcessingResult.Continue;
        }
Ejemplo n.º 18
0
        public ProcessingResult Process(RequestContext context)
        {
            //it's a public request, work out what they want
            // / = list servers
            // /[0-9]+/ = server home page including chat log
            // /[0-9]+/map = Google Map
            // /[0-9]+/renders = c10t renders

            Regex regRoot = new Regex(@"^/$");
            Regex regServerList = new Regex(@"^/servers/$");
            Regex regServerHome = new Regex(@"^/servers/([0-9]+)/$");
            Regex regServerGMap = new Regex(@"^/servers/([0-9]+)/map/");
            Regex regServerRenders = new Regex(@"^/servers/([0-9]+)/renders/");

            if (regServerGMap.Match(context.Request.Uri.AbsolutePath).Success || regServerRenders.Match(context.Request.Uri.AbsolutePath).Success)
            {
                return ProcessingResult.Continue;
            }
            else
            {
                string strTemplate = "No matching Template";
                Dictionary<string, string> dicTags = new Dictionary<string, string>();

                if (regRoot.Match(context.Request.Uri.AbsolutePath).Success)
                {
                    //Server Root
                    strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\root.html");
                    dicTags.Add("PageTitle", "YAMS Hosted Server");
                    dicTags.Add("PageBody", "test");
                }
                else if (regServerList.Match(context.Request.Uri.AbsolutePath).Success)
                {
                    //List of Servers
                    strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-list.html");
                    dicTags.Add("PageTitle", "Server List");
                    dicTags.Add("PageBody", "test");
                }
                else if (regServerHome.Match(context.Request.Uri.AbsolutePath).Success)
                {
                    //Individual Server home
                    Match matServerHome = regServerHome.Match(context.Request.Uri.AbsolutePath);
                    int intServerID = Convert.ToInt32(matServerHome.Groups[1].Value);
                    MCServer s = Core.Servers[intServerID];

                    string strOverviewer = "";
                    string strTectonicus = "";
                    string strImages = "";
                    string strBackups = "";

                    if (File.Exists(s.ServerDirectory + @"\renders\overviewer\output\index.html")) {
                        strOverviewer = "<h3>Overviewer Map</h3><div><a href=\"renders/overviewer/output/index.html\">Click here to open map</a>";
                    }
                    if (File.Exists(s.ServerDirectory + @"\renders\tectonicus\map.html"))
                    {
                        strTectonicus = "<h3>Tectonicus Map</h3><div><a href=\"renders/tectonicus/map.html\">Click here to open map</a>";
                    }

                    strImages = "<h3>Images</h3><ul>";
                    DirectoryInfo di = new DirectoryInfo(s.ServerDirectory + @"\renders\");
                    FileInfo[] fileEntries = di.GetFiles();
                    foreach (FileInfo fi in fileEntries)
                    {
                        strImages += "<li><a href=\"renders/" + fi.Name + "\">" + fi.Name + "</a></li>";
                    }
                    strImages += "</ul>";

                    strBackups = "<h3>Backups</h3><ul>";
                    DirectoryInfo di2 = new DirectoryInfo(s.ServerDirectory + @"\backups\");
                    FileInfo[] fileEntries2 = di2.GetFiles();
                    foreach (FileInfo fi in fileEntries2)
                    {
                        strBackups += "<li><a href=\"backups/" + fi.Name + "\">" + fi.Name + "</a></li>";
                    }
                    strBackups += "</ul>";

                    strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-home.html");
                    dicTags.Add("PageTitle", s.ServerTitle);
                    dicTags.Add("RenderOverviewer", strOverviewer);
                    dicTags.Add("RenderTectonicus", strTectonicus);
                    dicTags.Add("RenderImages", strImages);
                    dicTags.Add("BackupList", strBackups);
                    dicTags.Add("PageBody", "Body");
                }
                else
                {
                    //Unknown
                    context.Response.Status = HttpStatusCode.NotFound;
                    strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-home.html");
                    dicTags.Add("PageTitle", "404");
                    dicTags.Add("PageBody", "<h1>404 - Not Found</h1>");
                }

                //Run through our replacer
                strTemplate = WebTemplate.ReplaceTags(strTemplate, dicTags);

                //And send to the browser
                context.Response.Reason = "Completed - YAMS";
                context.Response.Connection.Type = ConnectionType.Close;
                byte[] buffer = Encoding.UTF8.GetBytes(strTemplate);
                context.Response.Body.Write(buffer, 0, buffer.Length);
                return ProcessingResult.SendResponse;
            }
        }
        /// <summary>
        /// Method that process the incoming request.
        /// </summary>
        /// <param name="context">Request context (contains request, response, HttpContext)</param>
        public ProcessingResult Process(RequestContext context)
        {
            // Get some vars
            var request = context.Request;
            var response = context.Response;
            var httpContext = context.HttpContext;
            string[] segments = request.Uri.GetSegments();

            // No segments? Do not process
            if (segments.Length == 0)
                return ProcessingResult.Continue;

            // Init more vars
            string controllerName = "";
            string actionName = "";
            RestRequestController controller = null;
            RestControllerContext controllerContext = null;
            int id = 0;
            Client client = null;
            Session session = null;

            // Set cookie and client
            var sessionCookie = request.Cookies.FirstOrDefault(c => c.Name == "ToucheeSession");
            if (sessionCookie == null) {
                session = new Session();
                //sessionStore.Save(session);
                response.Cookies.Add(new ResponseCookie("ToucheeSession", session.SessionId, DateTime.MinValue));
            }
            else {
                //session = sessionStore.Load(sessionCookie.Value);
                client = Client.FindBySesssionID(sessionCookie.Value);
            }

            // Build custom params object
            var parameters = new Params(request.Parameters);

            // TODO: check if we have a matching route
            switch (segments.Length) {

                // If we have only one part, that is a controller with action Index
                // /controller
                case 1:
                    controllerName = segments[0];
                    actionName = "index";
                    break;

                // When we have 2 parts and the second part is an int, do the Show action for that ID. Otherwise, the second part is the action
                // /controller/12
                case 2:
                    controllerName = segments[0];
                    actionName = int.TryParse(segments[1], out id) ? "show" : segments[1];
                    break;

                // In all other cases, we look at the last three parts
                default:
                    var last = segments.Skip(segments.Length - 3).ToArray();

                    // If the last part is an int, that is the id
                    // .../12/controller/4
                    if (int.TryParse(last[2], out id)) {
                        controllerName = last[1];
                        actionName = "show";
                    }

                    // If the first of the last parts is an int, no id is given, so we have a collection action on a controller
                    // .../12/controller/action
                    else if (int.TryParse(last[0], out id)) {
                        controllerName = last[1];
                        actionName = last[2];
                        id = 0;
                    }

                    // If the middle one is an int, the first should be the controller and the last could be an action or a controller
                    // .../controller/12/action_or_controller
                    else if (int.TryParse(last[1], out id) && _controllers.ContainsKey(last[0])) {
                        controller = _controllers[last[0]].Prototype;

                        // If the last part is a method on the controller, do that
                        if (controller.HasMethod(last[2].ToCamelCase())) {
                            controllerName = last[0];
                            actionName = last[2];
                        }

                        // Else, the last part must be a controller
                        else if (_controllers.ContainsKey(last[2])) {
                            controllerName = last[2];
                            actionName = "index";
                            id = 0;
                        }

                        // Else, false alarm
                        else {
                        }

                    }

                    // Check the rest of the parts for IDs
                    int partID, tryID;
                    for (var i = 1; i < segments.Length; i++) {
                        if (int.TryParse(segments[i], out partID) && !int.TryParse(segments[i - 1], out tryID))
                            parameters.Set(segments[i - 1].ToLower() + "_id", partID.ToString());
                    }

                    break;
            }

            // Check if the controller exists and action is not empty
            if (string.IsNullOrEmpty(controllerName) || !_controllers.ContainsKey(controllerName) || string.IsNullOrEmpty(actionName))
                return ProcessingResult.Continue;

            // Get the controller context and set action name to camelcase
            controllerContext = _controllers[controllerName];
            actionName = actionName.ToCamelCase();

            // Set id in parameters
            if (id > 0)
                parameters.Set("id", id.ToString());

            // Check if controller has method
            if (!controllerContext.Prototype.HasMethod(actionName))
                return ProcessingResult.Continue;

            Logger.Log(String.Format("{0} - [{1}] \"{2} {3}\"", httpContext.RemoteEndPoint.Address, DateTime.UtcNow, request.Method, request.Uri.AbsolutePath));

            controller = null;
            bool ret = false;
            try {
                lock (context)
                    controller = controllerContext.Pop();
                controller.SetRequest(request, response, null, parameters, client);

                // Get controller response
                object result = controller.GetType().GetMethod(actionName).Invoke(controller, new object[0]);

                // Check result type
                var resultType = result == null ? null : result.GetType();

                // If we have a string response, set it
                string resultStr = null;
                if (resultType == typeof(String))
                    resultStr = (string)result;

                // If we have a bool response
                else if (resultType == typeof(bool))
                    ret = (bool)result;

                // If we have a message, we make a JSON response
                else if (result is Message) {
                    resultStr = Server.Serialize((Message)result);
                    response.ContentType = new HttpServer.Headers.ContentTypeHeader("application/json");
                }

                // If we have a result string, write it to the body
                if (resultStr != null) {
                    byte[] body = System.Text.Encoding.UTF8.GetBytes((string)resultStr);
                    response.Body.Write(body, 0, body.Length);
                    ret = true;
                }

                // If we have a body, but the response is not sent yet, do it now
                // This enables controllers to customize the response
                //if (response.Body.Length > 0 && !response.Sent)
                //    response.Send();

            }
            finally {
                if (controller != null) {
                    lock (controllerContext)
                        controllerContext.Push(controller);
                }
            }

            return ProcessingResult.SendResponse;
        }
Ejemplo n.º 20
0
        /// <summary>
        /// Go through all modules and check if any of them can handle the current request.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private ProcessingResult ProcessModules(RequestContext context)
        {
            OnBeforeModules(context);
            foreach (IModule module in _modules)
            {
                ProcessingResult result = module.Process(context);
                if (result != ProcessingResult.Continue)
                {
                    _logger.Debug(module.GetType().Name + ": " + result);
                    return result;
                }
            }

            return ProcessingResult.Continue;
        }
Ejemplo n.º 21
0
        /// <summary>
        /// Processes all routers.
        /// </summary>
        /// <param name="context">Request context.</param>
        /// <returns>Processing result.</returns>
        private ProcessingResult ProcessRouters(RequestContext context)
        {
            foreach (IRouter router in _routers)
            {
                if (router.Process(context) != ProcessingResult.SendResponse)
                    continue;

                _logger.Debug(router.GetType().Name + " sends the response.");
                return ProcessingResult.SendResponse;
            }

            return ProcessingResult.Continue;
        }
Ejemplo n.º 22
0
 private ViewEngineResult BuildResult(RequestContext requestContext, ISparkViewEntry entry)
 {
     var view = (IView)entry.CreateInstance();
     if (view is SparkView)
     {
         var sparkView = (SparkView)view;
         sparkView.ResourcePathManager = Engine.ResourcePathManager;
         sparkView.CacheService = CacheServiceProvider.GetCacheService(requestContext);
     }
     return new ViewEngineResult(view, this);
 }
        public ProcessingResult Process(RequestContext context)
        {
            IRequest request = context.Request;
            IResponse response = context.Response;
            string path = request.Uri.AbsolutePath;
            path = Uri.UnescapeDataString(path);

            Utilities.Log("Connection from " + context.HttpContext.RemoteEndPoint, false);
            Utilities.Log("  Method: " + request.Method.ToString(), false);
            Utilities.Log("  Path: " + path, false);
            /*
            try
            {
                if (request.Method == Method.Get)
                {
                    string output = "";

                    response.Add(new ContentTypeHeader("text/html"));
                    response.Add(new StringHeader("Server", "Eye-Fi Agent/3.4.26 (Windows 7 Ultimate Edition Service Pack 1, 32-bit)"));

                    output += context.HttpContext.RemoteEndPoint;
                    foreach (IHeader h in response.Headers)
                    {
                        output += h.Name + ": " + h.ToString();
                    }
                    SendFile(context.HttpContext, response, output);
                }
                else if (request.Method == Method.Post)
                {
                    response.Add(new DateHeader("Date", DateTime.Now));
                    response.Add(new StringHeader("Pragma", "no-cache"));
                    response.Add(new StringHeader("Server", "Eye-Fi Agent/3.4.26 (Windows 7 Ultimate Edition Service Pack 1, 32-bit)"));
                    response.Add(new ContentTypeHeader("text/xml; charset=\"utf-8\""));

                    string soapAction = (from x in request.Headers
                                         where x.Name == "SOAPAction"
                                         select x.ToString()).FirstOrDefault();

                    Utilities.Log("  SOAP Action: " + soapAction, false);

                    // A soapAction of StartSession indicates the beginning of an EyeFi auth request
                    if (path == "/api/soap/eyefilm/v1" && soapAction == "\"urn:StartSession\"")
                        SendFile(context.HttpContext, response, StartSession(request.Body));

                    // GetPhotoStatus allows the card to query if a photo has been uploaded to the server yet
                    else if (path == "/api/soap/eyefilm/v1" && soapAction == "\"urn:GetPhotoStatus\"")
                        SendFile(context.HttpContext, response, GetPhotoStatus(request.Body));

                    // If the URL is upload and there's no soapAction the card is ready to send a picture
                    else if (path == "/api/soap/eyefilm/v1/upload" && soapAction == null)
                        SendFile(context.HttpContext, response, UploadPhoto(request));

                    // If the URL is upload and SOAPAction is MarkLastPhotoInRoll
                    else if (path == "/api/soap/eyefilm/v1/upload" && soapAction == "\"urn:MarkLastPhotoInRoll\"")
                        SendFile(context.HttpContext, response, MarkLastPhotoInRoll());

                    else
                        throw new ArgumentException("Unknown Path or SOAPAction");
                }
                else
                    throw new ArgumentException("Invalid Method");
            }
            catch (Exception ex)
            {
                SendFile(context.HttpContext, response, ex.Message);
                return ProcessingResult.Abort;
            }
            */
            return ProcessingResult.Abort;
        }
Ejemplo n.º 24
0
        public ProcessingResult Process(RequestContext context)
        {
            //it's a public request, work out what they want
            // / = list servers
            // /[0-9]+/ = server home page including chat log
            // /[0-9]+/map = Google Map
            // /[0-9]+/renders = c10t renders

            Regex regRoot = new Regex(@"^/$");
            Regex regServerList = new Regex(@"^/servers/$");
            Regex regServerHome = new Regex(@"^/servers/([0-9]+)/$");
            Regex regServerGMap = new Regex(@"^/servers/([0-9]+)/map/");
            Regex regServerRenders = new Regex(@"^/servers/([0-9]+)/renders/");
            Regex regServerAPI = new Regex(@"^/servers/([0-9]+)/api/");

            if (regServerGMap.Match(context.Request.Uri.AbsolutePath).Success || regServerRenders.Match(context.Request.Uri.AbsolutePath).Success)
            {
                return ProcessingResult.Continue;
            }
            else
            {
                string strTemplate = "No matching Template";
                Dictionary<string, string> dicTags = new Dictionary<string, string>();

                if (regRoot.Match(context.Request.Uri.AbsolutePath).Success)
                {
                    //Server Root
                    strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\root.html");
                    dicTags.Add("PageTitle", "YAMS Hosted Server");
                    dicTags.Add("PageBody", "test");
                }
                else if (regServerList.Match(context.Request.Uri.AbsolutePath).Success)
                {
                    //List of Servers
                    strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-list.html");
                    dicTags.Add("PageTitle", "Server List");
                    string strServerList;
                    strServerList = "<ul>";
                    foreach (KeyValuePair<int, MCServer> kvp in Core.Servers)
                    {
                        strServerList += "<li><a href=\"" + kvp.Value.ServerID + "/\">" + kvp.Value.ServerTitle + "</a></li>";
                    };
                    strServerList += "</ul>";
                    dicTags.Add("ServerList", strServerList);
                }
                else if (regServerHome.Match(context.Request.Uri.AbsolutePath).Success)
                {
                    //Individual Server home
                    Match matServerHome = regServerHome.Match(context.Request.Uri.AbsolutePath);
                    int intServerID = Convert.ToInt32(matServerHome.Groups[1].Value);
                    MCServer s = Core.Servers[intServerID];

                    string strOverviewer = "";
                    string strImages = "";
                    string strBackups = "";

                    if (File.Exists(s.ServerDirectory + @"\renders\overviewer\output\index.html")) {
                        strOverviewer = "<div><a href=\"renders/overviewer/output/index.html\">Click here to open map</a></div>";
                    }

                    strImages = "<ul>";
                    DirectoryInfo di = new DirectoryInfo(s.ServerDirectory + @"\renders\");
                    IEnumerable<FileInfo> fileEntries = di.GetFiles();
                    var imageFiles = fileEntries.OrderByDescending(f => f.CreationTime).Take(20);
                    foreach (FileInfo fi in imageFiles) strImages += "<li><a href=\"renders/" + fi.Name + "\">" + fi.Name + "</a></li>";
                    strImages += "</ul>";

                    strBackups = "<ul>";
                    DirectoryInfo di2 = new DirectoryInfo(s.ServerDirectory + @"\backups\");
                    IEnumerable<FileInfo> fileEntries2 = di2.GetFiles();
                    var backupFiles = fileEntries2.OrderByDescending(f => f.CreationTime).Take(20);
                    foreach (FileInfo fi in backupFiles) strBackups += "<li><a href=\"backups/" + fi.Name + "\">" + fi.Name + "</a></li>";
                    strBackups += "</ul>";

                    //Determine if they need a special client URL
                    string strClientURL = "";
                    if (s.ServerType == "pre")
                    {
                        string json = File.ReadAllText(YAMS.Core.RootFolder + @"\lib\versions.json");
                        //Dictionary<string, string> dicVers = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
                        JObject jVers = JObject.Parse(json);
                        strClientURL = "This server is running the weekly snapshots, <a href=\"" + (string)jVers["pre-client"] + "\">download current client</a>.";
                    }

                    //List out players online
                    string strPlayers = "";
                    if (s.Players.Count > 0)
                    {
                        strPlayers = "<ul>";
                        foreach (KeyValuePair<string, Player> kvp in s.Players)
                        {
                            Vector playerPos = kvp.Value.Position;
                            strPlayers += "<li>";
                            if (kvp.Value.Level == "op") strPlayers += "<span class=\"label label-important\">op</span> ";
                            strPlayers += kvp.Value.Username + " <span class=\"label\">" +
                                              playerPos.x.ToString("0.##") + ", " +
                                              playerPos.y.ToString("0.##") + ", " +
                                              playerPos.z.ToString("0.##") + "</span>";
                            strPlayers += "</li>";
                        };
                        strPlayers += "</ul>";
                    }
                    else
                    {
                        strPlayers = "No players online right now";
                    }

                    //Connection Addresses
                    string strConnectAddress = "";
                    if (Database.GetSetting("DNSName", "YAMS") != "")
                    {
                        strConnectAddress = Database.GetSetting("DNSName", "YAMS") + ".yams.in";
                    }
                    else
                    {
                        strConnectAddress = Networking.GetExternalIP().ToString();
                    }
                    if (s.GetProperty("server-port") != "25565") strConnectAddress += ":" + s.GetProperty("server-port");

                    strConnectAddress += "<input type=\"hidden\" id=\"server-host\" value=\"" + Networking.GetExternalIP().ToString() + "\" />" +
                                         "<input type=\"hidden\" id=\"server-port\" value=\"" + s.GetProperty("server-port") + "\" />";

                    strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-home.html");
                    dicTags.Add("PageTitle", s.ServerTitle);
                    dicTags.Add("RenderOverviewer", strOverviewer);
                    dicTags.Add("RenderImages", strImages);
                    dicTags.Add("BackupList", strBackups);
                    dicTags.Add("ServerConnectAddress", strConnectAddress); //TODO
                    dicTags.Add("ClientURL", strClientURL);
                    dicTags.Add("PlayersOnline", strPlayers);
                    dicTags.Add("PageBody", Database.GetSetting(intServerID, "ServerWebBody").ToString());
                }
                else if (regServerAPI.Match(context.Request.Uri.AbsolutePath).Success)
                {
                    string strResponse = "";
                    IParameterCollection param = context.Request.Parameters;
                    Match matServerAPI = regServerAPI.Match(context.Request.Uri.AbsolutePath);
                    int intServerID = Convert.ToInt32(matServerAPI.Groups[1].Value);
                    MCServer s = Core.Servers[intServerID];
                    switch (context.Request.Parameters["action"])
                    {
                        case "players":
                            strResponse = "{\"players\" : [";
                            if (s.Players.Count > 0)
                            {
                                foreach (KeyValuePair<string, Player> kvp in s.Players)
                                {
                                    Vector playerPos = kvp.Value.Position;
                                    strResponse += " { \"name\": \"" + kvp.Value.Username + "\", " +
                                                      "\"level\": \"" + kvp.Value.Level + "\", " +
                                                      "\"x\": \"" + playerPos.x.ToString("0.##") + "\", " +
                                                      "\"y\": \"" + playerPos.y.ToString("0.##") + "\", " +
                                                      "\"z\": \"" + playerPos.z.ToString("0.##") + "\" },";
                                };
                                strResponse = strResponse.Remove(strResponse.Length - 1);
                            }
                            strResponse += "]}";
                            break;
                    }
                    strTemplate = strResponse;
                }
                else
                {
                    //Unknown
                    context.Response.Status = HttpStatusCode.NotFound;
                    strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-home.html");
                    dicTags.Add("PageTitle", "404");
                    dicTags.Add("PageBody", "<h1>404 - Not Found</h1>");
                }

                //Run through our replacer
                strTemplate = WebTemplate.ReplaceTags(strTemplate, dicTags);

                //And send to the browser
                context.Response.Reason = "Completed - YAMS";
                context.Response.Connection.Type = ConnectionType.Close;
                byte[] buffer = Encoding.UTF8.GetBytes(strTemplate);
                context.Response.Body.Write(buffer, 0, buffer.Length);
                return ProcessingResult.SendResponse;
            }
        }
Ejemplo n.º 25
0
 /// <summary>
 /// Executes either a ReceivePrio Receive(channel) or ReceivePage(pageSize).
 /// </summary>
 /// <param name="context"></param>
 public void Process(RequestContext context)
 {
     Tasks.ReceivePrio();
 }
Ejemplo n.º 26
0
        /// <summary>
        /// A request have arrived but not yet been processed yet.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <remarks>
        /// Default implementation adds a <c>Date</c> header and <c>Server</c> header.
        /// </remarks>
	    protected virtual void OnBeforeRequest(RequestContext context)
	    {
            context.Response.Add(new DateHeader("Date", DateTime.UtcNow));
            context.Response.Add(new StringHeader("Server", ServerName));
	    }
Ejemplo n.º 27
0
        public ProcessingResult Process(RequestContext context)
        {
            int intServerID = 0;
            MCServer s;
            string json;
            JObject jProps;

            if (context.Request.Uri.AbsoluteUri.Contains(@"/api/"))
            {
                //must be authenticated

                //what is the action?
                if (context.Request.Method == Method.Post && WebSession.Current.UserName == "admin")
                {
                    String strResponse = "";
                    IParameterCollection param = context.Request.Parameters;
                    switch (context.Request.Parameters["action"])
                    {
                        case "log":
                            //grabs lines from the log.
                            int intStartID = Convert.ToInt32(context.Request.Parameters["start"]);
                            int intNumRows = Convert.ToInt32(context.Request.Parameters["rows"]);
                            int intServer = Convert.ToInt32(context.Request.Parameters["serverid"]);
                            string strLevel = context.Request.Parameters["level"];

                            DataSet ds = Database.ReturnLogRows(intStartID, intNumRows, strLevel, intServer);

                            strResponse = JsonConvert.SerializeObject(ds, Formatting.Indented);
                            break;
                        case "list":
                            //List available servers
                            strResponse = "{ \"servers\" : [";
                            foreach (KeyValuePair<int, MCServer> kvp in Core.Servers)
                            {
                                strResponse += "{ \"id\" : " + kvp.Value.ServerID + ", " +
                                                 "\"title\" : \"" + kvp.Value.ServerTitle + "\", " +
                                                 "\"ver\" : \"" + kvp.Value.ServerVersion + "\" } ,";
                            };
                            strResponse = strResponse.Remove(strResponse.Length - 1);
                            strResponse += "]}";
                            break;
                        case "status":
                            //Get status of a server
                            s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])];
                            strResponse = "{ \"serverid\" : " + s.ServerID + "," +
                                            "\"status\" : \"" + s.Running + "\"," +
                                            "\"ram\" : " + s.GetMemory() + "," +
                                            "\"vm\" : " + s.GetVMemory() + "," +
                                            "\"restartneeded\" : \"" + s.RestartNeeded + "\"," +
                                            "\"restartwhenfree\" : \"" + s.RestartWhenFree + "\"," +
                                            "\"gamemode\" : \"" + s.GameMode + "\"," +
                                            "\"players\" : [";
                            if (s.Players.Count > 0)
                            {
                                foreach (KeyValuePair<string, Player> kvp in s.Players)
                                {
                                    Vector playerPos = kvp.Value.Position;
                                    strResponse += " { \"name\": \"" + kvp.Value.Username + "\", " +
                                                      "\"level\": \"" + kvp.Value.Level + "\", " +
                                                      "\"x\": \"" + playerPos.x.ToString("0.##") + "\", " +
                                                      "\"y\": \"" + playerPos.y.ToString("0.##") + "\", " +
                                                      "\"z\": \"" + playerPos.z.ToString("0.##") + "\" },";
                                };
                                strResponse = strResponse.Remove(strResponse.Length - 1);
                            }
                            strResponse += "]}";
                            break;
                        case "get-players":
                            DataSet dsPlayers = Database.GetPlayers(Convert.ToInt32(context.Request.Parameters["serverid"]));
                            JsonConvert.SerializeObject(dsPlayers, Formatting.Indented);
                            break;
                        case "overviewer":
                            //Maps a server
                            s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])];
                            StringBuilder sbParams = new StringBuilder();
                            if (param["spawn"] == "true")
                                sbParams.Append("spawn=y&");
                            if (!String.IsNullOrEmpty(param["texturepath"]))
                                sbParams.AppendFormat("texturepath={0}&", param["texturepath"]);
                            if (!String.IsNullOrEmpty(param["overworld"]))
                                sbParams.AppendFormat("overworld={0}&", param["overworld"]);
                            if (!String.IsNullOrEmpty(param["nether"]))
                                sbParams.AppendFormat("nether={0}&", param["nether"]);
                            if (!String.IsNullOrEmpty(param["end"]))
                                sbParams.AppendFormat("end={0}&", param["end"]);
                            AddOns.Overviewer over = new AddOns.Overviewer(s, sbParams.ToString());
                            over.Start();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "c10t":
                            //Images a server
                            s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])];
                            AddOns.c10t c10t = new AddOns.c10t(s, "night=" + param["night"] + "&mode=" + param["mode"]);
                            c10t.Start();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "tectonicus":
                            //Maps a server
                            s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])];
                            AddOns.Tectonicus tecton = new AddOns.Tectonicus(s, "lighting=" + param["lighting"] + "&night=" + param["night"] + "&delete=" + param["delete"]);
                            tecton.Start();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "start":
                            //Starts a server
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Start();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "stop":
                            //Stops a server
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Stop();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "forcestop":
                            //Force stops a server
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].ForceStop();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "restart":
                            //Restarts a server
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Restart();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "delayed-restart":
                            //Restarts a server after a specified time and warns players
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].DelayedRestart(Convert.ToInt32(param["delay"]));
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "restart-when-free":
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].RestartIfEmpty();
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "command":
                            //Sends literal command to a server
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Send(context.Request.Parameters["message"]);
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "get-yams-settings":
                            DataSet dsSettings = Database.ReturnSettings();
                            JsonConvert.SerializeObject(dsSettings, Formatting.Indented);
                            break;
                        case "save-yams-settings":
                            //Settings update
                            foreach (Parameter p in param)
                            {
                                if (p.Name != "action") Database.SaveSetting(p.Name, p.Value);
                            }
                            break;
                        case "get-server-settings":
                            //retrieve all server settings as JSON
                            List<string> listIPsMC = new List<string>();
                            IPHostEntry ipListenMC = Dns.GetHostEntry("");
                            foreach (IPAddress ipaddress in ipListenMC.AddressList)
                            {
                                if (ipaddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) listIPsMC.Add(ipaddress.ToString());
                            }

                            intServerID = Convert.ToInt32(param["serverid"]);
                            strResponse = "{ \"serverid\" : " + intServerID + "," +
                                              "\"title\" : \"" + Database.GetSetting(intServerID, "ServerTitle") + "\"," +
                                              "\"optimisations\" : \"" + Database.GetSetting(intServerID, "ServerEnableOptimisations") + "\"," +
                                              "\"memory\" : \"" + Database.GetSetting(intServerID, "ServerAssignedMemory") + "\"," +
                                              "\"autostart\" : \"" + Database.GetSetting(intServerID, "ServerAutoStart") + "\"," +
                                              "\"type\" : \"" + Database.GetSetting(intServerID, "ServerType") + "\"," +
                                              "\"custom\" : \"" + Database.GetSetting(intServerID, "ServerCustomJAR").ToString().Replace("\\", "\\\\").Replace("\"", "\\\"") + "\"," +
                                              "\"motd\" : \"" + Database.GetSetting("motd", "MC", intServerID) + "\"," +
                                              "\"listen\" : \"" + Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty("server-ip") + "\"," +
                                              "\"port\" : \"" + Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty("server-port") + "\"," +
                                              "\"IPs\": " + JsonConvert.SerializeObject(listIPsMC, Formatting.None);
                            strResponse += "}";
                            break;
                        case "get-server-connections":
                            intServerID = Convert.ToInt32(param["serverid"]);
                            strResponse = "{ \"dnsname\" : \"" + Database.GetSetting("DNSName", "YAMS") + "\", " +
                                            "\"externalip\" : \"" + Networking.GetExternalIP().ToString() + "\", " +
                                            "\"internalip\" : \"" + Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty("server-ip") + "\", " +
                                            "\"mcport\" : " + Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty("server-port") + ", " +
                                            "\"publicport\" : " + Database.GetSetting("PublicListenPort", "YAMS") + ", " +
                                            "\"message\" : " + JsonConvert.SerializeObject(Database.GetSetting(intServerID, "ServerWebBody"), Formatting.None) + "}";
                            break;
                        case "save-website-settings":
                            intServerID = Convert.ToInt32(param["serverid"]);
                            Database.UpdateServer(intServerID, "ServerWebBody", param["message"]);
                            break;
                        case "get-mc-settings":
                            //retrieve all server settings as JSON
                            intServerID = Convert.ToInt32(param["serverid"]);

                            json = File.ReadAllText(YAMS.Core.RootFolder + @"\lib\properties.json");
                            jProps = JObject.Parse(json);

                            strResponse = "";

                            foreach(JObject option in jProps["options"]) {
                                strResponse += "<p><label for=\"" + (string)option["key"] + "\" title=\"" + (string)option["description"] + "\">" + (string)option["name"] + "</label>";

                                string strValue = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty((string)option["key"]);

                                switch ((string)option["type"])
                                {
                                    case "string":
                                        strResponse += "<input type=\"text\" name=\"" + (string)option["key"] + "\" value=\"" + strValue + "\" />";
                                        break;
                                    case "boolean":
                                        strResponse += "<select name=\"" + (string)option["key"] + "\">";
                                        strResponse += "<option value=\"true\"";
                                        if (strValue == "true") strResponse += " selected";
                                        strResponse += ">True</option>";
                                        strResponse += "<option value=\"false\"";
                                        if (strValue == "false") strResponse += " selected";
                                        strResponse += ">False</option>";
                                        strResponse += "</select>";
                                        break;
                                    case "integer":
                                        strResponse += "<select name=\"" + (string)option["key"] + "\">";
                                        int intValue = Convert.ToInt32(strValue);
                                        for (var i = Convert.ToInt32((string)option["min"]); i <= Convert.ToInt32((string)option["max"]); i++)
                                        {
                                            strResponse += "<option value=\"" + i.ToString() + "\"";
                                            if (intValue == i) strResponse += " selected";
                                            strResponse += ">" + i.ToString() + "</option>";
                                        }
                                        strResponse += "</select>";
                                        break;
                                    case "array":
                                        strResponse += "<select name=\"" + (string)option["key"] + "\">";
                                        string strValues = (string)option["values"];
                                        string[] elements = strValues.Split(',');
                                        foreach (string values in elements)
                                        {
                                            string[] options = values.Split('|');
                                            strResponse += "<option value=\"" + options[0] + "\"";
                                            if (strValue == options[0]) strResponse += " selected";
                                            strResponse += ">" + options[1] + "</option>";
                                        }
                                        strResponse += "</select>";
                                        break;
                                }

                                strResponse += "</p>";
                            }

                            break;
                        case "save-server-settings":
                            intServerID = Convert.ToInt32(param["serverid"]);
                            Database.UpdateServer(intServerID, "ServerTitle", param["title"]);
                            Database.UpdateServer(intServerID, "ServerType", param["type"]);
                            Database.UpdateServer(intServerID, "ServerCustomJAR", param["custom"]);
                            Database.UpdateServer(intServerID, "ServerAssignedMemory", Convert.ToInt32(param["memory"]));
                            if (param["optimisations"] == "true") Database.UpdateServer(intServerID, "ServerEnableOptimisations", true);
                            else Database.UpdateServer(intServerID, "ServerEnableOptimisations", false);
                            if (param["autostart"] == "true") Database.UpdateServer(intServerID, "ServerAutoStart", true);
                            else Database.UpdateServer(intServerID, "ServerAutoStart", false);
                            Database.SaveSetting(intServerID, "motd", param["message"]);

                            //Save the server's MC settings
                            MCServer thisServer = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])];
                            thisServer.SaveProperty("server-ip", param["cfg_listen-ip"]);
                            thisServer.SaveProperty("server-port", param["cfg_port"]);

                            json = File.ReadAllText(YAMS.Core.RootFolder + @"\lib\properties.json");
                            jProps = JObject.Parse(json);

                            strResponse = "";

                            foreach (JObject option in jProps["options"])
                            {
                                thisServer.SaveProperty((string)option["key"], param[(string)option["key"]]);
                            }

                            //If they've selected a Bukkit but not chosen to have them installed, do it for them
                            if (param["type"] == "bukkit")
                            {
                                if (Database.GetSetting("BukkitInstalled", "YAMS") == "false")
                                {
                                    Database.SaveSetting("BukkitInstalled", "true");
                                    AutoUpdate.CheckUpdates();
                                }
                            } else if (param["type"] == "bukkit-beta")
                            {
                                if (Database.GetSetting("BukkitBetaInstalled", "YAMS") == "false")
                                {
                                    Database.SaveSetting("BukkitBetaInstalled", "true");
                                    AutoUpdate.CheckUpdates();
                                }
                            } else if(param["type"] == "bukkit-dev")
                            {
                                if (Database.GetSetting("BukkitDevInstalled", "YAMS") == "false")
                                {
                                    Database.SaveSetting("BukkitDevInstalled", "true");
                                    AutoUpdate.CheckUpdates();
                                }
                            }

                            if (thisServer.Running) thisServer.RestartIfEmpty();

                            break;
                        case "get-config-file":
                            List<string> listConfig = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].ReadConfig(param["file"]);
                            strResponse = JsonConvert.SerializeObject(listConfig, Formatting.Indented);
                            break;
                        case "get-server-whitelist":
                            strResponse = "{ \"enabled\" : " + Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty("white-list") + " }";
                            break;
                        case "upload-world":
                            var test = context.Request.Files["new-world"];
                            break;
                        case "delete-world":
                            bool bolRandomSeed = false;
                            if (param["randomseed"] == "true") bolRandomSeed = true;
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].ClearWorld(bolRandomSeed);
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        case "remove-server":
                            Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Stop();
                            Core.Servers.Remove(Convert.ToInt32(context.Request.Parameters["serverid"]));
                            Database.DeleteServer(Convert.ToInt32(context.Request.Parameters["serverid"]));
                            strResponse = "{ \"result\" : \"removed\" }";
                            break;
                        case "about":
                            Dictionary<string, string> dicAbout = new Dictionary<string, string> {
                                { "dll" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Library.dll")).FileVersion },
                                { "svc" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Service.exe")).FileVersion },
                                { "gui" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Updater.exe")).FileVersion },
                                { "db" , Database.GetSetting("DBSchema", "YAMS") }
                            };
                            strResponse = JsonConvert.SerializeObject(dicAbout, Formatting.Indented);
                            break;
                        case "installed-apps":
                            Dictionary<string, string> dicApps = new Dictionary<string, string> {
                                { "bukkit" , Database.GetSetting("BukkitInstalled", "YAMS") },
                                { "bukkitBeta" , Database.GetSetting("BukkitBetaInstalled", "YAMS") },
                                { "bukkitDev" , Database.GetSetting("BukkitDevInstalled", "YAMS") },
                                { "overviewer" , Database.GetSetting("OverviewerInstalled", "YAMS") },
                                { "c10t" , Database.GetSetting("C10tInstalled", "YAMS") },
                                { "biomeextractor" , Database.GetSetting("BiomeExtractorInstalled", "YAMS") },
                                { "tectonicus" , Database.GetSetting("TectonicusInstalled", "YAMS") },
                                { "nbtoolkit" , Database.GetSetting("NBToolkitInstalled", "YAMS") }
                            };
                            strResponse = JsonConvert.SerializeObject(dicApps, Formatting.Indented);
                            break;
                        case "update-apps":
                            Database.SaveSetting("OverviewerInstalled", param["overviewer"]);
                            Database.SaveSetting("C10tInstalled", param["c10t"]);
                            Database.SaveSetting("BiomeExtractorInstalled", param["biomeextractor"]);
                            Database.SaveSetting("BukkitInstalled", param["bukkit"]);
                            Database.SaveSetting("BukkitBetaInstalled", param["bukkitBeta"]);
                            Database.SaveSetting("BukkitDevInstalled", param["bukkitDev"]);
                            strResponse = "done";
                            break;
                        case "force-autoupdate":
                            AutoUpdate.CheckUpdates(false, true);
                            break;
                        case "network-settings":
                            List<string> listIPs = new List<string>();
                            IPHostEntry ipListen = Dns.GetHostEntry("");
                            foreach (IPAddress ipaddress in ipListen.AddressList)
                            {
                                if (ipaddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) listIPs.Add(ipaddress.ToString());
                            }

                            Dictionary<string, string> dicNetwork = new Dictionary<string, string> {
                                { "portForwarding" , Database.GetSetting("EnablePortForwarding", "YAMS") },
                                { "openFirewall" , Database.GetSetting("EnableOpenFirewall", "YAMS") },
                                { "publicEnable" , Database.GetSetting("EnablePublicSite", "YAMS") },
                                { "adminPort" , Database.GetSetting("AdminListenPort", "YAMS") },
                                { "publicPort" , Database.GetSetting("PublicListenPort", "YAMS") },
                                { "currentIP" , Database.GetSetting("YAMSListenIP", "YAMS") },
                                { "telnetEnable" , Database.GetSetting("EnableTelnet", "YAMS") },
                                { "telnetPort" , Database.GetSetting("TelnetPort", "YAMS") },
                                { "IPs" , JsonConvert.SerializeObject(listIPs, Formatting.None) }
                            };
                            strResponse = JsonConvert.SerializeObject(dicNetwork, Formatting.Indented).Replace(@"\","").Replace("\"[", "[").Replace("]\"", "]");
                            break;
                        case "save-network-settings":
                            int intTester = 0;
                            try
                            {
                                //Try to convert to integers to make sure something silly isn't put in. TODO: Javascript validation
                                intTester = Convert.ToInt32(param["adminPort"]);
                                intTester = Convert.ToInt32(param["publicPort"]);
                                IPAddress ipTest = IPAddress.Parse(param["listenIp"]);
                            }
                            catch (Exception e)
                            {
                                YAMS.Database.AddLog("Invalid input on network settings", "web", "warn");
                                return ProcessingResult.Abort;
                            }

                            Database.SaveSetting("EnablePortForwarding", param["portForwarding"]);
                            Database.SaveSetting("EnableOpenFirewall", param["openFirewall"]);
                            Database.SaveSetting("EnablePublicSite", param["publicEnable"]);
                            Database.SaveSetting("AdminListenPort", param["adminPort"]);
                            Database.SaveSetting("PublicListenPort", param["publicPort"]);
                            Database.SaveSetting("YAMSListenIP", param["listenIp"]);
                            Database.SaveSetting("EnableTelnet", param["telnetEnable"]);
                            Database.SaveSetting("TelnetPort", param["telnetPort"]);

                            Database.AddLog("Network settings have been saved, to apply changes a service restart is required. Please check they are correct before restarting", "web", "warn");
                            break;
                        case "job-list":
                            DataSet rdJobs = Database.ListJobs();
                            strResponse = JsonConvert.SerializeObject(rdJobs, Formatting.Indented);
                            break;
                        case "delete-job":
                            string strJobID = param["jobid"];
                            Database.DeleteJob(strJobID);
                            strResponse = "done";
                            break;
                        case "add-job":
                            intServerID = Convert.ToInt32(param["job-server"]);
                            int intHour = Convert.ToInt32(param["job-hour"]);
                            int intMinute = Convert.ToInt32(param["job-minute"]);
                            Database.AddJob(param["job-type"], intHour, intMinute, param["job-params"], intServerID);
                            break;
                        case "logout":
                            WebSession.Current.UserName = "";
                            break;
                        case "newserver":
                            var NewServer = new List<KeyValuePair<string, string>>();
                            NewServer.Add(new KeyValuePair<string, string>("motd", "Welcome to a YAMS server!"));
                            NewServer.Add(new KeyValuePair<string, string>("server-ip", Networking.GetListenIP().ToString()));
                            NewServer.Add(new KeyValuePair<string, string>("server-name", param["name"]));
                            NewServer.Add(new KeyValuePair<string, string>("server-port", Networking.TcpPort.FindNextAvailablePort(25565).ToString()));
                            Database.NewServerWeb(NewServer, param["name"], 1024);
                            strResponse = "done";
                            break;
                        case "updateDNS":
                            Database.SaveSetting("DNSName", param["dns-name"]);
                            Database.SaveSetting("DNSSecret", param["dns-secret"]);
                            Database.SaveSetting("LastExternalIP", param["dns-external"]);
                            strResponse = "done";
                            break;
                        case "getDNS":
                            strResponse = "{ \"name\":\"" + Database.GetSetting("DNSName", "YAMS") + "\", \"secret\": \"" + Database.GetSetting("DNSSecret", "YAMS") + "\", \"external\" : \"" + Networking.GetExternalIP().ToString() + "\" }";
                            break;
                        case "backup-now":
                            Backup.BackupNow(Core.Servers[Convert.ToInt32(param["serverid"])], param["title"]);
                            strResponse = "{ \"result\" : \"sent\" }";
                            break;
                        default:
                            return ProcessingResult.Abort;
                    }

                    context.Response.Reason = "Completed - YAMS";
                    context.Response.Connection.Type = ConnectionType.Close;
                    byte[] buffer = Encoding.UTF8.GetBytes(strResponse);
                    context.Response.Body.Write(buffer, 0, buffer.Length);
                }
                else
                {
                    // not a post, so say bye bye!
                    return ProcessingResult.Abort;
                }

                return ProcessingResult.SendResponse;
            }
            else if (context.Request.Uri.AbsoluteUri.Contains(@"/admin"))
            {

                if (WebSession.Current.UserName != "admin")
                {
                    context.Response.Reason = "Completed - YAMS";
                    context.Response.Connection.Type = ConnectionType.Close;
                    byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\login.html"));
                    context.Response.Body.Write(buffer, 0, buffer.Length);
                    return ProcessingResult.SendResponse;
                }
                else
                {
                    context.Response.Reason = "Completed - YAMS";
                    context.Response.Connection.Type = ConnectionType.Close;
                    byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\index.html"));
                    context.Response.Body.Write(buffer, 0, buffer.Length);
                    return ProcessingResult.SendResponse;
                }
            }
            else if (context.Request.Uri.AbsoluteUri.Contains(@"/login"))
            {
                //This is a login request, check it's legit
                string userName = context.Request.Form["strUsername"];
                string password = context.Request.Form["strPassword"];

                if (userName == "admin" && password == Database.GetSetting("AdminPassword", "YAMS"))
                {
                    WebSession.Create();
                    WebSession.Current.UserName = "******";
                    context.Response.Redirect(@"/admin");
                    return ProcessingResult.SendResponse;
                }
                else
                {
                    context.Response.Reason = "Completed - YAMS";
                    context.Response.Connection.Type = ConnectionType.Close;
                    byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\login.html"));
                    context.Response.Body.Write(buffer, 0, buffer.Length);
                    return ProcessingResult.SendResponse;
                }
            }
            else if (context.Request.Uri.AbsoluteUri.Equals(@"/")) {
                    context.Response.Redirect(@"/admin");
                    return ProcessingResult.SendResponse;
            }
            else
            {
                return ProcessingResult.Abort;
            }
        }
Ejemplo n.º 28
0
        public virtual ProcessingResult Process(RequestContext context)
        {
            if (context == null)
                throw new ArgumentNullException("context");

            IRequest request = context.Request;
            IResponse response = context.Response;

            try
            {
                byte[] buffer;
                switch (request.Uri.AbsolutePath)
                {
                    case "/fullAnnouncerPage":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.GetAnnouncerPage());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/deletepenalty":
                        if (request.QueryString["penaltyId"] != null)
                        {
                            var pId = new Guid(request.QueryString["penaltyId"]);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.RemovePenalty(pId));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/getpenaltiesformember":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPenalties(pId, teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/addpenalty":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["pid"] != null && request.QueryString["mm"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"]);
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            int penaltyId = Convert.ToInt32(request.QueryString["pid"]);
                            int minorMajor = Convert.ToInt32(request.QueryString["mm"]);
                            ServerHelper.AddPenalty(pId, teamNumber, jamNumber, penaltyId, minorMajor, jamId);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPenalties(pId, teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/getallpenaltytypes":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.GetAllPenaltyTypes());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/getRuleSet":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.GetRuleSet());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/GrabMobileUpdate":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.GrabMobileUpdate());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/GrabOverlayUpdate":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.GrabGameUpdate());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/GetTeam1Members":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.GetTeam1Members());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/GetTeam2Members":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.GetTeam2Members());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/GetTeamNames":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.GetTeamNames());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/getJamNumber":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.GetJamNumber());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/addAssist":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.AddAssist(pId, teamNumber, jamNumber, jamId);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetAssists(pId, jamNumber, teamNumber, jamId));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/removeAssist":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.RemoveAssist(pId, teamNumber);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetAssists(pId, jamNumber, teamNumber, jamId));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/addBlock":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.AddBlock(pId, teamNumber, jamNumber, jamId);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetBlocks(pId, teamNumber, jamId));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/removeBlock":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.RemoveBlock(pId, teamNumber);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetBlocks(pId, teamNumber, jamId));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/scoringLoaded":
                        ServerHelper.ScoringLoaded();
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes("{ \"result\": true}");
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/addScore": //used from the jammer screens
                        if (request.QueryString["playerId"] != null && request.QueryString["points"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            int points = Convert.ToInt32(request.QueryString["points"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.AddScore(pId, teamNumber, jamId, jamNumber, points);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetScore(pId, jamId, teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/removeScore":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.RemoveScore(pId, teamNumber, jamId);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetScore(pId, jamId, teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/setBlocker1":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.SetBlocker(1, pId, teamNumber, jamId);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/setBlocker2":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.SetBlocker(2, pId, teamNumber, jamId);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/setBlocker3":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.SetBlocker(3, pId, teamNumber, jamId);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/setBlocker4":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.SetBlocker(4, pId, teamNumber, jamId);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/setPBox":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.SetPenaltyBox(pId, teamNumber, jamId);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/setPivot":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.SetPivot(pId, teamNumber, jamId);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/setJammer":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            var pId = new Guid(request.QueryString["playerId"]);
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.SetJammer(pId, teamNumber, jamId);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/startStopJam":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.StartStopJam());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/startOfficialTimeOut":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.StartOfficialTimeOut());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/addToScore": //used from the control screen.
                        if (request.QueryString["t"] != null && request.QueryString["points"] != null)
                        {
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            int points = Convert.ToInt32(request.QueryString["points"].ToString());
                            if (teamNumber == 1)
                                GameViewModel.Instance.AddScoreToGame(points, TeamNumberEnum.Team1);
                            else if (teamNumber == 2)
                                GameViewModel.Instance.AddScoreToGame(points, TeamNumberEnum.Team2);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetScore(teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/savePeriodTime": //used from the control screen.
                        if (!String.IsNullOrEmpty(request.QueryString["t"]))
                        {
                            string time = request.QueryString["t"].ToString();
                            if (Clocks.CLOCK_CHECK.IsMatch(time))
                                GameViewModel.Instance.PeriodClock.changeSecondsOfClock(Convert.ToInt32(Clocks.convertTimeDisplayToSeconds(Clocks.CLOCK_CHECK.Match(time).Value)));
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GrabMobileUpdate());
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/saveJamTime": //used from the control screen.
                        if (!String.IsNullOrEmpty(request.QueryString["t"]))
                        {
                            string time = request.QueryString["t"].ToString();
                            if (Clocks.CLOCK_CHECK.IsMatch(time))
                                GameViewModel.Instance.CurrentJam.JamClock.changeSecondsOfClock(Convert.ToInt32(Clocks.convertTimeDisplayToSeconds(Clocks.CLOCK_CHECK.Match(time).Value)));
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GrabMobileUpdate());
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/saveJamNumber": //used from the control screen.
                        if (!String.IsNullOrEmpty(request.QueryString["n"]))
                        {
                            string number = request.QueryString["n"].ToString();
                            if (StringExt.IsNumber(number))
                                GameViewModel.Instance.CurrentJam.JamNumber = Convert.ToInt32(StringExt.NumberRegex.Match(number).Value);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GrabMobileUpdate());
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/subtractFromScore":
                        if (request.QueryString["t"] != null)
                        {
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            ServerHelper.RemoveScore(teamNumber);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetScore(teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/takeTimeOut":
                        if (request.QueryString["t"] != null)
                        {
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.TakeTimeOut(teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/loadMainScreen":
                        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                        response.Connection.Type = ConnectionType.KeepAlive;
                        buffer = Encoding.UTF8.GetBytes(ServerHelper.LoadMainControlScreen());
                        response.Body.Write(buffer, 0, buffer.Length);
                        return ProcessingResult.SendResponse;
                    case "/addJamPass":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            var pId = new Guid(request.QueryString["playerId"]);
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            ServerHelper.AddJamPass(teamNumber, pId, jamId, jamNumber);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.GetScore(teamNumber));
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    case "/isLead":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            var pId = new Guid(request.QueryString["playerId"]);
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.IsLead(teamNumber, pId, jamId, jamNumber).ToString());
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    //case "/calledJam":
                    //    if (request.QueryString["playerId"] != null && request.QueryString["t"] != null)
                    //    {
                    //        int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                    //        var pId = new Guid(request.QueryString["playerId"]);
                    //        response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                    //        response.Connection.Type = ConnectionType.KeepAlive;
                    //        buffer = Encoding.UTF8.GetBytes(ServerHelper.CalledJam(teamNumber, pId));
                    //        response.Body.Write(buffer, 0, buffer.Length);
                    //        return ProcessingResult.SendResponse;
                    //    }
                    //    break;
                    case "/lostLead":
                        if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null)
                        {
                            int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString());
                            var pId = new Guid(request.QueryString["playerId"]);
                            int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]);
                            Guid jamId = new Guid(request.QueryString["jamId"]);
                            response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                            response.Connection.Type = ConnectionType.KeepAlive;
                            buffer = Encoding.UTF8.GetBytes(ServerHelper.LostLeadJammerEligibility(teamNumber, pId, jamId, jamNumber).ToString());
                            response.Body.Write(buffer, 0, buffer.Length);
                            return ProcessingResult.SendResponse;
                        }
                        break;
                    default:
                        break;
                }

            }
            catch (Exception exception)
            {
                ErrorViewModel.Save(exception, exception.GetType(), additionalInformation: request.Uri.OriginalString + Logger.Instance.getLoggedMessages());
                response.ContentType = new ContentTypeHeader("application/json; charset=utf-8");
                response.Connection.Type = ConnectionType.KeepAlive;
                byte[] buffer11 = Encoding.UTF8.GetBytes("");
                response.Body.Write(buffer11, 0, buffer11.Length);
                return ProcessingResult.SendResponse;
            }
            return ProcessingResult.Continue;
        }
Ejemplo n.º 29
0
 protected override string ApplyTemplate(RequestContext request, string template)
 {
     return template;
 }
		private ProcessingResult HandleRequest(RequestEventArgs e)
		{
			var context = new RequestContext
			              	{
			              		HttpContext = e.Context,
			              		Request = e.Request,
			              		Response = e.Response
			              	};

            PrepareRequest(this, e);

			// standard headers.
			e.Response.Add(new DateHeader("Date", DateTime.UtcNow));
			e.Response.Add(new StringHeader("Server", "C# WebServer"));


			if (e.Request.ContentLength.Value > 0)
				DecodeBody(e.Request);

			// Process routers.
			ProcessingResult result = ProcessRouters(context);
			if (ProcessResult(result, e))
				_logger.Debug("Routers processed the request.");

			// process modules.
			result = ProcessModules(context);
			if (ProcessResult(result, e))
				return result;

            RequestReceived(this, e);


			return ProcessingResult.Continue;
		}