From 53984328a907dd62fa4635ae3ea4e4e892f3abdf Mon Sep 17 00:00:00 2001 From: rekby Date: Wed, 2 Dec 2020 01:23:08 +0300 Subject: [PATCH 1/6] Fix http transport typo --- internal/proxy/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/proxy/config.go b/internal/proxy/config.go index 6a7071fd..523bc733 100644 --- a/internal/proxy/config.go +++ b/internal/proxy/config.go @@ -45,7 +45,7 @@ func (c *Config) Apply(ctx context.Context, p *HTTPProxy) error { appendDirector(c.getMapDirector) appendDirector(c.getHeadersDirector) appendDirector(c.getSchemaDirector) - p.httpReverseProxy.Transport = Transport{c.HTTPSBackendIgnoreCert} + p.HTTPTransport = Transport{c.HTTPSBackendIgnoreCert} if resErr != nil { zc.L(ctx).Error("Can't parse proxy config", zap.Error(resErr)) From 4f247e33a94832307187b329665e72b0e39baa6e Mon Sep 17 00:00:00 2001 From: rekby Date: Wed, 2 Dec 2020 01:58:05 +0300 Subject: [PATCH 2/6] Add access log --- cmd/a_main-packr.go | 2 +- cmd/config.go | 1 + cmd/main.go | 1 + cmd/static/default-config.toml | 3 ++ internal/proxy/config.go | 2 ++ internal/proxy/http-proxy.go | 5 ++++ internal/proxy/transport_logger.go | 40 +++++++++++++++++++++++++ internal/proxy/transport_logger_test.go | 7 +++++ 8 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 internal/proxy/transport_logger.go create mode 100644 internal/proxy/transport_logger_test.go diff --git a/cmd/a_main-packr.go b/cmd/a_main-packr.go index 8435336d..e0f1e7ae 100644 --- a/cmd/a_main-packr.go +++ b/cmd/a_main-packr.go @@ -7,5 +7,5 @@ import "github.com/gobuffalo/packr" // You can use the "packr clean" command to clean up this, // and any other packr generated files. func init() { - packr.PackJSONBytes("static", "default-config.toml", "\"IyMgQVRURU5USU9OCiMgaXQgaXMgZXhhbXBsZSBmaWxlIG9ubHkuIEl0IGJ1aWx0aW4gaW4gYmluYXJ5IGFuZCBkb24ndCByZWFkIGZyb20gZmlsZSBzeXN0ZW0uCiMgY2hhbmdlcyBpbiBjb25maWdfZGVmYXVsdC50b21sIGhhdmUgbm8gcmVhbCBlZmZlY3QuCgpbR2VuZXJhbF0KCiMgU2Vjb25kcyBmb3IgaXNzdWUgZXZlcnkgY2VydGlmaWNhdGUuIENhbmNlbCBpc3N1ZSBhbmQgcmV0dXJuIGVycm9yIGlmIHRpbWVvdXQuCklzc3VlVGltZW91dCA9IDMwMAoKIyBQYXRoIHRvIGRpciwgd2hpY2ggd2lsbCBzdG9yZSBzdGF0ZSBhbmQgY2VydGlmaWNhdGVzClN0b3JhZ2VEaXIgPSAic3RvcmFnZSIKCiMgU3RvcmUgLmpzb24gaW5mbyB3aXRoIGNlcnRpZmljYXRlIG1ldGFkYXRhIG5lYXIgY2VydGlmaWNhdGUuClN0b3JlSlNPTk1ldGFkYXRhID0gdHJ1ZQoKIyBTdWJkb21haW5zLCBhdXRvLWluY2x1ZGVkIHdpdGhpbiBjZXJ0aWZpY2F0ZSBvZiBtYWluIGRvbWFpbiBuYW1lClN1YmRvbWFpbnMgPSBbInd3dy4iXQoKIyBEaXJlY3RvcnkgdXJsIG9mIGFjbWUgc2VydmVyLgojVGVzdCBzZXJ2ZXI6IGh0dHBzOi8vYWNtZS1zdGFnaW5nLXYwMi5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeQpBY21lU2VydmVyID0gImh0dHBzOi8vYWNtZS12MDIuYXBpLmxldHNlbmNyeXB0Lm9yZy9kaXJlY3RvcnkiCgojIEluY2x1ZGUgb3RoZXIgY29uZmlnIGZpbGVzCiMgSXQgc3VwcG9ydCBnbG9iIHN5bnRheAojIElmIGl0IGhhcyBwYXRoIHdpdGhvdXQgdGVtcGxhdGUgLSB0aGUgZmlsZSBtdXN0IGV4aXN0LgojIEZvciBhbGxvdyBvcHRpb25hbCBpbmNsdWRlIGZpbGUgLSBpdCBjYW4gY29udGFpbiBzb21lIGdsb2Igc3ltYm9sCiMgSW5jbHVkZWQgY29uZmlncyBtZXJnZSB3aXRoIGN1cnJlbnQgcmVhZGVkIHN0YXRlLgojIGV4YW1wbGU9WyAiY29uZmlnLnRvbVtsXSIgXQpJbmNsdWRlQ29uZmlncyA9IFtdCgojIEZvciBwcmV2ZW50IGluZmluaXRlIGxvb3AgYW5kIGNvbnN1bWUgYWxsIG1lbW9yeSBpZiBjeWNsZSBpbiBpbmNsdWRlcwpNYXhDb25maWdGaWxlc1JlYWQgPSAxMDAwMAoKQWxsb3dSU0FDZXJ0ID0gdHJ1ZQpBbGxvd0VDRFNBQ2VydCA9IHRydWUKCltMb2ddCkVuYWJsZUxvZ1RvRmlsZSA9IHRydWUKRW5hYmxlTG9nVG9TdGRFcnIgPSB0cnVlCgojIHZlcmJvc2UgbGV2ZWwgb2YgbG9nLCBvbmUgb2Y6IGRlYnVnLCBpbmZvLCB3YXJuaW5nLCBlcnJvciwgZmF0YWwKTG9nTGV2ZWwgPSAiaW5mbyIKCiMgRW5hYmxlIHNlbGYgbG9nIHJvdGF0aW5nCkVuYWJsZVJvdGF0ZSA9IHRydWUKCiMgRW5hYmxlIGRldmVsb3BlciBtb2RlOiBtb3JlIHN0YWNrdHJhY2VzIGFuZCBwYW5pYyAoc3RvcCBwcm9ncmFtKSBvbiBzb21lIGludGVybmFsIGVycm9ycy4KRGV2ZWxvcGVyTW9kZSA9IGZhbHNlCgojIFBhdGggdG8gbG9nIGZpbGUKRmlsZSA9ICJsZXRzLXByb3h5LmxvZyIKCiMgUm90YXRlIGxvZyBpZiBjdXJyZW50IGZpbGUgc2l6ZSBtb3JlIHRoYW4gWCBNQgpSb3RhdGVCeVNpemVNQiA9IDEwMAoKIyBDb21wcmVzcyBvbGQgbG9nIHdpdGggZ3ppcCBhZnRlciByb3RhdGUKQ29tcHJlc3NSb3RhdGVkID0gZmFsc2UKCiMgRGVsZXRlIG9sZCBiYWNrdXBzIGFmdGVyIFggZGF5cy4gMCBmb3IgZGlzYWJsZS4KTWF4RGF5cyA9IDEwCgojIERlbGV0ZSBvbGQgYmFja3VwcyBpZiBvbGQgZmlsZSBudW1iZXIgbW9yZSB0aGVuIFguIDAgZm9yIGRpc2FibGUuCk1heENvdW50ID0gMTAKCltQcm94eV0KCiMgRGVmYXVsdCBydWxlIG9mIHNlbGVjdCBkZXN0aW5hdGlvbiBhZGRyZXNzLgojIEl0IGNhbiBiZTogSVAgKHdpdGggZGVmYXVsdCBwb3J0IDgwKSwgOlBvcnQgKGRlZmF1bHQgLSBzYW1lIElQIGFzIHJlY2VpdmUgY29ubmVjdGlvbiksIElQdjQ6UG9ydCBvciBbSVB2Nl06UG9ydAojIE11c3QgZGVmaW5lIHBvcnQgZm9yY2UgaWYgSFRUUFNCYWNrZW5kIGlzIHRydWUKRGVmYXVsdFRhcmdldCA9ICI6ODAiCgojIEFmdGVyIEtlZXBBbGl2ZVRpbWVvdXRTZWNvbmRzIG9mIGluYWN0aXZlIGluY29taW5nIGNvbm5lY3Rpb24gd2lsbCBjbG9zZS4KS2VlcEFsaXZlVGltZW91dFNlY29uZHMgPSA5MDAKCiMgQXJyYXkgb2YgJy0nIHNlcGFyYXRlZCBwYWlycyBvciBJUDpQb3J0LiBGb3IgZXhhbXBsZToKIyBbCiMgICAiMS4yLjMuNDo0NDMtMi4yLjIuMjoxMjM0IiwKIyAgICIzLjMuMy4zOjMzMy1bOjoxXTo5NCIKIyAiXQojIE1lYW46IGNvbm5lY3Rpb25zLCBhY2NlcHRlZCBvbiAxLjIuMy40OjQ0MyBzZW5kIHRvIHNlcnZlciAyLjIuMi4yOjEyMzQKIyBhbmQgY29ubmVjdGlvbnMgYWNjZXB0ZWQgb24gMy4zLjMuMzozMzMgc2VuZCB0byBpcHY2IDo6MSBwb3J0IDk0ClRhcmdldE1hcCA9IFtdCgojIEFycmF5IG9mIGNvbG9uIHNlcGFyYXRlZCBIZWFkZXJOYW1lOkhlYWRlclZhbHVlIGZvciBhZGQgdG8gcmVxdWVzdCBmb3IgYmFja2VuZC4ge3tWYWx1ZX19IGlzIHNwZWNpYWwgZm9ybXMsIHdoaWNoIGNhbgojIGludGVybmFsbHkgcGFyc2luZy4gTm93IGl0IHN1cHBvcnQgb25seSBzcGVjaWFsIHZhbHVlczoKIyB7e0NPTk5FQ1RJT05fSUR9fSAtIElkIG9mIGFjY2VwdGVkIGNvbm5lY3Rpb24sIGdlbmVyYXRlZCBieSBsZXRzLXByb3h5CiMge3tIVFRQX1BST1RPfX0gLSBzZXQgdG8gaHR0cC9odHRwcyBkZXBlbmRlbmNlIGluY29taW5nIGNvbm5lY3Rpb25zIGhhbmRsZWQKIyB7e1NPVVJDRV9JUH19IC0gUmVtb3RlIElQIG9mIGluY29taW5nIGNvbm5lY3Rpb24KIyB7e1NPVVJDRV9QT1JUfX0gLSBSZW1vdGUgcG9ydCBvZiBpbmNvbWluZyBjb25uZWN0aW9uCiMge3tTT1VSQ0VfSVB9fTp7e1NPVVJDRV9QT1JUfX0gLSBSZW1vdGUgSVA6UG9ydCBvZiBpbmNvbWluZyBjb25uZWN0aW9uLgojIE5vdyBpdCBhY2NlcHRlZCBvbmx5IHRoaXMgc3BlY2lhbCB2YWx1ZXMsIHdoaWNoIG11c3QgYmUgZXhheGx0eSBlcXVhbCB0byBleGFtcGxlcy4gQWxsIG90aGVyIHZhbHVlcyBzZW5kIGFzIGlzLgojIEJ1dCBpdCBjYW4gY2hhbmdlIGFuZCBleHRlbmQgaW4gZnV0dXJlLiBEb2Vzbid0IHVzZSB7ey4uLn19IGFzIG93biB2YWx1ZXMuCiMgRXhhbXBsZToKIyBbIklQOnt7U09VUkNFX0lQfX0iLCAiUHJveHk6bGV0cy1wcm94eSIsICJQcm90b2NvbDp7e0hUVFBfUFJPVE99fSIgXQpIZWFkZXJzID0gWyAiWC1Gb3J3YXJkZWQtUHJvdG86e3tIVFRQX1BST1RPfX0iLCAiWC1Gb3J3YXJkZWQtRm9yOnt7U09VUkNFX0lQfX0iIF0KCiMgVXNlIGh0dHBzIHJlcXVlc3RzIHRvIGJhY2tlbmQgaW5zdGVhZCBvZiBodHRwCkhUVFBTQmFja2VuZCA9IGZhbHNlCgojIElnbm9yZSBiYWNrZW5kIGh0dHBzIGNlcnRpZmljYXRlIHZhbGlkYXRpb25zIGlmIEhUVFBTQmFja2VuZCBpcyB0cnVlCkhUVFBTQmFja2VuZElnbm9yZUNlcnQgPSB0cnVlCgpbQ2hlY2tEb21haW5zXQoKIyBBbGxvdyBkb21haW4gaWYgaXQgcmVzb2x2ZXIgZm9yIG9uZSBvZiBwdWJsaWMgSVBzIG9mIHRoaXMgc2VydmVyLgpJUFNlbGYgPSB0cnVlCgojIEhvdyBkZXRlY3QgcHVibGljIGlwcyBvZiB0aGUgc2VydmVyLgojIGl0IHVzZSBpZiBJUFNlbGYgaXMgdHJ1ZQojIGF1dG8gfCBsb2NhbCB8IGF3cyAgfCB5YW5kZXgKIyBhdXRvIC0gYmVzdCBlZmZvcnQgZm9yIGRldGVjdCBJUC4gQWxnb3JpdG0gbWF5IGNoYW5nZSBmcm9tIHRpbWUgdG8gdGltZS4KIyAgICAgICAgaXQgZ29vZCBmb3IgZGVmYXVsdC4KIyBiaW5kIC0gZGV0ZWN0IHB1YmxpYyBJUCBiaW5kZWQgdG8gbG9jYWwgaW50ZXJmYWNlcwojIGF3cyAtIGRldGVjdCBwdWJsaWMgSVBzIGJ5IHF1ZXJ5IHRvIEFXUyBFQzIgbWV0YWRhdGEKIyBleHRlcm5hbCAtIGRldGVjdCBzZWxmIGlwIGJ5IHJlcXVlc3QgdG8gZXh0ZXJuYWwgc2VydmVyIElQU2VsZkV4dGVybmFsRGV0ZWN0b3IKIyB5YW5kZXggLSBkZXRlY3QgcHVibGljIElQcyBieSBxdWVyeSB0byBZYW5kZXggY2xvdWQgbWV0YWRhdGEgKG5vdyBhbGlhcyBmb3IgYXdzKQpJUFNlbGZEZXRlY3RNZXRob2QgPSAiYXV0byIKCiMgU2VydmVyIGZvciB1c2UgYXMgZXh0ZXJuYWwgZGV0ZWN0b3Igb2Ygc2VydmVyIElQIChuZWVkIGZvciBkZXRlY3QgSVAgYmVoaW5kIE5BVAojIFNlcnZlciBtdXN0IHJlc3BvbnNlIGFzIHBsYWluIHRleHQgSVAgYWRkcmVzcy4KIyBGb3IgZXZlcnkgZGV0ZWN0IGxldHMtcHJveHkgbWFrZSB0d28gcmVxdWVzdHM6IGJ5IGlwdjQgYW5kIGlwdjYgbmV0d29ya3MKSVBTZWxmRXh0ZXJuYWxEZXRlY3RvclVSTD0iaHR0cDovL2lmY29uZmlnLmlvL2lwIgoKIyBBbGxvdyBkb21haW4gaWYgaXQgcmVzb2x2ZXIgZm9yIG9uZSBvZiB0aGUgaXBzLgpJUFdoaXRlTGlzdCA9ICIiCgojIFJlZ2V4cCBpbiBnb2xhbmcgc3ludGF4IG9mIGJsYWNrbGlzdGVkIGRvbWFpbiBmb3IgaXNzdWUgY2VydGlmaWNhdGUuCiNUaGlzIGxpc3Qgb3ZlcnJpZGVkIGJ5IHdoaXRlbGlzdC4KQmxhY2tMaXN0ID0gIiIKCiMgUmVnZXhwIGluIGdvbGFuZyBzeW50YXggb2Ygd2hpdGVsaXN0IGRvbWFpbnMgZm9yIGlzc3VlIGNlcnRpZmljYXRlLgojV2hpdGVsaXN0IG5lZWQgZm9yIGFsbG93IHBhcnQgb2YgZG9tYWlucywgd2hpY2ggZXhjbHVkZWQgYnkgYmxhY2tsaXN0LgojCldoaXRlTGlzdCA9ICIiCgojIENvbW1hIHNlcGFyYXRlZCBkbnMgc2VydmVyLCB1c2VkIGZvciByZXNvbHZlIGlwOnBvcnQgYWRkcmVzcyBvZiBkb21haW5zIHdoaWxlIGNoZWNrIGl0LgojIGlmIGVtcHR5IC0gdXNlIHN5c3RlbSBkbnMgcmVzb2x2ZXIgKHVzdWFsbHkgaW5jbHVkZSBob3N0cyBmaWxlLCBjYWNoZSwgZXRjKQojIGlmIHNldCAtIHVzZSBkaXJlY3QgZG5zIHF1ZXJpZXMgZm9yIHNlcnZlcnMsIHdpdGhvdXQgc2VsZiBjYWNoZS4KIyBpZiBzZXQgbW9yZSwgdGhhbiBvbmUgZG5zIHNlcnZlciAtIHNlbmQgcXVlcmllcyBpbiBwYXJhbGxlbCB0byBhbGwgc2VydmVycy4KIyBlcnJvciByZXN1bHRzIGZyb20gcGFydCBvZiBzZXJ2ZXJzIC0gaWdub3JlLiBOZWVkIG1pbmltdW0gb25lIGFuc3dlci4KIyBpZiBkaWZmZXJlbnQgZG5zIHNlcnZlcnMgcmV0dXJuIGRpZmZlcmVudCBpcCBhZGRyZXNzZXMgLSBhbGwgb2YgdGhlbSB1c2UgZm9yIGNoZWNrCiMgRXhhbXBsZTogIjguOC44Ljg6NTMsMS4xLjEuMTo1Myw3Ny44OC44Ljg6NTMsWzJhMDI6NmI4OjpmZWVkOjBmZl06NTMsWzIwMDE6NDg2MDo0ODYwOjo4ODg4XTo1MyIKUmVzb2x2ZXIgPSAiIgoKCgpbTGlzdGVuXQoKIyBCaW5kIGFkZHJlc3NlcyBmb3IgVExTIGxpc3RlbmVycwpUTFNBZGRyZXNzZXMgPSBbIjo0NDMiXQoKIyBCaW5kIGFkZHJlc3NlcyB3aXRob3V0IFRMUyBzZWN1cmUgKGZvciBIVFRQIHJldmVyc2UgcHJveHkgYW5kIGh0dHAtMDEgdmFsaWRhdGlvbiB3aXRob3V0IHJlZGlyZWN0IHRvIGh0dHBzKQpUQ1BBZGRyZXNzZXMgPSBbXQoKCltNZXRyaWNzXQojIEVuYWJsZSBtZXRyaWNzIGluIHByb21ldGhlb3VzIGZvcm1hdGggYnkgaHR0cC4KRW5hYmxlID0gZmFsc2UKCiMgQmluZCBhZGRyZXNzZXMgZm9yIGdldCBieSBodHRwcwpUTFNBZGRyZXNzZXMgPSBbICJbOjpdOjYyMTAxIiBdCgojIEJpbmQgYWRkcmVzc2VzIHdpdGhvdXQgVExTIHNlY3VyZSAoZm9yIEhUVFAgcmV2ZXJzZSBwcm94eSBhbmQgaHR0cC0wMSB2YWxpZGF0aW9uIHdpdGhvdXQgcmVkaXJlY3QgdG8gaHR0cHMpClRDUEFkZHJlc3NlcyA9IFsgIls6Ol06NjIxMDAiIF0KCiMgSVAgbmV0d29ya3MgZm9yIGFsbG93IHRvIGdldCBtZXRyaWNzLgojIERlZmF1bHQgLSBhbGxvdyBmcm9tIGFsbC4KIyBFeGFtcGxlOgojIFsgIjEuMi4zLjQvMzIiLCAiMTkyLjE2OC4wLjAvMjQiLCAiOjoxLzEyOCIgXQpBbGxvd2VkTmV0d29ya3MgPSBbXQoKIyBQYXNzd29yZCBmb3IgZ2V0IG1ldHJpY3MsIGFkZCBhcyBnZXQgcGFyYW0gP3Bhc3N3b3JkPS4uLgpQYXNzd29yZCAgICAgICAgPSAiIgoKIyBBbGxvdyBzZXQgcGFzc3dvcmQgdG8gZW1wdHkgc3RyaW5nCkFsbG93RW1wdHlQYXNzd29yZCAgPSBmYWxzZQoKCgpbUHJvZmlsZXJdCkVuYWJsZSA9IGZhbHNlCgojIElQIG5ldHdvcmtzIGZvciBhbGxvdyB0byB1c2UgcHJvZmlsZXIuCiMgRGVmYXVsdCAtIGFsbG93IGZyb20gYWxsLgojIEV4YW1wbGU6CiMgWyAiMS4yLjMuNC8zMiIsICIxOTIuMTY4LjAuMC8yNCIsICI6OjEvMTI4IiBdCkFsbG93ZWROZXR3b3JrcyA9IFtdCkJpbmRBZGRyZXNzID0gImxvY2FsaG9zdDozMTM0NCIKUGFzc3dvcmQgICAgICAgID0gIiIKQWxsb3dFbXB0eVBhc3N3b3JkICA9IGZhbHNlCg==\"") + packr.PackJSONBytes("static", "default-config.toml", "\"IyMgQVRURU5USU9OCiMgaXQgaXMgZXhhbXBsZSBmaWxlIG9ubHkuIEl0IGJ1aWx0aW4gaW4gYmluYXJ5IGFuZCBkb24ndCByZWFkIGZyb20gZmlsZSBzeXN0ZW0uCiMgY2hhbmdlcyBpbiBjb25maWdfZGVmYXVsdC50b21sIGhhdmUgbm8gcmVhbCBlZmZlY3QuCgpbR2VuZXJhbF0KCiMgU2Vjb25kcyBmb3IgaXNzdWUgZXZlcnkgY2VydGlmaWNhdGUuIENhbmNlbCBpc3N1ZSBhbmQgcmV0dXJuIGVycm9yIGlmIHRpbWVvdXQuCklzc3VlVGltZW91dCA9IDMwMAoKIyBQYXRoIHRvIGRpciwgd2hpY2ggd2lsbCBzdG9yZSBzdGF0ZSBhbmQgY2VydGlmaWNhdGVzClN0b3JhZ2VEaXIgPSAic3RvcmFnZSIKCiMgU3RvcmUgLmpzb24gaW5mbyB3aXRoIGNlcnRpZmljYXRlIG1ldGFkYXRhIG5lYXIgY2VydGlmaWNhdGUuClN0b3JlSlNPTk1ldGFkYXRhID0gdHJ1ZQoKIyBTdWJkb21haW5zLCBhdXRvLWluY2x1ZGVkIHdpdGhpbiBjZXJ0aWZpY2F0ZSBvZiBtYWluIGRvbWFpbiBuYW1lClN1YmRvbWFpbnMgPSBbInd3dy4iXQoKIyBEaXJlY3RvcnkgdXJsIG9mIGFjbWUgc2VydmVyLgojVGVzdCBzZXJ2ZXI6IGh0dHBzOi8vYWNtZS1zdGFnaW5nLXYwMi5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeQpBY21lU2VydmVyID0gImh0dHBzOi8vYWNtZS12MDIuYXBpLmxldHNlbmNyeXB0Lm9yZy9kaXJlY3RvcnkiCgojIEluY2x1ZGUgb3RoZXIgY29uZmlnIGZpbGVzCiMgSXQgc3VwcG9ydCBnbG9iIHN5bnRheAojIElmIGl0IGhhcyBwYXRoIHdpdGhvdXQgdGVtcGxhdGUgLSB0aGUgZmlsZSBtdXN0IGV4aXN0LgojIEZvciBhbGxvdyBvcHRpb25hbCBpbmNsdWRlIGZpbGUgLSBpdCBjYW4gY29udGFpbiBzb21lIGdsb2Igc3ltYm9sCiMgSW5jbHVkZWQgY29uZmlncyBtZXJnZSB3aXRoIGN1cnJlbnQgcmVhZGVkIHN0YXRlLgojIGV4YW1wbGU9WyAiY29uZmlnLnRvbVtsXSIgXQpJbmNsdWRlQ29uZmlncyA9IFtdCgojIEZvciBwcmV2ZW50IGluZmluaXRlIGxvb3AgYW5kIGNvbnN1bWUgYWxsIG1lbW9yeSBpZiBjeWNsZSBpbiBpbmNsdWRlcwpNYXhDb25maWdGaWxlc1JlYWQgPSAxMDAwMAoKQWxsb3dSU0FDZXJ0ID0gdHJ1ZQpBbGxvd0VDRFNBQ2VydCA9IHRydWUKCltMb2ddCkVuYWJsZUxvZ1RvRmlsZSA9IHRydWUKRW5hYmxlTG9nVG9TdGRFcnIgPSB0cnVlCgojIHZlcmJvc2UgbGV2ZWwgb2YgbG9nLCBvbmUgb2Y6IGRlYnVnLCBpbmZvLCB3YXJuaW5nLCBlcnJvciwgZmF0YWwKTG9nTGV2ZWwgPSAiaW5mbyIKCiMgRGlzYWJsZSB3cml0ZSBpbmZvIGFib3V0IGV2ZXJ5IGh0dHAgcmVxdWVzdCAoYnV0IHdyaXRlIGluZm8gYWJvdXQgY29ubmVjdGlvbnMgaWYgbmVlZCBieSBsZXZlbCkKRGlzYWJsZUFjY2Vzc0xvZyA9IGZhbHNlCgojIEVuYWJsZSBzZWxmIGxvZyByb3RhdGluZwpFbmFibGVSb3RhdGUgPSB0cnVlCgojIEVuYWJsZSBkZXZlbG9wZXIgbW9kZTogbW9yZSBzdGFja3RyYWNlcyBhbmQgcGFuaWMgKHN0b3AgcHJvZ3JhbSkgb24gc29tZSBpbnRlcm5hbCBlcnJvcnMuCkRldmVsb3Blck1vZGUgPSBmYWxzZQoKIyBQYXRoIHRvIGxvZyBmaWxlCkZpbGUgPSAibGV0cy1wcm94eS5sb2ciCgojIFJvdGF0ZSBsb2cgaWYgY3VycmVudCBmaWxlIHNpemUgbW9yZSB0aGFuIFggTUIKUm90YXRlQnlTaXplTUIgPSAxMDAKCiMgQ29tcHJlc3Mgb2xkIGxvZyB3aXRoIGd6aXAgYWZ0ZXIgcm90YXRlCkNvbXByZXNzUm90YXRlZCA9IGZhbHNlCgojIERlbGV0ZSBvbGQgYmFja3VwcyBhZnRlciBYIGRheXMuIDAgZm9yIGRpc2FibGUuCk1heERheXMgPSAxMAoKIyBEZWxldGUgb2xkIGJhY2t1cHMgaWYgb2xkIGZpbGUgbnVtYmVyIG1vcmUgdGhlbiBYLiAwIGZvciBkaXNhYmxlLgpNYXhDb3VudCA9IDEwCgpbUHJveHldCgojIERlZmF1bHQgcnVsZSBvZiBzZWxlY3QgZGVzdGluYXRpb24gYWRkcmVzcy4KIyBJdCBjYW4gYmU6IElQICh3aXRoIGRlZmF1bHQgcG9ydCA4MCksIDpQb3J0IChkZWZhdWx0IC0gc2FtZSBJUCBhcyByZWNlaXZlIGNvbm5lY3Rpb24pLCBJUHY0OlBvcnQgb3IgW0lQdjZdOlBvcnQKIyBNdXN0IGRlZmluZSBwb3J0IGZvcmNlIGlmIEhUVFBTQmFja2VuZCBpcyB0cnVlCkRlZmF1bHRUYXJnZXQgPSAiOjgwIgoKIyBBZnRlciBLZWVwQWxpdmVUaW1lb3V0U2Vjb25kcyBvZiBpbmFjdGl2ZSBpbmNvbWluZyBjb25uZWN0aW9uIHdpbGwgY2xvc2UuCktlZXBBbGl2ZVRpbWVvdXRTZWNvbmRzID0gOTAwCgojIEFycmF5IG9mICctJyBzZXBhcmF0ZWQgcGFpcnMgb3IgSVA6UG9ydC4gRm9yIGV4YW1wbGU6CiMgWwojICAgIjEuMi4zLjQ6NDQzLTIuMi4yLjI6MTIzNCIsCiMgICAiMy4zLjMuMzozMzMtWzo6MV06OTQiCiMgIl0KIyBNZWFuOiBjb25uZWN0aW9ucywgYWNjZXB0ZWQgb24gMS4yLjMuNDo0NDMgc2VuZCB0byBzZXJ2ZXIgMi4yLjIuMjoxMjM0CiMgYW5kIGNvbm5lY3Rpb25zIGFjY2VwdGVkIG9uIDMuMy4zLjM6MzMzIHNlbmQgdG8gaXB2NiA6OjEgcG9ydCA5NApUYXJnZXRNYXAgPSBbXQoKIyBBcnJheSBvZiBjb2xvbiBzZXBhcmF0ZWQgSGVhZGVyTmFtZTpIZWFkZXJWYWx1ZSBmb3IgYWRkIHRvIHJlcXVlc3QgZm9yIGJhY2tlbmQuIHt7VmFsdWV9fSBpcyBzcGVjaWFsIGZvcm1zLCB3aGljaCBjYW4KIyBpbnRlcm5hbGx5IHBhcnNpbmcuIE5vdyBpdCBzdXBwb3J0IG9ubHkgc3BlY2lhbCB2YWx1ZXM6CiMge3tDT05ORUNUSU9OX0lEfX0gLSBJZCBvZiBhY2NlcHRlZCBjb25uZWN0aW9uLCBnZW5lcmF0ZWQgYnkgbGV0cy1wcm94eQojIHt7SFRUUF9QUk9UT319IC0gc2V0IHRvIGh0dHAvaHR0cHMgZGVwZW5kZW5jZSBpbmNvbWluZyBjb25uZWN0aW9ucyBoYW5kbGVkCiMge3tTT1VSQ0VfSVB9fSAtIFJlbW90ZSBJUCBvZiBpbmNvbWluZyBjb25uZWN0aW9uCiMge3tTT1VSQ0VfUE9SVH19IC0gUmVtb3RlIHBvcnQgb2YgaW5jb21pbmcgY29ubmVjdGlvbgojIHt7U09VUkNFX0lQfX06e3tTT1VSQ0VfUE9SVH19IC0gUmVtb3RlIElQOlBvcnQgb2YgaW5jb21pbmcgY29ubmVjdGlvbi4KIyBOb3cgaXQgYWNjZXB0ZWQgb25seSB0aGlzIHNwZWNpYWwgdmFsdWVzLCB3aGljaCBtdXN0IGJlIGV4YXhsdHkgZXF1YWwgdG8gZXhhbXBsZXMuIEFsbCBvdGhlciB2YWx1ZXMgc2VuZCBhcyBpcy4KIyBCdXQgaXQgY2FuIGNoYW5nZSBhbmQgZXh0ZW5kIGluIGZ1dHVyZS4gRG9lc24ndCB1c2Uge3suLi59fSBhcyBvd24gdmFsdWVzLgojIEV4YW1wbGU6CiMgWyJJUDp7e1NPVVJDRV9JUH19IiwgIlByb3h5OmxldHMtcHJveHkiLCAiUHJvdG9jb2w6e3tIVFRQX1BST1RPfX0iIF0KSGVhZGVycyA9IFsgIlgtRm9yd2FyZGVkLVByb3RvOnt7SFRUUF9QUk9UT319IiwgIlgtRm9yd2FyZGVkLUZvcjp7e1NPVVJDRV9JUH19IiBdCgojIFVzZSBodHRwcyByZXF1ZXN0cyB0byBiYWNrZW5kIGluc3RlYWQgb2YgaHR0cApIVFRQU0JhY2tlbmQgPSBmYWxzZQoKIyBJZ25vcmUgYmFja2VuZCBodHRwcyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9ucyBpZiBIVFRQU0JhY2tlbmQgaXMgdHJ1ZQpIVFRQU0JhY2tlbmRJZ25vcmVDZXJ0ID0gdHJ1ZQoKW0NoZWNrRG9tYWluc10KCiMgQWxsb3cgZG9tYWluIGlmIGl0IHJlc29sdmVyIGZvciBvbmUgb2YgcHVibGljIElQcyBvZiB0aGlzIHNlcnZlci4KSVBTZWxmID0gdHJ1ZQoKIyBIb3cgZGV0ZWN0IHB1YmxpYyBpcHMgb2YgdGhlIHNlcnZlci4KIyBpdCB1c2UgaWYgSVBTZWxmIGlzIHRydWUKIyBhdXRvIHwgbG9jYWwgfCBhd3MgIHwgeWFuZGV4CiMgYXV0byAtIGJlc3QgZWZmb3J0IGZvciBkZXRlY3QgSVAuIEFsZ29yaXRtIG1heSBjaGFuZ2UgZnJvbSB0aW1lIHRvIHRpbWUuCiMgICAgICAgIGl0IGdvb2QgZm9yIGRlZmF1bHQuCiMgYmluZCAtIGRldGVjdCBwdWJsaWMgSVAgYmluZGVkIHRvIGxvY2FsIGludGVyZmFjZXMKIyBhd3MgLSBkZXRlY3QgcHVibGljIElQcyBieSBxdWVyeSB0byBBV1MgRUMyIG1ldGFkYXRhCiMgZXh0ZXJuYWwgLSBkZXRlY3Qgc2VsZiBpcCBieSByZXF1ZXN0IHRvIGV4dGVybmFsIHNlcnZlciBJUFNlbGZFeHRlcm5hbERldGVjdG9yCiMgeWFuZGV4IC0gZGV0ZWN0IHB1YmxpYyBJUHMgYnkgcXVlcnkgdG8gWWFuZGV4IGNsb3VkIG1ldGFkYXRhIChub3cgYWxpYXMgZm9yIGF3cykKSVBTZWxmRGV0ZWN0TWV0aG9kID0gImF1dG8iCgojIFNlcnZlciBmb3IgdXNlIGFzIGV4dGVybmFsIGRldGVjdG9yIG9mIHNlcnZlciBJUCAobmVlZCBmb3IgZGV0ZWN0IElQIGJlaGluZCBOQVQKIyBTZXJ2ZXIgbXVzdCByZXNwb25zZSBhcyBwbGFpbiB0ZXh0IElQIGFkZHJlc3MuCiMgRm9yIGV2ZXJ5IGRldGVjdCBsZXRzLXByb3h5IG1ha2UgdHdvIHJlcXVlc3RzOiBieSBpcHY0IGFuZCBpcHY2IG5ldHdvcmtzCklQU2VsZkV4dGVybmFsRGV0ZWN0b3JVUkw9Imh0dHA6Ly9pZmNvbmZpZy5pby9pcCIKCiMgQWxsb3cgZG9tYWluIGlmIGl0IHJlc29sdmVyIGZvciBvbmUgb2YgdGhlIGlwcy4KSVBXaGl0ZUxpc3QgPSAiIgoKIyBSZWdleHAgaW4gZ29sYW5nIHN5bnRheCBvZiBibGFja2xpc3RlZCBkb21haW4gZm9yIGlzc3VlIGNlcnRpZmljYXRlLgojVGhpcyBsaXN0IG92ZXJyaWRlZCBieSB3aGl0ZWxpc3QuCkJsYWNrTGlzdCA9ICIiCgojIFJlZ2V4cCBpbiBnb2xhbmcgc3ludGF4IG9mIHdoaXRlbGlzdCBkb21haW5zIGZvciBpc3N1ZSBjZXJ0aWZpY2F0ZS4KI1doaXRlbGlzdCBuZWVkIGZvciBhbGxvdyBwYXJ0IG9mIGRvbWFpbnMsIHdoaWNoIGV4Y2x1ZGVkIGJ5IGJsYWNrbGlzdC4KIwpXaGl0ZUxpc3QgPSAiIgoKIyBDb21tYSBzZXBhcmF0ZWQgZG5zIHNlcnZlciwgdXNlZCBmb3IgcmVzb2x2ZSBpcDpwb3J0IGFkZHJlc3Mgb2YgZG9tYWlucyB3aGlsZSBjaGVjayBpdC4KIyBpZiBlbXB0eSAtIHVzZSBzeXN0ZW0gZG5zIHJlc29sdmVyICh1c3VhbGx5IGluY2x1ZGUgaG9zdHMgZmlsZSwgY2FjaGUsIGV0YykKIyBpZiBzZXQgLSB1c2UgZGlyZWN0IGRucyBxdWVyaWVzIGZvciBzZXJ2ZXJzLCB3aXRob3V0IHNlbGYgY2FjaGUuCiMgaWYgc2V0IG1vcmUsIHRoYW4gb25lIGRucyBzZXJ2ZXIgLSBzZW5kIHF1ZXJpZXMgaW4gcGFyYWxsZWwgdG8gYWxsIHNlcnZlcnMuCiMgZXJyb3IgcmVzdWx0cyBmcm9tIHBhcnQgb2Ygc2VydmVycyAtIGlnbm9yZS4gTmVlZCBtaW5pbXVtIG9uZSBhbnN3ZXIuCiMgaWYgZGlmZmVyZW50IGRucyBzZXJ2ZXJzIHJldHVybiBkaWZmZXJlbnQgaXAgYWRkcmVzc2VzIC0gYWxsIG9mIHRoZW0gdXNlIGZvciBjaGVjawojIEV4YW1wbGU6ICI4LjguOC44OjUzLDEuMS4xLjE6NTMsNzcuODguOC44OjUzLFsyYTAyOjZiODo6ZmVlZDowZmZdOjUzLFsyMDAxOjQ4NjA6NDg2MDo6ODg4OF06NTMiClJlc29sdmVyID0gIiIKCgoKW0xpc3Rlbl0KCiMgQmluZCBhZGRyZXNzZXMgZm9yIFRMUyBsaXN0ZW5lcnMKVExTQWRkcmVzc2VzID0gWyI6NDQzIl0KCiMgQmluZCBhZGRyZXNzZXMgd2l0aG91dCBUTFMgc2VjdXJlIChmb3IgSFRUUCByZXZlcnNlIHByb3h5IGFuZCBodHRwLTAxIHZhbGlkYXRpb24gd2l0aG91dCByZWRpcmVjdCB0byBodHRwcykKVENQQWRkcmVzc2VzID0gW10KCgpbTWV0cmljc10KIyBFbmFibGUgbWV0cmljcyBpbiBwcm9tZXRoZW91cyBmb3JtYXRoIGJ5IGh0dHAuCkVuYWJsZSA9IGZhbHNlCgojIEJpbmQgYWRkcmVzc2VzIGZvciBnZXQgYnkgaHR0cHMKVExTQWRkcmVzc2VzID0gWyAiWzo6XTo2MjEwMSIgXQoKIyBCaW5kIGFkZHJlc3NlcyB3aXRob3V0IFRMUyBzZWN1cmUgKGZvciBIVFRQIHJldmVyc2UgcHJveHkgYW5kIGh0dHAtMDEgdmFsaWRhdGlvbiB3aXRob3V0IHJlZGlyZWN0IHRvIGh0dHBzKQpUQ1BBZGRyZXNzZXMgPSBbICJbOjpdOjYyMTAwIiBdCgojIElQIG5ldHdvcmtzIGZvciBhbGxvdyB0byBnZXQgbWV0cmljcy4KIyBEZWZhdWx0IC0gYWxsb3cgZnJvbSBhbGwuCiMgRXhhbXBsZToKIyBbICIxLjIuMy40LzMyIiwgIjE5Mi4xNjguMC4wLzI0IiwgIjo6MS8xMjgiIF0KQWxsb3dlZE5ldHdvcmtzID0gW10KCiMgUGFzc3dvcmQgZm9yIGdldCBtZXRyaWNzLCBhZGQgYXMgZ2V0IHBhcmFtID9wYXNzd29yZD0uLi4KUGFzc3dvcmQgICAgICAgID0gIiIKCiMgQWxsb3cgc2V0IHBhc3N3b3JkIHRvIGVtcHR5IHN0cmluZwpBbGxvd0VtcHR5UGFzc3dvcmQgID0gZmFsc2UKCgoKW1Byb2ZpbGVyXQpFbmFibGUgPSBmYWxzZQoKIyBJUCBuZXR3b3JrcyBmb3IgYWxsb3cgdG8gdXNlIHByb2ZpbGVyLgojIERlZmF1bHQgLSBhbGxvdyBmcm9tIGFsbC4KIyBFeGFtcGxlOgojIFsgIjEuMi4zLjQvMzIiLCAiMTkyLjE2OC4wLjAvMjQiLCAiOjoxLzEyOCIgXQpBbGxvd2VkTmV0d29ya3MgPSBbXQpCaW5kQWRkcmVzcyA9ICJsb2NhbGhvc3Q6MzEzNDQiClBhc3N3b3JkICAgICAgICA9ICIiCkFsbG93RW1wdHlQYXNzd29yZCAgPSBmYWxzZQo=\"") } diff --git a/cmd/config.go b/cmd/config.go index 0bea7676..e80ea065 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -55,6 +55,7 @@ type logConfig struct { EnableLogToFile bool EnableLogToStdErr bool LogLevel string + DisableAccessLog bool EnableRotate bool DeveloperMode bool File string diff --git a/cmd/main.go b/cmd/main.go index d2fd4283..9270ee28 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -153,6 +153,7 @@ func startProgram(config *configType) { err = tlsListener.Start(ctx, registry) log.DebugFatal(logger, err, "StartAutoRenew tls listener") + config.Proxy.DisableAccessLog = config.Log.DisableAccessLog p := proxy.NewHTTPProxy(ctx, tlsListener) p.GetContext = func(req *http.Request) (i context.Context, e error) { localAddr := req.Context().Value(http.LocalAddrContextKey).(net.Addr) diff --git a/cmd/static/default-config.toml b/cmd/static/default-config.toml index ff7fc835..5995b0a0 100644 --- a/cmd/static/default-config.toml +++ b/cmd/static/default-config.toml @@ -41,6 +41,9 @@ EnableLogToStdErr = true # verbose level of log, one of: debug, info, warning, error, fatal LogLevel = "info" +# Disable write info about every http request (but write info about connections if need by level) +DisableAccessLog = false + # Enable self log rotating EnableRotate = true diff --git a/internal/proxy/config.go b/internal/proxy/config.go index 523bc733..a41f7762 100644 --- a/internal/proxy/config.go +++ b/internal/proxy/config.go @@ -25,6 +25,7 @@ type Config struct { KeepAliveTimeoutSeconds int HTTPSBackend bool HTTPSBackendIgnoreCert bool + DisableAccessLog bool } func (c *Config) Apply(ctx context.Context, p *HTTPProxy) error { @@ -46,6 +47,7 @@ func (c *Config) Apply(ctx context.Context, p *HTTPProxy) error { appendDirector(c.getHeadersDirector) appendDirector(c.getSchemaDirector) p.HTTPTransport = Transport{c.HTTPSBackendIgnoreCert} + p.EnableAccessLog = !c.DisableAccessLog if resErr != nil { zc.L(ctx).Error("Can't parse proxy config", zap.Error(resErr)) diff --git a/internal/proxy/http-proxy.go b/internal/proxy/http-proxy.go index f55e82f0..9775f5ec 100644 --- a/internal/proxy/http-proxy.go +++ b/internal/proxy/http-proxy.go @@ -28,6 +28,7 @@ type HTTPProxy struct { HandleHTTPValidation func(w http.ResponseWriter, r *http.Request) bool Director Director // modify requests to backend. HTTPTransport http.RoundTripper + EnableAccessLog bool logger *zap.Logger listener net.Listener @@ -64,6 +65,10 @@ func (p *HTTPProxy) Start() error { p.httpReverseProxy.Transport = p.HTTPTransport } + if p.EnableAccessLog { + p.httpReverseProxy.Transport = NewTransportLogger(p.httpReverseProxy.Transport) + } + mux := &http.ServeMux{} mux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { if !p.HandleHTTPValidation(writer, request) { diff --git a/internal/proxy/transport_logger.go b/internal/proxy/transport_logger.go new file mode 100644 index 00000000..867c32b8 --- /dev/null +++ b/internal/proxy/transport_logger.go @@ -0,0 +1,40 @@ +package proxy + +import ( + "net/http" + "time" + + "go.uber.org/zap" + + "github.com/rekby/lets-proxy2/internal/log" +) + +type TransportLogger struct { + Transport http.RoundTripper +} + +func (t TransportLogger) RoundTrip(request *http.Request) (resp *http.Response, err error) { + start := time.Now() + + defer func() { + log.DebugErrorCtx(request.Context(), err, "Request", + zap.Duration("duration_without_body", time.Since(start)), + zap.String("initiator_addr", request.RemoteAddr), + zap.String("metod", request.Method), + zap.String("host", request.Header.Get("Host")), + zap.String("path", request.URL.Path), + zap.String("query", request.URL.RawQuery), + zap.Int("status_code", resp.StatusCode), + zap.Int64("request_content_length", request.ContentLength), + zap.Int64("resp_content_length", resp.ContentLength), + ) + }() + return t.Transport.RoundTrip(request) +} + +func NewTransportLogger(transport http.RoundTripper) TransportLogger { + if transport == nil { + return TransportLogger{Transport: http.DefaultTransport} + } + return TransportLogger{Transport: transport} +} diff --git a/internal/proxy/transport_logger_test.go b/internal/proxy/transport_logger_test.go new file mode 100644 index 00000000..c65db40b --- /dev/null +++ b/internal/proxy/transport_logger_test.go @@ -0,0 +1,7 @@ +package proxy + +import ( + "net/http" +) + +var _ http.RoundTripper = TransportLogger{} From 91061ce69b2371dd407a3a2854918f82cd462d94 Mon Sep 17 00:00:00 2001 From: rekby Date: Wed, 2 Dec 2020 02:25:20 +0300 Subject: [PATCH 3/6] Fix panic in test --- internal/proxy/config_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/proxy/config_test.go b/internal/proxy/config_test.go index f54d089b..ec03ddba 100644 --- a/internal/proxy/config_test.go +++ b/internal/proxy/config_test.go @@ -281,12 +281,12 @@ func TestConfig_Apply(t *testing.T) { c = Config{HTTPSBackendIgnoreCert: false} p = &HTTPProxy{} _ = c.Apply(ctx, p) - transport := p.httpReverseProxy.Transport.(Transport) + transport := p.HTTPTransport.(Transport) transport.IgnoreHTTPSCertificate = false c = Config{HTTPSBackendIgnoreCert: true} p = &HTTPProxy{} _ = c.Apply(ctx, p) - transport = p.httpReverseProxy.Transport.(Transport) + transport = p.HTTPTransport.(Transport) transport.IgnoreHTTPSCertificate = true } From f97f3a999bd2e1a13f148d59dcb1960ed70c5564 Mon Sep 17 00:00:00 2001 From: rekby Date: Wed, 2 Dec 2020 03:15:45 +0300 Subject: [PATCH 4/6] Fixes of request logger --- cmd/a_main-packr.go | 2 +- cmd/config.go | 2 +- cmd/main.go | 2 +- cmd/static/default-config.toml | 4 ++-- internal/proxy/config.go | 4 ++-- internal/proxy/http-proxy.go | 2 ++ internal/proxy/transport_logger.go | 4 ++-- 7 files changed, 11 insertions(+), 9 deletions(-) diff --git a/cmd/a_main-packr.go b/cmd/a_main-packr.go index e0f1e7ae..01879fa4 100644 --- a/cmd/a_main-packr.go +++ b/cmd/a_main-packr.go @@ -7,5 +7,5 @@ import "github.com/gobuffalo/packr" // You can use the "packr clean" command to clean up this, // and any other packr generated files. func init() { - packr.PackJSONBytes("static", "default-config.toml", "\"IyMgQVRURU5USU9OCiMgaXQgaXMgZXhhbXBsZSBmaWxlIG9ubHkuIEl0IGJ1aWx0aW4gaW4gYmluYXJ5IGFuZCBkb24ndCByZWFkIGZyb20gZmlsZSBzeXN0ZW0uCiMgY2hhbmdlcyBpbiBjb25maWdfZGVmYXVsdC50b21sIGhhdmUgbm8gcmVhbCBlZmZlY3QuCgpbR2VuZXJhbF0KCiMgU2Vjb25kcyBmb3IgaXNzdWUgZXZlcnkgY2VydGlmaWNhdGUuIENhbmNlbCBpc3N1ZSBhbmQgcmV0dXJuIGVycm9yIGlmIHRpbWVvdXQuCklzc3VlVGltZW91dCA9IDMwMAoKIyBQYXRoIHRvIGRpciwgd2hpY2ggd2lsbCBzdG9yZSBzdGF0ZSBhbmQgY2VydGlmaWNhdGVzClN0b3JhZ2VEaXIgPSAic3RvcmFnZSIKCiMgU3RvcmUgLmpzb24gaW5mbyB3aXRoIGNlcnRpZmljYXRlIG1ldGFkYXRhIG5lYXIgY2VydGlmaWNhdGUuClN0b3JlSlNPTk1ldGFkYXRhID0gdHJ1ZQoKIyBTdWJkb21haW5zLCBhdXRvLWluY2x1ZGVkIHdpdGhpbiBjZXJ0aWZpY2F0ZSBvZiBtYWluIGRvbWFpbiBuYW1lClN1YmRvbWFpbnMgPSBbInd3dy4iXQoKIyBEaXJlY3RvcnkgdXJsIG9mIGFjbWUgc2VydmVyLgojVGVzdCBzZXJ2ZXI6IGh0dHBzOi8vYWNtZS1zdGFnaW5nLXYwMi5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeQpBY21lU2VydmVyID0gImh0dHBzOi8vYWNtZS12MDIuYXBpLmxldHNlbmNyeXB0Lm9yZy9kaXJlY3RvcnkiCgojIEluY2x1ZGUgb3RoZXIgY29uZmlnIGZpbGVzCiMgSXQgc3VwcG9ydCBnbG9iIHN5bnRheAojIElmIGl0IGhhcyBwYXRoIHdpdGhvdXQgdGVtcGxhdGUgLSB0aGUgZmlsZSBtdXN0IGV4aXN0LgojIEZvciBhbGxvdyBvcHRpb25hbCBpbmNsdWRlIGZpbGUgLSBpdCBjYW4gY29udGFpbiBzb21lIGdsb2Igc3ltYm9sCiMgSW5jbHVkZWQgY29uZmlncyBtZXJnZSB3aXRoIGN1cnJlbnQgcmVhZGVkIHN0YXRlLgojIGV4YW1wbGU9WyAiY29uZmlnLnRvbVtsXSIgXQpJbmNsdWRlQ29uZmlncyA9IFtdCgojIEZvciBwcmV2ZW50IGluZmluaXRlIGxvb3AgYW5kIGNvbnN1bWUgYWxsIG1lbW9yeSBpZiBjeWNsZSBpbiBpbmNsdWRlcwpNYXhDb25maWdGaWxlc1JlYWQgPSAxMDAwMAoKQWxsb3dSU0FDZXJ0ID0gdHJ1ZQpBbGxvd0VDRFNBQ2VydCA9IHRydWUKCltMb2ddCkVuYWJsZUxvZ1RvRmlsZSA9IHRydWUKRW5hYmxlTG9nVG9TdGRFcnIgPSB0cnVlCgojIHZlcmJvc2UgbGV2ZWwgb2YgbG9nLCBvbmUgb2Y6IGRlYnVnLCBpbmZvLCB3YXJuaW5nLCBlcnJvciwgZmF0YWwKTG9nTGV2ZWwgPSAiaW5mbyIKCiMgRGlzYWJsZSB3cml0ZSBpbmZvIGFib3V0IGV2ZXJ5IGh0dHAgcmVxdWVzdCAoYnV0IHdyaXRlIGluZm8gYWJvdXQgY29ubmVjdGlvbnMgaWYgbmVlZCBieSBsZXZlbCkKRGlzYWJsZUFjY2Vzc0xvZyA9IGZhbHNlCgojIEVuYWJsZSBzZWxmIGxvZyByb3RhdGluZwpFbmFibGVSb3RhdGUgPSB0cnVlCgojIEVuYWJsZSBkZXZlbG9wZXIgbW9kZTogbW9yZSBzdGFja3RyYWNlcyBhbmQgcGFuaWMgKHN0b3AgcHJvZ3JhbSkgb24gc29tZSBpbnRlcm5hbCBlcnJvcnMuCkRldmVsb3Blck1vZGUgPSBmYWxzZQoKIyBQYXRoIHRvIGxvZyBmaWxlCkZpbGUgPSAibGV0cy1wcm94eS5sb2ciCgojIFJvdGF0ZSBsb2cgaWYgY3VycmVudCBmaWxlIHNpemUgbW9yZSB0aGFuIFggTUIKUm90YXRlQnlTaXplTUIgPSAxMDAKCiMgQ29tcHJlc3Mgb2xkIGxvZyB3aXRoIGd6aXAgYWZ0ZXIgcm90YXRlCkNvbXByZXNzUm90YXRlZCA9IGZhbHNlCgojIERlbGV0ZSBvbGQgYmFja3VwcyBhZnRlciBYIGRheXMuIDAgZm9yIGRpc2FibGUuCk1heERheXMgPSAxMAoKIyBEZWxldGUgb2xkIGJhY2t1cHMgaWYgb2xkIGZpbGUgbnVtYmVyIG1vcmUgdGhlbiBYLiAwIGZvciBkaXNhYmxlLgpNYXhDb3VudCA9IDEwCgpbUHJveHldCgojIERlZmF1bHQgcnVsZSBvZiBzZWxlY3QgZGVzdGluYXRpb24gYWRkcmVzcy4KIyBJdCBjYW4gYmU6IElQICh3aXRoIGRlZmF1bHQgcG9ydCA4MCksIDpQb3J0IChkZWZhdWx0IC0gc2FtZSBJUCBhcyByZWNlaXZlIGNvbm5lY3Rpb24pLCBJUHY0OlBvcnQgb3IgW0lQdjZdOlBvcnQKIyBNdXN0IGRlZmluZSBwb3J0IGZvcmNlIGlmIEhUVFBTQmFja2VuZCBpcyB0cnVlCkRlZmF1bHRUYXJnZXQgPSAiOjgwIgoKIyBBZnRlciBLZWVwQWxpdmVUaW1lb3V0U2Vjb25kcyBvZiBpbmFjdGl2ZSBpbmNvbWluZyBjb25uZWN0aW9uIHdpbGwgY2xvc2UuCktlZXBBbGl2ZVRpbWVvdXRTZWNvbmRzID0gOTAwCgojIEFycmF5IG9mICctJyBzZXBhcmF0ZWQgcGFpcnMgb3IgSVA6UG9ydC4gRm9yIGV4YW1wbGU6CiMgWwojICAgIjEuMi4zLjQ6NDQzLTIuMi4yLjI6MTIzNCIsCiMgICAiMy4zLjMuMzozMzMtWzo6MV06OTQiCiMgIl0KIyBNZWFuOiBjb25uZWN0aW9ucywgYWNjZXB0ZWQgb24gMS4yLjMuNDo0NDMgc2VuZCB0byBzZXJ2ZXIgMi4yLjIuMjoxMjM0CiMgYW5kIGNvbm5lY3Rpb25zIGFjY2VwdGVkIG9uIDMuMy4zLjM6MzMzIHNlbmQgdG8gaXB2NiA6OjEgcG9ydCA5NApUYXJnZXRNYXAgPSBbXQoKIyBBcnJheSBvZiBjb2xvbiBzZXBhcmF0ZWQgSGVhZGVyTmFtZTpIZWFkZXJWYWx1ZSBmb3IgYWRkIHRvIHJlcXVlc3QgZm9yIGJhY2tlbmQuIHt7VmFsdWV9fSBpcyBzcGVjaWFsIGZvcm1zLCB3aGljaCBjYW4KIyBpbnRlcm5hbGx5IHBhcnNpbmcuIE5vdyBpdCBzdXBwb3J0IG9ubHkgc3BlY2lhbCB2YWx1ZXM6CiMge3tDT05ORUNUSU9OX0lEfX0gLSBJZCBvZiBhY2NlcHRlZCBjb25uZWN0aW9uLCBnZW5lcmF0ZWQgYnkgbGV0cy1wcm94eQojIHt7SFRUUF9QUk9UT319IC0gc2V0IHRvIGh0dHAvaHR0cHMgZGVwZW5kZW5jZSBpbmNvbWluZyBjb25uZWN0aW9ucyBoYW5kbGVkCiMge3tTT1VSQ0VfSVB9fSAtIFJlbW90ZSBJUCBvZiBpbmNvbWluZyBjb25uZWN0aW9uCiMge3tTT1VSQ0VfUE9SVH19IC0gUmVtb3RlIHBvcnQgb2YgaW5jb21pbmcgY29ubmVjdGlvbgojIHt7U09VUkNFX0lQfX06e3tTT1VSQ0VfUE9SVH19IC0gUmVtb3RlIElQOlBvcnQgb2YgaW5jb21pbmcgY29ubmVjdGlvbi4KIyBOb3cgaXQgYWNjZXB0ZWQgb25seSB0aGlzIHNwZWNpYWwgdmFsdWVzLCB3aGljaCBtdXN0IGJlIGV4YXhsdHkgZXF1YWwgdG8gZXhhbXBsZXMuIEFsbCBvdGhlciB2YWx1ZXMgc2VuZCBhcyBpcy4KIyBCdXQgaXQgY2FuIGNoYW5nZSBhbmQgZXh0ZW5kIGluIGZ1dHVyZS4gRG9lc24ndCB1c2Uge3suLi59fSBhcyBvd24gdmFsdWVzLgojIEV4YW1wbGU6CiMgWyJJUDp7e1NPVVJDRV9JUH19IiwgIlByb3h5OmxldHMtcHJveHkiLCAiUHJvdG9jb2w6e3tIVFRQX1BST1RPfX0iIF0KSGVhZGVycyA9IFsgIlgtRm9yd2FyZGVkLVByb3RvOnt7SFRUUF9QUk9UT319IiwgIlgtRm9yd2FyZGVkLUZvcjp7e1NPVVJDRV9JUH19IiBdCgojIFVzZSBodHRwcyByZXF1ZXN0cyB0byBiYWNrZW5kIGluc3RlYWQgb2YgaHR0cApIVFRQU0JhY2tlbmQgPSBmYWxzZQoKIyBJZ25vcmUgYmFja2VuZCBodHRwcyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9ucyBpZiBIVFRQU0JhY2tlbmQgaXMgdHJ1ZQpIVFRQU0JhY2tlbmRJZ25vcmVDZXJ0ID0gdHJ1ZQoKW0NoZWNrRG9tYWluc10KCiMgQWxsb3cgZG9tYWluIGlmIGl0IHJlc29sdmVyIGZvciBvbmUgb2YgcHVibGljIElQcyBvZiB0aGlzIHNlcnZlci4KSVBTZWxmID0gdHJ1ZQoKIyBIb3cgZGV0ZWN0IHB1YmxpYyBpcHMgb2YgdGhlIHNlcnZlci4KIyBpdCB1c2UgaWYgSVBTZWxmIGlzIHRydWUKIyBhdXRvIHwgbG9jYWwgfCBhd3MgIHwgeWFuZGV4CiMgYXV0byAtIGJlc3QgZWZmb3J0IGZvciBkZXRlY3QgSVAuIEFsZ29yaXRtIG1heSBjaGFuZ2UgZnJvbSB0aW1lIHRvIHRpbWUuCiMgICAgICAgIGl0IGdvb2QgZm9yIGRlZmF1bHQuCiMgYmluZCAtIGRldGVjdCBwdWJsaWMgSVAgYmluZGVkIHRvIGxvY2FsIGludGVyZmFjZXMKIyBhd3MgLSBkZXRlY3QgcHVibGljIElQcyBieSBxdWVyeSB0byBBV1MgRUMyIG1ldGFkYXRhCiMgZXh0ZXJuYWwgLSBkZXRlY3Qgc2VsZiBpcCBieSByZXF1ZXN0IHRvIGV4dGVybmFsIHNlcnZlciBJUFNlbGZFeHRlcm5hbERldGVjdG9yCiMgeWFuZGV4IC0gZGV0ZWN0IHB1YmxpYyBJUHMgYnkgcXVlcnkgdG8gWWFuZGV4IGNsb3VkIG1ldGFkYXRhIChub3cgYWxpYXMgZm9yIGF3cykKSVBTZWxmRGV0ZWN0TWV0aG9kID0gImF1dG8iCgojIFNlcnZlciBmb3IgdXNlIGFzIGV4dGVybmFsIGRldGVjdG9yIG9mIHNlcnZlciBJUCAobmVlZCBmb3IgZGV0ZWN0IElQIGJlaGluZCBOQVQKIyBTZXJ2ZXIgbXVzdCByZXNwb25zZSBhcyBwbGFpbiB0ZXh0IElQIGFkZHJlc3MuCiMgRm9yIGV2ZXJ5IGRldGVjdCBsZXRzLXByb3h5IG1ha2UgdHdvIHJlcXVlc3RzOiBieSBpcHY0IGFuZCBpcHY2IG5ldHdvcmtzCklQU2VsZkV4dGVybmFsRGV0ZWN0b3JVUkw9Imh0dHA6Ly9pZmNvbmZpZy5pby9pcCIKCiMgQWxsb3cgZG9tYWluIGlmIGl0IHJlc29sdmVyIGZvciBvbmUgb2YgdGhlIGlwcy4KSVBXaGl0ZUxpc3QgPSAiIgoKIyBSZWdleHAgaW4gZ29sYW5nIHN5bnRheCBvZiBibGFja2xpc3RlZCBkb21haW4gZm9yIGlzc3VlIGNlcnRpZmljYXRlLgojVGhpcyBsaXN0IG92ZXJyaWRlZCBieSB3aGl0ZWxpc3QuCkJsYWNrTGlzdCA9ICIiCgojIFJlZ2V4cCBpbiBnb2xhbmcgc3ludGF4IG9mIHdoaXRlbGlzdCBkb21haW5zIGZvciBpc3N1ZSBjZXJ0aWZpY2F0ZS4KI1doaXRlbGlzdCBuZWVkIGZvciBhbGxvdyBwYXJ0IG9mIGRvbWFpbnMsIHdoaWNoIGV4Y2x1ZGVkIGJ5IGJsYWNrbGlzdC4KIwpXaGl0ZUxpc3QgPSAiIgoKIyBDb21tYSBzZXBhcmF0ZWQgZG5zIHNlcnZlciwgdXNlZCBmb3IgcmVzb2x2ZSBpcDpwb3J0IGFkZHJlc3Mgb2YgZG9tYWlucyB3aGlsZSBjaGVjayBpdC4KIyBpZiBlbXB0eSAtIHVzZSBzeXN0ZW0gZG5zIHJlc29sdmVyICh1c3VhbGx5IGluY2x1ZGUgaG9zdHMgZmlsZSwgY2FjaGUsIGV0YykKIyBpZiBzZXQgLSB1c2UgZGlyZWN0IGRucyBxdWVyaWVzIGZvciBzZXJ2ZXJzLCB3aXRob3V0IHNlbGYgY2FjaGUuCiMgaWYgc2V0IG1vcmUsIHRoYW4gb25lIGRucyBzZXJ2ZXIgLSBzZW5kIHF1ZXJpZXMgaW4gcGFyYWxsZWwgdG8gYWxsIHNlcnZlcnMuCiMgZXJyb3IgcmVzdWx0cyBmcm9tIHBhcnQgb2Ygc2VydmVycyAtIGlnbm9yZS4gTmVlZCBtaW5pbXVtIG9uZSBhbnN3ZXIuCiMgaWYgZGlmZmVyZW50IGRucyBzZXJ2ZXJzIHJldHVybiBkaWZmZXJlbnQgaXAgYWRkcmVzc2VzIC0gYWxsIG9mIHRoZW0gdXNlIGZvciBjaGVjawojIEV4YW1wbGU6ICI4LjguOC44OjUzLDEuMS4xLjE6NTMsNzcuODguOC44OjUzLFsyYTAyOjZiODo6ZmVlZDowZmZdOjUzLFsyMDAxOjQ4NjA6NDg2MDo6ODg4OF06NTMiClJlc29sdmVyID0gIiIKCgoKW0xpc3Rlbl0KCiMgQmluZCBhZGRyZXNzZXMgZm9yIFRMUyBsaXN0ZW5lcnMKVExTQWRkcmVzc2VzID0gWyI6NDQzIl0KCiMgQmluZCBhZGRyZXNzZXMgd2l0aG91dCBUTFMgc2VjdXJlIChmb3IgSFRUUCByZXZlcnNlIHByb3h5IGFuZCBodHRwLTAxIHZhbGlkYXRpb24gd2l0aG91dCByZWRpcmVjdCB0byBodHRwcykKVENQQWRkcmVzc2VzID0gW10KCgpbTWV0cmljc10KIyBFbmFibGUgbWV0cmljcyBpbiBwcm9tZXRoZW91cyBmb3JtYXRoIGJ5IGh0dHAuCkVuYWJsZSA9IGZhbHNlCgojIEJpbmQgYWRkcmVzc2VzIGZvciBnZXQgYnkgaHR0cHMKVExTQWRkcmVzc2VzID0gWyAiWzo6XTo2MjEwMSIgXQoKIyBCaW5kIGFkZHJlc3NlcyB3aXRob3V0IFRMUyBzZWN1cmUgKGZvciBIVFRQIHJldmVyc2UgcHJveHkgYW5kIGh0dHAtMDEgdmFsaWRhdGlvbiB3aXRob3V0IHJlZGlyZWN0IHRvIGh0dHBzKQpUQ1BBZGRyZXNzZXMgPSBbICJbOjpdOjYyMTAwIiBdCgojIElQIG5ldHdvcmtzIGZvciBhbGxvdyB0byBnZXQgbWV0cmljcy4KIyBEZWZhdWx0IC0gYWxsb3cgZnJvbSBhbGwuCiMgRXhhbXBsZToKIyBbICIxLjIuMy40LzMyIiwgIjE5Mi4xNjguMC4wLzI0IiwgIjo6MS8xMjgiIF0KQWxsb3dlZE5ldHdvcmtzID0gW10KCiMgUGFzc3dvcmQgZm9yIGdldCBtZXRyaWNzLCBhZGQgYXMgZ2V0IHBhcmFtID9wYXNzd29yZD0uLi4KUGFzc3dvcmQgICAgICAgID0gIiIKCiMgQWxsb3cgc2V0IHBhc3N3b3JkIHRvIGVtcHR5IHN0cmluZwpBbGxvd0VtcHR5UGFzc3dvcmQgID0gZmFsc2UKCgoKW1Byb2ZpbGVyXQpFbmFibGUgPSBmYWxzZQoKIyBJUCBuZXR3b3JrcyBmb3IgYWxsb3cgdG8gdXNlIHByb2ZpbGVyLgojIERlZmF1bHQgLSBhbGxvdyBmcm9tIGFsbC4KIyBFeGFtcGxlOgojIFsgIjEuMi4zLjQvMzIiLCAiMTkyLjE2OC4wLjAvMjQiLCAiOjoxLzEyOCIgXQpBbGxvd2VkTmV0d29ya3MgPSBbXQpCaW5kQWRkcmVzcyA9ICJsb2NhbGhvc3Q6MzEzNDQiClBhc3N3b3JkICAgICAgICA9ICIiCkFsbG93RW1wdHlQYXNzd29yZCAgPSBmYWxzZQo=\"") + packr.PackJSONBytes("static", "default-config.toml", "\"IyMgQVRURU5USU9ODQojIGl0IGlzIGV4YW1wbGUgZmlsZSBvbmx5LiBJdCBidWlsdGluIGluIGJpbmFyeSBhbmQgZG9uJ3QgcmVhZCBmcm9tIGZpbGUgc3lzdGVtLg0KIyBjaGFuZ2VzIGluIGNvbmZpZ19kZWZhdWx0LnRvbWwgaGF2ZSBubyByZWFsIGVmZmVjdC4NCg0KW0dlbmVyYWxdDQoNCiMgU2Vjb25kcyBmb3IgaXNzdWUgZXZlcnkgY2VydGlmaWNhdGUuIENhbmNlbCBpc3N1ZSBhbmQgcmV0dXJuIGVycm9yIGlmIHRpbWVvdXQuDQpJc3N1ZVRpbWVvdXQgPSAzMDANCg0KIyBQYXRoIHRvIGRpciwgd2hpY2ggd2lsbCBzdG9yZSBzdGF0ZSBhbmQgY2VydGlmaWNhdGVzDQpTdG9yYWdlRGlyID0gInN0b3JhZ2UiDQoNCiMgU3RvcmUgLmpzb24gaW5mbyB3aXRoIGNlcnRpZmljYXRlIG1ldGFkYXRhIG5lYXIgY2VydGlmaWNhdGUuDQpTdG9yZUpTT05NZXRhZGF0YSA9IHRydWUNCg0KIyBTdWJkb21haW5zLCBhdXRvLWluY2x1ZGVkIHdpdGhpbiBjZXJ0aWZpY2F0ZSBvZiBtYWluIGRvbWFpbiBuYW1lDQpTdWJkb21haW5zID0gWyJ3d3cuIl0NCg0KIyBEaXJlY3RvcnkgdXJsIG9mIGFjbWUgc2VydmVyLg0KI1Rlc3Qgc2VydmVyOiBodHRwczovL2FjbWUtc3RhZ2luZy12MDIuYXBpLmxldHNlbmNyeXB0Lm9yZy9kaXJlY3RvcnkNCkFjbWVTZXJ2ZXIgPSAiaHR0cHM6Ly9hY21lLXYwMi5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeSINCg0KIyBJbmNsdWRlIG90aGVyIGNvbmZpZyBmaWxlcw0KIyBJdCBzdXBwb3J0IGdsb2Igc3ludGF4DQojIElmIGl0IGhhcyBwYXRoIHdpdGhvdXQgdGVtcGxhdGUgLSB0aGUgZmlsZSBtdXN0IGV4aXN0Lg0KIyBGb3IgYWxsb3cgb3B0aW9uYWwgaW5jbHVkZSBmaWxlIC0gaXQgY2FuIGNvbnRhaW4gc29tZSBnbG9iIHN5bWJvbA0KIyBJbmNsdWRlZCBjb25maWdzIG1lcmdlIHdpdGggY3VycmVudCByZWFkZWQgc3RhdGUuDQojIGV4YW1wbGU9WyAiY29uZmlnLnRvbVtsXSIgXQ0KSW5jbHVkZUNvbmZpZ3MgPSBbXQ0KDQojIEZvciBwcmV2ZW50IGluZmluaXRlIGxvb3AgYW5kIGNvbnN1bWUgYWxsIG1lbW9yeSBpZiBjeWNsZSBpbiBpbmNsdWRlcw0KTWF4Q29uZmlnRmlsZXNSZWFkID0gMTAwMDANCg0KQWxsb3dSU0FDZXJ0ID0gdHJ1ZQ0KQWxsb3dFQ0RTQUNlcnQgPSB0cnVlDQoNCltMb2ddDQpFbmFibGVMb2dUb0ZpbGUgPSB0cnVlDQpFbmFibGVMb2dUb1N0ZEVyciA9IHRydWUNCg0KIyB2ZXJib3NlIGxldmVsIG9mIGxvZywgb25lIG9mOiBkZWJ1ZywgaW5mbywgd2FybmluZywgZXJyb3IsIGZhdGFsDQpMb2dMZXZlbCA9ICJpbmZvIg0KDQojIEVuYWJsZSB3cml0ZSBpbmZvIGFib3V0IGV2ZXJ5IGh0dHAgcmVxdWVzdCAoYnV0IHdyaXRlIGluZm8gYWJvdXQgY29ubmVjdGlvbnMgaWYgbmVlZCBieSBsZXZlbCkNCkVuYWJsZUFjY2Vzc0xvZyA9IHRydWUNCg0KIyBFbmFibGUgc2VsZiBsb2cgcm90YXRpbmcNCkVuYWJsZVJvdGF0ZSA9IHRydWUNCg0KIyBFbmFibGUgZGV2ZWxvcGVyIG1vZGU6IG1vcmUgc3RhY2t0cmFjZXMgYW5kIHBhbmljIChzdG9wIHByb2dyYW0pIG9uIHNvbWUgaW50ZXJuYWwgZXJyb3JzLg0KRGV2ZWxvcGVyTW9kZSA9IGZhbHNlDQoNCiMgUGF0aCB0byBsb2cgZmlsZQ0KRmlsZSA9ICJsZXRzLXByb3h5LmxvZyINCg0KIyBSb3RhdGUgbG9nIGlmIGN1cnJlbnQgZmlsZSBzaXplIG1vcmUgdGhhbiBYIE1CDQpSb3RhdGVCeVNpemVNQiA9IDEwMA0KDQojIENvbXByZXNzIG9sZCBsb2cgd2l0aCBnemlwIGFmdGVyIHJvdGF0ZQ0KQ29tcHJlc3NSb3RhdGVkID0gZmFsc2UNCg0KIyBEZWxldGUgb2xkIGJhY2t1cHMgYWZ0ZXIgWCBkYXlzLiAwIGZvciBkaXNhYmxlLg0KTWF4RGF5cyA9IDEwDQoNCiMgRGVsZXRlIG9sZCBiYWNrdXBzIGlmIG9sZCBmaWxlIG51bWJlciBtb3JlIHRoZW4gWC4gMCBmb3IgZGlzYWJsZS4NCk1heENvdW50ID0gMTANCg0KW1Byb3h5XQ0KDQojIERlZmF1bHQgcnVsZSBvZiBzZWxlY3QgZGVzdGluYXRpb24gYWRkcmVzcy4NCiMgSXQgY2FuIGJlOiBJUCAod2l0aCBkZWZhdWx0IHBvcnQgODApLCA6UG9ydCAoZGVmYXVsdCAtIHNhbWUgSVAgYXMgcmVjZWl2ZSBjb25uZWN0aW9uKSwgSVB2NDpQb3J0IG9yIFtJUHY2XTpQb3J0DQojIE11c3QgZGVmaW5lIHBvcnQgZm9yY2UgaWYgSFRUUFNCYWNrZW5kIGlzIHRydWUNCkRlZmF1bHRUYXJnZXQgPSAiOjgwIg0KDQojIEFmdGVyIEtlZXBBbGl2ZVRpbWVvdXRTZWNvbmRzIG9mIGluYWN0aXZlIGluY29taW5nIGNvbm5lY3Rpb24gd2lsbCBjbG9zZS4NCktlZXBBbGl2ZVRpbWVvdXRTZWNvbmRzID0gOTAwDQoNCiMgQXJyYXkgb2YgJy0nIHNlcGFyYXRlZCBwYWlycyBvciBJUDpQb3J0LiBGb3IgZXhhbXBsZToNCiMgWw0KIyAgICIxLjIuMy40OjQ0My0yLjIuMi4yOjEyMzQiLA0KIyAgICIzLjMuMy4zOjMzMy1bOjoxXTo5NCINCiMgIl0NCiMgTWVhbjogY29ubmVjdGlvbnMsIGFjY2VwdGVkIG9uIDEuMi4zLjQ6NDQzIHNlbmQgdG8gc2VydmVyIDIuMi4yLjI6MTIzNA0KIyBhbmQgY29ubmVjdGlvbnMgYWNjZXB0ZWQgb24gMy4zLjMuMzozMzMgc2VuZCB0byBpcHY2IDo6MSBwb3J0IDk0DQpUYXJnZXRNYXAgPSBbXQ0KDQojIEFycmF5IG9mIGNvbG9uIHNlcGFyYXRlZCBIZWFkZXJOYW1lOkhlYWRlclZhbHVlIGZvciBhZGQgdG8gcmVxdWVzdCBmb3IgYmFja2VuZC4ge3tWYWx1ZX19IGlzIHNwZWNpYWwgZm9ybXMsIHdoaWNoIGNhbg0KIyBpbnRlcm5hbGx5IHBhcnNpbmcuIE5vdyBpdCBzdXBwb3J0IG9ubHkgc3BlY2lhbCB2YWx1ZXM6DQojIHt7Q09OTkVDVElPTl9JRH19IC0gSWQgb2YgYWNjZXB0ZWQgY29ubmVjdGlvbiwgZ2VuZXJhdGVkIGJ5IGxldHMtcHJveHkNCiMge3tIVFRQX1BST1RPfX0gLSBzZXQgdG8gaHR0cC9odHRwcyBkZXBlbmRlbmNlIGluY29taW5nIGNvbm5lY3Rpb25zIGhhbmRsZWQNCiMge3tTT1VSQ0VfSVB9fSAtIFJlbW90ZSBJUCBvZiBpbmNvbWluZyBjb25uZWN0aW9uDQojIHt7U09VUkNFX1BPUlR9fSAtIFJlbW90ZSBwb3J0IG9mIGluY29taW5nIGNvbm5lY3Rpb24NCiMge3tTT1VSQ0VfSVB9fTp7e1NPVVJDRV9QT1JUfX0gLSBSZW1vdGUgSVA6UG9ydCBvZiBpbmNvbWluZyBjb25uZWN0aW9uLg0KIyBOb3cgaXQgYWNjZXB0ZWQgb25seSB0aGlzIHNwZWNpYWwgdmFsdWVzLCB3aGljaCBtdXN0IGJlIGV4YXhsdHkgZXF1YWwgdG8gZXhhbXBsZXMuIEFsbCBvdGhlciB2YWx1ZXMgc2VuZCBhcyBpcy4NCiMgQnV0IGl0IGNhbiBjaGFuZ2UgYW5kIGV4dGVuZCBpbiBmdXR1cmUuIERvZXNuJ3QgdXNlIHt7Li4ufX0gYXMgb3duIHZhbHVlcy4NCiMgRXhhbXBsZToNCiMgWyJJUDp7e1NPVVJDRV9JUH19IiwgIlByb3h5OmxldHMtcHJveHkiLCAiUHJvdG9jb2w6e3tIVFRQX1BST1RPfX0iIF0NCkhlYWRlcnMgPSBbICJYLUZvcndhcmRlZC1Qcm90bzp7e0hUVFBfUFJPVE99fSIsICJYLUZvcndhcmRlZC1Gb3I6e3tTT1VSQ0VfSVB9fSIgXQ0KDQojIFVzZSBodHRwcyByZXF1ZXN0cyB0byBiYWNrZW5kIGluc3RlYWQgb2YgaHR0cA0KSFRUUFNCYWNrZW5kID0gZmFsc2UNCg0KIyBJZ25vcmUgYmFja2VuZCBodHRwcyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9ucyBpZiBIVFRQU0JhY2tlbmQgaXMgdHJ1ZQ0KSFRUUFNCYWNrZW5kSWdub3JlQ2VydCA9IHRydWUNCg0KW0NoZWNrRG9tYWluc10NCg0KIyBBbGxvdyBkb21haW4gaWYgaXQgcmVzb2x2ZXIgZm9yIG9uZSBvZiBwdWJsaWMgSVBzIG9mIHRoaXMgc2VydmVyLg0KSVBTZWxmID0gdHJ1ZQ0KDQojIEhvdyBkZXRlY3QgcHVibGljIGlwcyBvZiB0aGUgc2VydmVyLg0KIyBpdCB1c2UgaWYgSVBTZWxmIGlzIHRydWUNCiMgYXV0byB8IGxvY2FsIHwgYXdzICB8IHlhbmRleA0KIyBhdXRvIC0gYmVzdCBlZmZvcnQgZm9yIGRldGVjdCBJUC4gQWxnb3JpdG0gbWF5IGNoYW5nZSBmcm9tIHRpbWUgdG8gdGltZS4NCiMgICAgICAgIGl0IGdvb2QgZm9yIGRlZmF1bHQuDQojIGJpbmQgLSBkZXRlY3QgcHVibGljIElQIGJpbmRlZCB0byBsb2NhbCBpbnRlcmZhY2VzDQojIGF3cyAtIGRldGVjdCBwdWJsaWMgSVBzIGJ5IHF1ZXJ5IHRvIEFXUyBFQzIgbWV0YWRhdGENCiMgZXh0ZXJuYWwgLSBkZXRlY3Qgc2VsZiBpcCBieSByZXF1ZXN0IHRvIGV4dGVybmFsIHNlcnZlciBJUFNlbGZFeHRlcm5hbERldGVjdG9yDQojIHlhbmRleCAtIGRldGVjdCBwdWJsaWMgSVBzIGJ5IHF1ZXJ5IHRvIFlhbmRleCBjbG91ZCBtZXRhZGF0YSAobm93IGFsaWFzIGZvciBhd3MpDQpJUFNlbGZEZXRlY3RNZXRob2QgPSAiYXV0byINCg0KIyBTZXJ2ZXIgZm9yIHVzZSBhcyBleHRlcm5hbCBkZXRlY3RvciBvZiBzZXJ2ZXIgSVAgKG5lZWQgZm9yIGRldGVjdCBJUCBiZWhpbmQgTkFUDQojIFNlcnZlciBtdXN0IHJlc3BvbnNlIGFzIHBsYWluIHRleHQgSVAgYWRkcmVzcy4NCiMgRm9yIGV2ZXJ5IGRldGVjdCBsZXRzLXByb3h5IG1ha2UgdHdvIHJlcXVlc3RzOiBieSBpcHY0IGFuZCBpcHY2IG5ldHdvcmtzDQpJUFNlbGZFeHRlcm5hbERldGVjdG9yVVJMPSJodHRwOi8vaWZjb25maWcuaW8vaXAiDQoNCiMgQWxsb3cgZG9tYWluIGlmIGl0IHJlc29sdmVyIGZvciBvbmUgb2YgdGhlIGlwcy4NCklQV2hpdGVMaXN0ID0gIiINCg0KIyBSZWdleHAgaW4gZ29sYW5nIHN5bnRheCBvZiBibGFja2xpc3RlZCBkb21haW4gZm9yIGlzc3VlIGNlcnRpZmljYXRlLg0KI1RoaXMgbGlzdCBvdmVycmlkZWQgYnkgd2hpdGVsaXN0Lg0KQmxhY2tMaXN0ID0gIiINCg0KIyBSZWdleHAgaW4gZ29sYW5nIHN5bnRheCBvZiB3aGl0ZWxpc3QgZG9tYWlucyBmb3IgaXNzdWUgY2VydGlmaWNhdGUuDQojV2hpdGVsaXN0IG5lZWQgZm9yIGFsbG93IHBhcnQgb2YgZG9tYWlucywgd2hpY2ggZXhjbHVkZWQgYnkgYmxhY2tsaXN0Lg0KIw0KV2hpdGVMaXN0ID0gIiINCg0KIyBDb21tYSBzZXBhcmF0ZWQgZG5zIHNlcnZlciwgdXNlZCBmb3IgcmVzb2x2ZSBpcDpwb3J0IGFkZHJlc3Mgb2YgZG9tYWlucyB3aGlsZSBjaGVjayBpdC4NCiMgaWYgZW1wdHkgLSB1c2Ugc3lzdGVtIGRucyByZXNvbHZlciAodXN1YWxseSBpbmNsdWRlIGhvc3RzIGZpbGUsIGNhY2hlLCBldGMpDQojIGlmIHNldCAtIHVzZSBkaXJlY3QgZG5zIHF1ZXJpZXMgZm9yIHNlcnZlcnMsIHdpdGhvdXQgc2VsZiBjYWNoZS4NCiMgaWYgc2V0IG1vcmUsIHRoYW4gb25lIGRucyBzZXJ2ZXIgLSBzZW5kIHF1ZXJpZXMgaW4gcGFyYWxsZWwgdG8gYWxsIHNlcnZlcnMuDQojIGVycm9yIHJlc3VsdHMgZnJvbSBwYXJ0IG9mIHNlcnZlcnMgLSBpZ25vcmUuIE5lZWQgbWluaW11bSBvbmUgYW5zd2VyLg0KIyBpZiBkaWZmZXJlbnQgZG5zIHNlcnZlcnMgcmV0dXJuIGRpZmZlcmVudCBpcCBhZGRyZXNzZXMgLSBhbGwgb2YgdGhlbSB1c2UgZm9yIGNoZWNrDQojIEV4YW1wbGU6ICI4LjguOC44OjUzLDEuMS4xLjE6NTMsNzcuODguOC44OjUzLFsyYTAyOjZiODo6ZmVlZDowZmZdOjUzLFsyMDAxOjQ4NjA6NDg2MDo6ODg4OF06NTMiDQpSZXNvbHZlciA9ICIiDQoNCg0KDQpbTGlzdGVuXQ0KDQojIEJpbmQgYWRkcmVzc2VzIGZvciBUTFMgbGlzdGVuZXJzDQpUTFNBZGRyZXNzZXMgPSBbIjo0NDMiXQ0KDQojIEJpbmQgYWRkcmVzc2VzIHdpdGhvdXQgVExTIHNlY3VyZSAoZm9yIEhUVFAgcmV2ZXJzZSBwcm94eSBhbmQgaHR0cC0wMSB2YWxpZGF0aW9uIHdpdGhvdXQgcmVkaXJlY3QgdG8gaHR0cHMpDQpUQ1BBZGRyZXNzZXMgPSBbXQ0KDQoNCltNZXRyaWNzXQ0KIyBFbmFibGUgbWV0cmljcyBpbiBwcm9tZXRoZW91cyBmb3JtYXRoIGJ5IGh0dHAuDQpFbmFibGUgPSBmYWxzZQ0KDQojIEJpbmQgYWRkcmVzc2VzIGZvciBnZXQgYnkgaHR0cHMNClRMU0FkZHJlc3NlcyA9IFsgIls6Ol06NjIxMDEiIF0NCg0KIyBCaW5kIGFkZHJlc3NlcyB3aXRob3V0IFRMUyBzZWN1cmUgKGZvciBIVFRQIHJldmVyc2UgcHJveHkgYW5kIGh0dHAtMDEgdmFsaWRhdGlvbiB3aXRob3V0IHJlZGlyZWN0IHRvIGh0dHBzKQ0KVENQQWRkcmVzc2VzID0gWyAiWzo6XTo2MjEwMCIgXQ0KDQojIElQIG5ldHdvcmtzIGZvciBhbGxvdyB0byBnZXQgbWV0cmljcy4NCiMgRGVmYXVsdCAtIGFsbG93IGZyb20gYWxsLg0KIyBFeGFtcGxlOg0KIyBbICIxLjIuMy40LzMyIiwgIjE5Mi4xNjguMC4wLzI0IiwgIjo6MS8xMjgiIF0NCkFsbG93ZWROZXR3b3JrcyA9IFtdDQoNCiMgUGFzc3dvcmQgZm9yIGdldCBtZXRyaWNzLCBhZGQgYXMgZ2V0IHBhcmFtID9wYXNzd29yZD0uLi4NClBhc3N3b3JkICAgICAgICA9ICIiDQoNCiMgQWxsb3cgc2V0IHBhc3N3b3JkIHRvIGVtcHR5IHN0cmluZw0KQWxsb3dFbXB0eVBhc3N3b3JkICA9IGZhbHNlDQoNCg0KDQpbUHJvZmlsZXJdDQpFbmFibGUgPSBmYWxzZQ0KDQojIElQIG5ldHdvcmtzIGZvciBhbGxvdyB0byB1c2UgcHJvZmlsZXIuDQojIERlZmF1bHQgLSBhbGxvdyBmcm9tIGFsbC4NCiMgRXhhbXBsZToNCiMgWyAiMS4yLjMuNC8zMiIsICIxOTIuMTY4LjAuMC8yNCIsICI6OjEvMTI4IiBdDQpBbGxvd2VkTmV0d29ya3MgPSBbXQ0KQmluZEFkZHJlc3MgPSAibG9jYWxob3N0OjMxMzQ0Ig0KUGFzc3dvcmQgICAgICAgID0gIiINCkFsbG93RW1wdHlQYXNzd29yZCAgPSBmYWxzZQ0K\"") } diff --git a/cmd/config.go b/cmd/config.go index e80ea065..5d39e925 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -55,7 +55,7 @@ type logConfig struct { EnableLogToFile bool EnableLogToStdErr bool LogLevel string - DisableAccessLog bool + EnableAccessLog bool EnableRotate bool DeveloperMode bool File string diff --git a/cmd/main.go b/cmd/main.go index 9270ee28..9d2f185e 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -153,7 +153,7 @@ func startProgram(config *configType) { err = tlsListener.Start(ctx, registry) log.DebugFatal(logger, err, "StartAutoRenew tls listener") - config.Proxy.DisableAccessLog = config.Log.DisableAccessLog + config.Proxy.EnableAccessLog = config.Log.EnableAccessLog p := proxy.NewHTTPProxy(ctx, tlsListener) p.GetContext = func(req *http.Request) (i context.Context, e error) { localAddr := req.Context().Value(http.LocalAddrContextKey).(net.Addr) diff --git a/cmd/static/default-config.toml b/cmd/static/default-config.toml index 5995b0a0..10e25372 100644 --- a/cmd/static/default-config.toml +++ b/cmd/static/default-config.toml @@ -41,8 +41,8 @@ EnableLogToStdErr = true # verbose level of log, one of: debug, info, warning, error, fatal LogLevel = "info" -# Disable write info about every http request (but write info about connections if need by level) -DisableAccessLog = false +# Enable write info about every http request (but write info about connections if need by level) +EnableAccessLog = true # Enable self log rotating EnableRotate = true diff --git a/internal/proxy/config.go b/internal/proxy/config.go index a41f7762..c76bcd21 100644 --- a/internal/proxy/config.go +++ b/internal/proxy/config.go @@ -25,7 +25,7 @@ type Config struct { KeepAliveTimeoutSeconds int HTTPSBackend bool HTTPSBackendIgnoreCert bool - DisableAccessLog bool + EnableAccessLog bool } func (c *Config) Apply(ctx context.Context, p *HTTPProxy) error { @@ -47,7 +47,7 @@ func (c *Config) Apply(ctx context.Context, p *HTTPProxy) error { appendDirector(c.getHeadersDirector) appendDirector(c.getSchemaDirector) p.HTTPTransport = Transport{c.HTTPSBackendIgnoreCert} - p.EnableAccessLog = !c.DisableAccessLog + p.EnableAccessLog = c.EnableAccessLog if resErr != nil { zc.L(ctx).Error("Can't parse proxy config", zap.Error(resErr)) diff --git a/internal/proxy/http-proxy.go b/internal/proxy/http-proxy.go index 9775f5ec..5aacaf8a 100644 --- a/internal/proxy/http-proxy.go +++ b/internal/proxy/http-proxy.go @@ -62,12 +62,14 @@ func (p *HTTPProxy) Close() error { // Any public fields must not change after Start called func (p *HTTPProxy) Start() error { if p.HTTPTransport != nil { + p.logger.Info("Set transport to reverse proxy") p.httpReverseProxy.Transport = p.HTTPTransport } if p.EnableAccessLog { p.httpReverseProxy.Transport = NewTransportLogger(p.httpReverseProxy.Transport) } + p.logger.Info("Access log", zap.Bool("enabled", p.EnableAccessLog)) mux := &http.ServeMux{} mux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { diff --git a/internal/proxy/transport_logger.go b/internal/proxy/transport_logger.go index 867c32b8..58217607 100644 --- a/internal/proxy/transport_logger.go +++ b/internal/proxy/transport_logger.go @@ -17,11 +17,11 @@ func (t TransportLogger) RoundTrip(request *http.Request) (resp *http.Response, start := time.Now() defer func() { - log.DebugErrorCtx(request.Context(), err, "Request", + log.InfoErrorCtx(request.Context(), err, "Request", zap.Duration("duration_without_body", time.Since(start)), zap.String("initiator_addr", request.RemoteAddr), zap.String("metod", request.Method), - zap.String("host", request.Header.Get("Host")), + zap.String("host", request.Host), zap.String("path", request.URL.Path), zap.String("query", request.URL.RawQuery), zap.Int("status_code", resp.StatusCode), From 7f414bcc2a4247cd6a2dcab1d785f5ff128dbd09 Mon Sep 17 00:00:00 2001 From: rekby Date: Wed, 2 Dec 2020 03:23:08 +0300 Subject: [PATCH 5/6] Fix linefeed in config --- cmd/a_main-packr.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/a_main-packr.go b/cmd/a_main-packr.go index 01879fa4..2223d749 100644 --- a/cmd/a_main-packr.go +++ b/cmd/a_main-packr.go @@ -7,5 +7,5 @@ import "github.com/gobuffalo/packr" // You can use the "packr clean" command to clean up this, // and any other packr generated files. func init() { - packr.PackJSONBytes("static", "default-config.toml", "\"IyMgQVRURU5USU9ODQojIGl0IGlzIGV4YW1wbGUgZmlsZSBvbmx5LiBJdCBidWlsdGluIGluIGJpbmFyeSBhbmQgZG9uJ3QgcmVhZCBmcm9tIGZpbGUgc3lzdGVtLg0KIyBjaGFuZ2VzIGluIGNvbmZpZ19kZWZhdWx0LnRvbWwgaGF2ZSBubyByZWFsIGVmZmVjdC4NCg0KW0dlbmVyYWxdDQoNCiMgU2Vjb25kcyBmb3IgaXNzdWUgZXZlcnkgY2VydGlmaWNhdGUuIENhbmNlbCBpc3N1ZSBhbmQgcmV0dXJuIGVycm9yIGlmIHRpbWVvdXQuDQpJc3N1ZVRpbWVvdXQgPSAzMDANCg0KIyBQYXRoIHRvIGRpciwgd2hpY2ggd2lsbCBzdG9yZSBzdGF0ZSBhbmQgY2VydGlmaWNhdGVzDQpTdG9yYWdlRGlyID0gInN0b3JhZ2UiDQoNCiMgU3RvcmUgLmpzb24gaW5mbyB3aXRoIGNlcnRpZmljYXRlIG1ldGFkYXRhIG5lYXIgY2VydGlmaWNhdGUuDQpTdG9yZUpTT05NZXRhZGF0YSA9IHRydWUNCg0KIyBTdWJkb21haW5zLCBhdXRvLWluY2x1ZGVkIHdpdGhpbiBjZXJ0aWZpY2F0ZSBvZiBtYWluIGRvbWFpbiBuYW1lDQpTdWJkb21haW5zID0gWyJ3d3cuIl0NCg0KIyBEaXJlY3RvcnkgdXJsIG9mIGFjbWUgc2VydmVyLg0KI1Rlc3Qgc2VydmVyOiBodHRwczovL2FjbWUtc3RhZ2luZy12MDIuYXBpLmxldHNlbmNyeXB0Lm9yZy9kaXJlY3RvcnkNCkFjbWVTZXJ2ZXIgPSAiaHR0cHM6Ly9hY21lLXYwMi5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeSINCg0KIyBJbmNsdWRlIG90aGVyIGNvbmZpZyBmaWxlcw0KIyBJdCBzdXBwb3J0IGdsb2Igc3ludGF4DQojIElmIGl0IGhhcyBwYXRoIHdpdGhvdXQgdGVtcGxhdGUgLSB0aGUgZmlsZSBtdXN0IGV4aXN0Lg0KIyBGb3IgYWxsb3cgb3B0aW9uYWwgaW5jbHVkZSBmaWxlIC0gaXQgY2FuIGNvbnRhaW4gc29tZSBnbG9iIHN5bWJvbA0KIyBJbmNsdWRlZCBjb25maWdzIG1lcmdlIHdpdGggY3VycmVudCByZWFkZWQgc3RhdGUuDQojIGV4YW1wbGU9WyAiY29uZmlnLnRvbVtsXSIgXQ0KSW5jbHVkZUNvbmZpZ3MgPSBbXQ0KDQojIEZvciBwcmV2ZW50IGluZmluaXRlIGxvb3AgYW5kIGNvbnN1bWUgYWxsIG1lbW9yeSBpZiBjeWNsZSBpbiBpbmNsdWRlcw0KTWF4Q29uZmlnRmlsZXNSZWFkID0gMTAwMDANCg0KQWxsb3dSU0FDZXJ0ID0gdHJ1ZQ0KQWxsb3dFQ0RTQUNlcnQgPSB0cnVlDQoNCltMb2ddDQpFbmFibGVMb2dUb0ZpbGUgPSB0cnVlDQpFbmFibGVMb2dUb1N0ZEVyciA9IHRydWUNCg0KIyB2ZXJib3NlIGxldmVsIG9mIGxvZywgb25lIG9mOiBkZWJ1ZywgaW5mbywgd2FybmluZywgZXJyb3IsIGZhdGFsDQpMb2dMZXZlbCA9ICJpbmZvIg0KDQojIEVuYWJsZSB3cml0ZSBpbmZvIGFib3V0IGV2ZXJ5IGh0dHAgcmVxdWVzdCAoYnV0IHdyaXRlIGluZm8gYWJvdXQgY29ubmVjdGlvbnMgaWYgbmVlZCBieSBsZXZlbCkNCkVuYWJsZUFjY2Vzc0xvZyA9IHRydWUNCg0KIyBFbmFibGUgc2VsZiBsb2cgcm90YXRpbmcNCkVuYWJsZVJvdGF0ZSA9IHRydWUNCg0KIyBFbmFibGUgZGV2ZWxvcGVyIG1vZGU6IG1vcmUgc3RhY2t0cmFjZXMgYW5kIHBhbmljIChzdG9wIHByb2dyYW0pIG9uIHNvbWUgaW50ZXJuYWwgZXJyb3JzLg0KRGV2ZWxvcGVyTW9kZSA9IGZhbHNlDQoNCiMgUGF0aCB0byBsb2cgZmlsZQ0KRmlsZSA9ICJsZXRzLXByb3h5LmxvZyINCg0KIyBSb3RhdGUgbG9nIGlmIGN1cnJlbnQgZmlsZSBzaXplIG1vcmUgdGhhbiBYIE1CDQpSb3RhdGVCeVNpemVNQiA9IDEwMA0KDQojIENvbXByZXNzIG9sZCBsb2cgd2l0aCBnemlwIGFmdGVyIHJvdGF0ZQ0KQ29tcHJlc3NSb3RhdGVkID0gZmFsc2UNCg0KIyBEZWxldGUgb2xkIGJhY2t1cHMgYWZ0ZXIgWCBkYXlzLiAwIGZvciBkaXNhYmxlLg0KTWF4RGF5cyA9IDEwDQoNCiMgRGVsZXRlIG9sZCBiYWNrdXBzIGlmIG9sZCBmaWxlIG51bWJlciBtb3JlIHRoZW4gWC4gMCBmb3IgZGlzYWJsZS4NCk1heENvdW50ID0gMTANCg0KW1Byb3h5XQ0KDQojIERlZmF1bHQgcnVsZSBvZiBzZWxlY3QgZGVzdGluYXRpb24gYWRkcmVzcy4NCiMgSXQgY2FuIGJlOiBJUCAod2l0aCBkZWZhdWx0IHBvcnQgODApLCA6UG9ydCAoZGVmYXVsdCAtIHNhbWUgSVAgYXMgcmVjZWl2ZSBjb25uZWN0aW9uKSwgSVB2NDpQb3J0IG9yIFtJUHY2XTpQb3J0DQojIE11c3QgZGVmaW5lIHBvcnQgZm9yY2UgaWYgSFRUUFNCYWNrZW5kIGlzIHRydWUNCkRlZmF1bHRUYXJnZXQgPSAiOjgwIg0KDQojIEFmdGVyIEtlZXBBbGl2ZVRpbWVvdXRTZWNvbmRzIG9mIGluYWN0aXZlIGluY29taW5nIGNvbm5lY3Rpb24gd2lsbCBjbG9zZS4NCktlZXBBbGl2ZVRpbWVvdXRTZWNvbmRzID0gOTAwDQoNCiMgQXJyYXkgb2YgJy0nIHNlcGFyYXRlZCBwYWlycyBvciBJUDpQb3J0LiBGb3IgZXhhbXBsZToNCiMgWw0KIyAgICIxLjIuMy40OjQ0My0yLjIuMi4yOjEyMzQiLA0KIyAgICIzLjMuMy4zOjMzMy1bOjoxXTo5NCINCiMgIl0NCiMgTWVhbjogY29ubmVjdGlvbnMsIGFjY2VwdGVkIG9uIDEuMi4zLjQ6NDQzIHNlbmQgdG8gc2VydmVyIDIuMi4yLjI6MTIzNA0KIyBhbmQgY29ubmVjdGlvbnMgYWNjZXB0ZWQgb24gMy4zLjMuMzozMzMgc2VuZCB0byBpcHY2IDo6MSBwb3J0IDk0DQpUYXJnZXRNYXAgPSBbXQ0KDQojIEFycmF5IG9mIGNvbG9uIHNlcGFyYXRlZCBIZWFkZXJOYW1lOkhlYWRlclZhbHVlIGZvciBhZGQgdG8gcmVxdWVzdCBmb3IgYmFja2VuZC4ge3tWYWx1ZX19IGlzIHNwZWNpYWwgZm9ybXMsIHdoaWNoIGNhbg0KIyBpbnRlcm5hbGx5IHBhcnNpbmcuIE5vdyBpdCBzdXBwb3J0IG9ubHkgc3BlY2lhbCB2YWx1ZXM6DQojIHt7Q09OTkVDVElPTl9JRH19IC0gSWQgb2YgYWNjZXB0ZWQgY29ubmVjdGlvbiwgZ2VuZXJhdGVkIGJ5IGxldHMtcHJveHkNCiMge3tIVFRQX1BST1RPfX0gLSBzZXQgdG8gaHR0cC9odHRwcyBkZXBlbmRlbmNlIGluY29taW5nIGNvbm5lY3Rpb25zIGhhbmRsZWQNCiMge3tTT1VSQ0VfSVB9fSAtIFJlbW90ZSBJUCBvZiBpbmNvbWluZyBjb25uZWN0aW9uDQojIHt7U09VUkNFX1BPUlR9fSAtIFJlbW90ZSBwb3J0IG9mIGluY29taW5nIGNvbm5lY3Rpb24NCiMge3tTT1VSQ0VfSVB9fTp7e1NPVVJDRV9QT1JUfX0gLSBSZW1vdGUgSVA6UG9ydCBvZiBpbmNvbWluZyBjb25uZWN0aW9uLg0KIyBOb3cgaXQgYWNjZXB0ZWQgb25seSB0aGlzIHNwZWNpYWwgdmFsdWVzLCB3aGljaCBtdXN0IGJlIGV4YXhsdHkgZXF1YWwgdG8gZXhhbXBsZXMuIEFsbCBvdGhlciB2YWx1ZXMgc2VuZCBhcyBpcy4NCiMgQnV0IGl0IGNhbiBjaGFuZ2UgYW5kIGV4dGVuZCBpbiBmdXR1cmUuIERvZXNuJ3QgdXNlIHt7Li4ufX0gYXMgb3duIHZhbHVlcy4NCiMgRXhhbXBsZToNCiMgWyJJUDp7e1NPVVJDRV9JUH19IiwgIlByb3h5OmxldHMtcHJveHkiLCAiUHJvdG9jb2w6e3tIVFRQX1BST1RPfX0iIF0NCkhlYWRlcnMgPSBbICJYLUZvcndhcmRlZC1Qcm90bzp7e0hUVFBfUFJPVE99fSIsICJYLUZvcndhcmRlZC1Gb3I6e3tTT1VSQ0VfSVB9fSIgXQ0KDQojIFVzZSBodHRwcyByZXF1ZXN0cyB0byBiYWNrZW5kIGluc3RlYWQgb2YgaHR0cA0KSFRUUFNCYWNrZW5kID0gZmFsc2UNCg0KIyBJZ25vcmUgYmFja2VuZCBodHRwcyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9ucyBpZiBIVFRQU0JhY2tlbmQgaXMgdHJ1ZQ0KSFRUUFNCYWNrZW5kSWdub3JlQ2VydCA9IHRydWUNCg0KW0NoZWNrRG9tYWluc10NCg0KIyBBbGxvdyBkb21haW4gaWYgaXQgcmVzb2x2ZXIgZm9yIG9uZSBvZiBwdWJsaWMgSVBzIG9mIHRoaXMgc2VydmVyLg0KSVBTZWxmID0gdHJ1ZQ0KDQojIEhvdyBkZXRlY3QgcHVibGljIGlwcyBvZiB0aGUgc2VydmVyLg0KIyBpdCB1c2UgaWYgSVBTZWxmIGlzIHRydWUNCiMgYXV0byB8IGxvY2FsIHwgYXdzICB8IHlhbmRleA0KIyBhdXRvIC0gYmVzdCBlZmZvcnQgZm9yIGRldGVjdCBJUC4gQWxnb3JpdG0gbWF5IGNoYW5nZSBmcm9tIHRpbWUgdG8gdGltZS4NCiMgICAgICAgIGl0IGdvb2QgZm9yIGRlZmF1bHQuDQojIGJpbmQgLSBkZXRlY3QgcHVibGljIElQIGJpbmRlZCB0byBsb2NhbCBpbnRlcmZhY2VzDQojIGF3cyAtIGRldGVjdCBwdWJsaWMgSVBzIGJ5IHF1ZXJ5IHRvIEFXUyBFQzIgbWV0YWRhdGENCiMgZXh0ZXJuYWwgLSBkZXRlY3Qgc2VsZiBpcCBieSByZXF1ZXN0IHRvIGV4dGVybmFsIHNlcnZlciBJUFNlbGZFeHRlcm5hbERldGVjdG9yDQojIHlhbmRleCAtIGRldGVjdCBwdWJsaWMgSVBzIGJ5IHF1ZXJ5IHRvIFlhbmRleCBjbG91ZCBtZXRhZGF0YSAobm93IGFsaWFzIGZvciBhd3MpDQpJUFNlbGZEZXRlY3RNZXRob2QgPSAiYXV0byINCg0KIyBTZXJ2ZXIgZm9yIHVzZSBhcyBleHRlcm5hbCBkZXRlY3RvciBvZiBzZXJ2ZXIgSVAgKG5lZWQgZm9yIGRldGVjdCBJUCBiZWhpbmQgTkFUDQojIFNlcnZlciBtdXN0IHJlc3BvbnNlIGFzIHBsYWluIHRleHQgSVAgYWRkcmVzcy4NCiMgRm9yIGV2ZXJ5IGRldGVjdCBsZXRzLXByb3h5IG1ha2UgdHdvIHJlcXVlc3RzOiBieSBpcHY0IGFuZCBpcHY2IG5ldHdvcmtzDQpJUFNlbGZFeHRlcm5hbERldGVjdG9yVVJMPSJodHRwOi8vaWZjb25maWcuaW8vaXAiDQoNCiMgQWxsb3cgZG9tYWluIGlmIGl0IHJlc29sdmVyIGZvciBvbmUgb2YgdGhlIGlwcy4NCklQV2hpdGVMaXN0ID0gIiINCg0KIyBSZWdleHAgaW4gZ29sYW5nIHN5bnRheCBvZiBibGFja2xpc3RlZCBkb21haW4gZm9yIGlzc3VlIGNlcnRpZmljYXRlLg0KI1RoaXMgbGlzdCBvdmVycmlkZWQgYnkgd2hpdGVsaXN0Lg0KQmxhY2tMaXN0ID0gIiINCg0KIyBSZWdleHAgaW4gZ29sYW5nIHN5bnRheCBvZiB3aGl0ZWxpc3QgZG9tYWlucyBmb3IgaXNzdWUgY2VydGlmaWNhdGUuDQojV2hpdGVsaXN0IG5lZWQgZm9yIGFsbG93IHBhcnQgb2YgZG9tYWlucywgd2hpY2ggZXhjbHVkZWQgYnkgYmxhY2tsaXN0Lg0KIw0KV2hpdGVMaXN0ID0gIiINCg0KIyBDb21tYSBzZXBhcmF0ZWQgZG5zIHNlcnZlciwgdXNlZCBmb3IgcmVzb2x2ZSBpcDpwb3J0IGFkZHJlc3Mgb2YgZG9tYWlucyB3aGlsZSBjaGVjayBpdC4NCiMgaWYgZW1wdHkgLSB1c2Ugc3lzdGVtIGRucyByZXNvbHZlciAodXN1YWxseSBpbmNsdWRlIGhvc3RzIGZpbGUsIGNhY2hlLCBldGMpDQojIGlmIHNldCAtIHVzZSBkaXJlY3QgZG5zIHF1ZXJpZXMgZm9yIHNlcnZlcnMsIHdpdGhvdXQgc2VsZiBjYWNoZS4NCiMgaWYgc2V0IG1vcmUsIHRoYW4gb25lIGRucyBzZXJ2ZXIgLSBzZW5kIHF1ZXJpZXMgaW4gcGFyYWxsZWwgdG8gYWxsIHNlcnZlcnMuDQojIGVycm9yIHJlc3VsdHMgZnJvbSBwYXJ0IG9mIHNlcnZlcnMgLSBpZ25vcmUuIE5lZWQgbWluaW11bSBvbmUgYW5zd2VyLg0KIyBpZiBkaWZmZXJlbnQgZG5zIHNlcnZlcnMgcmV0dXJuIGRpZmZlcmVudCBpcCBhZGRyZXNzZXMgLSBhbGwgb2YgdGhlbSB1c2UgZm9yIGNoZWNrDQojIEV4YW1wbGU6ICI4LjguOC44OjUzLDEuMS4xLjE6NTMsNzcuODguOC44OjUzLFsyYTAyOjZiODo6ZmVlZDowZmZdOjUzLFsyMDAxOjQ4NjA6NDg2MDo6ODg4OF06NTMiDQpSZXNvbHZlciA9ICIiDQoNCg0KDQpbTGlzdGVuXQ0KDQojIEJpbmQgYWRkcmVzc2VzIGZvciBUTFMgbGlzdGVuZXJzDQpUTFNBZGRyZXNzZXMgPSBbIjo0NDMiXQ0KDQojIEJpbmQgYWRkcmVzc2VzIHdpdGhvdXQgVExTIHNlY3VyZSAoZm9yIEhUVFAgcmV2ZXJzZSBwcm94eSBhbmQgaHR0cC0wMSB2YWxpZGF0aW9uIHdpdGhvdXQgcmVkaXJlY3QgdG8gaHR0cHMpDQpUQ1BBZGRyZXNzZXMgPSBbXQ0KDQoNCltNZXRyaWNzXQ0KIyBFbmFibGUgbWV0cmljcyBpbiBwcm9tZXRoZW91cyBmb3JtYXRoIGJ5IGh0dHAuDQpFbmFibGUgPSBmYWxzZQ0KDQojIEJpbmQgYWRkcmVzc2VzIGZvciBnZXQgYnkgaHR0cHMNClRMU0FkZHJlc3NlcyA9IFsgIls6Ol06NjIxMDEiIF0NCg0KIyBCaW5kIGFkZHJlc3NlcyB3aXRob3V0IFRMUyBzZWN1cmUgKGZvciBIVFRQIHJldmVyc2UgcHJveHkgYW5kIGh0dHAtMDEgdmFsaWRhdGlvbiB3aXRob3V0IHJlZGlyZWN0IHRvIGh0dHBzKQ0KVENQQWRkcmVzc2VzID0gWyAiWzo6XTo2MjEwMCIgXQ0KDQojIElQIG5ldHdvcmtzIGZvciBhbGxvdyB0byBnZXQgbWV0cmljcy4NCiMgRGVmYXVsdCAtIGFsbG93IGZyb20gYWxsLg0KIyBFeGFtcGxlOg0KIyBbICIxLjIuMy40LzMyIiwgIjE5Mi4xNjguMC4wLzI0IiwgIjo6MS8xMjgiIF0NCkFsbG93ZWROZXR3b3JrcyA9IFtdDQoNCiMgUGFzc3dvcmQgZm9yIGdldCBtZXRyaWNzLCBhZGQgYXMgZ2V0IHBhcmFtID9wYXNzd29yZD0uLi4NClBhc3N3b3JkICAgICAgICA9ICIiDQoNCiMgQWxsb3cgc2V0IHBhc3N3b3JkIHRvIGVtcHR5IHN0cmluZw0KQWxsb3dFbXB0eVBhc3N3b3JkICA9IGZhbHNlDQoNCg0KDQpbUHJvZmlsZXJdDQpFbmFibGUgPSBmYWxzZQ0KDQojIElQIG5ldHdvcmtzIGZvciBhbGxvdyB0byB1c2UgcHJvZmlsZXIuDQojIERlZmF1bHQgLSBhbGxvdyBmcm9tIGFsbC4NCiMgRXhhbXBsZToNCiMgWyAiMS4yLjMuNC8zMiIsICIxOTIuMTY4LjAuMC8yNCIsICI6OjEvMTI4IiBdDQpBbGxvd2VkTmV0d29ya3MgPSBbXQ0KQmluZEFkZHJlc3MgPSAibG9jYWxob3N0OjMxMzQ0Ig0KUGFzc3dvcmQgICAgICAgID0gIiINCkFsbG93RW1wdHlQYXNzd29yZCAgPSBmYWxzZQ0K\"") + packr.PackJSONBytes("static", "default-config.toml", "\"IyMgQVRURU5USU9OCiMgaXQgaXMgZXhhbXBsZSBmaWxlIG9ubHkuIEl0IGJ1aWx0aW4gaW4gYmluYXJ5IGFuZCBkb24ndCByZWFkIGZyb20gZmlsZSBzeXN0ZW0uCiMgY2hhbmdlcyBpbiBjb25maWdfZGVmYXVsdC50b21sIGhhdmUgbm8gcmVhbCBlZmZlY3QuCgpbR2VuZXJhbF0KCiMgU2Vjb25kcyBmb3IgaXNzdWUgZXZlcnkgY2VydGlmaWNhdGUuIENhbmNlbCBpc3N1ZSBhbmQgcmV0dXJuIGVycm9yIGlmIHRpbWVvdXQuCklzc3VlVGltZW91dCA9IDMwMAoKIyBQYXRoIHRvIGRpciwgd2hpY2ggd2lsbCBzdG9yZSBzdGF0ZSBhbmQgY2VydGlmaWNhdGVzClN0b3JhZ2VEaXIgPSAic3RvcmFnZSIKCiMgU3RvcmUgLmpzb24gaW5mbyB3aXRoIGNlcnRpZmljYXRlIG1ldGFkYXRhIG5lYXIgY2VydGlmaWNhdGUuClN0b3JlSlNPTk1ldGFkYXRhID0gdHJ1ZQoKIyBTdWJkb21haW5zLCBhdXRvLWluY2x1ZGVkIHdpdGhpbiBjZXJ0aWZpY2F0ZSBvZiBtYWluIGRvbWFpbiBuYW1lClN1YmRvbWFpbnMgPSBbInd3dy4iXQoKIyBEaXJlY3RvcnkgdXJsIG9mIGFjbWUgc2VydmVyLgojVGVzdCBzZXJ2ZXI6IGh0dHBzOi8vYWNtZS1zdGFnaW5nLXYwMi5hcGkubGV0c2VuY3J5cHQub3JnL2RpcmVjdG9yeQpBY21lU2VydmVyID0gImh0dHBzOi8vYWNtZS12MDIuYXBpLmxldHNlbmNyeXB0Lm9yZy9kaXJlY3RvcnkiCgojIEluY2x1ZGUgb3RoZXIgY29uZmlnIGZpbGVzCiMgSXQgc3VwcG9ydCBnbG9iIHN5bnRheAojIElmIGl0IGhhcyBwYXRoIHdpdGhvdXQgdGVtcGxhdGUgLSB0aGUgZmlsZSBtdXN0IGV4aXN0LgojIEZvciBhbGxvdyBvcHRpb25hbCBpbmNsdWRlIGZpbGUgLSBpdCBjYW4gY29udGFpbiBzb21lIGdsb2Igc3ltYm9sCiMgSW5jbHVkZWQgY29uZmlncyBtZXJnZSB3aXRoIGN1cnJlbnQgcmVhZGVkIHN0YXRlLgojIGV4YW1wbGU9WyAiY29uZmlnLnRvbVtsXSIgXQpJbmNsdWRlQ29uZmlncyA9IFtdCgojIEZvciBwcmV2ZW50IGluZmluaXRlIGxvb3AgYW5kIGNvbnN1bWUgYWxsIG1lbW9yeSBpZiBjeWNsZSBpbiBpbmNsdWRlcwpNYXhDb25maWdGaWxlc1JlYWQgPSAxMDAwMAoKQWxsb3dSU0FDZXJ0ID0gdHJ1ZQpBbGxvd0VDRFNBQ2VydCA9IHRydWUKCltMb2ddCkVuYWJsZUxvZ1RvRmlsZSA9IHRydWUKRW5hYmxlTG9nVG9TdGRFcnIgPSB0cnVlCgojIHZlcmJvc2UgbGV2ZWwgb2YgbG9nLCBvbmUgb2Y6IGRlYnVnLCBpbmZvLCB3YXJuaW5nLCBlcnJvciwgZmF0YWwKTG9nTGV2ZWwgPSAiaW5mbyIKCiMgRW5hYmxlIHdyaXRlIGluZm8gYWJvdXQgZXZlcnkgaHR0cCByZXF1ZXN0IChidXQgd3JpdGUgaW5mbyBhYm91dCBjb25uZWN0aW9ucyBpZiBuZWVkIGJ5IGxldmVsKQpFbmFibGVBY2Nlc3NMb2cgPSB0cnVlCgojIEVuYWJsZSBzZWxmIGxvZyByb3RhdGluZwpFbmFibGVSb3RhdGUgPSB0cnVlCgojIEVuYWJsZSBkZXZlbG9wZXIgbW9kZTogbW9yZSBzdGFja3RyYWNlcyBhbmQgcGFuaWMgKHN0b3AgcHJvZ3JhbSkgb24gc29tZSBpbnRlcm5hbCBlcnJvcnMuCkRldmVsb3Blck1vZGUgPSBmYWxzZQoKIyBQYXRoIHRvIGxvZyBmaWxlCkZpbGUgPSAibGV0cy1wcm94eS5sb2ciCgojIFJvdGF0ZSBsb2cgaWYgY3VycmVudCBmaWxlIHNpemUgbW9yZSB0aGFuIFggTUIKUm90YXRlQnlTaXplTUIgPSAxMDAKCiMgQ29tcHJlc3Mgb2xkIGxvZyB3aXRoIGd6aXAgYWZ0ZXIgcm90YXRlCkNvbXByZXNzUm90YXRlZCA9IGZhbHNlCgojIERlbGV0ZSBvbGQgYmFja3VwcyBhZnRlciBYIGRheXMuIDAgZm9yIGRpc2FibGUuCk1heERheXMgPSAxMAoKIyBEZWxldGUgb2xkIGJhY2t1cHMgaWYgb2xkIGZpbGUgbnVtYmVyIG1vcmUgdGhlbiBYLiAwIGZvciBkaXNhYmxlLgpNYXhDb3VudCA9IDEwCgpbUHJveHldCgojIERlZmF1bHQgcnVsZSBvZiBzZWxlY3QgZGVzdGluYXRpb24gYWRkcmVzcy4KIyBJdCBjYW4gYmU6IElQICh3aXRoIGRlZmF1bHQgcG9ydCA4MCksIDpQb3J0IChkZWZhdWx0IC0gc2FtZSBJUCBhcyByZWNlaXZlIGNvbm5lY3Rpb24pLCBJUHY0OlBvcnQgb3IgW0lQdjZdOlBvcnQKIyBNdXN0IGRlZmluZSBwb3J0IGZvcmNlIGlmIEhUVFBTQmFja2VuZCBpcyB0cnVlCkRlZmF1bHRUYXJnZXQgPSAiOjgwIgoKIyBBZnRlciBLZWVwQWxpdmVUaW1lb3V0U2Vjb25kcyBvZiBpbmFjdGl2ZSBpbmNvbWluZyBjb25uZWN0aW9uIHdpbGwgY2xvc2UuCktlZXBBbGl2ZVRpbWVvdXRTZWNvbmRzID0gOTAwCgojIEFycmF5IG9mICctJyBzZXBhcmF0ZWQgcGFpcnMgb3IgSVA6UG9ydC4gRm9yIGV4YW1wbGU6CiMgWwojICAgIjEuMi4zLjQ6NDQzLTIuMi4yLjI6MTIzNCIsCiMgICAiMy4zLjMuMzozMzMtWzo6MV06OTQiCiMgIl0KIyBNZWFuOiBjb25uZWN0aW9ucywgYWNjZXB0ZWQgb24gMS4yLjMuNDo0NDMgc2VuZCB0byBzZXJ2ZXIgMi4yLjIuMjoxMjM0CiMgYW5kIGNvbm5lY3Rpb25zIGFjY2VwdGVkIG9uIDMuMy4zLjM6MzMzIHNlbmQgdG8gaXB2NiA6OjEgcG9ydCA5NApUYXJnZXRNYXAgPSBbXQoKIyBBcnJheSBvZiBjb2xvbiBzZXBhcmF0ZWQgSGVhZGVyTmFtZTpIZWFkZXJWYWx1ZSBmb3IgYWRkIHRvIHJlcXVlc3QgZm9yIGJhY2tlbmQuIHt7VmFsdWV9fSBpcyBzcGVjaWFsIGZvcm1zLCB3aGljaCBjYW4KIyBpbnRlcm5hbGx5IHBhcnNpbmcuIE5vdyBpdCBzdXBwb3J0IG9ubHkgc3BlY2lhbCB2YWx1ZXM6CiMge3tDT05ORUNUSU9OX0lEfX0gLSBJZCBvZiBhY2NlcHRlZCBjb25uZWN0aW9uLCBnZW5lcmF0ZWQgYnkgbGV0cy1wcm94eQojIHt7SFRUUF9QUk9UT319IC0gc2V0IHRvIGh0dHAvaHR0cHMgZGVwZW5kZW5jZSBpbmNvbWluZyBjb25uZWN0aW9ucyBoYW5kbGVkCiMge3tTT1VSQ0VfSVB9fSAtIFJlbW90ZSBJUCBvZiBpbmNvbWluZyBjb25uZWN0aW9uCiMge3tTT1VSQ0VfUE9SVH19IC0gUmVtb3RlIHBvcnQgb2YgaW5jb21pbmcgY29ubmVjdGlvbgojIHt7U09VUkNFX0lQfX06e3tTT1VSQ0VfUE9SVH19IC0gUmVtb3RlIElQOlBvcnQgb2YgaW5jb21pbmcgY29ubmVjdGlvbi4KIyBOb3cgaXQgYWNjZXB0ZWQgb25seSB0aGlzIHNwZWNpYWwgdmFsdWVzLCB3aGljaCBtdXN0IGJlIGV4YXhsdHkgZXF1YWwgdG8gZXhhbXBsZXMuIEFsbCBvdGhlciB2YWx1ZXMgc2VuZCBhcyBpcy4KIyBCdXQgaXQgY2FuIGNoYW5nZSBhbmQgZXh0ZW5kIGluIGZ1dHVyZS4gRG9lc24ndCB1c2Uge3suLi59fSBhcyBvd24gdmFsdWVzLgojIEV4YW1wbGU6CiMgWyJJUDp7e1NPVVJDRV9JUH19IiwgIlByb3h5OmxldHMtcHJveHkiLCAiUHJvdG9jb2w6e3tIVFRQX1BST1RPfX0iIF0KSGVhZGVycyA9IFsgIlgtRm9yd2FyZGVkLVByb3RvOnt7SFRUUF9QUk9UT319IiwgIlgtRm9yd2FyZGVkLUZvcjp7e1NPVVJDRV9JUH19IiBdCgojIFVzZSBodHRwcyByZXF1ZXN0cyB0byBiYWNrZW5kIGluc3RlYWQgb2YgaHR0cApIVFRQU0JhY2tlbmQgPSBmYWxzZQoKIyBJZ25vcmUgYmFja2VuZCBodHRwcyBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9ucyBpZiBIVFRQU0JhY2tlbmQgaXMgdHJ1ZQpIVFRQU0JhY2tlbmRJZ25vcmVDZXJ0ID0gdHJ1ZQoKW0NoZWNrRG9tYWluc10KCiMgQWxsb3cgZG9tYWluIGlmIGl0IHJlc29sdmVyIGZvciBvbmUgb2YgcHVibGljIElQcyBvZiB0aGlzIHNlcnZlci4KSVBTZWxmID0gdHJ1ZQoKIyBIb3cgZGV0ZWN0IHB1YmxpYyBpcHMgb2YgdGhlIHNlcnZlci4KIyBpdCB1c2UgaWYgSVBTZWxmIGlzIHRydWUKIyBhdXRvIHwgbG9jYWwgfCBhd3MgIHwgeWFuZGV4CiMgYXV0byAtIGJlc3QgZWZmb3J0IGZvciBkZXRlY3QgSVAuIEFsZ29yaXRtIG1heSBjaGFuZ2UgZnJvbSB0aW1lIHRvIHRpbWUuCiMgICAgICAgIGl0IGdvb2QgZm9yIGRlZmF1bHQuCiMgYmluZCAtIGRldGVjdCBwdWJsaWMgSVAgYmluZGVkIHRvIGxvY2FsIGludGVyZmFjZXMKIyBhd3MgLSBkZXRlY3QgcHVibGljIElQcyBieSBxdWVyeSB0byBBV1MgRUMyIG1ldGFkYXRhCiMgZXh0ZXJuYWwgLSBkZXRlY3Qgc2VsZiBpcCBieSByZXF1ZXN0IHRvIGV4dGVybmFsIHNlcnZlciBJUFNlbGZFeHRlcm5hbERldGVjdG9yCiMgeWFuZGV4IC0gZGV0ZWN0IHB1YmxpYyBJUHMgYnkgcXVlcnkgdG8gWWFuZGV4IGNsb3VkIG1ldGFkYXRhIChub3cgYWxpYXMgZm9yIGF3cykKSVBTZWxmRGV0ZWN0TWV0aG9kID0gImF1dG8iCgojIFNlcnZlciBmb3IgdXNlIGFzIGV4dGVybmFsIGRldGVjdG9yIG9mIHNlcnZlciBJUCAobmVlZCBmb3IgZGV0ZWN0IElQIGJlaGluZCBOQVQKIyBTZXJ2ZXIgbXVzdCByZXNwb25zZSBhcyBwbGFpbiB0ZXh0IElQIGFkZHJlc3MuCiMgRm9yIGV2ZXJ5IGRldGVjdCBsZXRzLXByb3h5IG1ha2UgdHdvIHJlcXVlc3RzOiBieSBpcHY0IGFuZCBpcHY2IG5ldHdvcmtzCklQU2VsZkV4dGVybmFsRGV0ZWN0b3JVUkw9Imh0dHA6Ly9pZmNvbmZpZy5pby9pcCIKCiMgQWxsb3cgZG9tYWluIGlmIGl0IHJlc29sdmVyIGZvciBvbmUgb2YgdGhlIGlwcy4KSVBXaGl0ZUxpc3QgPSAiIgoKIyBSZWdleHAgaW4gZ29sYW5nIHN5bnRheCBvZiBibGFja2xpc3RlZCBkb21haW4gZm9yIGlzc3VlIGNlcnRpZmljYXRlLgojVGhpcyBsaXN0IG92ZXJyaWRlZCBieSB3aGl0ZWxpc3QuCkJsYWNrTGlzdCA9ICIiCgojIFJlZ2V4cCBpbiBnb2xhbmcgc3ludGF4IG9mIHdoaXRlbGlzdCBkb21haW5zIGZvciBpc3N1ZSBjZXJ0aWZpY2F0ZS4KI1doaXRlbGlzdCBuZWVkIGZvciBhbGxvdyBwYXJ0IG9mIGRvbWFpbnMsIHdoaWNoIGV4Y2x1ZGVkIGJ5IGJsYWNrbGlzdC4KIwpXaGl0ZUxpc3QgPSAiIgoKIyBDb21tYSBzZXBhcmF0ZWQgZG5zIHNlcnZlciwgdXNlZCBmb3IgcmVzb2x2ZSBpcDpwb3J0IGFkZHJlc3Mgb2YgZG9tYWlucyB3aGlsZSBjaGVjayBpdC4KIyBpZiBlbXB0eSAtIHVzZSBzeXN0ZW0gZG5zIHJlc29sdmVyICh1c3VhbGx5IGluY2x1ZGUgaG9zdHMgZmlsZSwgY2FjaGUsIGV0YykKIyBpZiBzZXQgLSB1c2UgZGlyZWN0IGRucyBxdWVyaWVzIGZvciBzZXJ2ZXJzLCB3aXRob3V0IHNlbGYgY2FjaGUuCiMgaWYgc2V0IG1vcmUsIHRoYW4gb25lIGRucyBzZXJ2ZXIgLSBzZW5kIHF1ZXJpZXMgaW4gcGFyYWxsZWwgdG8gYWxsIHNlcnZlcnMuCiMgZXJyb3IgcmVzdWx0cyBmcm9tIHBhcnQgb2Ygc2VydmVycyAtIGlnbm9yZS4gTmVlZCBtaW5pbXVtIG9uZSBhbnN3ZXIuCiMgaWYgZGlmZmVyZW50IGRucyBzZXJ2ZXJzIHJldHVybiBkaWZmZXJlbnQgaXAgYWRkcmVzc2VzIC0gYWxsIG9mIHRoZW0gdXNlIGZvciBjaGVjawojIEV4YW1wbGU6ICI4LjguOC44OjUzLDEuMS4xLjE6NTMsNzcuODguOC44OjUzLFsyYTAyOjZiODo6ZmVlZDowZmZdOjUzLFsyMDAxOjQ4NjA6NDg2MDo6ODg4OF06NTMiClJlc29sdmVyID0gIiIKCgoKW0xpc3Rlbl0KCiMgQmluZCBhZGRyZXNzZXMgZm9yIFRMUyBsaXN0ZW5lcnMKVExTQWRkcmVzc2VzID0gWyI6NDQzIl0KCiMgQmluZCBhZGRyZXNzZXMgd2l0aG91dCBUTFMgc2VjdXJlIChmb3IgSFRUUCByZXZlcnNlIHByb3h5IGFuZCBodHRwLTAxIHZhbGlkYXRpb24gd2l0aG91dCByZWRpcmVjdCB0byBodHRwcykKVENQQWRkcmVzc2VzID0gW10KCgpbTWV0cmljc10KIyBFbmFibGUgbWV0cmljcyBpbiBwcm9tZXRoZW91cyBmb3JtYXRoIGJ5IGh0dHAuCkVuYWJsZSA9IGZhbHNlCgojIEJpbmQgYWRkcmVzc2VzIGZvciBnZXQgYnkgaHR0cHMKVExTQWRkcmVzc2VzID0gWyAiWzo6XTo2MjEwMSIgXQoKIyBCaW5kIGFkZHJlc3NlcyB3aXRob3V0IFRMUyBzZWN1cmUgKGZvciBIVFRQIHJldmVyc2UgcHJveHkgYW5kIGh0dHAtMDEgdmFsaWRhdGlvbiB3aXRob3V0IHJlZGlyZWN0IHRvIGh0dHBzKQpUQ1BBZGRyZXNzZXMgPSBbICJbOjpdOjYyMTAwIiBdCgojIElQIG5ldHdvcmtzIGZvciBhbGxvdyB0byBnZXQgbWV0cmljcy4KIyBEZWZhdWx0IC0gYWxsb3cgZnJvbSBhbGwuCiMgRXhhbXBsZToKIyBbICIxLjIuMy40LzMyIiwgIjE5Mi4xNjguMC4wLzI0IiwgIjo6MS8xMjgiIF0KQWxsb3dlZE5ldHdvcmtzID0gW10KCiMgUGFzc3dvcmQgZm9yIGdldCBtZXRyaWNzLCBhZGQgYXMgZ2V0IHBhcmFtID9wYXNzd29yZD0uLi4KUGFzc3dvcmQgICAgICAgID0gIiIKCiMgQWxsb3cgc2V0IHBhc3N3b3JkIHRvIGVtcHR5IHN0cmluZwpBbGxvd0VtcHR5UGFzc3dvcmQgID0gZmFsc2UKCgoKW1Byb2ZpbGVyXQpFbmFibGUgPSBmYWxzZQoKIyBJUCBuZXR3b3JrcyBmb3IgYWxsb3cgdG8gdXNlIHByb2ZpbGVyLgojIERlZmF1bHQgLSBhbGxvdyBmcm9tIGFsbC4KIyBFeGFtcGxlOgojIFsgIjEuMi4zLjQvMzIiLCAiMTkyLjE2OC4wLjAvMjQiLCAiOjoxLzEyOCIgXQpBbGxvd2VkTmV0d29ya3MgPSBbXQpCaW5kQWRkcmVzcyA9ICJsb2NhbGhvc3Q6MzEzNDQiClBhc3N3b3JkICAgICAgICA9ICIiCkFsbG93RW1wdHlQYXNzd29yZCAgPSBmYWxzZQo=\"") } From 3c7c9e73a4662697a67eebbe300fdeb9e3eb7a85 Mon Sep 17 00:00:00 2001 From: rekby Date: Wed, 2 Dec 2020 03:26:38 +0300 Subject: [PATCH 6/6] stub --- internal/proxy/transport_logger.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/proxy/transport_logger.go b/internal/proxy/transport_logger.go index 58217607..c5eaa21c 100644 --- a/internal/proxy/transport_logger.go +++ b/internal/proxy/transport_logger.go @@ -29,6 +29,7 @@ func (t TransportLogger) RoundTrip(request *http.Request) (resp *http.Response, zap.Int64("resp_content_length", resp.ContentLength), ) }() + return t.Transport.RoundTrip(request) }