From c151bcbdae42e539456aa7376bce050a4c7e1b19 Mon Sep 17 00:00:00 2001 From: RaidMax Date: Fri, 26 May 2017 23:22:50 -0500 Subject: [PATCH] Apparently I was working with an older codebase.. Oh well, i've merged the changes.. --- .vs/config/applicationhost.config | 1020 +++++++++++++++++ Admin/Commands.cs | 2 +- Admin/IW4M ADMIN.csproj | 12 - Admin/Kayak.cs | 20 +- Admin/Plugins.cs | 2 +- Admin/Server.cs | 22 +- Admin/WebService.cs | 61 +- Admin/lib/Kayak.dll | Bin 43520 -> 43008 bytes Admin/lib/SharedLibrary.dll | Bin 105472 -> 94208 bytes Admin/webfront/header.html | 80 +- Admin/webfront/main.css | 24 +- Admin/webfront/players.html | 66 +- Auto Restart Plugin/Main.cs | 2 +- EventAPI/Plugin.cs | 2 +- MessageboardPlugin/Forum.cs | 309 ++++- MessageboardPlugin/MessageboardPlugin.csproj | 38 +- MessageboardPlugin/Plugin.cs | 9 +- MessageboardPlugin/Storage.cs | 83 +- MessageboardPlugin/Thread.cs | 6 +- MessageboardPlugin/User.cs | 72 +- MessageboardPlugin/app.config | 15 + MessageboardPlugin/forum/thread.html | 147 ++- MessageboardPlugin/forum/user.html | 62 +- MessageboardPlugin/forum/usercp.html | 64 ++ MessageboardPlugin/packages.config | 3 +- SharedLibrary/Commands/NativeCommands.cs | 173 ++- SharedLibrary/Database.cs | 93 +- .../{Extensions => Interfaces}/IPlugin.cs | 2 +- SharedLibrary/RCON.cs | 3 +- SharedLibrary/Server.cs | 45 +- SharedLibrary/SharedLibrary.csproj | 2 +- Stats Plugin/Plugin.cs | 24 +- Stats Plugin/Stats Plugin.csproj | 3 + Votemap Plugin/Plugin.cs | 2 +- Welcome Plugin/Plugin.cs | 2 +- 35 files changed, 2056 insertions(+), 414 deletions(-) create mode 100644 .vs/config/applicationhost.config create mode 100644 MessageboardPlugin/app.config create mode 100644 MessageboardPlugin/forum/usercp.html rename SharedLibrary/{Extensions => Interfaces}/IPlugin.cs (90%) diff --git a/.vs/config/applicationhost.config b/.vs/config/applicationhost.config new file mode 100644 index 000000000..de613a419 --- /dev/null +++ b/.vs/config/applicationhost.config @@ -0,0 +1,1020 @@ + + + + + + + +
+
+
+
+
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ + +
+
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Admin/Commands.cs b/Admin/Commands.cs index 1ecf1a11a..37b65645c 100644 --- a/Admin/Commands.cs +++ b/Admin/Commands.cs @@ -14,7 +14,7 @@ namespace IW4MAdmin public override async Task ExecuteAsync(Event E) { await E.Origin.Tell("^5Loaded Plugins:"); - foreach (SharedLibrary.Extensions.IPlugin P in PluginImporter.potentialPlugins) + foreach (SharedLibrary.Interfaces.IPlugin P in PluginImporter.potentialPlugins) { await E.Origin.Tell(String.Format("^3{0} ^7[v^3{1}^7] by ^5{2}^7", P.Name, P.Version, P.Author)); } diff --git a/Admin/IW4M ADMIN.csproj b/Admin/IW4M ADMIN.csproj index c5ed3fb00..1c9d9a239 100644 --- a/Admin/IW4M ADMIN.csproj +++ b/Admin/IW4M ADMIN.csproj @@ -198,18 +198,6 @@ PreserveNewest - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - diff --git a/Admin/Kayak.cs b/Admin/Kayak.cs index 537648a73..206d801da 100644 --- a/Admin/Kayak.cs +++ b/Admin/Kayak.cs @@ -9,11 +9,11 @@ using Kayak; namespace IW4MAdmin { - class Scheduler: ISchedulerDelegate + class Scheduler : ISchedulerDelegate { public void OnException(IScheduler scheduler, Exception e) { - Manager.GetInstance().Logger.Write("Web service has encountered an error - " + e.StackTrace); + Manager.GetInstance().Logger.Write("Web service has encountered an error - " + e.Message); } public void OnStop(IScheduler scheduler) @@ -24,27 +24,27 @@ namespace IW4MAdmin class Request : IHttpRequestDelegate { - public void OnRequest(HttpRequestHead request, IDataProducer requestBody, IHttpResponseDelegate response) + public void OnRequest(HttpRequestHead request, IDataProducer requestBody, IHttpResponseDelegate response, string IP) { - // Manager.GetInstance().mainLog.Write("HTTP request received", SharedLibrary.Log.Level.Debug); + // Program.getManager().mainLog.Write("HTTP request received", SharedLibrary.Log.Level.Debug); NameValueCollection querySet = new NameValueCollection(); - + if (request.QueryString != null) querySet = System.Web.HttpUtility.ParseQueryString(SharedLibrary.Utilities.removeNastyChars(request.QueryString)); - querySet.Set("IP", ((DefaultKayakServer)(WebService.webService)).clientAddress.Address.ToString()); + querySet.Set("IP", IP); SharedLibrary.HttpResponse requestedPage = WebService.getPage(request.Path, querySet, request.Headers); var headers = new HttpResponseHead() - { - Status = "200 OK", - Headers = new Dictionary() + { + Status = "200 OK", + Headers = new Dictionary() { { "Content-Type", requestedPage.contentType }, { "Content-Length", requestedPage.content.Length.ToString() }, { "Access-Control-Allow-Origin", "*" }, } - }; + }; foreach (var key in requestedPage.additionalHeaders.Keys) headers.Headers.Add(key, requestedPage.additionalHeaders[key]); diff --git a/Admin/Plugins.cs b/Admin/Plugins.cs index 8595934cb..243d536cf 100644 --- a/Admin/Plugins.cs +++ b/Admin/Plugins.cs @@ -3,7 +3,7 @@ using System.IO; using System.Collections.Generic; using System.Reflection; using SharedLibrary; -using SharedLibrary.Extensions; +using SharedLibrary.Interfaces; namespace IW4MAdmin { diff --git a/Admin/Server.cs b/Admin/Server.cs index 35f353b46..1bb497800 100644 --- a/Admin/Server.cs +++ b/Admin/Server.cs @@ -58,12 +58,6 @@ namespace IW4MAdmin if (P.clientID < 0 || P.clientID > (Players.Count-1)) // invalid index return false; - if (P.Name == null || P.Name == String.Empty || P.Name.Length <= 1) - await this.ExecuteCommandAsync("clientkick " + P.clientID + " \"Please set a name using /name ^7\""); - - if (Players.Find(existingPlayer => (existingPlayer != null && existingPlayer.Name.Equals(P.Name)) && existingPlayer.clientID != P.clientID) != null) - await this.ExecuteCommandAsync("clientkick " + P.clientID + " \"Someone is using your name. Set a new name using ^5/name ^7\""); - if (Players[P.clientID] != null && Players[P.clientID].npID == P.npID) // if someone has left and a new person has taken their spot between polls return true; @@ -224,10 +218,7 @@ namespace IW4MAdmin Log.Write("Client at " + cNum + " disconnecting...", Log.Level.Debug); await ExecuteEvent(new Event(Event.GType.Disconnect, "", Leaving, null, this)); - lock (Players) - { - Players[cNum] = null; - } + Players[cNum] = null; ClientNum--; } @@ -368,7 +359,7 @@ namespace IW4MAdmin { await ProcessEvent(E); - foreach (SharedLibrary.Extensions.IPlugin P in PluginImporter.potentialPlugins) + foreach (SharedLibrary.Interfaces.IPlugin P in PluginImporter.potentialPlugins) { try { @@ -385,16 +376,19 @@ namespace IW4MAdmin } } - async Task PollPlayersAsync() + async Task PollPlayersAsync() { var CurrentPlayers = await this.GetStatusAsync(); for (int i = 0; i < Players.Count; i++) + { if (CurrentPlayers.Find(p => p.clientID == i) == null && Players[i] != null) await RemovePlayer(i); + } + + foreach (var P in CurrentPlayers) + await AddPlayer(P); - foreach (Player P in CurrentPlayers) - await AddPlayer(P); } long l_size = -1; diff --git a/Admin/WebService.cs b/Admin/WebService.cs index 2951f2650..174f270db 100644 --- a/Admin/WebService.cs +++ b/Admin/WebService.cs @@ -44,9 +44,19 @@ namespace IW4MAdmin string[] webConfig = System.IO.File.ReadAllLines("config\\web.cfg"); var address = Dns.GetHostAddresses(webConfig[0])[0]; int port = Convert.ToInt32(webConfig[1]); - - using (ss.Listen(new IPEndPoint(address, port))) - S.Start(); + + try + { + using (ss.Listen(new IPEndPoint(address, port))) + S.Start(); + } + + catch (Exception e) + { + Console.WriteLine("Unable to start webservice ( port is probably in use ): " + e.Message); + Thread.Sleep(5000); + Environment.Exit(-1); + } } catch (Exception) @@ -68,7 +78,7 @@ namespace IW4MAdmin { IFile f = new IFile(path.Replace("/", "\\").Substring(1)); - + if (path.Contains(".css")) { HttpResponse css = new HttpResponse(); @@ -77,7 +87,7 @@ namespace IW4MAdmin css.contentType = "text/css"; f.Close(); return css; - + } else if (path.Contains(".js")) @@ -89,8 +99,8 @@ namespace IW4MAdmin f.Close(); return css; } - f.Close(); - + f.Close(); + } requestedPage = new Error404(); @@ -173,7 +183,7 @@ namespace IW4MAdmin { var info = new List(); - foreach(Server S in Manager.GetInstance().Servers) + foreach (Server S in Manager.GetInstance().Servers) { ServerInfo eachServer = new ServerInfo(); eachServer.serverName = S.getName(); @@ -289,7 +299,7 @@ namespace IW4MAdmin S.ExecuteEvent(remoteEvent); - while(S.commandResult.Count > 0) + while (S.commandResult.Count > 0) cmd.Result.Add(S.commandResult.Dequeue()); } else @@ -342,7 +352,8 @@ namespace IW4MAdmin from = Int32.Parse(querySet["from"]); List selectedPenalties; - try { + try + { selectedPenalties = Manager.GetInstance().Servers.First().Bans.OrderByDescending(x => x.When).ToList().GetRange(Convert.ToInt32(querySet["from"]), 15); } @@ -415,7 +426,7 @@ namespace IW4MAdmin IFile penalities = new IFile("webfront\\penalties.html"); S.Append(penalities.getLines()); penalities.Close(); - + S.Append(loadFooter()); return S.ToString(); @@ -476,7 +487,7 @@ namespace IW4MAdmin } } - class PubbansJSON: IPage + class PubbansJSON : IPage { public string getName() { @@ -531,9 +542,9 @@ namespace IW4MAdmin PageInfo pi = new PageInfo(); pi.pagePath = p.getPath(); - // pi.pageType = p.getPage(querySet, headers).contentType; + // pi.pageType = p.getPage(querySet, headers).contentType; pi.pageName = p.getName(); - pi.visible = p.isVisible(); + pi.visible = p.isVisible(); pages.Add(pi); } @@ -580,17 +591,19 @@ namespace IW4MAdmin resp.contentType = getContentType(); resp.additionalHeaders = new Dictionary(); + bool authed = Manager.GetInstance().Servers.First().clientDB.getAdmins().FindAll(x => x.IP == querySet["IP"]).Count > 0; + if (querySet["id"] != null) { matchedPlayers.Add(Manager.GetInstance().Servers.First().clientDB.getPlayer(Convert.ToInt32(querySet["id"]))); } - else if(querySet["npID"] != null) + else if (querySet["npID"] != null) { matchedPlayers.Add(Manager.GetInstance().Servers.First().clientDB.getPlayers(new List { querySet["npID"] }).First()); } - else if(querySet["name"] != null) + else if (querySet["name"] != null) { matchedPlayers = Manager.GetInstance().Servers.First().clientDB.findPlayers(querySet["name"]); } @@ -607,7 +620,7 @@ namespace IW4MAdmin { foreach (var pp in matchedPlayers) { - if (pp == null) continue; + if (pp == null) continue; var playerAliases = Manager.GetInstance().Servers.First().getAliases(pp); PlayerInfo eachPlayer = new PlayerInfo(); @@ -617,6 +630,9 @@ namespace IW4MAdmin eachPlayer.playerName = pp.Name; eachPlayer.playernpID = pp.npID; eachPlayer.forumID = -1; + eachPlayer.authed = authed; + if (eachPlayer.forumID < 500000) + eachPlayer.showV2Features = true; foreach (var a in playerAliases) { @@ -625,10 +641,10 @@ namespace IW4MAdmin } eachPlayer.playerConnections = pp.Connections; - eachPlayer.lastSeen = SharedLibrary.Utilities.timePassed(pp.LastConnection); + eachPlayer.lastSeen = Utilities.timePassed(pp.LastConnection); pInfo.Add(eachPlayer); - - } + + } resp.content = Newtonsoft.Json.JsonConvert.SerializeObject(pInfo); return resp; @@ -669,6 +685,7 @@ namespace IW4MAdmin { public string pageName; public string pagePath; + public string pageType; public bool visible; } @@ -685,6 +702,8 @@ namespace IW4MAdmin public List playerIPs; public int playerConnections; public string lastSeen; + public bool showV2Features; + public bool authed; } [Serializable] @@ -704,4 +723,4 @@ namespace IW4MAdmin { public List Result; } -} +} \ No newline at end of file diff --git a/Admin/lib/Kayak.dll b/Admin/lib/Kayak.dll index da5f9b8b8e936452afbd36ca1a82f7b1df1c70c0..d9eb6a3cb8cedeaabc5bdd1371c54c063111e7b1 100644 GIT binary patch literal 43008 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 literal 43520 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 G;CccYDU(T`2qn!K;{T8=P@Bw6j``ch*xu$ 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

4wil-)?7F-PZ`Oh`-hP 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%0Dmm9Xi4BZOcm zgw&OgvRM#D(co?+a@V~1iS5Ew*-6b zU~f?{fUyS4fWB8oX=!<|FtS+mAw;!^thXAyKCBZ$CbS?FHeuCZ5kn=gt2VhA2>QZi zxF{H8PN<7nEE=%htQcDl92WRqbaDvaJc$}UOQC%Qn7_u>%iL96JuO%i$^KFX@@tsN z#CU{@6!iF)Vd&EJp{R-Zsl3u)RfXZwU?Djdtu#$2bZIGMQvmitA?Zz+=e-y#;mG2! zZ3QsduvamL%!)k~d*%j9t-fHhI1T{O=T>BGuq=}O_el0F45LuR*!~(!HTPmHPzo5G z*UD)7OaTnj*zIB37u?x07^=50G(yM~;^-?!7+M?|yA#7u4@rzL*s&0r^+hS=UV&c` zTMR+a6!+5xSB!B$tOSa#kSJe4q_x-;U#K)yr7FQpYLRmYh6;-~mRJleO$54QjjCZ= z0ft2%GIlUiLDf29l_L6G;tt3-JA&D`CV-|v3ISNzaHWcjLVF-o%n)-`7}EmWlOV>9 zL{~%PM;JqkgN{HASJ@R_CBdv6%u4WDJ9w=Gud{>KN$>_cc!LCQw1YQF@D@9Giv(}8 zgSScW4m)^<1drLlV-mdE4&E)nd+gvn61>k2-Y3Ba?BD|ue9#U)D8aAW!LLj35j*&Z z1jp^*xCEcDgHK5CDLeR-1fQ{k&q(lDJNT>wpRgdpKL#b?w1eH!8;d9=;6JUpU+Ar0&fX)$K%f=OTNZ$lm$ELik^t zDlxtSbQtL0^&?C#jPa3CJ>W5{wd3_ujIFr}gR4f2+fQYx*4f2@kYX?a>+&260gG9L z2}P2vI(!9~@Czc@EX*mrDY{d>f=X3}uCOR0W5bcrl3YdvJ&74_VrCWuVj0a`gJ4O# zR7YSG;K7$scp|$jVNSSNC*fL8!nHXOUguC>=TP6^p}rwUeWOEtqeBf7;i~kO%3#Ru zN?3~@coJ_52VwWAf3O^`On2m}IObGwtTI@{k}%szmb>A@jbh5elz|0+twDF!1UWYf z#XYnNyas;qM-nse9ci z_vEBY76`t zzb(*fL_KryA*q4|i-Dh9MM>zPEB0Pkwf4mIp?|&k%EzAD@y3SG%CGErTmqm z6j6SIz$EYyFwzfIRQ>{jAVG)#4iC&AK`}uIK`B9)fZwL`zl%RVK0;q@7MQ%Rhtm`z zvVdSQ!7@ZOn*~L*gMUl#_hvx>;v{jU<%)+9u>e;Cu6|r=xxk@cBr6>v>m`Qk20Lk+ zja1u789?F?#exU^!K zPZRur@$Hfs-PsI8FCN(9{boURsqG?)bH`@iKyV|$Ed;j_+(B@R;BJC@2<{_zfZ#!b zdkMa7mtO+bOKg@)nDhw2IKdM(Q7c1F5j;ciEWvYj;(CUjCwRdwr@>BZfDB}mGx-F; z%LK0yyiRbE;1t1|0ArHyM?3d6@V1T7P^8G1pCCl=N5l(4e#goQrj zx*Qd|>5`09)2YX;80kzLTOTsHB)>GWK+@Oi^z}tpp@F1g}sWD=!!~0 z3VRea;Yh1&<#4MKt0z>>9R!~dS&YShh-)J50-$XWC6-1$G(H@X)d)5b3c;0>CL0^r zp}~#@wiT^A8WkW%SRaCo5R)i)EYT{W#qQAVFl&!o$|V>eh8RQuw$S9(5P1RbsMK#n z`jHuJ&@E_)H0N+oXo39Hkj*L1uq>?^ZDRj~BF&{y?il=(n>Y)g?AD43{pFK7Bh93{ zGy+w?I#72*zwppccGe2IR`(0c#YVl;!5s(L%vdk!P#{YpXats2ApoNkD<`xat|vu- z8%4tHL9J+5JR@c|A^IJQK`~H!i;&YoVNQ*36bs%+_BV)n1Eq;BaUpDl(Ku{s*{Q|K z)}|V+ziUw8{zz*WJAhgQdO?bq5Ekc`;$96eQjl`V`BOVPdO>mbiEa?aN~BfGs1+Mj zvil{hw&s+z1k{ySKq{ki#ez+XN5!7K30h+>ZdjST%x-G9|P=v{*Nv6p>bf zW`cf#wS|%>0!MJY4sxIshHRmsq>>On2+hB_hQha)%^4S^@OhA-!Q7ip`GJJPX#;dY zPFX5qs8Y{MQE@Ip5@zC4(YbF3L?6318eP3|6;7`&G1P+i+BIu?`qr#m9`9Y>w|wpD zvsNyTtyzEO^2C~+4QH+FTe-S#HBJ(gppI4bEBOz{RPZI~`t4gfbDvvSX1zcC+(T>Y z*MZgWv|N()QA)l7H^My8TuKzQ3k?B)j zwfZ!5Vl2uRM)KyHO8oqGSKdrhh+ls{>iy=@ZyA5TxgZgI zV>55ADY}~9U(1_k3Z-Wryw^8xwkaeiFN)8b>0CptKTUUezpa)x_Z0Hi-^0wCYl`-5 z)}M~cn{5hF@+%ncHxEC~nK#cA>{)Moe!tnQH;?DdHbt+=w{`MnnnDz9c)5PwJX16a zCXpWw$(wBo{^X+p?>CctW;So8DH_Eu9Ocae-&6n5aXE8U@0#_iHzbz##d{LV*RJhd zv%IJ0toZVEt9pCZ$5;2B6^mmMxBiyhzxZOJ+-IpqDbGJ(sOLXzs9hb+9mhL*-w8i; z{DPzJj2AumvEO{3l{B5bmtO%%3*3trxF5jRQTFl+Kg-2vxKYo5+KbOMfgT@y+Utq0 zAMWiT1OJ8os=sE7Td6aNNAokk*hPnTW;6|@@G+h?e9}RGzc-Pn=cl9i_wGWJQJ%k) zzr_C6k$@qcI16t%@bb)+qrxG{$?>GyhHKBbp*C`#)B4-!gNv>%R2}$9(}nmM{4QWE z@{_YJ+_&Q=ojZi`oBrRvgXKJMUi{N{{D4~i{D2(W?!RUP43x^lmgnOX91knE;8Yq< z_3>|kVy;f4@>Cq(v&2(u`t?#mpdRqwfkF-N#FuCBMBBbRB^?nO{nJ9iwK&@d8K~LF zY2XKR`iCO=JRgqj%ila#8h>`jL*CnQ=T8dlzh)H%mCboGQuJFk_%mELpY~62dBU$1 zT=ErnY%_j}3O;atC|8F5=`nxEzysaRuJazt!Mp6%JZsxr;Q`PyKjY zHia{dwlo!LW1Ty!I@nXJ*_ItcTC(qj|BWK|c9b=QHt{DX8J7g`R!KSU$fLfK<-Jzq x?aez;>Jw$YUh*`eH9YmnA8G5Kef_C?5Yhj+Kg^eW;;;?xANb4P|NkWL{{mD!nG*m2 diff --git a/Admin/webfront/header.html b/Admin/webfront/header.html index 50c8225ca..2a142bc13 100644 --- a/Admin/webfront/header.html +++ b/Admin/webfront/header.html @@ -1,9 +1,9 @@ - + IW4MAdmin by RaidMax - + @@ -23,7 +23,71 @@ $.getJSON("_userinfo", function(response) { function showErrorMessage(msg) { - $('.alertBox').html(msg).addClass('error').slideDown("fast"); + message = "An unknown error occurred!"; + switch(msg) + { + case 0: + message = "No error"; + break; + case 1: + message = "Permission denied"; + break; + case 2: + message = "User exists"; + break; + case 3: + message = "Invalid user"; + break; + case 4: + message = "Incorrect username or password"; + break; + case 5: + message = "No credentials entered"; + break; + case 6: + message = "User not authorized"; + break; + case 7: + message = "Password too long"; + break; + case 8: + message = "Username too long"; + break; + case 9: + message = "Bad profile data entered"; + break; + case 10: + message = "Invalid session"; + break; + case 11: + message = "Bad thread content entered"; + break; + case 12: + message = "No thread content entered"; + break; + case 13: + message = "Thread content too long"; + break; + case 14: + message = "Thread title too long"; + break; + case 15: + message = "Invalid thread specified"; + break; + case 16: + message = "Could not save reply"; + break; + case 17: + message = "Invalid category specified"; + break; + case 18: + message = "Empty category"; + break; + case 19: + message = "Password do not match"; + break; + } + $('.alertBox').html(message).addClass('error').slideDown("fast"); } function parseGet(val) { @@ -74,7 +138,7 @@ function formatMessages(messages) var chats = ""; $.each(messages, function(i, chat) { chats += - "
" + chat['Name'] + ":
" + $("
").html(chat['Message']).text() + "
\ + "
" + $("
").html(chat['Name']).text()+ ":
" + $("
").html(chat['Message']).text() + "
\
" }); return chats; @@ -93,9 +157,9 @@ function getPages() function shouldHideAction(author) { // fixme dynamic - if (user.rank == null || author.ranking == null) + if (author.ranking == null) return " display: none"; - else if (user.rank.name == "Moderator" || user.rank.name == "Administrator" || user.username == author.username) + else if (user.user.ranking.name == "Moderator" || user.user.ranking.name == "Administrator" || user.user.id == author.id) return ""; else { return " display: none"; @@ -107,7 +171,7 @@ function formatPlayers(players) var p = ""; for (i = 0; i < players.length; i++) { - p += "
"; + p += "
" + getColorForLevel(players[1*i]['playerLevel'], $(""; if (i % 2 == 1 && i != 0 ) p += "
"; } @@ -132,7 +196,7 @@ function getDate(datestr) function checkPrivilege() { - $.getJSON("_userinfo", function(response) { if (response.rank.id != 1) window.location.replace("home"); else $('.infoBox').show(); }); + $.getJSON("_userinfo", function (response) { if (response.user.ranking.id != 1) window.location.replace("home"); else $('.infoBox').show(); }); } diff --git a/Admin/webfront/main.css b/Admin/webfront/main.css index 0c8825ffd..1a28a075c 100644 --- a/Admin/webfront/main.css +++ b/Admin/webfront/main.css @@ -15,7 +15,7 @@ div#header #navContainer .navEntry a { padding: 1.2vw; width: 4vw; } div#header #navContainer .navEntry:hover { background-color: rgb(34, 34, 34); } div#content { margin: 3em 10%; } -div#content .serverContainer { background-color: #191919; margin: 2em 0; font-size: 1.75vw; } +div#content .serverContainer { background-color: #191919; margin: 2em 0; font-size: 1.25vw; } div#content hr { border-width: 0; height: 0.25em; background-color: #007ACC; } div#content .serverInfo { width: 100%; } div#content .serverInfo .tableCell { padding: 0 0.5em; } @@ -25,10 +25,10 @@ div#content .serverPlayers { text-align: right; width: calc( 100% / 3); backgrou div#content .serverMap { text-align: center; width: calc( 100% / 3); background-color: #007ACC; } div#content .serverPlayerList {float: right; margin: 0.5em; } div#content .serverChatList { float: left; margin: 0.5em } -div#content .playerName { font-size: 1.357vw; color: rgba(78, 140, 77, 0.64); width: 10em; text-align: right; } +div#content .playerName { font-size: 1.1vw; color: rgba(78, 140, 77, 0.64); width: 10em; text-align: right; } div#content .playerName:hover { color: rgb(0, 122, 204) !important; } -div#content .chatPlayerName { font-weight: bold; font-size: 1.357vw; color:#fff; padding-right: 0.5em; opacity: 0.5; } -div#content .chatPlayerMessage {font-size: 1.357vw; color: #fff; opacity: 1; } +div#content .chatPlayerName { font-weight: bold; font-size: 1.1vw; color:#fff; padding-right: 0.5em; opacity: 0.5; } +div#content .chatPlayerMessage {font-size: 1.1vw; color: #fff; opacity: 1; } div#content .playerPenalty, div#content .playerInfo { margin: 0 auto; padding: 1em 10px; background-color: #181818; width: calc(100% - 20px); } div#content .penaltyName { width: 14.28%; } @@ -74,7 +74,7 @@ div.infoBox .header { text-align: center; background-color: #007ACC; padding: 0. div.infoBox form { padding: 10px; } div.infoBox { width: 50%; margin: 0 auto; background-color: #181818; border: 1em solid #007ACC; border-width: 0 0 0.25em 0; min-width: 550px; } div.infoBox input[type="text"], div.infoBox input[type="password"] { width: 70%; } -div.infoBox input[type="submit"] { width: 20%; background-color: #007ACC; font-size: 16pt; border: none; color: #fff; font-size: 15pt; padding: 0.5em 10px; margin: 0.25em; } +div.infoBox input[type="submit"], #userCP input[type="submit"] { width: 20%; background-color: #007ACC; font-size: 16pt; border: none; color: #fff; font-size: 15pt; padding: 0.5em 10px; margin: 0.25em; } div.alertBox { display: none; margin-top: 15px; margin-left: 15px; } @@ -88,8 +88,8 @@ div#recentTitle { position: relative; top: -1em; } div#view .threadPreview { background-color: #181818; padding: 0 10px; width: calc(100% - 20px); } div#view .threadPreview .threadTitle { padding: 0 0.5em; width: 80%; } div#view .threadPreview .threadInfo { font-size: 9pt; text-align: right; width: 50%; } -div#view .categoryDescription { font-size: 9pt; opacity: 0.5; margin-left: 2em; position: relative; top: -2.5px; } -div#content .individualThreadInfo { border-bottom: 1px solid rgba(255, 255, 255, 0.2); padding: 0.5em 0; display: table; width: 100%; } +div#view .categoryDescription { font-size: 10.5pt; opacity: 0.5; margin-left: 2em; position: relative; top: -2.5px; } +div#content .individualThreadInfo { border-bottom: 1px solid rgba(255, 255, 255, 0.2); padding: 0.5em 1em; display: table; width: calc(100% - 2em); } div#content .individualThreadInfo:nth-child(3) { border-bottom: none; padding-bottom: 0.5em; } div#content .individualThreadInfo i { font-size: 16pt; width: 16pt; } div.title a:link:hover, div.title a:visited:hover { color: #ff6633 !important; } @@ -123,6 +123,7 @@ div#threadContainer .threadContent { margin: 1em 0; font-size: 11pt; word-break div#threadContainer .threadContent img { max-width: 100%;} div#threadContainer .threadContent a { color: rgb(0, 122, 204) !important; } div#threadContainer .threadContent a:hover { color: #fff !important; } +div.threadContent ol, div.threadContent ol { margin: 1em; } div.categoryThread .threadActions { color: rgba(255, 69, 69, 0.85); font-size: 18pt; width: 19px; } @@ -181,14 +182,19 @@ div#userAvatar { width: 20em; height: 20em; background-size: contain; margin-ri .themeBlue { color: #007ACC !important; } .themeBlue:hover { color: #fff !important; } .themeOrange { color: #ff6633; } -.themeOrage:hover{ color: #007ACC !important; } +.themeOrange:hover{ color: #007ACC !important; } -div.threadInfo .actionHover { float: right; color: rgba(255, 69, 69, 0.85); } +div.threadInfo .actionHover { float: right; color: rgba(255, 69, 69, 0.85); margin: 0 4px; } .actionHover { cursor: pointer; } .actionHover:hover { color: #007ACC !important; } +.actionHover.actionEdit { color:#007ACC !important; } .datThing { background-color: #007ACC; font-size: 16pt; border: none; color: #fff; font-size: 15pt; padding: 0.5em 10px; } span.light { opacity: 0.5; } span.userTitle span:hover {color: #007ACC !important; } + +input#bannercolor { margin: 0.35em; width: 265px; border: none; height: 45px; } + + div#footer { position: fixed; bottom: 0.5em; right: 0.5em; opacity: 0.5; } diff --git a/Admin/webfront/players.html b/Admin/webfront/players.html index 255c8577f..70eb83117 100644 --- a/Admin/webfront/players.html +++ b/Admin/webfront/players.html @@ -17,37 +17,61 @@ function getPrevPage() else return 0; } -function formatHidden(data) + +function formatHidden(data, authed) { - var p = "
Expand
"; - $.each(data, function(i, dat) { - p += "" + dat + "
" - }) + var p = "
Expand
"; + + if (authed) { + $.each(data, function (i, dat) { + p += "" + dat + "
" + }) + } + + else + p += "Hidden"; p += "
" return p; } + function printPlayer(player, i) { - $("#playersTable").append( - "
\ - \ -
"+ formatHidden(player['playerAliases']) + "
\ -
"+ formatHidden(player['playerIPs']) + "
\ -
"+ getColorForLevel(player['playerLevel'], player['playerLevel']) + "
\ -
"+ player['playerConnections'] + "
\ -
\ - \ + var p = ""; + p += + "
\ + \ +
" + formatHidden(player['playerAliases'], player.authed) + "
\ +
" + formatHidden(player['playerIPs'], player.authed) + "
\ +
" + getColorForLevel(player['playerLevel'], player['playerLevel']) + "
\ +
" + player['playerConnections'] + "
"; + + if (player.showV2Features) + { + p += + "
\ + \ \ \ \ \ \ -
\ -
"+ checkJustNow(player['lastSeen']) + "
\ -
" - ) +
"; + } + + else + { + p+= + "
" + } + + p += + "
" + checkJustNow(player['lastSeen']) + "
\ +
"; + + $("#playersTable").append(p); + } function getPlayer(ident, identValue) @@ -59,7 +83,7 @@ function getPlayer(ident, identValue) $.each(result, function(i, player) { printPlayer(player, i); }); - }).done(function (data) { $(".loader").fadeOut(); }); + }).done(function (data) { $(".loader").fadeOut(); }); } $( document ).ready(function() { @@ -72,8 +96,8 @@ $( document ).ready(function() { } }); -$('#content').on('click', '.hiddenWrapper', function(){ - $(this).find('.hiddenElements').toggle() +$('#content').on('click', 'div.hiddenWrapper span', function(){ + $(this).parent().find('.hiddenElements').toggle() }); diff --git a/Auto Restart Plugin/Main.cs b/Auto Restart Plugin/Main.cs index 462d2ab9f..421a8c98c 100644 --- a/Auto Restart Plugin/Main.cs +++ b/Auto Restart Plugin/Main.cs @@ -1,6 +1,6 @@ using System; using SharedLibrary; -using SharedLibrary.Extensions; +using SharedLibrary.Interfaces; using System.Threading.Tasks; namespace Auto_Restart_Plugin diff --git a/EventAPI/Plugin.cs b/EventAPI/Plugin.cs index 0aaa8856b..04dd0c233 100644 --- a/EventAPI/Plugin.cs +++ b/EventAPI/Plugin.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text; using SharedLibrary; -using SharedLibrary.Extensions; +using SharedLibrary.Interfaces; using System.Threading.Tasks; namespace EventAPI diff --git a/MessageboardPlugin/Forum.cs b/MessageboardPlugin/Forum.cs index 9442bb444..f6345a6c7 100644 --- a/MessageboardPlugin/Forum.cs +++ b/MessageboardPlugin/Forum.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using System.Text; using SharedLibrary; using System.Collections.Specialized; @@ -17,7 +18,7 @@ namespace MessageBoard.Forum private const int MAX_SESSIONS = 64; public const int TITLE_MAXLENGTH = 30; public const int CONTENT_MAXLENGTH = 8192; - public const int USERNAME_MAXLENGTH = 16; + public const int USERNAME_MAXLENGTH = 30; public const int PASSWORD_MAXLENGTH = 64; public Rank guestRank; @@ -36,6 +37,7 @@ namespace MessageBoard.Forum USER_NOTAUTHORIZED, USER_PASSWORDTOOLONG, USER_USERNAMETOOLONG, + USER_BADPROFILEDATA, SESSION_INVALID, THREAD_BADDATA, THREAD_EMPTYDATA, @@ -44,7 +46,8 @@ namespace MessageBoard.Forum THREAD_INVALID, REPLY_SAVEFAILED, CATEGORY_INVALID, - CATEGORY_EMPTY + CATEGORY_EMPTY, + USER_MISMATCHEDPASSWORD } public Manager() @@ -60,13 +63,13 @@ namespace MessageBoard.Forum { Session newSession = getSession(sessionID); newSession.sessionStartTime = DateTime.Now; - Console.WriteLine("Matching session was found - {0}", sessionID); + //Console.WriteLine("Matching session was found - {0}", sessionID); addSession(newSession); } catch (Exceptions.SessionException) { - Console.WriteLine("No session was found so we are adding a new one"); + //Console.WriteLine("No session was found so we are adding a new one"); Session newSession = new Session(new User(), sessionID); addSession(newSession); } @@ -95,6 +98,16 @@ namespace MessageBoard.Forum return requestedUser; } + public User getUser(string username) + { + User requestedUser = database.getUser(username); + + if (requestedUser == null) + throw new Exceptions.UserException("User not found"); + + return requestedUser; + } + public ForumThread getThread(int threadID) { ForumThread requestedThread = database.getThread(threadID); @@ -150,7 +163,7 @@ namespace MessageBoard.Forum if (activeSessions.Count >= MAX_SESSIONS) activeSessions.RemoveAt(0); - //activeSessions.RemoveAll(x => (x.sessionID == sess.sessionID && sess.sessionUser.ranking.equivalentRank > x.sessionUser.ranking.equivalentRank)); + activeSessions.RemoveAll(x => x.sessionUser.ranking.name == "Guest" && x.sessionID == sess.sessionID); //Console.WriteLine(String.Format("Adding new session [{0}] [{1}]", sess.sessionID, sess.sessionUser.username)); @@ -158,7 +171,7 @@ namespace MessageBoard.Forum activeSessions.Add(sess); // if it's a guest session, we don't want to save them in the database... - if (sess.sessionUser.ranking.equivalentRank > Player.Permission.User) + if (sess.sessionUser.ranking.name != "Guest") { database.setSession(sess.sessionUser.id, sess.sessionID); sess.sessionUser.lastLogin = DateTime.Now; @@ -171,6 +184,24 @@ namespace MessageBoard.Forum public void removeSession(string sessID) { activeSessions.RemoveAll(x => x.sessionID == sessID); + database.removeSession(sessID); + } + + public ProfileSettings getProfileSettings(int userid) + { + var retrieved = database.getProfileSettings(userid); + if (retrieved == null) + { + if (userid > 0) + { + var profile = new ProfileSettings(userid); + database.addProfileSettings(profile); + return profile; + } + return new ProfileSettings(0); + } + else + return retrieved; } public ErrorCode addUser(User newUser, Session userSession) @@ -183,6 +214,8 @@ namespace MessageBoard.Forum newUser.ranking = AdminRank; User createdUser = database.addUser(newUser, userSession); + database.addProfileSettings(new ProfileSettings(createdUser.id)); + removeSession(userSession.sessionID); return addSession(new Session(createdUser, userSession.sessionID)); } @@ -191,6 +224,11 @@ namespace MessageBoard.Forum database.updateUser(updatedUser); } + public void updateUserProfile(ProfileSettings updatedUserProfile) + { + database.updateProfileSettings(updatedUserProfile); + } + public ErrorCode updateThread(ForumThread newThread) { if (database.updateThread(newThread)) @@ -218,7 +256,7 @@ namespace MessageBoard.Forum public ErrorCode authorizeUser(string username, string password, string sessionID) { - User toAuth = database.getUser(username); + User toAuth = database.getUser(username.ToLower()); if (toAuth == null) return ErrorCode.USER_BADCREDENTIALS; @@ -270,6 +308,8 @@ namespace MessageBoard.Forum var registerJSON = new Pages.RegisterJSON(); var userinfoJSON = new Pages.userinfoJSON(); var viewUser = new Pages.ViewUser(); + var userCP = new Pages.UserCP(); + var updateUserJSON = new Pages.updateUserJSON(); var categoriesJSON = new Pages.categoriesJSON(); var category = new Pages.ViewCategory(); var categorythreadsJSON = new Pages.categorythreadsJSON(); @@ -289,6 +329,8 @@ namespace MessageBoard.Forum forumPages.Add(registerJSON); forumPages.Add(userinfoJSON); forumPages.Add(viewUser); + forumPages.Add(userCP); + forumPages.Add(updateUserJSON); forumPages.Add(categoriesJSON); forumPages.Add(category); forumPages.Add(categorythreadsJSON); @@ -308,6 +350,8 @@ namespace MessageBoard.Forum SharedLibrary.WebService.pageList.Add(registerJSON); SharedLibrary.WebService.pageList.Add(userinfoJSON); SharedLibrary.WebService.pageList.Add(viewUser); + SharedLibrary.WebService.pageList.Add(userCP); + SharedLibrary.WebService.pageList.Add(updateUserJSON); SharedLibrary.WebService.pageList.Add(categoriesJSON); SharedLibrary.WebService.pageList.Add(category); SharedLibrary.WebService.pageList.Add(categorythreadsJSON); @@ -366,7 +410,7 @@ namespace MessageBoard.Forum if (requestHeaders.ContainsKey("Cookie")) { - Console.WriteLine("JSON request contains session header - " + requestHeaders["Cookie"]); + //Console.WriteLine("JSON request contains session header - " + requestHeaders["Cookie"]); string cookie = requestHeaders["Cookie"].Split('=')[1]; Plugin.Main.forum.startSession(cookie); currentSession = Plugin.Main.forum.getSession(cookie); @@ -552,6 +596,30 @@ namespace MessageBoard.Forum } } + public class UserCP : ForumPage + { + public UserCP() : base(false) + { + + } + + public override string getName() + { + return "Forum - User Control Panel"; + } + + public override string getPath() + { + return base.getPath() + "/usercp"; + } + + public override string getContent(NameValueCollection querySet, IDictionary headers) + { + string content = loadFile("forum\\usercp.html"); + return templatation(content); + } + } + public class ViewThread : ForumPage { public ViewThread() : base(false) @@ -622,10 +690,29 @@ namespace MessageBoard.Forum result.destination = base.getPath() + "/error"; try { + + string username = DNA.Text.TextEngine.Text(querySet["username"]); + string password = DNA.Text.TextEngine.Text(querySet["password"]); + string email = DNA.Text.TextEngine.Text(querySet["email"]); + + bool validEmail = Regex.IsMatch(email, + @"^(?("")("".+?(? Manager.USERNAME_MAXLENGTH) + throw new Exceptions.UserException("Username is too long"); + + if (password.Length > Manager.PASSWORD_MAXLENGTH) + throw new Exceptions.UserException("Password is too long"); + byte[] passwordSalt = Encryption.PasswordHasher.GenerateSalt(); - string b64PasswordHash = Convert.ToBase64String(Encryption.PasswordHasher.ComputeHash(querySet["password"], passwordSalt)); + string b64PasswordHash = Convert.ToBase64String(Encryption.PasswordHasher.ComputeHash(password, passwordSalt)); - User registeringUser = new User(querySet["username"], querySet["hiddenUsername"], querySet["email"], b64PasswordHash, Convert.ToBase64String(passwordSalt), Plugin.Main.forum.UserRank); + User registeringUser = new User(username, querySet["hiddenUsername"], email, b64PasswordHash, Convert.ToBase64String(passwordSalt), Plugin.Main.forum.UserRank); currentSession = new Session(registeringUser, currentSession.sessionID); var addUserResult = Plugin.Main.forum.addUser(registeringUser, currentSession); @@ -643,7 +730,9 @@ namespace MessageBoard.Forum } } - catch (Exception E) { + catch (Exception E) + { + //logme result.errorCode = Manager.ErrorCode.USER_INVALID; } @@ -665,11 +754,12 @@ namespace MessageBoard.Forum UserInfo info = new UserInfo(); bool validUserSelection = true; - User requestedUser = null; try { - requestedUser = Plugin.Main.forum.getUser(Convert.ToInt32(querySet["id"])); + int userid = Convert.ToInt32(querySet["id"]); + info.user = Plugin.Main.forum.getUser(userid); + info.profile = Plugin.Main.forum.getProfileSettings(userid); } catch (FormatException) @@ -684,41 +774,120 @@ namespace MessageBoard.Forum validUserSelection = false; } - if (validUserSelection) + if (!validUserSelection) { - resp.content = Newtonsoft.Json.JsonConvert.SerializeObject(requestedUser); + info.user = currentSession.sessionUser; + try + { + info.profile = Plugin.Main.forum.getProfileSettings(info.user.id); + } + + catch (Exceptions.UserException) + { + //logme + } } - else + /*// this should not be a thing but ok... + Player matchedPlayer = Plugin.Main.stupidServer.clientDB.getPlayer(querySet["ip"]); + + if (matchedPlayer != null) + info.matchedUsername = matchedPlayer.Name;*/ + + resp.content = Newtonsoft.Json.JsonConvert.SerializeObject(info); + return resp; + } + } + + public class updateUserJSON : JSONPage + { + public override string getPath() + { + return base.getPath() + "/_updateuser"; + } + + public override HttpResponse getPage(NameValueCollection querySet, IDictionary requestHeaders) + { + var resp = base.getPage(querySet, requestHeaders); + var aResp = new ActionResponse(); + + bool passwordUpdateRequest = false; + + if (querySet["username"] == null || currentSession.sessionUser.id == 0) + aResp.errorCode = Manager.ErrorCode.USER_INVALID; + else if (querySet["bannercolor"] == null) + aResp.errorCode = Manager.ErrorCode.USER_BADPROFILEDATA; + if (querySet["updatedpassword"] != null && querySet["updatedpasswordrepeat"] != null && querySet["updatedpassword"].Length > 0 && querySet["updatedpasswordrepeat"].Length > 0) + passwordUpdateRequest = true; + + if (aResp.errorCode == Manager.ErrorCode.NO_ERROR) { - if (querySet.Get("setavatarurl") != null) + string username = DNA.Text.TextEngine.Text(querySet["username"]); + string bannercolor = DNA.Text.TextEngine.Text(querySet["bannercolor"]); + string avatarURL = DNA.Text.TextEngine.Text(querySet["avatarurl"]); + string password = null; + + if (passwordUpdateRequest) { - if (currentSession.sessionUser.ranking.name != "Guest") + password = DNA.Text.TextEngine.Text(querySet["updatedpassword"]); + string passwordRepeat = DNA.Text.TextEngine.Text(querySet["updatedpasswordrepeat"]); + if (!password.Equals(passwordRepeat)) { - currentSession.sessionUser.avatarURL = querySet["setavatarurl"]; - Plugin.Main.forum.updateUser(currentSession.sessionUser); - resp.content = "OK!"; - return resp; + password = null; + aResp.errorCode = Manager.ErrorCode.USER_MISMATCHEDPASSWORD; + } + + else if (password.Length > Manager.PASSWORD_MAXLENGTH) + { + password = null; + aResp.errorCode = Manager.ErrorCode.USER_PASSWORDTOOLONG; } } + User existingUser = null; + try + { + existingUser = Plugin.Main.forum.getUser(username); + } + + catch (Exceptions.UserException) + { + + } + + + if (existingUser != null && existingUser.id != currentSession.sessionUser.id) + aResp.errorCode = Manager.ErrorCode.USER_DUPLICATE; else { - info.email = currentSession.sessionUser.email; - info.username = currentSession.sessionUser.username; - info.rank = currentSession.sessionUser.ranking; + var profile = Plugin.Main.forum.getProfileSettings(currentSession.sessionUser.id); + if (username.Length <= Manager.USERNAME_MAXLENGTH) + currentSession.sessionUser.updateUsername(username); + else + aResp.errorCode = Manager.ErrorCode.USER_USERNAMETOOLONG; + currentSession.sessionUser.updateAvatar(avatarURL); - // this should not be a thing but ok... - Player matchedPlayer = Plugin.Main.stupidServer.clientDB.getPlayer(querySet["ip"]); + if (passwordUpdateRequest && aResp.errorCode == Manager.ErrorCode.NO_ERROR) + { + byte[] passwordSalt = Encryption.PasswordHasher.GenerateSalt(); + string b64PasswordHash = Convert.ToBase64String(Encryption.PasswordHasher.ComputeHash(password, passwordSalt)); + currentSession.sessionUser.updatePassword(Convert.ToBase64String(passwordSalt), b64PasswordHash); + } - if (matchedPlayer != null) - info.matchedUsername = matchedPlayer.Name; - - resp.content = Newtonsoft.Json.JsonConvert.SerializeObject(info); + Plugin.Main.forum.updateUser(currentSession.sessionUser); + if (bannercolor.Length == 7) + profile.bannerColor = bannercolor; + Plugin.Main.forum.updateUserProfile(profile); + } } - return resp; + aResp.success = aResp.errorCode == Manager.ErrorCode.NO_ERROR; + if (aResp.success) + aResp.destination = "usercp"; + + resp.content = Newtonsoft.Json.JsonConvert.SerializeObject(aResp); + return resp; } } @@ -737,7 +906,10 @@ namespace MessageBoard.Forum try { - var result = Plugin.Main.forum.authorizeUser(querySet["username"], querySet["password"], currentSession.sessionID); + string username = DNA.Text.TextEngine.Text(querySet["username"]); + string password = DNA.Text.TextEngine.Text(querySet["password"]); + + var result = Plugin.Main.forum.authorizeUser(username, password, currentSession.sessionID); aResp.success = result == Manager.ErrorCode.NO_ERROR; aResp.errorCode = result; aResp.destination = "home"; @@ -881,13 +1053,24 @@ namespace MessageBoard.Forum var thread = Plugin.Main.forum.getThread(Convert.ToInt32(querySet["id"])); if ((thread.threadCategory.permissions.Find(x => x.rankID == currentSession.sessionUser.ranking.id).actionable & Permission.Action.READ) != Permission.Action.READ) - throw new Exceptions.PermissionException("You cannot view this post"); + throw new Exceptions.PermissionException("User cannot view this post"); var replies = Plugin.Main.forum.getReplies(thread.id); resp.content = Newtonsoft.Json.JsonConvert.SerializeObject(new ThreadView(thread, replies)); aResp.success = true; } + + else if (querySet.Get("replyid") != null) + { + var thread = Plugin.Main.forum.getReply(Convert.ToInt32(querySet["replyid"])); + + //if ((thread.threadCategory.permissions.Find(x => x.rankID == currentSession.sessionUser.ranking.id).actionable & Permission.Action.READ) != Permission.Action.READ) + // throw new Exceptions.PermissionException("User cannot view this post"); + + resp.content = Newtonsoft.Json.JsonConvert.SerializeObject(thread); + aResp.success = true; + } } catch (FormatException) @@ -961,15 +1144,15 @@ namespace MessageBoard.Forum else { //fixsecurity - var markdownParser = new MarkdownDeep.Markdown(); - string markdownContent = markdownParser.Transform(querySet["content"]); - markdownContent = Uri.EscapeDataString(markdownContent); - string title = Uri.EscapeDataString(querySet["title"]); + var fmtr = new DNA.Text.BBCodeFormatter(); + string content = fmtr.Format(Uri.UnescapeDataString(querySet["content"])); + string title = DNA.Text.TextEngine.Text(Uri.UnescapeDataString(querySet["title"])); - if (thread.updateTitle(title) && thread.updateContent(markdownContent)) + if (thread.updateTitle(title) && thread.updateContent(content)) { aResp.errorCode = Plugin.Main.forum.updateThread(thread); aResp.success = aResp.errorCode == Manager.ErrorCode.NO_ERROR; + aResp.destination = "thread?id=" + thread.id; } else aResp.errorCode = Manager.ErrorCode.THREAD_EMPTYDATA; @@ -980,7 +1163,7 @@ namespace MessageBoard.Forum else if (querySet.Get("replyid") != null) { var reply = Plugin.Main.forum.getReply(Convert.ToInt32(querySet["replyid"])); - + if (currentSession.sessionUser.id == 0 || reply.author.id != currentSession.sessionUser.id && (reply.threadCategory.permissions.Find(x => x.rankID == currentSession.sessionUser.ranking.id).actionable & Permission.Action.MODIFY) != Permission.Action.MODIFY) throw new Exceptions.PermissionException("User cannot modify this reply"); @@ -992,6 +1175,40 @@ namespace MessageBoard.Forum aResp.destination = "thread?id=" + reply.threadid; } + else if (querySet.Get("content") != null) + { + if (querySet.Get("content") == null || querySet.Get("title") == null) + throw new Exceptions.ThreadException("Invalid update data"); + + if (querySet.Get("content").Length > Manager.CONTENT_MAXLENGTH) + { + aResp.errorCode = Manager.ErrorCode.THREAD_CONTENTTOOLONG; + } + + else if (querySet.Get("title").Length > Manager.TITLE_MAXLENGTH) + { + aResp.errorCode = Manager.ErrorCode.THREAD_TITLETOOLONG; + } + + else + { + int threadID = Convert.ToInt32(querySet["threadid"]); + //fixsecurity + var fmtr = new DNA.Text.BBCodeFormatter(); + string content = fmtr.Format(Uri.UnescapeDataString(querySet["content"])); + string title = DNA.Text.TextEngine.Text(Uri.UnescapeDataString(querySet["title"])); + + if (reply.updateTitle(title) && reply.updateContent(content)) + { + aResp.errorCode = Plugin.Main.forum.updateReply(reply); + aResp.success = aResp.errorCode == Manager.ErrorCode.NO_ERROR; + aResp.destination = "thread?id=" + threadID; + } + else + aResp.errorCode = Manager.ErrorCode.THREAD_EMPTYDATA; + } + } + } resp.content = Newtonsoft.Json.JsonConvert.SerializeObject(aResp); @@ -1043,15 +1260,14 @@ namespace MessageBoard.Forum if (querySet["content"].Length < Manager.CONTENT_MAXLENGTH && querySet["title"].Length <= Manager.TITLE_MAXLENGTH) { - var markdownParser = new MarkdownDeep.Markdown(); - string markdownContent = markdownParser.Transform(querySet["content"]); - markdownContent = Uri.EscapeDataString(markdownContent); - string title = Uri.EscapeDataString(querySet["title"]); + var fmtr = new DNA.Text.BBCodeFormatter(); + string content = fmtr.Format(Uri.UnescapeDataString(querySet["content"])); + string title = DNA.Text.TextEngine.Text(Uri.UnescapeDataString(querySet["title"])); if (querySet.Get("threadid") != null) { var replyThread = Plugin.Main.forum.getThread(Convert.ToInt32(querySet.Get("threadid"))); - var reply = new Post(title, replyThread.getID(), markdownContent, currentSession.sessionUser); + var reply = new Post(title, replyThread.getID(), content, currentSession.sessionUser); aResp.errorCode = Plugin.Main.forum.addPost(replyThread, reply); aResp.destination = String.Format("thread?id={0}", replyThread.id); @@ -1064,7 +1280,7 @@ namespace MessageBoard.Forum if ((threadCategory.permissions.Find(x => x.rankID == currentSession.sessionUser.ranking.id).actionable & Permission.Action.WRITE) == Permission.Action.WRITE) { - ForumThread newThread = new ForumThread(title, markdownContent, currentSession.sessionUser, threadCategory); + ForumThread newThread = new ForumThread(title, content, currentSession.sessionUser, threadCategory); aResp.errorCode = Plugin.Main.forum.addThread(newThread); aResp.destination = String.Format("category?id={0}", threadCategory.id); @@ -1118,6 +1334,7 @@ namespace MessageBoard.Forum if (s.sessionUser.ranking.id > 0 && (DateTime.Now - s.sessionStartTime).TotalMinutes < 5 && s.sessionUser.username != "Guest") stats.onlineUsers.Add(s.sessionUser); } + stats.onlineUsers.OrderByDescending(x => x.ranking.equivalentRank); resp.content = Newtonsoft.Json.JsonConvert.SerializeObject(stats); return resp; diff --git a/MessageboardPlugin/MessageboardPlugin.csproj b/MessageboardPlugin/MessageboardPlugin.csproj index d1f080f60..decbd7f06 100644 --- a/MessageboardPlugin/MessageboardPlugin.csproj +++ b/MessageboardPlugin/MessageboardPlugin.csproj @@ -37,13 +37,6 @@ - - - {d51eeceb-438a-47da-870f-7d7b41bc24d6} - SharedLibrary - False - - @@ -58,11 +51,15 @@ + + ..\packages\CodeKicker.BBCode.5.0.0.0\lib\net35\CodeKicker.BBCode.dll + True + ..\packages\CryptSharp.1.2.0.1\lib\net35\CryptSharp.dll - - ..\packages\MarkdownDeep.NET.1.5\lib\.NetFramework 3.5\MarkdownDeep.dll + + ..\packages\DNA.Text.2.1.1.10633\lib\DNA.Text.dll True @@ -71,10 +68,16 @@ + + ..\SharedLibrary\bin\Release\System.Data.SQLite.dll + False + + + @@ -99,6 +102,19 @@ PreserveNewest + + PreserveNewest + + + + + + + + {d51eeceb-438a-47da-870f-7d7b41bc24d6} + SharedLibrary + False + @@ -106,8 +122,10 @@ copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)Admin\bin\$(ConfigurationName)\plugins\MessageBoardPlugin.dll" xcopy /E /Y "$(TargetDir)forum" "$(SolutionDir)Admin\bin\$(ConfigurationName)\forum" -copy /Y "$(TargetDir)MarkdownDeep.dll" "$(SolutionDir)Admin\bin\$(ConfigurationName)\lib\MarkdownDeep.dll" +copy /Y "$(TargetDir)DNA.Text.dll" "$(SolutionDir)Admin\bin\$(ConfigurationName)\lib\DNA.Text.dll" copy /Y "$(TargetDir)CryptSharp.dll" "$(SolutionDir)Admin\bin\$(ConfigurationName)\lib\CryptSharp.dll" + +copy /Y "$(TargetDir)CodeKicker.BBcode.dll" "$(SolutionDir)Admin\bin\$(ConfigurationName)\lib\CodeKicker.BBcode.dll" copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)BUILD\plugins\"