Fix super config default values

cycling-live-grid
Elad Bar 2023-04-06 17:11:25 +00:00 committed by Moe
parent b2b6d4b3f8
commit 12151602ef
2 changed files with 360 additions and 304 deletions

1
.gitignore vendored
View File

@ -14,3 +14,4 @@ dist
generatedLanguageFiles
faces
unknownFaces
.idea/

View File

@ -1,321 +1,376 @@
$(document).ready(function(){
var schema = {
"title": "Main Configuration",
"type": "object",
"properties": {
"debugLog": {
$(document).ready(function () {
var schema = {
"title": "Main Configuration",
"type": "object",
"properties": {
"debugLog": {
"title": "Enable Debug Log",
"type": "boolean",
"default": false
},
"subscriptionId": {
"title": "Fill in subscription ID",
"type": "string",
"default": null
},
"port": {
"title": "Server port",
"type": "integer",
"default": 8080
},
"passwordType": {
"title": "Password type",
"type": "string",
"enum": [
"sha256",
"sha512",
"md5"
],
"default": "sha256"
},
"addStorage": {
"type": "array",
"format": "table",
"title": "Additional Storage",
"description": "Separate storage locations that can be set for different monitors.",
"uniqueItems": true,
"items": {
"type": "object",
"title": "Storage Array",
"properties": {
"name": {
"type": "string",
},
"path": {
"type": "string",
"default": "__DIR__/videos2"
}
}
},
"default": [
{
"name": "second",
"path": "__DIR__/videos2"
}
]
},
"plugins": {
"type": "array",
"format": "table",
"title": "Plugins",
"descripton": "Elaborate Plugin connection settings.",
"uniqueItems": true,
"items": {
"type": "object",
"title": "Plugin",
"properties": {
"plug": {
"type": "string",
"default": "pluginName"
},
"key": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"host",
"client"
],
"default": "client"
},
"https": {
"type": "boolean",
"descripton": "Only for Host mode.",
"default": false
},
"host": {
"type": "string",
"descripton": "Only for Host mode.",
"default": "localhost"
},
"port": {
"type": "integer",
"descripton": "Only for Host mode.",
"default": 8082
},
"type": {
"type": "string",
"default": "detector"
}
}
}
},
"pluginKeys": {
"type": "object",
"format": "table",
"title": "Plugin Keys",
"description": "Quick client connection setup for plugins. Just add the plugin key to make it ready for incoming connections.",
"uniqueItems": true,
"items": {
"type": "object",
"title": "Plugin Key",
"properties": {}
}
},
"db": {
"type": "object",
"format": "table",
"title": "Database Options",
"description": "Credentials to connect to where detailed information is stored.",
"properties": {
"host": {
"title": "Hostname / IP",
"type": "string",
"default": "127.0.0.1"
},
"user": {
"title": "Username",
"type": "string",
"default": "majesticflame"
},
"password": {
"title": "Password",
"type": "string",
"default": ""
},
"database": {
"type": "string",
"default": "ccio"
},
"port": {
"type": "integer",
"default": 3306
}
},
"default": {
"host": "127.0.0.1",
"user": "majesticflame",
"password": "",
"database": "ccio",
"port": 3306
}
},
"cron": {
"type": "object",
"format": "table",
"title": "CRON Options",
"properties": {
"key": {
"type": "string",
},
"deleteOld": {
"type": "boolean",
"description": "cron will delete videos older than Max Number of Days per account.",
"default": true
},
"deleteNoVideo": {
"type": "boolean",
"description": "cron will delete SQL rows that it thinks have no video files.",
"default": true
},
"deleteOverMax": {
"type": "boolean",
"description": "cron will delete files that are over the set maximum storage per account.",
"default": true
},
}
},
"mail": {
"type": "object",
"format": "table",
"title": "Email Options",
"properties": {
"service": {
"type": "string",
},
"host": {
"type": "string",
},
"auth": {
"type": "object",
"properties": {
"user": {
"type": "string",
},
"pass": {
"type": "string",
},
},
},
"secure": {
"type": "boolean",
"default": false
},
"subscriptionId": {
"type": "string",
"ignoreTLS": {
"type": "boolean",
},
"port": {
"type": "integer",
"default": 8080
},
"passwordType": {
"type": "string",
"enum": [
"sha256",
"sha512",
"md5"
],
"default": "sha256"
},
"addStorage": {
"type": "array",
"format": "table",
"title": "Additional Storage",
"description": "Separate storage locations that can be set for different monitors.",
"uniqueItems": true,
"items": {
"type": "object",
"title": "Storage Array",
"properties": {
"name": {
"type": "string",
},
"path": {
"type": "string",
"default": "__DIR__/videos2"
}
}
"requireTLS": {
"type": "boolean",
},
"default": [
{
"name": "second",
"path": "__DIR__/videos2"
}
]
},
"plugins": {
"type": "array",
"format": "table",
"title": "Plugins",
"descripton": "Elaborate Plugin connection settings.",
"uniqueItems": true,
"items": {
"type": "object",
"title": "Plugin",
"properties": {
"plug": {
"type": "string",
"default": "pluginName"
},
"key": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"host",
"client"
],
"default": "client"
},
"https": {
"type": "boolean",
"descripton": "Only for Host mode.",
"default": false
},
"host": {
"type": "string",
"descripton": "Only for Host mode.",
"default": "localhost"
},
"port": {
"type": "integer",
"descripton": "Only for Host mode.",
"default": 8082
},
"type": {
"type": "string",
"default": "detector"
}
}
},
"default": [
{
"name": "second",
"path": "__DIR__/videos2"
}
]
},
"pluginKeys": {
"type": "object",
"format": "table",
"title": "Plugin Keys",
"description": "Quick client connection setup for plugins. Just add the plugin key to make it ready for incoming connections.",
"uniqueItems": true,
"items": {
"type": "object",
"title": "Plugin Key",
"properties": {}
"port": {
"type": "integer",
}
},
"db": {
"type": "object",
"format": "table",
"title": "Database Options",
"description": "Credentials to connect to where detailed information is stored.",
"properties": {
"host": {
"type": "string",
"default": "127.0.0.1"
},
"user": {
"type": "string",
"default": "majesticflame"
},
"password": {
"type": "string",
"default": ""
},
"database": {
"type": "string",
"default": "ccio"
},
"port": {
"type": "integer",
"default": 3306
}
},
"default": {
"host": "127.0.0.1",
"user": "majesticflame",
"password": "",
"database": "ccio",
"port":3306
}
},
"cron": {
"type": "object",
"format": "table",
"title": "CRON Options",
"properties": {
"key": {
"type": "string",
},
"deleteOld": {
"type": "boolean",
"description": "cron will delete videos older than Max Number of Days per account.",
"default": true
},
"deleteNoVideo": {
"type": "boolean",
"description": "cron will delete SQL rows that it thinks have no video files.",
"default": true
},
"deleteOverMax": {
"type": "boolean",
"description": "cron will delete files that are over the set maximum storage per account.",
"default": true
},
}
},
"mail": {
"type": "object",
"format": "table",
"title": "Email Options",
"properties": {
"service": {
"type": "string",
},
"host": {
"type": "string",
},
"auth": {
"type": "object",
"properties": {
"user": {
"type": "string",
},
"pass": {
"type": "string",
},
},
},
"secure": {
"type": "boolean",
"default": false
},
"ignoreTLS": {
"type": "boolean",
},
"requireTLS": {
"type": "boolean",
},
"port": {
"type": "integer",
}
}
},
"detectorMergePamRegionTriggers": {
"type": "boolean",
"default": true
},
"doSnapshot": {
"type": "boolean",
"default": true
},
"discordBot": {
"type": "boolean",
"default": false
},
"dropInEventServer": {
"type": "boolean",
"default": false
},
"ftpServer": {
"type": "boolean",
"default": false
},
"oldPowerVideo": {
"type": "boolean",
"default": false
},
"wallClockTimestampAsDefault": {
"type": "boolean",
"default": true
},
"defaultMjpeg": {
"type": "string",
},
"streamDir": {
"type": "string",
},
"videosDir": {
"type": "string",
},
"windowsTempDir": {
"type": "string",
}
},
"detectorMergePamRegionTriggers": {
"type": "boolean",
"default": true
},
"doSnapshot": {
"type": "boolean",
"default": true
},
"discordBot": {
"type": "boolean",
"default": false
},
"dropInEventServer": {
"type": "boolean",
"default": false
},
"ftpServer": {
"type": "boolean",
"default": false
},
"oldPowerVideo": {
"type": "boolean",
"default": false
},
"wallClockTimestampAsDefault": {
"type": "boolean",
"default": true
},
"defaultMjpeg": {
"type": "string",
},
"streamDir": {
"type": "string",
},
"videosDir": {
"type": "string",
},
"windowsTempDir": {
"type": "string",
},
"enableFaceManager": {
"type": "boolean",
"default": false,
"title": "Enable Face Manager",
"description": "Enable / Disable face manager for face recognition plugins in the dashboard."
}
};
}
};
var configurationTab = $('#config')
var configurationForm = configurationTab.find('form')
const configurationTab = $("#config");
const configurationForm = configurationTab.find("form");
// Set default options
JSONEditor.defaults.options.theme = 'bootstrap3';
JSONEditor.defaults.options.iconlib = 'fontawesome4';
const moduleData = {
endpoint: null,
configurationEditor: null
}
// Initialize the editor
var configurationEditor = new JSONEditor(document.getElementById("configForHumans"),{
theme: 'bootstrap3',
schema: schema
const handleGetConfigurationData = data => {
const dataConfig = data.config;
const dataConfigKeys = Object.keys(dataConfig);
const schemaItemsKeys = Object.keys(schema.properties);
const schemaWithoutData = schemaItemsKeys.filter(
(sk) => !dataConfigKeys.includes(sk)
);
const dataWithoutSchema = dataConfigKeys.filter(
(dk) => !schemaItemsKeys.includes(dk)
);
schemaWithoutData.forEach((sk) => {
const schemaItem = schema.properties[sk];
const defaultConfig = schemaItem.default;
data.config[sk] = defaultConfig;
});
function loadConfiguationIntoEditor(){
$.get(superApiPrefix + $user.sessionKey + '/system/configure',function(data){
configurationEditor.setValue(data.config);
})
if (dataWithoutSchema.length > 0) {
dataWithoutSchema.forEach((dk) => {
const schemaItem = {
title: dk,
options: {
hidden: true,
},
};
schema.properties[dk] = schemaItem;
});
// Set default options
JSONEditor.defaults.options.theme = "bootstrap3";
JSONEditor.defaults.options.iconlib = "fontawesome4";
}
// configurationEditor.on("change", function() {
// // Do something...
// });
var submitConfiguration = function(){
var errors = configurationEditor.validate();
console.log(errors.length)
console.log(errors)
if(errors.length === 0) {
var newConfiguration = JSON.stringify(configurationEditor.getValue(),null,3)
var html = '<p>This is a change being applied to the configuration file (conf.json). Are you sure you want to do this? You must restart Shinobi for these changes to take effect. <b>The JSON below is what you are about to save.</b></p>'
html += `<pre>${newConfiguration}</pre>`
$.confirm.create({
title: 'Save Configuration',
body: html,
clickOptions: {
class: 'btn-success',
title: lang.Save,
},
clickCallback: function(){
$.post(superApiPrefix + $user.sessionKey + '/system/configure',{
data: newConfiguration
},function(data){
// console.log(data)
})
}
})
}else{
new PNotify({text:'Invalid JSON Syntax, Cannot Save.',type:'error'})
}
const configurationEditor = new JSONEditor(
document.getElementById("configForHumans"), {
schema: schema,
}
configurationTab.find('.submit').click(function(){
submitConfiguration()
})
configurationForm.submit(function(e){
e.preventDefault()
submitConfiguration()
return false;
})
$.ccio.ws.on('f',function(d){
switch(d.f){
case'init_success':
loadConfiguationIntoEditor()
break;
);
configurationEditor.setValue(data.config);
moduleData.configurationEditor = configurationEditor;
window.configurationEditor = configurationEditor;
};
const handlePostConfigurationData = data => {
// console.log(data);
}
function loadConfiguationIntoEditor(d) {
moduleData.endpoint = `${superApiPrefix}${$user.sessionKey}/system/configure`;
$.get(moduleData.endpoint, handleGetConfigurationData);
}
var submitConfiguration = function () {
var errors = configurationEditor.validate();
console.log(errors.length)
console.log(errors)
if (errors.length === 0) {
var newConfiguration = JSON.stringify(configurationEditor.getValue(), null, 3)
var html = '<p>This is a change being applied to the configuration file (conf.json). Are you sure you want to do this? You must restart Shinobi for these changes to take effect. <b>The JSON below is what you are about to save.</b></p>'
html += `<pre>${newConfiguration}</pre>`
$.confirm.create({
title: 'Save Configuration',
body: html,
clickOptions: {
class: 'btn-success',
title: lang.Save,
},
clickCallback: function () {
const requestData = {
data: newConfiguration
};
$.post(moduleData.endpoint, requestData, handlePostConfigurationData);
}
})
window.configurationEditor = configurationEditor
})
} else {
new PNotify({ text: 'Invalid JSON Syntax, Cannot Save.', type: 'error' });
}
};
configurationTab.find('.submit').click(function () {
submitConfiguration();
});
configurationForm.submit(function (e) {
e.preventDefault();
submitConfiguration();
return false;
});
$.ccio.ws.on("f", d => {
if (d.f === "init_success") {
loadConfiguationIntoEditor();
}
});
window.configurationEditor = configurationEditor;
})