mirror of
https://github.com/KevinMidboe/zoff.git
synced 2025-10-29 01:40:24 +00:00
Working api-endpoint for strict-skipping
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -6,6 +6,7 @@ server/config/cert_config.js
|
|||||||
server/config/recaptcha.js
|
server/config/recaptcha.js
|
||||||
server/config/analytics.js
|
server/config/analytics.js
|
||||||
server/config/google.js
|
server/config/google.js
|
||||||
|
server/config/allowed_api.js
|
||||||
server/public/assets/dist/maps/
|
server/public/assets/dist/maps/
|
||||||
server/public/assets/dist/callback.min.js
|
server/public/assets/dist/callback.min.js
|
||||||
server/public/assets/dist/token.min.js
|
server/public/assets/dist/token.min.js
|
||||||
|
|||||||
@@ -87,9 +87,10 @@ app.socketIO = io;
|
|||||||
|
|
||||||
|
|
||||||
/* Globally needed "libraries" and files */
|
/* Globally needed "libraries" and files */
|
||||||
var Functions = require(pathThumbnails + '/handlers/functions.js');
|
|
||||||
var router = require(pathThumbnails + '/routing/client/router.js');
|
var router = require(pathThumbnails + '/routing/client/router.js');
|
||||||
var api = require(pathThumbnails + '/routing/client/api.js');
|
var api_file = require(pathThumbnails + '/routing/client/api.js');
|
||||||
|
var api = api_file.router;
|
||||||
|
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) {
|
||||||
|
|||||||
3
server/config/allowed_api.example.js
Normal file
3
server/config/allowed_api.example.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
var key = [""];
|
||||||
|
|
||||||
|
module.exports = key;
|
||||||
@@ -6,7 +6,7 @@ var ObjectId = mongojs.ObjectId;
|
|||||||
var token_db = mongojs("tokens");
|
var token_db = mongojs("tokens");
|
||||||
var cookieParser = require("cookie-parser");
|
var cookieParser = require("cookie-parser");
|
||||||
var db = require(pathThumbnails + '/handlers/db.js');
|
var db = require(pathThumbnails + '/handlers/db.js');
|
||||||
var secrets = require(pathThumbnails + '/config/api_key.js');
|
var allowed_key = require(pathThumbnails + '/config/allowed_api.js');
|
||||||
var crypto = require('crypto');
|
var crypto = require('crypto');
|
||||||
var List = require(pathThumbnails + '/handlers/list.js');
|
var List = require(pathThumbnails + '/handlers/list.js');
|
||||||
var Functions = require(pathThumbnails + '/handlers/functions.js');
|
var Functions = require(pathThumbnails + '/handlers/functions.js');
|
||||||
@@ -15,9 +15,13 @@ var Search = require(pathThumbnails + '/handlers/search.js');
|
|||||||
var uniqid = require('uniqid');
|
var uniqid = require('uniqid');
|
||||||
var Filter = require('bad-words');
|
var Filter = require('bad-words');
|
||||||
var filter = new Filter({ placeHolder: 'x'});
|
var filter = new Filter({ placeHolder: 'x'});
|
||||||
var sIO = require(path.join(__dirname, '../../apps/client.js')).socketIO;
|
|
||||||
|
var _exports = {
|
||||||
|
router: router,
|
||||||
|
sIO: {}
|
||||||
|
}
|
||||||
var projects = require(pathThumbnails + "/handlers/aggregates.js");
|
var projects = require(pathThumbnails + "/handlers/aggregates.js");
|
||||||
console.log(path.join(__dirname, '../../apps/client.js'));
|
|
||||||
var error = {
|
var error = {
|
||||||
not_found: {
|
not_found: {
|
||||||
youtube: {
|
youtube: {
|
||||||
@@ -69,6 +73,24 @@ var error = {
|
|||||||
success: false,
|
success: false,
|
||||||
results: [],
|
results: [],
|
||||||
},
|
},
|
||||||
|
settings: {
|
||||||
|
status: 409,
|
||||||
|
error: "The channel doesn't have strict skipping enabled.",
|
||||||
|
success: false,
|
||||||
|
results: [],
|
||||||
|
},
|
||||||
|
already_skip: {
|
||||||
|
status: 206,
|
||||||
|
error: false,
|
||||||
|
success: true,
|
||||||
|
results: [],
|
||||||
|
},
|
||||||
|
more_skip_needed: {
|
||||||
|
status: 202,
|
||||||
|
error: false,
|
||||||
|
success: true,
|
||||||
|
results: [],
|
||||||
|
},
|
||||||
no_error: {
|
no_error: {
|
||||||
status: 200,
|
status: 200,
|
||||||
error: false,
|
error: false,
|
||||||
@@ -278,69 +300,64 @@ router.route('/api/skip/:channel_name').post(function(req, res) {
|
|||||||
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
|
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
|
||||||
res.header({"Content-Type": "application/json"});
|
res.header({"Content-Type": "application/json"});
|
||||||
|
|
||||||
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
|
|
||||||
var api_key = req.body.api_key;
|
var api_key = req.body.api_key;
|
||||||
//var id = req.body.id;
|
|
||||||
var guid = req.body.chat_name;
|
var guid = req.body.chat_name;
|
||||||
var channel_name = cleanChannelName(req.params.channel_name);
|
var channel_name = cleanChannelName(req.params.channel_name);
|
||||||
var userpass = "";
|
var userpass = "";
|
||||||
if(req.body.userpass) userpass = crypto.createHash('sha256').update(Functions.decrypt_string(req.body.userpass)).digest("base64");
|
if(req.body.userpass) userpass = crypto.createHash('sha256').update(Functions.decrypt_string(req.body.userpass)).digest("base64");
|
||||||
console.log(api_key, guid, channel_name, userpass);
|
if(allowed_key.indexOf(api_key) > -1) {
|
||||||
if(api_key == "AhmC4Yg2BhaWPZBXeoWK96DAiAVfbou8TUG2IXtD3ZQ=") {
|
|
||||||
db.collection(channel_name + "_settings").find({"id": "config"}, function(err, settings) {
|
db.collection(channel_name + "_settings").find({"id": "config"}, function(err, settings) {
|
||||||
if(settings.length == 0) {
|
if(settings.length == 0) {
|
||||||
// LIST DOESNT EXIST
|
res.status(404).send(error.not_found.list);
|
||||||
res.status(404).send(error.wrong_token);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
settings = settings[0];
|
settings = settings[0];
|
||||||
if(!settings.strictSkip) {
|
if(!settings.strictSkip) {
|
||||||
// DONT HAVE STRICT SKIP
|
res.status(409).send(error.settings);
|
||||||
res.status(404).send(error.wrong_token);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(settings.userpass == "" || (settings.userpass == userpass)) {
|
if(settings.userpass == "" || (settings.userpass == userpass)) {
|
||||||
if(settings.skips.length+1 >= settings.strictSkipNumber) {
|
if(settings.skips.length+1 >= settings.strictSkipNumber && !Functions.contains(settings.skips, guid)) {
|
||||||
Functions.checkTimeout("skip", 1, channel_name, channel_name, false, true, undefined, function() {
|
Functions.checkTimeout("skip", 1, channel_name, channel_name, false, true, undefined, function() {
|
||||||
db.collection(channel_name).find({now_playing: true}, function(err, np) {
|
db.collection(channel_name).find({now_playing: true}, function(err, np) {
|
||||||
if(np.length != 1) {
|
if(np.length != 1) {
|
||||||
// NO SONG
|
res.status(404).send(error.not_found.list);
|
||||||
res.status(404).send(error.wrong_token);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
List.change_song(channel_name, false, np[0].id, [settings], function() {
|
List.change_song(channel_name, false, np[0].id, [settings], function() {
|
||||||
// VOTED TO SKIP
|
res.status(200).send(error.no_error);
|
||||||
res.status(200).send(error.wrong_token);
|
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
console.log("hello",sIO);
|
_exports.sIO.to(channel_name).emit('chat', {from: guid, icon: false, msg: " skipped via API."});
|
||||||
//sIO.to(channel_name).emit('chat', {from: guid, icon: false, msg: " skipped via API."});
|
|
||||||
});
|
});
|
||||||
}, "The channel is skipping too often, please wait ");
|
}, "", function() {
|
||||||
} else if(!Functions.contains(settings.skips, guid)){
|
res.status(429).send(error.tooMany);
|
||||||
db.collection(coll + "_settings").update({ id: "config" }, {$push:{skips:guid}}, function(err, d){
|
return;
|
||||||
var to_skip = (strictSkipNumber) - settings.skips.length-1;
|
});
|
||||||
console.log("ok", sIO);
|
} else if(!Functions.contains(settings.skips, guid)) {
|
||||||
//sIO.to(channel_name).emit('chat', {from: guid, msg: " voted to skip via API."});
|
db.collection(channel_name + "_settings").update({ id: "config" }, {$push:{skips:guid}}, function(err, d){
|
||||||
|
var to_skip = (settings.strictSkipNumber) - settings.skips.length-1;
|
||||||
|
_exports.sIO.to(channel_name).emit('chat', {from: guid, msg: " voted to skip via API."});
|
||||||
// VOTED TO SKIP
|
// VOTED TO SKIP
|
||||||
res.status(200).send(error.wrong_token);
|
var to_send = error.more_skip_needed;
|
||||||
|
to_send.results = [to_skip]
|
||||||
|
res.status(202).send(to_send);
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
//ALREADY SKIP
|
//ALREADY SKIP
|
||||||
res.status(404).send(error.wrong_token);
|
res.status(206).send(error.already_skip);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// NOT AUTHENTICATED
|
// NOT AUTHENTICATED
|
||||||
res.status(404).send(error.wrong_token);
|
res.status(403).send(error.not_authenticated);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// WRONG API KEY
|
// WRONG API KEY
|
||||||
res.status(403).send(error.wrong_token);
|
res.status(406).send(error.not_authenticated);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -1566,4 +1583,4 @@ function postEnd(channel_name, configs, new_song, guid, res, authenticated, auth
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = _exports;
|
||||||
|
|||||||
Reference in New Issue
Block a user