add comment cleanup and add globals

This commit is contained in:
Alf Hammerseth
2019-11-16 21:13:45 +01:00
parent 54b745ec68
commit 33e6220e43
31 changed files with 4480 additions and 2552 deletions

4
.jshintrc Normal file
View File

@@ -0,0 +1,4 @@
{
"esversion": 6,
"moz": true
}

3970
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@
"description": "Zoff, the shared YouTube based radio services", "description": "Zoff, the shared YouTube based radio services",
"main": "server/app.js", "main": "server/app.js",
"scripts": { "scripts": {
"start": "npm install --only=dev && npm install && $(npm bin)/gulp build && node server/app.js", "start": "npm install --only=dev && npm install && $(npm bin)/gulp build && node server/start.js",
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
}, },
"repository": { "repository": {
@@ -20,45 +20,50 @@
"url": "https://github.com/zoff-music/zoff/issues" "url": "https://github.com/zoff-music/zoff/issues"
}, },
"devDependencies": { "devDependencies": {
"gulp": "^4.0.0", "@babel/core": "^7.7.2",
"@babel/preset-env": "^7.7.1",
"@babel/register": "^7.7.0",
"@types/node": "^12.12.8",
"gulp": "^4.0.2",
"gulp-concat": "^2.6.1", "gulp-concat": "^2.6.1",
"gulp-uglify": "^3.0.2" "gulp-uglify": "^3.0.2"
}, },
"homepage": "https://github.com/zoff-music/zoff#readme", "homepage": "https://github.com/zoff-music/zoff#readme",
"dependencies": { "dependencies": {
"bad-words": "^1.6.5", "@types/mongodb": "^3.3.10",
"bad-words": "^3.0.3",
"bcrypt-nodejs": "0.0.3", "bcrypt-nodejs": "0.0.3",
"body-parser": "^1.18.3", "body-parser": "^1.19.0",
"color-thief-jimp": "^2.0.2", "color-thief-jimp": "^2.0.2",
"compression": "^1.7.3", "compression": "^1.7.4",
"connect-mongo": "^2.0.3", "connect-mongo": "^3.1.2",
"cookie-parser": "^1.4.4", "cookie-parser": "^1.4.4",
"cors": "^2.8.5", "cors": "^2.8.5",
"express": "^4.16.4", "express": "^4.17.1",
"express-handlebars": "^3.0.2", "express-handlebars": "^3.1.0",
"express-recaptcha": "^3.0.1", "express-recaptcha": "^5.0.1",
"express-session": "^1.15.6", "express-session": "^1.17.0",
"farmhash": "^3.0.0", "farmhash": "^3.0.0",
"feature-policy": "^0.2.0", "feature-policy": "^0.4.0",
"gulp-clean-css": "^4.2.0", "gulp-clean-css": "^4.2.0",
"gulp-sourcemaps": "^2.6.5", "gulp-sourcemaps": "^2.6.5",
"gulp-uglify-es": "^1.0.4", "gulp-uglify-es": "^2.0.0",
"helmet": "^3.21.1", "helmet": "^3.21.2",
"jimp": "^0.2.28", "jimp": "^0.8.5",
"mongodb": "^2.2.36", "mongodb": "^3.3.4",
"mongojs": "^2.6.0", "mongojs": "^3.1.0",
"mongojs-paginate": "^1.2.0", "mongojs-paginate": "^1.2.0",
"mongoose": "^5.4.18", "mongoose": "^5.7.11",
"mpromise": "^0.5.5", "mpromise": "^0.5.5",
"nodemailer": "^4.7.0", "nodemailer": "^6.3.1",
"passport": "^0.4.0", "passport": "^0.4.0",
"passport-local": "^1.0.0", "passport-local": "^1.0.0",
"redis": "^2.8.0", "redis": "^2.8.0",
"referrer-policy": "^1.1.0", "referrer-policy": "^1.2.0",
"request": "^2.88.0", "request": "^2.88.0",
"socket.io": "^2.2.0", "socket.io": "^2.3.0",
"socket.io-redis": "^5.2.0", "socket.io-redis": "^5.2.0",
"sticky-session": "^1.1.2", "sticky-session": "^1.1.2",
"uniqid": "5.0.3" "uniqid": "5.1.0"
} }
} }

View File

