API Methods for Importing and Exporting the whole database
- "yeh, i do a little import/export, no biggie." + add fail response for superAuthmerge-requests/43/head
parent
ce4c07b703
commit
393ca95e8f
|
@ -185,6 +185,10 @@ module.exports = function(s,config,lang){
|
||||||
if(userFound === true){
|
if(userFound === true){
|
||||||
return true
|
return true
|
||||||
}else{
|
}else{
|
||||||
|
if(res)res.end(s.prettyPrint({
|
||||||
|
ok: false,
|
||||||
|
msg: lang['Not Authorized']
|
||||||
|
}))
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -408,4 +408,195 @@ module.exports = function(s,config,lang,app){
|
||||||
close()
|
close()
|
||||||
},res,req)
|
},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)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue