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){
|
||||
return true
|
||||
}else{
|
||||
if(res)res.end(s.prettyPrint({
|
||||
ok: false,
|
||||
msg: lang['Not Authorized']
|
||||
}))
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue