diff --git a/chromeproxy/background/capture.js b/chromeproxy/background/capture.js index 721074e..4210af8 100644 --- a/chromeproxy/background/capture.js +++ b/chromeproxy/background/capture.js @@ -33,8 +33,8 @@ if(document.contentType == "application/json") { } if (condition()) { - Tell(BackgroundMsgType.CONTENT, content); + Tell("content", content); } else { - Tell(BackgroundMsgType.NOTWANT, content); + Tell("notwant", content); } diff --git a/chromeproxy/background/config.js b/chromeproxy/background/config.js index 2168e14..137bc46 100644 --- a/chromeproxy/background/config.js +++ b/chromeproxy/background/config.js @@ -2,22 +2,40 @@ chrome.webRequest.onBeforeRequest.addListener(function (details) { if (details.url.startsWith("http://eson.config")) { var params = new URL(details.url).searchParams; - UpdateHost(params.get("taskurl")) - chrome.tabs.remove(details.tabId); - chrome.tabs.query({ currentWindow: true }, function (tabs) { - var count = 0 - for (var tab of tabs) { - if (!tab.url.startsWith("chrome://")) { - count++; - chrome.tabs.executeScript(tab.id, { runAt: "document_end", code: `window.location.href = "${Host}"` }) - } else { - chrome.tabs.remove(tab.id); - } + + for( key of params.keys()) { + switch(key) { + case "proxyserver": + ProxyServer = params.get(key) + break } - for (var i = count; i < WorkerNumber; i++) { - chrome.tabs.create({ url: `${Host}` }); - } - }) + } + + var taskurl = params.get("taskurl") + if(taskurl !== "") { + UpdateHost(taskurl) + removeConfigTabAndCreateGetTaskTab(details); + } + return { cancel: true }; } - }, { 'urls': [""] }, ['blocking']); \ No newline at end of file + }, { 'urls': [""] }, ['blocking']); + + +function removeConfigTabAndCreateGetTaskTab(details) { + chrome.tabs.remove(details.tabId); + chrome.tabs.query({ currentWindow: true }, function (tabs) { + var count = 0 + for (var tab of tabs) { + if (!tab.url.startsWith("chrome://")) { + count++; + chrome.tabs.executeScript(tab.id, { runAt: "document_end", code: `window.location.href = "${Host}"` }) + } else { + chrome.tabs.remove(tab.id); + } + } + for (var i = count; i < WorkerNumber; i++) { + chrome.tabs.create({ url: `${Host}` }); + } + }) +} \ No newline at end of file diff --git a/chromeproxy/background/proxy.js b/chromeproxy/background/proxy.js new file mode 100644 index 0000000..065110d --- /dev/null +++ b/chromeproxy/background/proxy.js @@ -0,0 +1,21 @@ + + +var config = { + mode: "pac_script", + pacScript: { + data: + ` + ProxyServer = ${ProxyServer}; + function FindProxyForURL(url, host) { + if(ProxyServer != undefined) { + return ProxyServer; + } + return 'DIRECT'; + }` + } +}; + + +chrome.proxy.settings.set( + { value: config, scope: 'regular' }, + function () { }); \ No newline at end of file diff --git a/chromeproxy/background/worker.js b/chromeproxy/background/worker.js index dc96515..3edf23d 100644 --- a/chromeproxy/background/worker.js +++ b/chromeproxy/background/worker.js @@ -61,9 +61,7 @@ function GetTask(sender) { } function CaptureContentCurrentPage(tabid) { - chrome.tabs.executeScript(tabid, { runAt: "document_end", file: "base.js" }, function(){ - chrome.tabs.executeScript(tabid, { runAt: "document_end", file: "background/capture.js" }); - }); + chrome.tabs.executeScript(tabid, { runAt: "document_end", file: "background/capture.js" }); } function CaptureContent(task) { @@ -82,7 +80,7 @@ function CaptureContent(task) { } if (condition != undefined) { - chrome.tabs.executeScript(tab.id, { runAt: "document_end", code: condition }, function () { + chrome.tabs.executeScript(tab.id, { runAt: "document_start", code: condition }, function () { CaptureContentCurrentPage(tab.id) }); } else { diff --git a/chromeproxy/base.js b/chromeproxy/base.js index d99c818..47cc7cc 100644 --- a/chromeproxy/base.js +++ b/chromeproxy/base.js @@ -1,17 +1,19 @@ - var Host = "http://localhost:7123" var GetTaskUrl = `${Host}/task/get`; var FinishTaskUrl = `${Host}/task/content`; var ErrorTaskUrl = `${Host}/task/error`; +var ConfigUrl = `${Host}/task/config` var WorkerNumber = 1; +var ProxyServer = undefined; function UpdateHost(host) { Host = host GetTaskUrl = `${Host}/task/get` FinishTaskUrl = `${Host}/task/content` ErrorTaskUrl = `${Host}/task/error` + ConfigUrl = `${Host}/task/config` } const BackgroundMsgType = { diff --git a/chromeproxy/manifest.json b/chromeproxy/manifest.json index 60785d7..de3ede2 100644 --- a/chromeproxy/manifest.json +++ b/chromeproxy/manifest.json @@ -39,7 +39,7 @@ "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlurgt0Ykv740tjk1ebeiSX6UVVRRhxVvh+FvRMTe9PKzkAKUDEW2IjNUz1swxZA8ILnMvtyamAfiErTOxUFB8+zCADU/CK2YEhqUJo3tmHCg6EP2XJL220ZXjmIeft1AqJV1BmGRLhm8VnH8dJ2EThfcflx4JEdlh0/aLJr6UVjF2hPVX8JLAMTVjEfiC82KDNGgXDADqBm3E/6n+Dx+3KhgIYTXKIMk+qRVaOhjAJLh8a9OrDBwpylP5RDifTAyVVa9UOyoLNqynzC9oLabWUr1ovWAOiivhYknFCXnl5q971iNSFpmjc+ZW+aK+TRjMnJF84IeA170corVG3KgnwIDAQAB", "manifest_version": 2, "name": "ChromeProxy", - "permissions": ["background", "http://*/*", "https://*/*", "storage","tabs" , "activeTab", "webRequest", "webRequestBlocking", "", "webNavigation"], + "permissions": ["background", "http://*/*", "https://*/*", "proxy", "storage","tabs" , "activeTab", "webRequest", "webRequestBlocking", "", "webNavigation"], "short_name": "ChromeProxy", "version": "0.1.0" } diff --git a/chromeproxy/pac.js b/chromeproxy/pac.js new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/chromeproxy/pac.js @@ -0,0 +1 @@ + diff --git a/proxyserver/config.go b/proxyserver/config.go index b6701b9..4cd55ab 100644 --- a/proxyserver/config.go +++ b/proxyserver/config.go @@ -7,7 +7,7 @@ import ( "gopkg.in/yaml.v2" ) -var config = &Config{} +var config = &LocalConfig{} func init() { f, err := os.Open("config.yaml") @@ -21,8 +21,8 @@ func init() { } } -// Config 本地yaml配置对象 -type Config struct { +// LocalConfig 本地yaml配置对象 +type LocalConfig struct { Server struct { URI string `yaml:"uri"` } `yaml:"server"` @@ -41,3 +41,8 @@ func initChromeProxy() { panic(err) } } + +// ChromeConfig chrome的配置, 包括代理 +type ChromeConfig struct { + PacScript string +} diff --git a/proxyserver/go.mod b/proxyserver/go.mod index 6420842..e814226 100644 --- a/proxyserver/go.mod +++ b/proxyserver/go.mod @@ -3,7 +3,7 @@ module git.nonolive.co/eson.hsm/proxyserver go 1.15 require ( - github.com/474420502/focus v0.12.0 + github.com/474420502/focus v0.13.1 github.com/474420502/requests v1.10.1 github.com/bwmarrin/snowflake v0.3.0 github.com/gin-gonic/gin v1.6.3 diff --git a/proxyserver/go.sum b/proxyserver/go.sum index 24c9484..328340e 100644 --- a/proxyserver/go.sum +++ b/proxyserver/go.sum @@ -1,6 +1,10 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/474420502/focus v0.12.0 h1:+icbmj7IEOefvTegHt5EpcHt6WFbe2miIrceUJx2Evo= github.com/474420502/focus v0.12.0/go.mod h1:d0PMjtMxFz1a9HIhwyFPkWa+JF+0LgOrEUfd8iZka6s= +github.com/474420502/focus v0.13.0 h1:68G0txM38EinNitcfpP0752k8tF4JRJ0r1mmdH6FoGc= +github.com/474420502/focus v0.13.0/go.mod h1:d0PMjtMxFz1a9HIhwyFPkWa+JF+0LgOrEUfd8iZka6s= +github.com/474420502/focus v0.13.1 h1:HwJCqY60eqRAkwKtIefJib1ofBfcvVh5ZTU2xE8Gmkk= +github.com/474420502/focus v0.13.1/go.mod h1:SrqNq63qSx53TkvVWOuHTbTSvAQTNO8ZUrufXm0Ncq8= github.com/474420502/requests v1.10.0 h1:Oz7+Nx+1iuJJUjbBH3cVmkDVosF2tyq5d72TMAoQH8I= github.com/474420502/requests v1.10.0/go.mod h1:SB8/RIUVWF3AGotuq/mATUwAjXzzlV7iWaBNM3+c06c= github.com/474420502/requests v1.10.1 h1:k5qK8ZWPIdrG0EurJuK2hhoYFbJ9GJTe0xvrzESMFLo= @@ -127,6 +131,7 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= diff --git a/proxyserver/router.go b/proxyserver/router.go index 8c8c30c..bf61343 100644 --- a/proxyserver/router.go +++ b/proxyserver/router.go @@ -42,10 +42,9 @@ func init() { task := engine.Group("/task") task.GET("/get", GetTask) task.POST("/put", PutTask) - task.POST("/content", ContentTask) - task.POST("/error", ErrorTask) + task.GET("/config", GetConfig) task.GET("/ready", ReadyTask) task.POST("/ack", AckTask) @@ -174,6 +173,11 @@ func ReadyTask(c *gin.Context) { c.JSON(http.StatusOK, Response{Code: 404, Message: fmt.Sprintf("taskid: %s is not found", tid)}) } +// GetConfig 获取任务配置 +func GetConfig(c *gin.Context) { + +} + // ErrorTask 任务错误无法完成 func ErrorTask(c *gin.Context) { tid := c.PostForm("taskid")