|
|
|
|
|
|
|
|
const { any } = require('bbhverse'); |
|
|
const { any } = require('bbhverse'); |
|
|
const fs = require('fs') |
|
|
const fs = require('fs') |
|
|
|
|
|
var path = require('path'); |
|
|
|
|
|
|
|
|
var cli = require('./cliverse') |
|
|
var cli = require('./cliverse') |
|
|
var nodeShellExec = cli.nodeShellExec; |
|
|
var nodeShellExec = cli.nodeShellExec; |
|
|
|
|
|
|
|
|
var __isElevated = null; |
|
|
var __isElevated = null; |
|
|
var shell_verse = { |
|
|
var shell_verse = { |
|
|
// getCommonTask is agnostic of whether we are running in an elevated shell or not. It runs in either case. |
|
|
// getCommonTask is agnostic of whether we are running in an elevated shell or not. It runs in either case. |
|
|
getCommonTask( taskToRun ){ return ()=>{ return shell_verse.runTask(taskToRun) }} |
|
|
|
|
|
|
|
|
init( o ){ Object.assign(this, o) } |
|
|
|
|
|
|
|
|
|
|
|
, downloadsdir : '../Downloads' |
|
|
|
|
|
, getCommonTask( taskToRun ){ return ()=>{ return shell_verse.runTask(taskToRun) }} |
|
|
, runTask : ( taskToRun ) => { |
|
|
, runTask : ( taskToRun ) => { |
|
|
if (__isElevated) return shell_verse.runElevated( taskToRun ) |
|
|
if (__isElevated) return shell_verse.runElevated( taskToRun ) |
|
|
else return shell_verse.runNonElevated( taskToRun ) |
|
|
else return shell_verse.runNonElevated( taskToRun ) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
, elevatedRunner( taskToRun ){ |
|
|
|
|
|
|
|
|
, elevatedRunner( taskToRun, inBatch ){ |
|
|
// PB : TODO -- Should be called only when we are in an elevated shell that was already requested from an unelevated shell with a batch of tasks. |
|
|
// PB : TODO -- Should be called only when we are in an elevated shell that was already requested from an unelevated shell with a batch of tasks. |
|
|
try { |
|
|
try { |
|
|
// PB : We do not need IPC in linux. Until a real sudo elevation is required eveything works in non elevated mode... |
|
|
// PB : We do not need IPC in linux. Until a real sudo elevation is required eveything works in non elevated mode... |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
catch (e) { |
|
|
catch (e) { |
|
|
console.error('Error Invalid command : ' + e) |
|
|
console.error('Error Invalid command : ' + e) |
|
|
// fs.writeFileSync('run.done', 'error') |
|
|
|
|
|
|
|
|
if(!inBatch) fs.writeFileSync('run.done', 'error') |
|
|
} |
|
|
} |
|
|
finally { |
|
|
finally { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(taskToRun.processedArgs.skipelevated) return Promise.resolve({ skipped : true }); |
|
|
if(taskToRun.processedArgs.skipelevated) return Promise.resolve({ skipped : true }); |
|
|
|
|
|
|
|
|
if(__isElevated) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (__isElevated) { |
|
|
return shell_verse.elevatedRunner(taskToRun) |
|
|
return shell_verse.elevatedRunner(taskToRun) |
|
|
} |
|
|
} |
|
|
else { |
|
|
else { |
|
|
|
|
|
|
|
|
}).catch((e) => { |
|
|
}).catch((e) => { |
|
|
e.info = taskToRun.info; |
|
|
e.info = taskToRun.info; |
|
|
if(taskToRun.errHandler) throw taskToRun.errHandler(e) |
|
|
if(taskToRun.errHandler) throw taskToRun.errHandler(e) |
|
|
taskToRun.statuslog.statuslog(e); |
|
|
|
|
|
|
|
|
taskToRun.statuslog.statuslog(e); // |
|
|
// console.error(e) |
|
|
// console.error(e) |
|
|
throw e; |
|
|
throw e; |
|
|
}).finally(()=>{}) |
|
|
}).finally(()=>{}) |
|
|
|
|
|
|
|
|
return elevatedRunner(taskToRun); |
|
|
return elevatedRunner(taskToRun); |
|
|
} |
|
|
} |
|
|
, iswin(){ return false} |
|
|
, iswin(){ return false} |
|
|
|
|
|
|
|
|
|
|
|
, ensureDirectoryExistence(filePath) { |
|
|
|
|
|
var dirname = path.dirname(filePath); |
|
|
|
|
|
if (fs.existsSync(dirname)) { |
|
|
|
|
|
return filePath; |
|
|
|
|
|
} |
|
|
|
|
|
this.ensureDirectoryExistence(dirname); |
|
|
|
|
|
fs.mkdirSync(dirname); |
|
|
|
|
|
return filePath; |
|
|
|
|
|
} |
|
|
|
|
|
, generateDependencies(){ |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
, iswin(){ return false} |
|
|
, islin(){ return true} |
|
|
, islin(){ return true} |
|
|
} |
|
|
} |
|
|
|
|
|
|