aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.Server/WebAdmin.cs
diff options
context:
space:
mode:
authorMichael <[email protected]>2017-01-08 09:57:10 -0500
committerMichael <[email protected]>2017-01-08 09:57:10 -0500
commitf30dcf5ef41d54c588d7b42c48be8d941abba72e (patch)
tree7705f99b965673b1c034ac2b1c56e65072c827df /ShiftOS.Server/WebAdmin.cs
parent69dfad54724d4176dfce238a8d7e73970e6eef24 (diff)
downloadshiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.tar.gz
shiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.tar.bz2
shiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.zip
Initial upload
Diffstat (limited to 'ShiftOS.Server/WebAdmin.cs')
-rw-r--r--ShiftOS.Server/WebAdmin.cs91
1 files changed, 91 insertions, 0 deletions
diff --git a/ShiftOS.Server/WebAdmin.cs b/ShiftOS.Server/WebAdmin.cs
new file mode 100644
index 0000000..cf21181
--- /dev/null
+++ b/ShiftOS.Server/WebAdmin.cs
@@ -0,0 +1,91 @@
+using Nancy;
+using Nancy.Security;
+using NetSockets;
+using Newtonsoft.Json;
+using ShiftOS.Objects;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ShiftOS.Server
+{
+ public class WebAdmin : NancyModule
+ {
+ private Guid thisGuid { get; set; }
+
+ public WebAdmin()
+ {
+ this.RequiresAuthentication();
+
+
+ client = new NetObjectClient();
+
+ client.OnReceived += (o, a) =>
+ {
+ var msg = a.Data.Object as ServerMessage;
+ if (msg.Name == "Welcome")
+ {
+ thisGuid = new Guid(msg.Contents);
+ }
+ };
+
+ client.Connect(Program.server.Address.MapToIPv4().ToString(), 13370);
+
+ string template = Properties.Resources.Home;
+
+ Get["/"] = _ => { return GetPage(template, "index.html"); };
+ Get["/{page}"] = parameters =>
+ {
+ return GetPage(template, parameters.page);
+ };
+ }
+
+ public NetObjectClient client = new NetObjectClient();
+
+ public string GetPage(string template, string page)
+ {
+ string pageContents = File.ReadAllText("adm/" + page);
+
+ string page_text = template.Replace("{BODY}", pageContents);
+
+ page_text = page_text.Replace("{IP_ADDR}", client.RemoteHost.ToString());
+ page_text = page_text.Replace("{PORT}", client.RemotePort.ToString());
+
+ return page_text;
+ }
+
+ public string GrabResource(string page)
+ {
+ var type = this.GetType();
+ foreach(var property in type.GetProperties(BindingFlags.Public | BindingFlags.Instance))
+ {
+ foreach(var attr in property.GetCustomAttributes(false))
+ {
+ if(attr is PageAttribute)
+ {
+ if(page == (attr as PageAttribute).Name)
+ {
+ return property.GetGetMethod().Invoke(this, null) as string;
+ }
+ }
+ }
+ }
+
+ return Properties.Resources.NotFound;
+ }
+ }
+
+ public class PageAttribute :Attribute
+ {
+ public PageAttribute(string name)
+ {
+ Name = name;
+ }
+
+ public string Name { get; set; }
+ }
+}