From 7bb38ec8a5574e9153b19ff61700a696d3c9537f Mon Sep 17 00:00:00 2001 From: calzoneman Date: Thu, 20 Jun 2013 19:45:21 -0400 Subject: [PATCH] Work on ACP improvements --- user.js | 8 ++ www/acp.html | 287 +++++++++++++++---------------------------- www/assets/js/acp.js | 220 +++++++++++++++++++++++++++++++++ 3 files changed, 325 insertions(+), 190 deletions(-) create mode 100644 www/assets/js/acp.js diff --git a/user.js b/user.js index 810c5dd9..6191d1d1 100644 --- a/user.js +++ b/user.js @@ -17,6 +17,7 @@ var Server = require("./server.js"); var Database = require("./database.js"); var Logger = require("./logger.js"); var Config = require("./config.js"); +var ACP = require("./acp"); // Represents a client connected via socket.io var User = function(socket, ip) { @@ -24,6 +25,7 @@ var User = function(socket, ip) { this.socket = socket; this.loggedIn = false; this.rank = Rank.Anonymous; + this.global_rank = Rank.Anonymous; this.channel = null; this.name = ""; this.meta = { @@ -514,6 +516,11 @@ User.prototype.initCallbacks = function() { pllist: list, }); }.bind(this)); + + this.socket.on("acp-init", function() { + if(this.global_rank >= Rank.Siteadmin) + ACP.init(this); + }.bind(this)); } var lastguestlogin = {}; @@ -603,6 +610,7 @@ User.prototype.login = function(name, pw, session) { var rank = (chanrank > row.global_rank) ? chanrank : row.global_rank; this.rank = (this.rank > rank) ? this.rank : rank; + this.global_rank = row.global_rank; this.socket.emit("rank", this.rank); this.name = name; if(this.channel != null) { diff --git a/www/acp.html b/www/acp.html index dd4de0a4..19b4f7da 100644 --- a/www/acp.html +++ b/www/acp.html @@ -13,13 +13,6 @@ body { padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */ } - .loginform { - margin: 100px auto 20px; - padding: 19px 29px 29px; - border-radius: 5px 5px 5px 5px; - border: 1px solid #dedede; - max-width: 300px; - } #log { max-height: 500px; @@ -39,9 +32,14 @@
+ +
@@ -49,21 +47,24 @@
- -
-
+ +
+

Log Viewer

@@ -75,25 +76,83 @@

             
-
-

Password Reset

-
-
- - +
+

Current Announcement

+

New Announcement

+ +
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
-
-
-
+

Global Bans

- +
- - - + + + + + +
IPReasonRemoveIP AddressNote
+

Add global ban

+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+

Users

+
+ + +
+ + + + + + + +
UIDNameGlobal RankEmailPassword Reset
@@ -120,160 +179,8 @@ - + + + diff --git a/www/assets/js/acp.js b/www/assets/js/acp.js new file mode 100644 index 00000000..f03a667e --- /dev/null +++ b/www/assets/js/acp.js @@ -0,0 +1,220 @@ +var BASE = WEB_URL + "/api/json/"; +var AUTH = ""; + +/* init socket connection */ +$.getScript(IO_URL+"/socket.io/socket.io.js", function() { + try { + if(NO_WEBSOCKETS) { + var i = io.transports.indexOf("websocket"); + if(i >= 0) + io.transports.splice(i, 1); + } + socket = io.connect(IO_URL); + setupCallbacks(); + } + catch(e) { + Callbacks.disconnect(); + } +}); +$("#login").click(showLoginMenu); +$("#logout").click(function() { + eraseCookie("cytube_uname"); + eraseCookie("cytube_session"); + document.location.reload(true); +}); + +$("#panels .span12").each(function() { + $(this).hide(); +}); + +function menuHandler(liselect, panelselect) { + $(liselect).click(function() { + $("#panels .span12").each(function() { + $(this).hide(); + }); + $(panelselect).show(); + $("#menudd_title").text($(liselect).text()); + }); +} + +menuHandler("#show_logview", "#logview"); +menuHandler("#show_announce", "#announcepanel"); +menuHandler("#show_gbans", "#gbanpanel"); +menuHandler("#show_userlookup", "#userlookup"); + +function getSyslog() { + $.ajax(WEB_URL+"/api/plain/readlog?type=sys&"+AUTH).done(function(data) { + $("#log").text(data); + }); +} +$("#syslog").click(getSyslog); +function getErrlog() { + $.ajax(WEB_URL+"/api/plain/readlog?type=err&"+AUTH).done(function(data) { + $("#log").text(data); + }); +} +$("#errlog").click(getErrlog); +function getChanlog() { + var chan = $("#channame").val(); + $.ajax(WEB_URL+"/api/plain/readlog?type=channel&channel="+chan+"&"+AUTH).done(function(data) { + $("#log").text(data); + }); +} +$("#chanlog").click(getChanlog); +$("#channame").keydown(function(ev) { + if(ev.keyCode == 13) { + getChanlog(); + } +}); + +$("#announce_submit").click(function() { + socket.emit("acp-announce", { + title: $("#announce_title").val(), + text: $("#announce_text").val() + }); + $("#announce_title").val(""), + $("#announce_text").val("") +}); + +$("#gban_submit").click(function() { + socket.emit("acp-global-ban", { + ip: $("#gban_ip").val(), + note: $("#gban_note").val() + }); + + $("#gban_ip").val(""); + $("#gban_note").val(""); +}); + +$("#userlookup_submit").click(function() { + socket.emit("acp-lookup-user", $("#userlookup_name").val()); +}); + +function setupCallbacks() { + socket.on("connect", function() { + if(NAME && SESSION) { + socket.emit("login", { + name: NAME, + session: SESSION + }); + } + }); + socket.on("login", function(data) { + if(!data.success) { + if(data.error != "Invalid session") { + alert(data.error); + } + } + else { + $("#welcome").text("Logged in as " + data.name); + $("#loginform").css("display", "none"); + $("#logoutform").css("display", ""); + $("#loggedin").css("display", ""); + SESSION = data.session || ""; + CLIENT.name = data.name; + CLIENT.logged_in = true; + socket.emit("acp-init"); + if(SESSION) { + AUTH = "name=" + CLIENT.name + "&session=" + SESSION; + createCookie("cytube_uname", CLIENT.name, 7); + createCookie("cytube_session", SESSION, 7); + } + } + }); + + socket.on("rank", function(data) { + CLIENT.rank = data; + }); + + socket.on("announcement", function(data) { + var al = makeAlert(data.title, data.text) + .insertAfter($("#announce_current_h3")); + al.find(".close").click(function() { + socket.emit("acp-announce-clear"); + }); + }); + + socket.on("acp-global-banlist", function(data) { + $("#gbanpanel tbody").remove(); + for(var ip in data) { + var tr = $("").appendTo($("#gbanpanel table")); + (function(ip, note) { + $("