mirror of
https://gitlab.com/Shinobi-Systems/ShinobiCE.git
synced 2025-03-09 15:40:15 +00:00
Son Goku
- Rebased sql, test, web, defintions, languages, INSTALL, and libs folders.
This commit is contained in:
parent
24de55e45a
commit
d0b12e92e7
362 changed files with 21716 additions and 7018 deletions
|
@ -288,6 +288,7 @@ module.exports = function(s,config,lang,app){
|
|||
]
|
||||
)
|
||||
s.tx({f:'add_account',details:form.details,ke:form.ke,uid:form.uid,mail:form.mail},'$')
|
||||
endData.user = Object.assign(form,{})
|
||||
//init user
|
||||
s.loadGroup(form)
|
||||
}
|
||||
|
@ -324,7 +325,7 @@ module.exports = function(s,config,lang,app){
|
|||
r = r[0]
|
||||
var details = JSON.parse(r.details)
|
||||
if(form.pass && form.pass !== ''){
|
||||
if(form.pass === form.password_again){
|
||||
if(form.pass === form.password_again || form.pass_again){
|
||||
form.pass = s.createHash(form.pass);
|
||||
}else{
|
||||
endData.msg = lang["Passwords Don't Match"]
|
||||
|
@ -335,11 +336,18 @@ module.exports = function(s,config,lang,app){
|
|||
delete(form.pass);
|
||||
}
|
||||
delete(form.password_again);
|
||||
delete(form.pass_again);
|
||||
var keys = Object.keys(form)
|
||||
var set = []
|
||||
var values = []
|
||||
keys.forEach(function(v,n){
|
||||
if(set==='ke'||set==='password_again'||!form[v]){return}
|
||||
if(
|
||||
set === 'ke' ||
|
||||
!form[v]
|
||||
){
|
||||
//skip
|
||||
return
|
||||
}
|
||||
set.push(v+'=?')
|
||||
if(v === 'details'){
|
||||
form[v] = s.stringJSON(Object.assign(details,s.parseJSON(form[v])))
|
||||
|
@ -360,6 +368,9 @@ module.exports = function(s,config,lang,app){
|
|||
}
|
||||
close()
|
||||
})
|
||||
}else{
|
||||
endData.msg = lang['User Not Found']
|
||||
close()
|
||||
}
|
||||
})
|
||||
}else{
|
||||
|
@ -409,53 +420,218 @@ module.exports = function(s,config,lang,app){
|
|||
},res,req)
|
||||
})
|
||||
/**
|
||||
* API : Superuser : Export Entire System
|
||||
* API : Superuser : Get Entire System
|
||||
*/
|
||||
app.all(config.webPaths.superApiPrefix+':auth/export/system', function (req,res){
|
||||
s.superAuth(req.params,function(resp){
|
||||
s.systemLog('Copy of the Database Exported',{
|
||||
by: resp.$user.mail,
|
||||
ip: resp.ip
|
||||
})
|
||||
var endData = {
|
||||
ok : true
|
||||
}
|
||||
// var database = s.getPostData(req,'database')
|
||||
endData.database = {}
|
||||
var tableNames = [
|
||||
'Users',
|
||||
'Monitors',
|
||||
'API',
|
||||
'Videos',
|
||||
'Cloud Videos',
|
||||
'Logs',
|
||||
'Files',
|
||||
'Presets',
|
||||
]
|
||||
var completedTables = 0
|
||||
var tableExportLoop = function(callback){
|
||||
var tableName = tableNames[completedTables]
|
||||
if(tableName){
|
||||
var tableIsSelected = s.getPostData(req,tableName) == 1
|
||||
if(tableIsSelected){
|
||||
s.sqlQuery('SELECT * FROM `' + tableName +'`',[],function(err,dataRows){
|
||||
endData.database[tableName] = dataRows
|
||||
++completedTables
|
||||
tableExportLoop(callback)
|
||||
})
|
||||
}else{
|
||||
++completedTables
|
||||
tableExportLoop(callback)
|
||||
}
|
||||
}else{
|
||||
callback()
|
||||
}
|
||||
}
|
||||
tableExportLoop(function(){
|
||||
s.closeJsonResponse(res,endData)
|
||||
})
|
||||
},res,req)
|
||||
})
|
||||
/**
|
||||
* API : Superuser : Import Entire System
|
||||
*/
|
||||
app.all(config.webPaths.superApiPrefix+':auth/import/system', function (req,res){
|
||||
s.superAuth(req.params,function(resp){
|
||||
var endData = {
|
||||
ok : false
|
||||
}
|
||||
console.log(req.files)
|
||||
// insert data
|
||||
var data = s.getPostData(req)
|
||||
var database = s.getPostData(req,'database')
|
||||
if(data && data.database)database = data.database
|
||||
if(database){
|
||||
var rowsExistingAlready = {}
|
||||
var countOfRowsInserted = {}
|
||||
var countOfRowsExistingAlready = {}
|
||||
var insertRow = function(tableName,row,callback){
|
||||
if(!rowsExistingAlready[tableName])rowsExistingAlready[tableName] = []
|
||||
if(!countOfRowsExistingAlready[tableName])countOfRowsExistingAlready[tableName] = 0
|
||||
if(!countOfRowsInserted[tableName])countOfRowsInserted[tableName] = 0
|
||||
var fieldsToCheck = ['ke']
|
||||
switch(tableName){
|
||||
case'API':
|
||||
fieldsToCheck = fieldsToCheck.concat([
|
||||
'code',
|
||||
'uid'
|
||||
])
|
||||
break;
|
||||
case'Cloud Videos':
|
||||
fieldsToCheck = fieldsToCheck.concat([
|
||||
'href',
|
||||
'mid'
|
||||
])
|
||||
break;
|
||||
case'Videos':
|
||||
fieldsToCheck = fieldsToCheck.concat([
|
||||
'time',
|
||||
'mid'
|
||||
])
|
||||
break;
|
||||
case'Users':
|
||||
fieldsToCheck = fieldsToCheck.concat([
|
||||
'uid',
|
||||
'mail'
|
||||
])
|
||||
break;
|
||||
case'Presets':
|
||||
fieldsToCheck = fieldsToCheck.concat([
|
||||
'name',
|
||||
'type'
|
||||
])
|
||||
break;
|
||||
case'Logs':
|
||||
fieldsToCheck = fieldsToCheck.concat([
|
||||
'time',
|
||||
'info',
|
||||
'mid'
|
||||
])
|
||||
break;
|
||||
case'Events':
|
||||
fieldsToCheck = fieldsToCheck.concat([
|
||||
'time',
|
||||
'details',
|
||||
'mid'
|
||||
])
|
||||
break;
|
||||
case'Files':
|
||||
fieldsToCheck = fieldsToCheck.concat([
|
||||
'details',
|
||||
'name',
|
||||
'mid'
|
||||
])
|
||||
break;
|
||||
case'Monitors':
|
||||
fieldsToCheck = fieldsToCheck.concat([
|
||||
'host',
|
||||
'protocol',
|
||||
'port',
|
||||
'path',
|
||||
'mid'
|
||||
])
|
||||
break;
|
||||
}
|
||||
var keysToCheck = []
|
||||
var valuesToCheck = []
|
||||
fieldsToCheck.forEach(function(key){
|
||||
keysToCheck.push(key + '= ?')
|
||||
valuesToCheck.push(row[key])
|
||||
})
|
||||
s.sqlQuery('SELECT * FROM ' + tableName + ' WHERE ' + keysToCheck.join(' AND '),valuesToCheck,function(err,selected){
|
||||
if(selected && selected[0]){
|
||||
selected = selected[0]
|
||||
rowsExistingAlready[tableName].push(selected)
|
||||
callback()
|
||||
}else{
|
||||
var rowKeys = Object.keys(row)
|
||||
var insertEscapes = []
|
||||
var insertValues = []
|
||||
rowKeys.forEach(function(key){
|
||||
insertEscapes.push('?')
|
||||
insertValues.push(row[key])
|
||||
})
|
||||
s.sqlQuery('INSERT INTO ' + tableName + ' (' + rowKeys.join(',') +') VALUES (' + insertEscapes.join(',') + ')',insertValues,function(){
|
||||
if(!err){
|
||||
++countOfRowsInserted[tableName]
|
||||
}
|
||||
callback()
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
var actionCount = {}
|
||||
var insertTableRows = function(tableName,rows,callback){
|
||||
if(!actionCount[tableName])actionCount[tableName] = 0
|
||||
var insertLoop = function(){
|
||||
var row = rows[actionCount[tableName]]
|
||||
if(row){
|
||||
insertRow(tableName,row,function(){
|
||||
++actionCount[tableName]
|
||||
insertLoop()
|
||||
})
|
||||
}else{
|
||||
callback()
|
||||
}
|
||||
}
|
||||
insertLoop()
|
||||
}
|
||||
var databaseTableKeys = Object.keys(database)
|
||||
var completedTables = 0
|
||||
var tableInsertLoop = function(callback){
|
||||
var tableName = databaseTableKeys[completedTables]
|
||||
var rows = database[databaseTableKeys[completedTables]]
|
||||
if(tableName){
|
||||
insertTableRows(tableName,rows,function(){
|
||||
++completedTables
|
||||
tableInsertLoop(callback)
|
||||
})
|
||||
}else{
|
||||
callback()
|
||||
}
|
||||
}
|
||||
tableInsertLoop(function(){
|
||||
endData.ok = true
|
||||
endData.tablesInsertedTo = databaseTableKeys
|
||||
endData.countOfRowsInserted = countOfRowsInserted
|
||||
endData.rowsExistingAlready = rowsExistingAlready
|
||||
s.closeJsonResponse(res,endData)
|
||||
})
|
||||
}else{
|
||||
endData.msg = lang['Database Not Found']
|
||||
s.closeJsonResponse(res,endData)
|
||||
}
|
||||
},res,req)
|
||||
})
|
||||
/**
|
||||
* API : Superuser : Force Check for Stale Purge Locks
|
||||
*/
|
||||
app.all(config.webPaths.superApiPrefix+':auth/system/checkForStalePurgeLocks', function (req,res){
|
||||
s.superAuth(req.params,function(resp){
|
||||
var endData = {
|
||||
ok : true
|
||||
}
|
||||
var close = function(){
|
||||
res.end(s.prettyPrint(endData))
|
||||
}
|
||||
var account = s.getPostData(req,'account')
|
||||
s.sqlQuery('SELECT FROM Users',[],function(err,users){
|
||||
s.sqlQuery('SELECT FROM Monitors',[],function(err,monitors){
|
||||
s.sqlQuery('SELECT FROM API',[],function(err,monitors){
|
||||
s.sqlQuery('SELECT FROM Videos',[],function(err,monitors){
|
||||
s.sqlQuery('SELECT FROM Logs',[],function(err,monitors){
|
||||
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
s.sqlQuery('DELETE FROM API WHERE uid=? AND ke=?',[account.uid,account.ke])
|
||||
if(s.getPostData(req,'deleteSubAccounts',false) === '1'){
|
||||
s.sqlQuery('DELETE FROM Users WHERE ke=?',[account.ke])
|
||||
}
|
||||
if(s.getPostData(req,'deleteMonitors',false) == '1'){
|
||||
s.sqlQuery('SELECT * FROM Monitors WHERE ke=?',[account.ke],function(err,monitors){
|
||||
if(monitors && monitors[0]){
|
||||
monitors.forEach(function(monitor){
|
||||
s.camera('stop',monitor)
|
||||
})
|
||||
s.sqlQuery('DELETE FROM Monitors WHERE ke=?',[account.ke])
|
||||
}
|
||||
})
|
||||
}
|
||||
if(s.getPostData(req,'deleteVideos',false) == '1'){
|
||||
s.sqlQuery('DELETE FROM Videos WHERE ke=?',[account.ke])
|
||||
fs.chmod(s.dir.videos+account.ke,0o777,function(err){
|
||||
fs.unlink(s.dir.videos+account.ke,function(err){})
|
||||
})
|
||||
}
|
||||
if(s.getPostData(req,'deleteEvents',false) == '1'){
|
||||
s.sqlQuery('DELETE FROM Events WHERE ke=?',[account.ke])
|
||||
}
|
||||
s.tx({f:'delete_account',ke:account.ke,uid:account.uid,mail:account.mail},'$')
|
||||
close()
|
||||
s.checkForStalePurgeLocks()
|
||||
res.end(s.prettyPrint(endData))
|
||||
},res,req)
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue