mirror of
https://github.com/rclone/rclone
synced 2025-01-03 03:46:24 +01:00
vendor: update all dependencies
This commit is contained in:
parent
b221d79273
commit
d61ba7ef78
46
go.mod
46
go.mod
@ -2,26 +2,24 @@ module github.com/ncw/rclone
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
bazil.org/fuse v0.0.0-20180421153158-65cc252bf669
|
bazil.org/fuse v0.0.0-20180421153158-65cc252bf669
|
||||||
cloud.google.com/go v0.37.4 // indirect
|
cloud.google.com/go v0.40.0 // indirect
|
||||||
github.com/Azure/azure-pipeline-go v0.1.8
|
github.com/Azure/azure-pipeline-go v0.1.9
|
||||||
github.com/Azure/azure-storage-blob-go v0.6.0
|
github.com/Azure/azure-storage-blob-go v0.6.0
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78
|
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78
|
||||||
github.com/Unknwon/goconfig v0.0.0-20181105214110-56bd8ab18619
|
github.com/Unknwon/goconfig v0.0.0-20190425194916-3dba17dd7b9e
|
||||||
github.com/a8m/tree v0.0.0-20181222104329-6a0b80129de4
|
github.com/a8m/tree v0.0.0-20181222104329-6a0b80129de4
|
||||||
github.com/abbot/go-http-auth v0.4.0
|
github.com/abbot/go-http-auth v0.4.0
|
||||||
github.com/anacrolix/dms v0.0.0-20180117034613-8af4925bffb5
|
github.com/anacrolix/dms v1.0.0
|
||||||
github.com/atotto/clipboard v0.1.2
|
github.com/atotto/clipboard v0.1.2
|
||||||
github.com/aws/aws-sdk-go v1.19.11
|
github.com/aws/aws-sdk-go v1.20.10
|
||||||
github.com/billziss-gh/cgofuse v1.1.0
|
github.com/billziss-gh/cgofuse v1.1.0
|
||||||
github.com/coreos/bbolt v1.3.2
|
github.com/coreos/bbolt v1.3.3
|
||||||
github.com/djherbis/times v1.2.0
|
github.com/djherbis/times v1.2.0
|
||||||
github.com/dropbox/dropbox-sdk-go-unofficial v5.4.0+incompatible
|
github.com/dropbox/dropbox-sdk-go-unofficial v5.4.0+incompatible
|
||||||
github.com/goftp/file-driver v0.0.0-20180502053751-5d604a0fc0c9 // indirect
|
github.com/goftp/file-driver v0.0.0-20180502053751-5d604a0fc0c9 // indirect
|
||||||
github.com/goftp/server v0.0.0-20190304020633-eabccc535b5a
|
github.com/goftp/server v0.0.0-20190304020633-eabccc535b5a
|
||||||
github.com/golang/protobuf v1.3.1 // indirect
|
|
||||||
github.com/google/go-querystring v1.0.0 // indirect
|
github.com/google/go-querystring v1.0.0 // indirect
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20190411002643-bd77b112433e // indirect
|
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c // indirect
|
||||||
github.com/hashicorp/golang-lru v0.5.1 // indirect
|
|
||||||
github.com/jlaffaye/ftp v0.0.0-20190624084859-c1312a7102bf
|
github.com/jlaffaye/ftp v0.0.0-20190624084859-c1312a7102bf
|
||||||
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
|
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
|
||||||
github.com/koofr/go-httpclient v0.0.0-20180104120329-03786175608a
|
github.com/koofr/go-httpclient v0.0.0-20180104120329-03786175608a
|
||||||
@ -32,7 +30,7 @@ require (
|
|||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/ncw/go-acd v0.0.0-20171120105400-887eb06ab6a2
|
github.com/ncw/go-acd v0.0.0-20171120105400-887eb06ab6a2
|
||||||
github.com/ncw/swift v1.0.47
|
github.com/ncw/swift v1.0.47
|
||||||
github.com/nsf/termbox-go v0.0.0-20190325093121-288510b9734e
|
github.com/nsf/termbox-go v0.0.0-20190624072549-eeb6cd0a1762
|
||||||
github.com/okzk/sdnotify v0.0.0-20180710141335-d9becc38acbd
|
github.com/okzk/sdnotify v0.0.0-20180710141335-d9becc38acbd
|
||||||
github.com/onsi/ginkgo v1.8.0 // indirect
|
github.com/onsi/ginkgo v1.8.0 // indirect
|
||||||
github.com/onsi/gomega v1.5.0 // indirect
|
github.com/onsi/gomega v1.5.0 // indirect
|
||||||
@ -41,29 +39,29 @@ require (
|
|||||||
github.com/pkg/errors v0.8.1
|
github.com/pkg/errors v0.8.1
|
||||||
github.com/pkg/sftp v1.10.1-0.20190523025818-e98a7bef6829
|
github.com/pkg/sftp v1.10.1-0.20190523025818-e98a7bef6829
|
||||||
github.com/rfjakob/eme v0.0.0-20171028163933-2222dbd4ba46
|
github.com/rfjakob/eme v0.0.0-20171028163933-2222dbd4ba46
|
||||||
github.com/sevlyar/go-daemon v0.1.4
|
github.com/sevlyar/go-daemon v0.1.5
|
||||||
github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e
|
github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e
|
||||||
github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3 // indirect
|
github.com/smartystreets/assertions v1.0.0 // indirect
|
||||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a // indirect
|
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a // indirect
|
||||||
github.com/spf13/cobra v0.0.4-0.20190321000552-67fc4837d267
|
github.com/spf13/cobra v0.0.5
|
||||||
github.com/spf13/pflag v1.0.3
|
github.com/spf13/pflag v1.0.3
|
||||||
github.com/stretchr/testify v1.3.0
|
github.com/stretchr/testify v1.3.0
|
||||||
github.com/t3rm1n4l/go-mega v0.0.0-20190430100803-72151b53bb44
|
github.com/t3rm1n4l/go-mega v0.0.0-20190528125457-55e675378686
|
||||||
github.com/xanzy/ssh-agent v0.2.1
|
github.com/xanzy/ssh-agent v0.2.1
|
||||||
github.com/yunify/qingstor-sdk-go v2.2.15+incompatible
|
github.com/yunify/qingstor-sdk-go v2.2.15+incompatible
|
||||||
go.etcd.io/bbolt v1.3.2 // indirect
|
go.etcd.io/bbolt v1.3.3 // indirect
|
||||||
go.opencensus.io v0.20.2 // indirect
|
go.opencensus.io v0.22.0 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5
|
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4
|
||||||
golang.org/x/net v0.0.0-20190606173856-1492cefac77f
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859
|
||||||
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58
|
||||||
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444
|
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb
|
||||||
golang.org/x/text v0.3.2
|
golang.org/x/text v0.3.2
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
|
||||||
golang.org/x/tools v0.0.0-20190606174628-0139d5756a7d // indirect
|
google.golang.org/api v0.7.0
|
||||||
google.golang.org/api v0.3.2
|
google.golang.org/appengine v1.6.1 // indirect
|
||||||
google.golang.org/appengine v1.5.0 // indirect
|
google.golang.org/genproto v0.0.0-20190626174449-989357319d63 // indirect
|
||||||
google.golang.org/grpc v1.20.0 // indirect
|
google.golang.org/grpc v1.21.1 // indirect
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
||||||
gopkg.in/yaml.v2 v2.2.2
|
gopkg.in/yaml.v2 v2.2.2
|
||||||
)
|
)
|
||||||
|
201
go.sum
201
go.sum
@ -3,39 +3,44 @@ bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxo
|
|||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=
|
cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.37.4 h1:glPeL3BQJsbF6aIIYfZizMwc5LTYz250bDMjttbBGAU=
|
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
|
||||||
cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
|
cloud.google.com/go v0.40.0 h1:FjSY7bOj+WzJe6TZRVtXI2b9kAYvtNg4lMbcH2+MUkk=
|
||||||
|
cloud.google.com/go v0.40.0/go.mod h1:Tk58MuI9rbLMKlAjeO/bDnteAx7tX2gJIXw4T5Jwlro=
|
||||||
github.com/Azure/azure-pipeline-go v0.1.8 h1:KmVRa8oFMaargVesEuuEoiLCQ4zCCwQ8QX/xg++KS20=
|
github.com/Azure/azure-pipeline-go v0.1.8 h1:KmVRa8oFMaargVesEuuEoiLCQ4zCCwQ8QX/xg++KS20=
|
||||||
github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg=
|
github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg=
|
||||||
|
github.com/Azure/azure-pipeline-go v0.1.9 h1:u7JFb9fFTE6Y/j8ae2VK33ePrRqJqoCM/IWkQdAZ+rg=
|
||||||
|
github.com/Azure/azure-pipeline-go v0.1.9/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg=
|
||||||
github.com/Azure/azure-storage-blob-go v0.6.0 h1:SEATKb3LIHcaSIX+E6/K4kJpwfuozFEsmt5rS56N6CE=
|
github.com/Azure/azure-storage-blob-go v0.6.0 h1:SEATKb3LIHcaSIX+E6/K4kJpwfuozFEsmt5rS56N6CE=
|
||||||
github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y=
|
github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y=
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
|
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w=
|
||||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
github.com/Unknwon/goconfig v0.0.0-20190425194916-3dba17dd7b9e h1:ZaFHdRwv6wJQMYsg5qITIsqWRqZRvUETiq0xxrl+8fc=
|
||||||
github.com/Unknwon/goconfig v0.0.0-20181105214110-56bd8ab18619 h1:6X8iB881g299aNEv6KXrcjL31iLOH7yA6NXoQX+MbDg=
|
github.com/Unknwon/goconfig v0.0.0-20190425194916-3dba17dd7b9e/go.mod h1:wngxua9XCNjvHjDiTiV26DaKDT+0c63QR6H5hjVUUxw=
|
||||||
github.com/Unknwon/goconfig v0.0.0-20181105214110-56bd8ab18619/go.mod h1:wngxua9XCNjvHjDiTiV26DaKDT+0c63QR6H5hjVUUxw=
|
|
||||||
github.com/a8m/tree v0.0.0-20181222104329-6a0b80129de4 h1:mK1/QgFPU4osbhjJ26B1w738kjQHaGJcon8uCLMS8fk=
|
github.com/a8m/tree v0.0.0-20181222104329-6a0b80129de4 h1:mK1/QgFPU4osbhjJ26B1w738kjQHaGJcon8uCLMS8fk=
|
||||||
github.com/a8m/tree v0.0.0-20181222104329-6a0b80129de4/go.mod h1:FSdwKX97koS5efgm8WevNf7XS3PqtyFkKDDXrz778cg=
|
github.com/a8m/tree v0.0.0-20181222104329-6a0b80129de4/go.mod h1:FSdwKX97koS5efgm8WevNf7XS3PqtyFkKDDXrz778cg=
|
||||||
github.com/abbot/go-http-auth v0.4.0 h1:QjmvZ5gSC7jm3Zg54DqWE/T5m1t2AfDu6QlXJT0EVT0=
|
github.com/abbot/go-http-auth v0.4.0 h1:QjmvZ5gSC7jm3Zg54DqWE/T5m1t2AfDu6QlXJT0EVT0=
|
||||||
github.com/abbot/go-http-auth v0.4.0/go.mod h1:Cz6ARTIzApMJDzh5bRMSUou6UMSp0IEXg9km/ci7TJM=
|
github.com/abbot/go-http-auth v0.4.0/go.mod h1:Cz6ARTIzApMJDzh5bRMSUou6UMSp0IEXg9km/ci7TJM=
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
github.com/anacrolix/dms v1.0.0 h1:4vs/X5AdF0eRqFXg+EbNUdvY7JUz/a4U84v+VAEa7V8=
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/anacrolix/dms v1.0.0/go.mod h1:1TQoem5yf/k/DiVLFFQi+JFQ6GZeKxmJfwGr3goLmFQ=
|
||||||
github.com/anacrolix/dms v0.0.0-20180117034613-8af4925bffb5 h1:lmyFvZXNGOmsKCYXNwzDLWafnxeewxsFwdsvTvSC1sg=
|
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c=
|
||||||
github.com/anacrolix/dms v0.0.0-20180117034613-8af4925bffb5/go.mod h1:DGqLjaZ3ziKKNRt+U5Q9PLWJ52Q/4rxfaaH/b3QYKaE=
|
github.com/anacrolix/envpprof v1.0.0/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c=
|
||||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
github.com/anacrolix/ffprobe v1.0.0/go.mod h1:BIw+Bjol6CWjm/CRWrVLk2Vy+UYlkgmBZ05vpSYqZPw=
|
||||||
|
github.com/anacrolix/missinggo v1.1.0/go.mod h1:MBJu3Sk/k3ZfGYcS7z18gwfu72Ey/xopPFJJbTi5yIo=
|
||||||
|
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
|
||||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||||
github.com/atotto/clipboard v0.1.2 h1:YZCtFu5Ie8qX2VmVTBnrqLSiU9XOWwqNRmdT3gIQzbY=
|
github.com/atotto/clipboard v0.1.2 h1:YZCtFu5Ie8qX2VmVTBnrqLSiU9XOWwqNRmdT3gIQzbY=
|
||||||
github.com/atotto/clipboard v0.1.2/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
|
github.com/atotto/clipboard v0.1.2/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
|
||||||
github.com/aws/aws-sdk-go v1.19.11 h1:tqaTGER6Byw3QvsjGW0p018U2UOqaJPeJuzoaF7jjoQ=
|
github.com/aws/aws-sdk-go v1.20.10 h1:wrwdNYb9Xe1ahNEEXl0M/O/g/dmonWag1TFAKVNQulM=
|
||||||
github.com/aws/aws-sdk-go v1.19.11/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
github.com/aws/aws-sdk-go v1.20.10/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
|
||||||
github.com/billziss-gh/cgofuse v1.1.0 h1:tATn9ZDvuPcOVlvR4tJitGHgAqy1y18+4mKmRfdfjec=
|
github.com/billziss-gh/cgofuse v1.1.0 h1:tATn9ZDvuPcOVlvR4tJitGHgAqy1y18+4mKmRfdfjec=
|
||||||
github.com/billziss-gh/cgofuse v1.1.0/go.mod h1:LJjoaUojlVjgo5GQoEJTcJNqZJeRU0nCR84CyxKt2YM=
|
github.com/billziss-gh/cgofuse v1.1.0/go.mod h1:LJjoaUojlVjgo5GQoEJTcJNqZJeRU0nCR84CyxKt2YM=
|
||||||
|
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
|
||||||
|
github.com/bradfitz/iter v0.0.0-20190303215204-33e6a9893b0c/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s=
|
github.com/coreos/bbolt v1.3.3 h1:n6AiVyVRKQFNb6mJlwESEvvLoDyiTzXX7ORAUlkeBdY=
|
||||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
||||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||||
@ -46,24 +51,18 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
|||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/djherbis/times v1.2.0 h1:xANXjsC/iBqbO00vkWlYwPWgBgEVU6m6AFYg0Pic+Mc=
|
github.com/djherbis/times v1.2.0 h1:xANXjsC/iBqbO00vkWlYwPWgBgEVU6m6AFYg0Pic+Mc=
|
||||||
github.com/djherbis/times v1.2.0/go.mod h1:CGMZlo255K5r4Yw0b9RRfFQpM2y7uOmxg4jm9HsaVf8=
|
github.com/djherbis/times v1.2.0/go.mod h1:CGMZlo255K5r4Yw0b9RRfFQpM2y7uOmxg4jm9HsaVf8=
|
||||||
|
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
|
||||||
github.com/dropbox/dropbox-sdk-go-unofficial v5.4.0+incompatible h1:9jnukMIowLSo3SY7+GTwxmYJv4QC0LxXbo97zHWCyoc=
|
github.com/dropbox/dropbox-sdk-go-unofficial v5.4.0+incompatible h1:9jnukMIowLSo3SY7+GTwxmYJv4QC0LxXbo97zHWCyoc=
|
||||||
github.com/dropbox/dropbox-sdk-go-unofficial v5.4.0+incompatible/go.mod h1:lr+LhMM3F6Y3lW1T9j2U5l7QeuWm87N9+PPXo3yH4qY=
|
github.com/dropbox/dropbox-sdk-go-unofficial v5.4.0+incompatible/go.mod h1:lr+LhMM3F6Y3lW1T9j2U5l7QeuWm87N9+PPXo3yH4qY=
|
||||||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
|
||||||
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
|
|
||||||
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
github.com/glycerine/goconvey v0.0.0-20180728074245-46e3a41ad493/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
|
||||||
github.com/goftp/file-driver v0.0.0-20180502053751-5d604a0fc0c9 h1:cC0Hbb+18DJ4i6ybqDybvj4wdIDS4vnD0QEci98PgM8=
|
github.com/goftp/file-driver v0.0.0-20180502053751-5d604a0fc0c9 h1:cC0Hbb+18DJ4i6ybqDybvj4wdIDS4vnD0QEci98PgM8=
|
||||||
github.com/goftp/file-driver v0.0.0-20180502053751-5d604a0fc0c9/go.mod h1:GpOj6zuVBG3Inr9qjEnuVTgBlk2lZ1S9DcoFiXWyKss=
|
github.com/goftp/file-driver v0.0.0-20180502053751-5d604a0fc0c9/go.mod h1:GpOj6zuVBG3Inr9qjEnuVTgBlk2lZ1S9DcoFiXWyKss=
|
||||||
github.com/goftp/server v0.0.0-20190304020633-eabccc535b5a h1:XTJuuzIub3zu2FgPqdFM9XFYYisXWu2hN/rFwayAIcY=
|
github.com/goftp/server v0.0.0-20190304020633-eabccc535b5a h1:XTJuuzIub3zu2FgPqdFM9XFYYisXWu2hN/rFwayAIcY=
|
||||||
github.com/goftp/server v0.0.0-20190304020633-eabccc535b5a/go.mod h1:k/SS6VWkxY7dHPhoMQ8IdRu8L4lQtmGbhyXGg+vCnXE=
|
github.com/goftp/server v0.0.0-20190304020633-eabccc535b5a/go.mod h1:k/SS6VWkxY7dHPhoMQ8IdRu8L4lQtmGbhyXGg+vCnXE=
|
||||||
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
|
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
@ -73,9 +72,12 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
|
|||||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
|
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||||
|
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
|
||||||
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
|
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
|
||||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
||||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
||||||
@ -83,10 +85,9 @@ github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OI
|
|||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20190411002643-bd77b112433e h1:XWcjeEtTFTOVA9Fs1w7n2XBftk5ib4oZrhzWk0B+3eA=
|
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20190411002643-bd77b112433e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4=
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
|
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
|
||||||
@ -94,162 +95,140 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
|
|||||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
|
github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||||
github.com/jlaffaye/ftp v0.0.0-20190411155707-52d3001130a6 h1:tAJSNnBx4ZAfMe8IuISVFsoS13fDJfb54k8/X5jGIfI=
|
|
||||||
github.com/jlaffaye/ftp v0.0.0-20190411155707-52d3001130a6/go.mod h1:lli8NYPQOFy3O++YmYbqVgOcQ1JPCwdOy+5zSjKJ9qY=
|
|
||||||
github.com/jlaffaye/ftp v0.0.0-20190427163646-6a014d5e22e6 h1:L8GOc4DyMAj4NyTq5He3pY/tfgLWcgwGXGnan5RWf1A=
|
|
||||||
github.com/jlaffaye/ftp v0.0.0-20190427163646-6a014d5e22e6/go.mod h1:lli8NYPQOFy3O++YmYbqVgOcQ1JPCwdOy+5zSjKJ9qY=
|
|
||||||
github.com/jlaffaye/ftp v0.0.0-20190519203911-8f5b34ce006f h1:oUoY3Lvi7PD1F3CuayxfdJtwmKV7WNQBdXt8fK1breU=
|
|
||||||
github.com/jlaffaye/ftp v0.0.0-20190519203911-8f5b34ce006f/go.mod h1:lli8NYPQOFy3O++YmYbqVgOcQ1JPCwdOy+5zSjKJ9qY=
|
|
||||||
github.com/jlaffaye/ftp v0.0.0-20190624084859-c1312a7102bf h1:2IYBd5TD/maMqTU2YUzp2tJL4cNaOYQ9EBullN9t9pk=
|
github.com/jlaffaye/ftp v0.0.0-20190624084859-c1312a7102bf h1:2IYBd5TD/maMqTU2YUzp2tJL4cNaOYQ9EBullN9t9pk=
|
||||||
github.com/jlaffaye/ftp v0.0.0-20190624084859-c1312a7102bf/go.mod h1:lli8NYPQOFy3O++YmYbqVgOcQ1JPCwdOy+5zSjKJ9qY=
|
github.com/jlaffaye/ftp v0.0.0-20190624084859-c1312a7102bf/go.mod h1:lli8NYPQOFy3O++YmYbqVgOcQ1JPCwdOy+5zSjKJ9qY=
|
||||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
|
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
|
||||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||||
|
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
|
||||||
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
|
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA=
|
||||||
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
|
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
|
||||||
github.com/koofr/go-httpclient v0.0.0-20180104120329-03786175608a h1:W+gnfphB7WpRj0rbTF40e3edULfri4fou2kUFw6AF3A=
|
github.com/koofr/go-httpclient v0.0.0-20180104120329-03786175608a h1:W+gnfphB7WpRj0rbTF40e3edULfri4fou2kUFw6AF3A=
|
||||||
github.com/koofr/go-httpclient v0.0.0-20180104120329-03786175608a/go.mod h1:3xszwh+rNrYk1r9SStc4iJ326gne1OaBcrdB1ACsbzI=
|
github.com/koofr/go-httpclient v0.0.0-20180104120329-03786175608a/go.mod h1:3xszwh+rNrYk1r9SStc4iJ326gne1OaBcrdB1ACsbzI=
|
||||||
github.com/koofr/go-koofrclient v0.0.0-20190131164641-7f327592caff h1:GlfzG8bgyoJYz+5sMvGpYnHrg4veNVNnDGuE9hTEMHk=
|
github.com/koofr/go-koofrclient v0.0.0-20190131164641-7f327592caff h1:GlfzG8bgyoJYz+5sMvGpYnHrg4veNVNnDGuE9hTEMHk=
|
||||||
github.com/koofr/go-koofrclient v0.0.0-20190131164641-7f327592caff/go.mod h1:MRAz4Gsxd+OzrZ0owwrUHc0zLESL+1Y5syqK/sJxK2A=
|
github.com/koofr/go-koofrclient v0.0.0-20190131164641-7f327592caff/go.mod h1:MRAz4Gsxd+OzrZ0owwrUHc0zLESL+1Y5syqK/sJxK2A=
|
||||||
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
|
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
|
||||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
||||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
|
||||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
|
|
||||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
|
github.com/mattn/go-gtk v0.0.0-20190405072524-4deadb416788/go.mod h1:PwzwfeB5syFHXORC3MtPylVcjIoTDT/9cvkKpEndGVI=
|
||||||
|
github.com/mattn/go-pointer v0.0.0-20180825124634-49522c3f3791/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc=
|
||||||
github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y=
|
github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y=
|
||||||
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
|
||||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg=
|
||||||
github.com/ncw/go-acd v0.0.0-20171120105400-887eb06ab6a2 h1:VlXvEx6JbFp7F9iz92zXP2Ew+9VupSpfybr+TxmjdH0=
|
github.com/ncw/go-acd v0.0.0-20171120105400-887eb06ab6a2 h1:VlXvEx6JbFp7F9iz92zXP2Ew+9VupSpfybr+TxmjdH0=
|
||||||
github.com/ncw/go-acd v0.0.0-20171120105400-887eb06ab6a2/go.mod h1:MLIrzg7gp/kzVBxRE1olT7CWYMCklcUWU+ekoxOD9x0=
|
github.com/ncw/go-acd v0.0.0-20171120105400-887eb06ab6a2/go.mod h1:MLIrzg7gp/kzVBxRE1olT7CWYMCklcUWU+ekoxOD9x0=
|
||||||
github.com/ncw/swift v1.0.47 h1:4DQRPj35Y41WogBxyhOXlrI37nzGlyEcsforeudyYPQ=
|
github.com/ncw/swift v1.0.47 h1:4DQRPj35Y41WogBxyhOXlrI37nzGlyEcsforeudyYPQ=
|
||||||
github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
|
github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
|
||||||
github.com/nsf/termbox-go v0.0.0-20190325093121-288510b9734e h1:Vbib8wJAaMEF9jusI/kMSYMr/LtRzM7+F9MJgt/nH8k=
|
github.com/nsf/termbox-go v0.0.0-20190624072549-eeb6cd0a1762 h1:44Lv0bNi88GweB54TCjB/lEJgp+2Ze5WFpwNu0nh0ag=
|
||||||
github.com/nsf/termbox-go v0.0.0-20190325093121-288510b9734e/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ=
|
github.com/nsf/termbox-go v0.0.0-20190624072549-eeb6cd0a1762/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ=
|
||||||
github.com/okzk/sdnotify v0.0.0-20180710141335-d9becc38acbd h1:+iAPaTbi1gZpcpDwe/BW1fx7Xoesv69hLNGPheoyhBs=
|
github.com/okzk/sdnotify v0.0.0-20180710141335-d9becc38acbd h1:+iAPaTbi1gZpcpDwe/BW1fx7Xoesv69hLNGPheoyhBs=
|
||||||
github.com/okzk/sdnotify v0.0.0-20180710141335-d9becc38acbd/go.mod h1:4soZNh0zW0LtYGdQ416i0jO0EIqMGcbtaspRS4BDvRQ=
|
github.com/okzk/sdnotify v0.0.0-20180710141335-d9becc38acbd/go.mod h1:4soZNh0zW0LtYGdQ416i0jO0EIqMGcbtaspRS4BDvRQ=
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
|
|
||||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w=
|
github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w=
|
||||||
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
|
|
||||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
|
||||||
github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo=
|
github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo=
|
||||||
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
|
||||||
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
|
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
|
||||||
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
|
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
|
||||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||||
github.com/pengsrc/go-shared v0.2.0 h1:Ho86LhaXOYgv9FjBmIp5CO0LmaIj49H2HZhYh0+7uW8=
|
github.com/pengsrc/go-shared v0.2.0 h1:Ho86LhaXOYgv9FjBmIp5CO0LmaIj49H2HZhYh0+7uW8=
|
||||||
github.com/pengsrc/go-shared v0.2.0/go.mod h1:jVblp62SafmidSkvWrXyxAme3gaTfEtWwRPGz5cpvHg=
|
github.com/pengsrc/go-shared v0.2.0/go.mod h1:jVblp62SafmidSkvWrXyxAme3gaTfEtWwRPGz5cpvHg=
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
||||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/sftp v1.10.0 h1:DGA1KlA9esU6WcicH+P8PxFZOl15O6GYtab1cIJdOlE=
|
|
||||||
github.com/pkg/sftp v1.10.0/go.mod h1:NxmoDg/QLVWluQDUYG7XBZTLUpKeFa8e3aMf1BfjyHk=
|
|
||||||
github.com/pkg/sftp v1.10.1-0.20190523025818-e98a7bef6829 h1:I+1BDgqX1nXLUL5Uio219Nj0Tne+xW0gp2EOENDk00M=
|
github.com/pkg/sftp v1.10.1-0.20190523025818-e98a7bef6829 h1:I+1BDgqX1nXLUL5Uio219Nj0Tne+xW0gp2EOENDk00M=
|
||||||
github.com/pkg/sftp v1.10.1-0.20190523025818-e98a7bef6829/go.mod h1:NxmoDg/QLVWluQDUYG7XBZTLUpKeFa8e3aMf1BfjyHk=
|
github.com/pkg/sftp v1.10.1-0.20190523025818-e98a7bef6829/go.mod h1:NxmoDg/QLVWluQDUYG7XBZTLUpKeFa8e3aMf1BfjyHk=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
|
||||||
github.com/rfjakob/eme v0.0.0-20171028163933-2222dbd4ba46 h1:w2CpS5muK+jyydnmlkqpAhzKmHmMBzBkfYUDjQNS1Dk=
|
github.com/rfjakob/eme v0.0.0-20171028163933-2222dbd4ba46 h1:w2CpS5muK+jyydnmlkqpAhzKmHmMBzBkfYUDjQNS1Dk=
|
||||||
github.com/rfjakob/eme v0.0.0-20171028163933-2222dbd4ba46/go.mod h1:U2bmx0hDj8EyDdcxmD5t3XHDnBFnyNNc22n1R4008eM=
|
github.com/rfjakob/eme v0.0.0-20171028163933-2222dbd4ba46/go.mod h1:U2bmx0hDj8EyDdcxmD5t3XHDnBFnyNNc22n1R4008eM=
|
||||||
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
|
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
|
||||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||||
github.com/sevlyar/go-daemon v0.1.4 h1:Ayxp/9SNHwPBjV+kKbnHl2ch6rhxTu08jfkGkoxgULQ=
|
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
|
||||||
github.com/sevlyar/go-daemon v0.1.4/go.mod h1:6dJpPatBT9eUwM5VCw9Bt6CdX9Tk6UWvhW3MebLDRKE=
|
github.com/sevlyar/go-daemon v0.1.5 h1:Zy/6jLbM8CfqJ4x4RPr7MJlSKt90f00kNM1D401C+Qk=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sevlyar/go-daemon v0.1.5/go.mod h1:6dJpPatBT9eUwM5VCw9Bt6CdX9Tk6UWvhW3MebLDRKE=
|
||||||
github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e h1:VAzdS5Nw68fbf5RZ8RDVlUvPXNU6Z3jtPCK/qvm4FoQ=
|
github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e h1:VAzdS5Nw68fbf5RZ8RDVlUvPXNU6Z3jtPCK/qvm4FoQ=
|
||||||
github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
|
github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||||
github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3 h1:hBSHahWMEgzwRyS6dRpxY0XyjZsHyQ61s084wo5PJe0=
|
github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8=
|
||||||
github.com/smartystreets/assertions v0.0.0-20190401211740-f487f9de1cd3/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM=
|
||||||
|
github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
|
||||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs=
|
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs=
|
||||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||||
github.com/spf13/cobra v0.0.4-0.20190321000552-67fc4837d267 h1:I9j1PLS64+NgCtkgbomGInboj1NFH1KF1tkVKlt3yF4=
|
github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
|
||||||
github.com/spf13/cobra v0.0.4-0.20190321000552-67fc4837d267/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
|
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
|
||||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||||
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
||||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/t3rm1n4l/go-mega v0.0.0-20190430100803-72151b53bb44 h1:NP4ucpwRJ0wmpu2/KBu7ymYQq2qKn6/Wlqpt8zhuZrs=
|
github.com/t3rm1n4l/go-mega v0.0.0-20190528125457-55e675378686 h1:U7mF+tjDK9zWoxCU+kBNa1XT7WZMF5bjwtRpjeIkSYw=
|
||||||
github.com/t3rm1n4l/go-mega v0.0.0-20190430100803-72151b53bb44/go.mod h1:XWL4vDyd3JKmJx+hZWUVgCNmmhZ2dTBcaNDcxH465s0=
|
github.com/t3rm1n4l/go-mega v0.0.0-20190528125457-55e675378686/go.mod h1:XWL4vDyd3JKmJx+hZWUVgCNmmhZ2dTBcaNDcxH465s0=
|
||||||
|
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
|
||||||
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
||||||
|
github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
|
||||||
github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70=
|
github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70=
|
||||||
github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4=
|
github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4=
|
||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||||
github.com/yunify/qingstor-sdk-go v2.2.15+incompatible h1:/Z0q3/eSMoPYAuRmhjWtuGSmVVciFC6hfm3yfCKuvz0=
|
github.com/yunify/qingstor-sdk-go v2.2.15+incompatible h1:/Z0q3/eSMoPYAuRmhjWtuGSmVVciFC6hfm3yfCKuvz0=
|
||||||
github.com/yunify/qingstor-sdk-go v2.2.15+incompatible/go.mod h1:w6wqLDQ5bBTzxGJ55581UrSwLrsTAsdo9N6yX/8d9RY=
|
github.com/yunify/qingstor-sdk-go v2.2.15+incompatible/go.mod h1:w6wqLDQ5bBTzxGJ55581UrSwLrsTAsdo9N6yX/8d9RY=
|
||||||
go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk=
|
go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
|
||||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
go.opencensus.io v0.20.1 h1:pMEjRZ1M4ebWGikflH7nQpV6+Zr88KBMA2XJD3sbijw=
|
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4=
|
||||||
go.opencensus.io v0.20.2 h1:NAfh7zF0/3/HqtMvJNZ/RFrSlCE6ZTlHmKfhL/Dm1Jk=
|
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
||||||
go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
|
||||||
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734 h1:p/H982KKEjUnLJkM3tt/LemDnOc1GiZL5FCVlORJ5zo=
|
|
||||||
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
|
||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU=
|
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU=
|
||||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
|
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4 h1:ydJNl0ENAG67pFbB+9tfhiL2pYqLhfoaZFw/cjLhY4A=
|
||||||
|
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
|
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190424112056-4829fb13d2c6 h1:FP8hkuE6yUEaJnK7O2eTuejKWwW+Rhfj80dQ2JcKxCU=
|
golang.org/x/net v0.0.0-20190415214537-1da14a5a36f2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190424112056-4829fb13d2c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190606173856-1492cefac77f h1:IWHgpgFqnL5AhBUBZSgBdjl2vkQUEzcY+JNKWfcgAU0=
|
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190606173856-1492cefac77f/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
|
||||||
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
|
||||||
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@ -257,19 +236,18 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872 h1:cGjJzUd8RgBw428LXP65YXni0aiGNA4Bl+ls8SmLOm8=
|
golang.org/x/sys v0.0.0-20190415145633-3fd5a3612ccd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444 h1:/d2cWp6PSamH4jDPFLyO150psQdqvtoNX8Zjg3AQ31g=
|
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k=
|
||||||
|
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
|
||||||
@ -279,33 +257,39 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
|||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
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-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20190606174628-0139d5756a7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
google.golang.org/api v0.3.2 h1:iTp+3yyl/KOtxa/d1/JUE0GGSoR6FuW5udver22iwpw=
|
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||||
google.golang.org/api v0.3.2/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
google.golang.org/api v0.6.0/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4=
|
||||||
|
google.golang.org/api v0.7.0 h1:9sdfJOzWlkqPltHAuzT2Cp+yrBeY1KRVYgms8soxMwM=
|
||||||
|
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
|
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
|
google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
|
||||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
|
||||||
|
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk=
|
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk=
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107 h1:xtNn7qFlagY2mQNFHMSRPjT2RkOV4OXM7P5TVy9xATo=
|
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
|
google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
|
||||||
|
google.golang.org/genproto v0.0.0-20190626174449-989357319d63 h1:UsSJe9fhWNSz6emfIGPpH5DF23t7ALo2Pf3sC+/hsdg=
|
||||||
|
google.golang.org/genproto v0.0.0-20190626174449-989357319d63/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
|
||||||
google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=
|
google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
google.golang.org/grpc v1.20.0 h1:DlsSIrgEBuZAUFJcta2B5i/lzeHHbnfkNFAfFXLVFYQ=
|
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||||
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
|
google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405 h1:829vOVxxusYHC+IqBtkX5mbKtsY9fheQiQn0MZRVLfQ=
|
gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405 h1:829vOVxxusYHC+IqBtkX5mbKtsY9fheQiQn0MZRVLfQ=
|
||||||
gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
@ -319,6 +303,7 @@ gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
|
|||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||||
|
15
vendor/cloud.google.com/go/AUTHORS
generated
vendored
15
vendor/cloud.google.com/go/AUTHORS
generated
vendored
@ -1,15 +0,0 @@
|
|||||||
# This is the official list of cloud authors for copyright purposes.
|
|
||||||
# This file is distinct from the CONTRIBUTORS files.
|
|
||||||
# See the latter for an explanation.
|
|
||||||
|
|
||||||
# Names should be added to this file as:
|
|
||||||
# Name or Organization <email address>
|
|
||||||
# The email address is not required for organizations.
|
|
||||||
|
|
||||||
Filippo Valsorda <hi@filippo.io>
|
|
||||||
Google Inc.
|
|
||||||
Ingo Oeser <nightlyone@googlemail.com>
|
|
||||||
Palm Stone Games, Inc.
|
|
||||||
Paweł Knap <pawelknap88@gmail.com>
|
|
||||||
Péter Szilágyi <peterke@gmail.com>
|
|
||||||
Tyler Treat <ttreat31@gmail.com>
|
|
40
vendor/cloud.google.com/go/CONTRIBUTORS
generated
vendored
40
vendor/cloud.google.com/go/CONTRIBUTORS
generated
vendored
@ -1,40 +0,0 @@
|
|||||||
# People who have agreed to one of the CLAs and can contribute patches.
|
|
||||||
# The AUTHORS file lists the copyright holders; this file
|
|
||||||
# lists people. For example, Google employees are listed here
|
|
||||||
# but not in AUTHORS, because Google holds the copyright.
|
|
||||||
#
|
|
||||||
# https://developers.google.com/open-source/cla/individual
|
|
||||||
# https://developers.google.com/open-source/cla/corporate
|
|
||||||
#
|
|
||||||
# Names should be added to this file as:
|
|
||||||
# Name <email address>
|
|
||||||
|
|
||||||
# Keep the list alphabetically sorted.
|
|
||||||
|
|
||||||
Alexis Hunt <lexer@google.com>
|
|
||||||
Andreas Litt <andreas.litt@gmail.com>
|
|
||||||
Andrew Gerrand <adg@golang.org>
|
|
||||||
Brad Fitzpatrick <bradfitz@golang.org>
|
|
||||||
Burcu Dogan <jbd@google.com>
|
|
||||||
Dave Day <djd@golang.org>
|
|
||||||
David Sansome <me@davidsansome.com>
|
|
||||||
David Symonds <dsymonds@golang.org>
|
|
||||||
Filippo Valsorda <hi@filippo.io>
|
|
||||||
Glenn Lewis <gmlewis@google.com>
|
|
||||||
Ingo Oeser <nightlyone@googlemail.com>
|
|
||||||
James Hall <james.hall@shopify.com>
|
|
||||||
Johan Euphrosine <proppy@google.com>
|
|
||||||
Jonathan Amsterdam <jba@google.com>
|
|
||||||
Kunpei Sakai <namusyaka@gmail.com>
|
|
||||||
Luna Duclos <luna.duclos@palmstonegames.com>
|
|
||||||
Magnus Hiie <magnus.hiie@gmail.com>
|
|
||||||
Mario Castro <mariocaster@gmail.com>
|
|
||||||
Michael McGreevy <mcgreevy@golang.org>
|
|
||||||
Omar Jarjur <ojarjur@google.com>
|
|
||||||
Paweł Knap <pawelknap88@gmail.com>
|
|
||||||
Péter Szilágyi <peterke@gmail.com>
|
|
||||||
Sarah Adams <shadams@google.com>
|
|
||||||
Thanatat Tamtan <acoshift@gmail.com>
|
|
||||||
Toby Burress <kurin@google.com>
|
|
||||||
Tuo Shan <shantuo@google.com>
|
|
||||||
Tyler Treat <ttreat31@gmail.com>
|
|
2
vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.go
generated
vendored
2
vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.go
generated
vendored
@ -35,7 +35,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var reportEvent = func() func(eventType eventType, eventID int32, msg string) {
|
var reportEvent = func() func(eventType eventType, eventID int32, msg string) {
|
||||||
advAPI32 := syscall.MustLoadDLL("AdvAPI32.dll")
|
advAPI32 := syscall.MustLoadDLL("advapi32.dll") // lower case to tie in with Go's sysdll registration
|
||||||
registerEventSource := advAPI32.MustFindProc("RegisterEventSourceW")
|
registerEventSource := advAPI32.MustFindProc("RegisterEventSourceW")
|
||||||
|
|
||||||
sourceName, _ := os.Executable()
|
sourceName, _ := os.Executable()
|
||||||
|
88
vendor/github.com/Azure/azure-pipeline-go/pipeline/error.go
generated
vendored
88
vendor/github.com/Azure/azure-pipeline-go/pipeline/error.go
generated
vendored
@ -9,6 +9,23 @@ type causer interface {
|
|||||||
Cause() error
|
Cause() error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func errorWithPC(msg string, pc uintptr) string {
|
||||||
|
s := ""
|
||||||
|
if fn := runtime.FuncForPC(pc); fn != nil {
|
||||||
|
file, line := fn.FileLine(pc)
|
||||||
|
s = fmt.Sprintf("-> %v, %v:%v\n", fn.Name(), file, line)
|
||||||
|
}
|
||||||
|
s += msg + "\n\n"
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func getPC(callersToSkip int) uintptr {
|
||||||
|
// Get the PC of Initialize method's caller.
|
||||||
|
pc := [1]uintptr{}
|
||||||
|
_ = runtime.Callers(callersToSkip, pc[:])
|
||||||
|
return pc[0]
|
||||||
|
}
|
||||||
|
|
||||||
// ErrorNode can be an embedded field in a private error object. This field
|
// ErrorNode can be an embedded field in a private error object. This field
|
||||||
// adds Program Counter support and a 'cause' (reference to a preceding error).
|
// adds Program Counter support and a 'cause' (reference to a preceding error).
|
||||||
// When initializing a error type with this embedded field, initialize the
|
// When initializing a error type with this embedded field, initialize the
|
||||||
@ -22,12 +39,7 @@ type ErrorNode struct {
|
|||||||
// When defining a new error type, have its Error method call this one passing
|
// When defining a new error type, have its Error method call this one passing
|
||||||
// it the string representation of the error.
|
// it the string representation of the error.
|
||||||
func (e *ErrorNode) Error(msg string) string {
|
func (e *ErrorNode) Error(msg string) string {
|
||||||
s := ""
|
s := errorWithPC(msg, e.pc)
|
||||||
if fn := runtime.FuncForPC(e.pc); fn != nil {
|
|
||||||
file, line := fn.FileLine(e.pc)
|
|
||||||
s = fmt.Sprintf("-> %v, %v:%v\n", fn.Name(), file, line)
|
|
||||||
}
|
|
||||||
s += msg + "\n\n"
|
|
||||||
if e.cause != nil {
|
if e.cause != nil {
|
||||||
s += e.cause.Error() + "\n"
|
s += e.cause.Error() + "\n"
|
||||||
}
|
}
|
||||||
@ -83,10 +95,8 @@ func (e ErrorNode) Timeout() bool {
|
|||||||
// value of 3 is very common; but, depending on your code nesting, you may need
|
// value of 3 is very common; but, depending on your code nesting, you may need
|
||||||
// a different value.
|
// a different value.
|
||||||
func (ErrorNode) Initialize(cause error, callersToSkip int) ErrorNode {
|
func (ErrorNode) Initialize(cause error, callersToSkip int) ErrorNode {
|
||||||
// Get the PC of Initialize method's caller.
|
pc := getPC(callersToSkip)
|
||||||
pc := [1]uintptr{}
|
return ErrorNode{pc: pc, cause: cause}
|
||||||
_ = runtime.Callers(callersToSkip, pc[:])
|
|
||||||
return ErrorNode{pc: pc[0], cause: cause}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cause walks all the preceding errors and return the originating error.
|
// Cause walks all the preceding errors and return the originating error.
|
||||||
@ -101,12 +111,53 @@ func Cause(err error) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ErrorNodeNoCause can be an embedded field in a private error object. This field
|
||||||
|
// adds Program Counter support.
|
||||||
|
// When initializing a error type with this embedded field, initialize the
|
||||||
|
// ErrorNodeNoCause field by calling ErrorNodeNoCause{}.Initialize().
|
||||||
|
type ErrorNodeNoCause struct {
|
||||||
|
pc uintptr // Represents a Program Counter that you can get symbols for.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error returns a string with the PC's symbols or "" if the PC is invalid.
|
||||||
|
// When defining a new error type, have its Error method call this one passing
|
||||||
|
// it the string representation of the error.
|
||||||
|
func (e *ErrorNodeNoCause) Error(msg string) string {
|
||||||
|
return errorWithPC(msg, e.pc)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Temporary returns true if the error occurred due to a temporary condition.
|
||||||
|
func (e ErrorNodeNoCause) Temporary() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Timeout returns true if the error occurred due to time expiring.
|
||||||
|
func (e ErrorNodeNoCause) Timeout() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize is used to initialize an embedded ErrorNode field.
|
||||||
|
// It captures the caller's program counter.
|
||||||
|
// To initialize the field, use "ErrorNodeNoCause{}.Initialize(3)". A callersToSkip
|
||||||
|
// value of 3 is very common; but, depending on your code nesting, you may need
|
||||||
|
// a different value.
|
||||||
|
func (ErrorNodeNoCause) Initialize(callersToSkip int) ErrorNodeNoCause {
|
||||||
|
pc := getPC(callersToSkip)
|
||||||
|
return ErrorNodeNoCause{pc: pc}
|
||||||
|
}
|
||||||
|
|
||||||
// NewError creates a simple string error (like Error.New). But, this
|
// NewError creates a simple string error (like Error.New). But, this
|
||||||
// error also captures the caller's Program Counter and the preceding error.
|
// error also captures the caller's Program Counter and the preceding error (if provided).
|
||||||
func NewError(cause error, msg string) error {
|
func NewError(cause error, msg string) error {
|
||||||
return &pcError{
|
if cause != nil {
|
||||||
ErrorNode: ErrorNode{}.Initialize(cause, 3),
|
return &pcError{
|
||||||
msg: msg,
|
ErrorNode: ErrorNode{}.Initialize(cause, 3),
|
||||||
|
msg: msg,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &pcErrorNoCause{
|
||||||
|
ErrorNodeNoCause: ErrorNodeNoCause{}.Initialize(3),
|
||||||
|
msg: msg,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,3 +170,12 @@ type pcError struct {
|
|||||||
// Error satisfies the error interface. It shows the error with Program Counter
|
// Error satisfies the error interface. It shows the error with Program Counter
|
||||||
// symbols and calls Error on the preceding error so you can see the full error chain.
|
// symbols and calls Error on the preceding error so you can see the full error chain.
|
||||||
func (e *pcError) Error() string { return e.ErrorNode.Error(e.msg) }
|
func (e *pcError) Error() string { return e.ErrorNode.Error(e.msg) }
|
||||||
|
|
||||||
|
// pcErrorNoCause is a simple string error (like error.New) with an ErrorNode (PC).
|
||||||
|
type pcErrorNoCause struct {
|
||||||
|
ErrorNodeNoCause
|
||||||
|
msg string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error satisfies the error interface. It shows the error with Program Counter symbols.
|
||||||
|
func (e *pcErrorNoCause) Error() string { return e.ErrorNodeNoCause.Error(e.msg) }
|
||||||
|
2
vendor/github.com/Unknwon/goconfig/conf.go
generated
vendored
2
vendor/github.com/Unknwon/goconfig/conf.go
generated
vendored
@ -263,7 +263,7 @@ func (c *ConfigFile) MustValue(section, key string, defaultVal ...string) string
|
|||||||
return val
|
return val
|
||||||
}
|
}
|
||||||
|
|
||||||
// MustValue always returns value without error,
|
// MustValueSet always returns value without error,
|
||||||
// It returns empty string if error occurs, or the default value if given,
|
// It returns empty string if error occurs, or the default value if given,
|
||||||
// and a bool value indicates whether default value is returned.
|
// and a bool value indicates whether default value is returned.
|
||||||
func (c *ConfigFile) MustValueSet(section, key string, defaultVal ...string) (string, bool) {
|
func (c *ConfigFile) MustValueSet(section, key string, defaultVal ...string) (string, bool) {
|
||||||
|
23
vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go
generated
vendored
23
vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go
generated
vendored
@ -138,8 +138,27 @@ type RequestFailure interface {
|
|||||||
RequestID() string
|
RequestID() string
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewRequestFailure returns a new request error wrapper for the given Error
|
// NewRequestFailure returns a wrapped error with additional information for
|
||||||
// provided.
|
// request status code, and service requestID.
|
||||||
|
//
|
||||||
|
// Should be used to wrap all request which involve service requests. Even if
|
||||||
|
// the request failed without a service response, but had an HTTP status code
|
||||||
|
// that may be meaningful.
|
||||||
func NewRequestFailure(err Error, statusCode int, reqID string) RequestFailure {
|
func NewRequestFailure(err Error, statusCode int, reqID string) RequestFailure {
|
||||||
return newRequestError(err, statusCode, reqID)
|
return newRequestError(err, statusCode, reqID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalError provides the interface for the SDK failing to unmarshal data.
|
||||||
|
type UnmarshalError interface {
|
||||||
|
awsError
|
||||||
|
Bytes() []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUnmarshalError returns an initialized UnmarshalError error wrapper adding
|
||||||
|
// the bytes that fail to unmarshal to the error.
|
||||||
|
func NewUnmarshalError(err error, msg string, bytes []byte) UnmarshalError {
|
||||||
|
return &unmarshalError{
|
||||||
|
awsError: New("UnmarshalError", msg, err),
|
||||||
|
bytes: bytes,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
29
vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go
generated
vendored
29
vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go
generated
vendored
@ -1,6 +1,9 @@
|
|||||||
package awserr
|
package awserr
|
||||||
|
|
||||||
import "fmt"
|
import (
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
// SprintError returns a string of the formatted error code.
|
// SprintError returns a string of the formatted error code.
|
||||||
//
|
//
|
||||||
@ -119,6 +122,7 @@ type requestError struct {
|
|||||||
awsError
|
awsError
|
||||||
statusCode int
|
statusCode int
|
||||||
requestID string
|
requestID string
|
||||||
|
bytes []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// newRequestError returns a wrapped error with additional information for
|
// newRequestError returns a wrapped error with additional information for
|
||||||
@ -170,6 +174,29 @@ func (r requestError) OrigErrs() []error {
|
|||||||
return []error{r.OrigErr()}
|
return []error{r.OrigErr()}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type unmarshalError struct {
|
||||||
|
awsError
|
||||||
|
bytes []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error returns the string representation of the error.
|
||||||
|
// Satisfies the error interface.
|
||||||
|
func (e unmarshalError) Error() string {
|
||||||
|
extra := hex.Dump(e.bytes)
|
||||||
|
return SprintError(e.Code(), e.Message(), extra, e.OrigErr())
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns the string representation of the error.
|
||||||
|
// Alias for Error to satisfy the stringer interface.
|
||||||
|
func (e unmarshalError) String() string {
|
||||||
|
return e.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bytes returns the bytes that failed to unmarshal.
|
||||||
|
func (e unmarshalError) Bytes() []byte {
|
||||||
|
return e.bytes
|
||||||
|
}
|
||||||
|
|
||||||
// An error list that satisfies the golang interface
|
// An error list that satisfies the golang interface
|
||||||
type errorList []error
|
type errorList []error
|
||||||
|
|
||||||
|
3
vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go
generated
vendored
3
vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go
generated
vendored
@ -50,9 +50,10 @@ package credentials
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AnonymousCredentials is an empty Credential object that can be used as
|
// AnonymousCredentials is an empty Credential object that can be used as
|
||||||
|
6
vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go
generated
vendored
6
vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go
generated
vendored
@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/client"
|
"github.com/aws/aws-sdk-go/aws/client"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
"github.com/aws/aws-sdk-go/aws/ec2metadata"
|
"github.com/aws/aws-sdk-go/aws/ec2metadata"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
"github.com/aws/aws-sdk-go/internal/sdkuri"
|
"github.com/aws/aws-sdk-go/internal/sdkuri"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -142,7 +143,8 @@ func requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := s.Err(); err != nil {
|
if err := s.Err(); err != nil {
|
||||||
return nil, awserr.New("SerializationError", "failed to read EC2 instance role from metadata service", err)
|
return nil, awserr.New(request.ErrCodeSerialization,
|
||||||
|
"failed to read EC2 instance role from metadata service", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return credsList, nil
|
return credsList, nil
|
||||||
@ -164,7 +166,7 @@ func requestCred(client *ec2metadata.EC2Metadata, credsName string) (ec2RoleCred
|
|||||||
respCreds := ec2RoleCredRespBody{}
|
respCreds := ec2RoleCredRespBody{}
|
||||||
if err := json.NewDecoder(strings.NewReader(resp)).Decode(&respCreds); err != nil {
|
if err := json.NewDecoder(strings.NewReader(resp)).Decode(&respCreds); err != nil {
|
||||||
return ec2RoleCredRespBody{},
|
return ec2RoleCredRespBody{},
|
||||||
awserr.New("SerializationError",
|
awserr.New(request.ErrCodeSerialization,
|
||||||
fmt.Sprintf("failed to decode %s EC2 instance role credentials", credsName),
|
fmt.Sprintf("failed to decode %s EC2 instance role credentials", credsName),
|
||||||
err)
|
err)
|
||||||
}
|
}
|
||||||
|
15
vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go
generated
vendored
15
vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go
generated
vendored
@ -39,6 +39,7 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/client/metadata"
|
"github.com/aws/aws-sdk-go/aws/client/metadata"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol/json/jsonutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ProviderName is the name of the credentials provider.
|
// ProviderName is the name of the credentials provider.
|
||||||
@ -174,7 +175,7 @@ func unmarshalHandler(r *request.Request) {
|
|||||||
|
|
||||||
out := r.Data.(*getCredentialsOutput)
|
out := r.Data.(*getCredentialsOutput)
|
||||||
if err := json.NewDecoder(r.HTTPResponse.Body).Decode(&out); err != nil {
|
if err := json.NewDecoder(r.HTTPResponse.Body).Decode(&out); err != nil {
|
||||||
r.Error = awserr.New("SerializationError",
|
r.Error = awserr.New(request.ErrCodeSerialization,
|
||||||
"failed to decode endpoint credentials",
|
"failed to decode endpoint credentials",
|
||||||
err,
|
err,
|
||||||
)
|
)
|
||||||
@ -185,11 +186,15 @@ func unmarshalError(r *request.Request) {
|
|||||||
defer r.HTTPResponse.Body.Close()
|
defer r.HTTPResponse.Body.Close()
|
||||||
|
|
||||||
var errOut errorOutput
|
var errOut errorOutput
|
||||||
if err := json.NewDecoder(r.HTTPResponse.Body).Decode(&errOut); err != nil {
|
err := jsonutil.UnmarshalJSONError(&errOut, r.HTTPResponse.Body)
|
||||||
r.Error = awserr.New("SerializationError",
|
if err != nil {
|
||||||
"failed to decode endpoint credentials",
|
r.Error = awserr.NewRequestFailure(
|
||||||
err,
|
awserr.New(request.ErrCodeSerialization,
|
||||||
|
"failed to decode error message", err),
|
||||||
|
r.HTTPResponse.StatusCode,
|
||||||
|
r.RequestID,
|
||||||
)
|
)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Response body format is not consistent between metadata endpoints.
|
// Response body format is not consistent between metadata endpoints.
|
||||||
|
17
vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go
generated
vendored
17
vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go
generated
vendored
@ -87,6 +87,7 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
"github.com/aws/aws-sdk-go/aws/client"
|
"github.com/aws/aws-sdk-go/aws/client"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
|
"github.com/aws/aws-sdk-go/internal/sdkrand"
|
||||||
"github.com/aws/aws-sdk-go/service/sts"
|
"github.com/aws/aws-sdk-go/service/sts"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -194,6 +195,18 @@ type AssumeRoleProvider struct {
|
|||||||
//
|
//
|
||||||
// If ExpiryWindow is 0 or less it will be ignored.
|
// If ExpiryWindow is 0 or less it will be ignored.
|
||||||
ExpiryWindow time.Duration
|
ExpiryWindow time.Duration
|
||||||
|
|
||||||
|
// MaxJitterFrac reduces the effective Duration of each credential requested
|
||||||
|
// by a random percentage between 0 and MaxJitterFraction. MaxJitterFrac must
|
||||||
|
// have a value between 0 and 1. Any other value may lead to expected behavior.
|
||||||
|
// With a MaxJitterFrac value of 0, default) will no jitter will be used.
|
||||||
|
//
|
||||||
|
// For example, with a Duration of 30m and a MaxJitterFrac of 0.1, the
|
||||||
|
// AssumeRole call will be made with an arbitrary Duration between 27m and
|
||||||
|
// 30m.
|
||||||
|
//
|
||||||
|
// MaxJitterFrac should not be negative.
|
||||||
|
MaxJitterFrac float64
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCredentials returns a pointer to a new Credentials object wrapping the
|
// NewCredentials returns a pointer to a new Credentials object wrapping the
|
||||||
@ -245,7 +258,6 @@ func NewCredentialsWithClient(svc AssumeRoler, roleARN string, options ...func(*
|
|||||||
|
|
||||||
// Retrieve generates a new set of temporary credentials using STS.
|
// Retrieve generates a new set of temporary credentials using STS.
|
||||||
func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) {
|
func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) {
|
||||||
|
|
||||||
// Apply defaults where parameters are not set.
|
// Apply defaults where parameters are not set.
|
||||||
if p.RoleSessionName == "" {
|
if p.RoleSessionName == "" {
|
||||||
// Try to work out a role name that will hopefully end up unique.
|
// Try to work out a role name that will hopefully end up unique.
|
||||||
@ -255,8 +267,9 @@ func (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) {
|
|||||||
// Expire as often as AWS permits.
|
// Expire as often as AWS permits.
|
||||||
p.Duration = DefaultDuration
|
p.Duration = DefaultDuration
|
||||||
}
|
}
|
||||||
|
jitter := time.Duration(sdkrand.SeededRand.Float64() * p.MaxJitterFrac * float64(p.Duration))
|
||||||
input := &sts.AssumeRoleInput{
|
input := &sts.AssumeRoleInput{
|
||||||
DurationSeconds: aws.Int64(int64(p.Duration / time.Second)),
|
DurationSeconds: aws.Int64(int64((p.Duration - jitter) / time.Second)),
|
||||||
RoleArn: aws.String(p.RoleARN),
|
RoleArn: aws.String(p.RoleARN),
|
||||||
RoleSessionName: aws.String(p.RoleSessionName),
|
RoleSessionName: aws.String(p.RoleSessionName),
|
||||||
ExternalId: p.ExternalID,
|
ExternalId: p.ExternalID,
|
||||||
|
2
vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go
generated
vendored
@ -96,7 +96,7 @@ func getMetricException(err awserr.Error) metricException {
|
|||||||
|
|
||||||
switch code {
|
switch code {
|
||||||
case "RequestError",
|
case "RequestError",
|
||||||
"SerializationError",
|
request.ErrCodeSerialization,
|
||||||
request.CanceledErrorCode:
|
request.CanceledErrorCode:
|
||||||
return sdkException{
|
return sdkException{
|
||||||
requestException{exception: code, message: msg},
|
requestException{exception: code, message: msg},
|
||||||
|
4
vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go
generated
vendored
4
vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go
generated
vendored
@ -82,7 +82,7 @@ func (c *EC2Metadata) GetInstanceIdentityDocument() (EC2InstanceIdentityDocument
|
|||||||
doc := EC2InstanceIdentityDocument{}
|
doc := EC2InstanceIdentityDocument{}
|
||||||
if err := json.NewDecoder(strings.NewReader(resp)).Decode(&doc); err != nil {
|
if err := json.NewDecoder(strings.NewReader(resp)).Decode(&doc); err != nil {
|
||||||
return EC2InstanceIdentityDocument{},
|
return EC2InstanceIdentityDocument{},
|
||||||
awserr.New("SerializationError",
|
awserr.New(request.ErrCodeSerialization,
|
||||||
"failed to decode EC2 instance identity document", err)
|
"failed to decode EC2 instance identity document", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ func (c *EC2Metadata) IAMInfo() (EC2IAMInfo, error) {
|
|||||||
info := EC2IAMInfo{}
|
info := EC2IAMInfo{}
|
||||||
if err := json.NewDecoder(strings.NewReader(resp)).Decode(&info); err != nil {
|
if err := json.NewDecoder(strings.NewReader(resp)).Decode(&info); err != nil {
|
||||||
return EC2IAMInfo{},
|
return EC2IAMInfo{},
|
||||||
awserr.New("SerializationError",
|
awserr.New(request.ErrCodeSerialization,
|
||||||
"failed to decode EC2 IAM info", err)
|
"failed to decode EC2 IAM info", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
4
vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go
generated
vendored
4
vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go
generated
vendored
@ -123,7 +123,7 @@ func unmarshalHandler(r *request.Request) {
|
|||||||
defer r.HTTPResponse.Body.Close()
|
defer r.HTTPResponse.Body.Close()
|
||||||
b := &bytes.Buffer{}
|
b := &bytes.Buffer{}
|
||||||
if _, err := io.Copy(b, r.HTTPResponse.Body); err != nil {
|
if _, err := io.Copy(b, r.HTTPResponse.Body); err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "unable to unmarshal EC2 metadata respose", err)
|
r.Error = awserr.New(request.ErrCodeSerialization, "unable to unmarshal EC2 metadata respose", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ func unmarshalError(r *request.Request) {
|
|||||||
defer r.HTTPResponse.Body.Close()
|
defer r.HTTPResponse.Body.Close()
|
||||||
b := &bytes.Buffer{}
|
b := &bytes.Buffer{}
|
||||||
if _, err := io.Copy(b, r.HTTPResponse.Body); err != nil {
|
if _, err := io.Copy(b, r.HTTPResponse.Body); err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "unable to unmarshal EC2 metadata error respose", err)
|
r.Error = awserr.New(request.ErrCodeSerialization, "unable to unmarshal EC2 metadata error respose", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
530
vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
generated
vendored
530
vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
generated
vendored
File diff suppressed because it is too large
Load Diff
2
vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go
generated
vendored
@ -2,7 +2,7 @@ package endpoints
|
|||||||
|
|
||||||
// Service identifiers
|
// Service identifiers
|
||||||
//
|
//
|
||||||
// Deprecated: Use client package's EndpointID value instead of these
|
// Deprecated: Use client package's EndpointsID value instead of these
|
||||||
// ServiceIDs. These IDs are not maintained, and are out of date.
|
// ServiceIDs. These IDs are not maintained, and are out of date.
|
||||||
const (
|
const (
|
||||||
A4bServiceID = "a4b" // A4b.
|
A4bServiceID = "a4b" // A4b.
|
||||||
|
17
vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go
generated
vendored
17
vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go
generated
vendored
@ -1,18 +1,17 @@
|
|||||||
// +build !appengine,!plan9
|
|
||||||
|
|
||||||
package request
|
package request
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net"
|
"strings"
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func isErrConnectionReset(err error) bool {
|
func isErrConnectionReset(err error) bool {
|
||||||
if opErr, ok := err.(*net.OpError); ok {
|
if strings.Contains(err.Error(), "read: connection reset") {
|
||||||
if sysErr, ok := opErr.Err.(*os.SyscallError); ok {
|
return false
|
||||||
return sysErr.Err == syscall.ECONNRESET
|
}
|
||||||
}
|
|
||||||
|
if strings.Contains(err.Error(), "connection reset") ||
|
||||||
|
strings.Contains(err.Error(), "broken pipe") {
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
11
vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error_other.go
generated
vendored
11
vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error_other.go
generated
vendored
@ -1,11 +0,0 @@
|
|||||||
// +build appengine plan9
|
|
||||||
|
|
||||||
package request
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func isErrConnectionReset(err error) bool {
|
|
||||||
return strings.Contains(err.Error(), "connection reset")
|
|
||||||
}
|
|
45
vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go
generated
vendored
45
vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go
generated
vendored
@ -59,6 +59,51 @@ func (h *Handlers) Clear() {
|
|||||||
h.Complete.Clear()
|
h.Complete.Clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsEmpty returns if there are no handlers in any of the handlerlists.
|
||||||
|
func (h *Handlers) IsEmpty() bool {
|
||||||
|
if h.Validate.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.Build.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.Send.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.Sign.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.Unmarshal.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.UnmarshalStream.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.UnmarshalMeta.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.UnmarshalError.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.ValidateResponse.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.Retry.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.AfterRetry.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.CompleteAttempt.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if h.Complete.Len() != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// A HandlerListRunItem represents an entry in the HandlerList which
|
// A HandlerListRunItem represents an entry in the HandlerList which
|
||||||
// is being run.
|
// is being run.
|
||||||
type HandlerListRunItem struct {
|
type HandlerListRunItem struct {
|
||||||
|
45
vendor/github.com/aws/aws-sdk-go/aws/request/request.go
generated
vendored
45
vendor/github.com/aws/aws-sdk-go/aws/request/request.go
generated
vendored
@ -231,6 +231,10 @@ func (r *Request) WillRetry() bool {
|
|||||||
return r.Error != nil && aws.BoolValue(r.Retryable) && r.RetryCount < r.MaxRetries()
|
return r.Error != nil && aws.BoolValue(r.Retryable) && r.RetryCount < r.MaxRetries()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func fmtAttemptCount(retryCount, maxRetries int) string {
|
||||||
|
return fmt.Sprintf("attempt %v/%v", retryCount, maxRetries)
|
||||||
|
}
|
||||||
|
|
||||||
// ParamsFilled returns if the request's parameters have been populated
|
// ParamsFilled returns if the request's parameters have been populated
|
||||||
// and the parameters are valid. False is returned if no parameters are
|
// and the parameters are valid. False is returned if no parameters are
|
||||||
// provided or invalid.
|
// provided or invalid.
|
||||||
@ -330,16 +334,17 @@ func getPresignedURL(r *Request, expire time.Duration) (string, http.Header, err
|
|||||||
return r.HTTPRequest.URL.String(), r.SignedHeaderVals, nil
|
return r.HTTPRequest.URL.String(), r.SignedHeaderVals, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func debugLogReqError(r *Request, stage string, retrying bool, err error) {
|
const (
|
||||||
|
willRetry = "will retry"
|
||||||
|
notRetrying = "not retrying"
|
||||||
|
retryCount = "retry %v/%v"
|
||||||
|
)
|
||||||
|
|
||||||
|
func debugLogReqError(r *Request, stage, retryStr string, err error) {
|
||||||
if !r.Config.LogLevel.Matches(aws.LogDebugWithRequestErrors) {
|
if !r.Config.LogLevel.Matches(aws.LogDebugWithRequestErrors) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
retryStr := "not retrying"
|
|
||||||
if retrying {
|
|
||||||
retryStr = "will retry"
|
|
||||||
}
|
|
||||||
|
|
||||||
r.Config.Logger.Log(fmt.Sprintf("DEBUG: %s %s/%s failed, %s, error %v",
|
r.Config.Logger.Log(fmt.Sprintf("DEBUG: %s %s/%s failed, %s, error %v",
|
||||||
stage, r.ClientInfo.ServiceName, r.Operation.Name, retryStr, err))
|
stage, r.ClientInfo.ServiceName, r.Operation.Name, retryStr, err))
|
||||||
}
|
}
|
||||||
@ -358,12 +363,12 @@ func (r *Request) Build() error {
|
|||||||
if !r.built {
|
if !r.built {
|
||||||
r.Handlers.Validate.Run(r)
|
r.Handlers.Validate.Run(r)
|
||||||
if r.Error != nil {
|
if r.Error != nil {
|
||||||
debugLogReqError(r, "Validate Request", false, r.Error)
|
debugLogReqError(r, "Validate Request", notRetrying, r.Error)
|
||||||
return r.Error
|
return r.Error
|
||||||
}
|
}
|
||||||
r.Handlers.Build.Run(r)
|
r.Handlers.Build.Run(r)
|
||||||
if r.Error != nil {
|
if r.Error != nil {
|
||||||
debugLogReqError(r, "Build Request", false, r.Error)
|
debugLogReqError(r, "Build Request", notRetrying, r.Error)
|
||||||
return r.Error
|
return r.Error
|
||||||
}
|
}
|
||||||
r.built = true
|
r.built = true
|
||||||
@ -379,7 +384,7 @@ func (r *Request) Build() error {
|
|||||||
func (r *Request) Sign() error {
|
func (r *Request) Sign() error {
|
||||||
r.Build()
|
r.Build()
|
||||||
if r.Error != nil {
|
if r.Error != nil {
|
||||||
debugLogReqError(r, "Build Request", false, r.Error)
|
debugLogReqError(r, "Build Request", notRetrying, r.Error)
|
||||||
return r.Error
|
return r.Error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -473,7 +478,7 @@ func (r *Request) Send() error {
|
|||||||
r.AttemptTime = time.Now()
|
r.AttemptTime = time.Now()
|
||||||
|
|
||||||
if err := r.Sign(); err != nil {
|
if err := r.Sign(); err != nil {
|
||||||
debugLogReqError(r, "Sign Request", false, err)
|
debugLogReqError(r, "Sign Request", notRetrying, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -520,7 +525,9 @@ func (r *Request) sendRequest() (sendErr error) {
|
|||||||
r.Retryable = nil
|
r.Retryable = nil
|
||||||
r.Handlers.Send.Run(r)
|
r.Handlers.Send.Run(r)
|
||||||
if r.Error != nil {
|
if r.Error != nil {
|
||||||
debugLogReqError(r, "Send Request", r.WillRetry(), r.Error)
|
debugLogReqError(r, "Send Request",
|
||||||
|
fmtAttemptCount(r.RetryCount, r.MaxRetries()),
|
||||||
|
r.Error)
|
||||||
return r.Error
|
return r.Error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -528,13 +535,17 @@ func (r *Request) sendRequest() (sendErr error) {
|
|||||||
r.Handlers.ValidateResponse.Run(r)
|
r.Handlers.ValidateResponse.Run(r)
|
||||||
if r.Error != nil {
|
if r.Error != nil {
|
||||||
r.Handlers.UnmarshalError.Run(r)
|
r.Handlers.UnmarshalError.Run(r)
|
||||||
debugLogReqError(r, "Validate Response", r.WillRetry(), r.Error)
|
debugLogReqError(r, "Validate Response",
|
||||||
|
fmtAttemptCount(r.RetryCount, r.MaxRetries()),
|
||||||
|
r.Error)
|
||||||
return r.Error
|
return r.Error
|
||||||
}
|
}
|
||||||
|
|
||||||
r.Handlers.Unmarshal.Run(r)
|
r.Handlers.Unmarshal.Run(r)
|
||||||
if r.Error != nil {
|
if r.Error != nil {
|
||||||
debugLogReqError(r, "Unmarshal Response", r.WillRetry(), r.Error)
|
debugLogReqError(r, "Unmarshal Response",
|
||||||
|
fmtAttemptCount(r.RetryCount, r.MaxRetries()),
|
||||||
|
r.Error)
|
||||||
return r.Error
|
return r.Error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -565,8 +576,8 @@ type temporary interface {
|
|||||||
Temporary() bool
|
Temporary() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func shouldRetryCancel(err error) bool {
|
func shouldRetryCancel(origErr error) bool {
|
||||||
switch err := err.(type) {
|
switch err := origErr.(type) {
|
||||||
case awserr.Error:
|
case awserr.Error:
|
||||||
if err.Code() == CanceledErrorCode {
|
if err.Code() == CanceledErrorCode {
|
||||||
return false
|
return false
|
||||||
@ -585,10 +596,10 @@ func shouldRetryCancel(err error) bool {
|
|||||||
case temporary:
|
case temporary:
|
||||||
// If the error is temporary, we want to allow continuation of the
|
// If the error is temporary, we want to allow continuation of the
|
||||||
// retry process
|
// retry process
|
||||||
return err.Temporary()
|
return err.Temporary() || isErrConnectionReset(origErr)
|
||||||
case nil:
|
case nil:
|
||||||
// `awserr.Error.OrigErr()` can be nil, meaning there was an error but
|
// `awserr.Error.OrigErr()` can be nil, meaning there was an error but
|
||||||
// because we don't know the cause, it is marked as retriable. See
|
// because we don't know the cause, it is marked as retryable. See
|
||||||
// TestRequest4xxUnretryable for an example.
|
// TestRequest4xxUnretryable for an example.
|
||||||
return true
|
return true
|
||||||
default:
|
default:
|
||||||
|
203
vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go
generated
vendored
Normal file
203
vendor/github.com/aws/aws-sdk-go/aws/session/credentials.go
generated
vendored
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
package session
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/credentials/processcreds"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/defaults"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/internal/shareddefaults"
|
||||||
|
)
|
||||||
|
|
||||||
|
// valid credential source values
|
||||||
|
const (
|
||||||
|
credSourceEc2Metadata = "Ec2InstanceMetadata"
|
||||||
|
credSourceEnvironment = "Environment"
|
||||||
|
credSourceECSContainer = "EcsContainer"
|
||||||
|
)
|
||||||
|
|
||||||
|
func resolveCredentials(cfg *aws.Config,
|
||||||
|
envCfg envConfig, sharedCfg sharedConfig,
|
||||||
|
handlers request.Handlers,
|
||||||
|
sessOpts Options,
|
||||||
|
) (*credentials.Credentials, error) {
|
||||||
|
// Credentials from Assume Role with specific credentials source.
|
||||||
|
if envCfg.EnableSharedConfig && len(sharedCfg.AssumeRole.CredentialSource) > 0 {
|
||||||
|
return resolveCredsFromSource(cfg, envCfg, sharedCfg, handlers, sessOpts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Credentials from environment variables
|
||||||
|
if len(envCfg.Creds.AccessKeyID) > 0 {
|
||||||
|
return credentials.NewStaticCredentialsFromCreds(envCfg.Creds), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback to the "default" credential resolution chain.
|
||||||
|
return resolveCredsFromProfile(cfg, envCfg, sharedCfg, handlers, sessOpts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func resolveCredsFromProfile(cfg *aws.Config,
|
||||||
|
envCfg envConfig, sharedCfg sharedConfig,
|
||||||
|
handlers request.Handlers,
|
||||||
|
sessOpts Options,
|
||||||
|
) (*credentials.Credentials, error) {
|
||||||
|
|
||||||
|
if envCfg.EnableSharedConfig && len(sharedCfg.AssumeRole.RoleARN) > 0 && sharedCfg.AssumeRoleSource != nil {
|
||||||
|
// Assume IAM role with credentials source from a different profile.
|
||||||
|
cred, err := resolveCredsFromProfile(cfg, envCfg, *sharedCfg.AssumeRoleSource, handlers, sessOpts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
cfgCp := *cfg
|
||||||
|
cfgCp.Credentials = cred
|
||||||
|
return credsFromAssumeRole(cfgCp, handlers, sharedCfg, sessOpts)
|
||||||
|
|
||||||
|
} else if len(sharedCfg.Creds.AccessKeyID) > 0 {
|
||||||
|
// Static Credentials from Shared Config/Credentials file.
|
||||||
|
return credentials.NewStaticCredentialsFromCreds(
|
||||||
|
sharedCfg.Creds,
|
||||||
|
), nil
|
||||||
|
|
||||||
|
} else if len(sharedCfg.CredentialProcess) > 0 {
|
||||||
|
// Credential Process credentials from Shared Config/Credentials file.
|
||||||
|
return processcreds.NewCredentials(
|
||||||
|
sharedCfg.CredentialProcess,
|
||||||
|
), nil
|
||||||
|
|
||||||
|
} else if envCfg.EnableSharedConfig && len(sharedCfg.AssumeRole.CredentialSource) > 0 {
|
||||||
|
// Assume IAM Role with specific credential source.
|
||||||
|
return resolveCredsFromSource(cfg, envCfg, sharedCfg, handlers, sessOpts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback to default credentials provider, include mock errors
|
||||||
|
// for the credential chain so user can identify why credentials
|
||||||
|
// failed to be retrieved.
|
||||||
|
return credentials.NewCredentials(&credentials.ChainProvider{
|
||||||
|
VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors),
|
||||||
|
Providers: []credentials.Provider{
|
||||||
|
&credProviderError{
|
||||||
|
Err: awserr.New("EnvAccessKeyNotFound",
|
||||||
|
"failed to find credentials in the environment.", nil),
|
||||||
|
},
|
||||||
|
&credProviderError{
|
||||||
|
Err: awserr.New("SharedCredsLoad",
|
||||||
|
fmt.Sprintf("failed to load profile, %s.", envCfg.Profile), nil),
|
||||||
|
},
|
||||||
|
defaults.RemoteCredProvider(*cfg, handlers),
|
||||||
|
},
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func resolveCredsFromSource(cfg *aws.Config,
|
||||||
|
envCfg envConfig, sharedCfg sharedConfig,
|
||||||
|
handlers request.Handlers,
|
||||||
|
sessOpts Options,
|
||||||
|
) (*credentials.Credentials, error) {
|
||||||
|
// if both credential_source and source_profile have been set, return an
|
||||||
|
// error as this is undefined behavior. Only one can be used at a time
|
||||||
|
// within a profile.
|
||||||
|
if len(sharedCfg.AssumeRole.SourceProfile) > 0 {
|
||||||
|
return nil, ErrSharedConfigSourceCollision
|
||||||
|
}
|
||||||
|
|
||||||
|
cfgCp := *cfg
|
||||||
|
switch sharedCfg.AssumeRole.CredentialSource {
|
||||||
|
case credSourceEc2Metadata:
|
||||||
|
p := defaults.RemoteCredProvider(cfgCp, handlers)
|
||||||
|
cfgCp.Credentials = credentials.NewCredentials(p)
|
||||||
|
|
||||||
|
case credSourceEnvironment:
|
||||||
|
cfgCp.Credentials = credentials.NewStaticCredentialsFromCreds(envCfg.Creds)
|
||||||
|
|
||||||
|
case credSourceECSContainer:
|
||||||
|
if len(os.Getenv(shareddefaults.ECSCredsProviderEnvVar)) == 0 {
|
||||||
|
return nil, ErrSharedConfigECSContainerEnvVarEmpty
|
||||||
|
}
|
||||||
|
|
||||||
|
p := defaults.RemoteCredProvider(cfgCp, handlers)
|
||||||
|
cfgCp.Credentials = credentials.NewCredentials(p)
|
||||||
|
|
||||||
|
default:
|
||||||
|
return nil, ErrSharedConfigInvalidCredSource
|
||||||
|
}
|
||||||
|
|
||||||
|
return credsFromAssumeRole(cfgCp, handlers, sharedCfg, sessOpts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func credsFromAssumeRole(cfg aws.Config,
|
||||||
|
handlers request.Handlers,
|
||||||
|
sharedCfg sharedConfig,
|
||||||
|
sessOpts Options,
|
||||||
|
) (*credentials.Credentials, error) {
|
||||||
|
if len(sharedCfg.AssumeRole.MFASerial) > 0 && sessOpts.AssumeRoleTokenProvider == nil {
|
||||||
|
// AssumeRole Token provider is required if doing Assume Role
|
||||||
|
// with MFA.
|
||||||
|
return nil, AssumeRoleTokenProviderNotSetError{}
|
||||||
|
}
|
||||||
|
|
||||||
|
return stscreds.NewCredentials(
|
||||||
|
&Session{
|
||||||
|
Config: &cfg,
|
||||||
|
Handlers: handlers.Copy(),
|
||||||
|
},
|
||||||
|
sharedCfg.AssumeRole.RoleARN,
|
||||||
|
func(opt *stscreds.AssumeRoleProvider) {
|
||||||
|
opt.RoleSessionName = sharedCfg.AssumeRole.RoleSessionName
|
||||||
|
opt.Duration = sessOpts.AssumeRoleDuration
|
||||||
|
|
||||||
|
// Assume role with external ID
|
||||||
|
if len(sharedCfg.AssumeRole.ExternalID) > 0 {
|
||||||
|
opt.ExternalID = aws.String(sharedCfg.AssumeRole.ExternalID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assume role with MFA
|
||||||
|
if len(sharedCfg.AssumeRole.MFASerial) > 0 {
|
||||||
|
opt.SerialNumber = aws.String(sharedCfg.AssumeRole.MFASerial)
|
||||||
|
opt.TokenProvider = sessOpts.AssumeRoleTokenProvider
|
||||||
|
}
|
||||||
|
},
|
||||||
|
), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// AssumeRoleTokenProviderNotSetError is an error returned when creating a session when the
|
||||||
|
// MFAToken option is not set when shared config is configured load assume a
|
||||||
|
// role with an MFA token.
|
||||||
|
type AssumeRoleTokenProviderNotSetError struct{}
|
||||||
|
|
||||||
|
// Code is the short id of the error.
|
||||||
|
func (e AssumeRoleTokenProviderNotSetError) Code() string {
|
||||||
|
return "AssumeRoleTokenProviderNotSetError"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Message is the description of the error
|
||||||
|
func (e AssumeRoleTokenProviderNotSetError) Message() string {
|
||||||
|
return fmt.Sprintf("assume role with MFA enabled, but AssumeRoleTokenProvider session option not set.")
|
||||||
|
}
|
||||||
|
|
||||||
|
// OrigErr is the underlying error that caused the failure.
|
||||||
|
func (e AssumeRoleTokenProviderNotSetError) OrigErr() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error satisfies the error interface.
|
||||||
|
func (e AssumeRoleTokenProviderNotSetError) Error() string {
|
||||||
|
return awserr.SprintError(e.Code(), e.Message(), "", nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
type credProviderError struct {
|
||||||
|
Err error
|
||||||
|
}
|
||||||
|
|
||||||
|
var emptyCreds = credentials.Value{}
|
||||||
|
|
||||||
|
func (c credProviderError) Retrieve() (credentials.Value, error) {
|
||||||
|
return credentials.Value{}, c.Err
|
||||||
|
}
|
||||||
|
func (c credProviderError) IsExpired() bool {
|
||||||
|
return true
|
||||||
|
}
|
186
vendor/github.com/aws/aws-sdk-go/aws/session/session.go
generated
vendored
186
vendor/github.com/aws/aws-sdk-go/aws/session/session.go
generated
vendored
@ -3,24 +3,21 @@ package session
|
|||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
"github.com/aws/aws-sdk-go/aws/client"
|
"github.com/aws/aws-sdk-go/aws/client"
|
||||||
"github.com/aws/aws-sdk-go/aws/corehandlers"
|
"github.com/aws/aws-sdk-go/aws/corehandlers"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials/processcreds"
|
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
|
|
||||||
"github.com/aws/aws-sdk-go/aws/csm"
|
"github.com/aws/aws-sdk-go/aws/csm"
|
||||||
"github.com/aws/aws-sdk-go/aws/defaults"
|
"github.com/aws/aws-sdk-go/aws/defaults"
|
||||||
"github.com/aws/aws-sdk-go/aws/endpoints"
|
"github.com/aws/aws-sdk-go/aws/endpoints"
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
"github.com/aws/aws-sdk-go/internal/shareddefaults"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -210,6 +207,12 @@ type Options struct {
|
|||||||
// the config enables assume role wit MFA via the mfa_serial field.
|
// the config enables assume role wit MFA via the mfa_serial field.
|
||||||
AssumeRoleTokenProvider func() (string, error)
|
AssumeRoleTokenProvider func() (string, error)
|
||||||
|
|
||||||
|
// When the SDK's shared config is configured to assume a role this option
|
||||||
|
// may be provided to set the expiry duration of the STS credentials.
|
||||||
|
// Defaults to 15 minutes if not set as documented in the
|
||||||
|
// stscreds.AssumeRoleProvider.
|
||||||
|
AssumeRoleDuration time.Duration
|
||||||
|
|
||||||
// Reader for a custom Credentials Authority (CA) bundle in PEM format that
|
// Reader for a custom Credentials Authority (CA) bundle in PEM format that
|
||||||
// the SDK will use instead of the default system's root CA bundle. Use this
|
// the SDK will use instead of the default system's root CA bundle. Use this
|
||||||
// only if you want to replace the CA bundle the SDK uses for TLS requests.
|
// only if you want to replace the CA bundle the SDK uses for TLS requests.
|
||||||
@ -224,6 +227,12 @@ type Options struct {
|
|||||||
// to also enable this feature. CustomCABundle session option field has priority
|
// to also enable this feature. CustomCABundle session option field has priority
|
||||||
// over the AWS_CA_BUNDLE environment variable, and will be used if both are set.
|
// over the AWS_CA_BUNDLE environment variable, and will be used if both are set.
|
||||||
CustomCABundle io.Reader
|
CustomCABundle io.Reader
|
||||||
|
|
||||||
|
// The handlers that the session and all API clients will be created with.
|
||||||
|
// This must be a complete set of handlers. Use the defaults.Handlers()
|
||||||
|
// function to initialize this value before changing the handlers to be
|
||||||
|
// used by the SDK.
|
||||||
|
Handlers request.Handlers
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewSessionWithOptions returns a new Session created from SDK defaults, config files,
|
// NewSessionWithOptions returns a new Session created from SDK defaults, config files,
|
||||||
@ -344,7 +353,11 @@ func enableCSM(handlers *request.Handlers, clientID string, port string, logger
|
|||||||
|
|
||||||
func newSession(opts Options, envCfg envConfig, cfgs ...*aws.Config) (*Session, error) {
|
func newSession(opts Options, envCfg envConfig, cfgs ...*aws.Config) (*Session, error) {
|
||||||
cfg := defaults.Config()
|
cfg := defaults.Config()
|
||||||
handlers := defaults.Handlers()
|
|
||||||
|
handlers := opts.Handlers
|
||||||
|
if handlers.IsEmpty() {
|
||||||
|
handlers = defaults.Handlers()
|
||||||
|
}
|
||||||
|
|
||||||
// Get a merged version of the user provided config to determine if
|
// Get a merged version of the user provided config to determine if
|
||||||
// credentials were.
|
// credentials were.
|
||||||
@ -443,7 +456,11 @@ func loadCertPool(r io.Reader) (*x509.CertPool, error) {
|
|||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedCfg sharedConfig, handlers request.Handlers, sessOpts Options) error {
|
func mergeConfigSrcs(cfg, userCfg *aws.Config,
|
||||||
|
envCfg envConfig, sharedCfg sharedConfig,
|
||||||
|
handlers request.Handlers,
|
||||||
|
sessOpts Options,
|
||||||
|
) error {
|
||||||
// Merge in user provided configuration
|
// Merge in user provided configuration
|
||||||
cfg.MergeIn(userCfg)
|
cfg.MergeIn(userCfg)
|
||||||
|
|
||||||
@ -464,164 +481,19 @@ func mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedCfg share
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure credentials if not already set
|
// Configure credentials if not already set by the user when creating the
|
||||||
|
// Session.
|
||||||
if cfg.Credentials == credentials.AnonymousCredentials && userCfg.Credentials == nil {
|
if cfg.Credentials == credentials.AnonymousCredentials && userCfg.Credentials == nil {
|
||||||
|
creds, err := resolveCredentials(cfg, envCfg, sharedCfg, handlers, sessOpts)
|
||||||
// inspect the profile to see if a credential source has been specified.
|
if err != nil {
|
||||||
if envCfg.EnableSharedConfig && len(sharedCfg.AssumeRole.CredentialSource) > 0 {
|
return err
|
||||||
|
|
||||||
// if both credential_source and source_profile have been set, return an error
|
|
||||||
// as this is undefined behavior.
|
|
||||||
if len(sharedCfg.AssumeRole.SourceProfile) > 0 {
|
|
||||||
return ErrSharedConfigSourceCollision
|
|
||||||
}
|
|
||||||
|
|
||||||
// valid credential source values
|
|
||||||
const (
|
|
||||||
credSourceEc2Metadata = "Ec2InstanceMetadata"
|
|
||||||
credSourceEnvironment = "Environment"
|
|
||||||
credSourceECSContainer = "EcsContainer"
|
|
||||||
)
|
|
||||||
|
|
||||||
switch sharedCfg.AssumeRole.CredentialSource {
|
|
||||||
case credSourceEc2Metadata:
|
|
||||||
cfgCp := *cfg
|
|
||||||
p := defaults.RemoteCredProvider(cfgCp, handlers)
|
|
||||||
cfgCp.Credentials = credentials.NewCredentials(p)
|
|
||||||
|
|
||||||
if len(sharedCfg.AssumeRole.MFASerial) > 0 && sessOpts.AssumeRoleTokenProvider == nil {
|
|
||||||
// AssumeRole Token provider is required if doing Assume Role
|
|
||||||
// with MFA.
|
|
||||||
return AssumeRoleTokenProviderNotSetError{}
|
|
||||||
}
|
|
||||||
|
|
||||||
cfg.Credentials = assumeRoleCredentials(cfgCp, handlers, sharedCfg, sessOpts)
|
|
||||||
case credSourceEnvironment:
|
|
||||||
cfg.Credentials = credentials.NewStaticCredentialsFromCreds(
|
|
||||||
envCfg.Creds,
|
|
||||||
)
|
|
||||||
case credSourceECSContainer:
|
|
||||||
if len(os.Getenv(shareddefaults.ECSCredsProviderEnvVar)) == 0 {
|
|
||||||
return ErrSharedConfigECSContainerEnvVarEmpty
|
|
||||||
}
|
|
||||||
|
|
||||||
cfgCp := *cfg
|
|
||||||
p := defaults.RemoteCredProvider(cfgCp, handlers)
|
|
||||||
creds := credentials.NewCredentials(p)
|
|
||||||
|
|
||||||
cfg.Credentials = creds
|
|
||||||
default:
|
|
||||||
return ErrSharedConfigInvalidCredSource
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(envCfg.Creds.AccessKeyID) > 0 {
|
|
||||||
cfg.Credentials = credentials.NewStaticCredentialsFromCreds(
|
|
||||||
envCfg.Creds,
|
|
||||||
)
|
|
||||||
} else if envCfg.EnableSharedConfig && len(sharedCfg.AssumeRole.RoleARN) > 0 && sharedCfg.AssumeRoleSource != nil {
|
|
||||||
cfgCp := *cfg
|
|
||||||
cfgCp.Credentials = credentials.NewStaticCredentialsFromCreds(
|
|
||||||
sharedCfg.AssumeRoleSource.Creds,
|
|
||||||
)
|
|
||||||
|
|
||||||
if len(sharedCfg.AssumeRole.MFASerial) > 0 && sessOpts.AssumeRoleTokenProvider == nil {
|
|
||||||
// AssumeRole Token provider is required if doing Assume Role
|
|
||||||
// with MFA.
|
|
||||||
return AssumeRoleTokenProviderNotSetError{}
|
|
||||||
}
|
|
||||||
|
|
||||||
cfg.Credentials = assumeRoleCredentials(cfgCp, handlers, sharedCfg, sessOpts)
|
|
||||||
} else if len(sharedCfg.Creds.AccessKeyID) > 0 {
|
|
||||||
cfg.Credentials = credentials.NewStaticCredentialsFromCreds(
|
|
||||||
sharedCfg.Creds,
|
|
||||||
)
|
|
||||||
} else if len(sharedCfg.CredentialProcess) > 0 {
|
|
||||||
cfg.Credentials = processcreds.NewCredentials(
|
|
||||||
sharedCfg.CredentialProcess,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
// Fallback to default credentials provider, include mock errors
|
|
||||||
// for the credential chain so user can identify why credentials
|
|
||||||
// failed to be retrieved.
|
|
||||||
cfg.Credentials = credentials.NewCredentials(&credentials.ChainProvider{
|
|
||||||
VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors),
|
|
||||||
Providers: []credentials.Provider{
|
|
||||||
&credProviderError{Err: awserr.New("EnvAccessKeyNotFound", "failed to find credentials in the environment.", nil)},
|
|
||||||
&credProviderError{Err: awserr.New("SharedCredsLoad", fmt.Sprintf("failed to load profile, %s.", envCfg.Profile), nil)},
|
|
||||||
defaults.RemoteCredProvider(*cfg, handlers),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
cfg.Credentials = creds
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func assumeRoleCredentials(cfg aws.Config, handlers request.Handlers, sharedCfg sharedConfig, sessOpts Options) *credentials.Credentials {
|
|
||||||
return stscreds.NewCredentials(
|
|
||||||
&Session{
|
|
||||||
Config: &cfg,
|
|
||||||
Handlers: handlers.Copy(),
|
|
||||||
},
|
|
||||||
sharedCfg.AssumeRole.RoleARN,
|
|
||||||
func(opt *stscreds.AssumeRoleProvider) {
|
|
||||||
opt.RoleSessionName = sharedCfg.AssumeRole.RoleSessionName
|
|
||||||
|
|
||||||
// Assume role with external ID
|
|
||||||
if len(sharedCfg.AssumeRole.ExternalID) > 0 {
|
|
||||||
opt.ExternalID = aws.String(sharedCfg.AssumeRole.ExternalID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assume role with MFA
|
|
||||||
if len(sharedCfg.AssumeRole.MFASerial) > 0 {
|
|
||||||
opt.SerialNumber = aws.String(sharedCfg.AssumeRole.MFASerial)
|
|
||||||
opt.TokenProvider = sessOpts.AssumeRoleTokenProvider
|
|
||||||
}
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// AssumeRoleTokenProviderNotSetError is an error returned when creating a session when the
|
|
||||||
// MFAToken option is not set when shared config is configured load assume a
|
|
||||||
// role with an MFA token.
|
|
||||||
type AssumeRoleTokenProviderNotSetError struct{}
|
|
||||||
|
|
||||||
// Code is the short id of the error.
|
|
||||||
func (e AssumeRoleTokenProviderNotSetError) Code() string {
|
|
||||||
return "AssumeRoleTokenProviderNotSetError"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Message is the description of the error
|
|
||||||
func (e AssumeRoleTokenProviderNotSetError) Message() string {
|
|
||||||
return fmt.Sprintf("assume role with MFA enabled, but AssumeRoleTokenProvider session option not set.")
|
|
||||||
}
|
|
||||||
|
|
||||||
// OrigErr is the underlying error that caused the failure.
|
|
||||||
func (e AssumeRoleTokenProviderNotSetError) OrigErr() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Error satisfies the error interface.
|
|
||||||
func (e AssumeRoleTokenProviderNotSetError) Error() string {
|
|
||||||
return awserr.SprintError(e.Code(), e.Message(), "", nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
type credProviderError struct {
|
|
||||||
Err error
|
|
||||||
}
|
|
||||||
|
|
||||||
var emptyCreds = credentials.Value{}
|
|
||||||
|
|
||||||
func (c credProviderError) Retrieve() (credentials.Value, error) {
|
|
||||||
return credentials.Value{}, c.Err
|
|
||||||
}
|
|
||||||
func (c credProviderError) IsExpired() bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func initHandlers(s *Session) {
|
func initHandlers(s *Session) {
|
||||||
// Add the Validate parameter handler if it is not disabled.
|
// Add the Validate parameter handler if it is not disabled.
|
||||||
s.Handlers.Validate.Remove(corehandlers.ValidateParametersHandler)
|
s.Handlers.Validate.Remove(corehandlers.ValidateParametersHandler)
|
||||||
|
14
vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go
generated
vendored
14
vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go
generated
vendored
@ -156,10 +156,20 @@ func (cfg *sharedConfig) setAssumeRoleSource(origProfile string, files []sharedC
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Chain if profile depends of other profiles
|
||||||
|
if len(assumeRoleSrc.AssumeRole.SourceProfile) > 0 {
|
||||||
|
err := assumeRoleSrc.setAssumeRoleSource(cfg.AssumeRole.SourceProfile, files)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(assumeRoleSrc.Creds.AccessKeyID) == 0 {
|
if cfg.AssumeRole.SourceProfile == origProfile || len(assumeRoleSrc.AssumeRole.SourceProfile) == 0 {
|
||||||
return SharedConfigAssumeRoleError{RoleARN: cfg.AssumeRole.RoleARN}
|
if len(assumeRoleSrc.AssumeRole.CredentialSource) == 0 && len(assumeRoleSrc.Creds.AccessKeyID) == 0 {
|
||||||
|
return SharedConfigAssumeRoleError{RoleARN: cfg.AssumeRole.RoleARN}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg.AssumeRoleSource = &assumeRoleSrc
|
cfg.AssumeRoleSource = &assumeRoleSrc
|
||||||
|
20
vendor/github.com/aws/aws-sdk-go/aws/types.go
generated
vendored
20
vendor/github.com/aws/aws-sdk-go/aws/types.go
generated
vendored
@ -7,13 +7,18 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/internal/sdkio"
|
"github.com/aws/aws-sdk-go/internal/sdkio"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ReadSeekCloser wraps a io.Reader returning a ReaderSeekerCloser. Should
|
// ReadSeekCloser wraps a io.Reader returning a ReaderSeekerCloser. Allows the
|
||||||
// only be used with an io.Reader that is also an io.Seeker. Doing so may
|
// SDK to accept an io.Reader that is not also an io.Seeker for unsigned
|
||||||
// cause request signature errors, or request body's not sent for GET, HEAD
|
// streaming payload API operations.
|
||||||
// and DELETE HTTP methods.
|
|
||||||
//
|
//
|
||||||
// Deprecated: Should only be used with io.ReadSeeker. If using for
|
// A ReadSeekCloser wrapping an nonseekable io.Reader used in an API
|
||||||
// S3 PutObject to stream content use s3manager.Uploader instead.
|
// operation's input will prevent that operation being retried in the case of
|
||||||
|
// network errors, and cause operation requests to fail if the operation
|
||||||
|
// requires payload signing.
|
||||||
|
//
|
||||||
|
// Note: If using With S3 PutObject to stream an object upload The SDK's S3
|
||||||
|
// Upload manager (s3manager.Uploader) provides support for streaming with the
|
||||||
|
// ability to retry network errors.
|
||||||
func ReadSeekCloser(r io.Reader) ReaderSeekerCloser {
|
func ReadSeekCloser(r io.Reader) ReaderSeekerCloser {
|
||||||
return ReaderSeekerCloser{r}
|
return ReaderSeekerCloser{r}
|
||||||
}
|
}
|
||||||
@ -43,7 +48,8 @@ func IsReaderSeekable(r io.Reader) bool {
|
|||||||
// Read reads from the reader up to size of p. The number of bytes read, and
|
// Read reads from the reader up to size of p. The number of bytes read, and
|
||||||
// error if it occurred will be returned.
|
// error if it occurred will be returned.
|
||||||
//
|
//
|
||||||
// If the reader is not an io.Reader zero bytes read, and nil error will be returned.
|
// If the reader is not an io.Reader zero bytes read, and nil error will be
|
||||||
|
// returned.
|
||||||
//
|
//
|
||||||
// Performs the same functionality as io.Reader Read
|
// Performs the same functionality as io.Reader Read
|
||||||
func (r ReaderSeekerCloser) Read(p []byte) (int, error) {
|
func (r ReaderSeekerCloser) Read(p []byte) (int, error) {
|
||||||
|
2
vendor/github.com/aws/aws-sdk-go/aws/version.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/aws/version.go
generated
vendored
@ -5,4 +5,4 @@ package aws
|
|||||||
const SDKName = "aws-sdk-go"
|
const SDKName = "aws-sdk-go"
|
||||||
|
|
||||||
// SDKVersion is the version of this SDK
|
// SDKVersion is the version of this SDK
|
||||||
const SDKVersion = "1.19.11"
|
const SDKVersion = "1.20.10"
|
||||||
|
6
vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go
generated
vendored
6
vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go
generated
vendored
@ -304,7 +304,9 @@ loop:
|
|||||||
stmt := newCommentStatement(tok)
|
stmt := newCommentStatement(tok)
|
||||||
stack.Push(stmt)
|
stack.Push(stmt)
|
||||||
default:
|
default:
|
||||||
return nil, NewParseError(fmt.Sprintf("invalid state with ASTKind %v and TokenType %v", k, tok))
|
return nil, NewParseError(
|
||||||
|
fmt.Sprintf("invalid state with ASTKind %v and TokenType %v",
|
||||||
|
k, tok.Type()))
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(tokens) > 0 {
|
if len(tokens) > 0 {
|
||||||
@ -314,7 +316,7 @@ loop:
|
|||||||
|
|
||||||
// this occurs when a statement has not been completed
|
// this occurs when a statement has not been completed
|
||||||
if stack.top > 1 {
|
if stack.top > 1 {
|
||||||
return nil, NewParseError(fmt.Sprintf("incomplete expression: %v", stack.container))
|
return nil, NewParseError(fmt.Sprintf("incomplete ini expression"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns a sublist which excludes the start symbol
|
// returns a sublist which excludes the start symbol
|
||||||
|
296
vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go
generated
vendored
Normal file
296
vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go
generated
vendored
Normal file
@ -0,0 +1,296 @@
|
|||||||
|
// Package jsonutil provides JSON serialization of AWS requests and responses.
|
||||||
|
package jsonutil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
"reflect"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol"
|
||||||
|
)
|
||||||
|
|
||||||
|
var timeType = reflect.ValueOf(time.Time{}).Type()
|
||||||
|
var byteSliceType = reflect.ValueOf([]byte{}).Type()
|
||||||
|
|
||||||
|
// BuildJSON builds a JSON string for a given object v.
|
||||||
|
func BuildJSON(v interface{}) ([]byte, error) {
|
||||||
|
var buf bytes.Buffer
|
||||||
|
|
||||||
|
err := buildAny(reflect.ValueOf(v), &buf, "")
|
||||||
|
return buf.Bytes(), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildAny(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {
|
||||||
|
origVal := value
|
||||||
|
value = reflect.Indirect(value)
|
||||||
|
if !value.IsValid() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
vtype := value.Type()
|
||||||
|
|
||||||
|
t := tag.Get("type")
|
||||||
|
if t == "" {
|
||||||
|
switch vtype.Kind() {
|
||||||
|
case reflect.Struct:
|
||||||
|
// also it can't be a time object
|
||||||
|
if value.Type() != timeType {
|
||||||
|
t = "structure"
|
||||||
|
}
|
||||||
|
case reflect.Slice:
|
||||||
|
// also it can't be a byte slice
|
||||||
|
if _, ok := value.Interface().([]byte); !ok {
|
||||||
|
t = "list"
|
||||||
|
}
|
||||||
|
case reflect.Map:
|
||||||
|
// cannot be a JSONValue map
|
||||||
|
if _, ok := value.Interface().(aws.JSONValue); !ok {
|
||||||
|
t = "map"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch t {
|
||||||
|
case "structure":
|
||||||
|
if field, ok := vtype.FieldByName("_"); ok {
|
||||||
|
tag = field.Tag
|
||||||
|
}
|
||||||
|
return buildStruct(value, buf, tag)
|
||||||
|
case "list":
|
||||||
|
return buildList(value, buf, tag)
|
||||||
|
case "map":
|
||||||
|
return buildMap(value, buf, tag)
|
||||||
|
default:
|
||||||
|
return buildScalar(origVal, buf, tag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {
|
||||||
|
if !value.IsValid() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// unwrap payloads
|
||||||
|
if payload := tag.Get("payload"); payload != "" {
|
||||||
|
field, _ := value.Type().FieldByName(payload)
|
||||||
|
tag = field.Tag
|
||||||
|
value = elemOf(value.FieldByName(payload))
|
||||||
|
|
||||||
|
if !value.IsValid() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.WriteByte('{')
|
||||||
|
|
||||||
|
t := value.Type()
|
||||||
|
first := true
|
||||||
|
for i := 0; i < t.NumField(); i++ {
|
||||||
|
member := value.Field(i)
|
||||||
|
|
||||||
|
// This allocates the most memory.
|
||||||
|
// Additionally, we cannot skip nil fields due to
|
||||||
|
// idempotency auto filling.
|
||||||
|
field := t.Field(i)
|
||||||
|
|
||||||
|
if field.PkgPath != "" {
|
||||||
|
continue // ignore unexported fields
|
||||||
|
}
|
||||||
|
if field.Tag.Get("json") == "-" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if field.Tag.Get("location") != "" {
|
||||||
|
continue // ignore non-body elements
|
||||||
|
}
|
||||||
|
if field.Tag.Get("ignore") != "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if protocol.CanSetIdempotencyToken(member, field) {
|
||||||
|
token := protocol.GetIdempotencyToken()
|
||||||
|
member = reflect.ValueOf(&token)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (member.Kind() == reflect.Ptr || member.Kind() == reflect.Slice || member.Kind() == reflect.Map) && member.IsNil() {
|
||||||
|
continue // ignore unset fields
|
||||||
|
}
|
||||||
|
|
||||||
|
if first {
|
||||||
|
first = false
|
||||||
|
} else {
|
||||||
|
buf.WriteByte(',')
|
||||||
|
}
|
||||||
|
|
||||||
|
// figure out what this field is called
|
||||||
|
name := field.Name
|
||||||
|
if locName := field.Tag.Get("locationName"); locName != "" {
|
||||||
|
name = locName
|
||||||
|
}
|
||||||
|
|
||||||
|
writeString(name, buf)
|
||||||
|
buf.WriteString(`:`)
|
||||||
|
|
||||||
|
err := buildAny(member, buf, field.Tag)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.WriteString("}")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildList(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {
|
||||||
|
buf.WriteString("[")
|
||||||
|
|
||||||
|
for i := 0; i < value.Len(); i++ {
|
||||||
|
buildAny(value.Index(i), buf, "")
|
||||||
|
|
||||||
|
if i < value.Len()-1 {
|
||||||
|
buf.WriteString(",")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.WriteString("]")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type sortedValues []reflect.Value
|
||||||
|
|
||||||
|
func (sv sortedValues) Len() int { return len(sv) }
|
||||||
|
func (sv sortedValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[i] }
|
||||||
|
func (sv sortedValues) Less(i, j int) bool { return sv[i].String() < sv[j].String() }
|
||||||
|
|
||||||
|
func buildMap(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {
|
||||||
|
buf.WriteString("{")
|
||||||
|
|
||||||
|
sv := sortedValues(value.MapKeys())
|
||||||
|
sort.Sort(sv)
|
||||||
|
|
||||||
|
for i, k := range sv {
|
||||||
|
if i > 0 {
|
||||||
|
buf.WriteByte(',')
|
||||||
|
}
|
||||||
|
|
||||||
|
writeString(k.String(), buf)
|
||||||
|
buf.WriteString(`:`)
|
||||||
|
|
||||||
|
buildAny(value.MapIndex(k), buf, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.WriteString("}")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildScalar(v reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {
|
||||||
|
// prevents allocation on the heap.
|
||||||
|
scratch := [64]byte{}
|
||||||
|
switch value := reflect.Indirect(v); value.Kind() {
|
||||||
|
case reflect.String:
|
||||||
|
writeString(value.String(), buf)
|
||||||
|
case reflect.Bool:
|
||||||
|
if value.Bool() {
|
||||||
|
buf.WriteString("true")
|
||||||
|
} else {
|
||||||
|
buf.WriteString("false")
|
||||||
|
}
|
||||||
|
case reflect.Int64:
|
||||||
|
buf.Write(strconv.AppendInt(scratch[:0], value.Int(), 10))
|
||||||
|
case reflect.Float64:
|
||||||
|
f := value.Float()
|
||||||
|
if math.IsInf(f, 0) || math.IsNaN(f) {
|
||||||
|
return &json.UnsupportedValueError{Value: v, Str: strconv.FormatFloat(f, 'f', -1, 64)}
|
||||||
|
}
|
||||||
|
buf.Write(strconv.AppendFloat(scratch[:0], f, 'f', -1, 64))
|
||||||
|
default:
|
||||||
|
switch converted := value.Interface().(type) {
|
||||||
|
case time.Time:
|
||||||
|
format := tag.Get("timestampFormat")
|
||||||
|
if len(format) == 0 {
|
||||||
|
format = protocol.UnixTimeFormatName
|
||||||
|
}
|
||||||
|
|
||||||
|
ts := protocol.FormatTime(format, converted)
|
||||||
|
if format != protocol.UnixTimeFormatName {
|
||||||
|
ts = `"` + ts + `"`
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.WriteString(ts)
|
||||||
|
case []byte:
|
||||||
|
if !value.IsNil() {
|
||||||
|
buf.WriteByte('"')
|
||||||
|
if len(converted) < 1024 {
|
||||||
|
// for small buffers, using Encode directly is much faster.
|
||||||
|
dst := make([]byte, base64.StdEncoding.EncodedLen(len(converted)))
|
||||||
|
base64.StdEncoding.Encode(dst, converted)
|
||||||
|
buf.Write(dst)
|
||||||
|
} else {
|
||||||
|
// for large buffers, avoid unnecessary extra temporary
|
||||||
|
// buffer space.
|
||||||
|
enc := base64.NewEncoder(base64.StdEncoding, buf)
|
||||||
|
enc.Write(converted)
|
||||||
|
enc.Close()
|
||||||
|
}
|
||||||
|
buf.WriteByte('"')
|
||||||
|
}
|
||||||
|
case aws.JSONValue:
|
||||||
|
str, err := protocol.EncodeJSONValue(converted, protocol.QuotedEscape)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to encode JSONValue, %v", err)
|
||||||
|
}
|
||||||
|
buf.WriteString(str)
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported JSON value %v (%s)", value.Interface(), value.Type())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var hex = "0123456789abcdef"
|
||||||
|
|
||||||
|
func writeString(s string, buf *bytes.Buffer) {
|
||||||
|
buf.WriteByte('"')
|
||||||
|
for i := 0; i < len(s); i++ {
|
||||||
|
if s[i] == '"' {
|
||||||
|
buf.WriteString(`\"`)
|
||||||
|
} else if s[i] == '\\' {
|
||||||
|
buf.WriteString(`\\`)
|
||||||
|
} else if s[i] == '\b' {
|
||||||
|
buf.WriteString(`\b`)
|
||||||
|
} else if s[i] == '\f' {
|
||||||
|
buf.WriteString(`\f`)
|
||||||
|
} else if s[i] == '\r' {
|
||||||
|
buf.WriteString(`\r`)
|
||||||
|
} else if s[i] == '\t' {
|
||||||
|
buf.WriteString(`\t`)
|
||||||
|
} else if s[i] == '\n' {
|
||||||
|
buf.WriteString(`\n`)
|
||||||
|
} else if s[i] < 32 {
|
||||||
|
buf.WriteString("\\u00")
|
||||||
|
buf.WriteByte(hex[s[i]>>4])
|
||||||
|
buf.WriteByte(hex[s[i]&0xF])
|
||||||
|
} else {
|
||||||
|
buf.WriteByte(s[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buf.WriteByte('"')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the reflection element of a value, if it is a pointer.
|
||||||
|
func elemOf(value reflect.Value) reflect.Value {
|
||||||
|
for value.Kind() == reflect.Ptr {
|
||||||
|
value = value.Elem()
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
250
vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go
generated
vendored
Normal file
250
vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go
generated
vendored
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
package jsonutil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"reflect"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UnmarshalJSONError unmarshal's the reader's JSON document into the passed in
|
||||||
|
// type. The value to unmarshal the json document into must be a pointer to the
|
||||||
|
// type.
|
||||||
|
func UnmarshalJSONError(v interface{}, stream io.Reader) error {
|
||||||
|
var errBuf bytes.Buffer
|
||||||
|
body := io.TeeReader(stream, &errBuf)
|
||||||
|
|
||||||
|
err := json.NewDecoder(body).Decode(v)
|
||||||
|
if err != nil {
|
||||||
|
msg := "failed decoding error message"
|
||||||
|
if err == io.EOF {
|
||||||
|
msg = "error message missing"
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
|
return awserr.NewUnmarshalError(err, msg, errBuf.Bytes())
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON reads a stream and unmarshals the results in object v.
|
||||||
|
func UnmarshalJSON(v interface{}, stream io.Reader) error {
|
||||||
|
var out interface{}
|
||||||
|
|
||||||
|
err := json.NewDecoder(stream).Decode(&out)
|
||||||
|
if err == io.EOF {
|
||||||
|
return nil
|
||||||
|
} else if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return unmarshalAny(reflect.ValueOf(v), out, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshalAny(value reflect.Value, data interface{}, tag reflect.StructTag) error {
|
||||||
|
vtype := value.Type()
|
||||||
|
if vtype.Kind() == reflect.Ptr {
|
||||||
|
vtype = vtype.Elem() // check kind of actual element type
|
||||||
|
}
|
||||||
|
|
||||||
|
t := tag.Get("type")
|
||||||
|
if t == "" {
|
||||||
|
switch vtype.Kind() {
|
||||||
|
case reflect.Struct:
|
||||||
|
// also it can't be a time object
|
||||||
|
if _, ok := value.Interface().(*time.Time); !ok {
|
||||||
|
t = "structure"
|
||||||
|
}
|
||||||
|
case reflect.Slice:
|
||||||
|
// also it can't be a byte slice
|
||||||
|
if _, ok := value.Interface().([]byte); !ok {
|
||||||
|
t = "list"
|
||||||
|
}
|
||||||
|
case reflect.Map:
|
||||||
|
// cannot be a JSONValue map
|
||||||
|
if _, ok := value.Interface().(aws.JSONValue); !ok {
|
||||||
|
t = "map"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch t {
|
||||||
|
case "structure":
|
||||||
|
if field, ok := vtype.FieldByName("_"); ok {
|
||||||
|
tag = field.Tag
|
||||||
|
}
|
||||||
|
return unmarshalStruct(value, data, tag)
|
||||||
|
case "list":
|
||||||
|
return unmarshalList(value, data, tag)
|
||||||
|
case "map":
|
||||||
|
return unmarshalMap(value, data, tag)
|
||||||
|
default:
|
||||||
|
return unmarshalScalar(value, data, tag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshalStruct(value reflect.Value, data interface{}, tag reflect.StructTag) error {
|
||||||
|
if data == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
mapData, ok := data.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("JSON value is not a structure (%#v)", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
t := value.Type()
|
||||||
|
if value.Kind() == reflect.Ptr {
|
||||||
|
if value.IsNil() { // create the structure if it's nil
|
||||||
|
s := reflect.New(value.Type().Elem())
|
||||||
|
value.Set(s)
|
||||||
|
value = s
|
||||||
|
}
|
||||||
|
|
||||||
|
value = value.Elem()
|
||||||
|
t = t.Elem()
|
||||||
|
}
|
||||||
|
|
||||||
|
// unwrap any payloads
|
||||||
|
if payload := tag.Get("payload"); payload != "" {
|
||||||
|
field, _ := t.FieldByName(payload)
|
||||||
|
return unmarshalAny(value.FieldByName(payload), data, field.Tag)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < t.NumField(); i++ {
|
||||||
|
field := t.Field(i)
|
||||||
|
if field.PkgPath != "" {
|
||||||
|
continue // ignore unexported fields
|
||||||
|
}
|
||||||
|
|
||||||
|
// figure out what this field is called
|
||||||
|
name := field.Name
|
||||||
|
if locName := field.Tag.Get("locationName"); locName != "" {
|
||||||
|
name = locName
|
||||||
|
}
|
||||||
|
|
||||||
|
member := value.FieldByIndex(field.Index)
|
||||||
|
err := unmarshalAny(member, mapData[name], field.Tag)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshalList(value reflect.Value, data interface{}, tag reflect.StructTag) error {
|
||||||
|
if data == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
listData, ok := data.([]interface{})
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("JSON value is not a list (%#v)", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if value.IsNil() {
|
||||||
|
l := len(listData)
|
||||||
|
value.Set(reflect.MakeSlice(value.Type(), l, l))
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, c := range listData {
|
||||||
|
err := unmarshalAny(value.Index(i), c, "")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshalMap(value reflect.Value, data interface{}, tag reflect.StructTag) error {
|
||||||
|
if data == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
mapData, ok := data.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("JSON value is not a map (%#v)", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if value.IsNil() {
|
||||||
|
value.Set(reflect.MakeMap(value.Type()))
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range mapData {
|
||||||
|
kvalue := reflect.ValueOf(k)
|
||||||
|
vvalue := reflect.New(value.Type().Elem()).Elem()
|
||||||
|
|
||||||
|
unmarshalAny(vvalue, v, "")
|
||||||
|
value.SetMapIndex(kvalue, vvalue)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshalScalar(value reflect.Value, data interface{}, tag reflect.StructTag) error {
|
||||||
|
|
||||||
|
switch d := data.(type) {
|
||||||
|
case nil:
|
||||||
|
return nil // nothing to do here
|
||||||
|
case string:
|
||||||
|
switch value.Interface().(type) {
|
||||||
|
case *string:
|
||||||
|
value.Set(reflect.ValueOf(&d))
|
||||||
|
case []byte:
|
||||||
|
b, err := base64.StdEncoding.DecodeString(d)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
value.Set(reflect.ValueOf(b))
|
||||||
|
case *time.Time:
|
||||||
|
format := tag.Get("timestampFormat")
|
||||||
|
if len(format) == 0 {
|
||||||
|
format = protocol.ISO8601TimeFormatName
|
||||||
|
}
|
||||||
|
|
||||||
|
t, err := protocol.ParseTime(format, d)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
value.Set(reflect.ValueOf(&t))
|
||||||
|
case aws.JSONValue:
|
||||||
|
// No need to use escaping as the value is a non-quoted string.
|
||||||
|
v, err := protocol.DecodeJSONValue(d, protocol.NoEscape)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
value.Set(reflect.ValueOf(v))
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type())
|
||||||
|
}
|
||||||
|
case float64:
|
||||||
|
switch value.Interface().(type) {
|
||||||
|
case *int64:
|
||||||
|
di := int64(d)
|
||||||
|
value.Set(reflect.ValueOf(&di))
|
||||||
|
case *float64:
|
||||||
|
value.Set(reflect.ValueOf(&d))
|
||||||
|
case *time.Time:
|
||||||
|
// Time unmarshaled from a float64 can only be epoch seconds
|
||||||
|
t := time.Unix(int64(d), 0).UTC()
|
||||||
|
value.Set(reflect.ValueOf(&t))
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type())
|
||||||
|
}
|
||||||
|
case bool:
|
||||||
|
switch value.Interface().(type) {
|
||||||
|
case *bool:
|
||||||
|
value.Set(reflect.ValueOf(&d))
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type())
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported JSON value (%v)", data)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
2
vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go
generated
vendored
@ -21,7 +21,7 @@ func Build(r *request.Request) {
|
|||||||
"Version": {r.ClientInfo.APIVersion},
|
"Version": {r.ClientInfo.APIVersion},
|
||||||
}
|
}
|
||||||
if err := queryutil.Parse(body, r.Params, false); err != nil {
|
if err := queryutil.Parse(body, r.Params, false); err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "failed encoding Query request", err)
|
r.Error = awserr.New(request.ErrCodeSerialization, "failed encoding Query request", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go
generated
vendored
@ -24,7 +24,7 @@ func Unmarshal(r *request.Request) {
|
|||||||
err := xmlutil.UnmarshalXML(r.Data, decoder, r.Operation.Name+"Result")
|
err := xmlutil.UnmarshalXML(r.Data, decoder, r.Operation.Name+"Result")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.NewRequestFailure(
|
r.Error = awserr.NewRequestFailure(
|
||||||
awserr.New("SerializationError", "failed decoding Query response", err),
|
awserr.New(request.ErrCodeSerialization, "failed decoding Query response", err),
|
||||||
r.HTTPResponse.StatusCode,
|
r.HTTPResponse.StatusCode,
|
||||||
r.RequestID,
|
r.RequestID,
|
||||||
)
|
)
|
||||||
|
83
vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go
generated
vendored
83
vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go
generated
vendored
@ -2,73 +2,68 @@ package query
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"io/ioutil"
|
"fmt"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
type xmlErrorResponse struct {
|
|
||||||
XMLName xml.Name `xml:"ErrorResponse"`
|
|
||||||
Code string `xml:"Error>Code"`
|
|
||||||
Message string `xml:"Error>Message"`
|
|
||||||
RequestID string `xml:"RequestId"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type xmlServiceUnavailableResponse struct {
|
|
||||||
XMLName xml.Name `xml:"ServiceUnavailableException"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnmarshalErrorHandler is a name request handler to unmarshal request errors
|
// UnmarshalErrorHandler is a name request handler to unmarshal request errors
|
||||||
var UnmarshalErrorHandler = request.NamedHandler{Name: "awssdk.query.UnmarshalError", Fn: UnmarshalError}
|
var UnmarshalErrorHandler = request.NamedHandler{Name: "awssdk.query.UnmarshalError", Fn: UnmarshalError}
|
||||||
|
|
||||||
|
type xmlErrorResponse struct {
|
||||||
|
Code string `xml:"Error>Code"`
|
||||||
|
Message string `xml:"Error>Message"`
|
||||||
|
RequestID string `xml:"RequestId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type xmlResponseError struct {
|
||||||
|
xmlErrorResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *xmlResponseError) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
||||||
|
const svcUnavailableTagName = "ServiceUnavailableException"
|
||||||
|
const errorResponseTagName = "ErrorResponse"
|
||||||
|
|
||||||
|
switch start.Name.Local {
|
||||||
|
case svcUnavailableTagName:
|
||||||
|
e.Code = svcUnavailableTagName
|
||||||
|
e.Message = "service is unavailable"
|
||||||
|
return d.Skip()
|
||||||
|
|
||||||
|
case errorResponseTagName:
|
||||||
|
return d.DecodeElement(&e.xmlErrorResponse, &start)
|
||||||
|
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unknown error response tag, %v", start)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// UnmarshalError unmarshals an error response for an AWS Query service.
|
// UnmarshalError unmarshals an error response for an AWS Query service.
|
||||||
func UnmarshalError(r *request.Request) {
|
func UnmarshalError(r *request.Request) {
|
||||||
defer r.HTTPResponse.Body.Close()
|
defer r.HTTPResponse.Body.Close()
|
||||||
|
|
||||||
bodyBytes, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
var respErr xmlResponseError
|
||||||
|
err := xmlutil.UnmarshalXMLError(&respErr, r.HTTPResponse.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.NewRequestFailure(
|
r.Error = awserr.NewRequestFailure(
|
||||||
awserr.New("SerializationError", "failed to read from query HTTP response body", err),
|
awserr.New(request.ErrCodeSerialization,
|
||||||
|
"failed to unmarshal error message", err),
|
||||||
r.HTTPResponse.StatusCode,
|
r.HTTPResponse.StatusCode,
|
||||||
r.RequestID,
|
r.RequestID,
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// First check for specific error
|
reqID := respErr.RequestID
|
||||||
resp := xmlErrorResponse{}
|
if len(reqID) == 0 {
|
||||||
decodeErr := xml.Unmarshal(bodyBytes, &resp)
|
reqID = r.RequestID
|
||||||
if decodeErr == nil {
|
|
||||||
reqID := resp.RequestID
|
|
||||||
if reqID == "" {
|
|
||||||
reqID = r.RequestID
|
|
||||||
}
|
|
||||||
r.Error = awserr.NewRequestFailure(
|
|
||||||
awserr.New(resp.Code, resp.Message, nil),
|
|
||||||
r.HTTPResponse.StatusCode,
|
|
||||||
reqID,
|
|
||||||
)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for unhandled error
|
|
||||||
servUnavailResp := xmlServiceUnavailableResponse{}
|
|
||||||
unavailErr := xml.Unmarshal(bodyBytes, &servUnavailResp)
|
|
||||||
if unavailErr == nil {
|
|
||||||
r.Error = awserr.NewRequestFailure(
|
|
||||||
awserr.New("ServiceUnavailableException", "service is unavailable", nil),
|
|
||||||
r.HTTPResponse.StatusCode,
|
|
||||||
r.RequestID,
|
|
||||||
)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Failed to retrieve any error message from the response body
|
|
||||||
r.Error = awserr.NewRequestFailure(
|
r.Error = awserr.NewRequestFailure(
|
||||||
awserr.New("SerializationError",
|
awserr.New(respErr.Code, respErr.Message, nil),
|
||||||
"failed to decode query XML error response", decodeErr),
|
|
||||||
r.HTTPResponse.StatusCode,
|
r.HTTPResponse.StatusCode,
|
||||||
r.RequestID,
|
reqID,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
20
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
generated
vendored
20
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
generated
vendored
@ -25,6 +25,8 @@ var noEscape [256]bool
|
|||||||
|
|
||||||
var errValueNotSet = fmt.Errorf("value not set")
|
var errValueNotSet = fmt.Errorf("value not set")
|
||||||
|
|
||||||
|
var byteSliceType = reflect.TypeOf([]byte{})
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
for i := 0; i < len(noEscape); i++ {
|
for i := 0; i < len(noEscape); i++ {
|
||||||
// AWS expects every character except these to be escaped
|
// AWS expects every character except these to be escaped
|
||||||
@ -94,6 +96,14 @@ func buildLocationElements(r *request.Request, v reflect.Value, buildGETQuery bo
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Support the ability to customize values to be marshaled as a
|
||||||
|
// blob even though they were modeled as a string. Required for S3
|
||||||
|
// API operations like SSECustomerKey is modeled as stirng but
|
||||||
|
// required to be base64 encoded in request.
|
||||||
|
if field.Tag.Get("marshal-as") == "blob" {
|
||||||
|
m = m.Convert(byteSliceType)
|
||||||
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
switch field.Tag.Get("location") {
|
switch field.Tag.Get("location") {
|
||||||
case "headers": // header maps
|
case "headers": // header maps
|
||||||
@ -137,7 +147,7 @@ func buildBody(r *request.Request, v reflect.Value) {
|
|||||||
case string:
|
case string:
|
||||||
r.SetStringBody(reader)
|
r.SetStringBody(reader)
|
||||||
default:
|
default:
|
||||||
r.Error = awserr.New("SerializationError",
|
r.Error = awserr.New(request.ErrCodeSerialization,
|
||||||
"failed to encode REST request",
|
"failed to encode REST request",
|
||||||
fmt.Errorf("unknown payload type %s", payload.Type()))
|
fmt.Errorf("unknown payload type %s", payload.Type()))
|
||||||
}
|
}
|
||||||
@ -152,7 +162,7 @@ func buildHeader(header *http.Header, v reflect.Value, name string, tag reflect.
|
|||||||
if err == errValueNotSet {
|
if err == errValueNotSet {
|
||||||
return nil
|
return nil
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return awserr.New("SerializationError", "failed to encode REST request", err)
|
return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
name = strings.TrimSpace(name)
|
name = strings.TrimSpace(name)
|
||||||
@ -170,7 +180,7 @@ func buildHeaderMap(header *http.Header, v reflect.Value, tag reflect.StructTag)
|
|||||||
if err == errValueNotSet {
|
if err == errValueNotSet {
|
||||||
continue
|
continue
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return awserr.New("SerializationError", "failed to encode REST request", err)
|
return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err)
|
||||||
|
|
||||||
}
|
}
|
||||||
keyStr := strings.TrimSpace(key.String())
|
keyStr := strings.TrimSpace(key.String())
|
||||||
@ -186,7 +196,7 @@ func buildURI(u *url.URL, v reflect.Value, name string, tag reflect.StructTag) e
|
|||||||
if err == errValueNotSet {
|
if err == errValueNotSet {
|
||||||
return nil
|
return nil
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return awserr.New("SerializationError", "failed to encode REST request", err)
|
return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
u.Path = strings.Replace(u.Path, "{"+name+"}", value, -1)
|
u.Path = strings.Replace(u.Path, "{"+name+"}", value, -1)
|
||||||
@ -219,7 +229,7 @@ func buildQueryString(query url.Values, v reflect.Value, name string, tag reflec
|
|||||||
if err == errValueNotSet {
|
if err == errValueNotSet {
|
||||||
return nil
|
return nil
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return awserr.New("SerializationError", "failed to encode REST request", err)
|
return awserr.New(request.ErrCodeSerialization, "failed to encode REST request", err)
|
||||||
}
|
}
|
||||||
query.Set(name, str)
|
query.Set(name, str)
|
||||||
}
|
}
|
||||||
|
12
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
generated
vendored
12
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
generated
vendored
@ -57,7 +57,7 @@ func unmarshalBody(r *request.Request, v reflect.Value) {
|
|||||||
defer r.HTTPResponse.Body.Close()
|
defer r.HTTPResponse.Body.Close()
|
||||||
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "failed to decode REST response", err)
|
r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err)
|
||||||
} else {
|
} else {
|
||||||
payload.Set(reflect.ValueOf(b))
|
payload.Set(reflect.ValueOf(b))
|
||||||
}
|
}
|
||||||
@ -65,7 +65,7 @@ func unmarshalBody(r *request.Request, v reflect.Value) {
|
|||||||
defer r.HTTPResponse.Body.Close()
|
defer r.HTTPResponse.Body.Close()
|
||||||
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "failed to decode REST response", err)
|
r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err)
|
||||||
} else {
|
} else {
|
||||||
str := string(b)
|
str := string(b)
|
||||||
payload.Set(reflect.ValueOf(&str))
|
payload.Set(reflect.ValueOf(&str))
|
||||||
@ -77,7 +77,7 @@ func unmarshalBody(r *request.Request, v reflect.Value) {
|
|||||||
case "io.ReadSeeker":
|
case "io.ReadSeeker":
|
||||||
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError",
|
r.Error = awserr.New(request.ErrCodeSerialization,
|
||||||
"failed to read response body", err)
|
"failed to read response body", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -85,7 +85,7 @@ func unmarshalBody(r *request.Request, v reflect.Value) {
|
|||||||
default:
|
default:
|
||||||
io.Copy(ioutil.Discard, r.HTTPResponse.Body)
|
io.Copy(ioutil.Discard, r.HTTPResponse.Body)
|
||||||
defer r.HTTPResponse.Body.Close()
|
defer r.HTTPResponse.Body.Close()
|
||||||
r.Error = awserr.New("SerializationError",
|
r.Error = awserr.New(request.ErrCodeSerialization,
|
||||||
"failed to decode REST response",
|
"failed to decode REST response",
|
||||||
fmt.Errorf("unknown payload type %s", payload.Type()))
|
fmt.Errorf("unknown payload type %s", payload.Type()))
|
||||||
}
|
}
|
||||||
@ -115,14 +115,14 @@ func unmarshalLocationElements(r *request.Request, v reflect.Value) {
|
|||||||
case "header":
|
case "header":
|
||||||
err := unmarshalHeader(m, r.HTTPResponse.Header.Get(name), field.Tag)
|
err := unmarshalHeader(m, r.HTTPResponse.Header.Get(name), field.Tag)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "failed to decode REST response", err)
|
r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
case "headers":
|
case "headers":
|
||||||
prefix := field.Tag.Get("locationName")
|
prefix := field.Tag.Get("locationName")
|
||||||
err := unmarshalHeaderMap(m, r.HTTPResponse.Header, prefix)
|
err := unmarshalHeaderMap(m, r.HTTPResponse.Header, prefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "failed to decode REST response", err)
|
r.Error = awserr.New(request.ErrCodeSerialization, "failed to decode REST response", err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
6
vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go
generated
vendored
6
vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go
generated
vendored
@ -37,7 +37,8 @@ func Build(r *request.Request) {
|
|||||||
err := xmlutil.BuildXML(r.Params, xml.NewEncoder(&buf))
|
err := xmlutil.BuildXML(r.Params, xml.NewEncoder(&buf))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.NewRequestFailure(
|
r.Error = awserr.NewRequestFailure(
|
||||||
awserr.New("SerializationError", "failed to encode rest XML request", err),
|
awserr.New(request.ErrCodeSerialization,
|
||||||
|
"failed to encode rest XML request", err),
|
||||||
r.HTTPResponse.StatusCode,
|
r.HTTPResponse.StatusCode,
|
||||||
r.RequestID,
|
r.RequestID,
|
||||||
)
|
)
|
||||||
@ -55,7 +56,8 @@ func Unmarshal(r *request.Request) {
|
|||||||
err := xmlutil.UnmarshalXML(r.Data, decoder, "")
|
err := xmlutil.UnmarshalXML(r.Data, decoder, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.NewRequestFailure(
|
r.Error = awserr.NewRequestFailure(
|
||||||
awserr.New("SerializationError", "failed to decode REST XML response", err),
|
awserr.New(request.ErrCodeSerialization,
|
||||||
|
"failed to decode REST XML response", err),
|
||||||
r.HTTPResponse.StatusCode,
|
r.HTTPResponse.StatusCode,
|
||||||
r.RequestID,
|
r.RequestID,
|
||||||
)
|
)
|
||||||
|
19
vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go
generated
vendored
19
vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go
generated
vendored
@ -1,6 +1,7 @@
|
|||||||
package xmlutil
|
package xmlutil
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -10,9 +11,27 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
"github.com/aws/aws-sdk-go/private/protocol"
|
"github.com/aws/aws-sdk-go/private/protocol"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// UnmarshalXMLError unmarshals the XML error from the stream into the value
|
||||||
|
// type specified. The value must be a pointer. If the message fails to
|
||||||
|
// unmarshal, the message content will be included in the returned error as a
|
||||||
|
// awserr.UnmarshalError.
|
||||||
|
func UnmarshalXMLError(v interface{}, stream io.Reader) error {
|
||||||
|
var errBuf bytes.Buffer
|
||||||
|
body := io.TeeReader(stream, &errBuf)
|
||||||
|
|
||||||
|
err := xml.NewDecoder(body).Decode(v)
|
||||||
|
if err != nil && err != io.EOF {
|
||||||
|
return awserr.NewUnmarshalError(err,
|
||||||
|
"failed to unmarshal error message", errBuf.Bytes())
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// UnmarshalXML deserializes an xml.Decoder into the container v. V
|
// UnmarshalXML deserializes an xml.Decoder into the container v. V
|
||||||
// needs to match the shape of the XML expected to be decoded.
|
// needs to match the shape of the XML expected to be decoded.
|
||||||
// If the shape doesn't match unmarshaling will fail.
|
// If the shape doesn't match unmarshaling will fail.
|
||||||
|
524
vendor/github.com/aws/aws-sdk-go/service/s3/api.go
generated
vendored
524
vendor/github.com/aws/aws-sdk-go/service/s3/api.go
generated
vendored
File diff suppressed because it is too large
Load Diff
3
vendor/github.com/aws/aws-sdk-go/service/s3/bucket_location.go
generated
vendored
3
vendor/github.com/aws/aws-sdk-go/service/s3/bucket_location.go
generated
vendored
@ -80,7 +80,8 @@ func buildGetBucketLocation(r *request.Request) {
|
|||||||
out := r.Data.(*GetBucketLocationOutput)
|
out := r.Data.(*GetBucketLocationOutput)
|
||||||
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "failed reading response body", err)
|
r.Error = awserr.New(request.ErrCodeSerialization,
|
||||||
|
"failed reading response body", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
vendor/github.com/aws/aws-sdk-go/service/s3/customizations.go
generated
vendored
3
vendor/github.com/aws/aws-sdk-go/service/s3/customizations.go
generated
vendored
@ -17,7 +17,8 @@ func defaultInitClientFn(c *client.Client) {
|
|||||||
|
|
||||||
// Require SSL when using SSE keys
|
// Require SSL when using SSE keys
|
||||||
c.Handlers.Validate.PushBack(validateSSERequiresSSL)
|
c.Handlers.Validate.PushBack(validateSSERequiresSSL)
|
||||||
c.Handlers.Build.PushBack(computeSSEKeys)
|
c.Handlers.Build.PushBack(computeSSEKeyMD5)
|
||||||
|
c.Handlers.Build.PushBack(computeCopySourceSSEKeyMD5)
|
||||||
|
|
||||||
// S3 uses custom error unmarshaling logic
|
// S3 uses custom error unmarshaling logic
|
||||||
c.Handlers.UnmarshalError.Clear()
|
c.Handlers.UnmarshalError.Clear()
|
||||||
|
6
vendor/github.com/aws/aws-sdk-go/service/s3/s3manager/batch.go
generated
vendored
6
vendor/github.com/aws/aws-sdk-go/service/s3/s3manager/batch.go
generated
vendored
@ -273,7 +273,7 @@ type DeleteObjectsIterator struct {
|
|||||||
inc bool
|
inc bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next will increment the default iterator's index and and ensure that there
|
// Next will increment the default iterator's index and ensure that there
|
||||||
// is another object to iterator to.
|
// is another object to iterator to.
|
||||||
func (iter *DeleteObjectsIterator) Next() bool {
|
func (iter *DeleteObjectsIterator) Next() bool {
|
||||||
if iter.inc {
|
if iter.inc {
|
||||||
@ -458,7 +458,7 @@ type DownloadObjectsIterator struct {
|
|||||||
inc bool
|
inc bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next will increment the default iterator's index and and ensure that there
|
// Next will increment the default iterator's index and ensure that there
|
||||||
// is another object to iterator to.
|
// is another object to iterator to.
|
||||||
func (batcher *DownloadObjectsIterator) Next() bool {
|
func (batcher *DownloadObjectsIterator) Next() bool {
|
||||||
if batcher.inc {
|
if batcher.inc {
|
||||||
@ -497,7 +497,7 @@ type UploadObjectsIterator struct {
|
|||||||
inc bool
|
inc bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next will increment the default iterator's index and and ensure that there
|
// Next will increment the default iterator's index and ensure that there
|
||||||
// is another object to iterator to.
|
// is another object to iterator to.
|
||||||
func (batcher *UploadObjectsIterator) Next() bool {
|
func (batcher *UploadObjectsIterator) Next() bool {
|
||||||
if batcher.inc {
|
if batcher.inc {
|
||||||
|
39
vendor/github.com/aws/aws-sdk-go/service/s3/s3manager/upload.go
generated
vendored
39
vendor/github.com/aws/aws-sdk-go/service/s3/s3manager/upload.go
generated
vendored
@ -145,8 +145,13 @@ type Uploader struct {
|
|||||||
// MaxUploadParts is the max number of parts which will be uploaded to S3.
|
// MaxUploadParts is the max number of parts which will be uploaded to S3.
|
||||||
// Will be used to calculate the partsize of the object to be uploaded.
|
// Will be used to calculate the partsize of the object to be uploaded.
|
||||||
// E.g: 5GB file, with MaxUploadParts set to 100, will upload the file
|
// E.g: 5GB file, with MaxUploadParts set to 100, will upload the file
|
||||||
// as 100, 50MB parts.
|
// as 100, 50MB parts. With a limited of s3.MaxUploadParts (10,000 parts).
|
||||||
// With a limited of s3.MaxUploadParts (10,000 parts).
|
//
|
||||||
|
// MaxUploadParts must not be used to limit the total number of bytes uploaded.
|
||||||
|
// Use a type like to io.LimitReader (https://golang.org/pkg/io/#LimitedReader)
|
||||||
|
// instead. An io.LimitReader is helpful when uploading an unbounded reader
|
||||||
|
// to S3, and you know its maximum size. Otherwise the reader's io.EOF returned
|
||||||
|
// error must be used to signal end of stream.
|
||||||
//
|
//
|
||||||
// Defaults to package const's MaxUploadParts value.
|
// Defaults to package const's MaxUploadParts value.
|
||||||
MaxUploadParts int
|
MaxUploadParts int
|
||||||
@ -542,21 +547,6 @@ func (u *multiuploader) upload(firstBuf io.ReadSeeker, firstPart []byte) (*Uploa
|
|||||||
|
|
||||||
// Read and queue the rest of the parts
|
// Read and queue the rest of the parts
|
||||||
for u.geterr() == nil && err == nil {
|
for u.geterr() == nil && err == nil {
|
||||||
num++
|
|
||||||
// This upload exceeded maximum number of supported parts, error now.
|
|
||||||
if num > int64(u.cfg.MaxUploadParts) || num > int64(MaxUploadParts) {
|
|
||||||
var msg string
|
|
||||||
if num > int64(u.cfg.MaxUploadParts) {
|
|
||||||
msg = fmt.Sprintf("exceeded total allowed configured MaxUploadParts (%d). Adjust PartSize to fit in this limit",
|
|
||||||
u.cfg.MaxUploadParts)
|
|
||||||
} else {
|
|
||||||
msg = fmt.Sprintf("exceeded total allowed S3 limit MaxUploadParts (%d). Adjust PartSize to fit in this limit",
|
|
||||||
MaxUploadParts)
|
|
||||||
}
|
|
||||||
u.seterr(awserr.New("TotalPartsExceeded", msg, nil))
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
var reader io.ReadSeeker
|
var reader io.ReadSeeker
|
||||||
var nextChunkLen int
|
var nextChunkLen int
|
||||||
var part []byte
|
var part []byte
|
||||||
@ -577,6 +567,21 @@ func (u *multiuploader) upload(firstBuf io.ReadSeeker, firstPart []byte) (*Uploa
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
num++
|
||||||
|
// This upload exceeded maximum number of supported parts, error now.
|
||||||
|
if num > int64(u.cfg.MaxUploadParts) || num > int64(MaxUploadParts) {
|
||||||
|
var msg string
|
||||||
|
if num > int64(u.cfg.MaxUploadParts) {
|
||||||
|
msg = fmt.Sprintf("exceeded total allowed configured MaxUploadParts (%d). Adjust PartSize to fit in this limit",
|
||||||
|
u.cfg.MaxUploadParts)
|
||||||
|
} else {
|
||||||
|
msg = fmt.Sprintf("exceeded total allowed S3 limit MaxUploadParts (%d). Adjust PartSize to fit in this limit",
|
||||||
|
MaxUploadParts)
|
||||||
|
}
|
||||||
|
u.seterr(awserr.New("TotalPartsExceeded", msg, nil))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
ch <- chunk{buf: reader, part: part, num: num}
|
ch <- chunk{buf: reader, part: part, num: num}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
9
vendor/github.com/aws/aws-sdk-go/service/s3/s3manager/upload_input.go
generated
vendored
9
vendor/github.com/aws/aws-sdk-go/service/s3/s3manager/upload_input.go
generated
vendored
@ -40,7 +40,8 @@ type UploadInput struct {
|
|||||||
ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"`
|
ContentLanguage *string `location:"header" locationName:"Content-Language" type:"string"`
|
||||||
|
|
||||||
// The base64-encoded 128-bit MD5 digest of the part data. This parameter is
|
// The base64-encoded 128-bit MD5 digest of the part data. This parameter is
|
||||||
// auto-populated when using the command from the CLI
|
// auto-populated when using the command from the CLI. This parameted is required
|
||||||
|
// if object lock parameters are specified.
|
||||||
ContentMD5 *string `location:"header" locationName:"Content-MD5" type:"string"`
|
ContentMD5 *string `location:"header" locationName:"Content-MD5" type:"string"`
|
||||||
|
|
||||||
// A standard MIME type describing the format of the object data.
|
// A standard MIME type describing the format of the object data.
|
||||||
@ -72,10 +73,10 @@ type UploadInput struct {
|
|||||||
// The Legal Hold status that you want to apply to the specified object.
|
// The Legal Hold status that you want to apply to the specified object.
|
||||||
ObjectLockLegalHoldStatus *string `location:"header" locationName:"x-amz-object-lock-legal-hold" type:"string" enum:"ObjectLockLegalHoldStatus"`
|
ObjectLockLegalHoldStatus *string `location:"header" locationName:"x-amz-object-lock-legal-hold" type:"string" enum:"ObjectLockLegalHoldStatus"`
|
||||||
|
|
||||||
// The Object Lock mode that you want to apply to this object.
|
// The object lock mode that you want to apply to this object.
|
||||||
ObjectLockMode *string `location:"header" locationName:"x-amz-object-lock-mode" type:"string" enum:"ObjectLockMode"`
|
ObjectLockMode *string `location:"header" locationName:"x-amz-object-lock-mode" type:"string" enum:"ObjectLockMode"`
|
||||||
|
|
||||||
// The date and time when you want this object's Object Lock to expire.
|
// The date and time when you want this object's object lock to expire.
|
||||||
ObjectLockRetainUntilDate *time.Time `location:"header" locationName:"x-amz-object-lock-retain-until-date" type:"timestamp" timestampFormat:"iso8601"`
|
ObjectLockRetainUntilDate *time.Time `location:"header" locationName:"x-amz-object-lock-retain-until-date" type:"timestamp" timestampFormat:"iso8601"`
|
||||||
|
|
||||||
// Confirms that the requester knows that she or he will be charged for the
|
// Confirms that the requester knows that she or he will be charged for the
|
||||||
@ -92,7 +93,7 @@ type UploadInput struct {
|
|||||||
// does not store the encryption key. The key must be appropriate for use with
|
// does not store the encryption key. The key must be appropriate for use with
|
||||||
// the algorithm specified in the x-amz-server-side-encryption-customer-algorithm
|
// the algorithm specified in the x-amz-server-side-encryption-customer-algorithm
|
||||||
// header.
|
// header.
|
||||||
SSECustomerKey *string `location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string" sensitive:"true"`
|
SSECustomerKey *string `marshal-as:"blob" location:"header" locationName:"x-amz-server-side-encryption-customer-key" type:"string" sensitive:"true"`
|
||||||
|
|
||||||
// Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
|
// Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.
|
||||||
// Amazon S3 uses this header for a message integrity check to ensure the encryption
|
// Amazon S3 uses this header for a message integrity check to ensure the encryption
|
||||||
|
62
vendor/github.com/aws/aws-sdk-go/service/s3/sse.go
generated
vendored
62
vendor/github.com/aws/aws-sdk-go/service/s3/sse.go
generated
vendored
@ -3,6 +3,7 @@ package s3
|
|||||||
import (
|
import (
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
@ -30,25 +31,54 @@ func validateSSERequiresSSL(r *request.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func computeSSEKeys(r *request.Request) {
|
const (
|
||||||
headers := []string{
|
sseKeyHeader = "x-amz-server-side-encryption-customer-key"
|
||||||
"x-amz-server-side-encryption-customer-key",
|
sseKeyMD5Header = sseKeyHeader + "-md5"
|
||||||
"x-amz-copy-source-server-side-encryption-customer-key",
|
)
|
||||||
|
|
||||||
|
func computeSSEKeyMD5(r *request.Request) {
|
||||||
|
var key string
|
||||||
|
if g, ok := r.Params.(sseCustomerKeyGetter); ok {
|
||||||
|
key = g.getSSECustomerKey()
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, h := range headers {
|
computeKeyMD5(sseKeyHeader, sseKeyMD5Header, key, r.HTTPRequest)
|
||||||
md5h := h + "-md5"
|
}
|
||||||
if key := r.HTTPRequest.Header.Get(h); key != "" {
|
|
||||||
// Base64-encode the value
|
|
||||||
b64v := base64.StdEncoding.EncodeToString([]byte(key))
|
|
||||||
r.HTTPRequest.Header.Set(h, b64v)
|
|
||||||
|
|
||||||
// Add MD5 if it wasn't computed
|
const (
|
||||||
if r.HTTPRequest.Header.Get(md5h) == "" {
|
copySrcSSEKeyHeader = "x-amz-copy-source-server-side-encryption-customer-key"
|
||||||
sum := md5.Sum([]byte(key))
|
copySrcSSEKeyMD5Header = copySrcSSEKeyHeader + "-md5"
|
||||||
b64sum := base64.StdEncoding.EncodeToString(sum[:])
|
)
|
||||||
r.HTTPRequest.Header.Set(md5h, b64sum)
|
|
||||||
}
|
func computeCopySourceSSEKeyMD5(r *request.Request) {
|
||||||
|
var key string
|
||||||
|
if g, ok := r.Params.(copySourceSSECustomerKeyGetter); ok {
|
||||||
|
key = g.getCopySourceSSECustomerKey()
|
||||||
|
}
|
||||||
|
|
||||||
|
computeKeyMD5(copySrcSSEKeyHeader, copySrcSSEKeyMD5Header, key, r.HTTPRequest)
|
||||||
|
}
|
||||||
|
|
||||||
|
func computeKeyMD5(keyHeader, keyMD5Header, key string, r *http.Request) {
|
||||||
|
if len(key) == 0 {
|
||||||
|
// Backwards compatiablity where user just set the header value instead
|
||||||
|
// of using the API parameter, or setting the header value for an
|
||||||
|
// operation without the parameters modeled.
|
||||||
|
key = r.Header.Get(keyHeader)
|
||||||
|
if len(key) == 0 {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In backwards compatiable, the header's value is not base64 encoded,
|
||||||
|
// and needs to be encoded and updated by the SDK's customizations.
|
||||||
|
b64Key := base64.StdEncoding.EncodeToString([]byte(key))
|
||||||
|
r.Header.Set(keyHeader, b64Key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only update Key's MD5 if not already set.
|
||||||
|
if len(r.Header.Get(keyMD5Header)) == 0 {
|
||||||
|
sum := md5.Sum([]byte(key))
|
||||||
|
keyMD5 := base64.StdEncoding.EncodeToString(sum[:])
|
||||||
|
r.Header.Set(keyMD5Header, keyMD5)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
4
vendor/github.com/aws/aws-sdk-go/service/s3/statusok_error.go
generated
vendored
4
vendor/github.com/aws/aws-sdk-go/service/s3/statusok_error.go
generated
vendored
@ -14,7 +14,7 @@ func copyMultipartStatusOKUnmarhsalError(r *request.Request) {
|
|||||||
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.NewRequestFailure(
|
r.Error = awserr.NewRequestFailure(
|
||||||
awserr.New("SerializationError", "unable to read response body", err),
|
awserr.New(request.ErrCodeSerialization, "unable to read response body", err),
|
||||||
r.HTTPResponse.StatusCode,
|
r.HTTPResponse.StatusCode,
|
||||||
r.RequestID,
|
r.RequestID,
|
||||||
)
|
)
|
||||||
@ -31,7 +31,7 @@ func copyMultipartStatusOKUnmarhsalError(r *request.Request) {
|
|||||||
|
|
||||||
unmarshalError(r)
|
unmarshalError(r)
|
||||||
if err, ok := r.Error.(awserr.Error); ok && err != nil {
|
if err, ok := r.Error.(awserr.Error); ok && err != nil {
|
||||||
if err.Code() == "SerializationError" {
|
if err.Code() == request.ErrCodeSerialization {
|
||||||
r.Error = nil
|
r.Error = nil
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
34
vendor/github.com/aws/aws-sdk-go/service/s3/unmarshal_error.go
generated
vendored
34
vendor/github.com/aws/aws-sdk-go/service/s3/unmarshal_error.go
generated
vendored
@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
type xmlErrorResponse struct {
|
type xmlErrorResponse struct {
|
||||||
@ -42,29 +43,34 @@ func unmarshalError(r *request.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var errCode, errMsg string
|
|
||||||
|
|
||||||
// Attempt to parse error from body if it is known
|
// Attempt to parse error from body if it is known
|
||||||
resp := &xmlErrorResponse{}
|
var errResp xmlErrorResponse
|
||||||
err := xml.NewDecoder(r.HTTPResponse.Body).Decode(resp)
|
err := xmlutil.UnmarshalXMLError(&errResp, r.HTTPResponse.Body)
|
||||||
if err != nil && err != io.EOF {
|
if err == io.EOF {
|
||||||
errCode = "SerializationError"
|
// Only capture the error if an unmarshal error occurs that is not EOF,
|
||||||
errMsg = "failed to decode S3 XML error response"
|
// because S3 might send an error without a error message which causes
|
||||||
} else {
|
// the XML unmarshal to fail with EOF.
|
||||||
errCode = resp.Code
|
|
||||||
errMsg = resp.Message
|
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
|
if err != nil {
|
||||||
|
r.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New(request.ErrCodeSerialization,
|
||||||
|
"failed to unmarshal error message", err),
|
||||||
|
r.HTTPResponse.StatusCode,
|
||||||
|
r.RequestID,
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Fallback to status code converted to message if still no error code
|
// Fallback to status code converted to message if still no error code
|
||||||
if len(errCode) == 0 {
|
if len(errResp.Code) == 0 {
|
||||||
statusText := http.StatusText(r.HTTPResponse.StatusCode)
|
statusText := http.StatusText(r.HTTPResponse.StatusCode)
|
||||||
errCode = strings.Replace(statusText, " ", "", -1)
|
errResp.Code = strings.Replace(statusText, " ", "", -1)
|
||||||
errMsg = statusText
|
errResp.Message = statusText
|
||||||
}
|
}
|
||||||
|
|
||||||
r.Error = awserr.NewRequestFailure(
|
r.Error = awserr.NewRequestFailure(
|
||||||
awserr.New(errCode, errMsg, err),
|
awserr.New(errResp.Code, errResp.Message, err),
|
||||||
r.HTTPResponse.StatusCode,
|
r.HTTPResponse.StatusCode,
|
||||||
r.RequestID,
|
r.RequestID,
|
||||||
)
|
)
|
||||||
|
941
vendor/github.com/aws/aws-sdk-go/service/sts/api.go
generated
vendored
941
vendor/github.com/aws/aws-sdk-go/service/sts/api.go
generated
vendored
File diff suppressed because it is too large
Load Diff
76
vendor/github.com/aws/aws-sdk-go/service/sts/doc.go
generated
vendored
76
vendor/github.com/aws/aws-sdk-go/service/sts/doc.go
generated
vendored
@ -7,22 +7,14 @@
|
|||||||
// request temporary, limited-privilege credentials for AWS Identity and Access
|
// request temporary, limited-privilege credentials for AWS Identity and Access
|
||||||
// Management (IAM) users or for users that you authenticate (federated users).
|
// Management (IAM) users or for users that you authenticate (federated users).
|
||||||
// This guide provides descriptions of the STS API. For more detailed information
|
// This guide provides descriptions of the STS API. For more detailed information
|
||||||
// about using this service, go to Temporary Security Credentials (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html).
|
// about using this service, go to Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html).
|
||||||
//
|
|
||||||
// As an alternative to using the API, you can use one of the AWS SDKs, which
|
|
||||||
// consist of libraries and sample code for various programming languages and
|
|
||||||
// platforms (Java, Ruby, .NET, iOS, Android, etc.). The SDKs provide a convenient
|
|
||||||
// way to create programmatic access to STS. For example, the SDKs take care
|
|
||||||
// of cryptographically signing requests, managing errors, and retrying requests
|
|
||||||
// automatically. For information about the AWS SDKs, including how to download
|
|
||||||
// and install them, see the Tools for Amazon Web Services page (http://aws.amazon.com/tools/).
|
|
||||||
//
|
//
|
||||||
// For information about setting up signatures and authorization through the
|
// For information about setting up signatures and authorization through the
|
||||||
// API, go to Signing AWS API Requests (http://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)
|
// API, go to Signing AWS API Requests (https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)
|
||||||
// in the AWS General Reference. For general information about the Query API,
|
// in the AWS General Reference. For general information about the Query API,
|
||||||
// go to Making Query Requests (http://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html)
|
// go to Making Query Requests (https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html)
|
||||||
// in Using IAM. For information about using security tokens with other AWS
|
// in Using IAM. For information about using security tokens with other AWS
|
||||||
// products, go to AWS Services That Work with IAM (http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)
|
// products, go to AWS Services That Work with IAM (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)
|
||||||
// in the IAM User Guide.
|
// in the IAM User Guide.
|
||||||
//
|
//
|
||||||
// If you're new to AWS and need additional technical information about a specific
|
// If you're new to AWS and need additional technical information about a specific
|
||||||
@ -31,14 +23,38 @@
|
|||||||
//
|
//
|
||||||
// Endpoints
|
// Endpoints
|
||||||
//
|
//
|
||||||
// The AWS Security Token Service (STS) has a default endpoint of https://sts.amazonaws.com
|
// By default, AWS Security Token Service (STS) is available as a global service,
|
||||||
// that maps to the US East (N. Virginia) region. Additional regions are available
|
// and all AWS STS requests go to a single endpoint at https://sts.amazonaws.com.
|
||||||
// and are activated by default. For more information, see Activating and Deactivating
|
// Global requests map to the US East (N. Virginia) region. AWS recommends using
|
||||||
// AWS STS in an AWS Region (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)
|
// Regional AWS STS endpoints instead of the global endpoint to reduce latency,
|
||||||
|
// build in redundancy, and increase session token validity. For more information,
|
||||||
|
// see Managing AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)
|
||||||
// in the IAM User Guide.
|
// in the IAM User Guide.
|
||||||
//
|
//
|
||||||
// For information about STS endpoints, see Regions and Endpoints (http://docs.aws.amazon.com/general/latest/gr/rande.html#sts_region)
|
// Most AWS Regions are enabled for operations in all AWS services by default.
|
||||||
// in the AWS General Reference.
|
// Those Regions are automatically activated for use with AWS STS. Some Regions,
|
||||||
|
// such as Asia Pacific (Hong Kong), must be manually enabled. To learn more
|
||||||
|
// about enabling and disabling AWS Regions, see Managing AWS Regions (https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)
|
||||||
|
// in the AWS General Reference. When you enable these AWS Regions, they are
|
||||||
|
// automatically activated for use with AWS STS. You cannot activate the STS
|
||||||
|
// endpoint for a Region that is disabled. Tokens that are valid in all AWS
|
||||||
|
// Regions are longer than tokens that are valid in Regions that are enabled
|
||||||
|
// by default. Changing this setting might affect existing systems where you
|
||||||
|
// temporarily store tokens. For more information, see Managing Global Endpoint
|
||||||
|
// Session Tokens (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-manage-tokens)
|
||||||
|
// in the IAM User Guide.
|
||||||
|
//
|
||||||
|
// After you activate a Region for use with AWS STS, you can direct AWS STS
|
||||||
|
// API calls to that Region. AWS STS recommends that you provide both the Region
|
||||||
|
// and endpoint when you make calls to a Regional endpoint. You can provide
|
||||||
|
// the Region alone for manually enabled Regions, such as Asia Pacific (Hong
|
||||||
|
// Kong). In this case, the calls are directed to the STS Regional endpoint.
|
||||||
|
// However, if you provide the Region alone for Regions enabled by default,
|
||||||
|
// the calls are directed to the global endpoint of https://sts.amazonaws.com.
|
||||||
|
//
|
||||||
|
// To view the list of AWS STS endpoints and whether they are active by default,
|
||||||
|
// see Writing Code to Use AWS STS Regions (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#id_credentials_temp_enable-regions_writing_code)
|
||||||
|
// in the IAM User Guide.
|
||||||
//
|
//
|
||||||
// Recording API requests
|
// Recording API requests
|
||||||
//
|
//
|
||||||
@ -46,8 +62,28 @@
|
|||||||
// your AWS account and delivers log files to an Amazon S3 bucket. By using
|
// your AWS account and delivers log files to an Amazon S3 bucket. By using
|
||||||
// information collected by CloudTrail, you can determine what requests were
|
// information collected by CloudTrail, you can determine what requests were
|
||||||
// successfully made to STS, who made the request, when it was made, and so
|
// successfully made to STS, who made the request, when it was made, and so
|
||||||
// on. To learn more about CloudTrail, including how to turn it on and find
|
// on.
|
||||||
// your log files, see the AWS CloudTrail User Guide (http://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html).
|
//
|
||||||
|
// If you activate AWS STS endpoints in Regions other than the default global
|
||||||
|
// endpoint, then you must also turn on CloudTrail logging in those Regions.
|
||||||
|
// This is necessary to record any AWS STS API calls that are made in those
|
||||||
|
// Regions. For more information, see Turning On CloudTrail in Additional Regions
|
||||||
|
// (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/aggregating_logs_regions_turn_on_ct.html)
|
||||||
|
// in the AWS CloudTrail User Guide.
|
||||||
|
//
|
||||||
|
// AWS Security Token Service (STS) is a global service with a single endpoint
|
||||||
|
// at https://sts.amazonaws.com. Calls to this endpoint are logged as calls
|
||||||
|
// to a global service. However, because this endpoint is physically located
|
||||||
|
// in the US East (N. Virginia) Region, your logs list us-east-1 as the event
|
||||||
|
// Region. CloudTrail does not write these logs to the US East (Ohio) Region
|
||||||
|
// unless you choose to include global service logs in that Region. CloudTrail
|
||||||
|
// writes calls to all Regional endpoints to their respective Regions. For example,
|
||||||
|
// calls to sts.us-east-2.amazonaws.com are published to the US East (Ohio)
|
||||||
|
// Region and calls to sts.eu-central-1.amazonaws.com are published to the EU
|
||||||
|
// (Frankfurt) Region.
|
||||||
|
//
|
||||||
|
// To learn more about CloudTrail, including how to turn it on and find your
|
||||||
|
// log files, see the AWS CloudTrail User Guide (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html).
|
||||||
//
|
//
|
||||||
// See https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15 for more information on this service.
|
// See https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15 for more information on this service.
|
||||||
//
|
//
|
||||||
|
2
vendor/github.com/aws/aws-sdk-go/service/sts/errors.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/service/sts/errors.go
generated
vendored
@ -67,7 +67,7 @@ const (
|
|||||||
// STS is not activated in the requested region for the account that is being
|
// STS is not activated in the requested region for the account that is being
|
||||||
// asked to generate credentials. The account administrator must use the IAM
|
// asked to generate credentials. The account administrator must use the IAM
|
||||||
// console to activate STS in that region. For more information, see Activating
|
// console to activate STS in that region. For more information, see Activating
|
||||||
// and Deactivating AWS STS in an AWS Region (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)
|
// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)
|
||||||
// in the IAM User Guide.
|
// in the IAM User Guide.
|
||||||
ErrCodeRegionDisabledException = "RegionDisabledException"
|
ErrCodeRegionDisabledException = "RegionDisabledException"
|
||||||
)
|
)
|
||||||
|
12
vendor/github.com/coreos/bbolt/bolt_riscv64.go
generated
vendored
Normal file
12
vendor/github.com/coreos/bbolt/bolt_riscv64.go
generated
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// +build riscv64
|
||||||
|
|
||||||
|
package bbolt
|
||||||
|
|
||||||
|
// maxMapSize represents the largest mmap size supported by Bolt.
|
||||||
|
const maxMapSize = 0xFFFFFFFFFFFF // 256TB
|
||||||
|
|
||||||
|
// maxAllocSize is the size used when creating array pointers.
|
||||||
|
const maxAllocSize = 0x7FFFFFFF
|
||||||
|
|
||||||
|
// Are unaligned load/stores broken on this arch?
|
||||||
|
var brokenUnaligned = true
|
12
vendor/github.com/coreos/bbolt/db.go
generated
vendored
12
vendor/github.com/coreos/bbolt/db.go
generated
vendored
@ -121,6 +121,7 @@ type DB struct {
|
|||||||
AllocSize int
|
AllocSize int
|
||||||
|
|
||||||
path string
|
path string
|
||||||
|
openFile func(string, int, os.FileMode) (*os.File, error)
|
||||||
file *os.File
|
file *os.File
|
||||||
dataref []byte // mmap'ed readonly, write throws SEGV
|
dataref []byte // mmap'ed readonly, write throws SEGV
|
||||||
data *[maxMapSize]byte
|
data *[maxMapSize]byte
|
||||||
@ -199,10 +200,15 @@ func Open(path string, mode os.FileMode, options *Options) (*DB, error) {
|
|||||||
db.readOnly = true
|
db.readOnly = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db.openFile = options.OpenFile
|
||||||
|
if db.openFile == nil {
|
||||||
|
db.openFile = os.OpenFile
|
||||||
|
}
|
||||||
|
|
||||||
// Open data file and separate sync handler for metadata writes.
|
// Open data file and separate sync handler for metadata writes.
|
||||||
db.path = path
|
db.path = path
|
||||||
var err error
|
var err error
|
||||||
if db.file, err = os.OpenFile(db.path, flag|os.O_CREATE, mode); err != nil {
|
if db.file, err = db.openFile(db.path, flag|os.O_CREATE, mode); err != nil {
|
||||||
_ = db.close()
|
_ = db.close()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -1054,6 +1060,10 @@ type Options struct {
|
|||||||
// set directly on the DB itself when returned from Open(), but this option
|
// set directly on the DB itself when returned from Open(), but this option
|
||||||
// is useful in APIs which expose Options but not the underlying DB.
|
// is useful in APIs which expose Options but not the underlying DB.
|
||||||
NoSync bool
|
NoSync bool
|
||||||
|
|
||||||
|
// OpenFile is used to open files. It defaults to os.OpenFile. This option
|
||||||
|
// is useful for writing hermetic tests.
|
||||||
|
OpenFile func(string, int, os.FileMode) (*os.File, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultOptions represent the options used if nil options are passed into Open().
|
// DefaultOptions represent the options used if nil options are passed into Open().
|
||||||
|
22
vendor/github.com/coreos/bbolt/freelist.go
generated
vendored
22
vendor/github.com/coreos/bbolt/freelist.go
generated
vendored
@ -349,6 +349,28 @@ func (f *freelist) reload(p *page) {
|
|||||||
f.readIDs(a)
|
f.readIDs(a)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// noSyncReload reads the freelist from pgids and filters out pending items.
|
||||||
|
func (f *freelist) noSyncReload(pgids []pgid) {
|
||||||
|
// Build a cache of only pending pages.
|
||||||
|
pcache := make(map[pgid]bool)
|
||||||
|
for _, txp := range f.pending {
|
||||||
|
for _, pendingID := range txp.ids {
|
||||||
|
pcache[pendingID] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check each page in the freelist and build a new available freelist
|
||||||
|
// with any pages not in the pending lists.
|
||||||
|
var a []pgid
|
||||||
|
for _, id := range pgids {
|
||||||
|
if !pcache[id] {
|
||||||
|
a = append(a, id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
f.readIDs(a)
|
||||||
|
}
|
||||||
|
|
||||||
// reindex rebuilds the free cache based on available and pending free lists.
|
// reindex rebuilds the free cache based on available and pending free lists.
|
||||||
func (f *freelist) reindex() {
|
func (f *freelist) reindex() {
|
||||||
ids := f.getFreePageIDs()
|
ids := f.getFreePageIDs()
|
||||||
|
27
vendor/github.com/coreos/bbolt/tx.go
generated
vendored
27
vendor/github.com/coreos/bbolt/tx.go
generated
vendored
@ -254,17 +254,36 @@ func (tx *Tx) Rollback() error {
|
|||||||
if tx.db == nil {
|
if tx.db == nil {
|
||||||
return ErrTxClosed
|
return ErrTxClosed
|
||||||
}
|
}
|
||||||
tx.rollback()
|
tx.nonPhysicalRollback()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nonPhysicalRollback is called when user calls Rollback directly, in this case we do not need to reload the free pages from disk.
|
||||||
|
func (tx *Tx) nonPhysicalRollback() {
|
||||||
|
if tx.db == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if tx.writable {
|
||||||
|
tx.db.freelist.rollback(tx.meta.txid)
|
||||||
|
}
|
||||||
|
tx.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
// rollback needs to reload the free pages from disk in case some system error happens like fsync error.
|
||||||
func (tx *Tx) rollback() {
|
func (tx *Tx) rollback() {
|
||||||
if tx.db == nil {
|
if tx.db == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if tx.writable {
|
if tx.writable {
|
||||||
tx.db.freelist.rollback(tx.meta.txid)
|
tx.db.freelist.rollback(tx.meta.txid)
|
||||||
tx.db.freelist.reload(tx.db.page(tx.db.meta().freelist))
|
if !tx.db.hasSyncedFreelist() {
|
||||||
|
// Reconstruct free page list by scanning the DB to get the whole free page list.
|
||||||
|
// Note: scaning the whole db is heavy if your db size is large in NoSyncFreeList mode.
|
||||||
|
tx.db.freelist.noSyncReload(tx.db.freepages())
|
||||||
|
} else {
|
||||||
|
// Read free page list from freelist page.
|
||||||
|
tx.db.freelist.reload(tx.db.page(tx.db.meta().freelist))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tx.close()
|
tx.close()
|
||||||
}
|
}
|
||||||
@ -315,7 +334,7 @@ func (tx *Tx) Copy(w io.Writer) error {
|
|||||||
// If err == nil then exactly tx.Size() bytes will be written into the writer.
|
// If err == nil then exactly tx.Size() bytes will be written into the writer.
|
||||||
func (tx *Tx) WriteTo(w io.Writer) (n int64, err error) {
|
func (tx *Tx) WriteTo(w io.Writer) (n int64, err error) {
|
||||||
// Attempt to open reader with WriteFlag
|
// Attempt to open reader with WriteFlag
|
||||||
f, err := os.OpenFile(tx.db.path, os.O_RDONLY|tx.WriteFlag, 0)
|
f, err := tx.db.openFile(tx.db.path, os.O_RDONLY|tx.WriteFlag, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
@ -369,7 +388,7 @@ func (tx *Tx) WriteTo(w io.Writer) (n int64, err error) {
|
|||||||
// A reader transaction is maintained during the copy so it is safe to continue
|
// A reader transaction is maintained during the copy so it is safe to continue
|
||||||
// using the database while a copy is in progress.
|
// using the database while a copy is in progress.
|
||||||
func (tx *Tx) CopyFile(path string, mode os.FileMode) error {
|
func (tx *Tx) CopyFile(path string, mode os.FileMode) error {
|
||||||
f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, mode)
|
f, err := tx.db.openFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, mode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
1
vendor/github.com/nsf/termbox-go/README.md
generated
vendored
1
vendor/github.com/nsf/termbox-go/README.md
generated
vendored
@ -44,6 +44,7 @@ There are also some interesting projects using termbox-go:
|
|||||||
- [cointop](https://github.com/miguelmota/cointop) is an interactive terminal based UI application for tracking cryptocurrencies.
|
- [cointop](https://github.com/miguelmota/cointop) is an interactive terminal based UI application for tracking cryptocurrencies.
|
||||||
- [pexpo](https://github.com/nnao45/pexpo) is a terminal sending ping tool written in Go.
|
- [pexpo](https://github.com/nnao45/pexpo) is a terminal sending ping tool written in Go.
|
||||||
- [jid](https://github.com/simeji/jid) is an interactive JSON drill down tool using filtering queries like jq.
|
- [jid](https://github.com/simeji/jid) is an interactive JSON drill down tool using filtering queries like jq.
|
||||||
|
- [nonograminGo](https://github.com/N0RM4L15T/nonograminGo) is a nonogram(aka. picross) in Go
|
||||||
|
|
||||||
### API reference
|
### API reference
|
||||||
[godoc.org/github.com/nsf/termbox-go](http://godoc.org/github.com/nsf/termbox-go)
|
[godoc.org/github.com/nsf/termbox-go](http://godoc.org/github.com/nsf/termbox-go)
|
||||||
|
3
vendor/github.com/sevlyar/go-daemon/.travis.yml
generated
vendored
3
vendor/github.com/sevlyar/go-daemon/.travis.yml
generated
vendored
@ -2,13 +2,14 @@ language: go
|
|||||||
|
|
||||||
go:
|
go:
|
||||||
- 1.3
|
- 1.3
|
||||||
|
- 1.5
|
||||||
- tip
|
- tip
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- go get -t -v ./...
|
- go get -t -v ./...
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- go test -coverprofile=coverage.txt -covermode=atomic
|
- go test -v -coverprofile=coverage.txt -covermode=atomic
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
- bash <(curl -s https://codecov.io/bash)
|
||||||
|
16
vendor/github.com/sevlyar/go-daemon/daemon_unix.go
generated
vendored
16
vendor/github.com/sevlyar/go-daemon/daemon_unix.go
generated
vendored
@ -8,8 +8,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/kardianos/osext"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// A Context describes daemon context.
|
// A Context describes daemon context.
|
||||||
@ -172,7 +170,7 @@ func (d *Context) closeFiles() (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Context) prepareEnv() (err error) {
|
func (d *Context) prepareEnv() (err error) {
|
||||||
if d.abspath, err = osext.Executable(); err != nil {
|
if d.abspath, err = osExecutable(); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,7 +216,6 @@ func (d *Context) child() (err error) {
|
|||||||
|
|
||||||
decoder := json.NewDecoder(os.Stdin)
|
decoder := json.NewDecoder(os.Stdin)
|
||||||
if err = decoder.Decode(d); err != nil {
|
if err = decoder.Decode(d); err != nil {
|
||||||
d.pidFile.Remove()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,14 +225,14 @@ func (d *Context) child() (err error) {
|
|||||||
if err = d.pidFile.WritePid(); err != nil {
|
if err = d.pidFile.WritePid(); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
defer func() {
|
||||||
|
if err != nil {
|
||||||
|
d.pidFile.Remove()
|
||||||
|
}
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = syscall.Close(0); err != nil {
|
|
||||||
d.pidFile.Remove()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err = syscallDup(3, 0); err != nil {
|
if err = syscallDup(3, 0); err != nil {
|
||||||
d.pidFile.Remove()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,7 +242,6 @@ func (d *Context) child() (err error) {
|
|||||||
if len(d.Chroot) > 0 {
|
if len(d.Chroot) > 0 {
|
||||||
err = syscall.Chroot(d.Chroot)
|
err = syscall.Chroot(d.Chroot)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.pidFile.Remove()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
40
vendor/github.com/sevlyar/go-daemon/lock_file_solaris.go
generated
vendored
Normal file
40
vendor/github.com/sevlyar/go-daemon/lock_file_solaris.go
generated
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// +build solaris
|
||||||
|
|
||||||
|
package daemon
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
func lockFile(fd uintptr) error {
|
||||||
|
lockInfo := syscall.Flock_t{
|
||||||
|
Type: syscall.F_WRLCK,
|
||||||
|
Whence: io.SeekStart,
|
||||||
|
Start: 0,
|
||||||
|
Len: 0,
|
||||||
|
}
|
||||||
|
if err := syscall.FcntlFlock(fd, syscall.F_SETLK, &lockInfo); err != nil {
|
||||||
|
if err == syscall.EAGAIN {
|
||||||
|
err = ErrWouldBlock
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func unlockFile(fd uintptr) error {
|
||||||
|
lockInfo := syscall.Flock_t{
|
||||||
|
Type: syscall.F_UNLCK,
|
||||||
|
Whence: io.SeekStart,
|
||||||
|
Start: 0,
|
||||||
|
Len: 0,
|
||||||
|
}
|
||||||
|
if err := syscall.FcntlFlock(fd, syscall.F_GETLK, &lockInfo); err != nil {
|
||||||
|
if err == syscall.EAGAIN {
|
||||||
|
err = ErrWouldBlock
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
2
vendor/github.com/sevlyar/go-daemon/lock_file_unix.go
generated
vendored
2
vendor/github.com/sevlyar/go-daemon/lock_file_unix.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// +build darwin dragonfly freebsd linux netbsd openbsd plan9 solaris
|
// +build darwin dragonfly freebsd linux netbsd openbsd plan9
|
||||||
|
|
||||||
package daemon
|
package daemon
|
||||||
|
|
||||||
|
11
vendor/github.com/sevlyar/go-daemon/os_executable.go
generated
vendored
Normal file
11
vendor/github.com/sevlyar/go-daemon/os_executable.go
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// +build go1.8
|
||||||
|
|
||||||
|
package daemon
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func osExecutable() (string, error) {
|
||||||
|
return os.Executable()
|
||||||
|
}
|
11
vendor/github.com/sevlyar/go-daemon/os_executable_pre18.go
generated
vendored
Normal file
11
vendor/github.com/sevlyar/go-daemon/os_executable_pre18.go
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// +build !go1.8
|
||||||
|
|
||||||
|
package daemon
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/kardianos/osext"
|
||||||
|
)
|
||||||
|
|
||||||
|
func osExecutable() (string, error) {
|
||||||
|
return osext.Executable()
|
||||||
|
}
|
7
vendor/github.com/sevlyar/go-daemon/syscall_dup.go
generated
vendored
7
vendor/github.com/sevlyar/go-daemon/syscall_dup.go
generated
vendored
@ -1,12 +1,11 @@
|
|||||||
// +build !linux !arm64
|
// +build !linux !arm64
|
||||||
// +build !windows
|
// +build !windows
|
||||||
|
// +build go1.7
|
||||||
|
|
||||||
package daemon
|
package daemon
|
||||||
|
|
||||||
import (
|
import "golang.org/x/sys/unix"
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
func syscallDup(oldfd int, newfd int) (err error) {
|
func syscallDup(oldfd int, newfd int) (err error) {
|
||||||
return syscall.Dup2(oldfd, newfd)
|
return unix.Dup2(oldfd, newfd)
|
||||||
}
|
}
|
||||||
|
13
vendor/github.com/sevlyar/go-daemon/syscall_dup_pre17.go
generated
vendored
Normal file
13
vendor/github.com/sevlyar/go-daemon/syscall_dup_pre17.go
generated
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// +build !linux !arm64
|
||||||
|
// +build !windows
|
||||||
|
// +build !go1.7
|
||||||
|
|
||||||
|
package daemon
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
func syscallDup(oldfd int, newfd int) (err error) {
|
||||||
|
return syscall.Dup2(oldfd, newfd)
|
||||||
|
}
|
2
vendor/github.com/spf13/cobra/.gitignore
generated
vendored
2
vendor/github.com/spf13/cobra/.gitignore
generated
vendored
@ -34,3 +34,5 @@ tags
|
|||||||
*.exe
|
*.exe
|
||||||
|
|
||||||
cobra.test
|
cobra.test
|
||||||
|
|
||||||
|
.idea/*
|
||||||
|
9
vendor/github.com/spf13/cobra/README.md
generated
vendored
9
vendor/github.com/spf13/cobra/README.md
generated
vendored
@ -23,6 +23,7 @@ Many of the most widely used Go projects are built using Cobra, such as:
|
|||||||
[Istio](https://istio.io),
|
[Istio](https://istio.io),
|
||||||
[Prototool](https://github.com/uber/prototool),
|
[Prototool](https://github.com/uber/prototool),
|
||||||
[mattermost-server](https://github.com/mattermost/mattermost-server),
|
[mattermost-server](https://github.com/mattermost/mattermost-server),
|
||||||
|
[Gardener](https://github.com/gardener/gardenctl),
|
||||||
etc.
|
etc.
|
||||||
|
|
||||||
[![Build Status](https://travis-ci.org/spf13/cobra.svg "Travis CI status")](https://travis-ci.org/spf13/cobra)
|
[![Build Status](https://travis-ci.org/spf13/cobra.svg "Travis CI status")](https://travis-ci.org/spf13/cobra)
|
||||||
@ -48,6 +49,7 @@ etc.
|
|||||||
* [Suggestions when "unknown command" happens](#suggestions-when-unknown-command-happens)
|
* [Suggestions when "unknown command" happens](#suggestions-when-unknown-command-happens)
|
||||||
* [Generating documentation for your command](#generating-documentation-for-your-command)
|
* [Generating documentation for your command](#generating-documentation-for-your-command)
|
||||||
* [Generating bash completions](#generating-bash-completions)
|
* [Generating bash completions](#generating-bash-completions)
|
||||||
|
* [Generating zsh completions](#generating-zsh-completions)
|
||||||
- [Contributing](#contributing)
|
- [Contributing](#contributing)
|
||||||
- [License](#license)
|
- [License](#license)
|
||||||
|
|
||||||
@ -336,7 +338,7 @@ rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose out
|
|||||||
A flag can also be assigned locally which will only apply to that specific command.
|
A flag can also be assigned locally which will only apply to that specific command.
|
||||||
|
|
||||||
```go
|
```go
|
||||||
rootCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from")
|
localCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from")
|
||||||
```
|
```
|
||||||
|
|
||||||
### Local Flag on Parent Commands
|
### Local Flag on Parent Commands
|
||||||
@ -719,6 +721,11 @@ Cobra can generate documentation based on subcommands, flags, etc. in the follow
|
|||||||
|
|
||||||
Cobra can generate a bash-completion file. If you add more information to your command, these completions can be amazingly powerful and flexible. Read more about it in [Bash Completions](bash_completions.md).
|
Cobra can generate a bash-completion file. If you add more information to your command, these completions can be amazingly powerful and flexible. Read more about it in [Bash Completions](bash_completions.md).
|
||||||
|
|
||||||
|
## Generating zsh completions
|
||||||
|
|
||||||
|
Cobra can generate zsh-completion file. Read more about it in
|
||||||
|
[Zsh Completions](zsh_completions.md).
|
||||||
|
|
||||||
# Contributing
|
# Contributing
|
||||||
|
|
||||||
1. Fork it
|
1. Fork it
|
||||||
|
48
vendor/github.com/spf13/cobra/bash_completions.go
generated
vendored
48
vendor/github.com/spf13/cobra/bash_completions.go
generated
vendored
@ -545,51 +545,3 @@ func (c *Command) GenBashCompletionFile(filename string) error {
|
|||||||
|
|
||||||
return c.GenBashCompletion(outFile)
|
return c.GenBashCompletion(outFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag if it exists,
|
|
||||||
// and causes your command to report an error if invoked without the flag.
|
|
||||||
func (c *Command) MarkFlagRequired(name string) error {
|
|
||||||
return MarkFlagRequired(c.Flags(), name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarkPersistentFlagRequired adds the BashCompOneRequiredFlag annotation to the named persistent flag if it exists,
|
|
||||||
// and causes your command to report an error if invoked without the flag.
|
|
||||||
func (c *Command) MarkPersistentFlagRequired(name string) error {
|
|
||||||
return MarkFlagRequired(c.PersistentFlags(), name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag if it exists,
|
|
||||||
// and causes your command to report an error if invoked without the flag.
|
|
||||||
func MarkFlagRequired(flags *pflag.FlagSet, name string) error {
|
|
||||||
return flags.SetAnnotation(name, BashCompOneRequiredFlag, []string{"true"})
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarkFlagFilename adds the BashCompFilenameExt annotation to the named flag, if it exists.
|
|
||||||
// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided.
|
|
||||||
func (c *Command) MarkFlagFilename(name string, extensions ...string) error {
|
|
||||||
return MarkFlagFilename(c.Flags(), name, extensions...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarkFlagCustom adds the BashCompCustom annotation to the named flag, if it exists.
|
|
||||||
// Generated bash autocompletion will call the bash function f for the flag.
|
|
||||||
func (c *Command) MarkFlagCustom(name string, f string) error {
|
|
||||||
return MarkFlagCustom(c.Flags(), name, f)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarkPersistentFlagFilename adds the BashCompFilenameExt annotation to the named persistent flag, if it exists.
|
|
||||||
// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided.
|
|
||||||
func (c *Command) MarkPersistentFlagFilename(name string, extensions ...string) error {
|
|
||||||
return MarkFlagFilename(c.PersistentFlags(), name, extensions...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarkFlagFilename adds the BashCompFilenameExt annotation to the named flag in the flag set, if it exists.
|
|
||||||
// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided.
|
|
||||||
func MarkFlagFilename(flags *pflag.FlagSet, name string, extensions ...string) error {
|
|
||||||
return flags.SetAnnotation(name, BashCompFilenameExt, extensions)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarkFlagCustom adds the BashCompCustom annotation to the named flag in the flag set, if it exists.
|
|
||||||
// Generated bash autocompletion will call the bash function f for the flag.
|
|
||||||
func MarkFlagCustom(flags *pflag.FlagSet, name string, f string) error {
|
|
||||||
return flags.SetAnnotation(name, BashCompCustom, []string{f})
|
|
||||||
}
|
|
||||||
|
97
vendor/github.com/spf13/cobra/command.go
generated
vendored
97
vendor/github.com/spf13/cobra/command.go
generated
vendored
@ -177,8 +177,6 @@ type Command struct {
|
|||||||
// that we can use on every pflag set and children commands
|
// that we can use on every pflag set and children commands
|
||||||
globNormFunc func(f *flag.FlagSet, name string) flag.NormalizedName
|
globNormFunc func(f *flag.FlagSet, name string) flag.NormalizedName
|
||||||
|
|
||||||
// output is an output writer defined by user.
|
|
||||||
output io.Writer
|
|
||||||
// usageFunc is usage func defined by user.
|
// usageFunc is usage func defined by user.
|
||||||
usageFunc func(*Command) error
|
usageFunc func(*Command) error
|
||||||
// usageTemplate is usage template defined by user.
|
// usageTemplate is usage template defined by user.
|
||||||
@ -195,6 +193,13 @@ type Command struct {
|
|||||||
helpCommand *Command
|
helpCommand *Command
|
||||||
// versionTemplate is the version template defined by user.
|
// versionTemplate is the version template defined by user.
|
||||||
versionTemplate string
|
versionTemplate string
|
||||||
|
|
||||||
|
// inReader is a reader defined by the user that replaces stdin
|
||||||
|
inReader io.Reader
|
||||||
|
// outWriter is a writer defined by the user that replaces stdout
|
||||||
|
outWriter io.Writer
|
||||||
|
// errWriter is a writer defined by the user that replaces stderr
|
||||||
|
errWriter io.Writer
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetArgs sets arguments for the command. It is set to os.Args[1:] by default, if desired, can be overridden
|
// SetArgs sets arguments for the command. It is set to os.Args[1:] by default, if desired, can be overridden
|
||||||
@ -205,8 +210,28 @@ func (c *Command) SetArgs(a []string) {
|
|||||||
|
|
||||||
// SetOutput sets the destination for usage and error messages.
|
// SetOutput sets the destination for usage and error messages.
|
||||||
// If output is nil, os.Stderr is used.
|
// If output is nil, os.Stderr is used.
|
||||||
|
// Deprecated: Use SetOut and/or SetErr instead
|
||||||
func (c *Command) SetOutput(output io.Writer) {
|
func (c *Command) SetOutput(output io.Writer) {
|
||||||
c.output = output
|
c.outWriter = output
|
||||||
|
c.errWriter = output
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOut sets the destination for usage messages.
|
||||||
|
// If newOut is nil, os.Stdout is used.
|
||||||
|
func (c *Command) SetOut(newOut io.Writer) {
|
||||||
|
c.outWriter = newOut
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetErr sets the destination for error messages.
|
||||||
|
// If newErr is nil, os.Stderr is used.
|
||||||
|
func (c *Command) SetErr(newErr io.Writer) {
|
||||||
|
c.errWriter = newErr
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOut sets the source for input data
|
||||||
|
// If newIn is nil, os.Stdin is used.
|
||||||
|
func (c *Command) SetIn(newIn io.Reader) {
|
||||||
|
c.inReader = newIn
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetUsageFunc sets usage function. Usage can be defined by application.
|
// SetUsageFunc sets usage function. Usage can be defined by application.
|
||||||
@ -267,9 +292,19 @@ func (c *Command) OutOrStderr() io.Writer {
|
|||||||
return c.getOut(os.Stderr)
|
return c.getOut(os.Stderr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ErrOrStderr returns output to stderr
|
||||||
|
func (c *Command) ErrOrStderr() io.Writer {
|
||||||
|
return c.getErr(os.Stderr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ErrOrStderr returns output to stderr
|
||||||
|
func (c *Command) InOrStdin() io.Reader {
|
||||||
|
return c.getIn(os.Stdin)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Command) getOut(def io.Writer) io.Writer {
|
func (c *Command) getOut(def io.Writer) io.Writer {
|
||||||
if c.output != nil {
|
if c.outWriter != nil {
|
||||||
return c.output
|
return c.outWriter
|
||||||
}
|
}
|
||||||
if c.HasParent() {
|
if c.HasParent() {
|
||||||
return c.parent.getOut(def)
|
return c.parent.getOut(def)
|
||||||
@ -277,6 +312,26 @@ func (c *Command) getOut(def io.Writer) io.Writer {
|
|||||||
return def
|
return def
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Command) getErr(def io.Writer) io.Writer {
|
||||||
|
if c.errWriter != nil {
|
||||||
|
return c.errWriter
|
||||||
|
}
|
||||||
|
if c.HasParent() {
|
||||||
|
return c.parent.getErr(def)
|
||||||
|
}
|
||||||
|
return def
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Command) getIn(def io.Reader) io.Reader {
|
||||||
|
if c.inReader != nil {
|
||||||
|
return c.inReader
|
||||||
|
}
|
||||||
|
if c.HasParent() {
|
||||||
|
return c.parent.getIn(def)
|
||||||
|
}
|
||||||
|
return def
|
||||||
|
}
|
||||||
|
|
||||||
// UsageFunc returns either the function set by SetUsageFunc for this command
|
// UsageFunc returns either the function set by SetUsageFunc for this command
|
||||||
// or a parent, or it returns a default usage function.
|
// or a parent, or it returns a default usage function.
|
||||||
func (c *Command) UsageFunc() (f func(*Command) error) {
|
func (c *Command) UsageFunc() (f func(*Command) error) {
|
||||||
@ -329,13 +384,22 @@ func (c *Command) Help() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// UsageString return usage string.
|
// UsageString returns usage string.
|
||||||
func (c *Command) UsageString() string {
|
func (c *Command) UsageString() string {
|
||||||
tmpOutput := c.output
|
// Storing normal writers
|
||||||
|
tmpOutput := c.outWriter
|
||||||
|
tmpErr := c.errWriter
|
||||||
|
|
||||||
bb := new(bytes.Buffer)
|
bb := new(bytes.Buffer)
|
||||||
c.SetOutput(bb)
|
c.outWriter = bb
|
||||||
|
c.errWriter = bb
|
||||||
|
|
||||||
c.Usage()
|
c.Usage()
|
||||||
c.output = tmpOutput
|
|
||||||
|
// Setting things back to normal
|
||||||
|
c.outWriter = tmpOutput
|
||||||
|
c.errWriter = tmpErr
|
||||||
|
|
||||||
return bb.String()
|
return bb.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1068,6 +1132,21 @@ func (c *Command) Printf(format string, i ...interface{}) {
|
|||||||
c.Print(fmt.Sprintf(format, i...))
|
c.Print(fmt.Sprintf(format, i...))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PrintErr is a convenience method to Print to the defined Err output, fallback to Stderr if not set.
|
||||||
|
func (c *Command) PrintErr(i ...interface{}) {
|
||||||
|
fmt.Fprint(c.ErrOrStderr(), i...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrintErrln is a convenience method to Println to the defined Err output, fallback to Stderr if not set.
|
||||||
|
func (c *Command) PrintErrln(i ...interface{}) {
|
||||||
|
c.Print(fmt.Sprintln(i...))
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrintErrf is a convenience method to Printf to the defined Err output, fallback to Stderr if not set.
|
||||||
|
func (c *Command) PrintErrf(format string, i ...interface{}) {
|
||||||
|
c.Print(fmt.Sprintf(format, i...))
|
||||||
|
}
|
||||||
|
|
||||||
// CommandPath returns the full path to this command.
|
// CommandPath returns the full path to this command.
|
||||||
func (c *Command) CommandPath() string {
|
func (c *Command) CommandPath() string {
|
||||||
if c.HasParent() {
|
if c.HasParent() {
|
||||||
|
100
vendor/github.com/spf13/cobra/powershell_completions.go
generated
vendored
Normal file
100
vendor/github.com/spf13/cobra/powershell_completions.go
generated
vendored
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
// PowerShell completions are based on the amazing work from clap:
|
||||||
|
// https://github.com/clap-rs/clap/blob/3294d18efe5f264d12c9035f404c7d189d4824e1/src/completions/powershell.rs
|
||||||
|
//
|
||||||
|
// The generated scripts require PowerShell v5.0+ (which comes Windows 10, but
|
||||||
|
// can be downloaded separately for windows 7 or 8.1).
|
||||||
|
|
||||||
|
package cobra
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/spf13/pflag"
|
||||||
|
)
|
||||||
|
|
||||||
|
var powerShellCompletionTemplate = `using namespace System.Management.Automation
|
||||||
|
using namespace System.Management.Automation.Language
|
||||||
|
Register-ArgumentCompleter -Native -CommandName '%s' -ScriptBlock {
|
||||||
|
param($wordToComplete, $commandAst, $cursorPosition)
|
||||||
|
$commandElements = $commandAst.CommandElements
|
||||||
|
$command = @(
|
||||||
|
'%s'
|
||||||
|
for ($i = 1; $i -lt $commandElements.Count; $i++) {
|
||||||
|
$element = $commandElements[$i]
|
||||||
|
if ($element -isnot [StringConstantExpressionAst] -or
|
||||||
|
$element.StringConstantType -ne [StringConstantType]::BareWord -or
|
||||||
|
$element.Value.StartsWith('-')) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
$element.Value
|
||||||
|
}
|
||||||
|
) -join ';'
|
||||||
|
$completions = @(switch ($command) {%s
|
||||||
|
})
|
||||||
|
$completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
|
||||||
|
Sort-Object -Property ListItemText
|
||||||
|
}`
|
||||||
|
|
||||||
|
func generatePowerShellSubcommandCases(out io.Writer, cmd *Command, previousCommandName string) {
|
||||||
|
var cmdName string
|
||||||
|
if previousCommandName == "" {
|
||||||
|
cmdName = cmd.Name()
|
||||||
|
} else {
|
||||||
|
cmdName = fmt.Sprintf("%s;%s", previousCommandName, cmd.Name())
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Fprintf(out, "\n '%s' {", cmdName)
|
||||||
|
|
||||||
|
cmd.Flags().VisitAll(func(flag *pflag.Flag) {
|
||||||
|
if nonCompletableFlag(flag) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
usage := escapeStringForPowerShell(flag.Usage)
|
||||||
|
if len(flag.Shorthand) > 0 {
|
||||||
|
fmt.Fprintf(out, "\n [CompletionResult]::new('-%s', '%s', [CompletionResultType]::ParameterName, '%s')", flag.Shorthand, flag.Shorthand, usage)
|
||||||
|
}
|
||||||
|
fmt.Fprintf(out, "\n [CompletionResult]::new('--%s', '%s', [CompletionResultType]::ParameterName, '%s')", flag.Name, flag.Name, usage)
|
||||||
|
})
|
||||||
|
|
||||||
|
for _, subCmd := range cmd.Commands() {
|
||||||
|
usage := escapeStringForPowerShell(subCmd.Short)
|
||||||
|
fmt.Fprintf(out, "\n [CompletionResult]::new('%s', '%s', [CompletionResultType]::ParameterValue, '%s')", subCmd.Name(), subCmd.Name(), usage)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Fprint(out, "\n break\n }")
|
||||||
|
|
||||||
|
for _, subCmd := range cmd.Commands() {
|
||||||
|
generatePowerShellSubcommandCases(out, subCmd, cmdName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func escapeStringForPowerShell(s string) string {
|
||||||
|
return strings.Replace(s, "'", "''", -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenPowerShellCompletion generates PowerShell completion file and writes to the passed writer.
|
||||||
|
func (c *Command) GenPowerShellCompletion(w io.Writer) error {
|
||||||
|
buf := new(bytes.Buffer)
|
||||||
|
|
||||||
|
var subCommandCases bytes.Buffer
|
||||||
|
generatePowerShellSubcommandCases(&subCommandCases, c, "")
|
||||||
|
fmt.Fprintf(buf, powerShellCompletionTemplate, c.Name(), c.Name(), subCommandCases.String())
|
||||||
|
|
||||||
|
_, err := buf.WriteTo(w)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenPowerShellCompletionFile generates PowerShell completion file.
|
||||||
|
func (c *Command) GenPowerShellCompletionFile(filename string) error {
|
||||||
|
outFile, err := os.Create(filename)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer outFile.Close()
|
||||||
|
|
||||||
|
return c.GenPowerShellCompletion(outFile)
|
||||||
|
}
|
14
vendor/github.com/spf13/cobra/powershell_completions.md
generated
vendored
Normal file
14
vendor/github.com/spf13/cobra/powershell_completions.md
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Generating PowerShell Completions For Your Own cobra.Command
|
||||||
|
|
||||||
|
Cobra can generate PowerShell completion scripts. Users need PowerShell version 5.0 or above, which comes with Windows 10 and can be downloaded separately for Windows 7 or 8.1. They can then write the completions to a file and source this file from their PowerShell profile, which is referenced by the `$Profile` environment variable. See `Get-Help about_Profiles` for more info about PowerShell profiles.
|
||||||
|
|
||||||
|
# What's supported
|
||||||
|
|
||||||
|
- Completion for subcommands using their `.Short` description
|
||||||
|
- Completion for non-hidden flags using their `.Name` and `.Shorthand`
|
||||||
|
|
||||||
|
# What's not yet supported
|
||||||
|
|
||||||
|
- Command aliases
|
||||||
|
- Required, filename or custom flags (they will work like normal flags)
|
||||||
|
- Custom completion scripts
|
85
vendor/github.com/spf13/cobra/shell_completions.go
generated
vendored
Normal file
85
vendor/github.com/spf13/cobra/shell_completions.go
generated
vendored
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
package cobra
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/spf13/pflag"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag if it exists,
|
||||||
|
// and causes your command to report an error if invoked without the flag.
|
||||||
|
func (c *Command) MarkFlagRequired(name string) error {
|
||||||
|
return MarkFlagRequired(c.Flags(), name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkPersistentFlagRequired adds the BashCompOneRequiredFlag annotation to the named persistent flag if it exists,
|
||||||
|
// and causes your command to report an error if invoked without the flag.
|
||||||
|
func (c *Command) MarkPersistentFlagRequired(name string) error {
|
||||||
|
return MarkFlagRequired(c.PersistentFlags(), name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkFlagRequired adds the BashCompOneRequiredFlag annotation to the named flag if it exists,
|
||||||
|
// and causes your command to report an error if invoked without the flag.
|
||||||
|
func MarkFlagRequired(flags *pflag.FlagSet, name string) error {
|
||||||
|
return flags.SetAnnotation(name, BashCompOneRequiredFlag, []string{"true"})
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkFlagFilename adds the BashCompFilenameExt annotation to the named flag, if it exists.
|
||||||
|
// Generated bash autocompletion will select filenames for the flag, limiting to named extensions if provided.
|
||||||
|
func (c *Command) MarkFlagFilename(name string, extensions ...string) error {
|
||||||
|
return MarkFlagFilename(c.Flags(), name, extensions...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkFlagCustom adds the BashCompCustom annotation to the named flag, if it exists.
|
||||||
|
// Generated bash autocompletion will call the bash function f for the flag.
|
||||||
|
func (c *Command) MarkFlagCustom(name string, f string) error {
|
||||||
|
return MarkFlagCustom(c.Flags(), name, f)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkPersistentFlagFilename instructs the various shell completion
|
||||||
|
// implementations to limit completions for this persistent flag to the
|
||||||
|
// specified extensions (patterns).
|
||||||
|
//
|
||||||
|
// Shell Completion compatibility matrix: bash, zsh
|
||||||
|
func (c *Command) MarkPersistentFlagFilename(name string, extensions ...string) error {
|
||||||
|
return MarkFlagFilename(c.PersistentFlags(), name, extensions...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkFlagFilename instructs the various shell completion implementations to
|
||||||
|
// limit completions for this flag to the specified extensions (patterns).
|
||||||
|
//
|
||||||
|
// Shell Completion compatibility matrix: bash, zsh
|
||||||
|
func MarkFlagFilename(flags *pflag.FlagSet, name string, extensions ...string) error {
|
||||||
|
return flags.SetAnnotation(name, BashCompFilenameExt, extensions)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkFlagCustom instructs the various shell completion implementations to
|
||||||
|
// limit completions for this flag to the specified extensions (patterns).
|
||||||
|
//
|
||||||
|
// Shell Completion compatibility matrix: bash, zsh
|
||||||
|
func MarkFlagCustom(flags *pflag.FlagSet, name string, f string) error {
|
||||||
|
return flags.SetAnnotation(name, BashCompCustom, []string{f})
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkFlagDirname instructs the various shell completion implementations to
|
||||||
|
// complete only directories with this named flag.
|
||||||
|
//
|
||||||
|
// Shell Completion compatibility matrix: zsh
|
||||||
|
func (c *Command) MarkFlagDirname(name string) error {
|
||||||
|
return MarkFlagDirname(c.Flags(), name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkPersistentFlagDirname instructs the various shell completion
|
||||||
|
// implementations to complete only directories with this persistent named flag.
|
||||||
|
//
|
||||||
|
// Shell Completion compatibility matrix: zsh
|
||||||
|
func (c *Command) MarkPersistentFlagDirname(name string) error {
|
||||||
|
return MarkFlagDirname(c.PersistentFlags(), name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkFlagDirname instructs the various shell completion implementations to
|
||||||
|
// complete only directories with this specified flag.
|
||||||
|
//
|
||||||
|
// Shell Completion compatibility matrix: zsh
|
||||||
|
func MarkFlagDirname(flags *pflag.FlagSet, name string) error {
|
||||||
|
zshPattern := "-(/)"
|
||||||
|
return flags.SetAnnotation(name, zshCompDirname, []string{zshPattern})
|
||||||
|
}
|
400
vendor/github.com/spf13/cobra/zsh_completions.go
generated
vendored
400
vendor/github.com/spf13/cobra/zsh_completions.go
generated
vendored
@ -1,13 +1,102 @@
|
|||||||
package cobra
|
package cobra
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
"text/template"
|
||||||
|
|
||||||
|
"github.com/spf13/pflag"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
zshCompArgumentAnnotation = "cobra_annotations_zsh_completion_argument_annotation"
|
||||||
|
zshCompArgumentFilenameComp = "cobra_annotations_zsh_completion_argument_file_completion"
|
||||||
|
zshCompArgumentWordComp = "cobra_annotations_zsh_completion_argument_word_completion"
|
||||||
|
zshCompDirname = "cobra_annotations_zsh_dirname"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
zshCompFuncMap = template.FuncMap{
|
||||||
|
"genZshFuncName": zshCompGenFuncName,
|
||||||
|
"extractFlags": zshCompExtractFlag,
|
||||||
|
"genFlagEntryForZshArguments": zshCompGenFlagEntryForArguments,
|
||||||
|
"extractArgsCompletions": zshCompExtractArgumentCompletionHintsForRendering,
|
||||||
|
}
|
||||||
|
zshCompletionText = `
|
||||||
|
{{/* should accept Command (that contains subcommands) as parameter */}}
|
||||||
|
{{define "argumentsC" -}}
|
||||||
|
{{ $cmdPath := genZshFuncName .}}
|
||||||
|
function {{$cmdPath}} {
|
||||||
|
local -a commands
|
||||||
|
|
||||||
|
_arguments -C \{{- range extractFlags .}}
|
||||||
|
{{genFlagEntryForZshArguments .}} \{{- end}}
|
||||||
|
"1: :->cmnds" \
|
||||||
|
"*::arg:->args"
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
cmnds)
|
||||||
|
commands=({{range .Commands}}{{if not .Hidden}}
|
||||||
|
"{{.Name}}:{{.Short}}"{{end}}{{end}}
|
||||||
|
)
|
||||||
|
_describe "command" commands
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$words[1]" in {{- range .Commands}}{{if not .Hidden}}
|
||||||
|
{{.Name}})
|
||||||
|
{{$cmdPath}}_{{.Name}}
|
||||||
|
;;{{end}}{{end}}
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
{{range .Commands}}{{if not .Hidden}}
|
||||||
|
{{template "selectCmdTemplate" .}}
|
||||||
|
{{- end}}{{end}}
|
||||||
|
{{- end}}
|
||||||
|
|
||||||
|
{{/* should accept Command without subcommands as parameter */}}
|
||||||
|
{{define "arguments" -}}
|
||||||
|
function {{genZshFuncName .}} {
|
||||||
|
{{" _arguments"}}{{range extractFlags .}} \
|
||||||
|
{{genFlagEntryForZshArguments . -}}
|
||||||
|
{{end}}{{range extractArgsCompletions .}} \
|
||||||
|
{{.}}{{end}}
|
||||||
|
}
|
||||||
|
{{end}}
|
||||||
|
|
||||||
|
{{/* dispatcher for commands with or without subcommands */}}
|
||||||
|
{{define "selectCmdTemplate" -}}
|
||||||
|
{{if .Hidden}}{{/* ignore hidden*/}}{{else -}}
|
||||||
|
{{if .Commands}}{{template "argumentsC" .}}{{else}}{{template "arguments" .}}{{end}}
|
||||||
|
{{- end}}
|
||||||
|
{{- end}}
|
||||||
|
|
||||||
|
{{/* template entry point */}}
|
||||||
|
{{define "Main" -}}
|
||||||
|
#compdef _{{.Name}} {{.Name}}
|
||||||
|
|
||||||
|
{{template "selectCmdTemplate" .}}
|
||||||
|
{{end}}
|
||||||
|
`
|
||||||
|
)
|
||||||
|
|
||||||
|
// zshCompArgsAnnotation is used to encode/decode zsh completion for
|
||||||
|
// arguments to/from Command.Annotations.
|
||||||
|
type zshCompArgsAnnotation map[int]zshCompArgHint
|
||||||
|
|
||||||
|
type zshCompArgHint struct {
|
||||||
|
// Indicates the type of the completion to use. One of:
|
||||||
|
// zshCompArgumentFilenameComp or zshCompArgumentWordComp
|
||||||
|
Tipe string `json:"type"`
|
||||||
|
|
||||||
|
// A value for the type above (globs for file completion or words)
|
||||||
|
Options []string `json:"options"`
|
||||||
|
}
|
||||||
|
|
||||||
// GenZshCompletionFile generates zsh completion file.
|
// GenZshCompletionFile generates zsh completion file.
|
||||||
func (c *Command) GenZshCompletionFile(filename string) error {
|
func (c *Command) GenZshCompletionFile(filename string) error {
|
||||||
outFile, err := os.Create(filename)
|
outFile, err := os.Create(filename)
|
||||||
@ -19,108 +108,229 @@ func (c *Command) GenZshCompletionFile(filename string) error {
|
|||||||
return c.GenZshCompletion(outFile)
|
return c.GenZshCompletion(outFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenZshCompletion generates a zsh completion file and writes to the passed writer.
|
// GenZshCompletion generates a zsh completion file and writes to the passed
|
||||||
|
// writer. The completion always run on the root command regardless of the
|
||||||
|
// command it was called from.
|
||||||
func (c *Command) GenZshCompletion(w io.Writer) error {
|
func (c *Command) GenZshCompletion(w io.Writer) error {
|
||||||
buf := new(bytes.Buffer)
|
tmpl, err := template.New("Main").Funcs(zshCompFuncMap).Parse(zshCompletionText)
|
||||||
|
if err != nil {
|
||||||
writeHeader(buf, c)
|
return fmt.Errorf("error creating zsh completion template: %v", err)
|
||||||
maxDepth := maxDepth(c)
|
|
||||||
writeLevelMapping(buf, maxDepth)
|
|
||||||
writeLevelCases(buf, maxDepth, c)
|
|
||||||
|
|
||||||
_, err := buf.WriteTo(w)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func writeHeader(w io.Writer, cmd *Command) {
|
|
||||||
fmt.Fprintf(w, "#compdef %s\n\n", cmd.Name())
|
|
||||||
}
|
|
||||||
|
|
||||||
func maxDepth(c *Command) int {
|
|
||||||
if len(c.Commands()) == 0 {
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
maxDepthSub := 0
|
return tmpl.Execute(w, c.Root())
|
||||||
for _, s := range c.Commands() {
|
}
|
||||||
subDepth := maxDepth(s)
|
|
||||||
if subDepth > maxDepthSub {
|
// MarkZshCompPositionalArgumentFile marks the specified argument (first
|
||||||
maxDepthSub = subDepth
|
// argument is 1) as completed by file selection. patterns (e.g. "*.txt") are
|
||||||
|
// optional - if not provided the completion will search for all files.
|
||||||
|
func (c *Command) MarkZshCompPositionalArgumentFile(argPosition int, patterns ...string) error {
|
||||||
|
if argPosition < 1 {
|
||||||
|
return fmt.Errorf("Invalid argument position (%d)", argPosition)
|
||||||
|
}
|
||||||
|
annotation, err := c.zshCompGetArgsAnnotations()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if c.zshcompArgsAnnotationnIsDuplicatePosition(annotation, argPosition) {
|
||||||
|
return fmt.Errorf("Duplicate annotation for positional argument at index %d", argPosition)
|
||||||
|
}
|
||||||
|
annotation[argPosition] = zshCompArgHint{
|
||||||
|
Tipe: zshCompArgumentFilenameComp,
|
||||||
|
Options: patterns,
|
||||||
|
}
|
||||||
|
return c.zshCompSetArgsAnnotations(annotation)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkZshCompPositionalArgumentWords marks the specified positional argument
|
||||||
|
// (first argument is 1) as completed by the provided words. At east one word
|
||||||
|
// must be provided, spaces within words will be offered completion with
|
||||||
|
// "word\ word".
|
||||||
|
func (c *Command) MarkZshCompPositionalArgumentWords(argPosition int, words ...string) error {
|
||||||
|
if argPosition < 1 {
|
||||||
|
return fmt.Errorf("Invalid argument position (%d)", argPosition)
|
||||||
|
}
|
||||||
|
if len(words) == 0 {
|
||||||
|
return fmt.Errorf("Trying to set empty word list for positional argument %d", argPosition)
|
||||||
|
}
|
||||||
|
annotation, err := c.zshCompGetArgsAnnotations()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if c.zshcompArgsAnnotationnIsDuplicatePosition(annotation, argPosition) {
|
||||||
|
return fmt.Errorf("Duplicate annotation for positional argument at index %d", argPosition)
|
||||||
|
}
|
||||||
|
annotation[argPosition] = zshCompArgHint{
|
||||||
|
Tipe: zshCompArgumentWordComp,
|
||||||
|
Options: words,
|
||||||
|
}
|
||||||
|
return c.zshCompSetArgsAnnotations(annotation)
|
||||||
|
}
|
||||||
|
|
||||||
|
func zshCompExtractArgumentCompletionHintsForRendering(c *Command) ([]string, error) {
|
||||||
|
var result []string
|
||||||
|
annotation, err := c.zshCompGetArgsAnnotations()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for k, v := range annotation {
|
||||||
|
s, err := zshCompRenderZshCompArgHint(k, v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
result = append(result, s)
|
||||||
|
}
|
||||||
|
if len(c.ValidArgs) > 0 {
|
||||||
|
if _, positionOneExists := annotation[1]; !positionOneExists {
|
||||||
|
s, err := zshCompRenderZshCompArgHint(1, zshCompArgHint{
|
||||||
|
Tipe: zshCompArgumentWordComp,
|
||||||
|
Options: c.ValidArgs,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
result = append(result, s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1 + maxDepthSub
|
sort.Strings(result)
|
||||||
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeLevelMapping(w io.Writer, numLevels int) {
|
func zshCompRenderZshCompArgHint(i int, z zshCompArgHint) (string, error) {
|
||||||
fmt.Fprintln(w, `_arguments \`)
|
switch t := z.Tipe; t {
|
||||||
for i := 1; i <= numLevels; i++ {
|
case zshCompArgumentFilenameComp:
|
||||||
fmt.Fprintf(w, ` '%d: :->level%d' \`, i, i)
|
var globs []string
|
||||||
fmt.Fprintln(w)
|
for _, g := range z.Options {
|
||||||
}
|
globs = append(globs, fmt.Sprintf(`-g "%s"`, g))
|
||||||
fmt.Fprintf(w, ` '%d: :%s'`, numLevels+1, "_files")
|
|
||||||
fmt.Fprintln(w)
|
|
||||||
}
|
|
||||||
|
|
||||||
func writeLevelCases(w io.Writer, maxDepth int, root *Command) {
|
|
||||||
fmt.Fprintln(w, "case $state in")
|
|
||||||
defer fmt.Fprintln(w, "esac")
|
|
||||||
|
|
||||||
for i := 1; i <= maxDepth; i++ {
|
|
||||||
fmt.Fprintf(w, " level%d)\n", i)
|
|
||||||
writeLevel(w, root, i)
|
|
||||||
fmt.Fprintln(w, " ;;")
|
|
||||||
}
|
|
||||||
fmt.Fprintln(w, " *)")
|
|
||||||
fmt.Fprintln(w, " _arguments '*: :_files'")
|
|
||||||
fmt.Fprintln(w, " ;;")
|
|
||||||
}
|
|
||||||
|
|
||||||
func writeLevel(w io.Writer, root *Command, i int) {
|
|
||||||
fmt.Fprintf(w, " case $words[%d] in\n", i)
|
|
||||||
defer fmt.Fprintln(w, " esac")
|
|
||||||
|
|
||||||
commands := filterByLevel(root, i)
|
|
||||||
byParent := groupByParent(commands)
|
|
||||||
|
|
||||||
for p, c := range byParent {
|
|
||||||
names := names(c)
|
|
||||||
fmt.Fprintf(w, " %s)\n", p)
|
|
||||||
fmt.Fprintf(w, " _arguments '%d: :(%s)'\n", i, strings.Join(names, " "))
|
|
||||||
fmt.Fprintln(w, " ;;")
|
|
||||||
}
|
|
||||||
fmt.Fprintln(w, " *)")
|
|
||||||
fmt.Fprintln(w, " _arguments '*: :_files'")
|
|
||||||
fmt.Fprintln(w, " ;;")
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func filterByLevel(c *Command, l int) []*Command {
|
|
||||||
cs := make([]*Command, 0)
|
|
||||||
if l == 0 {
|
|
||||||
cs = append(cs, c)
|
|
||||||
return cs
|
|
||||||
}
|
|
||||||
for _, s := range c.Commands() {
|
|
||||||
cs = append(cs, filterByLevel(s, l-1)...)
|
|
||||||
}
|
|
||||||
return cs
|
|
||||||
}
|
|
||||||
|
|
||||||
func groupByParent(commands []*Command) map[string][]*Command {
|
|
||||||
m := make(map[string][]*Command)
|
|
||||||
for _, c := range commands {
|
|
||||||
parent := c.Parent()
|
|
||||||
if parent == nil {
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
m[parent.Name()] = append(m[parent.Name()], c)
|
return fmt.Sprintf(`'%d: :_files %s'`, i, strings.Join(globs, " ")), nil
|
||||||
|
case zshCompArgumentWordComp:
|
||||||
|
var words []string
|
||||||
|
for _, w := range z.Options {
|
||||||
|
words = append(words, fmt.Sprintf("%q", w))
|
||||||
|
}
|
||||||
|
return fmt.Sprintf(`'%d: :(%s)'`, i, strings.Join(words, " ")), nil
|
||||||
|
default:
|
||||||
|
return "", fmt.Errorf("Invalid zsh argument completion annotation: %s", t)
|
||||||
}
|
}
|
||||||
return m
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func names(commands []*Command) []string {
|
func (c *Command) zshcompArgsAnnotationnIsDuplicatePosition(annotation zshCompArgsAnnotation, position int) bool {
|
||||||
ns := make([]string, len(commands))
|
_, dup := annotation[position]
|
||||||
for i, c := range commands {
|
return dup
|
||||||
ns[i] = c.Name()
|
}
|
||||||
}
|
|
||||||
return ns
|
func (c *Command) zshCompGetArgsAnnotations() (zshCompArgsAnnotation, error) {
|
||||||
|
annotation := make(zshCompArgsAnnotation)
|
||||||
|
annotationString, ok := c.Annotations[zshCompArgumentAnnotation]
|
||||||
|
if !ok {
|
||||||
|
return annotation, nil
|
||||||
|
}
|
||||||
|
err := json.Unmarshal([]byte(annotationString), &annotation)
|
||||||
|
if err != nil {
|
||||||
|
return annotation, fmt.Errorf("Error unmarshaling zsh argument annotation: %v", err)
|
||||||
|
}
|
||||||
|
return annotation, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Command) zshCompSetArgsAnnotations(annotation zshCompArgsAnnotation) error {
|
||||||
|
jsn, err := json.Marshal(annotation)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error marshaling zsh argument annotation: %v", err)
|
||||||
|
}
|
||||||
|
if c.Annotations == nil {
|
||||||
|
c.Annotations = make(map[string]string)
|
||||||
|
}
|
||||||
|
c.Annotations[zshCompArgumentAnnotation] = string(jsn)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func zshCompGenFuncName(c *Command) string {
|
||||||
|
if c.HasParent() {
|
||||||
|
return zshCompGenFuncName(c.Parent()) + "_" + c.Name()
|
||||||
|
}
|
||||||
|
return "_" + c.Name()
|
||||||
|
}
|
||||||
|
|
||||||
|
func zshCompExtractFlag(c *Command) []*pflag.Flag {
|
||||||
|
var flags []*pflag.Flag
|
||||||
|
c.LocalFlags().VisitAll(func(f *pflag.Flag) {
|
||||||
|
if !f.Hidden {
|
||||||
|
flags = append(flags, f)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
c.InheritedFlags().VisitAll(func(f *pflag.Flag) {
|
||||||
|
if !f.Hidden {
|
||||||
|
flags = append(flags, f)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return flags
|
||||||
|
}
|
||||||
|
|
||||||
|
// zshCompGenFlagEntryForArguments returns an entry that matches _arguments
|
||||||
|
// zsh-completion parameters. It's too complicated to generate in a template.
|
||||||
|
func zshCompGenFlagEntryForArguments(f *pflag.Flag) string {
|
||||||
|
if f.Name == "" || f.Shorthand == "" {
|
||||||
|
return zshCompGenFlagEntryForSingleOptionFlag(f)
|
||||||
|
}
|
||||||
|
return zshCompGenFlagEntryForMultiOptionFlag(f)
|
||||||
|
}
|
||||||
|
|
||||||
|
func zshCompGenFlagEntryForSingleOptionFlag(f *pflag.Flag) string {
|
||||||
|
var option, multiMark, extras string
|
||||||
|
|
||||||
|
if zshCompFlagCouldBeSpecifiedMoreThenOnce(f) {
|
||||||
|
multiMark = "*"
|
||||||
|
}
|
||||||
|
|
||||||
|
option = "--" + f.Name
|
||||||
|
if option == "--" {
|
||||||
|
option = "-" + f.Shorthand
|
||||||
|
}
|
||||||
|
extras = zshCompGenFlagEntryExtras(f)
|
||||||
|
|
||||||
|
return fmt.Sprintf(`'%s%s[%s]%s'`, multiMark, option, zshCompQuoteFlagDescription(f.Usage), extras)
|
||||||
|
}
|
||||||
|
|
||||||
|
func zshCompGenFlagEntryForMultiOptionFlag(f *pflag.Flag) string {
|
||||||
|
var options, parenMultiMark, curlyMultiMark, extras string
|
||||||
|
|
||||||
|
if zshCompFlagCouldBeSpecifiedMoreThenOnce(f) {
|
||||||
|
parenMultiMark = "*"
|
||||||
|
curlyMultiMark = "\\*"
|
||||||
|
}
|
||||||
|
|
||||||
|
options = fmt.Sprintf(`'(%s-%s %s--%s)'{%s-%s,%s--%s}`,
|
||||||
|
parenMultiMark, f.Shorthand, parenMultiMark, f.Name, curlyMultiMark, f.Shorthand, curlyMultiMark, f.Name)
|
||||||
|
extras = zshCompGenFlagEntryExtras(f)
|
||||||
|
|
||||||
|
return fmt.Sprintf(`%s'[%s]%s'`, options, zshCompQuoteFlagDescription(f.Usage), extras)
|
||||||
|
}
|
||||||
|
|
||||||
|
func zshCompGenFlagEntryExtras(f *pflag.Flag) string {
|
||||||
|
if f.NoOptDefVal != "" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
extras := ":" // allow options for flag (even without assistance)
|
||||||
|
for key, values := range f.Annotations {
|
||||||
|
switch key {
|
||||||
|
case zshCompDirname:
|
||||||
|
extras = fmt.Sprintf(":filename:_files -g %q", values[0])
|
||||||
|
case BashCompFilenameExt:
|
||||||
|
extras = ":filename:_files"
|
||||||
|
for _, pattern := range values {
|
||||||
|
extras = extras + fmt.Sprintf(` -g "%s"`, pattern)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return extras
|
||||||
|
}
|
||||||
|
|
||||||
|
func zshCompFlagCouldBeSpecifiedMoreThenOnce(f *pflag.Flag) bool {
|
||||||
|
return strings.Contains(f.Value.Type(), "Slice") ||
|
||||||
|
strings.Contains(f.Value.Type(), "Array")
|
||||||
|
}
|
||||||
|
|
||||||
|
func zshCompQuoteFlagDescription(s string) string {
|
||||||
|
return strings.Replace(s, "'", `'\''`, -1)
|
||||||
}
|
}
|
||||||
|
39
vendor/github.com/spf13/cobra/zsh_completions.md
generated
vendored
Normal file
39
vendor/github.com/spf13/cobra/zsh_completions.md
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
## Generating Zsh Completion for your cobra.Command
|
||||||
|
|
||||||
|
Cobra supports native Zsh completion generated from the root `cobra.Command`.
|
||||||
|
The generated completion script should be put somewhere in your `$fpath` named
|
||||||
|
`_<YOUR COMMAND>`.
|
||||||
|
|
||||||
|
### What's Supported
|
||||||
|
|
||||||
|
* Completion for all non-hidden subcommands using their `.Short` description.
|
||||||
|
* Completion for all non-hidden flags using the following rules:
|
||||||
|
* Filename completion works by marking the flag with `cmd.MarkFlagFilename...`
|
||||||
|
family of commands.
|
||||||
|
* The requirement for argument to the flag is decided by the `.NoOptDefVal`
|
||||||
|
flag value - if it's empty then completion will expect an argument.
|
||||||
|
* Flags of one of the various `*Array` and `*Slice` types supports multiple
|
||||||
|
specifications (with or without argument depending on the specific type).
|
||||||
|
* Completion of positional arguments using the following rules:
|
||||||
|
* Argument position for all options below starts at `1`. If argument position
|
||||||
|
`0` is requested it will raise an error.
|
||||||
|
* Use `command.MarkZshCompPositionalArgumentFile` to complete filenames. Glob
|
||||||
|
patterns (e.g. `"*.log"`) are optional - if not specified it will offer to
|
||||||
|
complete all file types.
|
||||||
|
* Use `command.MarkZshCompPositionalArgumentWords` to offer specific words for
|
||||||
|
completion. At least one word is required.
|
||||||
|
* It's possible to specify completion for some arguments and leave some
|
||||||
|
unspecified (e.g. offer words for second argument but nothing for first
|
||||||
|
argument). This will cause no completion for first argument but words
|
||||||
|
completion for second argument.
|
||||||
|
* If no argument completion was specified for 1st argument (but optionally was
|
||||||
|
specified for 2nd) and the command has `ValidArgs` it will be used as
|
||||||
|
completion options for 1st argument.
|
||||||
|
* Argument completions only offered for commands with no subcommands.
|
||||||
|
|
||||||
|
### What's not yet Supported
|
||||||
|
|
||||||
|
* Custom completion scripts are not supported yet (We should probably create zsh
|
||||||
|
specific one, doesn't make sense to re-use the bash one as the functions will
|
||||||
|
be different).
|
||||||
|
* Whatever other feature you're looking for and doesn't exist :)
|
21
vendor/github.com/t3rm1n4l/go-mega/LICENSE
generated
vendored
Normal file
21
vendor/github.com/t3rm1n4l/go-mega/LICENSE
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019 Sarath Lakshman
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
3
vendor/go.opencensus.io/Makefile
generated
vendored
3
vendor/go.opencensus.io/Makefile
generated
vendored
@ -15,6 +15,7 @@ EMBEDMD=embedmd
|
|||||||
# TODO decide if we need to change these names.
|
# TODO decide if we need to change these names.
|
||||||
TRACE_ID_LINT_EXCEPTION="type name will be used as trace.TraceID by other packages"
|
TRACE_ID_LINT_EXCEPTION="type name will be used as trace.TraceID by other packages"
|
||||||
TRACE_OPTION_LINT_EXCEPTION="type name will be used as trace.TraceOptions by other packages"
|
TRACE_OPTION_LINT_EXCEPTION="type name will be used as trace.TraceOptions by other packages"
|
||||||
|
README_FILES := $(shell find . -name '*README.md' | sort | tr '\n' ' ')
|
||||||
|
|
||||||
.DEFAULT_GOAL := fmt-lint-vet-embedmd-test
|
.DEFAULT_GOAL := fmt-lint-vet-embedmd-test
|
||||||
|
|
||||||
@ -79,7 +80,7 @@ vet:
|
|||||||
|
|
||||||
.PHONY: embedmd
|
.PHONY: embedmd
|
||||||
embedmd:
|
embedmd:
|
||||||
@EMBEDMDOUT=`$(EMBEDMD) -d README.md 2>&1`; \
|
@EMBEDMDOUT=`$(EMBEDMD) -d $(README_FILES) 2>&1`; \
|
||||||
if [ "$$EMBEDMDOUT" ]; then \
|
if [ "$$EMBEDMDOUT" ]; then \
|
||||||
echo "$(EMBEDMD) FAILED => embedmd the following files:\n"; \
|
echo "$(EMBEDMD) FAILED => embedmd the following files:\n"; \
|
||||||
echo "$$EMBEDMDOUT\n"; \
|
echo "$$EMBEDMDOUT\n"; \
|
||||||
|
6
vendor/go.opencensus.io/README.md
generated
vendored
6
vendor/go.opencensus.io/README.md
generated
vendored
@ -253,10 +253,10 @@ release in which the functionality was marked *Deprecated*.
|
|||||||
[new-ex]: https://godoc.org/go.opencensus.io/tag#example-NewMap
|
[new-ex]: https://godoc.org/go.opencensus.io/tag#example-NewMap
|
||||||
[new-replace-ex]: https://godoc.org/go.opencensus.io/tag#example-NewMap--Replace
|
[new-replace-ex]: https://godoc.org/go.opencensus.io/tag#example-NewMap--Replace
|
||||||
|
|
||||||
[exporter-prom]: https://godoc.org/go.opencensus.io/exporter/prometheus
|
[exporter-prom]: https://godoc.org/contrib.go.opencensus.io/exporter/prometheus
|
||||||
[exporter-stackdriver]: https://godoc.org/contrib.go.opencensus.io/exporter/stackdriver
|
[exporter-stackdriver]: https://godoc.org/contrib.go.opencensus.io/exporter/stackdriver
|
||||||
[exporter-zipkin]: https://godoc.org/go.opencensus.io/exporter/zipkin
|
[exporter-zipkin]: https://godoc.org/contrib.go.opencensus.io/exporter/zipkin
|
||||||
[exporter-jaeger]: https://godoc.org/go.opencensus.io/exporter/jaeger
|
[exporter-jaeger]: https://godoc.org/contrib.go.opencensus.io/exporter/jaeger
|
||||||
[exporter-xray]: https://github.com/census-ecosystem/opencensus-go-exporter-aws
|
[exporter-xray]: https://github.com/census-ecosystem/opencensus-go-exporter-aws
|
||||||
[exporter-datadog]: https://github.com/DataDog/opencensus-go-exporter-datadog
|
[exporter-datadog]: https://github.com/DataDog/opencensus-go-exporter-datadog
|
||||||
[exporter-graphite]: https://github.com/census-ecosystem/opencensus-go-exporter-graphite
|
[exporter-graphite]: https://github.com/census-ecosystem/opencensus-go-exporter-graphite
|
||||||
|
17
vendor/go.opencensus.io/go.mod
generated
vendored
17
vendor/go.opencensus.io/go.mod
generated
vendored
@ -1,13 +1,12 @@
|
|||||||
module go.opencensus.io
|
module go.opencensus.io
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/apache/thrift v0.12.0
|
github.com/golang/protobuf v1.3.1
|
||||||
github.com/golang/protobuf v1.2.0
|
github.com/google/go-cmp v0.3.0
|
||||||
github.com/google/go-cmp v0.2.0
|
github.com/hashicorp/golang-lru v0.5.1
|
||||||
github.com/hashicorp/golang-lru v0.5.0
|
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09
|
||||||
github.com/openzipkin/zipkin-go v0.1.6
|
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd // indirect
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829
|
golang.org/x/text v0.3.2 // indirect
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a
|
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb // indirect
|
||||||
google.golang.org/api v0.3.1
|
google.golang.org/grpc v1.20.1
|
||||||
google.golang.org/grpc v1.19.0
|
|
||||||
)
|
)
|
||||||
|
112
vendor/go.opencensus.io/go.sum
generated
vendored
112
vendor/go.opencensus.io/go.sum
generated
vendored
@ -1,127 +1,61 @@
|
|||||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
|
||||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
|
||||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
|
||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
|
||||||
github.com/apache/thrift v0.12.0 h1:pODnxUFNcjP9UTLZGTdeh+j16A8lJbRvD3rOtrk/7bs=
|
|
||||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
|
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
|
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
||||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
|
||||||
github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
|
||||||
github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk=
|
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
|
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
|
||||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
|
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
|
||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
|
||||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
|
||||||
github.com/openzipkin/zipkin-go v0.1.6 h1:yXiysv1CSK7Q5yjGy1710zZGnsbMUIjluWBxtLXHPBo=
|
|
||||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829 h1:D+CiwcpGTW6pL6bv6KI3KbyEyCKyS+1JWS2h8PNDnGA=
|
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f h1:BVwpUVJDADN2ufcGik7W992pyps0wZ888b/y9GXcLTU=
|
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
|
||||||
github.com/prometheus/common v0.2.0 h1:kUZDBDTdBVBYBj5Tmh2NZLlF60mfjA27rM34b+cVwNU=
|
|
||||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1 h1:/K3IL0Z1quvmJ7X0A1AwNEK7CRkVK3YwfOU/QAL4WGg=
|
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
|
||||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3 h1:ulvT7fqt0yHWzpJwI57MezWnYDVpCAYBVuYst/L+fAY=
|
|
||||||
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09 h1:KaQtG+aDELoNmXYas3TVkGNYRuq8JQ1aa7LJt8EXVyo=
|
||||||
|
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
|
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI=
|
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI=
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd h1:r7DufRZuZbWB7j439YfAzP8RPDa9unLkpwQKUYbIMPI=
|
||||||
|
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||||
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
|
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-20190114222345-bf090417da8b/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=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
google.golang.org/api v0.3.1 h1:oJra/lMfmtm13/rgY/8i3MzjFWYXvQIAKjQ3HqofMk8=
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk=
|
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb h1:i1Ppqkc3WQXikh8bXiwHqAN5Rv3/qDCcRk0/Otx73BY=
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=
|
||||||
google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=
|
google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
google.golang.org/grpc v1.20.1 h1:Hz2g2wirWK7H0qIIhGIqRGTuMwTE8HEKFnDZZ7lm9NU=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
|
||||||
gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
|
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
5
vendor/go.opencensus.io/metric/metricdata/exemplar.go
generated
vendored
5
vendor/go.opencensus.io/metric/metricdata/exemplar.go
generated
vendored
@ -18,6 +18,11 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Exemplars keys.
|
||||||
|
const (
|
||||||
|
AttachmentKeySpanContext = "SpanContext"
|
||||||
|
)
|
||||||
|
|
||||||
// Exemplar is an example data point associated with each bucket of a
|
// Exemplar is an example data point associated with each bucket of a
|
||||||
// distribution type aggregation.
|
// distribution type aggregation.
|
||||||
//
|
//
|
||||||
|
7
vendor/go.opencensus.io/metric/metricdata/label.go
generated
vendored
7
vendor/go.opencensus.io/metric/metricdata/label.go
generated
vendored
@ -14,6 +14,13 @@
|
|||||||
|
|
||||||
package metricdata
|
package metricdata
|
||||||
|
|
||||||
|
// LabelKey represents key of a label. It has optional
|
||||||
|
// description attribute.
|
||||||
|
type LabelKey struct {
|
||||||
|
Key string
|
||||||
|
Description string
|
||||||
|
}
|
||||||
|
|
||||||
// LabelValue represents the value of a label.
|
// LabelValue represents the value of a label.
|
||||||
// The zero value represents a missing label value, which may be treated
|
// The zero value represents a missing label value, which may be treated
|
||||||
// differently to an empty string value by some back ends.
|
// differently to an empty string value by some back ends.
|
||||||
|
10
vendor/go.opencensus.io/metric/metricdata/metric.go
generated
vendored
10
vendor/go.opencensus.io/metric/metricdata/metric.go
generated
vendored
@ -22,11 +22,11 @@ import (
|
|||||||
|
|
||||||
// Descriptor holds metadata about a metric.
|
// Descriptor holds metadata about a metric.
|
||||||
type Descriptor struct {
|
type Descriptor struct {
|
||||||
Name string // full name of the metric
|
Name string // full name of the metric
|
||||||
Description string // human-readable description
|
Description string // human-readable description
|
||||||
Unit Unit // units for the measure
|
Unit Unit // units for the measure
|
||||||
Type Type // type of measure
|
Type Type // type of measure
|
||||||
LabelKeys []string // label keys
|
LabelKeys []LabelKey // label keys
|
||||||
}
|
}
|
||||||
|
|
||||||
// Metric represents a quantity measured against a resource with different
|
// Metric represents a quantity measured against a resource with different
|
||||||
|
2
vendor/go.opencensus.io/opencensus.go
generated
vendored
2
vendor/go.opencensus.io/opencensus.go
generated
vendored
@ -17,5 +17,5 @@ package opencensus // import "go.opencensus.io"
|
|||||||
|
|
||||||
// Version is the current release version of OpenCensus in use.
|
// Version is the current release version of OpenCensus in use.
|
||||||
func Version() string {
|
func Version() string {
|
||||||
return "0.21.0"
|
return "0.22.0"
|
||||||
}
|
}
|
||||||
|
9
vendor/go.opencensus.io/plugin/ochttp/server.go
generated
vendored
9
vendor/go.opencensus.io/plugin/ochttp/server.go
generated
vendored
@ -124,6 +124,12 @@ func (h *Handler) startTrace(w http.ResponseWriter, r *http.Request) (*http.Requ
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
span.AddAttributes(requestAttrs(r)...)
|
span.AddAttributes(requestAttrs(r)...)
|
||||||
|
if r.Body == nil {
|
||||||
|
// TODO: Handle cases where ContentLength is not set.
|
||||||
|
} else if r.ContentLength > 0 {
|
||||||
|
span.AddMessageReceiveEvent(0, /* TODO: messageID */
|
||||||
|
int64(r.ContentLength), -1)
|
||||||
|
}
|
||||||
return r.WithContext(ctx), span.End
|
return r.WithContext(ctx), span.End
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,6 +207,9 @@ func (t *trackingResponseWriter) Header() http.Header {
|
|||||||
func (t *trackingResponseWriter) Write(data []byte) (int, error) {
|
func (t *trackingResponseWriter) Write(data []byte) (int, error) {
|
||||||
n, err := t.writer.Write(data)
|
n, err := t.writer.Write(data)
|
||||||
t.respSize += int64(n)
|
t.respSize += int64(n)
|
||||||
|
// Add message event for request bytes sent.
|
||||||
|
span := trace.FromContext(t.ctx)
|
||||||
|
span.AddMessageSendEvent(0 /* TODO: messageID */, int64(n), -1)
|
||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
94
vendor/go.opencensus.io/stats/record.go
generated
vendored
94
vendor/go.opencensus.io/stats/record.go
generated
vendored
@ -18,6 +18,7 @@ package stats
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
|
"go.opencensus.io/metric/metricdata"
|
||||||
"go.opencensus.io/stats/internal"
|
"go.opencensus.io/stats/internal"
|
||||||
"go.opencensus.io/tag"
|
"go.opencensus.io/tag"
|
||||||
)
|
)
|
||||||
@ -30,28 +31,48 @@ func init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type recordOptions struct {
|
||||||
|
attachments metricdata.Attachments
|
||||||
|
mutators []tag.Mutator
|
||||||
|
measurements []Measurement
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithAttachments applies provided exemplar attachments.
|
||||||
|
func WithAttachments(attachments metricdata.Attachments) Options {
|
||||||
|
return func(ro *recordOptions) {
|
||||||
|
ro.attachments = attachments
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithTags applies provided tag mutators.
|
||||||
|
func WithTags(mutators ...tag.Mutator) Options {
|
||||||
|
return func(ro *recordOptions) {
|
||||||
|
ro.mutators = mutators
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMeasurements applies provided measurements.
|
||||||
|
func WithMeasurements(measurements ...Measurement) Options {
|
||||||
|
return func(ro *recordOptions) {
|
||||||
|
ro.measurements = measurements
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Options apply changes to recordOptions.
|
||||||
|
type Options func(*recordOptions)
|
||||||
|
|
||||||
|
func createRecordOption(ros ...Options) *recordOptions {
|
||||||
|
o := &recordOptions{}
|
||||||
|
for _, ro := range ros {
|
||||||
|
ro(o)
|
||||||
|
}
|
||||||
|
return o
|
||||||
|
}
|
||||||
|
|
||||||
// Record records one or multiple measurements with the same context at once.
|
// Record records one or multiple measurements with the same context at once.
|
||||||
// If there are any tags in the context, measurements will be tagged with them.
|
// If there are any tags in the context, measurements will be tagged with them.
|
||||||
func Record(ctx context.Context, ms ...Measurement) {
|
func Record(ctx context.Context, ms ...Measurement) {
|
||||||
recorder := internal.DefaultRecorder
|
RecordWithOptions(ctx, WithMeasurements(ms...))
|
||||||
if recorder == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(ms) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
record := false
|
|
||||||
for _, m := range ms {
|
|
||||||
if m.desc.subscribed() {
|
|
||||||
record = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !record {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// TODO(songy23): fix attachments.
|
|
||||||
recorder(tag.FromContext(ctx), ms, map[string]interface{}{})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RecordWithTags records one or multiple measurements at once.
|
// RecordWithTags records one or multiple measurements at once.
|
||||||
@ -60,10 +81,37 @@ func Record(ctx context.Context, ms ...Measurement) {
|
|||||||
// RecordWithTags is useful if you want to record with tag mutations but don't want
|
// RecordWithTags is useful if you want to record with tag mutations but don't want
|
||||||
// to propagate the mutations in the context.
|
// to propagate the mutations in the context.
|
||||||
func RecordWithTags(ctx context.Context, mutators []tag.Mutator, ms ...Measurement) error {
|
func RecordWithTags(ctx context.Context, mutators []tag.Mutator, ms ...Measurement) error {
|
||||||
ctx, err := tag.New(ctx, mutators...)
|
return RecordWithOptions(ctx, WithTags(mutators...), WithMeasurements(ms...))
|
||||||
if err != nil {
|
}
|
||||||
return err
|
|
||||||
|
// RecordWithOptions records measurements from the given options (if any) against context
|
||||||
|
// and tags and attachments in the options (if any).
|
||||||
|
// If there are any tags in the context, measurements will be tagged with them.
|
||||||
|
func RecordWithOptions(ctx context.Context, ros ...Options) error {
|
||||||
|
o := createRecordOption(ros...)
|
||||||
|
if len(o.measurements) == 0 {
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
Record(ctx, ms...)
|
recorder := internal.DefaultRecorder
|
||||||
|
if recorder == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
record := false
|
||||||
|
for _, m := range o.measurements {
|
||||||
|
if m.desc.subscribed() {
|
||||||
|
record = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !record {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if len(o.mutators) > 0 {
|
||||||
|
var err error
|
||||||
|
if ctx, err = tag.New(ctx, o.mutators...); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
recorder(tag.FromContext(ctx), o.measurements, o.attachments)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
23
vendor/go.opencensus.io/stats/view/view_to_metric.go
generated
vendored
23
vendor/go.opencensus.io/stats/view/view_to_metric.go
generated
vendored
@ -73,10 +73,10 @@ func getType(v *View) metricdata.Type {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getLableKeys(v *View) []string {
|
func getLabelKeys(v *View) []metricdata.LabelKey {
|
||||||
labelKeys := []string{}
|
labelKeys := []metricdata.LabelKey{}
|
||||||
for _, k := range v.TagKeys {
|
for _, k := range v.TagKeys {
|
||||||
labelKeys = append(labelKeys, k.Name())
|
labelKeys = append(labelKeys, metricdata.LabelKey{Key: k.Name()})
|
||||||
}
|
}
|
||||||
return labelKeys
|
return labelKeys
|
||||||
}
|
}
|
||||||
@ -87,14 +87,23 @@ func viewToMetricDescriptor(v *View) *metricdata.Descriptor {
|
|||||||
Description: v.Description,
|
Description: v.Description,
|
||||||
Unit: getUnit(v.Measure.Unit()),
|
Unit: getUnit(v.Measure.Unit()),
|
||||||
Type: getType(v),
|
Type: getType(v),
|
||||||
LabelKeys: getLableKeys(v),
|
LabelKeys: getLabelKeys(v),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func toLabelValues(row *Row) []metricdata.LabelValue {
|
func toLabelValues(row *Row, expectedKeys []metricdata.LabelKey) []metricdata.LabelValue {
|
||||||
labelValues := []metricdata.LabelValue{}
|
labelValues := []metricdata.LabelValue{}
|
||||||
|
tagMap := make(map[string]string)
|
||||||
for _, tag := range row.Tags {
|
for _, tag := range row.Tags {
|
||||||
labelValues = append(labelValues, metricdata.NewLabelValue(tag.Value))
|
tagMap[tag.Key.Name()] = tag.Value
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, key := range expectedKeys {
|
||||||
|
if val, ok := tagMap[key.Key]; ok {
|
||||||
|
labelValues = append(labelValues, metricdata.NewLabelValue(val))
|
||||||
|
} else {
|
||||||
|
labelValues = append(labelValues, metricdata.LabelValue{})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return labelValues
|
return labelValues
|
||||||
}
|
}
|
||||||
@ -102,7 +111,7 @@ func toLabelValues(row *Row) []metricdata.LabelValue {
|
|||||||
func rowToTimeseries(v *viewInternal, row *Row, now time.Time, startTime time.Time) *metricdata.TimeSeries {
|
func rowToTimeseries(v *viewInternal, row *Row, now time.Time, startTime time.Time) *metricdata.TimeSeries {
|
||||||
return &metricdata.TimeSeries{
|
return &metricdata.TimeSeries{
|
||||||
Points: []metricdata.Point{row.Data.toPoint(v.metricDescriptor.Type, now)},
|
Points: []metricdata.Point{row.Data.toPoint(v.metricDescriptor.Type, now)},
|
||||||
LabelValues: toLabelValues(row),
|
LabelValues: toLabelValues(row, v.metricDescriptor.LabelKeys),
|
||||||
StartTime: startTime,
|
StartTime: startTime,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
vendor/go.opencensus.io/stats/view/worker.go
generated
vendored
2
vendor/go.opencensus.io/stats/view/worker.go
generated
vendored
@ -236,6 +236,8 @@ func (w *worker) reportView(v *viewInternal, now time.Time) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w *worker) reportUsage(now time.Time) {
|
func (w *worker) reportUsage(now time.Time) {
|
||||||
|
w.mu.Lock()
|
||||||
|
defer w.mu.Unlock()
|
||||||
for _, v := range w.views {
|
for _, v := range w.views {
|
||||||
w.reportView(v, now)
|
w.reportView(v, now)
|
||||||
}
|
}
|
||||||
|
4
vendor/go.opencensus.io/stats/view/worker_commands.go
generated
vendored
4
vendor/go.opencensus.io/stats/view/worker_commands.go
generated
vendored
@ -121,6 +121,8 @@ type retrieveDataResp struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (cmd *retrieveDataReq) handleCommand(w *worker) {
|
func (cmd *retrieveDataReq) handleCommand(w *worker) {
|
||||||
|
w.mu.Lock()
|
||||||
|
defer w.mu.Unlock()
|
||||||
vi, ok := w.views[cmd.v]
|
vi, ok := w.views[cmd.v]
|
||||||
if !ok {
|
if !ok {
|
||||||
cmd.c <- &retrieveDataResp{
|
cmd.c <- &retrieveDataResp{
|
||||||
@ -153,6 +155,8 @@ type recordReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (cmd *recordReq) handleCommand(w *worker) {
|
func (cmd *recordReq) handleCommand(w *worker) {
|
||||||
|
w.mu.Lock()
|
||||||
|
defer w.mu.Unlock()
|
||||||
for _, m := range cmd.ms {
|
for _, m := range cmd.ms {
|
||||||
if (m == stats.Measurement{}) { // not registered
|
if (m == stats.Measurement{}) { // not registered
|
||||||
continue
|
continue
|
||||||
|
10
vendor/go.opencensus.io/tag/key.go
generated
vendored
10
vendor/go.opencensus.io/tag/key.go
generated
vendored
@ -29,6 +29,16 @@ func NewKey(name string) (Key, error) {
|
|||||||
return Key{name: name}, nil
|
return Key{name: name}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MustNewKey creates or retrieves a string key identified by name.
|
||||||
|
// An invalid key name raises a panic.
|
||||||
|
func MustNewKey(name string) Key {
|
||||||
|
k, err := NewKey(name)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return k
|
||||||
|
}
|
||||||
|
|
||||||
// Name returns the name of the key.
|
// Name returns the name of the key.
|
||||||
func (k Key) Name() string {
|
func (k Key) Name() string {
|
||||||
return k.name
|
return k.name
|
||||||
|
66
vendor/go.opencensus.io/tag/map.go
generated
vendored
66
vendor/go.opencensus.io/tag/map.go
generated
vendored
@ -28,10 +28,15 @@ type Tag struct {
|
|||||||
Value string
|
Value string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type tagContent struct {
|
||||||
|
value string
|
||||||
|
m metadatas
|
||||||
|
}
|
||||||
|
|
||||||
// Map is a map of tags. Use New to create a context containing
|
// Map is a map of tags. Use New to create a context containing
|
||||||
// a new Map.
|
// a new Map.
|
||||||
type Map struct {
|
type Map struct {
|
||||||
m map[Key]string
|
m map[Key]tagContent
|
||||||
}
|
}
|
||||||
|
|
||||||
// Value returns the value for the key if a value for the key exists.
|
// Value returns the value for the key if a value for the key exists.
|
||||||
@ -40,7 +45,7 @@ func (m *Map) Value(k Key) (string, bool) {
|
|||||||
return "", false
|
return "", false
|
||||||
}
|
}
|
||||||
v, ok := m.m[k]
|
v, ok := m.m[k]
|
||||||
return v, ok
|
return v.value, ok
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Map) String() string {
|
func (m *Map) String() string {
|
||||||
@ -62,21 +67,21 @@ func (m *Map) String() string {
|
|||||||
return buffer.String()
|
return buffer.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Map) insert(k Key, v string) {
|
func (m *Map) insert(k Key, v string, md metadatas) {
|
||||||
if _, ok := m.m[k]; ok {
|
if _, ok := m.m[k]; ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.m[k] = v
|
m.m[k] = tagContent{value: v, m: md}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Map) update(k Key, v string) {
|
func (m *Map) update(k Key, v string, md metadatas) {
|
||||||
if _, ok := m.m[k]; ok {
|
if _, ok := m.m[k]; ok {
|
||||||
m.m[k] = v
|
m.m[k] = tagContent{value: v, m: md}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Map) upsert(k Key, v string) {
|
func (m *Map) upsert(k Key, v string, md metadatas) {
|
||||||
m.m[k] = v
|
m.m[k] = tagContent{value: v, m: md}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Map) delete(k Key) {
|
func (m *Map) delete(k Key) {
|
||||||
@ -84,7 +89,7 @@ func (m *Map) delete(k Key) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newMap() *Map {
|
func newMap() *Map {
|
||||||
return &Map{m: make(map[Key]string)}
|
return &Map{m: make(map[Key]tagContent)}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mutator modifies a tag map.
|
// Mutator modifies a tag map.
|
||||||
@ -95,13 +100,17 @@ type Mutator interface {
|
|||||||
// Insert returns a mutator that inserts a
|
// Insert returns a mutator that inserts a
|
||||||
// value associated with k. If k already exists in the tag map,
|
// value associated with k. If k already exists in the tag map,
|
||||||
// mutator doesn't update the value.
|
// mutator doesn't update the value.
|
||||||
func Insert(k Key, v string) Mutator {
|
// Metadata applies metadata to the tag. It is optional.
|
||||||
|
// Metadatas are applied in the order in which it is provided.
|
||||||
|
// If more than one metadata updates the same attribute then
|
||||||
|
// the update from the last metadata prevails.
|
||||||
|
func Insert(k Key, v string, mds ...Metadata) Mutator {
|
||||||
return &mutator{
|
return &mutator{
|
||||||
fn: func(m *Map) (*Map, error) {
|
fn: func(m *Map) (*Map, error) {
|
||||||
if !checkValue(v) {
|
if !checkValue(v) {
|
||||||
return nil, errInvalidValue
|
return nil, errInvalidValue
|
||||||
}
|
}
|
||||||
m.insert(k, v)
|
m.insert(k, v, createMetadatas(mds...))
|
||||||
return m, nil
|
return m, nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -110,13 +119,17 @@ func Insert(k Key, v string) Mutator {
|
|||||||
// Update returns a mutator that updates the
|
// Update returns a mutator that updates the
|
||||||
// value of the tag associated with k with v. If k doesn't
|
// value of the tag associated with k with v. If k doesn't
|
||||||
// exists in the tag map, the mutator doesn't insert the value.
|
// exists in the tag map, the mutator doesn't insert the value.
|
||||||
func Update(k Key, v string) Mutator {
|
// Metadata applies metadata to the tag. It is optional.
|
||||||
|
// Metadatas are applied in the order in which it is provided.
|
||||||
|
// If more than one metadata updates the same attribute then
|
||||||
|
// the update from the last metadata prevails.
|
||||||
|
func Update(k Key, v string, mds ...Metadata) Mutator {
|
||||||
return &mutator{
|
return &mutator{
|
||||||
fn: func(m *Map) (*Map, error) {
|
fn: func(m *Map) (*Map, error) {
|
||||||
if !checkValue(v) {
|
if !checkValue(v) {
|
||||||
return nil, errInvalidValue
|
return nil, errInvalidValue
|
||||||
}
|
}
|
||||||
m.update(k, v)
|
m.update(k, v, createMetadatas(mds...))
|
||||||
return m, nil
|
return m, nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -126,18 +139,37 @@ func Update(k Key, v string) Mutator {
|
|||||||
// value of the tag associated with k with v. It inserts the
|
// value of the tag associated with k with v. It inserts the
|
||||||
// value if k doesn't exist already. It mutates the value
|
// value if k doesn't exist already. It mutates the value
|
||||||
// if k already exists.
|
// if k already exists.
|
||||||
func Upsert(k Key, v string) Mutator {
|
// Metadata applies metadata to the tag. It is optional.
|
||||||
|
// Metadatas are applied in the order in which it is provided.
|
||||||
|
// If more than one metadata updates the same attribute then
|
||||||
|
// the update from the last metadata prevails.
|
||||||
|
func Upsert(k Key, v string, mds ...Metadata) Mutator {
|
||||||
return &mutator{
|
return &mutator{
|
||||||
fn: func(m *Map) (*Map, error) {
|
fn: func(m *Map) (*Map, error) {
|
||||||
if !checkValue(v) {
|
if !checkValue(v) {
|
||||||
return nil, errInvalidValue
|
return nil, errInvalidValue
|
||||||
}
|
}
|
||||||
m.upsert(k, v)
|
m.upsert(k, v, createMetadatas(mds...))
|
||||||
return m, nil
|
return m, nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createMetadatas(mds ...Metadata) metadatas {
|
||||||
|
var metas metadatas
|
||||||
|
if len(mds) > 0 {
|
||||||
|
for _, md := range mds {
|
||||||
|
if md != nil {
|
||||||
|
md(&metas)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
WithTTL(TTLUnlimitedPropagation)(&metas)
|
||||||
|
}
|
||||||
|
return metas
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Delete returns a mutator that deletes
|
// Delete returns a mutator that deletes
|
||||||
// the value associated with k.
|
// the value associated with k.
|
||||||
func Delete(k Key) Mutator {
|
func Delete(k Key) Mutator {
|
||||||
@ -160,10 +192,10 @@ func New(ctx context.Context, mutator ...Mutator) (context.Context, error) {
|
|||||||
if !checkKeyName(k.Name()) {
|
if !checkKeyName(k.Name()) {
|
||||||
return ctx, fmt.Errorf("key:%q: %v", k, errInvalidKeyName)
|
return ctx, fmt.Errorf("key:%q: %v", k, errInvalidKeyName)
|
||||||
}
|
}
|
||||||
if !checkValue(v) {
|
if !checkValue(v.value) {
|
||||||
return ctx, fmt.Errorf("key:%q value:%q: %v", k.Name(), v, errInvalidValue)
|
return ctx, fmt.Errorf("key:%q value:%q: %v", k.Name(), v, errInvalidValue)
|
||||||
}
|
}
|
||||||
m.insert(k, v)
|
m.insert(k, v.value, v.m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
|
12
vendor/go.opencensus.io/tag/map_codec.go
generated
vendored
12
vendor/go.opencensus.io/tag/map_codec.go
generated
vendored
@ -170,9 +170,11 @@ func Encode(m *Map) []byte {
|
|||||||
}
|
}
|
||||||
eg.writeByte(byte(tagsVersionID))
|
eg.writeByte(byte(tagsVersionID))
|
||||||
for k, v := range m.m {
|
for k, v := range m.m {
|
||||||
eg.writeByte(byte(keyTypeString))
|
if v.m.ttl.ttl == valueTTLUnlimitedPropagation {
|
||||||
eg.writeStringWithVarintLen(k.name)
|
eg.writeByte(byte(keyTypeString))
|
||||||
eg.writeBytesWithVarintLen([]byte(v))
|
eg.writeStringWithVarintLen(k.name)
|
||||||
|
eg.writeBytesWithVarintLen([]byte(v.value))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return eg.bytes()
|
return eg.bytes()
|
||||||
}
|
}
|
||||||
@ -190,7 +192,7 @@ func Decode(bytes []byte) (*Map, error) {
|
|||||||
|
|
||||||
// DecodeEach decodes the given serialized tag map, calling handler for each
|
// DecodeEach decodes the given serialized tag map, calling handler for each
|
||||||
// tag key and value decoded.
|
// tag key and value decoded.
|
||||||
func DecodeEach(bytes []byte, fn func(key Key, val string)) error {
|
func DecodeEach(bytes []byte, fn func(key Key, val string, md metadatas)) error {
|
||||||
eg := &encoderGRPC{
|
eg := &encoderGRPC{
|
||||||
buf: bytes,
|
buf: bytes,
|
||||||
}
|
}
|
||||||
@ -228,7 +230,7 @@ func DecodeEach(bytes []byte, fn func(key Key, val string)) error {
|
|||||||
if !checkValue(val) {
|
if !checkValue(val) {
|
||||||
return errInvalidValue
|
return errInvalidValue
|
||||||
}
|
}
|
||||||
fn(key, val)
|
fn(key, val, createMetadatas(WithTTL(TTLUnlimitedPropagation)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
52
vendor/go.opencensus.io/tag/metadata.go
generated
vendored
Normal file
52
vendor/go.opencensus.io/tag/metadata.go
generated
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// Copyright 2019, OpenCensus Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
package tag
|
||||||
|
|
||||||
|
const (
|
||||||
|
// valueTTLNoPropagation prevents tag from propagating.
|
||||||
|
valueTTLNoPropagation = 0
|
||||||
|
|
||||||
|
// valueTTLUnlimitedPropagation allows tag to propagate without any limits on number of hops.
|
||||||
|
valueTTLUnlimitedPropagation = -1
|
||||||
|
)
|
||||||
|
|
||||||
|
// TTL is metadata that specifies number of hops a tag can propagate.
|
||||||
|
// Details about TTL metadata is specified at https://github.com/census-instrumentation/opencensus-specs/blob/master/tags/TagMap.md#tagmetadata
|
||||||
|
type TTL struct {
|
||||||
|
ttl int
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
// TTLUnlimitedPropagation is TTL metadata that allows tag to propagate without any limits on number of hops.
|
||||||
|
TTLUnlimitedPropagation = TTL{ttl: valueTTLUnlimitedPropagation}
|
||||||
|
|
||||||
|
// TTLNoPropagation is TTL metadata that prevents tag from propagating.
|
||||||
|
TTLNoPropagation = TTL{ttl: valueTTLNoPropagation}
|
||||||
|
)
|
||||||
|
|
||||||
|
type metadatas struct {
|
||||||
|
ttl TTL
|
||||||
|
}
|
||||||
|
|
||||||
|
// Metadata applies metadatas specified by the function.
|
||||||
|
type Metadata func(*metadatas)
|
||||||
|
|
||||||
|
// WithTTL applies metadata with provided ttl.
|
||||||
|
func WithTTL(ttl TTL) Metadata {
|
||||||
|
return func(m *metadatas) {
|
||||||
|
m.ttl = ttl
|
||||||
|
}
|
||||||
|
}
|
2
vendor/go.opencensus.io/tag/profile_19.go
generated
vendored
2
vendor/go.opencensus.io/tag/profile_19.go
generated
vendored
@ -25,7 +25,7 @@ func do(ctx context.Context, f func(ctx context.Context)) {
|
|||||||
m := FromContext(ctx)
|
m := FromContext(ctx)
|
||||||
keyvals := make([]string, 0, 2*len(m.m))
|
keyvals := make([]string, 0, 2*len(m.m))
|
||||||
for k, v := range m.m {
|
for k, v := range m.m {
|
||||||
keyvals = append(keyvals, k.Name(), v)
|
keyvals = append(keyvals, k.Name(), v.value)
|
||||||
}
|
}
|
||||||
pprof.Do(ctx, pprof.Labels(keyvals...), f)
|
pprof.Do(ctx, pprof.Labels(keyvals...), f)
|
||||||
}
|
}
|
||||||
|
5
vendor/golang.org/x/crypto/ed25519/ed25519.go
generated
vendored
5
vendor/golang.org/x/crypto/ed25519/ed25519.go
generated
vendored
@ -2,6 +2,11 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// In Go 1.13, the ed25519 package was promoted to the standard library as
|
||||||
|
// crypto/ed25519, and this package became a wrapper for the standard library one.
|
||||||
|
//
|
||||||
|
// +build !go1.13
|
||||||
|
|
||||||
// Package ed25519 implements the Ed25519 signature algorithm. See
|
// Package ed25519 implements the Ed25519 signature algorithm. See
|
||||||
// https://ed25519.cr.yp.to/.
|
// https://ed25519.cr.yp.to/.
|
||||||
//
|
//
|
||||||
|
73
vendor/golang.org/x/crypto/ed25519/ed25519_go113.go
generated
vendored
Normal file
73
vendor/golang.org/x/crypto/ed25519/ed25519_go113.go
generated
vendored
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
// Copyright 2019 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build go1.13
|
||||||
|
|
||||||
|
// Package ed25519 implements the Ed25519 signature algorithm. See
|
||||||
|
// https://ed25519.cr.yp.to/.
|
||||||
|
//
|
||||||
|
// These functions are also compatible with the “Ed25519” function defined in
|
||||||
|
// RFC 8032. However, unlike RFC 8032's formulation, this package's private key
|
||||||
|
// representation includes a public key suffix to make multiple signing
|
||||||
|
// operations with the same key more efficient. This package refers to the RFC
|
||||||
|
// 8032 private key as the “seed”.
|
||||||
|
//
|
||||||
|
// Beginning with Go 1.13, the functionality of this package was moved to the
|
||||||
|
// standard library as crypto/ed25519. This package only acts as a compatibility
|
||||||
|
// wrapper.
|
||||||
|
package ed25519
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/ed25519"
|
||||||
|
"io"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// PublicKeySize is the size, in bytes, of public keys as used in this package.
|
||||||
|
PublicKeySize = 32
|
||||||
|
// PrivateKeySize is the size, in bytes, of private keys as used in this package.
|
||||||
|
PrivateKeySize = 64
|
||||||
|
// SignatureSize is the size, in bytes, of signatures generated and verified by this package.
|
||||||
|
SignatureSize = 64
|
||||||
|
// SeedSize is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032.
|
||||||
|
SeedSize = 32
|
||||||
|
)
|
||||||
|
|
||||||
|
// PublicKey is the type of Ed25519 public keys.
|
||||||
|
//
|
||||||
|
// This type is an alias for crypto/ed25519's PublicKey type.
|
||||||
|
// See the crypto/ed25519 package for the methods on this type.
|
||||||
|
type PublicKey = ed25519.PublicKey
|
||||||
|
|
||||||
|
// PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer.
|
||||||
|
//
|
||||||
|
// This type is an alias for crypto/ed25519's PrivateKey type.
|
||||||
|
// See the crypto/ed25519 package for the methods on this type.
|
||||||
|
type PrivateKey = ed25519.PrivateKey
|
||||||
|
|
||||||
|
// GenerateKey generates a public/private key pair using entropy from rand.
|
||||||
|
// If rand is nil, crypto/rand.Reader will be used.
|
||||||
|
func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) {
|
||||||
|
return ed25519.GenerateKey(rand)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewKeyFromSeed calculates a private key from a seed. It will panic if
|
||||||
|
// len(seed) is not SeedSize. This function is provided for interoperability
|
||||||
|
// with RFC 8032. RFC 8032's private keys correspond to seeds in this
|
||||||
|
// package.
|
||||||
|
func NewKeyFromSeed(seed []byte) PrivateKey {
|
||||||
|
return ed25519.NewKeyFromSeed(seed)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sign signs the message with privateKey and returns a signature. It will
|
||||||
|
// panic if len(privateKey) is not PrivateKeySize.
|
||||||
|
func Sign(privateKey PrivateKey, message []byte) []byte {
|
||||||
|
return ed25519.Sign(privateKey, message)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify reports whether sig is a valid signature of message by publicKey. It
|
||||||
|
// will panic if len(publicKey) is not PublicKeySize.
|
||||||
|
func Verify(publicKey PublicKey, message, sig []byte) bool {
|
||||||
|
return ed25519.Verify(publicKey, message, sig)
|
||||||
|
}
|
2
vendor/golang.org/x/crypto/internal/chacha20/asm_ppc64le.s
generated
vendored
2
vendor/golang.org/x/crypto/internal/chacha20/asm_ppc64le.s
generated
vendored
@ -135,7 +135,7 @@ TEXT ·chaCha20_ctr32_vmx(SB),NOSPLIT|NOFRAME,$0
|
|||||||
MOVD inp+8(FP), INP
|
MOVD inp+8(FP), INP
|
||||||
MOVD len+16(FP), LEN
|
MOVD len+16(FP), LEN
|
||||||
MOVD key+24(FP), KEY
|
MOVD key+24(FP), KEY
|
||||||
MOVD cnt+32(FP), CNT
|
MOVD counter+32(FP), CNT
|
||||||
|
|
||||||
MOVD $·consts(SB), CONSTS // point to consts addr
|
MOVD $·consts(SB), CONSTS // point to consts addr
|
||||||
|
|
||||||
|
7
vendor/golang.org/x/crypto/internal/chacha20/chacha_ppc64le.go
generated
vendored
7
vendor/golang.org/x/crypto/internal/chacha20/chacha_ppc64le.go
generated
vendored
@ -8,9 +8,10 @@ package chacha20
|
|||||||
|
|
||||||
import "encoding/binary"
|
import "encoding/binary"
|
||||||
|
|
||||||
var haveAsm = true
|
const (
|
||||||
|
bufSize = 256
|
||||||
const bufSize = 256
|
haveAsm = true
|
||||||
|
)
|
||||||
|
|
||||||
//go:noescape
|
//go:noescape
|
||||||
func chaCha20_ctr32_vmx(out, inp *byte, len int, key *[8]uint32, counter *uint32)
|
func chaCha20_ctr32_vmx(out, inp *byte, len int, key *[8]uint32, counter *uint32)
|
||||||
|
7
vendor/golang.org/x/crypto/ssh/common.go
generated
vendored
7
vendor/golang.org/x/crypto/ssh/common.go
generated
vendored
@ -51,6 +51,13 @@ var supportedKexAlgos = []string{
|
|||||||
kexAlgoDH14SHA1, kexAlgoDH1SHA1,
|
kexAlgoDH14SHA1, kexAlgoDH1SHA1,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// serverForbiddenKexAlgos contains key exchange algorithms, that are forbidden
|
||||||
|
// for the server half.
|
||||||
|
var serverForbiddenKexAlgos = map[string]struct{}{
|
||||||
|
kexAlgoDHGEXSHA1: {}, // server half implementation is only minimal to satisfy the automated tests
|
||||||
|
kexAlgoDHGEXSHA256: {}, // server half implementation is only minimal to satisfy the automated tests
|
||||||
|
}
|
||||||
|
|
||||||
// supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. methods
|
// supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. methods
|
||||||
// of authenticating servers) in preference order.
|
// of authenticating servers) in preference order.
|
||||||
var supportedHostKeyAlgos = []string{
|
var supportedHostKeyAlgos = []string{
|
||||||
|
249
vendor/golang.org/x/crypto/ssh/kex.go
generated
vendored
249
vendor/golang.org/x/crypto/ssh/kex.go
generated
vendored
@ -10,7 +10,9 @@ import (
|
|||||||
"crypto/elliptic"
|
"crypto/elliptic"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"crypto/subtle"
|
"crypto/subtle"
|
||||||
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
@ -24,6 +26,12 @@ const (
|
|||||||
kexAlgoECDH384 = "ecdh-sha2-nistp384"
|
kexAlgoECDH384 = "ecdh-sha2-nistp384"
|
||||||
kexAlgoECDH521 = "ecdh-sha2-nistp521"
|
kexAlgoECDH521 = "ecdh-sha2-nistp521"
|
||||||
kexAlgoCurve25519SHA256 = "curve25519-sha256@libssh.org"
|
kexAlgoCurve25519SHA256 = "curve25519-sha256@libssh.org"
|
||||||
|
|
||||||
|
// For the following kex only the client half contains a production
|
||||||
|
// ready implementation. The server half only consists of a minimal
|
||||||
|
// implementation to satisfy the automated tests.
|
||||||
|
kexAlgoDHGEXSHA1 = "diffie-hellman-group-exchange-sha1"
|
||||||
|
kexAlgoDHGEXSHA256 = "diffie-hellman-group-exchange-sha256"
|
||||||
)
|
)
|
||||||
|
|
||||||
// kexResult captures the outcome of a key exchange.
|
// kexResult captures the outcome of a key exchange.
|
||||||
@ -402,6 +410,8 @@ func init() {
|
|||||||
kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()}
|
kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()}
|
||||||
kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()}
|
kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()}
|
||||||
kexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{}
|
kexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{}
|
||||||
|
kexAlgoMap[kexAlgoDHGEXSHA1] = &dhGEXSHA{hashFunc: crypto.SHA1}
|
||||||
|
kexAlgoMap[kexAlgoDHGEXSHA256] = &dhGEXSHA{hashFunc: crypto.SHA256}
|
||||||
}
|
}
|
||||||
|
|
||||||
// curve25519sha256 implements the curve25519-sha256@libssh.org key
|
// curve25519sha256 implements the curve25519-sha256@libssh.org key
|
||||||
@ -538,3 +548,242 @@ func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handsh
|
|||||||
Hash: crypto.SHA256,
|
Hash: crypto.SHA256,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dhGEXSHA implements the diffie-hellman-group-exchange-sha1 and
|
||||||
|
// diffie-hellman-group-exchange-sha256 key agreement protocols,
|
||||||
|
// as described in RFC 4419
|
||||||
|
type dhGEXSHA struct {
|
||||||
|
g, p *big.Int
|
||||||
|
hashFunc crypto.Hash
|
||||||
|
}
|
||||||
|
|
||||||
|
const numMRTests = 64
|
||||||
|
|
||||||
|
const (
|
||||||
|
dhGroupExchangeMinimumBits = 2048
|
||||||
|
dhGroupExchangePreferredBits = 2048
|
||||||
|
dhGroupExchangeMaximumBits = 8192
|
||||||
|
)
|
||||||
|
|
||||||
|
func (gex *dhGEXSHA) diffieHellman(theirPublic, myPrivate *big.Int) (*big.Int, error) {
|
||||||
|
if theirPublic.Sign() <= 0 || theirPublic.Cmp(gex.p) >= 0 {
|
||||||
|
return nil, fmt.Errorf("ssh: DH parameter out of bounds")
|
||||||
|
}
|
||||||
|
return new(big.Int).Exp(theirPublic, myPrivate, gex.p), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gex *dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) {
|
||||||
|
// Send GexRequest
|
||||||
|
kexDHGexRequest := kexDHGexRequestMsg{
|
||||||
|
MinBits: dhGroupExchangeMinimumBits,
|
||||||
|
PreferedBits: dhGroupExchangePreferredBits,
|
||||||
|
MaxBits: dhGroupExchangeMaximumBits,
|
||||||
|
}
|
||||||
|
if err := c.writePacket(Marshal(&kexDHGexRequest)); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Receive GexGroup
|
||||||
|
packet, err := c.readPacket()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var kexDHGexGroup kexDHGexGroupMsg
|
||||||
|
if err = Unmarshal(packet, &kexDHGexGroup); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// reject if p's bit length < dhGroupExchangeMinimumBits or > dhGroupExchangeMaximumBits
|
||||||
|
if kexDHGexGroup.P.BitLen() < dhGroupExchangeMinimumBits || kexDHGexGroup.P.BitLen() > dhGroupExchangeMaximumBits {
|
||||||
|
return nil, fmt.Errorf("ssh: server-generated gex p is out of range (%d bits)", kexDHGexGroup.P.BitLen())
|
||||||
|
}
|
||||||
|
|
||||||
|
gex.p = kexDHGexGroup.P
|
||||||
|
gex.g = kexDHGexGroup.G
|
||||||
|
|
||||||
|
// Check if p is safe by verifing that p and (p-1)/2 are primes
|
||||||
|
one := big.NewInt(1)
|
||||||
|
var pHalf = &big.Int{}
|
||||||
|
pHalf.Rsh(gex.p, 1)
|
||||||
|
if !gex.p.ProbablyPrime(numMRTests) || !pHalf.ProbablyPrime(numMRTests) {
|
||||||
|
return nil, fmt.Errorf("ssh: server provided gex p is not safe")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if g is safe by verifing that g > 1 and g < p - 1
|
||||||
|
var pMinusOne = &big.Int{}
|
||||||
|
pMinusOne.Sub(gex.p, one)
|
||||||
|
if gex.g.Cmp(one) != 1 && gex.g.Cmp(pMinusOne) != -1 {
|
||||||
|
return nil, fmt.Errorf("ssh: server provided gex g is not safe")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send GexInit
|
||||||
|
x, err := rand.Int(randSource, pHalf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
X := new(big.Int).Exp(gex.g, x, gex.p)
|
||||||
|
kexDHGexInit := kexDHGexInitMsg{
|
||||||
|
X: X,
|
||||||
|
}
|
||||||
|
if err := c.writePacket(Marshal(&kexDHGexInit)); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Receive GexReply
|
||||||
|
packet, err = c.readPacket()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var kexDHGexReply kexDHGexReplyMsg
|
||||||
|
if err = Unmarshal(packet, &kexDHGexReply); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
kInt, err := gex.diffieHellman(kexDHGexReply.Y, x)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if k is safe by verifing that k > 1 and k < p - 1
|
||||||
|
if kInt.Cmp(one) != 1 && kInt.Cmp(pMinusOne) != -1 {
|
||||||
|
return nil, fmt.Errorf("ssh: derived k is not safe")
|
||||||
|
}
|
||||||
|
|
||||||
|
h := gex.hashFunc.New()
|
||||||
|
magics.write(h)
|
||||||
|
writeString(h, kexDHGexReply.HostKey)
|
||||||
|
binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMinimumBits))
|
||||||
|
binary.Write(h, binary.BigEndian, uint32(dhGroupExchangePreferredBits))
|
||||||
|
binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMaximumBits))
|
||||||
|
writeInt(h, gex.p)
|
||||||
|
writeInt(h, gex.g)
|
||||||
|
writeInt(h, X)
|
||||||
|
writeInt(h, kexDHGexReply.Y)
|
||||||
|
K := make([]byte, intLength(kInt))
|
||||||
|
marshalInt(K, kInt)
|
||||||
|
h.Write(K)
|
||||||
|
|
||||||
|
return &kexResult{
|
||||||
|
H: h.Sum(nil),
|
||||||
|
K: K,
|
||||||
|
HostKey: kexDHGexReply.HostKey,
|
||||||
|
Signature: kexDHGexReply.Signature,
|
||||||
|
Hash: gex.hashFunc,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Server half implementation of the Diffie Hellman Key Exchange with SHA1 and SHA256.
|
||||||
|
//
|
||||||
|
// This is a minimal implementation to satisfy the automated tests.
|
||||||
|
func (gex *dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) {
|
||||||
|
// Receive GexRequest
|
||||||
|
packet, err := c.readPacket()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var kexDHGexRequest kexDHGexRequestMsg
|
||||||
|
if err = Unmarshal(packet, &kexDHGexRequest); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// smoosh the user's preferred size into our own limits
|
||||||
|
if kexDHGexRequest.PreferedBits > dhGroupExchangeMaximumBits {
|
||||||
|
kexDHGexRequest.PreferedBits = dhGroupExchangeMaximumBits
|
||||||
|
}
|
||||||
|
if kexDHGexRequest.PreferedBits < dhGroupExchangeMinimumBits {
|
||||||
|
kexDHGexRequest.PreferedBits = dhGroupExchangeMinimumBits
|
||||||
|
}
|
||||||
|
// fix min/max if they're inconsistent. technically, we could just pout
|
||||||
|
// and hang up, but there's no harm in giving them the benefit of the
|
||||||
|
// doubt and just picking a bitsize for them.
|
||||||
|
if kexDHGexRequest.MinBits > kexDHGexRequest.PreferedBits {
|
||||||
|
kexDHGexRequest.MinBits = kexDHGexRequest.PreferedBits
|
||||||
|
}
|
||||||
|
if kexDHGexRequest.MaxBits < kexDHGexRequest.PreferedBits {
|
||||||
|
kexDHGexRequest.MaxBits = kexDHGexRequest.PreferedBits
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send GexGroup
|
||||||
|
// This is the group called diffie-hellman-group14-sha1 in RFC
|
||||||
|
// 4253 and Oakley Group 14 in RFC 3526.
|
||||||
|
p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16)
|
||||||
|
gex.p = p
|
||||||
|
gex.g = big.NewInt(2)
|
||||||
|
|
||||||
|
kexDHGexGroup := kexDHGexGroupMsg{
|
||||||
|
P: gex.p,
|
||||||
|
G: gex.g,
|
||||||
|
}
|
||||||
|
if err := c.writePacket(Marshal(&kexDHGexGroup)); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Receive GexInit
|
||||||
|
packet, err = c.readPacket()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var kexDHGexInit kexDHGexInitMsg
|
||||||
|
if err = Unmarshal(packet, &kexDHGexInit); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var pHalf = &big.Int{}
|
||||||
|
pHalf.Rsh(gex.p, 1)
|
||||||
|
|
||||||
|
y, err := rand.Int(randSource, pHalf)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
Y := new(big.Int).Exp(gex.g, y, gex.p)
|
||||||
|
kInt, err := gex.diffieHellman(kexDHGexInit.X, y)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
hostKeyBytes := priv.PublicKey().Marshal()
|
||||||
|
|
||||||
|
h := gex.hashFunc.New()
|
||||||
|
magics.write(h)
|
||||||
|
writeString(h, hostKeyBytes)
|
||||||
|
binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMinimumBits))
|
||||||
|
binary.Write(h, binary.BigEndian, uint32(dhGroupExchangePreferredBits))
|
||||||
|
binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMaximumBits))
|
||||||
|
writeInt(h, gex.p)
|
||||||
|
writeInt(h, gex.g)
|
||||||
|
writeInt(h, kexDHGexInit.X)
|
||||||
|
writeInt(h, Y)
|
||||||
|
|
||||||
|
K := make([]byte, intLength(kInt))
|
||||||
|
marshalInt(K, kInt)
|
||||||
|
h.Write(K)
|
||||||
|
|
||||||
|
H := h.Sum(nil)
|
||||||
|
|
||||||
|
// H is already a hash, but the hostkey signing will apply its
|
||||||
|
// own key-specific hash algorithm.
|
||||||
|
sig, err := signAndMarshal(priv, randSource, H)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
kexDHGexReply := kexDHGexReplyMsg{
|
||||||
|
HostKey: hostKeyBytes,
|
||||||
|
Y: Y,
|
||||||
|
Signature: sig,
|
||||||
|
}
|
||||||
|
packet = Marshal(&kexDHGexReply)
|
||||||
|
|
||||||
|
err = c.writePacket(packet)
|
||||||
|
|
||||||
|
return &kexResult{
|
||||||
|
H: H,
|
||||||
|
K: K,
|
||||||
|
HostKey: hostKeyBytes,
|
||||||
|
Signature: sig,
|
||||||
|
Hash: gex.hashFunc,
|
||||||
|
}, err
|
||||||
|
}
|
||||||
|
30
vendor/golang.org/x/crypto/ssh/messages.go
generated
vendored
30
vendor/golang.org/x/crypto/ssh/messages.go
generated
vendored
@ -97,6 +97,36 @@ type kexDHReplyMsg struct {
|
|||||||
Signature []byte
|
Signature []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See RFC 4419, section 5.
|
||||||
|
const msgKexDHGexGroup = 31
|
||||||
|
|
||||||
|
type kexDHGexGroupMsg struct {
|
||||||
|
P *big.Int `sshtype:"31"`
|
||||||
|
G *big.Int
|
||||||
|
}
|
||||||
|
|
||||||
|
const msgKexDHGexInit = 32
|
||||||
|
|
||||||
|
type kexDHGexInitMsg struct {
|
||||||
|
X *big.Int `sshtype:"32"`
|
||||||
|
}
|
||||||
|
|
||||||
|
const msgKexDHGexReply = 33
|
||||||
|
|
||||||
|
type kexDHGexReplyMsg struct {
|
||||||
|
HostKey []byte `sshtype:"33"`
|
||||||
|
Y *big.Int
|
||||||
|
Signature []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
const msgKexDHGexRequest = 34
|
||||||
|
|
||||||
|
type kexDHGexRequestMsg struct {
|
||||||
|
MinBits uint32 `sshtype:"34"`
|
||||||
|
PreferedBits uint32
|
||||||
|
MaxBits uint32
|
||||||
|
}
|
||||||
|
|
||||||
// See RFC 4253, section 10.
|
// See RFC 4253, section 10.
|
||||||
const msgServiceRequest = 5
|
const msgServiceRequest = 5
|
||||||
|
|
||||||
|
6
vendor/golang.org/x/crypto/ssh/server.go
generated
vendored
6
vendor/golang.org/x/crypto/ssh/server.go
generated
vendored
@ -193,6 +193,12 @@ func NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewCha
|
|||||||
if fullConf.MaxAuthTries == 0 {
|
if fullConf.MaxAuthTries == 0 {
|
||||||
fullConf.MaxAuthTries = 6
|
fullConf.MaxAuthTries = 6
|
||||||
}
|
}
|
||||||
|
// Check if the config contains any unsupported key exchanges
|
||||||
|
for _, kex := range fullConf.KeyExchanges {
|
||||||
|
if _, ok := serverForbiddenKexAlgos[kex]; ok {
|
||||||
|
return nil, nil, nil, fmt.Errorf("ssh: unsupported key exchange %s for server", kex)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
s := &connection{
|
s := &connection{
|
||||||
sshConn: sshConn{conn: c},
|
sshConn: sshConn{conn: c},
|
||||||
|
3
vendor/golang.org/x/net/bpf/vm_instructions.go
generated
vendored
3
vendor/golang.org/x/net/bpf/vm_instructions.go
generated
vendored
@ -129,7 +129,8 @@ func loadIndirect(ins LoadIndirect, in []byte, regX uint32) (uint32, bool) {
|
|||||||
func loadMemShift(ins LoadMemShift, in []byte) (uint32, bool) {
|
func loadMemShift(ins LoadMemShift, in []byte) (uint32, bool) {
|
||||||
offset := int(ins.Off)
|
offset := int(ins.Off)
|
||||||
|
|
||||||
if !inBounds(len(in), offset, 0) {
|
// Size of LoadMemShift is always 1 byte
|
||||||
|
if !inBounds(len(in), offset, 1) {
|
||||||
return 0, false
|
return 0, false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
vendor/golang.org/x/net/http2/server.go
generated
vendored
26
vendor/golang.org/x/net/http2/server.go
generated
vendored
@ -273,7 +273,20 @@ func ConfigureServer(s *http.Server, conf *Server) error {
|
|||||||
if testHookOnConn != nil {
|
if testHookOnConn != nil {
|
||||||
testHookOnConn()
|
testHookOnConn()
|
||||||
}
|
}
|
||||||
|
// The TLSNextProto interface predates contexts, so
|
||||||
|
// the net/http package passes down its per-connection
|
||||||
|
// base context via an exported but unadvertised
|
||||||
|
// method on the Handler. This is for internal
|
||||||
|
// net/http<=>http2 use only.
|
||||||
|
var ctx context.Context
|
||||||
|
type baseContexter interface {
|
||||||
|
BaseContext() context.Context
|
||||||
|
}
|
||||||
|
if bc, ok := h.(baseContexter); ok {
|
||||||
|
ctx = bc.BaseContext()
|
||||||
|
}
|
||||||
conf.ServeConn(c, &ServeConnOpts{
|
conf.ServeConn(c, &ServeConnOpts{
|
||||||
|
Context: ctx,
|
||||||
Handler: h,
|
Handler: h,
|
||||||
BaseConfig: hs,
|
BaseConfig: hs,
|
||||||
})
|
})
|
||||||
@ -284,6 +297,10 @@ func ConfigureServer(s *http.Server, conf *Server) error {
|
|||||||
|
|
||||||
// ServeConnOpts are options for the Server.ServeConn method.
|
// ServeConnOpts are options for the Server.ServeConn method.
|
||||||
type ServeConnOpts struct {
|
type ServeConnOpts struct {
|
||||||
|
// Context is the base context to use.
|
||||||
|
// If nil, context.Background is used.
|
||||||
|
Context context.Context
|
||||||
|
|
||||||
// BaseConfig optionally sets the base configuration
|
// BaseConfig optionally sets the base configuration
|
||||||
// for values. If nil, defaults are used.
|
// for values. If nil, defaults are used.
|
||||||
BaseConfig *http.Server
|
BaseConfig *http.Server
|
||||||
@ -294,6 +311,13 @@ type ServeConnOpts struct {
|
|||||||
Handler http.Handler
|
Handler http.Handler
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *ServeConnOpts) context() context.Context {
|
||||||
|
if o.Context != nil {
|
||||||
|
return o.Context
|
||||||
|
}
|
||||||
|
return context.Background()
|
||||||
|
}
|
||||||
|
|
||||||
func (o *ServeConnOpts) baseConfig() *http.Server {
|
func (o *ServeConnOpts) baseConfig() *http.Server {
|
||||||
if o != nil && o.BaseConfig != nil {
|
if o != nil && o.BaseConfig != nil {
|
||||||
return o.BaseConfig
|
return o.BaseConfig
|
||||||
@ -439,7 +463,7 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx context.Context, cancel func()) {
|
func serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx context.Context, cancel func()) {
|
||||||
ctx, cancel = context.WithCancel(context.Background())
|
ctx, cancel = context.WithCancel(opts.context())
|
||||||
ctx = context.WithValue(ctx, http.LocalAddrContextKey, c.LocalAddr())
|
ctx = context.WithValue(ctx, http.LocalAddrContextKey, c.LocalAddr())
|
||||||
if hs := opts.baseConfig(); hs != nil {
|
if hs := opts.baseConfig(); hs != nil {
|
||||||
ctx = context.WithValue(ctx, http.ServerContextKey, hs)
|
ctx = context.WithValue(ctx, http.ServerContextKey, hs)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user