@@ -1,26 +1,25 @@
var cluster = require("cluster"), var cluster = require("cluster"),
net = require("net"), net = require("net"),
path = require("path"), path = require("path"),
//publicPath = path.join(__dirname, 'public'),
http = require("http"), http = require("http"),
port = 8080, port = 8080,
farmhash = require("farmhash"), farmhash = require("farmhash"),
uniqid = require("uniqid"), uniqid = require("uniqid"),
num_processes = require("os").cpus().length; num_processes = require("os").cpus().length;
publicPath = path.join(__dirname, "public");
pathThumbnails = __dirname;
try { try {
var redis = require("redis"); var redis = require("redis");
var client = redis.createClient({ host: "localhost", port: 6379 }); var client = redis.createClient({
client.on("error", function(err) { host: "localhost",
port: 6379
});
client.on("error", function (err) {
console.log("Couldn't connect to redis-server, assuming non-clustered run"); console.log("Couldn't connect to redis-server, assuming non-clustered run");
num_processes = 1; num_processes = 1;
startSingle(false, false); startSingle(false, false);
client.quit(); client.quit();
}); });
client.on("connect", function() { client.on("connect", function () {
startClustered(true); startClustered(true);
client.quit(); client.quit();
}); });
@@ -34,9 +33,9 @@ function startClustered(redis_enabled) {
//Found https://stackoverflow.com/questions/40885592/use-node-js-cluster-with-socket-io-chat-application //Found https://stackoverflow.com/questions/40885592/use-node-js-cluster-with-socket-io-chat-application
if (cluster.isMaster) { if (cluster.isMaster) {
var workers = []; var workers = [];
var spawn = function(i) { var spawn = function (i) {
workers[i] = cluster.fork(); workers[i] = cluster.fork();
workers[i].on("exit", function(code, signal) { workers[i].on("exit", function (code, signal) {
if (code == 1) { if (code == 1) {
process.exit(1); process.exit(1);
return; return;
@@ -50,8 +49,7 @@ function startClustered(redis_enabled) {
spawn(i); spawn(i);
} }
var worker_index = function(ip, len) { var worker_index = function (ip, len) {
//console.log(ip);
var s = ""; var s = "";
if (ip !== undefined) { if (ip !== undefined) {
return farmhash.fingerprint32(ip) % len; return farmhash.fingerprint32(ip) % len;
@@ -66,11 +64,15 @@ function startClustered(redis_enabled) {
}; };
var server = net var server = net
.createServer({ pauseOnConnect: true }, function(connection, a) { .createServer({
var worker = pauseOnConnect: true
workers[worker_index(connection.address().address, num_processes)]; },
worker.send("sticky-session:connection", connection); function (connection, a) {
}) var worker =
workers[worker_index(connection.address().address, num_processes)];
worker.send("sticky-session:connection", connection);
}
)
.listen(port); .listen(port);
} else { } else {
startSingle(true, redis_enabled); startSingle(true, redis_enabled);
@@ -112,14 +114,19 @@ function startSingle(clustered, redis_enabled) {
if (redis_enabled) { if (redis_enabled) {
var redis = require("socket.io-redis"); var redis = require("socket.io-redis");
try { try {
socketIO.adapter(redis({ host: "localhost", port: 6379 })); socketIO.adapter(
redis({
host: "localhost",
port: 6379
})
);
} catch (e) { } catch (e) {
console.log("No redis-server to connect to.."); console.log("No redis-server to connect to..");
} }
} }
socketIO.listen(server); socketIO.listen(server);
process.on("message", function(message, connection) { process.on("message", function (message, connection) {
if (message !== "sticky-session:connection") { if (message !== "sticky-session:connection") {
return; return;
} }
@@ -136,12 +143,12 @@ function routingFunction(req, res, next) {
var client = require("./apps/client.js"); var client = require("./apps/client.js");
var admin = require("./apps/admin.js"); var admin = require("./apps/admin.js");
try { try {
var url = req.headers["x-forwarded-host"] var url = req.headers["x-forwarded-host"] ?
? req.headers["x-forwarded-host"] req.headers["x-forwarded-host"] :
: req.headers.host.split(":")[0]; req.headers.host.split(":")[0];
var subdomain = req.headers["x-forwarded-host"] var subdomain = req.headers["x-forwarded-host"] ?
? req.headers["x-forwarded-host"].split(".") req.headers["x-forwarded-host"].split(".") :
: req.headers.host.split(":")[0].split("."); req.headers.host.split(":")[0].split(".");
if (subdomain.length > 1 && subdomain[0] == "admin") { if (subdomain.length > 1 && subdomain[0] == "admin") {
admin(req, res, next); admin(req, res, next);
@@ -154,4 +161,4 @@ function routingFunction(req, res, next) {
res.write("Bad request"); //write a response to the client res.write("Bad request"); //write a response to the client
res.end(); //end the response res.end(); //end the response
} }
} }

View File

@@ -1,8 +1,11 @@
var express = require("express"); var express = require("express");
var app = express(); var app = express();
const path = require("path"); import {
const publicPath = path.join(__dirname + "", "../public"); publicPath,
pathThumbnails
} from "../settings/globals";
var exphbs = require("express-handlebars"); var exphbs = require("express-handlebars");
var hbs = exphbs.create({ var hbs = exphbs.create({
defaultLayout: publicPath + "/layouts/admin/main", defaultLayout: publicPath + "/layouts/admin/main",
@@ -11,12 +14,10 @@ var hbs = exphbs.create({
}); });
var passport = require("passport"); var passport = require("passport");
var mpromise = require("mpromise");
var LocalStrategy = require("passport-local").Strategy; var LocalStrategy = require("passport-local").Strategy;
var mongoose = require("mongoose"); var mongoose = require("mongoose");
var mongo_db_cred = require(pathThumbnails + "/config/mongo_config.js"); var mongo_db_cred = require(pathThumbnails + "/config/mongo_config.js");
var mongojs = require("mongojs"); var mongojs = require("mongojs");
var db = mongojs(mongo_db_cred.config);
var token_db = mongojs("tokens"); var token_db = mongojs("tokens");
var bodyParser = require("body-parser"); var bodyParser = require("body-parser");
var session = require("express-session"); var session = require("express-session");
@@ -30,7 +31,9 @@ mongoose.connect(url);
app.engine("handlebars", hbs.engine); app.engine("handlebars", hbs.engine);
app.set("view engine", "handlebars"); app.set("view engine", "handlebars");
app.use(compression({ filter: shouldCompress })); app.use(compression({
filter: shouldCompress
}));
function shouldCompress(req, res) { function shouldCompress(req, res) {
if (req.headers["x-no-compression"]) { if (req.headers["x-no-compression"]) {
@@ -44,7 +47,6 @@ function shouldCompress(req, res) {
app.set("trust proxy", "127.0.0.1"); app.set("trust proxy", "127.0.0.1");
var bodyParser = require("body-parser"); var bodyParser = require("body-parser");
var cookieParser = require("cookie-parser");
var referrerPolicy = require("referrer-policy"); var referrerPolicy = require("referrer-policy");
var helmet = require("helmet"); var helmet = require("helmet");
var featurePolicy = require("feature-policy"); var featurePolicy = require("feature-policy");
@@ -52,13 +54,11 @@ app.use(
featurePolicy({ featurePolicy({
features: { features: {
fullscreen: ["*"], fullscreen: ["*"],
//vibrate: ["'none'"],
payment: ["'none'"], payment: ["'none'"],
microphone: ["'none'"], microphone: ["'none'"],
camera: ["'none'"], camera: ["'none'"],
speaker: ["*"], speaker: ["*"],
syncXhr: ["'self'"] syncXhr: ["'self'"]
//notifications: ["'self'"]
} }
}) })
); );
@@ -67,7 +67,9 @@ app.use(
frameguard: false frameguard: false
}) })
); );
app.use(referrerPolicy({ policy: "origin-when-cross-origin" })); app.use(referrerPolicy({
policy: "origin-when-cross-origin"
}));
app.enable("view cache"); app.enable("view cache");
app.set("views", publicPath); app.set("views", publicPath);
app.use(bodyParser.json()); // to support JSON-encoded bodies app.use(bodyParser.json()); // to support JSON-encoded bodies
@@ -92,43 +94,47 @@ app.use(
app.use(passport.initialize()); app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions app.use(passport.session()); // persistent login sessions
//app.use('/assets', express.static(publicPath + '/assets'));
passport.serializeUser(function(user, done) { passport.serializeUser(function (user, done) {
done(null, user.id); done(null, user.id);
}); });
// used to deserialize the user // used to deserialize the user
passport.deserializeUser(function(id, done) { passport.deserializeUser(function (id, done) {
User.findById(id, function(err, user) { User.findById(id, function (err, user) {
done(err, user); done(err, user);
}); });
}); });
passport.use( passport.use(
"local-signup", "local-signup",
new LocalStrategy( new LocalStrategy({
{
// by default, local strategy uses username and password, we will override with username // by default, local strategy uses username and password, we will override with username
usernameField: "username", usernameField: "username",
passwordField: "password", passwordField: "password",
passReqToCallback: true // allows us to pass back the entire request to the callback passReqToCallback: true // allows us to pass back the entire request to the callback
}, },
function(req, username, password, done) { function (req, username, password, done) {
// asynchronous // asynchronous
// User.findOne wont fire unless data is sent back // User.findOne wont fire unless data is sent back
process.nextTick(function() { process.nextTick(function () {
// find a user whose username is the same as the forms username // find a user whose username is the same as the forms username
// we are checking to see if the user trying to login already exists // we are checking to see if the user trying to login already exists
var token = req.body.token; var token = req.body.token;
token_db token_db
.collection("tokens") .collection("tokens")
.find({ token: token }, function(err, docs) { .find({
token: token
}, function (err, docs) {
if (docs.length == 1) { if (docs.length == 1) {
token_db token_db
.collection("tokens") .collection("tokens")
.remove({ token: token }, function(err, docs) { .remove({
User.findOne({ username: username }, function(err, user) { token: token
}, function (err, docs) {
User.findOne({
username: username
}, function (err, user) {
// if there are any errors, return the error // if there are any errors, return the error
if (err) return done(err); if (err) return done(err);
@@ -145,7 +151,7 @@ passport.use(
newUser.password = newUser.generateHash(password); newUser.password = newUser.generateHash(password);
// save the user // save the user
newUser.save(function(err) { newUser.save(function (err) {
if (err) throw err; if (err) throw err;
return done(null, newUser); return done(null, newUser);
}); });
@@ -163,19 +169,20 @@ passport.use(
passport.use( passport.use(
"local-login", "local-login",
new LocalStrategy( new LocalStrategy({
{
// by default, local strategy uses username and password, we will override with email // by default, local strategy uses username and password, we will override with email
usernameField: "username", usernameField: "username",
passwordField: "password", passwordField: "password",
passReqToCallback: true // allows us to pass back the entire request to the callback passReqToCallback: true // allows us to pass back the entire request to the callback
}, },
function(req, username, password, done) { function (req, username, password, done) {
// callback with email and password from our form // callback with email and password from our form
// find a user whose email is the same as the forms email // find a user whose email is the same as the forms email
// we are checking to see if the user trying to login already exists // we are checking to see if the user trying to login already exists
User.findOne({ username: username }, function(err, user) { User.findOne({
username: username
}, function (err, user) {
// if there are any errors, return the error before anything else // if there are any errors, return the error before anything else
if (err) return done(err); if (err) return done(err);
@@ -211,7 +218,7 @@ app.post(
}) })
); );
app.use("/login", isLoggedInTryingToLogIn, function(req, res) { app.use("/login", isLoggedInTryingToLogIn, function (req, res) {
var data = { var data = {
where_get: "not_authenticated" where_get: "not_authenticated"
}; };
@@ -219,7 +226,7 @@ app.use("/login", isLoggedInTryingToLogIn, function(req, res) {
res.render("layouts/admin/not_authenticated", data); res.render("layouts/admin/not_authenticated", data);
}); });
app.use("/signup", isLoggedInTryingToLogIn, function(req, res) { app.use("/signup", isLoggedInTryingToLogIn, function (req, res) {
var data = { var data = {
where_get: "not_authenticated" where_get: "not_authenticated"
}; };
@@ -229,12 +236,12 @@ app.use("/signup", isLoggedInTryingToLogIn, function(req, res) {
app.use("/", api); app.use("/", api);
app.use("/logout", function(req, res) { app.use("/logout", function (req, res) {
req.logout(); req.logout();
res.redirect("/login"); res.redirect("/login");
}); });
app.use("/assets/admin/authenticated", function(req, res, next) { app.use("/assets/admin/authenticated", function (req, res, next) {
if (!req.isAuthenticated()) { if (!req.isAuthenticated()) {
res.sendStatus(403); res.sendStatus(403);
return; return;
@@ -244,7 +251,7 @@ app.use("/assets/admin/authenticated", function(req, res, next) {
app.use("/assets", express.static(publicPath + "/assets")); app.use("/assets", express.static(publicPath + "/assets"));
app.use("/", isLoggedIn, function(req, res) { app.use("/", isLoggedIn, function (req, res) {
var data = { var data = {
where_get: "authenticated", where_get: "authenticated",
year: new Date().getYear() + 1900 year: new Date().getYear() + 1900
@@ -265,6 +272,4 @@ function isLoggedIn(req, res, next) {
res.redirect("/login"); res.redirect("/login");
} }
//app.listen(default_port); module.exports = app;
module.exports = app;

View File

@@ -1,4 +1,8 @@
VERSION = require(pathThumbnails + "/VERSION.js"); import {
publicPath,
pathThumbnails,
} from "../settings/globals";
var secure = false; var secure = false;
var path = require("path"); var path = require("path");
try { try {
@@ -7,18 +11,9 @@ try {
"cert_config.js" "cert_config.js"
)); ));
var fs = require("fs"); var fs = require("fs");
var privateKey = fs.readFileSync(cert_config.privateKey).toString();
var certificate = fs.readFileSync(cert_config.certificate).toString();
var ca = fs.readFileSync(cert_config.ca).toString();
var credentials = {
key: privateKey,
cert: certificate,
ca: ca
};
secure = true; secure = true;
} catch (err) {} } catch (err) {}
var add = "";
var express = require("express"); var express = require("express");
var app = express(); var app = express();
var compression = require("compression"); var compression = require("compression");
@@ -31,21 +26,23 @@ var hbs = exphbs.create({
layoutsDir: publicPath + "/layouts/client", layoutsDir: publicPath + "/layouts/client",
partialsDir: publicPath + "/partials", partialsDir: publicPath + "/partials",
helpers: { helpers: {
if_equal: function(a, b, opts) { if_equal: function (a, b, opts) {
if (a == b) { if (a == b) {
return opts.fn(this); return opts.fn(this);
} else { } else {
return opts.inverse(this); return opts.inverse(this);
} }
}, },
decodeString: function(s) { decodeString: function (s) {
if (s == undefined) return s; if (s == undefined) return s;
return Functions.decodeChannelName(s); return Functions.decodeChannelName(s);
} }
} }
}); });
var uniqid = require("uniqid"); var uniqid = require("uniqid");
app.use(compression({ filter: shouldCompress })); app.use(compression({
filter: shouldCompress
}));
function shouldCompress(req, res) { function shouldCompress(req, res) {
if (req.headers["x-no-compression"]) { if (req.headers["x-no-compression"]) {
@@ -68,17 +65,16 @@ var cookieParser = require("cookie-parser");
var referrerPolicy = require("referrer-policy"); var referrerPolicy = require("referrer-policy");
var helmet = require("helmet"); var helmet = require("helmet");
var featurePolicy = require("feature-policy"); var featurePolicy = require("feature-policy");
app.use( app.use(
featurePolicy({ featurePolicy({
features: { features: {
fullscreen: ["*"], fullscreen: ["*"],
//vibrate: ["'none'"],
payment: ["'none'"], payment: ["'none'"],
microphone: ["'none'"], microphone: ["'none'"],
camera: ["'none'"], camera: ["'none'"],
speaker: ["*"], speaker: ["*"],
syncXhr: ["'self'"] syncXhr: ["'self'"]
//notifications: ["'self'"]
} }
}) })
); );
@@ -87,7 +83,9 @@ app.use(
frameguard: false frameguard: false
}) })
); );
app.use(referrerPolicy({ policy: "origin-when-cross-origin" })); app.use(referrerPolicy({
policy: "origin-when-cross-origin"
}));
app.use(bodyParser.json()); // to support JSON-encoded bodies app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use( app.use(
bodyParser.urlencoded({ bodyParser.urlencoded({
@@ -96,12 +94,9 @@ app.use(
}) })
); );
app.use(cookieParser()); app.use(cookieParser());
//app.set('json spaces', 2);
io = require("socket.io")({ io = require("socket.io")({
pingTimeout: 25000 pingTimeout: 25000
//path: '/zoff',
//"origins": ("https://zoff.me:443*,https://zoff.me:8080*,zoff.me:8080*,https://remote.zoff.me:443*,https://remote.zoff.me:8080*,https://fb.zoff.me:443*,https://fb.zoff.me:8080*,https://admin.zoff.me:443*,https://admin.zoff.me:8080*, http://localhost:8080*")});
}); });
var socketIO = require(pathThumbnails + "/handlers/io.js"); var socketIO = require(pathThumbnails + "/handlers/io.js");
@@ -116,12 +111,12 @@ var api = api_file.router;
api_file.sIO = app.socketIO; api_file.sIO = app.socketIO;
var ico_router = require(pathThumbnails + "/routing/client/icons_routing.js"); var ico_router = require(pathThumbnails + "/routing/client/icons_routing.js");
app.get("/robots.txt", function(req, res) { app.get("/robots.txt", function (req, res) {
res.type("text/plain"); res.type("text/plain");
res.send("User-agent: *\nAllow: /$\nDisallow: /"); res.send("User-agent: *\nAllow: /$\nDisallow: /");
}); });
app.use(function(req, res, next) { app.use(function (req, res, next) {
var cookie = req.cookies._uI; var cookie = req.cookies._uI;
var skipElements = [ var skipElements = [
"/_embed", "/_embed",
@@ -145,12 +140,6 @@ app.use(function(req, res, next) {
next(); next();
} else { } else {
if (cookie === undefined) { if (cookie === undefined) {
try {
//console.error((new Date), "originalUrl", req.originalUrl);
//console.error((new Date), "couldn't fetch cookie for some reason, maybe no cookie exists?", req.get('origin'), "couldn't fetch cookie for some reason, maybe no cookie exists?");
} catch (e) {
//console.error((new Date), "couldn't fetch origin");
}
var user_name = Functions.hash_pass( var user_name = Functions.hash_pass(
Functions.rndName(uniqid.time(), 15) Functions.rndName(uniqid.time(), 15)
); );
@@ -158,15 +147,12 @@ app.use(function(req, res, next) {
maxAge: 365 * 10000 * 3600000, maxAge: 365 * 10000 * 3600000,
httpOnly: true, httpOnly: true,
secure: secure secure: secure
//sameSite: true,
}); });
} else { } else {
//process.stderr.write((new Date), "couldn't fetch cookie for some reason, maybe no cookie exists?", req, "couldn't fetch cookie for some reason, maybe no cookie exists?");
res.cookie("_uI", cookie, { res.cookie("_uI", cookie, {
maxAge: 365 * 10000 * 3600000, maxAge: 365 * 10000 * 3600000,
httpOnly: true, httpOnly: true,
secure: secure secure: secure
//sameSite: true,
}); });
} }
res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Origin", "*");
@@ -179,7 +165,7 @@ app.use(function(req, res, next) {
} }
}); });
app.use("/service-worker.js", function(req, res) { app.use("/service-worker.js", function (req, res) {
res.sendFile(publicPath + "/service-worker.js"); res.sendFile(publicPath + "/service-worker.js");
}); });
@@ -187,21 +173,21 @@ app.use("/", ico_router);
app.use("/", api); app.use("/", api);
app.use("/", cors(), router); app.use("/", cors(), router);
app.use("/assets/js", function(req, res, next) { app.use("/assets/js", function (req, res, next) {
res.sendStatus(403); res.sendStatus(403);
return; return;
}); });
app.use("/assets/admin", function(req, res, next) { app.use("/assets/admin", function (req, res, next) {
res.sendStatus(403); res.sendStatus(403);
return; return;
}); });
app.use("/assets", express.static(publicPath + "/assets")); app.use("/assets", express.static(publicPath + "/assets"));
app.use(function(req, res, next) { app.use(function (req, res, next) {
res.status(404); res.status(404);
res.redirect("/404"); res.redirect("/404");
}); });
module.exports = app; module.exports = app;

View File

@@ -1,74 +1,52 @@
var path = require('path'); import {
var publicPath = path.join(__dirname, 'public'); pathThumbnail
var pathThumbnail = __dirname; } from "../settings/globals";
pathThumbnails = __dirname + "/../"; pathThumbnails = __dirname + "/../";
var time_regex = /P((([0-9]*\.?[0-9]*)Y)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)W)?(([0-9]*\.?[0-9]*)D)?)?(T(([0-9]*\.?[0-9]*)H)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)S)?)?/;
try {
var keys = require(path.join(__dirname, '../config/api_key.js'));
var key = keys.youtube;
var soundcloudKey = keys.soundcloud;
} catch(e) {
console.log("Error - missing file");
console.log("Seems you forgot to create the file api_key.js in /server/config/. Have a look at api_key.example.js.");
process.exit(1);
}
var Search = require(pathThumbnail + '/../handlers/search.js'); var Search = require(pathThumbnail + '/../handlers/search.js');
var request = require('request');
var db = require(pathThumbnail + '/../handlers/db.js'); var db = require(pathThumbnail + '/../handlers/db.js');
var currentList = 0;
var listNames = []; var listNames = [];
db.getCollectionNames(function(e, d) { db.getCollectionNames(function (e, d) {
for(var i = 0; i < d.length; i++) { for (var i = 0; i < d.length; i++) {
if(d[i].indexOf("_") < 0) { if (d[i].indexOf("_") < 0) {
if(d[i].length > 0) { if (d[i].length > 0) {
if(d[i].substring(0, 1) == "." || d[i].substring(d[i].length - 1) == ".") continue; if (d[i].substring(0, 1) == "." || d[i].substring(d[i].length - 1) == ".") continue;
} }
listNames.push(d[i]); listNames.push(d[i]);
} }
} }
console.log("Number of lists is " + listNames.length); console.log("Number of lists is " + listNames.length);
/*for(var i = 0; i < listNames.length; i++) {
getListItems(d[i]);
if(i > 1000) return;
}*/
recursivifyListLooping(listNames, 0); recursivifyListLooping(listNames, 0);
}); });
function filterFunction(el) {
return el != null &&
el != "" &&
el != undefined &&
el.trim() != ''
}
function recursivifyListLooping(listNames, i) { function recursivifyListLooping(listNames, i) {
if(i > listNames.length) { if (i > listNames.length) {
console.log("Done"); console.log("Done");
return; return;
} }
console.log("List " + i + " of " + listNames.length); console.log("List " + i + " of " + listNames.length);
getListItems(listNames, 0, function() { getListItems(listNames, 0, function () {
console.log("done"); console.log("done");
}); });
} }
function getListItems(arr, i, callback) { function getListItems(arr, i, callback) {
console.log("List " + i + " of " + listNames.length + " - " + arr[i]); console.log("List " + i + " of " + listNames.length + " - " + arr[i]);
if(i >= arr.length) { if (i >= arr.length) {
if(typeof(callback) == "function") callback(); if (typeof (callback) == "function") callback();
return; return;
} }
try { try {
db.collection(arr[i]).find(function(e, d) { db.collection(arr[i]).find(function (e, d) {
if(d.length > 0) { if (d.length > 0) {
Search.get_genres_list_recursive(d, arr[i], function(){ Search.get_genres_list_recursive(d, arr[i], function () {
getListItems(arr, i + 1, callback); getListItems(arr, i + 1, callback);
}); });
} else { } else {
getListItems(arr, i + 1, callback); getListItems(arr, i + 1, callback);
} }
}); });
} catch(e) { } catch (e) {
getListItems(arr, i + 1, callback); getListItems(arr, i + 1, callback);
} }
} }

View File

@@ -7,4 +7,4 @@ var mongo_config = {
expire: 86400, expire: 86400,
}; };
module.exports = mongo_config; module.exports = mongo_config;

View File

@@ -73,7 +73,6 @@ var toShowChannel = {
_id: 0, _id: 0,
tags: 1, tags: 1,
now_playing: 1, now_playing: 1,
type: 1,
source: 1, source: 1,
thumbnail: 1 thumbnail: 1
}; };

View File

@@ -1,3 +1,7 @@
import {
pathThumbnails
} from "../settings/globals";
var Functions = require(pathThumbnails + "/handlers/functions.js"); var Functions = require(pathThumbnails + "/handlers/functions.js");
var crypto = require("crypto"); var crypto = require("crypto");
var db = require(pathThumbnails + "/handlers/db.js"); var db = require(pathThumbnails + "/handlers/db.js");

View File

@@ -1,17 +1,20 @@
var path = require("path"); import { join } from "path";
import {
mongojs
} from 'mongojs';
try { try {
var mongo_config = require(path.join( var mongo_config = require(
path.join(__dirname, "../config/"), join(__dirname, "../config/mongo_config.js"),
"mongo_config.js" "mongo_config.js"
)); );
} catch (e) { } catch (e) {
console.log( console.log(
"(!) Missing file - /config/mongo_config.js. Have a look at /config/mongo_config.example.js. The server won't run without this existing." "(!) Missing file - /config/mongo_config.js. Have a look at /config/mongo_config.example.js. The server won't run without this existing."
); );
process.exit(1); process.exit(1);
} }
var mongojs = require("mongojs"); const db = mongojs("mongodb://" + mongo_config.host + "/" + mongo_config.config);
var db = mongojs("mongodb://" + mongo_config.host + "/" + mongo_config.config);
db.collection("chat_logs").createIndex({ db.collection("chat_logs").createIndex({
createdAt: 1 createdAt: 1
@@ -20,6 +23,7 @@ db.collection("chat_logs").createIndex({
}, },
function () {} function () {}
); );
db.collection("timeout_api").createIndex({ db.collection("timeout_api").createIndex({
createdAt: 1 createdAt: 1
}, { }, {
@@ -27,6 +31,7 @@ db.collection("timeout_api").createIndex({
}, },
function () {} function () {}
); );
db.collection("api_links").createIndex({ db.collection("api_links").createIndex({
createdAt: 1 createdAt: 1
}, { }, {
@@ -34,6 +39,7 @@ db.collection("api_links").createIndex({
}, },
function () {} function () {}
); );
db.on("connected", function (err) { db.on("connected", function (err) {
console.log("connected"); console.log("connected");
}); });
@@ -59,6 +65,7 @@ db.collection("unique_ids").update({
}, },
function (err, docs) {} function (err, docs) {}
); );
db.collection("user_names").remove({ db.collection("user_names").remove({
guid: { guid: {
$exists: true $exists: true
@@ -69,6 +76,7 @@ db.collection("user_names").remove({
}, },
function (err, docs) {} function (err, docs) {}
); );
db.collection("user_names").update({ db.collection("user_names").update({
_id: "all_names" _id: "all_names"
}, { }, {
@@ -81,6 +89,7 @@ db.collection("user_names").update({
}, },
function (err, docs) {} function (err, docs) {}
); );
db.collection("connected_users").update({ db.collection("connected_users").update({
users: { users: {
$exists: true $exists: true
@@ -95,6 +104,7 @@ db.collection("connected_users").update({
}, },
function (err, docs) {} function (err, docs) {}
); );
db.collection("connected_users").update({ db.collection("connected_users").update({
_id: "total_users" _id: "total_users"
}, { }, {
@@ -107,6 +117,7 @@ db.collection("connected_users").update({
}, },
function (err, docs) {} function (err, docs) {}
); );
db.collection("frontpage_lists").update({ db.collection("frontpage_lists").update({
viewers: { viewers: {
$ne: 0 $ne: 0
@@ -122,4 +133,4 @@ db.collection("frontpage_lists").update({
function (err, docs) {} function (err, docs) {}
); );
module.exports = db; export default db;

View File

@@ -1,3 +1,8 @@
import {
pathThumbnails,
VERSION
} from "../settings/globals";
var Functions = require(pathThumbnails + "/handlers/functions.js"); var Functions = require(pathThumbnails + "/handlers/functions.js");
var db = require(pathThumbnails + "/handlers/db.js"); var db = require(pathThumbnails + "/handlers/db.js");

View File

@@ -1,3 +1,7 @@
import {
pathThumbnails
} from "../settings/globals";
var path = require("path"); var path = require("path");
try { try {
var mongo_config = require(path.join( var mongo_config = require(path.join(

View File

@@ -1,3 +1,7 @@
import {
pathThumbnails
} from "../settings/globals";
var cookie = require("cookie"); var cookie = require("cookie");
var Functions = require(pathThumbnails + "/handlers/functions.js"); var Functions = require(pathThumbnails + "/handlers/functions.js");

View File

@@ -1,3 +1,8 @@
import {
pathThumbnails,
VERSION
} from "../settings/globals";
var ColorThief = require("color-thief-jimp"); var ColorThief = require("color-thief-jimp");
var Jimp = require("jimp"); var Jimp = require("jimp");
var Functions = require(pathThumbnails + "/handlers/functions.js"); var Functions = require(pathThumbnails + "/handlers/functions.js");
@@ -99,9 +104,8 @@ function list(msg, guid, coll, offline, socket) {
socket.emit("update_required", result); socket.emit("update_required", result);
return; return;
} }
coll = msg.channel.toLowerCase(); //.replace(/ /g,''); coll = msg.channel.toLowerCase();
coll = Functions.removeEmojis(coll).toLowerCase(); coll = Functions.removeEmojis(coll).toLowerCase();
//coll = filter.clean(coll);
var pass = msg.pass; var pass = msg.pass;
db.collection("frontpage_lists").find({ db.collection("frontpage_lists").find({
_id: coll _id: coll
@@ -1280,7 +1284,6 @@ function sendColor(coll, socket, url, ajax, res) {
} }
function getNextSong(coll, socket, callback) { function getNextSong(coll, socket, callback) {
//coll = coll.replace(/ /g,'');
db.collection(coll).aggregate( db.collection(coll).aggregate(
[{ [{
$match: { $match: {

View File

@@ -1,3 +1,7 @@
import {
pathThumbnails
} from "../settings/globals";
var Functions = require(pathThumbnails + "/handlers/functions.js"); var Functions = require(pathThumbnails + "/handlers/functions.js");
var List = require(pathThumbnails + "/handlers/list.js"); var List = require(pathThumbnails + "/handlers/list.js");
var Frontpage = require(pathThumbnails + "/handlers/frontpage.js"); var Frontpage = require(pathThumbnails + "/handlers/frontpage.js");

View File

@@ -1,3 +1,8 @@
import {
pathThumbnails
} from "../settings/globals";
var Functions = require(pathThumbnails + "/handlers/functions.js"); var Functions = require(pathThumbnails + "/handlers/functions.js");
var crypto = require("crypto"); var crypto = require("crypto");
var projects = require(pathThumbnails + "/handlers/aggregates.js"); var projects = require(pathThumbnails + "/handlers/aggregates.js");

View File

@@ -1,3 +1,7 @@
import {
pathThumbnails
} from "../settings/globals";
var path = require("path"); var path = require("path");
var time_regex = /P((([0-9]*\.?[0-9]*)Y)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)W)?(([0-9]*\.?[0-9]*)D)?)?(T(([0-9]*\.?[0-9]*)H)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)S)?)?/; var time_regex = /P((([0-9]*\.?[0-9]*)Y)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)W)?(([0-9]*\.?[0-9]*)D)?)?(T(([0-9]*\.?[0-9]*)H)?(([0-9]*\.?[0-9]*)M)?(([0-9]*\.?[0-9]*)S)?)?/;
try { try {
@@ -377,7 +381,6 @@ function get_genres_youtube(ids, channel) {
} }
function get_correct_info(song_generated, channel, broadcast, callback) { function get_correct_info(song_generated, channel, broadcast, callback) {
//channel = channel.replace(/ /g,'');
request({ request({
type: "GET", type: "GET",
url: "https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id,topicDetails&key=" + url: "https://www.googleapis.com/youtube/v3/videos?part=contentDetails,snippet,id,topicDetails&key=" +
@@ -404,7 +407,6 @@ function get_correct_info(song_generated, channel, broadcast, callback) {
.toLowerCase() .toLowerCase()
.split(","); .split(",");
genre = genre.filter(filterFunction); genre = genre.filter(filterFunction);
//console.log(genre + " - ", song_generated.id);
if ( if (
title != song_generated.title || title != song_generated.title ||
duration < parseInt(song_generated.duration) duration < parseInt(song_generated.duration)
@@ -431,7 +433,6 @@ function get_correct_info(song_generated, channel, broadcast, callback) {
function (err, docs) { function (err, docs) {
if (broadcast && docs.nModified == 1) { if (broadcast && docs.nModified == 1) {
song_generated.new_id = song_generated.id; song_generated.new_id = song_generated.id;
//if(song_generated.type == "video")
if (typeof callback == "function") { if (typeof callback == "function") {
callback(song_generated, true); callback(song_generated, true);
} else { } else {
@@ -494,7 +495,6 @@ function check_error_video(msg, channel) {
return; return;
} }
if (msg.source == "soundcloud") return; if (msg.source == "soundcloud") return;
//channel = channel.replace(/ /g,'');
request({ request({
type: "GET", type: "GET",
url: "https://www.googleapis.com/youtube/v3/videos?part=id&key=" + url: "https://www.googleapis.com/youtube/v3/videos?part=id&key=" +
@@ -516,7 +516,6 @@ function check_error_video(msg, channel) {
} }
function findSimilar(msg, channel, broadcast, callback) { function findSimilar(msg, channel, broadcast, callback) {
//channel = channel.replace(/ /g,'');
var yt_url = var yt_url =
"https://www.googleapis.com/youtube/v3/search?key=" + "https://www.googleapis.com/youtube/v3/search?key=" +
key + key +
@@ -626,7 +625,7 @@ function editDistance(s1, s2) {
s1 = s1.toLowerCase(); s1 = s1.toLowerCase();
s2 = s2.toLowerCase(); s2 = s2.toLowerCase();
var costs = new Array(); var costs = new [];
for (var i = 0; i <= s1.length; i++) { for (var i = 0; i <= s1.length; i++) {
var lastValue = i; var lastValue = i;
for (var j = 0; j <= s2.length; j++) { for (var j = 0; j <= s2.length; j++) {

View File

@@ -1,3 +1,7 @@
import {
pathThumbnails
} from "../settings/globals";
var Functions = require(pathThumbnails + "/handlers/functions.js"); var Functions = require(pathThumbnails + "/handlers/functions.js");
var Notifications = require(pathThumbnails + "/handlers/notifications.js"); var Notifications = require(pathThumbnails + "/handlers/notifications.js");
var crypto = require("crypto"); var crypto = require("crypto");

View File

@@ -1,82 +0,0 @@
var cluster = require("cluster"),
net = require("net"),
path = require("path"),
//publicPath = path.join(__dirname, 'public'),
http = require("http"),
port = 8080,
//farmhash = require('farmhash'),
uniqid = require("uniqid"),
num_processes = require("os").cpus().length;
publicPath = path.join(__dirname, "public");
pathThumbnails = __dirname;
var redis = require("redis");
var client = redis.createClient({ host: "localhost", port: 6379 });
startSingle(true, true);
function startSingle(clustered, redis_enabled) {
var server;
var client = require("./apps/client.js");
try {
var cert_config = require(path.join(
path.join(__dirname, "config"),
"cert_config.js"
));
var fs = require("fs");
var privateKey = fs.readFileSync(cert_config.privateKey).toString();
var certificate = fs.readFileSync(cert_config.certificate).toString();
var ca = fs.readFileSync(cert_config.ca).toString();
var credentials = {
key: privateKey,
cert: certificate,
ca: ca
};
var https = require("https");
server = https.Server(credentials, routingFunction);
} catch (err) {
console.log("Starting without https (probably on localhost)");
server = http.createServer(routingFunction);
}
server.listen(port, onListen);
var socketIO = client.socketIO;
var redis = require("socket.io-redis");
try {
socketIO.adapter(redis({ host: "localhost", port: 6379 }));
} catch (e) {
console.log("No redis-server to connect to..");
}
socketIO.listen(server);
}
function onListen() {
console.log("Started with pid [" + process.pid + "]");
}
function routingFunction(req, res, next) {
var client = require("./apps/client.js");
var admin = require("./apps/admin.js");
try {
var url = req.headers["x-forwarded-host"]
? req.headers["x-forwarded-host"]
: req.headers.host.split(":")[0];
var subdomain = req.headers["x-forwarded-host"]
? req.headers["x-forwarded-host"].split(".")
: req.headers.host.split(":")[0].split(".");
if (subdomain.length > 1 && subdomain[0] == "admin") {
admin(req, res, next);
} else {
client(req, res, next);
}
} catch (e) {
console.log("Bad request for " + req.headers.host + req.url, e);
res.statusCode = 500;
res.write("Bad request"); //write a response to the client
res.end(); //end the response
}
}

View File

@@ -1,5 +1,9 @@
import {
VERSION
} from "../../../VERSION";
var Channel = { var Channel = {
init: function() { init: function () {
if (window.location.hash == "#small" || inIframe()) { if (window.location.hash == "#small" || inIframe()) {
small_player = true; small_player = true;
document.querySelector("footer").style.display = "none"; document.querySelector("footer").style.display = "none";
@@ -37,7 +41,6 @@ var Channel = {
document.querySelector("#hide-playlist").offsetWidth + document.querySelector("#hide-playlist").offsetWidth +
"px"; "px";
} }
//Player.soundcloud_player = document.querySelector("#soundcloud_player");
} }
List.calculate_song_heights(); List.calculate_song_heights();
Admin.logged_in = false; Admin.logged_in = false;
@@ -45,7 +48,6 @@ var Channel = {
number_suggested = 0; number_suggested = 0;
var no_socket = true; var no_socket = true;
//chan = Helper.decodeChannelName(Helper.html("#chan"));
var _p = window.location.pathname; var _p = window.location.pathname;
if (_p.substring(0, 1) == "/") _p = _p.substring(1); if (_p.substring(0, 1) == "/") _p = _p.substring(1);
if (_p.substring(_p.length - 1) == "/") _p = _p.substring(0, _p.length - 1); if (_p.substring(_p.length - 1) == "/") _p = _p.substring(0, _p.length - 1);
@@ -60,7 +62,7 @@ var Channel = {
ga("send", "pageview", page); ga("send", "pageview", page);
} }
window.onpopstate = function(e) { window.onpopstate = function (e) {
Channel.onepage_load(); Channel.onepage_load();
}; };
@@ -81,9 +83,8 @@ var Channel = {
} }
if (!client) { if (!client) {
//Helper.tabs('.playlist-tabs');
Helper.tabs(".playlist-tabs-loggedIn", { Helper.tabs(".playlist-tabs-loggedIn", {
onShow: function(e) { onShow: function (e) {
if (this.index == 2) { if (this.index == 2) {
document.getElementById("text-chat-input").focus(); document.getElementById("text-chat-input").focus();
Chat.channel_received = 0; Chat.channel_received = 0;
@@ -103,9 +104,6 @@ var Channel = {
.getElementsByClassName("chat-link")[0] .getElementsByClassName("chat-link")[0]
.setAttribute("style", "color: white !important;"); .setAttribute("style", "color: white !important;");
blinking = false; blinking = false;
//Helper.css("#chat-container", "display", "block");
//Helper.css("#wrapper", "display", "none");
//Helper.css("#suggestions", "display", "none");
document.getElementById("text-chat-input").focus(); document.getElementById("text-chat-input").focus();
Helper.css("#pageButtons", "display", "none"); Helper.css("#pageButtons", "display", "none");
scrollChat(); scrollChat();
@@ -137,23 +135,22 @@ var Channel = {
edge: side, edge: side,
closeOnClick: false, closeOnClick: false,
draggable: Helper.mobilecheck(), draggable: Helper.mobilecheck(),
onOpenStart: function(el) { onOpenStart: function (el) {
Helper.addClass(".hamburger-sidenav", "open"); Helper.addClass(".hamburger-sidenav", "open");
}, },
onCloseStart: function(el) { onCloseStart: function (el) {
Helper.removeClass(".hamburger-sidenav", "open"); Helper.removeClass(".hamburger-sidenav", "open");
} }
}); });
M.Collapsible.init( M.Collapsible.init(
document.getElementsByClassName("settings-collapsible")[0], document.getElementsByClassName("settings-collapsible")[0], {
{
accordion: true accordion: true
} }
); );
if (!client) { if (!client) {
M.Modal.init(document.getElementById("embed"), { M.Modal.init(document.getElementById("embed"), {
onCloseStart: function() { onCloseStart: function () {
document.querySelector(".embed-preview").innerHTML = ""; document.querySelector(".embed-preview").innerHTML = "";
} }
}); });
@@ -163,12 +160,12 @@ var Channel = {
Helper.removeElement(".tabs"); Helper.removeElement(".tabs");
} }
M.Modal.init(document.getElementById("advanced_filter"), { M.Modal.init(document.getElementById("advanced_filter"), {
onCloseEnd: function() { onCloseEnd: function () {
document.querySelector(".filter-results").innerHTML = ""; document.querySelector(".filter-results").innerHTML = "";
document.getElementById("filtersearch_input").value = ""; document.getElementById("filtersearch_input").value = "";
document.getElementById("filtersearch_input").blur(); document.getElementById("filtersearch_input").blur();
}, },
onOpenEnd: function() { onOpenEnd: function () {
document.getElementById("filtersearch_input").focus(); document.getElementById("filtersearch_input").focus();
} }
}); });
@@ -190,7 +187,7 @@ var Channel = {
pagination_buttons_html = pagination_buttons_html =
"<div class='pagination-results'>" + "<div class='pagination-results'>" +
document.getElementsByClassName("pagination-results")[0].cloneNode(true) document.getElementsByClassName("pagination-results")[0].cloneNode(true)
.innerHTML + .innerHTML +
"</div>"; "</div>";
empty_results_html = Helper.html("#empty-results-container"); empty_results_html = Helper.html("#empty-results-container");
not_import_html = Helper.html(".not-imported-container"); not_import_html = Helper.html(".not-imported-container");
@@ -207,7 +204,7 @@ var Channel = {
"" + add, "" + add,
connection_options connection_options
); );
socket.on("update_required", function(msg) { socket.on("update_required", function (msg) {
if (window.location.hostname == "localhost") { if (window.location.hostname == "localhost") {
console.error(msg); console.error(msg);
return; return;
@@ -229,7 +226,7 @@ var Channel = {
(document.querySelectorAll("#alreadychannel").length === 0 || (document.querySelectorAll("#alreadychannel").length === 0 ||
!Hostcontroller.old_id || !Hostcontroller.old_id ||
document.getElementById("code-text").innerText.toUpperCase() == document.getElementById("code-text").innerText.toUpperCase() ==
"ABBADUR") "ABBADUR")
) )
setup_host_initialization(); setup_host_initialization();
setup_suggested_listener(); setup_suggested_listener();
@@ -278,7 +275,7 @@ var Channel = {
.setAttribute( .setAttribute(
"src", "src",
"https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" + "https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" +
codeURL codeURL
); );
document.getElementById("code-link").setAttribute("href", codeURL); document.getElementById("code-link").setAttribute("href", codeURL);
} }
@@ -300,15 +297,15 @@ var Channel = {
.setAttribute( .setAttribute(
"src", "src",
"https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" + "https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" +
shareCodeUrl shareCodeUrl
); );
Helper.setHtml( Helper.setHtml(
"#channel-name-join", "#channel-name-join",
"client." + "client." +
window.location.hostname + window.location.hostname +
port + port +
"/" + "/" +
encodeURIComponent(chan.toLowerCase()) encodeURIComponent(chan.toLowerCase())
); );
} }
} else { } else {
@@ -380,7 +377,7 @@ var Channel = {
} else { } else {
Player.loadSoundCloudPlayer(); Player.loadSoundCloudPlayer();
} }
//}
if (Helper.mobilecheck()) { if (Helper.mobilecheck()) {
if (!client) { if (!client) {
@@ -424,12 +421,11 @@ var Channel = {
}); });
} }
addListener("click", ".sp-choose-link", function(e) { addListener("click", ".sp-choose-link", function (e) {
event.preventDefault(); event.preventDefault();
document.getElementsByClassName("sp-choose")[0].click(); document.getElementsByClassName("sp-choose")[0].click();
}); });
//$("#results" ).hover( function() { Helper.removeClass(".result", "hoverResults"); i = 0; }, function(){ });
document.getElementById("search").focus(); document.getElementById("search").focus();
Helper.css("#embed-button", "display", "inline-block"); Helper.css("#embed-button", "display", "inline-block");
document.getElementById("search").setAttribute("placeholder", "Search..."); document.getElementById("search").setAttribute("placeholder", "Search...");
@@ -464,9 +460,9 @@ var Channel = {
} else if (chromecastReady && !client) { } else if (chromecastReady && !client) {
initializeCastApi(); initializeCastApi();
} else if (!client) { } else if (!client) {
window["__onGCastApiAvailable"] = function(loaded, errorInfo) { window["__onGCastApiAvailable"] = function (loaded, errorInfo) {
if (loaded) { if (loaded) {
setTimeout(function() { setTimeout(function () {
chromecastReady = true; chromecastReady = true;
initializeCastApi(); initializeCastApi();
}, 1000); }, 1000);
@@ -479,13 +475,13 @@ var Channel = {
Channel.add_context_menu(); Channel.add_context_menu();
if (!Helper.mobilecheck() && navigator.userAgent.match(/iPad/i) == null) { if (!Helper.mobilecheck() && navigator.userAgent.match(/iPad/i) == null) {
setTimeout(function() { setTimeout(function () {
Channel.set_title_width(); Channel.set_title_width();
}, 100); }, 100);
} }
}, },
set_title_width: function(start) { set_title_width: function (start) {
if (window.innerWidth > 600) { if (window.innerWidth > 600) {
var add_width = document.getElementsByClassName("brand-logo")[0] var add_width = document.getElementsByClassName("brand-logo")[0]
.offsetWidth; .offsetWidth;
@@ -506,7 +502,7 @@ var Channel = {
} }
}, },
spotify_is_authenticated: function(bool) { spotify_is_authenticated: function (bool) {
if (bool) { if (bool) {
Helper.log([ Helper.log([
"Spotify is authenticated", "Spotify is authenticated",
@@ -524,8 +520,8 @@ var Channel = {
} }
}, },
add_context_menu: function() { add_context_menu: function () {
addListener("contextmenu", ".vote-container", function(e) { addListener("contextmenu", ".vote-container", function (e) {
if (hostMode) { if (hostMode) {
return; return;
} }
@@ -535,58 +531,58 @@ var Channel = {
contextListener(e, that); contextListener(e, that);
}); });
addListener("contextmenu", ".add-suggested", function(e) { addListener("contextmenu", ".add-suggested", function (e) {
this.preventDefault(); this.preventDefault();
var that = this; var that = this;
contextListener(e, that); contextListener(e, that);
}); });
addListener("click", ".list-remove", function(e) { addListener("click", ".list-remove", function (e) {
this.preventDefault(); this.preventDefault();
var that = this; var that = this;
contextListener(e, that); contextListener(e, that);
}); });
}, },
share_link_modifier: function() { share_link_modifier: function () {
document document
.getElementById("facebook-code-link") .getElementById("facebook-code-link")
.setAttribute( .setAttribute(
"href", "href",
"https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/" + "https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/" +
chan.toLowerCase() chan.toLowerCase()
); );
document document
.getElementById("facebook-code-link") .getElementById("facebook-code-link")
.setAttribute( .setAttribute(
"onclick", "onclick",
"window.open('https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/" + "window.open('https://www.facebook.com/sharer/sharer.php?u=https://zoff.me/" +
chan.toLowerCase() + chan.toLowerCase() +
"', 'Share Playlist','width=600,height=300'); return false;" "', 'Share Playlist','width=600,height=300'); return false;"
); );
document document
.getElementById("twitter-code-link") .getElementById("twitter-code-link")
.setAttribute( .setAttribute(
"href", "href",
"https://twitter.com/intent/tweet?url=https://zoff.me/" + "https://twitter.com/intent/tweet?url=https://zoff.me/" +
chan.toLowerCase() + chan.toLowerCase() +
"&amp;text=Check%20out%20this%20playlist%20" + "&amp;text=Check%20out%20this%20playlist%20" +
chan.toLowerCase() + chan.toLowerCase() +
"%20on%20Zoff!&amp;via=zoffmusic" "%20on%20Zoff!&amp;via=zoffmusic"
); );
document document
.getElementById("twitter-code-link") .getElementById("twitter-code-link")
.setAttribute( .setAttribute(
"onclick", "onclick",
"window.open('https://twitter.com/intent/tweet?url=https://zoff.me/" + "window.open('https://twitter.com/intent/tweet?url=https://zoff.me/" +
chan.toLowerCase() + chan.toLowerCase() +
"/&amp;text=Check%20out%20this%20playlist%20" + "/&amp;text=Check%20out%20this%20playlist%20" +
chan.toLowerCase() + chan.toLowerCase() +
"%20on%20Zoff!&amp;via=zoffmusic','Share Playlist','width=600,height=300'); return false;" "%20on%20Zoff!&amp;via=zoffmusic','Share Playlist','width=600,height=300'); return false;"
); );
}, },
window_width_volume_slider: function() { window_width_volume_slider: function () {
if (window.innerWidth <= 600 && slider_type == "horizontal") { if (window.innerWidth <= 600 && slider_type == "horizontal") {
slider_type = "vertical"; slider_type = "vertical";
Playercontrols.initSlider(); Playercontrols.initSlider();
@@ -597,25 +593,25 @@ var Channel = {
} }
}, },
listeners: function(on) { listeners: function (on) {
var scrollListener = function(e) { var scrollListener = function (e) {
if (!programscroll) { if (!programscroll) {
userscroll = true; userscroll = true;
if ( if (
document.getElementById("chatchannel").scrollTop + document.getElementById("chatchannel").scrollTop +
document.getElementById("chatchannel").offsetHeight >= document.getElementById("chatchannel").offsetHeight >=
document.getElementById("chatchannel").scrollHeight document.getElementById("chatchannel").scrollHeight
) { ) {
userscroll = false; userscroll = false;
} }
} }
}; };
var scrollAllListener = function(e) { var scrollAllListener = function (e) {
if (!programscroll) { if (!programscroll) {
userscroll = true; userscroll = true;
if ( if (
document.getElementById("chatall").scrollTop + document.getElementById("chatall").scrollTop +
document.getElementById("chatall").offsetHeight >= document.getElementById("chatall").offsetHeight >=
document.getElementById("chatall").scrollHeight document.getElementById("chatall").scrollHeight
) { ) {
userscroll = false; userscroll = false;
@@ -641,7 +637,7 @@ var Channel = {
} }
}, },
onepage_load: function() { onepage_load: function () {
if (changing_to_frontpage) return; if (changing_to_frontpage) return;
if (user_auth_started) { if (user_auth_started) {
clearTimeout(durationTimeout); clearTimeout(durationTimeout);
@@ -651,7 +647,6 @@ var Channel = {
Helper.tooltip(".castButton", "destroy"); Helper.tooltip(".castButton", "destroy");
Helper.tooltip("#viewers", "destroy"); Helper.tooltip("#viewers", "destroy");
Helper.tooltip("#addToOtherList", "destroy"); Helper.tooltip("#addToOtherList", "destroy");
//$('.castButton-unactive').tooltip("destroy");
Helper.tooltip("#offline-mode", "destroy"); Helper.tooltip("#offline-mode", "destroy");
Helper.tooltip("#admin-lock", "destroy"); Helper.tooltip("#admin-lock", "destroy");
} }
@@ -671,9 +666,8 @@ var Channel = {
document.getElementById("chan").innerHTML = Helper.upperFirst(chan); document.getElementById("chan").innerHTML = Helper.upperFirst(chan);
var add = ""; var add = "";
w_p = true; w_p = true;
//if(private_channel) add = Crypt.getCookie("_uI") + "_";
socket.emit("list", { socket.emit("list", {
version: parseInt(_VERSION), version: VERSION,
channel: add + chan.toLowerCase() channel: add + chan.toLowerCase()
}); });
} else if (url_split[3] === "") { } else if (url_split[3] === "") {
@@ -696,7 +690,6 @@ var Channel = {
Helper.css("#channel-load", "display", "block"); Helper.css("#channel-load", "display", "block");
window.scrollTo(0, 0); window.scrollTo(0, 0);
//Player.stopInterval = true;
Admin.beginning = true; Admin.beginning = true;
began = false; began = false;
durationBegun = false; durationBegun = false;
@@ -734,12 +727,8 @@ var Channel = {
} }
} }
clearTimeout(tap_target_timeout); clearTimeout(tap_target_timeout);
//before_toast();
if (Helper.mobilecheck() || user_auth_avoid || client) { if (Helper.mobilecheck() || user_auth_avoid || client) {
Helper.log(["Removing all listeners"]); Helper.log(["Removing all listeners"]);
//socket.emit("change_channel");
//removeAllListeners();
//socket.removeEventListener(id);
socket.emit("left_channel", { socket.emit("left_channel", {
channel: channel_before_move channel: channel_before_move
}); });
@@ -750,14 +739,12 @@ var Channel = {
socket.removeEventListener("np"); socket.removeEventListener("np");
socket.removeEventListener("id"); socket.removeEventListener("id");
socket.removeEventListener(id); socket.removeEventListener(id);
//socket.disconnect();
} }
socket.removeEventListener("chat.all"); socket.removeEventListener("chat.all");
socket.removeEventListener("chat"); socket.removeEventListener("chat");
socket.removeEventListener("conf"); socket.removeEventListener("conf");
socket.removeEventListener("pw"); socket.removeEventListener("pw");
socket.removeEventListener("toast"); socket.removeEventListener("toast");
//socket.removeEventListener("id");
socket.removeEventListener("channel"); socket.removeEventListener("channel");
socket.removeEventListener("auth_required"); socket.removeEventListener("auth_required");
socket.removeEventListener("auth_accepted"); socket.removeEventListener("auth_accepted");
@@ -767,7 +754,7 @@ var Channel = {
Helper.ajax({ Helper.ajax({
url: "/", url: "/",
method: "GET", method: "GET",
success: function(e) { success: function (e) {
if (!client) { if (!client) {
document.querySelector("#hide-playlist").remove(); document.querySelector("#hide-playlist").remove();
if (hiddenPlaylist) if (hiddenPlaylist)
@@ -857,7 +844,6 @@ var Channel = {
"afterend", "afterend",
response.querySelectorAll(".section.mega")[0].outerHTML response.querySelectorAll(".section.mega")[0].outerHTML
); );
//document.getElementsByTagName("header")[0].insertAdjacentHTML("afterend", response.querySelectorAll(".section.mobile-search")[0].innerHTML);
if (Helper.mobilecheck() || user_auth_avoid) { if (Helper.mobilecheck() || user_auth_avoid) {
document.getElementsByTagName( document.getElementsByTagName(
"main" "main"
@@ -868,7 +854,7 @@ var Channel = {
.insertAdjacentHTML( .insertAdjacentHTML(
"beforeend", "beforeend",
response.querySelectorAll("#main_section_frontpage")[0] response.querySelectorAll("#main_section_frontpage")[0]
.outerHTML .outerHTML
); );
} }
Helper.removeClass(".page-footer", "padding-bottom-extra"); Helper.removeClass(".page-footer", "padding-bottom-extra");
@@ -915,11 +901,17 @@ function get_history() {
if(p == undefined) p = ""; if(p == undefined) p = "";
var c = Crypt.crypt_pass(p, true); var c = Crypt.crypt_pass(p, true);
if(c == undefined) c = "";*/ if(c == undefined) c = "";*/
socket.emit("get_history", { channel: chan.toLowerCase(), all: false }); socket.emit("get_history", {
socket.emit("get_history", { channel: chan.toLowerCase(), all: true }); channel: chan.toLowerCase(),
all: false
});
socket.emit("get_history", {
channel: chan.toLowerCase(),
all: true
});
} else { } else {
setTimeout(function() { setTimeout(function () {
get_history(); get_history();
}, 50); }, 50);
} }
} }

View File

@@ -5,13 +5,6 @@ var song_title = "";
var paused = false; var paused = false;
var intelligentList = false; var intelligentList = false;
var client = false; var client = false;
var _VERSION;
try {
_VERSION = localStorage.getItem("VERSION");
if (_VERSION == null || _VERSION == undefined) throw "Some error";
} catch (e) {
_VERSION = 6;
}
var SC_widget; var SC_widget;
var scUsingWidget = false; var scUsingWidget = false;
var zoff_api_token = "DwpnKVkaMH2HdcpJT2YPy783SY33byF5/32rbs0+xdU="; var zoff_api_token = "DwpnKVkaMH2HdcpJT2YPy783SY33byF5/32rbs0+xdU=";
@@ -79,10 +72,10 @@ var connection_options = {
}; };
var Crypt = { var Crypt = {
crypt_pass: function(pass) { crypt_pass: function (pass) {
return pass; return pass;
}, },
get_background_color: function() { get_background_color: function () {
return "dynamic"; return "dynamic";
} }
}; };
@@ -97,12 +90,16 @@ function receiveMessage(event) {
} else if (event.data == "reset") { } else if (event.data == "reset") {
window.setVolume(100); window.setVolume(100);
} else if (event.data == "get_info") { } else if (event.data == "get_info") {
window.parentWindow.postMessage( window.parentWindow.postMessage({
{ type: "np", title: song_title }, type: "np",
title: song_title
},
window.parentOrigin window.parentOrigin
); );
window.parentWindow.postMessage( window.parentWindow.postMessage({
{ type: "controller", id: Hostcontroller.old_id }, type: "controller",
id: Hostcontroller.old_id
},
window.parentOrigin window.parentOrigin
); );
try { try {
@@ -117,11 +114,11 @@ function receiveMessage(event) {
} }
window.addEventListener("message", receiveMessage, false); window.addEventListener("message", receiveMessage, false);
window.addEventListener("DOMContentLoaded", function() {}); window.addEventListener("DOMContentLoaded", function () {});
var Channel = { var Channel = {
set_title_width: function() {}, set_title_width: function () {},
window_width_volume_slider: function() {} window_width_volume_slider: function () {}
}; };
function getSearch(elem) { function getSearch(elem) {
@@ -138,7 +135,7 @@ function getSearch(elem) {
return result; return result;
} }
window.addEventListener("load", function() { window.addEventListener("load", function () {
if (autoplay) { if (autoplay) {
Helper.css("#player", "visibility", "hidden"); Helper.css("#player", "visibility", "hidden");
} }
@@ -156,8 +153,6 @@ window.addEventListener("load", function() {
}); });
add = "https://zoff.me"; add = "https://zoff.me";
//if(window.location.hostname == "localhost") add = "localhost";
//add = "localhost";
socket = io.connect( socket = io.connect(
"" + add, "" + add,
connection_options connection_options
@@ -167,7 +162,7 @@ window.addEventListener("load", function() {
change_offline(true, false); change_offline(true, false);
} }
socket.on("auth_required", function() { socket.on("auth_required", function () {
M.Modal.getInstance(document.getElementById("locked_channel")).open(); M.Modal.getInstance(document.getElementById("locked_channel")).open();
}); });
@@ -175,9 +170,9 @@ window.addEventListener("load", function() {
"https://zoff.me/" + chan.toLowerCase(); "https://zoff.me/" + chan.toLowerCase();
document.querySelector(".channel-title").innerText = "/" + chan.toLowerCase(); document.querySelector(".channel-title").innerText = "/" + chan.toLowerCase();
socket.on("get_list", function() { socket.on("get_list", function () {
socket_connected = true; socket_connected = true;
setTimeout(function() { setTimeout(function () {
socket.emit("list", { socket.emit("list", {
version: VERSION, version: VERSION,
channel: chan.toLowerCase(), channel: chan.toLowerCase(),
@@ -186,13 +181,15 @@ window.addEventListener("load", function() {
}, 1000); }, 1000);
}); });
socket.on("self_ping", function() { socket.on("self_ping", function () {
if (chan != undefined && chan.toLowerCase() != "") { if (chan != undefined && chan.toLowerCase() != "") {
socket.emit("self_ping", { channel: chan.toLowerCase() }); socket.emit("self_ping", {
channel: chan.toLowerCase()
});
} }
}); });
socket.on("viewers", function(view) { socket.on("viewers", function (view) {
viewers = view; viewers = view;
if (song_title !== undefined) Player.getTitle(song_title, viewers); if (song_title !== undefined) Player.getTitle(song_title, viewers);
@@ -217,7 +214,6 @@ window.addEventListener("load", function() {
.getElementById("playpause") .getElementById("playpause")
.addEventListener("click", Playercontrols.play_pause); .addEventListener("click", Playercontrols.play_pause);
window.setVolume = setVolume; window.setVolume = setVolume;
//Helper.css("#controls", "background-color", color);
document.querySelector("body").style.backgroundColor = color; document.querySelector("body").style.backgroundColor = color;
if (embedOptions.hasOwnProperty("control") && embedOptions.control) { if (embedOptions.hasOwnProperty("control") && embedOptions.control) {
@@ -227,14 +223,14 @@ window.addEventListener("load", function() {
} }
}); });
window.addEventListener("resize", function() { window.addEventListener("resize", function () {
resizeFunction(); resizeFunction();
}); });
function resizePlaylistPlaying() {} function resizePlaylistPlaying() {}
function startWaitTimerPlay() { function startWaitTimerPlay() {
setTimeout(function() { setTimeout(function () {
if (videoSource == "youtube") { if (videoSource == "youtube") {
Player.player.playVideo(); Player.player.playVideo();
} else if (videoSource == "soundcloud") { } else if (videoSource == "soundcloud") {
@@ -256,7 +252,7 @@ function setup_now_playing_listener() {
} }
function setup_list_listener() { function setup_list_listener() {
socket.on("channel", function(msg) { socket.on("channel", function (msg) {
Helper.addClass(".site_loader", "hide"); Helper.addClass(".site_loader", "hide");
List.channel_function(msg); List.channel_function(msg);
}); });
@@ -268,6 +264,7 @@ function setVolume(val) {
} }
function updateChromecastMetadata() {} function updateChromecastMetadata() {}
function loadChromecastVideo() {} function loadChromecastVideo() {}
function toast(msg) { function toast(msg) {
@@ -364,7 +361,10 @@ function toast(msg) {
break; break;
} }
before_toast(); before_toast();
M.toast({ html: msg, displayLength: 4000 }); M.toast({
html: msg,
displayLength: 4000
});
} }
function emit() { function emit() {
@@ -396,23 +396,23 @@ function change_offline(enabled, already_offline) {
} }
} }
var mouseEnter = function(e) { var mouseEnter = function (e) {
Helper.removeClass("#seekToDuration", "hide"); Helper.removeClass("#seekToDuration", "hide");
}; };
var mouseLeave = function(e) { var mouseLeave = function (e) {
dragging = false; dragging = false;
Helper.addClass("#seekToDuration", "hide"); Helper.addClass("#seekToDuration", "hide");
}; };
var mouseDown = function(e) { var mouseDown = function (e) {
var acceptable = ["bar", "controls", "duration"]; var acceptable = ["bar", "controls", "duration"];
if (acceptable.indexOf(e.target.id) >= 0) { if (acceptable.indexOf(e.target.id) >= 0) {
dragging = true; dragging = true;
} }
}; };
var mouseUp = function(e) { var mouseUp = function (e) {
dragging = false; dragging = false;
}; };
if (enabled) { if (enabled) {
@@ -467,68 +467,61 @@ function change_offline(enabled, already_offline) {
} }
function before_toast() { function before_toast() {
/*if($('.toast').length > 0) {
var toastElement = $('.toast').first()[0];
var toastInstance = toastElement.M_Toast;
toastInstance.remove();
}*/
M.Toast.dismissAll(); M.Toast.dismissAll();
//Materialize.Toast.removeAll();
} }
document.addEventListener( document.addEventListener(
"click", "click",
function(e) { function (e) {
handleEvent(e, e.target, false, "click"); handleEvent(e, e.target, false, "click");
}, },
false false
); );
addListener("click", ".channel-info-container", function(e) { addListener("click", ".channel-info-container", function (e) {
this.preventDefault(); this.preventDefault();
Player.pauseVideo(); Player.pauseVideo();
window.open("https://zoff.me/" + chan.toLowerCase() + "/", "_blank"); window.open("https://zoff.me/" + chan.toLowerCase() + "/", "_blank");
}); });
addListener("click", ".vote-container", function(e) { addListener("click", ".vote-container", function (e) {
var that = e; var that = e;
var id = that.getAttribute("data-video-id"); var id = that.getAttribute("data-video-id");
List.vote(id, "pos"); List.vote(id, "pos");
}); });
addListener("click", ".prev_page", function(e) { addListener("click", ".prev_page", function (e) {
event.preventDefault(); event.preventDefault();
List.dynamicContentPage(-1); List.dynamicContentPage(-1);
}); });
addListener("click", "#player_overlay", function(event) { addListener("click", "#player_overlay", function (event) {
if (videoSource == "soundcloud") Playercontrols.play_pause(); if (videoSource == "soundcloud") Playercontrols.play_pause();
}); });
addListener("click", ".next_page", function(e) { addListener("click", ".next_page", function (e) {
event.preventDefault(); event.preventDefault();
List.dynamicContentPage(1); List.dynamicContentPage(1);
}); });
addListener("click", ".prev", function(event) { addListener("click", ".prev", function (event) {
this.preventDefault(); this.preventDefault();
if (!offline) return; if (!offline) return;
List.skip(false); List.skip(false);
}); });
addListener("click", ".skip", function(event) { addListener("click", ".skip", function (event) {
this.preventDefault(); this.preventDefault();
//if(!offline) return;
List.skip(true); List.skip(true);
}); });
addListener("click", ".last_page", function(e) { addListener("click", ".last_page", function (e) {
event.preventDefault(); event.preventDefault();
List.dynamicContentPage(10); List.dynamicContentPage(10);
}); });
addListener("click", ".first_page", function(e) { addListener("click", ".first_page", function (e) {
event.preventDefault(); event.preventDefault();
List.dynamicContentPage(-10); List.dynamicContentPage(-10);
}); });

View File

@@ -1,3 +1,7 @@
import {
VERSION
} from "../../../VERSION";
function removeAllListeners() { function removeAllListeners() {
Helper.log(["Removing all listeners"]); Helper.log(["Removing all listeners"]);
socket.removeEventListener("chat.all"); socket.removeEventListener("chat.all");
@@ -9,14 +13,12 @@ function removeAllListeners() {
socket.removeEventListener("channel"); socket.removeEventListener("channel");
socket.removeEventListener("np"); socket.removeEventListener("np");
socket.removeEventListener("get_list"); socket.removeEventListener("get_list");
//socket.removeEventListener("self_ping");
socket.removeEventListener("viewers"); socket.removeEventListener("viewers");
socket.removeEventListener("auth_required"); socket.removeEventListener("auth_required");
socket.removeEventListener("auth_accepted"); socket.removeEventListener("auth_accepted");
socket.removeEventListener("suggested"); socket.removeEventListener("suggested");
socket.removeEventListener("color"); socket.removeEventListener("color");
socket.removeEventListener("chat_history"); socket.removeEventListener("chat_history");
//socket.removeEventListener("name");
socket.removeEventListener(id); socket.removeEventListener(id);
} }
@@ -44,7 +46,7 @@ function filterPlaylistElements(page) {
page: page, page: page,
type: search_type type: search_type
}, },
success: function(data) { success: function (data) {
var json = JSON.parse(data); var json = JSON.parse(data);
document.querySelector(".filter-results").innerHTML = ""; document.querySelector(".filter-results").innerHTML = "";
if (json.results.search_results.length > 0) { if (json.results.search_results.length > 0) {
@@ -70,7 +72,7 @@ function filterPlaylistElements(page) {
"Couldn't find any items with those tags.."; "Couldn't find any items with those tags..";
} }
}, },
error: function(e) { error: function (e) {
if (e.status != 429) { if (e.status != 429) {
toast("Couldn't find any items with those tags..", "red"); toast("Couldn't find any items with those tags..", "red");
@@ -111,11 +113,10 @@ function addFilterButtons(position, json) {
} }
function say_updated() { function say_updated() {
setTimeout(function() { setTimeout(function () {
before_toast(); before_toast();
M.toast({ M.toast({
html: html: "The list was updated, want to refresh? <a class='waves-effect waves-light btn light-green' href='#' id='refresh_mobile' style='cursor:pointer;pointer-events:all;margin-left:10px;'> yes</a><a class='waves-effect waves-light btn red lighten' id='dont_refresh_list' style='cursor:pointer;pointer-events:all;margin-left:10px;'>no</a>",
"The list was updated, want to refresh? <a class='waves-effect waves-light btn light-green' href='#' id='refresh_mobile' style='cursor:pointer;pointer-events:all;margin-left:10px;'> yes</a><a class='waves-effect waves-light btn red lighten' id='dont_refresh_list' style='cursor:pointer;pointer-events:all;margin-left:10px;'>no</a>",
displayLength: 10000000 displayLength: 10000000
}); });
}, 500); }, 500);
@@ -150,9 +151,9 @@ function resizeFunction() {
if (document.querySelector("#wrapper") == null) return; if (document.querySelector("#wrapper") == null) return;
if (!client && !embed) if (!client && !embed)
document.querySelector("#hide-playlist").style.left = document.querySelector("#hide-playlist").style.left =
document.querySelector("#video-container").offsetWidth - document.querySelector("#video-container").offsetWidth -
document.querySelector("#hide-playlist").offsetWidth + document.querySelector("#hide-playlist").offsetWidth +
"px"; "px";
if ( if (
((window.innerWidth > 600 && !embed) || ((window.innerWidth > 600 && !embed) ||
(window.innerWidth > 500 && embed)) && (window.innerWidth > 500 && embed)) &&
@@ -171,7 +172,7 @@ function resizeFunction() {
var scPlaying = false; var scPlaying = false;
var ytPlaying = false; var ytPlaying = false;
if (scUsingWidget) { if (scUsingWidget) {
Player.soundcloud_player.isPaused(function(paused) { Player.soundcloud_player.isPaused(function (paused) {
try { try {
ytPlaying = ytPlaying =
Player.player.getPlayerState() == YT.PlayerState.PLAYING || Player.player.getPlayerState() == YT.PlayerState.PLAYING ||
@@ -213,7 +214,7 @@ function resizeFunction() {
Helper.computedStyle("header", "height") - Helper.computedStyle("header", "height") -
64 - 64 -
40) / 40) /
71 71
) + 1; ) + 1;
List.element_height = List.element_height =
(window.innerHeight - (window.innerHeight -
@@ -221,7 +222,7 @@ function resizeFunction() {
Helper.computedStyle("header", "height") - Helper.computedStyle("header", "height") -
64 - 64 -
40) / 40) /
temp_fit - temp_fit -
5; 5;
} else { } else {
temp_fit = temp_fit =
@@ -238,7 +239,7 @@ function resizeFunction() {
Helper.computedStyle("header", "height") - Helper.computedStyle("header", "height") -
64 - 64 -
40) / 40) /
71 71
); );
List.element_height = List.element_height =
(window.innerHeight - (window.innerHeight -
@@ -246,17 +247,16 @@ function resizeFunction() {
Helper.computedStyle("header", "height") - Helper.computedStyle("header", "height") -
64 - 64 -
40) / 40) /
temp_fit - temp_fit -
5; 5;
} else if (List.element_height < 55.2 && embed) { } else if (List.element_height < 55.2 && embed) {
//List.can_fit = List.can_fit - 1;
temp_fit = Math.round( temp_fit = Math.round(
(window.innerHeight - (window.innerHeight -
Helper.computedStyle(".tabs", "height") - Helper.computedStyle(".tabs", "height") -
Helper.computedStyle("header", "height") - Helper.computedStyle("header", "height") -
64 - 64 -
40) / 40) /
71 71
); );
List.element_height = List.element_height =
(window.innerHeight - (window.innerHeight -
@@ -264,7 +264,7 @@ function resizeFunction() {
Helper.computedStyle("header", "height") - Helper.computedStyle("header", "height") -
64 - 64 -
40) / 40) /
temp_fit - temp_fit -
5; 5;
temp_fit = temp_fit - 2; temp_fit = temp_fit - 2;
} }
@@ -295,7 +295,6 @@ function resizeFunction() {
} }
} }
List.can_fit = temp_fit; List.can_fit = temp_fit;
//List.element_height = (Helper.computedStyle("#wrapper", "height") / List.can_fit)-5.3;
Helper.css(".list-song", "height", List.element_height + "px"); Helper.css(".list-song", "height", List.element_height + "px");
Channel.set_title_width(); Channel.set_title_width();
if (!client) { if (!client) {
@@ -354,14 +353,19 @@ function getColor(id) {
Helper.ajax({ Helper.ajax({
method: "POST", method: "POST",
url: "/api/color", url: "/api/color",
headers: { "Content-Type": "application/json;charset=UTF-8" }, headers: {
"Content-Type": "application/json;charset=UTF-8"
},
data: JSON.stringify({ data: JSON.stringify({
id: id id: id
}), }),
success: function(c) { success: function (c) {
c = JSON.parse(c); c = JSON.parse(c);
if (typeof c == "object") { if (typeof c == "object") {
Player.setBGimage({ color: c, only: true }); Player.setBGimage({
color: c,
only: true
});
} }
} }
}); });
@@ -384,14 +388,11 @@ function hide_native(way) {
} }
Helper.toggleClass("#duration", "hide"); Helper.toggleClass("#duration", "hide");
Helper.toggleClass("#fullscreen", "hide"); Helper.toggleClass("#fullscreen", "hide");
try { if (videoSource == "youtube") {
if (videoSource == "youtube") { Player.player.stopVideo();
Player.player.stopVideo(); } else if (videoSource == "soundcloud") {
} else if (videoSource == "soundcloud") { Player.soundcloud_player.pause();
Player.soundcloud_player.pause(); }
}
} catch (e) {}
//clearTimeout(durationTimeout);
Player.stopInterval = true; Player.stopInterval = true;
if (Helper.mobilecheck()) { if (Helper.mobilecheck()) {
if (document.querySelector("#pause").classList.contains("hide")) { if (document.querySelector("#pause").classList.contains("hide")) {
@@ -412,7 +413,7 @@ function hide_native(way) {
var thisThumbnail; var thisThumbnail;
if (Player.np.thumbnail == undefined) if (Player.np.thumbnail == undefined)
thisThumbnail = thisThumbnail =
"https://img.youtube.com/vi/" + video_id + "/hqdefault.jpg"; "https://img.youtube.com/vi/" + video_id + "/hqdefault.jpg";
else thisThumbnail = Player.np.thumbnail; else thisThumbnail = Player.np.thumbnail;
Helper.removeClass("#player_overlay", "hide"); Helper.removeClass("#player_overlay", "hide");
Helper.css("#player_overlay", "display", "block"); Helper.css("#player_overlay", "display", "block");
@@ -472,7 +473,9 @@ function hide_native(way) {
Helper.setHtml("#chromecast_text", ""); Helper.setHtml("#chromecast_text", "");
Helper.css("#playing_on", "display", "none"); Helper.css("#playing_on", "display", "none");
if (!offline) { if (!offline) {
socket.emit("pos", { channel: chan.toLowerCase() }); socket.emit("pos", {
channel: chan.toLowerCase()
});
} else { } else {
Player.loadVideoById(video_id); Player.loadVideoById(video_id);
} }
@@ -521,7 +524,6 @@ function start_auth() {
Helper.css("#player_overlay", "display", "block"); Helper.css("#player_overlay", "display", "block");
M.Modal.getInstance(document.getElementById("user_password")).open(); M.Modal.getInstance(document.getElementById("user_password")).open();
document.querySelector("#user-pass-input").focus(); document.querySelector("#user-pass-input").focus();
//Crypt.remove_userpass(chan.toLowerCase());
before_toast(); before_toast();
M.toast({ M.toast({
html: "That is not the correct password, try again..", html: "That is not the correct password, try again..",
@@ -532,32 +534,30 @@ function start_auth() {
function emit_list() { function emit_list() {
var add = ""; var add = "";
//if(private_channel) add = Crypt.getCookie("_uI") + "_";
/*var p = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true);
if(p == undefined) p = "";*/
if (socket.id) { if (socket.id) {
socket.emit("list", { socket.emit("list", {
version: parseInt(_VERSION), version: parseInt(VERSION),
channel: add + chan.toLowerCase() channel: add + chan.toLowerCase()
}); });
} else { } else {
setTimeout(function() { setTimeout(function () {
emit_list(); emit_list();
}, 50); }, 50);
} }
} }
function get_list_ajax() { function get_list_ajax() {
//var c = Crypt.get_userpass(chan.toLowerCase());
Helper.ajax({ Helper.ajax({
type: "POST", type: "POST",
data: { data: {
userpass: "", userpass: "",
token: zoff_api_token token: zoff_api_token
}, },
headers: { "Content-Type": "application/json;charset=UTF-8" }, headers: {
"Content-Type": "application/json;charset=UTF-8"
},
url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()), url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()),
success: function(response) { success: function (response) {
response = JSON.parse(response); response = JSON.parse(response);
if (response.results.length > 0) { if (response.results.length > 0) {
if (response.status == 403) { if (response.status == 403) {
@@ -569,19 +569,17 @@ function get_list_ajax() {
List.populate_list(response.results); List.populate_list(response.results);
} }
}, },
error: function(response) { error: function (response) {
//response = JSON.parse(response);
if (response.status == 403) { if (response.status == 403) {
start_auth(); start_auth();
} else if (response.status == 429) { } else if (response.status == 429) {
setTimeout(function() { setTimeout(function () {
get_list_ajax(); get_list_ajax();
}, xmlhttp.getResponseHeader("Retry-After") * 1000); }, xmlhttp.getResponseHeader("Retry-After") * 1000);
} else if (response.status == 404) return; } else if (response.status == 404) return;
if (client) { if (client) {
Helper.removeElement("#channel-load"); Helper.removeElement("#channel-load");
} }
//List.populate_list(response.responseJSON.results);
} }
}); });
} }
@@ -638,14 +636,14 @@ function inIframe() {
} }
function mouseContext(left, top) { function mouseContext(left, top) {
var moveFunction = function(event) { var moveFunction = function (event) {
if ( if (
event.pageX < left - 60 || event.pageX < left - 60 ||
event.pageX > event.pageX >
left + document.querySelector(".context-menu-root").offsetWidth + 60 || left + document.querySelector(".context-menu-root").offsetWidth + 60 ||
event.pageY < top - 60 || event.pageY < top - 60 ||
event.pageY > event.pageY >
top + document.querySelector(".context-menu-root").offsetHeight + 60 top + document.querySelector(".context-menu-root").offsetHeight + 60
) { ) {
Helper.addClass(".context-menu-root", "hide"); Helper.addClass(".context-menu-root", "hide");
Helper.addClass("#context-menu-overlay", "hide"); Helper.addClass("#context-menu-overlay", "hide");
@@ -659,8 +657,6 @@ function mouseContext(left, top) {
} }
function get_np_ajax() { function get_np_ajax() {
/*var c = Crypt.get_userpass(chan.toLowerCase());
if(c == undefined) c = "";*/
Helper.ajax({ Helper.ajax({
type: "POST", type: "POST",
data: { data: {
@@ -668,19 +664,19 @@ function get_np_ajax() {
fetch_song: true, fetch_song: true,
token: zoff_api_token token: zoff_api_token
}, },
headers: { "Content-Type": "application/json;charset=UTF-8" }, headers: {
url: "Content-Type": "application/json;charset=UTF-8"
"/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/__np__", },
success: function(response) { url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/__np__",
success: function (response) {
response = JSON.parse(response); response = JSON.parse(response);
Player.getTitle(response.results[0].title, 1); Player.getTitle(response.results[0].title, 1);
}, },
error: function(response, xmlhttp) { error: function (response, xmlhttp) {
//response = JSON.parse(response);
if (response.status == 403) { if (response.status == 403) {
start_auth(); start_auth();
} else if (response.status == 429) { } else if (response.status == 429) {
setTimeout(function() { setTimeout(function () {
get_np_ajax(); get_np_ajax();
}, xmlhttp.getResponseHeader("Retry-After") * 1000); }, xmlhttp.getResponseHeader("Retry-After") * 1000);
} }
@@ -689,10 +685,6 @@ function get_np_ajax() {
} }
function del_ajax(id) { function del_ajax(id) {
/*var a = Crypt.get_pass(chan.toLowerCase());
var u = Crypt.get_userpass(chan.toLowerCase());
if(a == undefined) a = "";
if(u == undefined) u = "";*/
Helper.ajax({ Helper.ajax({
type: "DELETE", type: "DELETE",
data: { data: {
@@ -700,18 +692,19 @@ function del_ajax(id) {
userpass: "", userpass: "",
token: zoff_api_token token: zoff_api_token
}, },
headers: { "Content-Type": "application/json;charset=UTF-8" }, headers: {
"Content-Type": "application/json;charset=UTF-8"
},
url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/" + id, url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/" + id,
success: function(response) { success: function (response) {
toast("deletesong"); toast("deletesong");
get_list_ajax(); get_list_ajax();
}, },
error: function(response, xmlhttp) { error: function (response, xmlhttp) {
//response = JSON.parse(response);
if (response.status == 403) { if (response.status == 403) {
toast("listhaspass"); toast("listhaspass");
} else if (response.status == 429) { } else if (response.status == 429) {
setTimeout(function() { setTimeout(function () {
del_ajax(id); del_ajax(id);
}, xmlhttp.getResponseHeader("Retry-After") * 1000); }, xmlhttp.getResponseHeader("Retry-After") * 1000);
} }
@@ -731,10 +724,6 @@ function add_ajax(
source, source,
thumbnail thumbnail
) { ) {
/*var a = Crypt.get_pass(chan.toLowerCase());
var u = Crypt.get_userpass(chan.toLowerCase());
if(a == undefined) a = "";
if(u == undefined) u = "";*/
Helper.ajax({ Helper.ajax({
type: "POST", type: "POST",
data: { data: {
@@ -748,20 +737,21 @@ function add_ajax(
source: source, source: source,
token: zoff_api_token token: zoff_api_token
}, },
headers: { "Content-Type": "application/json;charset=UTF-8" }, headers: {
"Content-Type": "application/json;charset=UTF-8"
},
url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/" + id, url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/" + id,
success: function(response) { success: function (response) {
toast("addedsong"); toast("addedsong");
get_list_ajax(); get_list_ajax();
}, },
error: function(response, xmlhttp) { error: function (response, xmlhttp) {
//response = JSON.parse(response);
if (response.status == 403) { if (response.status == 403) {
toast("listhaspass"); toast("listhaspass");
} else if (response.status == 409) { } else if (response.status == 409) {
vote_ajax(id); vote_ajax(id);
} else if (response.status == 429) { } else if (response.status == 429) {
setTimeout(function() { setTimeout(function () {
add_ajax(id, title, duration, playlist, num, full_num, start, end); add_ajax(id, title, duration, playlist, num, full_num, start, end);
}, xmlhttp.getResponseHeader("Retry-After") * 1000); }, xmlhttp.getResponseHeader("Retry-After") * 1000);
} }
@@ -770,10 +760,6 @@ function add_ajax(
} }
function vote_ajax(id) { function vote_ajax(id) {
/*var a = Crypt.get_pass(chan.toLowerCase());
var u = Crypt.get_userpass(chan.toLowerCase());
if(a == undefined) a = "";
if(u == undefined) u = "";*/
Helper.ajax({ Helper.ajax({
type: "PUT", type: "PUT",
data: { data: {
@@ -781,18 +767,19 @@ function vote_ajax(id) {
userpass: "", userpass: "",
token: zoff_api_token token: zoff_api_token
}, },
headers: { "Content-Type": "application/json;charset=UTF-8" }, headers: {
"Content-Type": "application/json;charset=UTF-8"
},
url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/" + id, url: "/api/list/" + Helper.encodeChannelName(chan.toLowerCase()) + "/" + id,
success: function(response) { success: function (response) {
toast("voted"); toast("voted");
get_list_ajax(); get_list_ajax();
}, },
error: function(response, xmlhttp) { error: function (response, xmlhttp) {
//response = JSON.parse(response);
if (response.status == 403) { if (response.status == 403) {
toast("listhaspass"); toast("listhaspass");
} else if (response.status == 429) { } else if (response.status == 429) {
setTimeout(function() { setTimeout(function () {
vote_ajax(id); vote_ajax(id);
}, xmlhttp.getResponseHeader("Retry-After") * 1000); }, xmlhttp.getResponseHeader("Retry-After") * 1000);
} }
@@ -801,22 +788,21 @@ function vote_ajax(id) {
} }
function setup_auth_listener() { function setup_auth_listener() {
socket.on("auth_required", function() { socket.on("auth_required", function () {
start_auth(); start_auth();
}); });
socket.on("auth_accepted", function(msg) { socket.on("auth_accepted", function (msg) {
if (msg.hasOwnProperty("value") && msg.value) { if (msg.hasOwnProperty("value") && msg.value) {
if (temp_user_pass != "") { if (temp_user_pass != "") {
userpass = temp_user_pass; userpass = temp_user_pass;
//Crypt.set_userpass(chan.toLowerCase(), userpass);
} }
} }
}); });
} }
function setup_no_connection_listener() { function setup_no_connection_listener() {
socket.on("connect_failed", function() { socket.on("connect_failed", function () {
Helper.log(["Connection Failed"]); Helper.log(["Connection Failed"]);
if (!connect_error) { if (!connect_error) {
connect_error = true; connect_error = true;
@@ -828,7 +814,7 @@ function setup_no_connection_listener() {
} }
}); });
socket.on("connect_error", function() { socket.on("connect_error", function () {
Helper.log(["Connection Failed."]); Helper.log(["Connection Failed."]);
if (!connect_error) { if (!connect_error) {
connect_error = true; connect_error = true;
@@ -871,16 +857,14 @@ function loadChromecastVideo() {
seekTo: _seekTo, seekTo: _seekTo,
channel: chan.toLowerCase(), channel: chan.toLowerCase(),
source: videoSource, source: videoSource,
thumbnail: thumbnail: Player.np.thumbnail != undefined ?
Player.np.thumbnail != undefined Player.np.thumbnail : "https://img.youtube.com/vi/" + video_id + "/mqdefault.jpg"
? Player.np.thumbnail
: "https://img.youtube.com/vi/" + video_id + "/mqdefault.jpg"
}; };
castSession.loadMedia(request).then( castSession.loadMedia(request).then(
function() { function () {
console.log("Loaded chromecast-video. Don't look here, look at your TV!"); console.log("Loaded chromecast-video. Don't look here, look at your TV!");
}, },
function(errorCode) { function (errorCode) {
console.log("Error code: " + errorCode); console.log("Error code: " + errorCode);
} }
); );
@@ -1027,10 +1011,10 @@ function enable_host_mode(enabled) {
.insertAdjacentHTML( .insertAdjacentHTML(
"beforeend", "beforeend",
"<div id='join-sidebar' style='color:white;'>" + "<div id='join-sidebar' style='color:white;'>" +
document document
.querySelector("#channel-share-modal") .querySelector("#channel-share-modal")
.querySelector(".modal-content").innerHTML + .querySelector(".modal-content").innerHTML +
"</div>" "</div>"
); );
document.addEventListener("webkitfullscreenchange", exitHandler, false); document.addEventListener("webkitfullscreenchange", exitHandler, false);
document.addEventListener("mozfullscreenchange", exitHandler, false); document.addEventListener("mozfullscreenchange", exitHandler, false);
@@ -1069,19 +1053,16 @@ function enable_host_mode(enabled) {
} }
function get_list_listener() { function get_list_listener() {
socket.on("get_list", function() { socket.on("get_list", function () {
var add = ""; var add = "";
socket_connected = true; socket_connected = true;
//if(private_channel) add = Crypt.getCookie("_uI") + "_";
/*var p = Crypt.crypt_pass(Crypt.get_userpass(chan.toLowerCase()), true);
if(p == undefined) p = "";*/
socket.emit("list", { socket.emit("list", {
offline: offline, offline: offline,
version: parseInt(_VERSION), version: VERSION,
channel: add + chan.toLowerCase() channel: add + chan.toLowerCase()
}); });
}); });
socket.on("id_chromecast", function(msg) { socket.on("id_chromecast", function (msg) {
chromecast_specs_sent = true; chromecast_specs_sent = true;
castSession.sendMessage("urn:x-cast:zoff.me", { castSession.sendMessage("urn:x-cast:zoff.me", {
type: "mobilespecs", type: "mobilespecs",
@@ -1094,7 +1075,7 @@ function get_list_listener() {
function setup_suggested_listener() { function setup_suggested_listener() {
if (client) return; if (client) return;
socket.on("suggested", function(params) { socket.on("suggested", function (params) {
var single = true; var single = true;
if (params.id === undefined) single = false; if (params.id === undefined) single = false;
Suggestions.catchUserSuggests(params, single); Suggestions.catchUserSuggests(params, single);
@@ -1102,9 +1083,9 @@ function setup_suggested_listener() {
} }
function setup_viewers_listener() { function setup_viewers_listener() {
socket.on("viewers", function(view) { socket.on("viewers", function (view) {
viewers = view; viewers = view;
var outPutWord = "<i class='material-icons'>visibility</i>"; //v > 1 ? "viewers" : "viewer"; var outPutWord = "<i class='material-icons'>visibility</i>";
Helper.setHtml("#viewers", outPutWord + " " + view); Helper.setHtml("#viewers", outPutWord + " " + view);
@@ -1119,7 +1100,7 @@ function setup_admin_listener() {
} }
function setup_chat_listener() { function setup_chat_listener() {
socket.on("chat_history", function(msg) { socket.on("chat_history", function (msg) {
var data = msg.data; var data = msg.data;
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {
if (msg.all) { if (msg.all) {
@@ -1225,23 +1206,23 @@ function change_offline(enabled, already_offline) {
} }
} }
var mouseEnter = function(e) { var mouseEnter = function (e) {
Helper.removeClass("#seekToDuration", "hide"); Helper.removeClass("#seekToDuration", "hide");
}; };
var mouseLeave = function(e) { var mouseLeave = function (e) {
dragging = false; dragging = false;
Helper.addClass("#seekToDuration", "hide"); Helper.addClass("#seekToDuration", "hide");
}; };
var mouseDown = function(e) { var mouseDown = function (e) {
var acceptable = ["bar", "controls", "duration"]; var acceptable = ["bar", "controls", "duration"];
if (acceptable.indexOf(e.target.id) >= 0) { if (acceptable.indexOf(e.target.id) >= 0) {
dragging = true; dragging = true;
} }
}; };
var mouseUp = function(e) { var mouseUp = function (e) {
dragging = false; dragging = false;
}; };
@@ -1348,7 +1329,9 @@ function change_offline(enabled, already_offline) {
.removeEventListener("click", seekToClick); .removeEventListener("click", seekToClick);
Helper.removeElement("#seekToDuration"); Helper.removeElement("#seekToDuration");
socket.on("color", Player.setBGimage); socket.on("color", Player.setBGimage);
socket.emit("pos", { channel: chan.toLowerCase() }); socket.emit("pos", {
channel: chan.toLowerCase()
});
var add = ""; var add = "";
socket.emit("list", { socket.emit("list", {
version: parseInt(_VERSION), version: parseInt(_VERSION),
@@ -1481,7 +1464,7 @@ function resizePlaylistPlaying(playing, resizing) {
Helper.computedStyle("header", "height") - Helper.computedStyle("header", "height") -
64 - 64 -
40) / 40) /
71 71
); );
List.element_height = List.element_height =
(window.innerHeight - (window.innerHeight -
@@ -1489,7 +1472,7 @@ function resizePlaylistPlaying(playing, resizing) {
Helper.computedStyle("header", "height") - Helper.computedStyle("header", "height") -
64 - 64 -
40) / 40) /
temp_fit - temp_fit -
5; 5;
} }
@@ -1510,7 +1493,6 @@ function resizePlaylistPlaying(playing, resizing) {
); );
} }
} else if (List.can_fit > temp_fit) { } else if (List.can_fit > temp_fit) {
//Helper.css(document.querySelector("#wrapper").children, "display", "none");
Helper.css( Helper.css(
document.querySelector("#wrapper").children[List.page + temp_fit], document.querySelector("#wrapper").children[List.page + temp_fit],
"display", "display",
@@ -1676,8 +1658,7 @@ function toast(msg, _class) {
if (embed) return; if (embed) return;
if (Search.submitYouTubeError) { if (Search.submitYouTubeError) {
M.toast({ M.toast({
html: html: "Added most of your playlist, but something was wrong. Check the playlist..",
"Added most of your playlist, but something was wrong. Check the playlist..",
displayLength: 4000, displayLength: 4000,
classes: "red lighten connect_error" classes: "red lighten connect_error"
}); });
@@ -1714,7 +1695,6 @@ function toast(msg, _class) {
"Nope, wrong password!", "Nope, wrong password!",
"Wrong password. The authorities have been notified." "Wrong password. The authorities have been notified."
]); ]);
//Crypt.remove_pass(chan.toLowerCase());
Admin.display_logged_out(); Admin.display_logged_out();
Helper.css("#thumbnail_form", "display", "none"); Helper.css("#thumbnail_form", "display", "none");
Helper.css("#description_form", "display", "none"); Helper.css("#description_form", "display", "none");
@@ -1804,7 +1784,6 @@ function toast(msg, _class) {
"I can't let you do that", "I can't let you do that",
"Please log in to do that" "Please log in to do that"
]); ]);
//Crypt.remove_pass(chan.toLowerCase());
Admin.display_logged_out(); Admin.display_logged_out();
Helper.css("#thumbnail_form", "display", "none"); Helper.css("#thumbnail_form", "display", "none");
Helper.css("#description_form", "display", "none"); Helper.css("#description_form", "display", "none");
@@ -1851,9 +1830,9 @@ function toast(msg, _class) {
if (embed) return; if (embed) return;
tried_again = false; tried_again = false;
adminpass = adminpass =
Crypt.get_pass(chan.toLowerCase()) == undefined Crypt.get_pass(chan.toLowerCase()) == undefined ?
? Crypt.tmp_pass Crypt.tmp_pass :
: Crypt.get_pass(chan.toLowerCase()); Crypt.get_pass(chan.toLowerCase());
msg = msg =
"Correct password. You now have access to the sacred realm of The Admin."; "Correct password. You now have access to the sacred realm of The Admin.";
Helper.css("#thumbnail_form", "display", "inline-block"); Helper.css("#thumbnail_form", "display", "inline-block");
@@ -1875,7 +1854,11 @@ function toast(msg, _class) {
} }
before_toast(); before_toast();
var classes = _class == undefined ? "" : _class; var classes = _class == undefined ? "" : _class;
M.toast({ html: msg, displayLength: 4000, classes: classes }); M.toast({
html: msg,
displayLength: 4000,
classes: classes
});
} }
function emit() { function emit() {
@@ -1955,23 +1938,14 @@ function searchTimeout(event) {
code != 27 code != 27
) { ) {
clearTimeout(timeout_search); clearTimeout(timeout_search);
/*if(search_input.length < 3){
Helper.css(".results-tabs", "display", "none");
document.querySelector("#results").innerHTML = "";
document.querySelector("#results_soundcloud").innerHTML = "";
Helper.css("")
if(search_input.length == 0) {
document.querySelector("body").setAttribute("style", "overflow-y: auto");
}
}*/
if (code == 13) { if (code == 13) {
Search.search(search_input); Search.search(search_input);
Search.soundcloudSearch(search_input); Search.soundcloudSearch(search_input);
} else { } else {
timeout_search = setTimeout(function() { timeout_search = setTimeout(function () {
Search.search(search_input); Search.search(search_input);
Search.soundcloudSearch(search_input); Search.soundcloudSearch(search_input);
}, 1000); }, 1000);
} }
} }
} }

View File

@@ -1,9 +1,13 @@
import {
VERSION
} from "../../../VERSION";
var Hostcontroller = { var Hostcontroller = {
enabled: true, enabled: true,
old_id: null, old_id: null,
host_listener: function(id) { host_listener: function (id) {
if (client) return; if (client) return;
Helper.log(["Host-listener triggered", "Host-listener id:" + id]); Helper.log(["Host-listener triggered", "Host-listener id:" + id]);
if (Hostcontroller.old_id === null) Hostcontroller.old_id = id; if (Hostcontroller.old_id === null) Hostcontroller.old_id = id;
@@ -16,8 +20,10 @@ var Hostcontroller = {
window.location.protocol + "//remote." + window.location.host + "/" + id; window.location.protocol + "//remote." + window.location.host + "/" + id;
if (embed) { if (embed) {
if (window.parentWindow && window.parentOrigin) { if (window.parentWindow && window.parentOrigin) {
window.parentWindow.postMessage( window.parentWindow.postMessage({
{ type: "controller", id: id }, type: "controller",
id: id
},
window.parentOrigin window.parentOrigin
); );
} }
@@ -29,7 +35,7 @@ var Hostcontroller = {
.setAttribute( .setAttribute(
"src", "src",
"https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" + "https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" +
codeURL codeURL
); );
document.querySelector("#code-link").setAttribute("href", codeURL); document.querySelector("#code-link").setAttribute("href", codeURL);
} }
@@ -39,7 +45,7 @@ var Hostcontroller = {
} }
}, },
host_on_action: function(arr) { host_on_action: function (arr) {
if (client) return; if (client) return;
if (Hostcontroller.enabled) { if (Hostcontroller.enabled) {
if (arr.type == "volume") { if (arr.type == "volume") {
@@ -71,20 +77,19 @@ var Hostcontroller = {
.setAttribute( .setAttribute(
"src", "src",
"https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" + "https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L|1&chl=" +
shareCodeUrl shareCodeUrl
); );
Helper.setHtml( Helper.setHtml(
"#channel-name-join", "#channel-name-join",
"client." + "client." +
window.location.hostname + window.location.hostname +
"/" + "/" +
encodeURIComponent(chan.toLowerCase()) encodeURIComponent(chan.toLowerCase())
); );
w_p = true; w_p = true;
var add = ""; var add = "";
//if(private_channel) add = Crypt.getCookie("_uI") + "_";
socket.emit("list", { socket.emit("list", {
version: parseInt(_VERSION), version: parseInt(VERSION),
channel: add + chan.toLowerCase() channel: add + chan.toLowerCase()
}); });
@@ -103,7 +108,7 @@ var Hostcontroller = {
} }
}, },
change_enabled: function(val) { change_enabled: function (val) {
if (client) return; if (client) return;
Hostcontroller.enabled = val; Hostcontroller.enabled = val;
try { try {
@@ -111,4 +116,4 @@ var Hostcontroller = {
Hostcontroller.enabled; Hostcontroller.enabled;
} catch (e) {} } catch (e) {}
} }
}; };

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,7 @@
import {
pathThumbnails
} from "../settings/globals";
var express = require("express"); var express = require("express");
var router = express.Router(); var router = express.Router();
var path = require("path"); var path = require("path");
@@ -21,15 +25,17 @@ var ObjectId = mongojs.ObjectId;
var sIO = require(path.join(__dirname, "../../apps/client.js")).socketIO; var sIO = require(path.join(__dirname, "../../apps/client.js")).socketIO;
var projects = require(pathThumbnails + "/handlers/aggregates.js"); var projects = require(pathThumbnails + "/handlers/aggregates.js");
router.use(function(req, res, next) { router.use(function (req, res, next) {
next(); // make sure we go to the next routes and don't stop here next(); // make sure we go to the next routes and don't stop here
}); });
router.route("/api/lists").get(function(req, res) { router.route("/api/lists").get(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
db.collection("frontpage_lists") db.collection("frontpage_lists")
.find() .find()
.sort({ count: -1 }, function(err, docs) { .sort({
count: -1
}, function (err, docs) {
res.json(docs); res.json(docs);
}); });
} else { } else {
@@ -37,9 +43,9 @@ router.route("/api/lists").get(function(req, res) {
} }
}); });
router.route("/api/thumbnails").get(function(req, res) { router.route("/api/thumbnails").get(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
db.collection("suggested_thumbnails").find(function(err, docs) { db.collection("suggested_thumbnails").find(function (err, docs) {
res.json(docs); res.json(docs);
}); });
} else { } else {
@@ -47,9 +53,9 @@ router.route("/api/thumbnails").get(function(req, res) {
} }
}); });
router.route("/api/descriptions").get(function(req, res) { router.route("/api/descriptions").get(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
db.collection("suggested_descriptions").find(function(err, docs) { db.collection("suggested_descriptions").find(function (err, docs) {
res.json(docs); res.json(docs);
}); });
} else { } else {
@@ -57,9 +63,9 @@ router.route("/api/descriptions").get(function(req, res) {
} }
}); });
router.route("/api/rules").get(function(req, res) { router.route("/api/rules").get(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
db.collection("suggested_rules").find(function(err, docs) { db.collection("suggested_rules").find(function (err, docs) {
res.json(docs); res.json(docs);
}); });
} else { } else {
@@ -67,30 +73,44 @@ router.route("/api/rules").get(function(req, res) {
} }
}); });
router.route("/api/approve_thumbnail").post(function(req, res) { router.route("/api/approve_thumbnail").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var channel = req.body.channel; var channel = req.body.channel;
db.collection("suggested_thumbnails").find({ channel: channel }, function( db.collection("suggested_thumbnails").find({
channel: channel
}, function (
err, err,
docs docs
) { ) {
var thumbnail = docs[0].thumbnail; var thumbnail = docs[0].thumbnail;
db.collection("frontpage_lists").update( db.collection("frontpage_lists").update({
{ _id: channel }, _id: channel
{ $set: { thumbnail: thumbnail } }, }, {
{ upsert: true }, $set: {
function(err, docs) { thumbnail: thumbnail
db.collection(channel + "_settings").update( }
{ views: { $exists: true } }, }, {
{ $set: { thumbnail: thumbnail } }, upsert: true
{ upsert: true }, },
function(err, docs) { function (err, docs) {
db.collection("suggested_thumbnails").remove( db.collection(channel + "_settings").update({
{ channel: channel }, views: {
function(err, docs) { $exists: true
}
}, {
$set: {
thumbnail: thumbnail
}
}, {
upsert: true
},
function (err, docs) {
db.collection("suggested_thumbnails").remove({
channel: channel
},
function (err, docs) {
db.collection(channel + "_settings").aggregate( db.collection(channel + "_settings").aggregate(
[ [{
{
$match: { $match: {
id: "config" id: "config"
} }
@@ -99,7 +119,7 @@ router.route("/api/approve_thumbnail").post(function(req, res) {
$project: projects.toShowConfig $project: projects.toShowConfig
} }
], ],
function(err, docs) { function (err, docs) {
if (docs[0].adminpass !== "") docs[0].adminpass = true; if (docs[0].adminpass !== "") docs[0].adminpass = true;
if ( if (
docs[0].hasOwnProperty("userpass") && docs[0].hasOwnProperty("userpass") &&
@@ -123,10 +143,12 @@ router.route("/api/approve_thumbnail").post(function(req, res) {
} }
}); });
router.route("/api/deny_thumbnail").post(function(req, res) { router.route("/api/deny_thumbnail").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var channel = req.body.channel; var channel = req.body.channel;
db.collection("suggested_thumbnails").remove({ channel: channel }, function( db.collection("suggested_thumbnails").remove({
channel: channel
}, function (
err, err,
docs docs
) { ) {
@@ -137,25 +159,34 @@ router.route("/api/deny_thumbnail").post(function(req, res) {
} }
}); });
router.route("/api/approve_rules").post(function(req, res) { router.route("/api/approve_rules").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var channel = req.body.channel; var channel = req.body.channel;
db.collection("suggested_rules").find({ channel: channel }, function( db.collection("suggested_rules").find({
channel: channel
}, function (
err, err,
docs docs
) { ) {
var rules = docs[0].rules; var rules = docs[0].rules;
db.collection(channel + "_settings").update( db.collection(channel + "_settings").update({
{ views: { $exists: true } }, views: {
{ $set: { rules: rules } }, $exists: true
{ upsert: true }, }
function(err, docs) { }, {
db.collection("suggested_rules").remove( $set: {
{ channel: channel }, rules: rules
function(err, docs) { }
}, {
upsert: true
},
function (err, docs) {
db.collection("suggested_rules").remove({
channel: channel
},
function (err, docs) {
db.collection(channel + "_settings").aggregate( db.collection(channel + "_settings").aggregate(
[ [{
{
$match: { $match: {
id: "config" id: "config"
} }
@@ -164,7 +195,7 @@ router.route("/api/approve_rules").post(function(req, res) {
$project: projects.toShowConfig $project: projects.toShowConfig
} }
], ],
function(err, docs) { function (err, docs) {
if (docs[0].adminpass !== "") docs[0].adminpass = true; if (docs[0].adminpass !== "") docs[0].adminpass = true;
if ( if (
docs[0].hasOwnProperty("userpass") && docs[0].hasOwnProperty("userpass") &&
@@ -186,10 +217,12 @@ router.route("/api/approve_rules").post(function(req, res) {
} }
}); });
router.route("/api/deny_rules").post(function(req, res) { router.route("/api/deny_rules").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var channel = req.body.channel; var channel = req.body.channel;
db.collection("suggested_rules").remove({ channel: channel }, function( db.collection("suggested_rules").remove({
channel: channel
}, function (
err, err,
docs docs
) { ) {
@@ -200,16 +233,21 @@ router.route("/api/deny_rules").post(function(req, res) {
} }
}); });
router.route("/api/remove_rules").post(function(req, res) { router.route("/api/remove_rules").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var channel = req.body.channel; var channel = req.body.channel;
db.collection(channel + "_settings").update( db.collection(channel + "_settings").update({
{ views: { $exists: true } }, views: {
{ $set: { rules: "" } }, $exists: true
function(err, docs) { }
}, {
$set: {
rules: ""
}
},
function (err, docs) {
db.collection(channel + "_settings").aggregate( db.collection(channel + "_settings").aggregate(
[ [{
{
$match: { $match: {
id: "config" id: "config"
} }
@@ -218,7 +256,7 @@ router.route("/api/remove_rules").post(function(req, res) {
$project: projects.toShowConfig $project: projects.toShowConfig
} }
], ],
function(err, docs) { function (err, docs) {
if (docs[0].adminpass !== "") docs[0].adminpass = true; if (docs[0].adminpass !== "") docs[0].adminpass = true;
if (docs[0].hasOwnProperty("userpass") && docs[0].userpass != "") if (docs[0].hasOwnProperty("userpass") && docs[0].userpass != "")
docs[0].userpass = true; docs[0].userpass = true;
@@ -234,29 +272,42 @@ router.route("/api/remove_rules").post(function(req, res) {
} }
}); });
router.route("/api/approve_description").post(function(req, res) { router.route("/api/approve_description").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var channel = req.body.channel; var channel = req.body.channel;
db.collection("suggested_descriptions").find({ channel: channel }, function( db.collection("suggested_descriptions").find({
channel: channel
}, function (
err, err,
docs docs
) { ) {
var description = docs[0].description; var description = docs[0].description;
db.collection("frontpage_lists").update( db.collection("frontpage_lists").update({
{ _id: channel }, _id: channel
{ $set: { description: description } }, }, {
{ upsert: true }, $set: {
function(err, docs) { description: description
db.collection(channel + "_settings").update( }
{ views: { $exists: true } }, }, {
{ $set: { description: description } }, upsert: true
function(err, docs) { },
db.collection("suggested_descriptions").remove( function (err, docs) {
{ channel: channel }, db.collection(channel + "_settings").update({
function(err, docs) { views: {
$exists: true
}
}, {
$set: {
description: description
}
},
function (err, docs) {
db.collection("suggested_descriptions").remove({
channel: channel
},
function (err, docs) {
db.collection(channel + "_settings").aggregate( db.collection(channel + "_settings").aggregate(
[ [{
{
$match: { $match: {
id: "config" id: "config"
} }
@@ -265,7 +316,7 @@ router.route("/api/approve_description").post(function(req, res) {
$project: projects.toShowConfig $project: projects.toShowConfig
} }
], ],
function(err, docs) { function (err, docs) {
if (docs[0].adminpass !== "") docs[0].adminpass = true; if (docs[0].adminpass !== "") docs[0].adminpass = true;
if ( if (
docs[0].hasOwnProperty("userpass") && docs[0].hasOwnProperty("userpass") &&
@@ -289,13 +340,14 @@ router.route("/api/approve_description").post(function(req, res) {
} }
}); });
router.route("/api/deny_description").post(function(req, res) { router.route("/api/deny_description").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var channel = req.body.channel; var channel = req.body.channel;
db.collection("suggested_descriptions").remove( db.collection("suggested_descriptions").remove({
{ channel: channel }, channel: channel
},
1, 1,
function(err, docs) { function (err, docs) {
res.send(true); res.send(true);
} }
); );
@@ -304,20 +356,29 @@ router.route("/api/deny_description").post(function(req, res) {
} }
}); });
router.route("/api/remove_thumbnail").post(function(req, res) { router.route("/api/remove_thumbnail").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var channel = req.body.channel; var channel = req.body.channel;
db.collection("frontpage_lists").update( db.collection("frontpage_lists").update({
{ _id: channel }, _id: channel
{ $set: { thumbnail: "" } }, }, {
function(err, docs) { $set: {
db.collection(channel + "_settings").update( thumbnail: ""
{ views: { $exists: true } }, }
{ $set: { thumbnail: "" } }, },
function(err, docs) { function (err, docs) {
db.collection(channel + "_settings").update({
views: {
$exists: true
}
}, {
$set: {
thumbnail: ""
}
},
function (err, docs) {
db.collection(channel + "_settings").aggregate( db.collection(channel + "_settings").aggregate(
[ [{
{
$match: { $match: {
id: "config" id: "config"
} }
@@ -326,7 +387,7 @@ router.route("/api/remove_thumbnail").post(function(req, res) {
$project: projects.toShowConfig $project: projects.toShowConfig
} }
], ],
function(err, docs) { function (err, docs) {
if (docs[0].adminpass !== "") docs[0].adminpass = true; if (docs[0].adminpass !== "") docs[0].adminpass = true;
if ( if (
docs[0].hasOwnProperty("userpass") && docs[0].hasOwnProperty("userpass") &&
@@ -347,20 +408,29 @@ router.route("/api/remove_thumbnail").post(function(req, res) {
} }
}); });
router.route("/api/remove_description").post(function(req, res) { router.route("/api/remove_description").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var channel = req.body.channel; var channel = req.body.channel;
db.collection("frontpage_lists").update( db.collection("frontpage_lists").update({
{ _id: channel }, _id: channel
{ $set: { description: "" } }, }, {
function(err, docs) { $set: {
db.collection(channel + "_settings").update( description: ""
{ views: { $exists: true } }, }
{ $set: { description: "" } }, },
function(err, docs) { function (err, docs) {
db.collection(channel + "_settings").update({
views: {
$exists: true
}
}, {
$set: {
description: ""
}
},
function (err, docs) {
db.collection(channel + "_settings").aggregate( db.collection(channel + "_settings").aggregate(
[ [{
{
$match: { $match: {
id: "config" id: "config"
} }
@@ -369,7 +439,7 @@ router.route("/api/remove_description").post(function(req, res) {
$project: projects.toShowConfig $project: projects.toShowConfig
} }
], ],
function(err, docs) { function (err, docs) {
if (docs[0].adminpass !== "") docs[0].adminpass = true; if (docs[0].adminpass !== "") docs[0].adminpass = true;
if ( if (
docs[0].hasOwnProperty("userpass") && docs[0].hasOwnProperty("userpass") &&
@@ -390,12 +460,17 @@ router.route("/api/remove_description").post(function(req, res) {
} }
}); });
router.route("/api/names").get(function(req, res) { router.route("/api/names").get(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
db.collection("registered_users").find( db.collection("registered_users").find({
{ _id: { $exists: true } }, _id: {
{ _id: 1, icon: 1 }, $exists: true
function(err, docs) { }
}, {
_id: 1,
icon: 1
},
function (err, docs) {
res.json(docs); res.json(docs);
} }
); );
@@ -404,14 +479,18 @@ router.route("/api/names").get(function(req, res) {
} }
}); });
router.route("/api/names").post(function(req, res) { router.route("/api/names").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var icon = req.body.icon; var icon = req.body.icon;
var name = req.body.name; var name = req.body.name;
db.collection("registered_users").update( db.collection("registered_users").update({
{ _id: name }, _id: name
{ $set: { icon: icon } }, }, {
function(err, docs) { $set: {
icon: icon
}
},
function (err, docs) {
if (err) res.send(false); if (err) res.send(false);
else res.send(true); else res.send(true);
} }
@@ -421,10 +500,12 @@ router.route("/api/names").post(function(req, res) {
} }
}); });
router.route("/api/names").delete(function(req, res) { router.route("/api/names").delete(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var name = req.body.name; var name = req.body.name;
db.collection("registered_users").remove({ _id: name }, function( db.collection("registered_users").remove({
_id: name
}, function (
err, err,
docs docs
) { ) {
@@ -436,17 +517,23 @@ router.route("/api/names").delete(function(req, res) {
} }
}); });
router.route("/api/token").get(function(req, res) { router.route("/api/token").get(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
token_db.collection("tokens").find(function(err, docs) { token_db.collection("tokens").find(function (err, docs) {
if (docs.length == 1) { if (docs.length == 1) {
res.json({ token: docs[0].token }); res.json({
token: docs[0].token
});
} else { } else {
var id = new Buffer(makeid()).toString("base64"); var id = new Buffer(makeid()).toString("base64");
token_db token_db
.collection("tokens") .collection("tokens")
.insert({ token: id }, function(err, docs) { .insert({
res.json({ token: id }); token: id
}, function (err, docs) {
res.json({
token: id
});
}); });
} }
}); });
@@ -455,11 +542,15 @@ router.route("/api/token").get(function(req, res) {
} }
}); });
router.route("/api/api_token").get(function(req, res) { router.route("/api/api_token").get(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
token_db token_db
.collection("api_token") .collection("api_token")
.find({ token: { $exists: true } }, function(err, all) { .find({
token: {
$exists: true
}
}, function (err, all) {
res.json(all); res.json(all);
}); });
} else { } else {
@@ -467,12 +558,14 @@ router.route("/api/api_token").get(function(req, res) {
} }
}); });
router.route("/api/api_token").delete(function(req, res) { router.route("/api/api_token").delete(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var id = req.body.id; var id = req.body.id;
token_db token_db
.collection("api_token") .collection("api_token")
.remove({ _id: ObjectId(id) }, function(err, success) { .remove({
_id: ObjectId(id)
}, function (err, success) {
if (err) { if (err) {
res.send("failed"); res.send("failed");
return; return;
@@ -482,7 +575,7 @@ router.route("/api/api_token").delete(function(req, res) {
} }
}); });
router.route("/api/api_token").put(function(req, res) { router.route("/api/api_token").put(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var id = req.body.id; var id = req.body.id;
var limit = req.body.limit; var limit = req.body.limit;
@@ -492,7 +585,13 @@ router.route("/api/api_token").put(function(req, res) {
} }
token_db token_db
.collection("api_token") .collection("api_token")
.update({ _id: ObjectId(id) }, { $set: { limit: limit } }, function( .update({
_id: ObjectId(id)
}, {
$set: {
limit: limit
}
}, function (
err, err,
success success
) { ) {
@@ -505,7 +604,7 @@ router.route("/api/api_token").put(function(req, res) {
} }
}); });
router.route("/api/api_token").post(function(req, res) { router.route("/api/api_token").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var name = req.body.name; var name = req.body.name;
var id = crypto var id = crypto
@@ -514,9 +613,18 @@ router.route("/api/api_token").post(function(req, res) {
.digest("base64"); .digest("base64");
token_db token_db
.collection("api_token") .collection("api_token")
.insert({ name: name, token: id, usage: 0 }, function(err, docs) { .insert({
token_db.collection("api_token").find({ token: id }, function(err, d) { name: name,
res.json({ token: id, _id: d[0]._id }); token: id,
usage: 0
}, function (err, docs) {
token_db.collection("api_token").find({
token: id
}, function (err, d) {
res.json({
token: id,
_id: d[0]._id
});
}); });
}); });
} else { } else {
@@ -524,12 +632,14 @@ router.route("/api/api_token").post(function(req, res) {
} }
}); });
router.route("/api/delete").post(function(req, res) { router.route("/api/delete").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var list = req.body._id; var list = req.body._id;
db.collection(list).drop(function(err, docs) { db.collection(list).drop(function (err, docs) {
db.collection(list + "_settings").drop(function(err, docs) { db.collection(list + "_settings").drop(function (err, docs) {
db.collection("frontpage_lists").remove({ _id: list }, function( db.collection("frontpage_lists").remove({
_id: list
}, function (
err, err,
docs docs
) { ) {
@@ -542,13 +652,15 @@ router.route("/api/delete").post(function(req, res) {
} }
}); });
router.route("/api/remove_token").get(function(req, res) { router.route("/api/remove_token").get(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
token_db.collection("tokens").find(function(err, docs) { token_db.collection("tokens").find(function (err, docs) {
if (docs.length == 1) { if (docs.length == 1) {
token_db token_db
.collection("tokens") .collection("tokens")
.remove({ token: docs[0].token }, function(err, docs) { .remove({
token: docs[0].token
}, function (err, docs) {
res.send(true); res.send(true);
}); });
} else { } else {
@@ -560,17 +672,25 @@ router.route("/api/remove_token").get(function(req, res) {
} }
}); });
router.route("/api/pinned").post(function(req, res) { router.route("/api/pinned").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var to_pin = req.body._id; var to_pin = req.body._id;
db.collection("frontpage_lists").update( db.collection("frontpage_lists").update({
{ pinned: 1 }, pinned: 1
{ $set: { pinned: 0 } }, }, {
function(err, resp) { $set: {
db.collection("frontpage_lists").update( pinned: 0
{ _id: to_pin }, }
{ $set: { pinned: 1 } }, },
function(err, resp) { function (err, resp) {
db.collection("frontpage_lists").update({
_id: to_pin
}, {
$set: {
pinned: 1
}
},
function (err, resp) {
res.send(true); res.send(true);
} }
); );
@@ -581,13 +701,19 @@ router.route("/api/pinned").post(function(req, res) {
} }
}); });
router.route("/api/admin").post(function(req, res) { router.route("/api/admin").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var to_remove = req.body._id; var to_remove = req.body._id;
db.collection(to_remove + "_settings").update( db.collection(to_remove + "_settings").update({
{ views: { $exists: true } }, views: {
{ $set: { adminpass: "" } }, $exists: true
function(err, docs) { }
}, {
$set: {
adminpass: ""
}
},
function (err, docs) {
res.send(true); res.send(true);
} }
); );
@@ -596,13 +722,19 @@ router.route("/api/admin").post(function(req, res) {
} }
}); });
router.route("/api/userpass").post(function(req, res) { router.route("/api/userpass").post(function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
var to_remove = req.body._id; var to_remove = req.body._id;
db.collection(to_remove + "_settings").update( db.collection(to_remove + "_settings").update({
{ views: { $exists: true } }, views: {
{ $set: { userpass: "" } }, $exists: true
function(err, docs) { }
}, {
$set: {
userpass: ""
}
},
function (err, docs) {
res.send(true); res.send(true);
} }
); );
@@ -622,4 +754,4 @@ function makeid() {
return text; return text;
} }
module.exports = router; module.exports = router;

File diff suppressed because it is too large Load Diff

View File

@@ -1,27 +1,32 @@
import {
pathThumbnails
} from "../settings/globals";
var express = require("express"); var express = require("express");
const path = require("path"); const path = require("path");
var router = express.Router(); var router = express.Router();
router.use(function(req, res, next) { router.use(function (req, res, next) {
next(); // make sure we go to the next routes and don't stop here next(); // make sure we go to the next routes and don't stop here
}); });
router.route("/favicon.ico").get(function(req, res, next) { router.route("/favicon.ico").get(function (req, res, next) {
res.sendFile(path.join(pathThumbnails, "/public/assets/images/favicon.ico")); res.sendFile(path.join(pathThumbnails, "/public/assets/images/favicon.ico"));
}); });
router.route("/browserconfig.xml").get(function(req, res, next) { router.route("/browserconfig.xml").get(function (req, res, next) {
res.sendFile( res.sendFile(
path.join(pathThumbnails, "/public/assets/images/browserconfig.xml") path.join(pathThumbnails, "/public/assets/images/browserconfig.xml")
); );
}); });
router.route("/apple-touch-icon.png").get(function(req, res, next) { router.route("/apple-touch-icon.png").get(function (req, res, next) {
res.sendFile( res.sendFile(
path.join(pathThumbnails, "/public/assets/images/apple-touch-icon.png") path.join(pathThumbnails, "/public/assets/images/apple-touch-icon.png")
); );
}); });
router.route("/apple-touch-icon-precomposed.png").get(function(req, res, next) { router.route("/apple-touch-icon-precomposed.png").get(function (req, res, next) {
res.sendFile( res.sendFile(
path.join( path.join(
pathThumbnails, pathThumbnails,
@@ -30,4 +35,4 @@ router.route("/apple-touch-icon-precomposed.png").get(function(req, res, next) {
); );
}); });
module.exports = router; module.exports = router;

View File

@@ -1,3 +1,7 @@
import {
pathThumbnails
} from "../settings/globals";
var express = require("express"); var express = require("express");
var router = express.Router(); var router = express.Router();
var path = require("path"); var path = require("path");
@@ -9,7 +13,6 @@ var adsense = "xx";
var adds = false; var adds = false;
var mongojs = require("mongojs"); var mongojs = require("mongojs");
var token_db = mongojs("tokens"); var token_db = mongojs("tokens");
var Functions = require(pathThumbnails + "/handlers/functions.js");
var Frontpage = require(pathThumbnails + "/handlers/frontpage.js"); var Frontpage = require(pathThumbnails + "/handlers/frontpage.js");
var db = require(pathThumbnails + "/handlers/db.js"); var db = require(pathThumbnails + "/handlers/db.js");
@@ -50,28 +53,28 @@ try {
}; };
} }
router.use(recaptcha.middleware.render, function(req, res, next) { router.use(recaptcha.middleware.render, function (req, res, next) {
next(); // make sure we go to the next routes and don't stop here next(); // make sure we go to the next routes and don't stop here
}); });
router.route("/:channel_name").get(function(req, res, next) { router.route("/:channel_name").get(function (req, res, next) {
channel(req, res, next); channel(req, res, next);
}); });
router.route("/r/:base64data").get(function(req, res, next) { router.route("/r/:base64data").get(function (req, res, next) {
var channelToRedirect = Buffer.from(req.params.base64data, "base64"); var channelToRedirect = Buffer.from(req.params.base64data, "base64");
res.redirect("/" + channelToRedirect); res.redirect("/" + channelToRedirect);
}); });
router.route("/").get(function(req, res, next) { router.route("/").get(function (req, res, next) {
root(req, res, next); root(req, res, next);
}); });
router.route("/").post(function(req, res, next) { router.route("/").post(function (req, res, next) {
root(req, res, next); root(req, res, next);
}); });
router.route("/api/embed").get(function(req, res, next) { router.route("/api/embed").get(function (req, res, next) {
var data = { var data = {
year: year, year: year,
type: "video", type: "video",
@@ -85,11 +88,11 @@ router.route("/api/embed").get(function(req, res, next) {
res.render("layouts/client/embed", data); res.render("layouts/client/embed", data);
}); });
router.route("/api/oauth").get(function(req, res, next) { router.route("/api/oauth").get(function (req, res, next) {
res.sendFile(path.join(pathThumbnails, "/public/assets/html/callback.html")); res.sendFile(path.join(pathThumbnails, "/public/assets/html/callback.html"));
}); });
router.route("/api/apply").get(function(req, res, next) { router.route("/api/apply").get(function (req, res, next) {
var data = { var data = {
year: year, year: year,
javascript_file: "token.min.js", javascript_file: "token.min.js",
@@ -108,17 +111,25 @@ router.route("/api/apply").get(function(req, res, next) {
res.render("layouts/client/token", data); res.render("layouts/client/token", data);
}); });
router.route("/api/apply/:id").get(function(req, res) { router.route("/api/apply/:id").get(function (req, res) {
var id = req.params.id; var id = req.params.id;
token_db.collection("api_links").find({ id: id }, function(err, result) { token_db.collection("api_links").find({
id: id
}, function (err, result) {
if (result.length == 1) { if (result.length == 1) {
token_db.collection("api_links").remove({ id: id }, function(e, d) { token_db.collection("api_links").remove({
id: id
}, function (e, d) {
token_db token_db
.collection("api_token") .collection("api_token")
.update( .update({
{ token: result[0].token }, token: result[0].token
{ $set: { active: true } }, }, {
function(e, d) { $set: {
active: true
}
},
function (e, d) {
var data = { var data = {
year: year, year: year,
javascript_file: "token.min.js", javascript_file: "token.min.js",
@@ -161,12 +172,12 @@ router.route("/api/apply/:id").get(function(req, res) {
function root(req, res, next) { function root(req, res, next) {
try { try {
var url = req.headers["x-forwarded-host"] var url = req.headers["x-forwarded-host"] ?
? req.headers["x-forwarded-host"] req.headers["x-forwarded-host"] :
: req.headers.host.split(":")[0]; req.headers.host.split(":")[0];
var subdomain = req.headers["x-forwarded-host"] var subdomain = req.headers["x-forwarded-host"] ?
? req.headers["x-forwarded-host"].split(".") req.headers["x-forwarded-host"].split(".") :
: req.headers.host.split(":")[0].split("."); req.headers.host.split(":")[0].split(".");
if (subdomain[0] == "remote") { if (subdomain[0] == "remote") {
var data = { var data = {
year: year, year: year,
@@ -202,8 +213,10 @@ function root(req, res, next) {
if (subdomain[0] == "client") { if (subdomain[0] == "client") {
data.client = true; data.client = true;
} }
Frontpage.get_frontpage_lists(function(err, docs) { Frontpage.get_frontpage_lists(function (err, docs) {
db.collection("connected_users").find({ _id: "total_users" }, function( db.collection("connected_users").find({
_id: "total_users"
}, function (
err, err,
tot tot
) { ) {
@@ -228,12 +241,12 @@ function root(req, res, next) {
function channel(req, res, next) { function channel(req, res, next) {
try { try {
var url = req.headers["x-forwarded-host"] var url = req.headers["x-forwarded-host"] ?
? req.headers["x-forwarded-host"] req.headers["x-forwarded-host"] :
: req.headers.host.split(":")[0]; req.headers.host.split(":")[0];
var subdomain = req.headers["x-forwarded-host"] var subdomain = req.headers["x-forwarded-host"] ?
? req.headers["x-forwarded-host"].split(".") req.headers["x-forwarded-host"].split(".") :
: req.headers.host.split(":")[0].split("."); req.headers.host.split(":")[0].split(".");
if (subdomain[0] == "remote") { if (subdomain[0] == "remote") {
var data = { var data = {
year: year, year: year,
@@ -285,4 +298,4 @@ function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1); return string.charAt(0).toUpperCase() + string.slice(1);
} }
module.exports = router; module.exports = router;

View File

@@ -0,0 +1,6 @@
import * as path from "path";
import version from "../VERSION";
export const publicPath = path.join(__dirname, "public");
export const pathThumbnails = __dirname;
export const VERSION = version;

7
server/start.js Normal file
View File

@@ -0,0 +1,7 @@
// Transpile all code following this line with babel and use '@babel/preset-env' (aka ES6) preset.
require("@babel/register")({
presets: ["@babel/preset-env"]
});
// Import the rest of our application.
module.exports = require('./app.js')