dev-sidecar/packages/mitmproxy/src/lib/monkey/index.js

82 lines
2.0 KiB
JavaScript

const fs = require('fs')
const path = require('path')
const log = require('../../utils/util.log')
let scripts
function buildScript (sc, content) {
const grant = sc.grant
const pre = 'window.addEventListener("load",' +
' ()=> { \r\n'
let grantSc = ''
for (const item of grant) {
grantSc += 'const ' + item + ' = window.__ds_global__[\'' + item + '\']\r\n'
}
const tail = ';' + content + '\r\n' +
'})'
return pre + grantSc + tail
}
function loadScript (content) {
// @grant GM_registerMenuCommand
// @grant GM_unregisterMenuCommand
// @grant GM_openInTab
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_notification
const annoFlag = '// ==/UserScript=='
const arr = content.split(annoFlag)
const start = 0
const confStr = arr[start]
const confItemArr = confStr.split('\n')
const sc = {
grant: [],
match: [],
content: ''
}
for (const string of confItemArr) {
const reg = new RegExp('.*@([^\\s]+)\\s(.+)')
const ret = string.match(reg)
if (ret) {
const key = ret[1].trim()
const value = ret[2].trim()
if (key === 'grant') {
sc.grant.push(value)
} else if (key === 'match') {
sc.match.push(value)
} else {
sc[key] = value
}
}
}
const script = arr[start + 1].trim()
sc.script = buildScript(sc, script)
return sc
}
function readFile (rootDir, script) {
const location = path.join(rootDir, './' + script)
log.debug('script location:', location)
return fs.readFileSync(location).toString()
}
const api = {
get (rootDir) {
if (scripts == null) {
api.load(rootDir)
}
return scripts
},
load (rootDir) {
scripts = {}
scripts.github = loadScript(readFile(rootDir, 'github.script'))
scripts.google = loadScript(readFile(rootDir, 'google.js'))
scripts.jquery = { script: readFile(rootDir, 'jquery.min.js') }
scripts.global = { script: readFile(rootDir, 'global.script') }
return scripts
}
}
module.exports = api