API Methods for Importing and Exporting the whole database

- "yeh, i do a little import/export, no biggie."
+ add fail response for superAuth
merge-requests/43/head
Moe 2018-12-12 20:05:07 -08:00
parent ce4c07b703
commit 393ca95e8f
2 changed files with 195 additions and 0 deletions

View File

@ -185,6 +185,10 @@ module.exports = function(s,config,lang){
if(userFound === true){
return true
}else{
if(res)res.end(s.prettyPrint({
ok: false,
msg: lang['Not Authorized']
}))
return false
}
}

View File

@ -408,4 +408,195 @@ module.exports = function(s,config,lang,app){
close()
},res,req)
})
/**
* API : Superuser : Get Entire System
*/
app.all(config.webPaths.superApiPrefix+':auth/export/system', function (req,res){
s.superAuth(req.params,function(resp){
var endData = {
ok : true
}
s.sqlQuery('SELECT * FROM Users',[],function(err,users){
s.sqlQuery('SELECT * FROM Monitors',[],function(err,monitors){
s.sqlQuery('SELECT * FROM API',[],function(err,api){
s.sqlQuery('SELECT * FROM Videos',[],function(err,videos){
s.sqlQuery('SELECT * FROM Logs',[],function(err,logs){
s.sqlQuery('SELECT * FROM Files',[],function(err,files){
s.sqlQuery('SELECT * FROM Presets',[],function(err,presets){
s.sqlQuery('SELECT * FROM `Cloud Videos`',[],function(err,cloudVideos){
endData.database = {
"API": api,
"Users": users,
"Monitors": monitors,
"Videos": videos,
"Presets": presets,
"Logs": logs,
"Files": files,
"Cloud Videos": cloudVideos
}
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
}
var data = s.getPostData(req)
var database = s.getPostData(req,'database')
if(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.database = lang['Database Not Found']
endData.msg = lang['Database Not Found']
s.closeJsonResponse(res,endData)
}
},res,req)
})
}