Fixes
This commit is contained in:
parent
dc5c6801ed
commit
7b60d0948e
8
auth.js
8
auth.js
|
|
@ -20,7 +20,7 @@ var Logger = require("./logger.js");
|
||||||
exports.isRegistered = function(name) {
|
exports.isRegistered = function(name) {
|
||||||
var db = Database.getConnection();
|
var db = Database.getConnection();
|
||||||
if(!db) {
|
if(!db) {
|
||||||
return true;
|
throw "Database failure";
|
||||||
}
|
}
|
||||||
var query = Database.createQuery(
|
var query = Database.createQuery(
|
||||||
"SELECT * FROM `registrations` WHERE uname=?",
|
"SELECT * FROM `registrations` WHERE uname=?",
|
||||||
|
|
@ -90,7 +90,7 @@ exports.login = function(name, pw, session) {
|
||||||
exports.loginPassword = function(name, pw) {
|
exports.loginPassword = function(name, pw) {
|
||||||
var db = Database.getConnection();
|
var db = Database.getConnection();
|
||||||
if(!db) {
|
if(!db) {
|
||||||
return false;
|
throw "Database failure";
|
||||||
}
|
}
|
||||||
var query = Database.createQuery(
|
var query = Database.createQuery(
|
||||||
"SELECT * FROM `registrations` WHERE uname=?",
|
"SELECT * FROM `registrations` WHERE uname=?",
|
||||||
|
|
@ -140,7 +140,7 @@ exports.createSession = function(name) {
|
||||||
var hash = hashlib.sha256(salt + name);
|
var hash = hashlib.sha256(salt + name);
|
||||||
var db = Database.getConnection();
|
var db = Database.getConnection();
|
||||||
if(!db) {
|
if(!db) {
|
||||||
return false;
|
throw "Database failure";
|
||||||
}
|
}
|
||||||
var query = Database.createQuery(
|
var query = Database.createQuery(
|
||||||
["UPDATE `registrations` SET ",
|
["UPDATE `registrations` SET ",
|
||||||
|
|
@ -156,7 +156,7 @@ exports.createSession = function(name) {
|
||||||
exports.loginSession = function(name, hash) {
|
exports.loginSession = function(name, hash) {
|
||||||
var db = Database.getConnection();
|
var db = Database.getConnection();
|
||||||
if(!db) {
|
if(!db) {
|
||||||
return false;
|
throw "Database failure";
|
||||||
}
|
}
|
||||||
var query = Database.createQuery(
|
var query = Database.createQuery(
|
||||||
"SELECT * FROM `registrations` WHERE `uname`=?",
|
"SELECT * FROM `registrations` WHERE `uname`=?",
|
||||||
|
|
|
||||||
11
channel.js
11
channel.js
|
|
@ -138,8 +138,15 @@ Channel.prototype.hasPermission = function(user, key) {
|
||||||
Channel.prototype.loadDump = function() {
|
Channel.prototype.loadDump = function() {
|
||||||
fs.readFile("chandump/" + this.name, function(err, data) {
|
fs.readFile("chandump/" + this.name, function(err, data) {
|
||||||
if(err) {
|
if(err) {
|
||||||
Logger.errlog.log("Failed to open channel dump " + this.name);
|
if(err.code == "ENOENT") {
|
||||||
Logger.errlog.log(err);
|
Logger.errlog.log("WARN: missing dump for " + this.name);
|
||||||
|
this.initialized = true;
|
||||||
|
this.saveDump();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Logger.errlog.log("Failed to open channel dump " + this.name);
|
||||||
|
Logger.errlog.log(err);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ function getConnection() {
|
||||||
db = mysql.createConnectionSync();
|
db = mysql.createConnectionSync();
|
||||||
db.connectSync(SERVER, USER, PASSWORD, DATABASE);
|
db.connectSync(SERVER, USER, PASSWORD, DATABASE);
|
||||||
if(!db.connectedSync()) {
|
if(!db.connectedSync()) {
|
||||||
//Logger.errlog.log("DB connection failed");
|
Logger.errlog.log("DB connection failed");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(CONFIG.DEBUG) {
|
if(CONFIG.DEBUG) {
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,7 @@ function newConnection(req, res) {
|
||||||
exports.newConnection = newConnection;
|
exports.newConnection = newConnection;
|
||||||
|
|
||||||
function msgReceived(req, res) {
|
function msgReceived(req, res) {
|
||||||
|
res.callback = req.query.callback;
|
||||||
var h = req.params.hash;
|
var h = req.params.hash;
|
||||||
if(h in clients && clients[h] != null) {
|
if(h in clients && clients[h] != null) {
|
||||||
var str = req.params.str;
|
var str = req.params.str;
|
||||||
|
|
|
||||||
132
user.js
132
user.js
|
|
@ -541,73 +541,89 @@ User.prototype.login = function(name, pw, session) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Sorry bud, can't take that name
|
try {
|
||||||
if(Auth.isRegistered(name)) {
|
// Sorry bud, can't take that name
|
||||||
this.socket.emit("login", {
|
if(Auth.isRegistered(name)) {
|
||||||
success: false,
|
this.socket.emit("login", {
|
||||||
error: "That username is already taken"
|
success: false,
|
||||||
});
|
error: "That username is already taken"
|
||||||
return false;
|
});
|
||||||
}
|
return false;
|
||||||
// YOUR ARGUMENT IS INVALID
|
|
||||||
else if(!Auth.validateName(name)) {
|
|
||||||
this.socket.emit("login", {
|
|
||||||
success: false,
|
|
||||||
error: "Invalid username. Usernames must be 1-20 characters long and consist only of alphanumeric characters and underscores"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
lastguestlogin[this.ip] = Date.now();
|
|
||||||
this.rank = Rank.Guest;
|
|
||||||
Logger.syslog.log(this.ip + " signed in as " + name);
|
|
||||||
Database.recordVisit(this.ip, name);
|
|
||||||
this.name = name;
|
|
||||||
this.loggedIn = false;
|
|
||||||
this.socket.emit("login", {
|
|
||||||
success: true,
|
|
||||||
name: name
|
|
||||||
});
|
|
||||||
this.socket.emit("rank", this.rank);
|
|
||||||
if(this.channel != null) {
|
|
||||||
this.channel.logger.log(this.ip + " signed in as " + name);
|
|
||||||
this.channel.broadcastNewUser(this);
|
|
||||||
}
|
}
|
||||||
|
// YOUR ARGUMENT IS INVALID
|
||||||
|
else if(!Auth.validateName(name)) {
|
||||||
|
this.socket.emit("login", {
|
||||||
|
success: false,
|
||||||
|
error: "Invalid username. Usernames must be 1-20 characters long and consist only of alphanumeric characters and underscores"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
lastguestlogin[this.ip] = Date.now();
|
||||||
|
this.rank = Rank.Guest;
|
||||||
|
Logger.syslog.log(this.ip + " signed in as " + name);
|
||||||
|
Database.recordVisit(this.ip, name);
|
||||||
|
this.name = name;
|
||||||
|
this.loggedIn = false;
|
||||||
|
this.socket.emit("login", {
|
||||||
|
success: true,
|
||||||
|
name: name
|
||||||
|
});
|
||||||
|
this.socket.emit("rank", this.rank);
|
||||||
|
if(this.channel != null) {
|
||||||
|
this.channel.logger.log(this.ip + " signed in as " + name);
|
||||||
|
this.channel.broadcastNewUser(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
this.socket.emit("login", {
|
||||||
|
success: false,
|
||||||
|
error: e
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var row;
|
try {
|
||||||
if((row = Auth.login(name, pw, session))) {
|
var row;
|
||||||
this.loggedIn = true;
|
if((row = Auth.login(name, pw, session))) {
|
||||||
this.socket.emit("login", {
|
this.loggedIn = true;
|
||||||
success: true,
|
this.socket.emit("login", {
|
||||||
session: row.session_hash,
|
success: true,
|
||||||
name: name
|
session: row.session_hash,
|
||||||
});
|
name: name
|
||||||
Logger.syslog.log(this.ip + " logged in as " + name);
|
});
|
||||||
Database.recordVisit(this.ip, name);
|
Logger.syslog.log(this.ip + " logged in as " + name);
|
||||||
this.profile = {
|
Database.recordVisit(this.ip, name);
|
||||||
image: row.profile_image,
|
this.profile = {
|
||||||
text: row.profile_text
|
image: row.profile_image,
|
||||||
};
|
text: row.profile_text
|
||||||
var chanrank = (this.channel != null) ? this.channel.getRank(name)
|
};
|
||||||
: Rank.Guest;
|
var chanrank = (this.channel != null) ? this.channel.getRank(name)
|
||||||
var rank = (chanrank > row.global_rank) ? chanrank
|
: Rank.Guest;
|
||||||
: row.global_rank;
|
var rank = (chanrank > row.global_rank) ? chanrank
|
||||||
this.rank = (this.rank > rank) ? this.rank : rank;
|
: row.global_rank;
|
||||||
this.socket.emit("rank", this.rank);
|
this.rank = (this.rank > rank) ? this.rank : rank;
|
||||||
this.name = name;
|
this.socket.emit("rank", this.rank);
|
||||||
if(this.channel != null) {
|
this.name = name;
|
||||||
this.channel.logger.log(this.ip + " logged in as " + name);
|
if(this.channel != null) {
|
||||||
this.channel.broadcastNewUser(this);
|
this.channel.logger.log(this.ip + " logged in as " + name);
|
||||||
|
this.channel.broadcastNewUser(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Wrong password
|
||||||
|
else {
|
||||||
|
this.socket.emit("login", {
|
||||||
|
success: false,
|
||||||
|
error: "Invalid session"
|
||||||
|
});
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Wrong password
|
catch(e) {
|
||||||
else {
|
|
||||||
this.socket.emit("login", {
|
this.socket.emit("login", {
|
||||||
success: false,
|
success: false,
|
||||||
error: "Invalid session"
|
error: e
|
||||||
});
|
});
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<div class="">
|
<div class="">
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li><a href="index.html">Home</a></li>
|
<li><a href="index.html">Home</a></li>
|
||||||
<li><a href="help.html">Help</a></li>
|
<li><a href="https://github.com/calzoneman/sync/wiki/Beginner%27s-Guide-and-FAQ" target="_blank">Help</a></li>
|
||||||
<li class="active"><a href="account.html">Account</a></li>
|
<li class="active"><a href="account.html">Account</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,8 @@ The above copyright notice and this permission notice shall be included in all c
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var uname = readCookie("sync_uname") || "";
|
var uname = readCookie("cytube_uname") || "";
|
||||||
var session = readCookie("sync_session") || "";
|
var session = readCookie("cytube_session") || "";
|
||||||
var api = WEB_URL + "/api/json/";
|
var api = WEB_URL + "/api/json/";
|
||||||
var loggedin = false;
|
var loggedin = false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -356,9 +356,10 @@ Callbacks = {
|
||||||
|
|
||||||
banlist: function(entries) {
|
banlist: function(entries) {
|
||||||
var tbl = $("#banlist table");
|
var tbl = $("#banlist table");
|
||||||
// dumb hack because of jquery UI
|
// I originally added this check because of a race condition
|
||||||
// sortable turns tables and lists into a mess of race conditions
|
// Now it seems to work without but I don't trust it
|
||||||
if(!tbl.hasClass("table")) {
|
if(!tbl.hasClass("table")) {
|
||||||
|
console.log("thing");
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
Callbacks.banlist(entries);
|
Callbacks.banlist(entries);
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
@ -391,8 +392,8 @@ Callbacks = {
|
||||||
|
|
||||||
recentLogins: function(entries) {
|
recentLogins: function(entries) {
|
||||||
var tbl = $("#loginhistory table");
|
var tbl = $("#loginhistory table");
|
||||||
// dumb hack because of jquery UI
|
// I originally added this check because of a race condition
|
||||||
// sortable turns tables and lists into a mess of race conditions
|
// Now it seems to work without but I don't trust it
|
||||||
if(!tbl.hasClass("table")) {
|
if(!tbl.hasClass("table")) {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
Callbacks.recentLogins(entries);
|
Callbacks.recentLogins(entries);
|
||||||
|
|
@ -415,8 +416,10 @@ Callbacks = {
|
||||||
|
|
||||||
channelRanks: function(entries) {
|
channelRanks: function(entries) {
|
||||||
var tbl = $("#channelranks table");
|
var tbl = $("#channelranks table");
|
||||||
// Dammit jQuery UI
|
// I originally added this check because of a race condition
|
||||||
|
// Now it seems to work without but I don't trust it
|
||||||
if(!tbl.hasClass("table")) {
|
if(!tbl.hasClass("table")) {
|
||||||
|
console.log("thing");
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
Callbacks.channelRanks(entries);
|
Callbacks.channelRanks(entries);
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
@ -935,35 +938,8 @@ Callbacks = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
pl = [];
|
|
||||||
for(var i = 0; i < 10; i++) {
|
|
||||||
var m = {
|
|
||||||
title: "Test " + i,
|
|
||||||
type: "yt",
|
|
||||||
id: "test" + i,
|
|
||||||
seconds: 0,
|
|
||||||
duration: "00:00"
|
|
||||||
};
|
|
||||||
pl.push(m);
|
|
||||||
}
|
|
||||||
setTimeout(function() {
|
|
||||||
Callbacks.playlist(pl);
|
|
||||||
}, 1000);
|
|
||||||
*/
|
|
||||||
|
|
||||||
$.getScript(IO_URL+"/socket.io/socket.io.js", function() {
|
|
||||||
try {
|
|
||||||
socket = io.connect(IO_URL);
|
|
||||||
setupCallbacks();
|
|
||||||
}
|
|
||||||
catch(e) {
|
|
||||||
Callbacks.disconnect();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
setupCallbacks = function() {
|
setupCallbacks = function() {
|
||||||
|
console.log(socket);
|
||||||
for(var key in Callbacks) {
|
for(var key in Callbacks) {
|
||||||
(function(key) {
|
(function(key) {
|
||||||
socket.on(key, function(data) {
|
socket.on(key, function(data) {
|
||||||
|
|
@ -973,3 +949,23 @@ setupCallbacks = function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(USEROPTS.altsocket) {
|
||||||
|
socket = new NotWebsocket();
|
||||||
|
setupCallbacks();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$.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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
var CL_VERSION = "2.0.0";
|
||||||
|
|
||||||
var CLIENT = {
|
var CLIENT = {
|
||||||
rank: -1,
|
rank: -1,
|
||||||
leader: false,
|
leader: false,
|
||||||
|
|
|
||||||
|
|
@ -11,3 +11,4 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||||
|
|
||||||
var IO_URL = "http://localhost:1337";
|
var IO_URL = "http://localhost:1337";
|
||||||
var WEB_URL = "http://localhost:8080";
|
var WEB_URL = "http://localhost:8080";
|
||||||
|
var NO_WEBSOCKETS = false;
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
|
||||||
var NotWebsocket = function() {
|
var NotWebsocket = function() {
|
||||||
this.connected = false;
|
this.connected = false;
|
||||||
this.polltmr = false;
|
this.polltmr = false;
|
||||||
$.getJSON(WEB_URL + "/nws/connect", function(data) {
|
$.getJSON(WEB_URL + "/nws/connect?callback=?", function(data) {
|
||||||
this.hash = data;
|
this.hash = data;
|
||||||
this.connected = true;
|
this.connected = true;
|
||||||
this.recv(["connect", undefined]);
|
this.recv(["connect", undefined]);
|
||||||
|
|
@ -76,7 +76,7 @@ NotWebsocket.prototype.emit = function(msg, data) {
|
||||||
}
|
}
|
||||||
var pkt = [msg, data];
|
var pkt = [msg, data];
|
||||||
var str = escape(JSON.stringify(pkt)).replace(/\//g, "%2F");
|
var str = escape(JSON.stringify(pkt)).replace(/\//g, "%2F");
|
||||||
$.getJSON(WEB_URL+"/nws/"+this.hash+"/"+str, function() {
|
$.getJSON(WEB_URL+"/nws/"+this.hash+"/"+str+"?callback=?", function() {
|
||||||
// Poll more quickly because sending a packet usually means
|
// Poll more quickly because sending a packet usually means
|
||||||
// expecting some data to come back
|
// expecting some data to come back
|
||||||
this.pollint = 100;
|
this.pollint = 100;
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ $("#chatline").keydown(function(ev) {
|
||||||
msg: msg
|
msg: msg
|
||||||
});
|
});
|
||||||
CHATHIST.push($("#chatline").val());
|
CHATHIST.push($("#chatline").val());
|
||||||
CHATLISTIDX = CHATHIST.length;
|
CHATHISTIDX = CHATHIST.length;
|
||||||
$("#chatline").val("");
|
$("#chatline").val("");
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
@ -326,3 +326,8 @@ else {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* oh internet explorer, how I hate thee */
|
||||||
|
$(":input:not(textarea)").keypress(function(ev) {
|
||||||
|
return ev.keyCode != 13;
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -111,8 +111,6 @@ function addUserDropdown(entry, name) {
|
||||||
|
|
||||||
$("<strong/>").text(name).appendTo(menu);
|
$("<strong/>").text(name).appendTo(menu);
|
||||||
$("<br/>").appendTo(menu);
|
$("<br/>").appendTo(menu);
|
||||||
if(CLIENT.rank >= 2)
|
|
||||||
$("<span/>").addClass("user-aliases").appendTo(menu);
|
|
||||||
if(hasPermission("kick")) {
|
if(hasPermission("kick")) {
|
||||||
$("<button/>").addClass("btn btn-mini btn-block")
|
$("<button/>").addClass("btn btn-mini btn-block")
|
||||||
.text("Kick")
|
.text("Kick")
|
||||||
|
|
@ -164,8 +162,6 @@ function addUserDropdown(entry, name) {
|
||||||
entry.contextmenu(function(ev) {
|
entry.contextmenu(function(ev) {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
if(menu.css("display") == "none") {
|
if(menu.css("display") == "none") {
|
||||||
menu.find(".user-aliases")
|
|
||||||
.text("Aliases: " + entry.data("aliases"));
|
|
||||||
menu.show();
|
menu.show();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -476,7 +472,7 @@ function applyOpts() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(USEROPTS.altsocket) {
|
if(USEROPTS.altsocket) {
|
||||||
if(socket)
|
if(socket && socket.disconnect)
|
||||||
socket.disconnect();
|
socket.disconnect();
|
||||||
socket = new NotWebsocket();
|
socket = new NotWebsocket();
|
||||||
setupCallbacks();
|
setupCallbacks();
|
||||||
|
|
@ -649,6 +645,8 @@ function hasPermission(key) {
|
||||||
|
|
||||||
function handlePermissionChange() {
|
function handlePermissionChange() {
|
||||||
function setVisible(selector, bool) {
|
function setVisible(selector, bool) {
|
||||||
|
// I originally added this check because of a race condition
|
||||||
|
// Now it seems to work without but I don't trust it
|
||||||
if($(selector) && $(selector).attr("id") != selector.substring(1)) {
|
if($(selector) && $(selector).attr("id") != selector.substring(1)) {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
setVisible(selector, bool);
|
setVisible(selector, bool);
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,8 @@
|
||||||
<a class="brand" href="index.html">CyTube</a>
|
<a class="brand" href="index.html">CyTube</a>
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li class="active"><a href="index.html">Home</a></li>
|
<li class="active"><a href="index.html">Home</a></li>
|
||||||
<li><a href="help.html">Help</a></li>
|
<li><a href="https://github.com/calzoneman/sync/wiki/Beginner%27s-Guide-and-FAQ" target="_blank">Help</a></li>
|
||||||
<li><a href="account.html">Account</a></li>
|
<li><a href="account.html" target="_blank">Account</a></li>
|
||||||
<li><a href="javascript:void(0)" id="optlink">Options</a></li>
|
<li><a href="javascript:void(0)" id="optlink">Options</a></li>
|
||||||
<li><a href="javascript:void(0)" id="chatonly">Chat Only</a></li>
|
<li><a href="javascript:void(0)" id="chatonly">Chat Only</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
@ -200,10 +200,10 @@
|
||||||
<script src="./assets/js/data.js"></script>
|
<script src="./assets/js/data.js"></script>
|
||||||
<script src="./assets/js/iourl.js"></script>
|
<script src="./assets/js/iourl.js"></script>
|
||||||
<script src="./assets/js/player.js"></script>
|
<script src="./assets/js/player.js"></script>
|
||||||
|
<script src="./assets/js/notwebsocket.js"></script>
|
||||||
<script src="./assets/js/util.js"></script>
|
<script src="./assets/js/util.js"></script>
|
||||||
<script src="./assets/js/ui.js"></script>
|
<script src="./assets/js/ui.js"></script>
|
||||||
<script src="./assets/js/callbacks.js"></script>
|
<script src="./assets/js/callbacks.js"></script>
|
||||||
<script src="./assets/js/notwebsocket.js"></script>
|
|
||||||
<!-- APIs -->
|
<!-- APIs -->
|
||||||
<script src="http://api.dmcdn.net/all.js"></script>
|
<script src="http://api.dmcdn.net/all.js"></script>
|
||||||
<script src="http://jwpsrv.com/library/QouFCLBMEeKC+CIACpYGxA.js"></script>
|
<script src="http://jwpsrv.com/library/QouFCLBMEeKC+CIACpYGxA.js"></script>
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
<div class="">
|
<div class="">
|
||||||
<ul class="nav">
|
<ul class="nav">
|
||||||
<li class="active"><a href="index.html">Home</a></li>
|
<li class="active"><a href="index.html">Home</a></li>
|
||||||
<li><a href="help.html">Help</a></li>
|
<li><a href="https://github.com/calzoneman/sync/wiki/Beginner%27s-Guide-and-FAQ" target="_blank">Help</a></li>
|
||||||
<li><a href="account.html">Account</a></li>
|
<li><a href="account.html">Account</a></li>
|
||||||
<li><a href="javascript:void(0)" id="optlink">Options</a></li>
|
<li><a href="javascript:void(0)" id="optlink">Options</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue