Compare commits

..

No commits in common. "787846c7d6ec88efa478f3b9d30bba61dd61f60c" and "db3ec58ad9fa3134ae414919bc4839fe3056912e" have entirely different histories.

6 changed files with 12 additions and 80 deletions

View file

@ -1,14 +1,13 @@
{ {
"instanceName": "Canopy", "instanceName": "Canopy",
"verbose": false, "verbose": false,
"port": 8443, "port": 8080,
"proxied": true, "proxied": false,
"protocol": "https", "protocol": "http",
"domain": "localhost", "domain": "localhost",
"ytdlpPath": "/home/canopy/.local/pipx/venvs/yt-dlp/bin/yt-dlp", "ytdlpPath": "/home/canopy/.local/pipx/venvs/yt-dlp/bin/yt-dlp",
"migrate": false, "migrate": false,
"dropLegacyTokes": false, "dropLegacyTokes": false,
"debug": false,
"secrets":{ "secrets":{
"passwordSecret": "CHANGE_ME", "passwordSecret": "CHANGE_ME",
"rememberMeSecret": "CHANGE_ME", "rememberMeSecret": "CHANGE_ME",

View file

@ -6,9 +6,9 @@
//Scream about exceptions in the console //Scream about exceptions in the console
"verbose": false, "verbose": false,
//Port to bind to (most linux/unix systems req root for ports below 1000, you should probably use nginx if you want port 80 or 443) //Port to bind to (most linux/unix systems req root for ports below 1000, you should probably use nginx if you want port 80 or 443)
"port": 8443, "port": 8080,
//Lets the server know it's sitting behind a reverse-proxy //Lets the server know it's sitting behind a reverse-proxy
"proxied": true, "proxied": false,
//Protocol (either HTTP or HTTPS) //Protocol (either HTTP or HTTPS)
"protocol": "http", "protocol": "http",
//Domain the server is available at, used for server-side link generation //Domain the server is available at, used for server-side link generation
@ -24,11 +24,6 @@
//Requires migration to be disabled before it takes effect. //Requires migration to be disabled before it takes effect.
//WARNING: this does NOT affect user toke counts, migrated or otherwise. Use carefully! //WARNING: this does NOT affect user toke counts, migrated or otherwise. Use carefully!
"dropLegacyTokes": false, "dropLegacyTokes": false,
//Enters the server into debug mode, allows specific commands to be emitted from the client-side dev console
//Usually to get the server to dump some sort of internal data for debugging purposes.
//Obviously, this means enabling this can have some gnar implications.
//Probably don't enable this on your production server unless you REALLY REALLY have to, and you probably don't.
"debug": false,
//Server Secrets //Server Secrets
//Be careful with what you keep in secrets, you should use special chars, but test your deployment, as some chars may break account registration //Be careful with what you keep in secrets, you should use special chars, but test your deployment, as some chars may break account registration
//An update to either kill the server and bitch about the issue in console is planned so it's not so confusing for new admins //An update to either kill the server and bitch about the issue in console is planned so it's not so confusing for new admins

View file

@ -18,12 +18,10 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.*/
const validator = require('validator'); const validator = require('validator');
//Local imports //Local imports
const config = require('../../../../config.json');
const queuedMedia = require('./queuedMedia'); const queuedMedia = require('./queuedMedia');
const yanker = require('../../../utils/media/yanker'); const yanker = require('../../../utils/media/yanker');
const loggerUtils = require('../../../utils/loggerUtils'); const loggerUtils = require('../../../utils/loggerUtils');
const channelModel = require('../../../schemas/channel/channelSchema'); const channelModel = require('../../../schemas/channel/channelSchema');
const permissionModel = require('../../../schemas/permissionSchema');
/** /**
* Object represneting a single channel's media queue * Object represneting a single channel's media queue
@ -116,11 +114,6 @@ class queue{
socket.on("move", (data) => {this.moveMedia(socket, data)}); socket.on("move", (data) => {this.moveMedia(socket, data)});
socket.on("lock", () => {this.toggleLock(socket)}); socket.on("lock", () => {this.toggleLock(socket)});
socket.on("goLive", (data) => {this.goLive(socket, data)}); socket.on("goLive", (data) => {this.goLive(socket, data)});
//If debug mode is enabled
if(config.debug){
socket.on("dumpQueue", (data) => {this.dumpQueue(socket, data)});
}
} }
//--- USER FACING QUEUEING FUNCTIONS --- //--- USER FACING QUEUEING FUNCTIONS ---
@ -411,44 +404,6 @@ class queue{
} }
} }
async dumpQueue(socket, data){
//If we somehow got here while config.debug is disabled, or the user isn't allowed to preform server-side debugging
if(!(config.debug && await permissionModel.permCheck(socket.user, "debug"))){
//FUCKIN' CHEESE IT!
return;
}
//If a full data dump was requested
if(data != null && data.full){
//Pull the channel DB doc
const chanDB = await channelModel.findOne({name:this.channel.name});
//Cook and emit a new object from all of the data
socket.emit("dumpQueue", {
cache: {
schedule: Array.from(this.schedule),
nowPlaying: this.nowPlaying
},
DB: {
schedule: chanDB.media.scheduled,
nowPlaying: chanDB.media.nowPlaying,
archived: chanDB.media.archived,
}
});
//DONE.
return;
}
//Otherwise, just dump whats in RAM
socket.emit("dumpQueue", {
cache: {
schedule: Array.from(this.schedule),
nowPlaying: this.nowPlaying
}
});
}
//--- INTERNAL USE ONLY QUEUEING FUNCTIONS --- //--- INTERNAL USE ONLY QUEUEING FUNCTIONS ---
/** /**
* Clears and scheduling timers * Clears and scheduling timers
@ -1209,13 +1164,6 @@ class queue{
return this.endLivestream(wasPlaying, chanDB) return this.endLivestream(wasPlaying, chanDB)
} }
//Moved this from the block below to prevent accidental over-caching
//We may need to throw this into it's own conditional if it causes issues
//Take it out of the active schedule
//Ultimitaly though, if something is voltaile it should handle saving chanDB on its own, so this should be a non-issue
this.schedule.delete(wasPlaying.startTime);
//If we're not in volatile mode and we're not ending a livestream //If we're not in volatile mode and we're not ending a livestream
if(!volatile){ if(!volatile){
//If we wheren't handed a channel //If we wheren't handed a channel
@ -1236,6 +1184,9 @@ class queue{
await chanDB.media.nowPlaying.deleteOne(); await chanDB.media.nowPlaying.deleteOne();
} }
//Take it out of the active schedule
this.schedule.delete(wasPlaying.startTime);
//If archiving is enabled //If archiving is enabled
if(!noArchive){ if(!noArchive){
//Add the item to the channel archive //Add the item to the channel archive
@ -1837,9 +1788,7 @@ class queue{
chanDB.media.scheduled = newSched; chanDB.media.scheduled = newSched;
//Save the DB //Save the DB
await chanDB.save() await chanDB.save();
//End the media;
//if something fucked up //if something fucked up
}catch(err){ }catch(err){

View file

@ -100,12 +100,6 @@ const permissionSchema = new mongoose.Schema({
type: channelPermissionSchema, type: channelPermissionSchema,
default: () => ({}) default: () => ({})
}, },
debug: {
type: mongoose.SchemaTypes.String,
enum: rankEnum,
default: "admin",
required: true
},
}); });
//Statics //Statics

View file

@ -78,6 +78,9 @@ const config = require('../config.json');
const port = config.port; const port = config.port;
const dbUrl = `mongodb://${config.db.user}:${config.db.pass}@${config.db.address}:${config.db.port}/${config.db.database}`; const dbUrl = `mongodb://${config.db.user}:${config.db.pass}@${config.db.address}:${config.db.port}/${config.db.database}`;
//Check for insecure config
configCheck.securityCheck();
//Define express //Define express
const app = express(); const app = express();
@ -231,9 +234,6 @@ async function asyncKickStart(){
//Kick off scheduled-jobs //Kick off scheduled-jobs
scheduler.kickoff(); scheduler.kickoff();
//Check for insecure config
configCheck.securityCheck();
//Increment launch counter //Increment launch counter
await statModel.incrementLaunchCount(); await statModel.incrementLaunchCount();

View file

@ -74,9 +74,4 @@ module.exports.securityCheck = function(){
if(!validator.isStrongPassword(config.mail.pass) || config.mail.pass == "CHANGE_ME"){ if(!validator.isStrongPassword(config.mail.pass) || config.mail.pass == "CHANGE_ME"){
loggerUtil.consoleWarn("Insecure Email Password! Change Email password!"); loggerUtil.consoleWarn("Insecure Email Password! Change Email password!");
} }
//check debug mode
if(config.debug){
loggerUtil.consoleWarn("Debug mode enabled! Understand the risks and security implications before enabling on production servers!");
}
} }