Updating dependencies. (#11680)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
f226f672f3
Коммит
20825a1702
77
go.mod
77
go.mod
@@ -5,92 +5,99 @@ go 1.12
|
|||||||
require (
|
require (
|
||||||
github.com/Masterminds/squirrel v1.1.0
|
github.com/Masterminds/squirrel v1.1.0
|
||||||
github.com/NYTimes/gziphandler v1.1.1
|
github.com/NYTimes/gziphandler v1.1.1
|
||||||
|
github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 // indirect
|
||||||
github.com/avct/uasurfer v0.0.0-20190308134847-43c6f9a90eeb
|
github.com/avct/uasurfer v0.0.0-20190308134847-43c6f9a90eeb
|
||||||
github.com/blang/semver v3.5.1+incompatible
|
github.com/blang/semver v3.5.1+incompatible
|
||||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
|
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
|
||||||
github.com/corpix/uarand v0.0.0 // indirect
|
github.com/corpix/uarand v0.1.0 // indirect
|
||||||
github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3
|
github.com/dgryski/dgoogauth v0.0.0-20190221195224-5a805980a5f3
|
||||||
github.com/disintegration/imaging v1.6.0
|
github.com/disintegration/imaging v1.6.0
|
||||||
github.com/dyatlov/go-opengraph v0.0.0-20180429202543-816b6608b3c8
|
github.com/dyatlov/go-opengraph v0.0.0-20180429202543-816b6608b3c8
|
||||||
github.com/fortytw2/leaktest v1.3.0 // indirect
|
github.com/fortytw2/leaktest v1.3.0 // indirect
|
||||||
github.com/fsnotify/fsnotify v1.4.7
|
github.com/fsnotify/fsnotify v1.4.7
|
||||||
github.com/go-gorp/gorp v2.0.0+incompatible // indirect
|
github.com/go-gorp/gorp v2.0.0+incompatible // indirect
|
||||||
github.com/go-ldap/ldap v3.0.2+incompatible
|
github.com/go-ldap/ldap v3.0.3+incompatible
|
||||||
github.com/go-redis/redis v6.15.2+incompatible
|
github.com/go-redis/redis v6.15.2+incompatible
|
||||||
github.com/go-sql-driver/mysql v1.4.1
|
github.com/go-sql-driver/mysql v1.4.1
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
||||||
github.com/google/uuid v1.1.1 // indirect
|
github.com/google/uuid v1.1.1 // indirect
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20190411002643-bd77b112433e // indirect
|
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c // indirect
|
||||||
github.com/gorilla/handlers v1.4.0
|
github.com/gorilla/handlers v1.4.1
|
||||||
github.com/gorilla/mux v1.7.0
|
github.com/gorilla/mux v1.7.3
|
||||||
github.com/gorilla/schema v1.1.0
|
github.com/gorilla/schema v1.1.0
|
||||||
github.com/gorilla/websocket v1.4.0
|
github.com/gorilla/websocket v1.4.0
|
||||||
github.com/hako/durafmt v0.0.0-20180520121703-7b7ae1e72ead
|
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
|
||||||
github.com/hashicorp/go-hclog v0.8.0
|
github.com/hako/durafmt v0.0.0-20190612201238-650ed9f29a84
|
||||||
github.com/hashicorp/go-plugin v1.0.0
|
github.com/hashicorp/go-hclog v0.9.2
|
||||||
|
github.com/hashicorp/go-immutable-radix v1.1.0 // indirect
|
||||||
|
github.com/hashicorp/go-msgpack v0.5.5 // indirect
|
||||||
|
github.com/hashicorp/go-plugin v1.0.1
|
||||||
github.com/hashicorp/go-sockaddr v1.0.2 // indirect
|
github.com/hashicorp/go-sockaddr v1.0.2 // indirect
|
||||||
github.com/hashicorp/go-uuid v1.0.1 // indirect
|
github.com/hashicorp/go-uuid v1.0.1 // indirect
|
||||||
github.com/hashicorp/memberlist v0.1.4-0.20190312092157-a8f83c6403e0
|
github.com/hashicorp/memberlist v0.1.4
|
||||||
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d // indirect
|
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d // indirect
|
||||||
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428
|
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
github.com/jaytaylor/html2text v0.0.0-20190408195923-01ec452cbe43
|
||||||
github.com/jaytaylor/html2text v0.0.0-20190311042500-a93a6c6ea053
|
|
||||||
github.com/jmoiron/sqlx v1.2.0
|
github.com/jmoiron/sqlx v1.2.0
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
|
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
|
||||||
github.com/lib/pq v1.0.0
|
github.com/lib/pq v1.2.0
|
||||||
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe // indirect
|
github.com/magiconair/properties v1.8.1 // indirect
|
||||||
github.com/mattermost/go-i18n v1.1.2
|
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e // indirect
|
||||||
|
github.com/mattermost/go-i18n v1.11.0
|
||||||
github.com/mattermost/gorp v2.0.1-0.20190301154413-3b31e9a39d05+incompatible
|
github.com/mattermost/gorp v2.0.1-0.20190301154413-3b31e9a39d05+incompatible
|
||||||
github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0
|
github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0
|
||||||
github.com/mattermost/viper v1.0.4
|
github.com/mattermost/viper v1.0.4
|
||||||
github.com/mattn/go-runewidth v0.0.4 // indirect
|
github.com/mattn/go-runewidth v0.0.4 // indirect
|
||||||
github.com/mattn/go-sqlite3 v1.10.0
|
github.com/mattn/go-sqlite3 v1.11.0
|
||||||
github.com/miekg/dns v1.1.6 // indirect
|
github.com/miekg/dns v1.1.15 // indirect
|
||||||
github.com/minio/minio-go v0.0.0-20190422205105-a8704b60278f
|
github.com/minio/minio-go v0.0.0-20190422205105-a8704b60278f
|
||||||
github.com/mitchellh/go-testing-interface v1.0.0 // indirect
|
github.com/mitchellh/go-testing-interface v1.0.0 // indirect
|
||||||
|
github.com/muesli/smartcrop v0.3.0 // indirect
|
||||||
github.com/olekukonko/tablewriter v0.0.1 // indirect
|
github.com/olekukonko/tablewriter v0.0.1 // indirect
|
||||||
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
|
||||||
github.com/pascaldekloe/goe v0.1.0 // indirect
|
|
||||||
github.com/pborman/uuid v1.2.0
|
github.com/pborman/uuid v1.2.0
|
||||||
github.com/pelletier/go-toml v1.3.0 // indirect
|
github.com/pelletier/go-toml v1.4.0 // indirect
|
||||||
github.com/pkg/errors v0.8.1
|
github.com/pkg/errors v0.8.1
|
||||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829
|
github.com/prometheus/client_golang v1.0.0
|
||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 // indirect
|
github.com/prometheus/common v0.6.0 // indirect
|
||||||
github.com/prometheus/procfs v0.0.0-20190322151404-55ae3d9d5573 // indirect
|
github.com/prometheus/procfs v0.0.3 // indirect
|
||||||
github.com/rs/cors v1.6.0
|
github.com/rs/cors v1.6.0
|
||||||
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd
|
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd
|
||||||
github.com/segmentio/analytics-go v3.0.1+incompatible
|
github.com/segmentio/analytics-go v3.0.1+incompatible
|
||||||
github.com/segmentio/backo-go v0.0.0-20160424052352-204274ad699c // indirect
|
github.com/segmentio/backo-go v0.0.0-20160424052352-204274ad699c // indirect
|
||||||
github.com/sirupsen/logrus v1.4.0
|
github.com/sirupsen/logrus v1.4.2
|
||||||
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-20190710185942-9d28bd7c0945 // indirect
|
||||||
github.com/spf13/afero v1.2.2 // indirect
|
github.com/spf13/afero v1.2.2 // indirect
|
||||||
github.com/spf13/cobra v0.0.3
|
github.com/spf13/cobra v0.0.5
|
||||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||||
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
|
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect
|
||||||
|
github.com/stretchr/objx v0.2.0 // indirect
|
||||||
github.com/stretchr/testify v1.3.0
|
github.com/stretchr/testify v1.3.0
|
||||||
github.com/throttled/throttled v2.2.4+incompatible
|
github.com/throttled/throttled v2.2.4+incompatible
|
||||||
github.com/tylerb/graceful v1.2.15
|
github.com/tylerb/graceful v1.2.15
|
||||||
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect
|
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect
|
||||||
github.com/ziutek/mymysql v1.5.4 // indirect
|
github.com/ziutek/mymysql v1.5.4 // indirect
|
||||||
go.uber.org/atomic v1.3.2 // indirect
|
go.uber.org/atomic v1.4.0 // indirect
|
||||||
go.uber.org/multierr v1.1.0 // indirect
|
go.uber.org/multierr v1.1.0 // indirect
|
||||||
go.uber.org/zap v1.9.1
|
go.uber.org/zap v1.10.0
|
||||||
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734
|
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4
|
||||||
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f
|
golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9
|
||||||
golang.org/x/net v0.0.0-20190424112056-4829fb13d2c6
|
golang.org/x/net v0.0.0-20190628185345-da137c7871d7
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58 // indirect
|
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 // indirect
|
||||||
golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872 // indirect
|
|
||||||
golang.org/x/text v0.3.2
|
golang.org/x/text v0.3.2
|
||||||
|
google.golang.org/appengine v1.6.1 // indirect
|
||||||
|
google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610 // indirect
|
||||||
|
google.golang.org/grpc v1.22.0 // indirect
|
||||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||||
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
|
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
|
||||||
gopkg.in/ini.v1 v1.42.0 // indirect
|
gopkg.in/ini.v1 v1.44.0 // indirect
|
||||||
gopkg.in/mail.v2 v2.3.1
|
gopkg.in/mail.v2 v2.3.1
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0
|
||||||
gopkg.in/olivere/elastic.v5 v5.0.79
|
gopkg.in/olivere/elastic.v5 v5.0.81
|
||||||
gopkg.in/yaml.v2 v2.2.2
|
gopkg.in/yaml.v2 v2.2.2
|
||||||
willnorris.com/go/imageproxy v0.8.1-0.20190326225038-d4246a08fdec
|
willnorris.com/go/imageproxy v0.9.0
|
||||||
)
|
)
|
||||||
|
|
||||||
// Workaround for https://github.com/golang/go/issues/30831 and fallout.
|
// Workaround for https://github.com/golang/go/issues/30831 and fallout.
|
||||||
|
|||||||
180
go.sum
180
go.sum
@@ -9,8 +9,12 @@ github.com/Azure/azure-sdk-for-go v26.5.0+incompatible/go.mod h1:9XXNKU+eRnpl9mo
|
|||||||
github.com/Azure/go-autorest v11.5.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
|
github.com/Azure/go-autorest v11.5.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
|
||||||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||||
|
github.com/Masterminds/glide v0.13.2/go.mod h1:STyF5vcenH/rUqTEv+/hBXlSTo7KYwg2oc2f4tzPWic=
|
||||||
|
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
||||||
github.com/Masterminds/squirrel v1.1.0 h1:baP1qLdoQCeTw3ifCdOq2dkYc6vGcmRdaociKLbEJXs=
|
github.com/Masterminds/squirrel v1.1.0 h1:baP1qLdoQCeTw3ifCdOq2dkYc6vGcmRdaociKLbEJXs=
|
||||||
github.com/Masterminds/squirrel v1.1.0/go.mod h1:yaPeOnPG5ZRwL9oKdTsO/prlkPbXWZlRVMQ/gGlzIuA=
|
github.com/Masterminds/squirrel v1.1.0/go.mod h1:yaPeOnPG5ZRwL9oKdTsO/prlkPbXWZlRVMQ/gGlzIuA=
|
||||||
|
github.com/Masterminds/vcs v1.13.0/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA=
|
||||||
github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
|
github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
|
||||||
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
|
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
|
||||||
github.com/PaulARoy/azurestoragecache v0.0.0-20170906084534-3c249a3ba788/go.mod h1:lY1dZd8HBzJ10eqKERHn3CU59tfhzcAVb2c0ZhIWSOk=
|
github.com/PaulARoy/azurestoragecache v0.0.0-20170906084534-3c249a3ba788/go.mod h1:lY1dZd8HBzJ10eqKERHn3CU59tfhzcAVb2c0ZhIWSOk=
|
||||||
@@ -23,12 +27,16 @@ github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb
|
|||||||
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/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=
|
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=
|
||||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||||
|
github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 h1:EFSB7Zo9Eg91v7MJPVsifUysc/wPdN+NOnVe6bWbdBM=
|
||||||
|
github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg=
|
||||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||||
github.com/avct/uasurfer v0.0.0-20190308134847-43c6f9a90eeb h1:Y3aZuokc2y31S/oh04f5893WST38EefizkMaP4qS6DM=
|
github.com/avct/uasurfer v0.0.0-20190308134847-43c6f9a90eeb h1:Y3aZuokc2y31S/oh04f5893WST38EefizkMaP4qS6DM=
|
||||||
github.com/avct/uasurfer v0.0.0-20190308134847-43c6f9a90eeb/go.mod h1:noBAuukeYOXa0aXGqxr24tADqkwDO2KRD15FsuaZ5a8=
|
github.com/avct/uasurfer v0.0.0-20190308134847-43c6f9a90eeb/go.mod h1:noBAuukeYOXa0aXGqxr24tADqkwDO2KRD15FsuaZ5a8=
|
||||||
github.com/aws/aws-sdk-go v1.19.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
github.com/aws/aws-sdk-go v1.19.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
|
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/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||||
|
github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
|
||||||
|
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||||
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
|
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
|
||||||
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||||
@@ -36,13 +44,17 @@ github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4Yn
|
|||||||
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
|
||||||
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
|
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
|
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
|
||||||
|
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
|
github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA=
|
||||||
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=
|
||||||
github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||||
github.com/corpix/uarand v0.0.0 h1:mNbzro1GwUcZ1hmO2rWXytkR3JBxNxxctzjyuhO+Aig=
|
github.com/corpix/uarand v0.1.0 h1:HgE/0ismPNM4n3z2VeZxzwpMJiN4uSZ+SMpxxvoyffY=
|
||||||
github.com/corpix/uarand v0.0.0/go.mod h1:JSm890tOkDN+M1jqN8pUGDKnzJrsVbJwSMHBY4zwz7M=
|
github.com/corpix/uarand v0.1.0/go.mod h1:SFKZvkcRoLqVRFZ4u25xPmp6m9ktANfbpXZ7SJ0/FNU=
|
||||||
|
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
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=
|
||||||
@@ -72,9 +84,10 @@ github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aev
|
|||||||
github.com/go-gorp/gorp v2.0.0+incompatible h1:dIQPsBtl6/H1MjVseWuWPXa7ET4p6Dve4j3Hg+UjqYw=
|
github.com/go-gorp/gorp v2.0.0+incompatible h1:dIQPsBtl6/H1MjVseWuWPXa7ET4p6Dve4j3Hg+UjqYw=
|
||||||
github.com/go-gorp/gorp v2.0.0+incompatible/go.mod h1:7IfkAQnO7jfT/9IQ3R9wL1dFhukN6aQxzKTHnkxzA/E=
|
github.com/go-gorp/gorp v2.0.0+incompatible/go.mod h1:7IfkAQnO7jfT/9IQ3R9wL1dFhukN6aQxzKTHnkxzA/E=
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-ldap/ldap v3.0.2+incompatible h1:kD5HQcAzlQ7yrhfn+h+MSABeAy/jAJhvIJ/QDllP44g=
|
github.com/go-ldap/ldap v3.0.3+incompatible h1:HTeSZO8hWMS1Rgb2Ziku6b8a7qRIZZMHjsvuZyatzwk=
|
||||||
github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
|
github.com/go-ldap/ldap v3.0.3+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
|
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||||
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
|
github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
|
||||||
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
|
github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
|
||||||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||||
@@ -94,6 +107,8 @@ 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/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/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
|
||||||
|
github.com/golang/protobuf v1.3.2/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/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
|
github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
|
||||||
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
|
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
|
||||||
@@ -101,6 +116,7 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z
|
|||||||
github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
|
github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
|
||||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
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/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
|
github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
|
||||||
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=
|
||||||
@@ -112,14 +128,14 @@ github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk
|
|||||||
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/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20190411002643-bd77b112433e h1:XWcjeEtTFTOVA9Fs1w7n2XBftk5ib4oZrhzWk0B+3eA=
|
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20190411002643-bd77b112433e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||||
github.com/gorilla/handlers v1.4.0 h1:XulKRWSQK5uChr4pEgSE4Tc/OcmnU9GJuSwdog/tZsA=
|
github.com/gorilla/handlers v1.4.1 h1:BHvcRGJe/TrL+OqFxoKQGddTgeibiOjaBssV5a/N9sw=
|
||||||
github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
github.com/gorilla/handlers v1.4.1/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
github.com/gorilla/mux v1.7.0 h1:tOSd0UKHQd6urX6ApfOn4XdBMY6Sh1MfxV3kmaazO+U=
|
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
|
||||||
github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY=
|
github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY=
|
||||||
github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
|
github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
|
||||||
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
|
||||||
@@ -127,24 +143,32 @@ github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoA
|
|||||||
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
||||||
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc h1:f8eY6cV/x1x+HLjOp4r72s/31/V2aTUtg5oKRRPf8/Q=
|
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc h1:f8eY6cV/x1x+HLjOp4r72s/31/V2aTUtg5oKRRPf8/Q=
|
||||||
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
||||||
|
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
|
||||||
|
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
|
github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
|
github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
github.com/hako/durafmt v0.0.0-20180520121703-7b7ae1e72ead h1:Y9WOGZY2nw5ksbEf5AIpk+vK52Tdg/VN/rHFRfEeeGQ=
|
github.com/hako/durafmt v0.0.0-20190612201238-650ed9f29a84 h1:RvcDqcKLua4b/jtXez7ZVe9s6Iq5N6ujVevqY4FBQmM=
|
||||||
github.com/hako/durafmt v0.0.0-20180520121703-7b7ae1e72ead/go.mod h1:5Scbynm8dF1XAPwIwkGPqzkM/shndPm79Jd1003hTjE=
|
github.com/hako/durafmt v0.0.0-20190612201238-650ed9f29a84/go.mod h1:5Scbynm8dF1XAPwIwkGPqzkM/shndPm79Jd1003hTjE=
|
||||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
||||||
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
|
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI=
|
||||||
github.com/hashicorp/go-hclog v0.8.0 h1:z3ollgGRg8RjfJH6UVBaG54R70GFd++QOkvnJH3VSBY=
|
github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI=
|
||||||
github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
|
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
|
||||||
github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0=
|
github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0=
|
||||||
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||||
|
github.com/hashicorp/go-immutable-radix v1.1.0 h1:vN9wG1D6KG6YHRTWr8512cxGOVgTMEfgEdSj/hr8MPc=
|
||||||
|
github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||||
github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4=
|
github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4=
|
||||||
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
||||||
|
github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI=
|
||||||
|
github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
||||||
github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
|
github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
|
||||||
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
||||||
github.com/hashicorp/go-plugin v1.0.0 h1:/gQ1sNR8/LHpoxKRQq4PmLBuacfZb4tC93e9B30o/7c=
|
github.com/hashicorp/go-plugin v1.0.1 h1:4OtAfUGbnKC6yS48p0CtMX2oFYtzFZVv6rok3cRWgnE=
|
||||||
github.com/hashicorp/go-plugin v1.0.0/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
|
github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
||||||
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
||||||
github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
|
github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
|
||||||
github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
|
github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
|
||||||
@@ -158,8 +182,8 @@ github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+
|
|||||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||||
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/hashicorp/memberlist v0.1.4-0.20190312092157-a8f83c6403e0 h1:bMtYlyLqR2CEWIgoedahjLbmEIqxvl+gbctdqSU/15E=
|
github.com/hashicorp/memberlist v0.1.4 h1:gkyML/r71w3FL8gUi74Vk76avkj/9lYAY9lvg0OcoGs=
|
||||||
github.com/hashicorp/memberlist v0.1.4-0.20190312092157-a8f83c6403e0/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
||||||
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
||||||
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ=
|
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ=
|
||||||
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
|
||||||
@@ -169,12 +193,14 @@ github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428 h1:Mo9W14pwbO9VfRe+y
|
|||||||
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428/go.mod h1:uhpZMVGznybq1itEKXj6RYw9I71qK4kH+OGMjRC4KEo=
|
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428/go.mod h1:uhpZMVGznybq1itEKXj6RYw9I71qK4kH+OGMjRC4KEo=
|
||||||
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/jaytaylor/html2text v0.0.0-20190311042500-a93a6c6ea053 h1:vAR93++rxlMlJRMK0hKD3l5La7FjpmUIxO1jnJmgTbI=
|
github.com/jamiealquiza/envy v1.1.0/go.mod h1:MP36BriGCLwEHhi1OU8E9569JNZrjWfCvzG7RsPnHus=
|
||||||
github.com/jaytaylor/html2text v0.0.0-20190311042500-a93a6c6ea053/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk=
|
github.com/jaytaylor/html2text v0.0.0-20190408195923-01ec452cbe43 h1:jTkyeF7NZ5oIr0ESmcrpiDgAfoidCBF4F5kJhjtaRwE=
|
||||||
|
github.com/jaytaylor/html2text v0.0.0-20190408195923-01ec452cbe43/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk=
|
||||||
github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU=
|
github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU=
|
||||||
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/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
|
github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
|
||||||
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
|
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
|
||||||
|
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||||
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.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=
|
||||||
@@ -198,14 +224,18 @@ github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhR
|
|||||||
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw=
|
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw=
|
||||||
github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
|
github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
|
||||||
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
|
github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
|
||||||
|
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
|
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
|
||||||
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/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
|
||||||
|
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
github.com/mailru/easyjson v0.0.0-20180730094502-03f2033d19d5/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
github.com/mailru/easyjson v0.0.0-20180730094502-03f2033d19d5/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||||
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe h1:W/GaMY0y69G4cFlmsC6B9sbuo2fP8OFP1ABjt4kPz+w=
|
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
|
||||||
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||||
github.com/marstr/guid v0.0.0-20170427235115-8bdf7d1a087c/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
|
github.com/marstr/guid v0.0.0-20170427235115-8bdf7d1a087c/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
|
||||||
github.com/mattermost/go-i18n v1.1.2 h1:iyIztdnCePILpzW1nsZSLQtqhtI6M5E3OS6IkFv/BMw=
|
github.com/mattermost/go-i18n v1.11.0 h1:1hLKqn/ZvhZ80OekjVPGYcCrBfMz+YxNNgqS+beL7zE=
|
||||||
github.com/mattermost/go-i18n v1.1.2/go.mod h1:RyS7FDNQlzF1PsjbJWHRI35exqaKGSO9qD4iv8QjE34=
|
github.com/mattermost/go-i18n v1.11.0/go.mod h1:RyS7FDNQlzF1PsjbJWHRI35exqaKGSO9qD4iv8QjE34=
|
||||||
github.com/mattermost/gorp v2.0.1-0.20190301154413-3b31e9a39d05+incompatible h1:FN4zK2wNig7MVVsOsGEZ+LeIq0gUcudn3LEGgbodMq8=
|
github.com/mattermost/gorp v2.0.1-0.20190301154413-3b31e9a39d05+incompatible h1:FN4zK2wNig7MVVsOsGEZ+LeIq0gUcudn3LEGgbodMq8=
|
||||||
github.com/mattermost/gorp v2.0.1-0.20190301154413-3b31e9a39d05+incompatible/go.mod h1:0kX1qa3DOpaPJyOdMLeo7TcBN0QmUszj9a/VygOhDe0=
|
github.com/mattermost/gorp v2.0.1-0.20190301154413-3b31e9a39d05+incompatible/go.mod h1:0kX1qa3DOpaPJyOdMLeo7TcBN0QmUszj9a/VygOhDe0=
|
||||||
github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0 h1:G9tL6JXRBMzjuD1kkBtcnd42kUiT6QDwxfFYu7adM6o=
|
github.com/mattermost/rsc v0.0.0-20160330161541-bbaefb05eaa0 h1:G9tL6JXRBMzjuD1kkBtcnd42kUiT6QDwxfFYu7adM6o=
|
||||||
@@ -217,13 +247,13 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx
|
|||||||
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/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||||
github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o=
|
github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q=
|
||||||
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
|
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/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||||
github.com/miekg/dns v1.1.6 h1:jVwb4GDwD65q/gtItR/lIZHjNH93QfeGxZUkzJcW9mc=
|
github.com/miekg/dns v1.1.15 h1:CSSIDtllwGLMoA6zjdKnaE6Tx6eVUxQ29LUgGetiDCI=
|
||||||
github.com/miekg/dns v1.1.6/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||||
github.com/minio/minio-go v0.0.0-20190422205105-a8704b60278f h1:pIUObqY9ljwlPfUINTvfWhEuoJyy9dkCloS2f5Mf1Ks=
|
github.com/minio/minio-go v0.0.0-20190422205105-a8704b60278f h1:pIUObqY9ljwlPfUINTvfWhEuoJyy9dkCloS2f5Mf1Ks=
|
||||||
github.com/minio/minio-go v0.0.0-20190422205105-a8704b60278f/go.mod h1:/haSOWG8hQNx2+JOfLJ9GKp61EAmgPwRVw/Sac0NzaM=
|
github.com/minio/minio-go v0.0.0-20190422205105-a8704b60278f/go.mod h1:/haSOWG8hQNx2+JOfLJ9GKp61EAmgPwRVw/Sac0NzaM=
|
||||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
||||||
@@ -235,11 +265,16 @@ github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eI
|
|||||||
github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
|
github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
|
||||||
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
|
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
|
||||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
|
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||||
github.com/muesli/smartcrop v0.2.1-0.20181030220600-548bbf0c0965 h1:BdOnvj+P+06ZFwYd07iFWXHPfRyrJd5sAXpX9+E8bxM=
|
github.com/muesli/smartcrop v0.2.1-0.20181030220600-548bbf0c0965 h1:BdOnvj+P+06ZFwYd07iFWXHPfRyrJd5sAXpX9+E8bxM=
|
||||||
github.com/muesli/smartcrop v0.2.1-0.20181030220600-548bbf0c0965/go.mod h1:i2fCI/UorTfgEpPPLWiFBv4pye+YAG78RwcQLUkocpI=
|
github.com/muesli/smartcrop v0.2.1-0.20181030220600-548bbf0c0965/go.mod h1:i2fCI/UorTfgEpPPLWiFBv4pye+YAG78RwcQLUkocpI=
|
||||||
|
github.com/muesli/smartcrop v0.3.0 h1:JTlSkmxWg/oQ1TcLDoypuirdE8Y/jzNirQeLkxpA6Oc=
|
||||||
|
github.com/muesli/smartcrop v0.3.0/go.mod h1:i2fCI/UorTfgEpPPLWiFBv4pye+YAG78RwcQLUkocpI=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
||||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
||||||
|
github.com/ngdinhtoan/glide-cleanup v0.2.0/go.mod h1:UQzsmiDOb8YV3nOsCxK/c9zPpCZVNoHScRE3EO9pVMM=
|
||||||
github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
|
github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
|
||||||
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
|
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
|
||||||
github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88=
|
github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88=
|
||||||
@@ -262,8 +297,8 @@ github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
|
|||||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
||||||
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
||||||
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/pelletier/go-toml v1.3.0 h1:e5+lF2E4Y2WCIxBefVowBuB0iHrUH4HZ8q+6mGF7fJc=
|
github.com/pelletier/go-toml v1.4.0 h1:u3Z1r+oOXJIkxqw34zVhyPgjBsm6X2wn21NWs/HfSeg=
|
||||||
github.com/pelletier/go-toml v1.3.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
|
github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
|
||||||
github.com/peterbourgon/diskv v0.0.0-20171120014656-2973218375c3/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
github.com/peterbourgon/diskv v0.0.0-20171120014656-2973218375c3/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
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/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
@@ -274,26 +309,36 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
|
|||||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||||
github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||||
|
github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM=
|
||||||
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 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_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
||||||
|
github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
|
||||||
|
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
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 h1:BVwpUVJDADN2ufcGik7W992pyps0wZ888b/y9GXcLTU=
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
|
||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||||
|
github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||||
github.com/prometheus/common v0.2.0 h1:kUZDBDTdBVBYBj5Tmh2NZLlF60mfjA27rM34b+cVwNU=
|
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/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
|
github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkpEo=
|
||||||
|
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
|
||||||
github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/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 h1:/K3IL0Z1quvmJ7X0A1AwNEK7CRkVK3YwfOU/QAL4WGg=
|
||||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
github.com/prometheus/procfs v0.0.0-20190322151404-55ae3d9d5573 h1:gAuD3LIrjkoOOPLlhGlZWZXztrQII9a9kT6HS5jFtSY=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
github.com/prometheus/procfs v0.0.0-20190322151404-55ae3d9d5573/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE=
|
||||||
|
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI=
|
github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI=
|
||||||
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
|
github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
|
||||||
|
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||||
github.com/rwcarlsen/goexif v0.0.0-20190318171057-76e3344f7516 h1:unvLzUrgn54Nhn5yJB8qUBr/a7wiZHQaJ/8Y4yTGAjE=
|
github.com/rwcarlsen/goexif v0.0.0-20190318171057-76e3344f7516 h1:unvLzUrgn54Nhn5yJB8qUBr/a7wiZHQaJ/8Y4yTGAjE=
|
||||||
github.com/rwcarlsen/goexif v0.0.0-20190318171057-76e3344f7516/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
|
github.com/rwcarlsen/goexif v0.0.0-20190318171057-76e3344f7516/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk=
|
||||||
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd h1:CmH9+J6ZSsIjUK3dcGsnCnO41eRBOnY12zwkn5qVwgc=
|
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd h1:CmH9+J6ZSsIjUK3dcGsnCnO41eRBOnY12zwkn5qVwgc=
|
||||||
@@ -307,40 +352,44 @@ github.com/segmentio/analytics-go v3.0.1+incompatible/go.mod h1:C7CYBtQWk4vRk2Ry
|
|||||||
github.com/segmentio/backo-go v0.0.0-20160424052352-204274ad699c h1:rsRTAcCR5CeNLkvgBVSjQoDGRRt6kggsE6XYBqCv2KQ=
|
github.com/segmentio/backo-go v0.0.0-20160424052352-204274ad699c h1:rsRTAcCR5CeNLkvgBVSjQoDGRRt6kggsE6XYBqCv2KQ=
|
||||||
github.com/segmentio/backo-go v0.0.0-20160424052352-204274ad699c/go.mod h1:kJ9mm9YmoWSkk+oQ+5Cj8DEoRCX2JT6As4kEtIIOp1M=
|
github.com/segmentio/backo-go v0.0.0-20160424052352-204274ad699c/go.mod h1:kJ9mm9YmoWSkk+oQ+5Cj8DEoRCX2JT6As4kEtIIOp1M=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.0 h1:yKenngtzGh+cUSSh6GWbxW2abRqhYUSR/t/6+2QqNvE=
|
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
||||||
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
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-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/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/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
|
github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
|
||||||
github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
|
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-20190710185942-9d28bd7c0945 h1:N8Bg45zpk/UcpNGnfJt2y/3lRWASHNTUET8owPYCgYI=
|
||||||
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
github.com/smartystreets/goconvey v0.0.0-20190710185942-9d28bd7c0945/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/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
|
github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
|
||||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||||
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
||||||
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.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
|
github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
|
||||||
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
|
||||||
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
|
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
|
||||||
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/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
||||||
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
|
||||||
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/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo=
|
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo=
|
||||||
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM=
|
github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf/go.mod h1:RJID2RhlZKId02nZ62WenDCkgHFerpIOmW0iT7GKmXM=
|
||||||
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 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
|
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
|
||||||
|
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||||
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/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
|
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
|
||||||
github.com/throttled/throttled v2.2.4+incompatible h1:aVKdoH/qT5Mo1Lm/678OkX2pFg7aRpHlTn1tfgaSKxs=
|
github.com/throttled/throttled v2.2.4+incompatible h1:aVKdoH/qT5Mo1Lm/678OkX2pFg7aRpHlTn1tfgaSKxs=
|
||||||
github.com/throttled/throttled v2.2.4+incompatible/go.mod h1:0BjlrEGQmvxps+HuXLsyRdqpSRvJpq0PNIsOtqP9Nos=
|
github.com/throttled/throttled v2.2.4+incompatible/go.mod h1:0BjlrEGQmvxps+HuXLsyRdqpSRvJpq0PNIsOtqP9Nos=
|
||||||
|
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
||||||
github.com/tylerb/graceful v1.2.15 h1:B0x01Y8fsJpogzZTkDg6BDi6eMf03s01lEKGdrv83oA=
|
github.com/tylerb/graceful v1.2.15 h1:B0x01Y8fsJpogzZTkDg6BDi6eMf03s01lEKGdrv83oA=
|
||||||
github.com/tylerb/graceful v1.2.15/go.mod h1:LPYTbOYmUTdabwRt0TGhLllQ0MUNbs0Y5q1WXJOI9II=
|
github.com/tylerb/graceful v1.2.15/go.mod h1:LPYTbOYmUTdabwRt0TGhLllQ0MUNbs0Y5q1WXJOI9II=
|
||||||
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=
|
||||||
@@ -352,12 +401,12 @@ github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wK
|
|||||||
go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
|
go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
|
||||||
go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A=
|
go.opencensus.io v0.19.1/go.mod h1:gug0GbSHa8Pafr0d2urOSgoXHZ6x/RUlaiT0d9pqb4A=
|
||||||
go.opencensus.io v0.19.2/go.mod h1:NO/8qkisMZLZ1FCsKNqtJPwc8/TaclWyY0B6wcYNg9M=
|
go.opencensus.io v0.19.2/go.mod h1:NO/8qkisMZLZ1FCsKNqtJPwc8/TaclWyY0B6wcYNg9M=
|
||||||
go.uber.org/atomic v1.3.2 h1:2Oa65PReHzfn29GpvgsYwloV9AVFHPDk8tYxt2c2tr4=
|
go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
|
||||||
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
|
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
go.uber.org/zap v1.9.1 h1:XCJQEf3W6eZaVwhRBof6ImoYGJSITeKWsyeh3HFu/5o=
|
go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
|
||||||
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||||
go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
|
go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE=
|
||||||
golang.org/x/build v0.0.0-20190314133821-5284462c4bec/go.mod h1:atTaCNAy0f16Ah5aV1gMSwgiKVHwu/JncqDpuRr7lS4=
|
golang.org/x/build v0.0.0-20190314133821-5284462c4bec/go.mod h1:atTaCNAy0f16Ah5aV1gMSwgiKVHwu/JncqDpuRr7lS4=
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
@@ -367,17 +416,21 @@ golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnf
|
|||||||
golang.org/x/crypto v0.0.0-20190128193316-c7b33c32a30b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20190128193316-c7b33c32a30b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||||
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-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc=
|
||||||
|
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/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/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
||||||
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f h1:FO4MZ3N56GnxbqxGKqh+YTzUWQ2sDwtFQEZgLOxh9Jc=
|
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f h1:FO4MZ3N56GnxbqxGKqh+YTzUWQ2sDwtFQEZgLOxh9Jc=
|
||||||
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||||
|
golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9 h1:uc17S921SPw5F2gJo7slQ3aqvr2RwpL7eb3+DZncu3s=
|
||||||
|
golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/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-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/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/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=
|
||||||
@@ -385,6 +438,7 @@ golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73r
|
|||||||
golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181106065722-10aee1819953/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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/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-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@@ -392,8 +446,10 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r
|
|||||||
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-20190322120337-addf6b3196f6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190322120337-addf6b3196f6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
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-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
golang.org/x/net v0.0.0-20190424112056-4829fb13d2c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU=
|
||||||
|
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/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-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
@@ -426,8 +482,10 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||||||
golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc h1:4gbWbmmPFp4ySWICouJl6emP0MyS31yy9SrTlAGFT+g=
|
golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc h1:4gbWbmmPFp4ySWICouJl6emP0MyS31yy9SrTlAGFT+g=
|
||||||
golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190322080309-f49334f85ddc/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
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-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 h1:LepdCS8Gf/MVejFIt8lsiexZATdoGVyp5bcyS+rYoUI=
|
||||||
|
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/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=
|
||||||
@@ -441,8 +499,11 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
|
|||||||
golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20181219222714-6e267b5cc78e/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-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-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
|
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
||||||
google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
||||||
google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
||||||
@@ -454,6 +515,8 @@ google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO50
|
|||||||
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-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
@@ -461,12 +524,16 @@ google.golang.org/genproto v0.0.0-20181219182458-5a97ab628bfb/go.mod h1:7Ep/1NZk
|
|||||||
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-20190321212433-e79c0c59cdb5 h1:VchCZUJA1Lkjn3FxAtLPl4GotxoGt/E8ZIm9nVqbhQ8=
|
google.golang.org/genproto v0.0.0-20190321212433-e79c0c59cdb5 h1:VchCZUJA1Lkjn3FxAtLPl4GotxoGt/E8ZIm9nVqbhQ8=
|
||||||
google.golang.org/genproto v0.0.0-20190321212433-e79c0c59cdb5/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190321212433-e79c0c59cdb5/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
|
google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610 h1:Ygq9/SRJX9+dU0WCIICM8RkWvDw03lvB77hrhJnpxfU=
|
||||||
|
google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
|
google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||||
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.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM=
|
google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM=
|
||||||
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
|
google.golang.org/grpc v1.22.0 h1:J0UbZOIrCAl+fpTOf8YLs4dJo8L/owV4LYVtAXQoPkw=
|
||||||
|
google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
|
||||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
|
||||||
@@ -479,14 +546,14 @@ gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
|||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||||
gopkg.in/ini.v1 v1.41.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.41.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/ini.v1 v1.42.0 h1:7N3gPTt50s8GuLortA00n8AqRTk75qOP98+mTPpgzRk=
|
gopkg.in/ini.v1 v1.44.0 h1:YRJzTUp0kSYWUVFF5XAbDFfyiqwsl0Vb9R8TVP5eRi0=
|
||||||
gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.44.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
|
gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
|
||||||
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
|
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
|
||||||
gopkg.in/olivere/elastic.v5 v5.0.79 h1:q+FQfSQxl+xIHoEwq8RGBsb5pRB9f8rfaLh4D9jx18A=
|
gopkg.in/olivere/elastic.v5 v5.0.81 h1:21Vu9RMT2qXVLqXINtiOhwVPYz/87+Omsxh/Re+gK4k=
|
||||||
gopkg.in/olivere/elastic.v5 v5.0.79/go.mod h1:uhHoB4o3bvX5sorxBU29rPcmBQdV2Qfg0FBrx5D6pV0=
|
gopkg.in/olivere/elastic.v5 v5.0.81/go.mod h1:uhHoB4o3bvX5sorxBU29rPcmBQdV2Qfg0FBrx5D6pV0=
|
||||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||||
@@ -499,7 +566,8 @@ honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWh
|
|||||||
honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/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-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
willnorris.com/go/gifresize v1.0.0 h1:GKS68zjNhHMqkgNTv4iFAO/j/sNcVSOHQ7SqmDAIAmM=
|
willnorris.com/go/gifresize v1.0.0 h1:GKS68zjNhHMqkgNTv4iFAO/j/sNcVSOHQ7SqmDAIAmM=
|
||||||
willnorris.com/go/gifresize v1.0.0/go.mod h1:eBM8gogBGCcaH603vxSpnfjwXIpq6nmnj/jauBDKtAk=
|
willnorris.com/go/gifresize v1.0.0/go.mod h1:eBM8gogBGCcaH603vxSpnfjwXIpq6nmnj/jauBDKtAk=
|
||||||
willnorris.com/go/imageproxy v0.8.1-0.20190326225038-d4246a08fdec h1:fc1f9n+GkWqcDYXvirpYG+v4ymo+e02QXyBgKmxI7VQ=
|
willnorris.com/go/imageproxy v0.9.0 h1:pjhb8K4co5Xo0Q/uCeDBPwAtXxZzgvb/Ue0jgYqDapE=
|
||||||
willnorris.com/go/imageproxy v0.8.1-0.20190326225038-d4246a08fdec/go.mod h1:CKIesng3W4D4npJaypowqkxF33s3AH7EuohbR1miBGw=
|
willnorris.com/go/imageproxy v0.9.0/go.mod h1:SVC/wfHtCS4kjk3llMeuV4KlTN3a8XTgFWI8o7i3Avg=
|
||||||
|
|||||||
13
vendor/github.com/armon/go-metrics/.travis.yml
сгенерированный
поставляемый
Обычный файл
13
vendor/github.com/armon/go-metrics/.travis.yml
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,13 @@
|
|||||||
|
language: go
|
||||||
|
|
||||||
|
go:
|
||||||
|
- "1.x"
|
||||||
|
|
||||||
|
env:
|
||||||
|
- GO111MODULE=on
|
||||||
|
|
||||||
|
install:
|
||||||
|
- go get ./...
|
||||||
|
|
||||||
|
script:
|
||||||
|
- go test ./...
|
||||||
16
vendor/github.com/armon/go-metrics/go.mod
сгенерированный
поставляемый
Обычный файл
16
vendor/github.com/armon/go-metrics/go.mod
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,16 @@
|
|||||||
|
module github.com/armon/go-metrics
|
||||||
|
|
||||||
|
go 1.12
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/DataDog/datadog-go v2.2.0+incompatible
|
||||||
|
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible
|
||||||
|
github.com/circonus-labs/circonusllhist v0.1.3 // indirect
|
||||||
|
github.com/hashicorp/go-immutable-radix v1.0.0
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.5.3 // indirect
|
||||||
|
github.com/pascaldekloe/goe v0.1.0
|
||||||
|
github.com/pkg/errors v0.8.1 // indirect
|
||||||
|
github.com/prometheus/client_golang v0.9.2
|
||||||
|
github.com/stretchr/testify v1.3.0 // indirect
|
||||||
|
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 // indirect
|
||||||
|
)
|
||||||
46
vendor/github.com/armon/go-metrics/go.sum
сгенерированный
поставляемый
Обычный файл
46
vendor/github.com/armon/go-metrics/go.sum
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,46 @@
|
|||||||
|
github.com/DataDog/datadog-go v2.2.0+incompatible h1:V5BKkxACZLjzHjSgBbr2gvLA2Ae49yhc6CSY7MLy5k4=
|
||||||
|
github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||||
|
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/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY=
|
||||||
|
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
|
||||||
|
github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA=
|
||||||
|
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
||||||
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
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/hashicorp/go-cleanhttp v0.5.0 h1:wvCrVc9TjDls6+YGAF2hAifE1E5U1+b4tH6KdvN3Gig=
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
||||||
|
github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0=
|
||||||
|
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
||||||
|
github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM=
|
||||||
|
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||||
|
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/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/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
|
||||||
|
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||||
|
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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/prometheus/client_golang v0.9.2 h1:awm861/B8OKDd2I/6o1dy3ra4BamzKhYOiGItCeZ740=
|
||||||
|
github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM=
|
||||||
|
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/common v0.0.0-20181126121408-4724e9255275 h1:PnBWHBf+6L0jOqq0gIVUe6Yk0/QMZ640k6NvkxcBf+8=
|
||||||
|
github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a h1:9a8MnZMP0X2nLJdBg+pBmGgkJlSaKC2KaQmTCk1XDtE=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8=
|
||||||
|
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
||||||
|
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
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=
|
||||||
4
vendor/github.com/armon/go-metrics/inmem.go
сгенерированный
поставляемый
4
vendor/github.com/armon/go-metrics/inmem.go
сгенерированный
поставляемый
@@ -255,11 +255,11 @@ func (i *InmemSink) Data() []*IntervalMetrics {
|
|||||||
}
|
}
|
||||||
copyCurrent.Counters = make(map[string]SampledValue, len(current.Counters))
|
copyCurrent.Counters = make(map[string]SampledValue, len(current.Counters))
|
||||||
for k, v := range current.Counters {
|
for k, v := range current.Counters {
|
||||||
copyCurrent.Counters[k] = v
|
copyCurrent.Counters[k] = v.deepCopy()
|
||||||
}
|
}
|
||||||
copyCurrent.Samples = make(map[string]SampledValue, len(current.Samples))
|
copyCurrent.Samples = make(map[string]SampledValue, len(current.Samples))
|
||||||
for k, v := range current.Samples {
|
for k, v := range current.Samples {
|
||||||
copyCurrent.Samples[k] = v
|
copyCurrent.Samples[k] = v.deepCopy()
|
||||||
}
|
}
|
||||||
current.RUnlock()
|
current.RUnlock()
|
||||||
|
|
||||||
|
|||||||
17
vendor/github.com/armon/go-metrics/inmem_endpoint.go
сгенерированный
поставляемый
17
vendor/github.com/armon/go-metrics/inmem_endpoint.go
сгенерированный
поставляемый
@@ -41,6 +41,16 @@ type SampledValue struct {
|
|||||||
DisplayLabels map[string]string `json:"Labels"`
|
DisplayLabels map[string]string `json:"Labels"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deepCopy allocates a new instance of AggregateSample
|
||||||
|
func (source *SampledValue) deepCopy() SampledValue {
|
||||||
|
dest := *source
|
||||||
|
if source.AggregateSample != nil {
|
||||||
|
dest.AggregateSample = &AggregateSample{}
|
||||||
|
*dest.AggregateSample = *source.AggregateSample
|
||||||
|
}
|
||||||
|
return dest
|
||||||
|
}
|
||||||
|
|
||||||
// DisplayMetrics returns a summary of the metrics from the most recent finished interval.
|
// DisplayMetrics returns a summary of the metrics from the most recent finished interval.
|
||||||
func (i *InmemSink) DisplayMetrics(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
|
func (i *InmemSink) DisplayMetrics(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
|
||||||
data := i.Data()
|
data := i.Data()
|
||||||
@@ -52,12 +62,15 @@ func (i *InmemSink) DisplayMetrics(resp http.ResponseWriter, req *http.Request)
|
|||||||
return nil, fmt.Errorf("no metric intervals have been initialized yet")
|
return nil, fmt.Errorf("no metric intervals have been initialized yet")
|
||||||
case n == 1:
|
case n == 1:
|
||||||
// Show the current interval if it's all we have
|
// Show the current interval if it's all we have
|
||||||
interval = i.intervals[0]
|
interval = data[0]
|
||||||
default:
|
default:
|
||||||
// Show the most recent finished interval if we have one
|
// Show the most recent finished interval if we have one
|
||||||
interval = i.intervals[n-2]
|
interval = data[n-2]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interval.RLock()
|
||||||
|
defer interval.RUnlock()
|
||||||
|
|
||||||
summary := MetricsSummary{
|
summary := MetricsSummary{
|
||||||
Timestamp: interval.Interval.Round(time.Second).UTC().String(),
|
Timestamp: interval.Interval.Round(time.Second).UTC().String(),
|
||||||
Gauges: make([]GaugeValue, 0, len(interval.Gauges)),
|
Gauges: make([]GaugeValue, 0, len(interval.Gauges)),
|
||||||
|
|||||||
2
vendor/github.com/armon/go-metrics/metrics.go
сгенерированный
поставляемый
2
vendor/github.com/armon/go-metrics/metrics.go
сгенерированный
поставляемый
@@ -197,7 +197,7 @@ func (m *Metrics) filterLabels(labels []Label) []Label {
|
|||||||
if labels == nil {
|
if labels == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
toReturn := labels[:0]
|
toReturn := []Label{}
|
||||||
for _, label := range labels {
|
for _, label := range labels {
|
||||||
if m.labelIsAllowed(&label) {
|
if m.labelIsAllowed(&label) {
|
||||||
toReturn = append(toReturn, label)
|
toReturn = append(toReturn, label)
|
||||||
|
|||||||
1
vendor/github.com/corpix/uarand/.gitignore
сгенерированный
поставляемый
1
vendor/github.com/corpix/uarand/.gitignore
сгенерированный
поставляемый
@@ -1,3 +1,2 @@
|
|||||||
/build
|
/build
|
||||||
/vendor
|
|
||||||
*~
|
*~
|
||||||
|
|||||||
11
vendor/github.com/corpix/uarand/.go-makefile.json
сгенерированный
поставляемый
11
vendor/github.com/corpix/uarand/.go-makefile.json
сгенерированный
поставляемый
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"build_id_generator": "0x$(shell echo $(version) | sha1sum | awk '{print $$1}')",
|
|
||||||
"host": "github.com",
|
|
||||||
"include": ["useragents.mk"],
|
|
||||||
"kind": "package",
|
|
||||||
"name": "uarand",
|
|
||||||
"tool": [],
|
|
||||||
"user": "corpix",
|
|
||||||
"version_generator": "$(shell git rev-list --count HEAD).$(shell git rev-parse --short HEAD)",
|
|
||||||
"version_variable": "cli.version"
|
|
||||||
}
|
|
||||||
6
vendor/github.com/corpix/uarand/.travis.yml
сгенерированный
поставляемый
6
vendor/github.com/corpix/uarand/.travis.yml
сгенерированный
поставляемый
@@ -1,9 +1,11 @@
|
|||||||
language: go
|
language: go
|
||||||
|
|
||||||
go:
|
go:
|
||||||
- 1.6
|
|
||||||
- 1.7
|
|
||||||
- 1.8
|
- 1.8
|
||||||
|
- 1.9
|
||||||
|
- 1.10
|
||||||
|
- 1.11
|
||||||
|
- 1.12
|
||||||
- master
|
- master
|
||||||
|
|
||||||
script: make test
|
script: make test
|
||||||
|
|||||||
37
vendor/github.com/corpix/uarand/LICENSE
сгенерированный
поставляемый
37
vendor/github.com/corpix/uarand/LICENSE
сгенерированный
поставляемый
@@ -1,21 +1,24 @@
|
|||||||
The MIT License (MIT)
|
This is free and unencumbered software released into the public domain.
|
||||||
|
|
||||||
Copyright © 2017 Dmitry Moskowski
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||||
|
distribute this software, either in source code form or as a compiled
|
||||||
|
binary, for any purpose, commercial or non-commercial, and by any
|
||||||
|
means.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
In jurisdictions that recognize copyright laws, the author or authors
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software dedicate any and all copyright interest in the
|
||||||
in the Software without restriction, including without limitation the rights
|
software to the public domain. We make this dedication for the benefit
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
of the public at large and to the detriment of our heirs and
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
successors. We intend this dedication to be an overt act of
|
||||||
furnished to do so, subject to the following conditions:
|
relinquishment in perpetuity of all present and future rights to this
|
||||||
|
software under copyright law.
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
all copies or substantial portions of the Software.
|
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 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.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
For more information, please refer to <http://unlicense.org/>
|
||||||
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.
|
|
||||||
|
|||||||
52
vendor/github.com/corpix/uarand/Makefile
сгенерированный
поставляемый
52
vendor/github.com/corpix/uarand/Makefile
сгенерированный
поставляемый
@@ -1,52 +1,30 @@
|
|||||||
.DEFAULT_GOAL = all
|
.DEFAULT_GOAL = all
|
||||||
|
|
||||||
numcpus := $(shell cat /proc/cpuinfo | grep '^processor\s*:' | wc -l)
|
|
||||||
version := $(shell git rev-list --count HEAD).$(shell git rev-parse --short HEAD)
|
version := $(shell git rev-list --count HEAD).$(shell git rev-parse --short HEAD)
|
||||||
|
|
||||||
name := uarand
|
name := uarand
|
||||||
package := github.com/corpix/$(name)
|
package := github.com/corpix/$(name)
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all:: dependencies
|
all:: useragents.go
|
||||||
|
|
||||||
.PHONY: tools
|
|
||||||
tools::
|
|
||||||
@if [ ! -e "$(GOPATH)"/bin/glide ]; then go get github.com/Masterminds/glide; fi
|
|
||||||
@if [ ! -e "$(GOPATH)"/bin/glide-cleanup ]; then go get github.com/ngdinhtoan/glide-cleanup; fi
|
|
||||||
@if [ ! -e "$(GOPATH)"/bin/glide-vc ]; then go get github.com/sgotti/glide-vc; fi
|
|
||||||
@if [ ! -e "$(GOPATH)"/bin/godef ]; then go get github.com/rogpeppe/godef; fi
|
|
||||||
@if [ ! -e "$(GOPATH)"/bin/gocode ]; then go get github.com/nsf/gocode; fi
|
|
||||||
@if [ ! -e "$(GOPATH)"/bin/gometalinter ]; then go get github.com/alecthomas/gometalinter && gometalinter --install; fi
|
|
||||||
@if [ ! -e "$(GOPATH)"/src/github.com/stretchr/testify/assert ]; then go get github.com/stretchr/testify/assert; fi
|
|
||||||
|
|
||||||
.PHONY: dependencies
|
|
||||||
dependencies:: tools
|
|
||||||
glide install
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:: tools
|
|
||||||
glide cache-clear
|
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test:: dependencies
|
test:
|
||||||
go test -v \
|
go test -v ./...
|
||||||
$(shell glide novendor)
|
|
||||||
|
|
||||||
.PHONY: bench
|
|
||||||
bench:: dependencies
|
|
||||||
go test \
|
|
||||||
-bench=. -v \
|
|
||||||
$(shell glide novendor)
|
|
||||||
|
|
||||||
.PHONY: lint
|
.PHONY: lint
|
||||||
lint:: dependencies
|
lint:
|
||||||
go vet $(shell glide novendor)
|
go vet ./...
|
||||||
gometalinter \
|
|
||||||
--deadline=5m \
|
|
||||||
--concurrency=$(numcpus) \
|
|
||||||
$(shell glide novendor)
|
|
||||||
|
|
||||||
.PHONY: check
|
.PHONY: check
|
||||||
check:: lint test
|
check: lint test
|
||||||
|
|
||||||
|
.PHONY: useragents.go
|
||||||
|
useragents.go:
|
||||||
|
curl -Ls -H'User-Agent: gotohellwithyour403' \
|
||||||
|
http://techpatterns.com/downloads/firefox/useragentswitcher.xml \
|
||||||
|
| ./scripts/extract-user-agents \
|
||||||
|
| ./scripts/generate-useragents-go $(name) \
|
||||||
|
> $@
|
||||||
|
go fmt $@
|
||||||
|
|
||||||
include useragents.mk
|
|
||||||
|
|||||||
16
vendor/github.com/corpix/uarand/glide.lock
сгенерированный
поставляемый
16
vendor/github.com/corpix/uarand/glide.lock
сгенерированный
поставляемый
@@ -1,16 +0,0 @@
|
|||||||
hash: 400dee10adae21284f2563cb7178f4b5a30e69c9ed3954a5a32a8a618d5bdfeb
|
|
||||||
updated: 2017-07-12T21:00:19.452016303Z
|
|
||||||
imports: []
|
|
||||||
testImports:
|
|
||||||
- name: github.com/davecgh/go-spew
|
|
||||||
version: 6d212800a42e8ab5c146b8ace3490ee17e5225f9
|
|
||||||
subpackages:
|
|
||||||
- spew
|
|
||||||
- name: github.com/pmezard/go-difflib
|
|
||||||
version: d8ed2627bdf02c080bf22230dbb337003b7aba2d
|
|
||||||
subpackages:
|
|
||||||
- difflib
|
|
||||||
- name: github.com/stretchr/testify
|
|
||||||
version: 69483b4bd14f5845b5a1e55bca19e954e827f1d0
|
|
||||||
subpackages:
|
|
||||||
- assert
|
|
||||||
7
vendor/github.com/corpix/uarand/glide.yaml
сгенерированный
поставляемый
7
vendor/github.com/corpix/uarand/glide.yaml
сгенерированный
поставляемый
@@ -1,7 +0,0 @@
|
|||||||
package: github.com/corpix/uarand
|
|
||||||
import: []
|
|
||||||
testImport:
|
|
||||||
- package: github.com/stretchr/testify
|
|
||||||
version: v1.1.4
|
|
||||||
subpackages:
|
|
||||||
- assert
|
|
||||||
14
vendor/github.com/corpix/uarand/go.mod
сгенерированный
поставляемый
Обычный файл
14
vendor/github.com/corpix/uarand/go.mod
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,14 @@
|
|||||||
|
module github.com/corpix/uarand
|
||||||
|
|
||||||
|
go 1.12
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/Masterminds/glide v0.13.2 // indirect
|
||||||
|
github.com/Masterminds/semver v1.4.2 // indirect
|
||||||
|
github.com/Masterminds/vcs v1.13.0 // indirect
|
||||||
|
github.com/codegangsta/cli v1.20.0 // indirect
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
|
github.com/ngdinhtoan/glide-cleanup v0.2.0 // indirect
|
||||||
|
github.com/stretchr/testify v1.3.0
|
||||||
|
gopkg.in/yaml.v2 v2.2.2 // indirect
|
||||||
|
)
|
||||||
22
vendor/github.com/corpix/uarand/go.sum
сгенерированный
поставляемый
Обычный файл
22
vendor/github.com/corpix/uarand/go.sum
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,22 @@
|
|||||||
|
github.com/Masterminds/glide v0.13.2 h1:M5MOH04TyRiMBVeWHbifqTpnauxWINIubTCOkhXh+2g=
|
||||||
|
github.com/Masterminds/glide v0.13.2/go.mod h1:STyF5vcenH/rUqTEv+/hBXlSTo7KYwg2oc2f4tzPWic=
|
||||||
|
github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITgsTc=
|
||||||
|
github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
|
||||||
|
github.com/Masterminds/vcs v1.13.0 h1:USF5TvZGYgIpcbNAEMLfFhHqP08tFZVlUVrmTSpqnyA=
|
||||||
|
github.com/Masterminds/vcs v1.13.0/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA=
|
||||||
|
github.com/codegangsta/cli v1.20.0 h1:iX1FXEgwzd5+XN6wk5cVHOGQj6Q3Dcp20lUeS4lHNTw=
|
||||||
|
github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA=
|
||||||
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
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/ngdinhtoan/glide-cleanup v0.2.0 h1:kN4sV+0tp2F1BvwU+5SfNRMDndRmvIfnI3kZ7B8Yv4Y=
|
||||||
|
github.com/ngdinhtoan/glide-cleanup v0.2.0/go.mod h1:UQzsmiDOb8YV3nOsCxK/c9zPpCZVNoHScRE3EO9pVMM=
|
||||||
|
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
15
vendor/github.com/corpix/uarand/shell.nix
сгенерированный
поставляемый
Обычный файл
15
vendor/github.com/corpix/uarand/shell.nix
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,15 @@
|
|||||||
|
let
|
||||||
|
nixpkgs = builtins.fetchTarball {
|
||||||
|
url = "https://github.com/nixos/nixpkgs/archive/03050e9749e1548f1648aae5c062c954eaad546e.tar.gz";
|
||||||
|
sha256 = "00hfkldmf853ynnd8a9d7a778ifcrdjxdndxyykzbpxfki5s5qsb";
|
||||||
|
};
|
||||||
|
in with import nixpkgs {};
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "nix-shell";
|
||||||
|
buildInputs = [
|
||||||
|
go
|
||||||
|
];
|
||||||
|
shellHook = ''
|
||||||
|
unset GOPATH
|
||||||
|
'';
|
||||||
|
}
|
||||||
10
vendor/github.com/corpix/uarand/useragents.mk
сгенерированный
поставляемый
10
vendor/github.com/corpix/uarand/useragents.mk
сгенерированный
поставляемый
@@ -1,10 +0,0 @@
|
|||||||
.PHONY: useragents.go
|
|
||||||
useragents.go:
|
|
||||||
curl -Ls -H'User-Agent: gotohellwithyour403' \
|
|
||||||
http://techpatterns.com/downloads/firefox/useragentswitcher.xml \
|
|
||||||
| ./scripts/extract-user-agents \
|
|
||||||
| ./scripts/generate-useragents-go $(name) \
|
|
||||||
> $@
|
|
||||||
go fmt $@
|
|
||||||
|
|
||||||
dependencies:: useragents.go
|
|
||||||
1
vendor/github.com/go-ldap/ldap/.travis.yml
сгенерированный
поставляемый
1
vendor/github.com/go-ldap/ldap/.travis.yml
сгенерированный
поставляемый
@@ -1,7 +1,6 @@
|
|||||||
sudo: false
|
sudo: false
|
||||||
language: go
|
language: go
|
||||||
go:
|
go:
|
||||||
- "1.4.x"
|
|
||||||
- "1.5.x"
|
- "1.5.x"
|
||||||
- "1.6.x"
|
- "1.6.x"
|
||||||
- "1.7.x"
|
- "1.7.x"
|
||||||
|
|||||||
4
vendor/github.com/go-ldap/ldap/control.go
сгенерированный
поставляемый
4
vendor/github.com/go-ldap/ldap/control.go
сгенерированный
поставляемый
@@ -63,7 +63,9 @@ func (c *ControlString) Encode() *ber.Packet {
|
|||||||
if c.Criticality {
|
if c.Criticality {
|
||||||
packet.AppendChild(ber.NewBoolean(ber.ClassUniversal, ber.TypePrimitive, ber.TagBoolean, c.Criticality, "Criticality"))
|
packet.AppendChild(ber.NewBoolean(ber.ClassUniversal, ber.TypePrimitive, ber.TagBoolean, c.Criticality, "Criticality"))
|
||||||
}
|
}
|
||||||
packet.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, string(c.ControlValue), "Control Value"))
|
if c.ControlValue != "" {
|
||||||
|
packet.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, string(c.ControlValue), "Control Value"))
|
||||||
|
}
|
||||||
return packet
|
return packet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
5
vendor/github.com/golang/protobuf/proto/properties.go
сгенерированный
поставляемый
5
vendor/github.com/golang/protobuf/proto/properties.go
сгенерированный
поставляемый
@@ -38,7 +38,6 @@ package proto
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
@@ -194,7 +193,7 @@ func (p *Properties) Parse(s string) {
|
|||||||
// "bytes,49,opt,name=foo,def=hello!"
|
// "bytes,49,opt,name=foo,def=hello!"
|
||||||
fields := strings.Split(s, ",") // breaks def=, but handled below.
|
fields := strings.Split(s, ",") // breaks def=, but handled below.
|
||||||
if len(fields) < 2 {
|
if len(fields) < 2 {
|
||||||
fmt.Fprintf(os.Stderr, "proto: tag has too few fields: %q\n", s)
|
log.Printf("proto: tag has too few fields: %q", s)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,7 +213,7 @@ func (p *Properties) Parse(s string) {
|
|||||||
p.WireType = WireBytes
|
p.WireType = WireBytes
|
||||||
// no numeric converter for non-numeric types
|
// no numeric converter for non-numeric types
|
||||||
default:
|
default:
|
||||||
fmt.Fprintf(os.Stderr, "proto: tag has unknown wire type: %q\n", s)
|
log.Printf("proto: tag has unknown wire type: %q", s)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
20
vendor/github.com/gorilla/handlers/.travis.yml
сгенерированный
поставляемый
20
vendor/github.com/gorilla/handlers/.travis.yml
сгенерированный
поставляемый
@@ -1,20 +0,0 @@
|
|||||||
language: go
|
|
||||||
sudo: false
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- go: 1.4
|
|
||||||
- go: 1.5
|
|
||||||
- go: 1.6
|
|
||||||
- go: 1.7
|
|
||||||
- go: 1.8
|
|
||||||
- go: tip
|
|
||||||
allow_failures:
|
|
||||||
- go: tip
|
|
||||||
|
|
||||||
script:
|
|
||||||
- go get -t -v ./...
|
|
||||||
- diff -u <(echo -n) <(gofmt -d .)
|
|
||||||
- go vet $(go list ./... | grep -v /vendor/)
|
|
||||||
- go test -v -race ./...
|
|
||||||
|
|
||||||
2
vendor/github.com/gorilla/handlers/README.md
сгенерированный
поставляемый
2
vendor/github.com/gorilla/handlers/README.md
сгенерированный
поставляемый
@@ -25,7 +25,7 @@ with Go's `net/http` package (or any framework supporting `http.Handler`), inclu
|
|||||||
* [**RecoveryHandler**](https://godoc.org/github.com/gorilla/handlers#RecoveryHandler) for recovering from unexpected panics.
|
* [**RecoveryHandler**](https://godoc.org/github.com/gorilla/handlers#RecoveryHandler) for recovering from unexpected panics.
|
||||||
|
|
||||||
Other handlers are documented [on the Gorilla
|
Other handlers are documented [on the Gorilla
|
||||||
website](http://www.gorillatoolkit.org/pkg/handlers).
|
website](https://www.gorillatoolkit.org/pkg/handlers).
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
|
|||||||
29
vendor/github.com/gorilla/handlers/cors.go
сгенерированный
поставляемый
29
vendor/github.com/gorilla/handlers/cors.go
сгенерированный
поставляемый
@@ -19,14 +19,16 @@ type cors struct {
|
|||||||
maxAge int
|
maxAge int
|
||||||
ignoreOptions bool
|
ignoreOptions bool
|
||||||
allowCredentials bool
|
allowCredentials bool
|
||||||
|
optionStatusCode int
|
||||||
}
|
}
|
||||||
|
|
||||||
// OriginValidator takes an origin string and returns whether or not that origin is allowed.
|
// OriginValidator takes an origin string and returns whether or not that origin is allowed.
|
||||||
type OriginValidator func(string) bool
|
type OriginValidator func(string) bool
|
||||||
|
|
||||||
var (
|
var (
|
||||||
defaultCorsMethods = []string{"GET", "HEAD", "POST"}
|
defaultCorsOptionStatusCode = 200
|
||||||
defaultCorsHeaders = []string{"Accept", "Accept-Language", "Content-Language", "Origin"}
|
defaultCorsMethods = []string{"GET", "HEAD", "POST"}
|
||||||
|
defaultCorsHeaders = []string{"Accept", "Accept-Language", "Content-Language", "Origin"}
|
||||||
// (WebKit/Safari v9 sends the Origin header by default in AJAX requests)
|
// (WebKit/Safari v9 sends the Origin header by default in AJAX requests)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -130,6 +132,7 @@ func (ch *cors) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Header().Set(corsAllowOriginHeader, returnOrigin)
|
w.Header().Set(corsAllowOriginHeader, returnOrigin)
|
||||||
|
|
||||||
if r.Method == corsOptionMethod {
|
if r.Method == corsOptionMethod {
|
||||||
|
w.WriteHeader(ch.optionStatusCode)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ch.h.ServeHTTP(w, r)
|
ch.h.ServeHTTP(w, r)
|
||||||
@@ -164,9 +167,10 @@ func CORS(opts ...CORSOption) func(http.Handler) http.Handler {
|
|||||||
|
|
||||||
func parseCORSOptions(opts ...CORSOption) *cors {
|
func parseCORSOptions(opts ...CORSOption) *cors {
|
||||||
ch := &cors{
|
ch := &cors{
|
||||||
allowedMethods: defaultCorsMethods,
|
allowedMethods: defaultCorsMethods,
|
||||||
allowedHeaders: defaultCorsHeaders,
|
allowedHeaders: defaultCorsHeaders,
|
||||||
allowedOrigins: []string{},
|
allowedOrigins: []string{},
|
||||||
|
optionStatusCode: defaultCorsOptionStatusCode,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, option := range opts {
|
for _, option := range opts {
|
||||||
@@ -251,7 +255,20 @@ func AllowedOriginValidator(fn OriginValidator) CORSOption {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ExposeHeaders can be used to specify headers that are available
|
// OptionStatusCode sets a custom status code on the OPTIONS requests.
|
||||||
|
// Default behaviour sets it to 200 to reflect best practices. This is option is not mandatory
|
||||||
|
// and can be used if you need a custom status code (i.e 204).
|
||||||
|
//
|
||||||
|
// More informations on the spec:
|
||||||
|
// https://fetch.spec.whatwg.org/#cors-preflight-fetch
|
||||||
|
func OptionStatusCode(code int) CORSOption {
|
||||||
|
return func(ch *cors) error {
|
||||||
|
ch.optionStatusCode = code
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExposedHeaders can be used to specify headers that are available
|
||||||
// and will not be stripped out by the user-agent.
|
// and will not be stripped out by the user-agent.
|
||||||
func ExposedHeaders(headers []string) CORSOption {
|
func ExposedHeaders(headers []string) CORSOption {
|
||||||
return func(ch *cors) error {
|
return func(ch *cors) error {
|
||||||
|
|||||||
1
vendor/github.com/gorilla/handlers/go.mod
сгенерированный
поставляемый
Обычный файл
1
vendor/github.com/gorilla/handlers/go.mod
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1 @@
|
|||||||
|
module github.com/gorilla/handlers
|
||||||
8
vendor/github.com/gorilla/handlers/handlers_go18.go
сгенерированный
поставляемый
8
vendor/github.com/gorilla/handlers/handlers_go18.go
сгенерированный
поставляемый
@@ -19,3 +19,11 @@ func (l *responseLogger) Push(target string, opts *http.PushOptions) error {
|
|||||||
}
|
}
|
||||||
return p.Push(target, opts)
|
return p.Push(target, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *compressResponseWriter) Push(target string, opts *http.PushOptions) error {
|
||||||
|
p, ok := c.ResponseWriter.(http.Pusher)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("compressResponseWriter does not implement http.Pusher")
|
||||||
|
}
|
||||||
|
return p.Push(target, opts)
|
||||||
|
}
|
||||||
|
|||||||
2
vendor/github.com/gorilla/handlers/logging.go
сгенерированный
поставляемый
2
vendor/github.com/gorilla/handlers/logging.go
сгенерированный
поставляемый
@@ -16,7 +16,7 @@ import (
|
|||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
|
|
||||||
// FormatterParams is the structure any formatter will be handed when time to log comes
|
// LogFormatterParams is the structure any formatter will be handed when time to log comes
|
||||||
type LogFormatterParams struct {
|
type LogFormatterParams struct {
|
||||||
Request *http.Request
|
Request *http.Request
|
||||||
URL url.URL
|
URL url.URL
|
||||||
|
|||||||
24
vendor/github.com/gorilla/mux/.travis.yml
сгенерированный
поставляемый
24
vendor/github.com/gorilla/mux/.travis.yml
сгенерированный
поставляемый
@@ -1,24 +0,0 @@
|
|||||||
language: go
|
|
||||||
sudo: false
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- go: 1.7.x
|
|
||||||
- go: 1.8.x
|
|
||||||
- go: 1.9.x
|
|
||||||
- go: 1.10.x
|
|
||||||
- go: 1.11.x
|
|
||||||
- go: 1.x
|
|
||||||
env: LATEST=true
|
|
||||||
- go: tip
|
|
||||||
allow_failures:
|
|
||||||
- go: tip
|
|
||||||
|
|
||||||
install:
|
|
||||||
- # Skip
|
|
||||||
|
|
||||||
script:
|
|
||||||
- go get -t -v ./...
|
|
||||||
- diff -u <(echo -n) <(gofmt -d .)
|
|
||||||
- if [[ "$LATEST" = true ]]; then go tool vet .; fi
|
|
||||||
- go test -v -race ./...
|
|
||||||
11
vendor/github.com/gorilla/mux/ISSUE_TEMPLATE.md
сгенерированный
поставляемый
11
vendor/github.com/gorilla/mux/ISSUE_TEMPLATE.md
сгенерированный
поставляемый
@@ -1,11 +0,0 @@
|
|||||||
**What version of Go are you running?** (Paste the output of `go version`)
|
|
||||||
|
|
||||||
|
|
||||||
**What version of gorilla/mux are you at?** (Paste the output of `git rev-parse HEAD` inside `$GOPATH/src/github.com/gorilla/mux`)
|
|
||||||
|
|
||||||
|
|
||||||
**Describe your problem** (and what you have tried so far)
|
|
||||||
|
|
||||||
|
|
||||||
**Paste a minimal, runnable, reproduction of your issue below** (use backticks to format it)
|
|
||||||
|
|
||||||
69
vendor/github.com/gorilla/mux/README.md
сгенерированный
поставляемый
69
vendor/github.com/gorilla/mux/README.md
сгенерированный
поставляемый
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
[](https://godoc.org/github.com/gorilla/mux)
|
[](https://godoc.org/github.com/gorilla/mux)
|
||||||
[](https://travis-ci.org/gorilla/mux)
|
[](https://travis-ci.org/gorilla/mux)
|
||||||
|
[](https://circleci.com/gh/gorilla/mux)
|
||||||
[](https://sourcegraph.com/github.com/gorilla/mux?badge)
|
[](https://sourcegraph.com/github.com/gorilla/mux?badge)
|
||||||
|
|
||||||

|

|
||||||
@@ -29,6 +30,7 @@ The name mux stands for "HTTP request multiplexer". Like the standard `http.Serv
|
|||||||
* [Walking Routes](#walking-routes)
|
* [Walking Routes](#walking-routes)
|
||||||
* [Graceful Shutdown](#graceful-shutdown)
|
* [Graceful Shutdown](#graceful-shutdown)
|
||||||
* [Middleware](#middleware)
|
* [Middleware](#middleware)
|
||||||
|
* [Handling CORS Requests](#handling-cors-requests)
|
||||||
* [Testing Handlers](#testing-handlers)
|
* [Testing Handlers](#testing-handlers)
|
||||||
* [Full Example](#full-example)
|
* [Full Example](#full-example)
|
||||||
|
|
||||||
@@ -491,6 +493,73 @@ r.Use(amw.Middleware)
|
|||||||
|
|
||||||
Note: The handler chain will be stopped if your middleware doesn't call `next.ServeHTTP()` with the corresponding parameters. This can be used to abort a request if the middleware writer wants to. Middlewares _should_ write to `ResponseWriter` if they _are_ going to terminate the request, and they _should not_ write to `ResponseWriter` if they _are not_ going to terminate it.
|
Note: The handler chain will be stopped if your middleware doesn't call `next.ServeHTTP()` with the corresponding parameters. This can be used to abort a request if the middleware writer wants to. Middlewares _should_ write to `ResponseWriter` if they _are_ going to terminate the request, and they _should not_ write to `ResponseWriter` if they _are not_ going to terminate it.
|
||||||
|
|
||||||
|
### Handling CORS Requests
|
||||||
|
|
||||||
|
[CORSMethodMiddleware](https://godoc.org/github.com/gorilla/mux#CORSMethodMiddleware) intends to make it easier to strictly set the `Access-Control-Allow-Methods` response header.
|
||||||
|
|
||||||
|
* You will still need to use your own CORS handler to set the other CORS headers such as `Access-Control-Allow-Origin`
|
||||||
|
* The middleware will set the `Access-Control-Allow-Methods` header to all the method matchers (e.g. `r.Methods(http.MethodGet, http.MethodPut, http.MethodOptions)` -> `Access-Control-Allow-Methods: GET,PUT,OPTIONS`) on a route
|
||||||
|
* If you do not specify any methods, then:
|
||||||
|
> _Important_: there must be an `OPTIONS` method matcher for the middleware to set the headers.
|
||||||
|
|
||||||
|
Here is an example of using `CORSMethodMiddleware` along with a custom `OPTIONS` handler to set all the required CORS headers:
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
r := mux.NewRouter()
|
||||||
|
|
||||||
|
// IMPORTANT: you must specify an OPTIONS method matcher for the middleware to set CORS headers
|
||||||
|
r.HandleFunc("/foo", fooHandler).Methods(http.MethodGet, http.MethodPut, http.MethodPatch, http.MethodOptions)
|
||||||
|
r.Use(mux.CORSMethodMiddleware(r))
|
||||||
|
|
||||||
|
http.ListenAndServe(":8080", r)
|
||||||
|
}
|
||||||
|
|
||||||
|
func fooHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||||
|
if r.Method == http.MethodOptions {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Write([]byte("foo"))
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
And an request to `/foo` using something like:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl localhost:8080/foo -v
|
||||||
|
```
|
||||||
|
|
||||||
|
Would look like:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
* Trying ::1...
|
||||||
|
* TCP_NODELAY set
|
||||||
|
* Connected to localhost (::1) port 8080 (#0)
|
||||||
|
> GET /foo HTTP/1.1
|
||||||
|
> Host: localhost:8080
|
||||||
|
> User-Agent: curl/7.59.0
|
||||||
|
> Accept: */*
|
||||||
|
>
|
||||||
|
< HTTP/1.1 200 OK
|
||||||
|
< Access-Control-Allow-Methods: GET,PUT,PATCH,OPTIONS
|
||||||
|
< Access-Control-Allow-Origin: *
|
||||||
|
< Date: Fri, 28 Jun 2019 20:13:30 GMT
|
||||||
|
< Content-Length: 3
|
||||||
|
< Content-Type: text/plain; charset=utf-8
|
||||||
|
<
|
||||||
|
* Connection #0 to host localhost left intact
|
||||||
|
foo
|
||||||
|
```
|
||||||
|
|
||||||
### Testing Handlers
|
### Testing Handlers
|
||||||
|
|
||||||
Testing handlers in a Go web application is straightforward, and _mux_ doesn't complicate this any further. Given two files: `endpoints.go` and `endpoints_test.go`, here's how we'd test an application using _mux_.
|
Testing handlers in a Go web application is straightforward, and _mux_ doesn't complicate this any further. Given two files: `endpoints.go` and `endpoints_test.go`, here's how we'd test an application using _mux_.
|
||||||
|
|||||||
2
vendor/github.com/gorilla/mux/doc.go
сгенерированный
поставляемый
2
vendor/github.com/gorilla/mux/doc.go
сгенерированный
поставляемый
@@ -295,7 +295,7 @@ A more complex authentication middleware, which maps session token to users, cou
|
|||||||
r := mux.NewRouter()
|
r := mux.NewRouter()
|
||||||
r.HandleFunc("/", handler)
|
r.HandleFunc("/", handler)
|
||||||
|
|
||||||
amw := authenticationMiddleware{}
|
amw := authenticationMiddleware{tokenUsers: make(map[string]string)}
|
||||||
amw.Populate()
|
amw.Populate()
|
||||||
|
|
||||||
r.Use(amw.Middleware)
|
r.Use(amw.Middleware)
|
||||||
|
|||||||
61
vendor/github.com/gorilla/mux/middleware.go
сгенерированный
поставляемый
61
vendor/github.com/gorilla/mux/middleware.go
сгенерированный
поставляемый
@@ -32,37 +32,19 @@ func (r *Router) useInterface(mw middleware) {
|
|||||||
r.middlewares = append(r.middlewares, mw)
|
r.middlewares = append(r.middlewares, mw)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CORSMethodMiddleware sets the Access-Control-Allow-Methods response header
|
// CORSMethodMiddleware automatically sets the Access-Control-Allow-Methods response header
|
||||||
// on a request, by matching routes based only on paths. It also handles
|
// on requests for routes that have an OPTIONS method matcher to all the method matchers on
|
||||||
// OPTIONS requests, by settings Access-Control-Allow-Methods, and then
|
// the route. Routes that do not explicitly handle OPTIONS requests will not be processed
|
||||||
// returning without calling the next http handler.
|
// by the middleware. See examples for usage.
|
||||||
func CORSMethodMiddleware(r *Router) MiddlewareFunc {
|
func CORSMethodMiddleware(r *Router) MiddlewareFunc {
|
||||||
return func(next http.Handler) http.Handler {
|
return func(next http.Handler) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||||
var allMethods []string
|
allMethods, err := getAllMethodsForRoute(r, req)
|
||||||
|
|
||||||
err := r.Walk(func(route *Route, _ *Router, _ []*Route) error {
|
|
||||||
for _, m := range route.matchers {
|
|
||||||
if _, ok := m.(*routeRegexp); ok {
|
|
||||||
if m.Match(req, &RouteMatch{}) {
|
|
||||||
methods, err := route.GetMethods()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
allMethods = append(allMethods, methods...)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
w.Header().Set("Access-Control-Allow-Methods", strings.Join(append(allMethods, "OPTIONS"), ","))
|
for _, v := range allMethods {
|
||||||
|
if v == http.MethodOptions {
|
||||||
if req.Method == "OPTIONS" {
|
w.Header().Set("Access-Control-Allow-Methods", strings.Join(allMethods, ","))
|
||||||
return
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,3 +52,28 @@ func CORSMethodMiddleware(r *Router) MiddlewareFunc {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getAllMethodsForRoute returns all the methods from method matchers matching a given
|
||||||
|
// request.
|
||||||
|
func getAllMethodsForRoute(r *Router, req *http.Request) ([]string, error) {
|
||||||
|
var allMethods []string
|
||||||
|
|
||||||
|
err := r.Walk(func(route *Route, _ *Router, _ []*Route) error {
|
||||||
|
for _, m := range route.matchers {
|
||||||
|
if _, ok := m.(*routeRegexp); ok {
|
||||||
|
if m.Match(req, &RouteMatch{}) {
|
||||||
|
methods, err := route.GetMethods()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
allMethods = append(allMethods, methods...)
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
return allMethods, err
|
||||||
|
}
|
||||||
|
|||||||
6
vendor/github.com/gorilla/mux/mux.go
сгенерированный
поставляемый
6
vendor/github.com/gorilla/mux/mux.go
сгенерированный
поставляемый
@@ -283,6 +283,12 @@ func (r *Router) NewRoute() *Route {
|
|||||||
return route
|
return route
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Name registers a new route with a name.
|
||||||
|
// See Route.Name().
|
||||||
|
func (r *Router) Name(name string) *Route {
|
||||||
|
return r.NewRoute().Name(name)
|
||||||
|
}
|
||||||
|
|
||||||
// Handle registers a new route with a matcher for the URL path.
|
// Handle registers a new route with a matcher for the URL path.
|
||||||
// See Route.Path() and Route.Handler().
|
// See Route.Path() and Route.Handler().
|
||||||
func (r *Router) Handle(path string, handler http.Handler) *Route {
|
func (r *Router) Handle(path string, handler http.Handler) *Route {
|
||||||
|
|||||||
37
vendor/github.com/gorilla/mux/regexp.go
сгенерированный
поставляемый
37
vendor/github.com/gorilla/mux/regexp.go
сгенерированный
поставляемый
@@ -113,6 +113,13 @@ func newRouteRegexp(tpl string, typ regexpType, options routeRegexpOptions) (*ro
|
|||||||
if typ != regexpTypePrefix {
|
if typ != regexpTypePrefix {
|
||||||
pattern.WriteByte('$')
|
pattern.WriteByte('$')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var wildcardHostPort bool
|
||||||
|
if typ == regexpTypeHost {
|
||||||
|
if !strings.Contains(pattern.String(), ":") {
|
||||||
|
wildcardHostPort = true
|
||||||
|
}
|
||||||
|
}
|
||||||
reverse.WriteString(raw)
|
reverse.WriteString(raw)
|
||||||
if endSlash {
|
if endSlash {
|
||||||
reverse.WriteByte('/')
|
reverse.WriteByte('/')
|
||||||
@@ -131,13 +138,14 @@ func newRouteRegexp(tpl string, typ regexpType, options routeRegexpOptions) (*ro
|
|||||||
|
|
||||||
// Done!
|
// Done!
|
||||||
return &routeRegexp{
|
return &routeRegexp{
|
||||||
template: template,
|
template: template,
|
||||||
regexpType: typ,
|
regexpType: typ,
|
||||||
options: options,
|
options: options,
|
||||||
regexp: reg,
|
regexp: reg,
|
||||||
reverse: reverse.String(),
|
reverse: reverse.String(),
|
||||||
varsN: varsN,
|
varsN: varsN,
|
||||||
varsR: varsR,
|
varsR: varsR,
|
||||||
|
wildcardHostPort: wildcardHostPort,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,11 +166,22 @@ type routeRegexp struct {
|
|||||||
varsN []string
|
varsN []string
|
||||||
// Variable regexps (validators).
|
// Variable regexps (validators).
|
||||||
varsR []*regexp.Regexp
|
varsR []*regexp.Regexp
|
||||||
|
// Wildcard host-port (no strict port match in hostname)
|
||||||
|
wildcardHostPort bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Match matches the regexp against the URL host or path.
|
// Match matches the regexp against the URL host or path.
|
||||||
func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool {
|
func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool {
|
||||||
if r.regexpType != regexpTypeHost {
|
if r.regexpType == regexpTypeHost {
|
||||||
|
host := getHost(req)
|
||||||
|
if r.wildcardHostPort {
|
||||||
|
// Don't be strict on the port match
|
||||||
|
if i := strings.Index(host, ":"); i != -1 {
|
||||||
|
host = host[:i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return r.regexp.MatchString(host)
|
||||||
|
} else {
|
||||||
if r.regexpType == regexpTypeQuery {
|
if r.regexpType == regexpTypeQuery {
|
||||||
return r.matchQueryString(req)
|
return r.matchQueryString(req)
|
||||||
}
|
}
|
||||||
@@ -172,8 +191,6 @@ func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool {
|
|||||||
}
|
}
|
||||||
return r.regexp.MatchString(path)
|
return r.regexp.MatchString(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
return r.regexp.MatchString(getHost(req))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// url builds a URL part using the given values.
|
// url builds a URL part using the given values.
|
||||||
|
|||||||
2
vendor/github.com/gorilla/mux/route.go
сгенерированный
поставляемый
2
vendor/github.com/gorilla/mux/route.go
сгенерированный
поставляемый
@@ -383,7 +383,7 @@ func (r *Route) PathPrefix(tpl string) *Route {
|
|||||||
// The above route will only match if the URL contains the defined queries
|
// The above route will only match if the URL contains the defined queries
|
||||||
// values, e.g.: ?foo=bar&id=42.
|
// values, e.g.: ?foo=bar&id=42.
|
||||||
//
|
//
|
||||||
// It the value is an empty string, it will match any value if the key is set.
|
// If the value is an empty string, it will match any value if the key is set.
|
||||||
//
|
//
|
||||||
// Variables can define an optional regexp pattern to be matched:
|
// Variables can define an optional regexp pattern to be matched:
|
||||||
//
|
//
|
||||||
|
|||||||
4
vendor/github.com/gregjones/httpcache/README.md
сгенерированный
поставляемый
4
vendor/github.com/gregjones/httpcache/README.md
сгенерированный
поставляемый
@@ -7,6 +7,8 @@ Package httpcache provides a http.RoundTripper implementation that works as a mo
|
|||||||
|
|
||||||
It is only suitable for use as a 'private' cache (i.e. for a web-browser or an API-client and not for a shared proxy).
|
It is only suitable for use as a 'private' cache (i.e. for a web-browser or an API-client and not for a shared proxy).
|
||||||
|
|
||||||
|
This project isn't actively maintained; it works for what I, and seemingly others, want to do with it, and I consider it "done". That said, if you find any issues, please open a Pull Request and I will try to review it. Any changes now that change the public API won't be considered.
|
||||||
|
|
||||||
Cache Backends
|
Cache Backends
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
@@ -19,6 +21,8 @@ Cache Backends
|
|||||||
- [`github.com/die-net/lrucache/twotier`](https://github.com/die-net/lrucache/tree/master/twotier) allows caches to be combined, for example to use lrucache above with a persistent disk-cache.
|
- [`github.com/die-net/lrucache/twotier`](https://github.com/die-net/lrucache/tree/master/twotier) allows caches to be combined, for example to use lrucache above with a persistent disk-cache.
|
||||||
- [`github.com/birkelund/boltdbcache`](https://github.com/birkelund/boltdbcache) provides a BoltDB implementation (based on the [bbolt](https://github.com/coreos/bbolt) fork).
|
- [`github.com/birkelund/boltdbcache`](https://github.com/birkelund/boltdbcache) provides a BoltDB implementation (based on the [bbolt](https://github.com/coreos/bbolt) fork).
|
||||||
|
|
||||||
|
If you implement any other backend and wish it to be linked here, please send a PR editing this file.
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
|||||||
38
vendor/github.com/hashicorp/go-hclog/context.go
сгенерированный
поставляемый
Обычный файл
38
vendor/github.com/hashicorp/go-hclog/context.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,38 @@
|
|||||||
|
package hclog
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
// WithContext inserts a logger into the context and is retrievable
|
||||||
|
// with FromContext. The optional args can be set with the same syntax as
|
||||||
|
// Logger.With to set fields on the inserted logger. This will not modify
|
||||||
|
// the logger argument in-place.
|
||||||
|
func WithContext(ctx context.Context, logger Logger, args ...interface{}) context.Context {
|
||||||
|
// While we could call logger.With even with zero args, we have this
|
||||||
|
// check to avoid unnecessary allocations around creating a copy of a
|
||||||
|
// logger.
|
||||||
|
if len(args) > 0 {
|
||||||
|
logger = logger.With(args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return context.WithValue(ctx, contextKey, logger)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromContext returns a logger from the context. This will return L()
|
||||||
|
// (the default logger) if no logger is found in the context. Therefore,
|
||||||
|
// this will never return a nil value.
|
||||||
|
func FromContext(ctx context.Context) Logger {
|
||||||
|
logger, _ := ctx.Value(contextKey).(Logger)
|
||||||
|
if logger == nil {
|
||||||
|
return L()
|
||||||
|
}
|
||||||
|
|
||||||
|
return logger
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unexported new type so that our context key never collides with another.
|
||||||
|
type contextKeyType struct{}
|
||||||
|
|
||||||
|
// contextKey is the key used for the context to store the logger.
|
||||||
|
var contextKey = contextKeyType{}
|
||||||
16
vendor/github.com/hashicorp/go-hclog/global.go
сгенерированный
поставляемый
16
vendor/github.com/hashicorp/go-hclog/global.go
сгенерированный
поставляемый
@@ -22,7 +22,11 @@ var (
|
|||||||
// to be used in more specific contexts.
|
// to be used in more specific contexts.
|
||||||
func Default() Logger {
|
func Default() Logger {
|
||||||
protect.Do(func() {
|
protect.Do(func() {
|
||||||
def = New(DefaultOptions)
|
// If SetDefault was used before Default() was called, we need to
|
||||||
|
// detect that here.
|
||||||
|
if def == nil {
|
||||||
|
def = New(DefaultOptions)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return def
|
return def
|
||||||
@@ -32,3 +36,13 @@ func Default() Logger {
|
|||||||
func L() Logger {
|
func L() Logger {
|
||||||
return Default()
|
return Default()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetDefault changes the logger to be returned by Default()and L()
|
||||||
|
// to the one given. This allows packages to use the default logger
|
||||||
|
// and have higher level packages change it to match the execution
|
||||||
|
// environment. It returns any old default if there is one.
|
||||||
|
func SetDefault(log Logger) Logger {
|
||||||
|
old := def
|
||||||
|
def = log
|
||||||
|
return old
|
||||||
|
}
|
||||||
|
|||||||
86
vendor/github.com/hashicorp/go-hclog/intlogger.go
сгенерированный
поставляемый
86
vendor/github.com/hashicorp/go-hclog/intlogger.go
сгенерированный
поставляемый
@@ -21,6 +21,9 @@ import (
|
|||||||
// contains millisecond precision
|
// contains millisecond precision
|
||||||
const TimeFormat = "2006-01-02T15:04:05.000Z0700"
|
const TimeFormat = "2006-01-02T15:04:05.000Z0700"
|
||||||
|
|
||||||
|
// errJsonUnsupportedTypeMsg is included in log json entries, if an arg cannot be serialized to json
|
||||||
|
const errJsonUnsupportedTypeMsg = "logging contained values that don't serialize to json"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_levelToBracket = map[Level]string{
|
_levelToBracket = map[Level]string{
|
||||||
Debug: "[DEBUG]",
|
Debug: "[DEBUG]",
|
||||||
@@ -296,39 +299,7 @@ func (l *intLogger) renderSlice(v reflect.Value) string {
|
|||||||
|
|
||||||
// JSON logging function
|
// JSON logging function
|
||||||
func (l *intLogger) logJSON(t time.Time, level Level, msg string, args ...interface{}) {
|
func (l *intLogger) logJSON(t time.Time, level Level, msg string, args ...interface{}) {
|
||||||
vals := map[string]interface{}{
|
vals := l.jsonMapEntry(t, level, msg)
|
||||||
"@message": msg,
|
|
||||||
"@timestamp": t.Format("2006-01-02T15:04:05.000000Z07:00"),
|
|
||||||
}
|
|
||||||
|
|
||||||
var levelStr string
|
|
||||||
switch level {
|
|
||||||
case Error:
|
|
||||||
levelStr = "error"
|
|
||||||
case Warn:
|
|
||||||
levelStr = "warn"
|
|
||||||
case Info:
|
|
||||||
levelStr = "info"
|
|
||||||
case Debug:
|
|
||||||
levelStr = "debug"
|
|
||||||
case Trace:
|
|
||||||
levelStr = "trace"
|
|
||||||
default:
|
|
||||||
levelStr = "all"
|
|
||||||
}
|
|
||||||
|
|
||||||
vals["@level"] = levelStr
|
|
||||||
|
|
||||||
if l.name != "" {
|
|
||||||
vals["@module"] = l.name
|
|
||||||
}
|
|
||||||
|
|
||||||
if l.caller {
|
|
||||||
if _, file, line, ok := runtime.Caller(3); ok {
|
|
||||||
vals["@caller"] = fmt.Sprintf("%s:%d", file, line)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
args = append(l.implied, args...)
|
args = append(l.implied, args...)
|
||||||
|
|
||||||
if args != nil && len(args) > 0 {
|
if args != nil && len(args) > 0 {
|
||||||
@@ -369,10 +340,51 @@ func (l *intLogger) logJSON(t time.Time, level Level, msg string, args ...interf
|
|||||||
|
|
||||||
err := json.NewEncoder(l.writer).Encode(vals)
|
err := json.NewEncoder(l.writer).Encode(vals)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
if _, ok := err.(*json.UnsupportedTypeError); ok {
|
||||||
|
plainVal := l.jsonMapEntry(t, level, msg)
|
||||||
|
plainVal["@warn"] = errJsonUnsupportedTypeMsg
|
||||||
|
|
||||||
|
json.NewEncoder(l.writer).Encode(plainVal)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (l intLogger) jsonMapEntry(t time.Time, level Level, msg string) map[string]interface{} {
|
||||||
|
vals := map[string]interface{}{
|
||||||
|
"@message": msg,
|
||||||
|
"@timestamp": t.Format("2006-01-02T15:04:05.000000Z07:00"),
|
||||||
|
}
|
||||||
|
|
||||||
|
var levelStr string
|
||||||
|
switch level {
|
||||||
|
case Error:
|
||||||
|
levelStr = "error"
|
||||||
|
case Warn:
|
||||||
|
levelStr = "warn"
|
||||||
|
case Info:
|
||||||
|
levelStr = "info"
|
||||||
|
case Debug:
|
||||||
|
levelStr = "debug"
|
||||||
|
case Trace:
|
||||||
|
levelStr = "trace"
|
||||||
|
default:
|
||||||
|
levelStr = "all"
|
||||||
|
}
|
||||||
|
|
||||||
|
vals["@level"] = levelStr
|
||||||
|
|
||||||
|
if l.name != "" {
|
||||||
|
vals["@module"] = l.name
|
||||||
|
}
|
||||||
|
|
||||||
|
if l.caller {
|
||||||
|
if _, file, line, ok := runtime.Caller(4); ok {
|
||||||
|
vals["@caller"] = fmt.Sprintf("%s:%d", file, line)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return vals
|
||||||
|
}
|
||||||
|
|
||||||
// Emit the message and args at DEBUG level
|
// Emit the message and args at DEBUG level
|
||||||
func (l *intLogger) Debug(msg string, args ...interface{}) {
|
func (l *intLogger) Debug(msg string, args ...interface{}) {
|
||||||
l.Log(Debug, msg, args...)
|
l.Log(Debug, msg, args...)
|
||||||
@@ -507,5 +519,9 @@ func (l *intLogger) StandardLogger(opts *StandardLoggerOptions) *log.Logger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *intLogger) StandardWriter(opts *StandardLoggerOptions) io.Writer {
|
func (l *intLogger) StandardWriter(opts *StandardLoggerOptions) io.Writer {
|
||||||
return &stdlogAdapter{l, opts.InferLevels}
|
return &stdlogAdapter{
|
||||||
|
log: l,
|
||||||
|
inferLevels: opts.InferLevels,
|
||||||
|
forceLevel: opts.ForceLevel,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
6
vendor/github.com/hashicorp/go-hclog/logger.go
сгенерированный
поставляемый
6
vendor/github.com/hashicorp/go-hclog/logger.go
сгенерированный
поставляемый
@@ -143,6 +143,12 @@ type StandardLoggerOptions struct {
|
|||||||
// This supports the strings like [ERROR], [ERR] [TRACE], [WARN], [INFO],
|
// This supports the strings like [ERROR], [ERR] [TRACE], [WARN], [INFO],
|
||||||
// [DEBUG] and strip it off before reapplying it.
|
// [DEBUG] and strip it off before reapplying it.
|
||||||
InferLevels bool
|
InferLevels bool
|
||||||
|
|
||||||
|
// ForceLevel is used to force all output from the standard logger to be at
|
||||||
|
// the specified level. Similar to InferLevels, this will strip any level
|
||||||
|
// prefix contained in the logged string before applying the forced level.
|
||||||
|
// If set, this override InferLevels.
|
||||||
|
ForceLevel Level
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoggerOptions can be used to configure a new logger.
|
// LoggerOptions can be used to configure a new logger.
|
||||||
|
|||||||
23
vendor/github.com/hashicorp/go-hclog/stdlog.go
сгенерированный
поставляемый
23
vendor/github.com/hashicorp/go-hclog/stdlog.go
сгенерированный
поставляемый
@@ -11,6 +11,7 @@ import (
|
|||||||
type stdlogAdapter struct {
|
type stdlogAdapter struct {
|
||||||
log Logger
|
log Logger
|
||||||
inferLevels bool
|
inferLevels bool
|
||||||
|
forceLevel Level
|
||||||
}
|
}
|
||||||
|
|
||||||
// Take the data, infer the levels if configured, and send it through
|
// Take the data, infer the levels if configured, and send it through
|
||||||
@@ -18,7 +19,27 @@ type stdlogAdapter struct {
|
|||||||
func (s *stdlogAdapter) Write(data []byte) (int, error) {
|
func (s *stdlogAdapter) Write(data []byte) (int, error) {
|
||||||
str := string(bytes.TrimRight(data, " \t\n"))
|
str := string(bytes.TrimRight(data, " \t\n"))
|
||||||
|
|
||||||
if s.inferLevels {
|
if s.forceLevel != NoLevel {
|
||||||
|
// Use pickLevel to strip log levels included in the line since we are
|
||||||
|
// forcing the level
|
||||||
|
_, str := s.pickLevel(str)
|
||||||
|
|
||||||
|
// Log at the forced level
|
||||||
|
switch s.forceLevel {
|
||||||
|
case Trace:
|
||||||
|
s.log.Trace(str)
|
||||||
|
case Debug:
|
||||||
|
s.log.Debug(str)
|
||||||
|
case Info:
|
||||||
|
s.log.Info(str)
|
||||||
|
case Warn:
|
||||||
|
s.log.Warn(str)
|
||||||
|
case Error:
|
||||||
|
s.log.Error(str)
|
||||||
|
default:
|
||||||
|
s.log.Info(str)
|
||||||
|
}
|
||||||
|
} else if s.inferLevels {
|
||||||
level, str := s.pickLevel(str)
|
level, str := s.pickLevel(str)
|
||||||
switch level {
|
switch level {
|
||||||
case Trace:
|
case Trace:
|
||||||
|
|||||||
9
vendor/github.com/hashicorp/go-immutable-radix/CHANGELOG.md
сгенерированный
поставляемый
Обычный файл
9
vendor/github.com/hashicorp/go-immutable-radix/CHANGELOG.md
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,9 @@
|
|||||||
|
# 1.1.0 (May 22nd, 2019)
|
||||||
|
|
||||||
|
FEATURES
|
||||||
|
|
||||||
|
* Add `SeekLowerBound` to allow for range scans. [[GH-24](https://github.com/hashicorp/go-immutable-radix/pull/24)]
|
||||||
|
|
||||||
|
# 1.0.0 (August 30th, 2018)
|
||||||
|
|
||||||
|
* go mod adopted
|
||||||
25
vendor/github.com/hashicorp/go-immutable-radix/README.md
сгенерированный
поставляемый
25
vendor/github.com/hashicorp/go-immutable-radix/README.md
сгенерированный
поставляемый
@@ -39,3 +39,28 @@ if string(m) != "foo" {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Here is an example of performing a range scan of the keys.
|
||||||
|
|
||||||
|
```go
|
||||||
|
// Create a tree
|
||||||
|
r := iradix.New()
|
||||||
|
r, _, _ = r.Insert([]byte("001"), 1)
|
||||||
|
r, _, _ = r.Insert([]byte("002"), 2)
|
||||||
|
r, _, _ = r.Insert([]byte("005"), 5)
|
||||||
|
r, _, _ = r.Insert([]byte("010"), 10)
|
||||||
|
r, _, _ = r.Insert([]byte("100"), 10)
|
||||||
|
|
||||||
|
// Range scan over the keys that sort lexicographically between [003, 050)
|
||||||
|
it := r.Root().Iterator()
|
||||||
|
it.SeekLowerBound([]byte("003"))
|
||||||
|
for key, _, ok := it.Next(); ok; key, _, ok = it.Next() {
|
||||||
|
if key >= "050" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
fmt.Println(key)
|
||||||
|
}
|
||||||
|
// Output:
|
||||||
|
// 005
|
||||||
|
// 010
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
99
vendor/github.com/hashicorp/go-immutable-radix/iter.go
сгенерированный
поставляемый
99
vendor/github.com/hashicorp/go-immutable-radix/iter.go
сгенерированный
поставляемый
@@ -1,6 +1,8 @@
|
|||||||
package iradix
|
package iradix
|
||||||
|
|
||||||
import "bytes"
|
import (
|
||||||
|
"bytes"
|
||||||
|
)
|
||||||
|
|
||||||
// Iterator is used to iterate over a set of nodes
|
// Iterator is used to iterate over a set of nodes
|
||||||
// in pre-order
|
// in pre-order
|
||||||
@@ -53,6 +55,101 @@ func (i *Iterator) SeekPrefix(prefix []byte) {
|
|||||||
i.SeekPrefixWatch(prefix)
|
i.SeekPrefixWatch(prefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (i *Iterator) recurseMin(n *Node) *Node {
|
||||||
|
// Traverse to the minimum child
|
||||||
|
if n.leaf != nil {
|
||||||
|
return n
|
||||||
|
}
|
||||||
|
if len(n.edges) > 0 {
|
||||||
|
// Add all the other edges to the stack (the min node will be added as
|
||||||
|
// we recurse)
|
||||||
|
i.stack = append(i.stack, n.edges[1:])
|
||||||
|
return i.recurseMin(n.edges[0].node)
|
||||||
|
}
|
||||||
|
// Shouldn't be possible
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SeekLowerBound is used to seek the iterator to the smallest key that is
|
||||||
|
// greater or equal to the given key. There is no watch variant as it's hard to
|
||||||
|
// predict based on the radix structure which node(s) changes might affect the
|
||||||
|
// result.
|
||||||
|
func (i *Iterator) SeekLowerBound(key []byte) {
|
||||||
|
// Wipe the stack. Unlike Prefix iteration, we need to build the stack as we
|
||||||
|
// go because we need only a subset of edges of many nodes in the path to the
|
||||||
|
// leaf with the lower bound.
|
||||||
|
i.stack = []edges{}
|
||||||
|
n := i.node
|
||||||
|
search := key
|
||||||
|
|
||||||
|
found := func(n *Node) {
|
||||||
|
i.node = n
|
||||||
|
i.stack = append(i.stack, edges{edge{node: n}})
|
||||||
|
}
|
||||||
|
|
||||||
|
for {
|
||||||
|
// Compare current prefix with the search key's same-length prefix.
|
||||||
|
var prefixCmp int
|
||||||
|
if len(n.prefix) < len(search) {
|
||||||
|
prefixCmp = bytes.Compare(n.prefix, search[0:len(n.prefix)])
|
||||||
|
} else {
|
||||||
|
prefixCmp = bytes.Compare(n.prefix, search)
|
||||||
|
}
|
||||||
|
|
||||||
|
if prefixCmp > 0 {
|
||||||
|
// Prefix is larger, that means the lower bound is greater than the search
|
||||||
|
// and from now on we need to follow the minimum path to the smallest
|
||||||
|
// leaf under this subtree.
|
||||||
|
n = i.recurseMin(n)
|
||||||
|
if n != nil {
|
||||||
|
found(n)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if prefixCmp < 0 {
|
||||||
|
// Prefix is smaller than search prefix, that means there is no lower
|
||||||
|
// bound
|
||||||
|
i.node = nil
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prefix is equal, we are still heading for an exact match. If this is a
|
||||||
|
// leaf we're done.
|
||||||
|
if n.leaf != nil {
|
||||||
|
if bytes.Compare(n.leaf.key, key) < 0 {
|
||||||
|
i.node = nil
|
||||||
|
return
|
||||||
|
}
|
||||||
|
found(n)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Consume the search prefix
|
||||||
|
if len(n.prefix) > len(search) {
|
||||||
|
search = []byte{}
|
||||||
|
} else {
|
||||||
|
search = search[len(n.prefix):]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, take the lower bound next edge.
|
||||||
|
idx, lbNode := n.getLowerBoundEdge(search[0])
|
||||||
|
if lbNode == nil {
|
||||||
|
i.node = nil
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create stack edges for the all strictly higher edges in this node.
|
||||||
|
if idx+1 < len(n.edges) {
|
||||||
|
i.stack = append(i.stack, n.edges[idx+1:])
|
||||||
|
}
|
||||||
|
|
||||||
|
i.node = lbNode
|
||||||
|
// Recurse
|
||||||
|
n = lbNode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Next returns the next node in order
|
// Next returns the next node in order
|
||||||
func (i *Iterator) Next() ([]byte, interface{}, bool) {
|
func (i *Iterator) Next() ([]byte, interface{}, bool) {
|
||||||
// Initialize our stack if needed
|
// Initialize our stack if needed
|
||||||
|
|||||||
12
vendor/github.com/hashicorp/go-immutable-radix/node.go
сгенерированный
поставляемый
12
vendor/github.com/hashicorp/go-immutable-radix/node.go
сгенерированный
поставляемый
@@ -79,6 +79,18 @@ func (n *Node) getEdge(label byte) (int, *Node) {
|
|||||||
return -1, nil
|
return -1, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (n *Node) getLowerBoundEdge(label byte) (int, *Node) {
|
||||||
|
num := len(n.edges)
|
||||||
|
idx := sort.Search(num, func(i int) bool {
|
||||||
|
return n.edges[i].label >= label
|
||||||
|
})
|
||||||
|
// we want lower bound behavior so return even if it's not an exact match
|
||||||
|
if idx < num {
|
||||||
|
return idx, n.edges[idx].node
|
||||||
|
}
|
||||||
|
return -1, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (n *Node) delEdge(label byte) {
|
func (n *Node) delEdge(label byte) {
|
||||||
num := len(n.edges)
|
num := len(n.edges)
|
||||||
idx := sort.Search(num, func(i int) bool {
|
idx := sort.Search(num, func(i int) bool {
|
||||||
|
|||||||
2
vendor/github.com/hashicorp/go-msgpack/codec/decode.go
сгенерированный
поставляемый
2
vendor/github.com/hashicorp/go-msgpack/codec/decode.go
сгенерированный
поставляемый
@@ -527,7 +527,7 @@ func (f *decFnInfo) kMap(rv reflect.Value) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
rvv := rv.MapIndex(rvk)
|
rvv := rv.MapIndex(rvk)
|
||||||
if !rvv.IsValid() {
|
if !rvv.IsValid() || !rvv.CanSet() {
|
||||||
rvv = reflect.New(vtype).Elem()
|
rvv = reflect.New(vtype).Elem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
7
vendor/github.com/hashicorp/go-msgpack/codec/helper.go
сгенерированный
поставляемый
7
vendor/github.com/hashicorp/go-msgpack/codec/helper.go
сгенерированный
поставляемый
@@ -45,6 +45,13 @@ const (
|
|||||||
// for debugging, set this to false, to catch panic traces.
|
// for debugging, set this to false, to catch panic traces.
|
||||||
// Note that this will always cause rpc tests to fail, since they need io.EOF sent via panic.
|
// Note that this will always cause rpc tests to fail, since they need io.EOF sent via panic.
|
||||||
recoverPanicToErr = true
|
recoverPanicToErr = true
|
||||||
|
|
||||||
|
// if checkStructForEmptyValue, check structs fields to see if an empty value.
|
||||||
|
// This could be an expensive call, so possibly disable it.
|
||||||
|
checkStructForEmptyValue = false
|
||||||
|
|
||||||
|
// if derefForIsEmptyValue, deref pointers and interfaces when checking isEmptyValue
|
||||||
|
derefForIsEmptyValue = false
|
||||||
)
|
)
|
||||||
|
|
||||||
type charEncoding uint8
|
type charEncoding uint8
|
||||||
|
|||||||
13
vendor/github.com/hashicorp/go-msgpack/codec/helper_internal.go
сгенерированный
поставляемый
13
vendor/github.com/hashicorp/go-msgpack/codec/helper_internal.go
сгенерированный
поставляемый
@@ -33,8 +33,10 @@ func panicValToErr(panicVal interface{}, err *error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func isEmptyValueDeref(v reflect.Value, deref bool) bool {
|
func hIsEmptyValue(v reflect.Value, deref, checkStruct bool) bool {
|
||||||
switch v.Kind() {
|
switch v.Kind() {
|
||||||
|
case reflect.Invalid:
|
||||||
|
return true
|
||||||
case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
|
case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
|
||||||
return v.Len() == 0
|
return v.Len() == 0
|
||||||
case reflect.Bool:
|
case reflect.Bool:
|
||||||
@@ -50,18 +52,21 @@ func isEmptyValueDeref(v reflect.Value, deref bool) bool {
|
|||||||
if v.IsNil() {
|
if v.IsNil() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return isEmptyValueDeref(v.Elem(), deref)
|
return hIsEmptyValue(v.Elem(), deref, checkStruct)
|
||||||
} else {
|
} else {
|
||||||
return v.IsNil()
|
return v.IsNil()
|
||||||
}
|
}
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
|
if !checkStruct {
|
||||||
|
return false
|
||||||
|
}
|
||||||
// return true if all fields are empty. else return false.
|
// return true if all fields are empty. else return false.
|
||||||
|
|
||||||
// we cannot use equality check, because some fields may be maps/slices/etc
|
// we cannot use equality check, because some fields may be maps/slices/etc
|
||||||
// and consequently the structs are not comparable.
|
// and consequently the structs are not comparable.
|
||||||
// return v.Interface() == reflect.Zero(v.Type()).Interface()
|
// return v.Interface() == reflect.Zero(v.Type()).Interface()
|
||||||
for i, n := 0, v.NumField(); i < n; i++ {
|
for i, n := 0, v.NumField(); i < n; i++ {
|
||||||
if !isEmptyValueDeref(v.Field(i), deref) {
|
if !hIsEmptyValue(v.Field(i), deref, checkStruct) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -71,7 +76,7 @@ func isEmptyValueDeref(v reflect.Value, deref bool) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func isEmptyValue(v reflect.Value) bool {
|
func isEmptyValue(v reflect.Value) bool {
|
||||||
return isEmptyValueDeref(v, true)
|
return hIsEmptyValue(v, derefForIsEmptyValue, checkStructForEmptyValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
func debugf(format string, args ...interface{}) {
|
func debugf(format string, args ...interface{}) {
|
||||||
|
|||||||
1
vendor/github.com/hashicorp/go-plugin/.gitignore
сгенерированный
поставляемый
1
vendor/github.com/hashicorp/go-plugin/.gitignore
сгенерированный
поставляемый
@@ -1 +1,2 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
|
.idea
|
||||||
|
|||||||
30
vendor/github.com/hashicorp/go-plugin/client.go
сгенерированный
поставляемый
30
vendor/github.com/hashicorp/go-plugin/client.go
сгенерированный
поставляемый
@@ -87,6 +87,10 @@ type Client struct {
|
|||||||
// goroutines.
|
// goroutines.
|
||||||
clientWaitGroup sync.WaitGroup
|
clientWaitGroup sync.WaitGroup
|
||||||
|
|
||||||
|
// stderrWaitGroup is used to prevent the command's Wait() function from
|
||||||
|
// being called before we've finished reading from the stderr pipe.
|
||||||
|
stderrWaitGroup sync.WaitGroup
|
||||||
|
|
||||||
// processKilled is used for testing only, to flag when the process was
|
// processKilled is used for testing only, to flag when the process was
|
||||||
// forcefully killed.
|
// forcefully killed.
|
||||||
processKilled bool
|
processKilled bool
|
||||||
@@ -590,6 +594,12 @@ func (c *Client) Start() (addr net.Addr, err error) {
|
|||||||
// Create a context for when we kill
|
// Create a context for when we kill
|
||||||
c.doneCtx, c.ctxCancel = context.WithCancel(context.Background())
|
c.doneCtx, c.ctxCancel = context.WithCancel(context.Background())
|
||||||
|
|
||||||
|
// Start goroutine that logs the stderr
|
||||||
|
c.clientWaitGroup.Add(1)
|
||||||
|
c.stderrWaitGroup.Add(1)
|
||||||
|
// logStderr calls Done()
|
||||||
|
go c.logStderr(cmdStderr)
|
||||||
|
|
||||||
c.clientWaitGroup.Add(1)
|
c.clientWaitGroup.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
// ensure the context is cancelled when we're done
|
// ensure the context is cancelled when we're done
|
||||||
@@ -602,6 +612,10 @@ func (c *Client) Start() (addr net.Addr, err error) {
|
|||||||
pid := c.process.Pid
|
pid := c.process.Pid
|
||||||
path := cmd.Path
|
path := cmd.Path
|
||||||
|
|
||||||
|
// wait to finish reading from stderr since the stderr pipe reader
|
||||||
|
// will be closed by the subsequent call to cmd.Wait().
|
||||||
|
c.stderrWaitGroup.Wait()
|
||||||
|
|
||||||
// Wait for the command to end.
|
// Wait for the command to end.
|
||||||
err := cmd.Wait()
|
err := cmd.Wait()
|
||||||
|
|
||||||
@@ -624,11 +638,6 @@ func (c *Client) Start() (addr net.Addr, err error) {
|
|||||||
c.exited = true
|
c.exited = true
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// Start goroutine that logs the stderr
|
|
||||||
c.clientWaitGroup.Add(1)
|
|
||||||
// logStderr calls Done()
|
|
||||||
go c.logStderr(cmdStderr)
|
|
||||||
|
|
||||||
// Start a goroutine that is going to be reading the lines
|
// Start a goroutine that is going to be reading the lines
|
||||||
// out of stdout
|
// out of stdout
|
||||||
linesCh := make(chan string)
|
linesCh := make(chan string)
|
||||||
@@ -936,6 +945,7 @@ var stdErrBufferSize = 64 * 1024
|
|||||||
|
|
||||||
func (c *Client) logStderr(r io.Reader) {
|
func (c *Client) logStderr(r io.Reader) {
|
||||||
defer c.clientWaitGroup.Done()
|
defer c.clientWaitGroup.Done()
|
||||||
|
defer c.stderrWaitGroup.Done()
|
||||||
l := c.logger.Named(filepath.Base(c.config.Cmd.Path))
|
l := c.logger.Named(filepath.Base(c.config.Cmd.Path))
|
||||||
|
|
||||||
reader := bufio.NewReaderSize(r, stdErrBufferSize)
|
reader := bufio.NewReaderSize(r, stdErrBufferSize)
|
||||||
@@ -976,15 +986,15 @@ func (c *Client) logStderr(r io.Reader) {
|
|||||||
// Attempt to infer the desired log level from the commonly used
|
// Attempt to infer the desired log level from the commonly used
|
||||||
// string prefixes
|
// string prefixes
|
||||||
switch line := string(line); {
|
switch line := string(line); {
|
||||||
case strings.HasPrefix("[TRACE]", line):
|
case strings.HasPrefix(line, "[TRACE]"):
|
||||||
l.Trace(line)
|
l.Trace(line)
|
||||||
case strings.HasPrefix("[DEBUG]", line):
|
case strings.HasPrefix(line, "[DEBUG]"):
|
||||||
l.Debug(line)
|
l.Debug(line)
|
||||||
case strings.HasPrefix("[INFO]", line):
|
case strings.HasPrefix(line, "[INFO]"):
|
||||||
l.Info(line)
|
l.Info(line)
|
||||||
case strings.HasPrefix("[WARN]", line):
|
case strings.HasPrefix(line, "[WARN]"):
|
||||||
l.Warn(line)
|
l.Warn(line)
|
||||||
case strings.HasPrefix("[ERROR]", line):
|
case strings.HasPrefix(line, "[ERROR]"):
|
||||||
l.Error(line)
|
l.Error(line)
|
||||||
default:
|
default:
|
||||||
l.Debug(line)
|
l.Debug(line)
|
||||||
|
|||||||
6
vendor/github.com/hashicorp/go-plugin/grpc_client.go
сгенерированный
поставляемый
6
vendor/github.com/hashicorp/go-plugin/grpc_client.go
сгенерированный
поставляемый
@@ -3,6 +3,7 @@ package plugin
|
|||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math"
|
||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -32,6 +33,11 @@ func dialGRPCConn(tls *tls.Config, dialer func(string, time.Duration) (net.Conn,
|
|||||||
credentials.NewTLS(tls)))
|
credentials.NewTLS(tls)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
opts = append(opts,
|
||||||
|
grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(math.MaxInt32)),
|
||||||
|
grpc.WithDefaultCallOptions(grpc.MaxCallSendMsgSize(math.MaxInt32)))
|
||||||
|
|
||||||
|
|
||||||
// Connect. Note the first parameter is unused because we use a custom
|
// Connect. Note the first parameter is unused because we use a custom
|
||||||
// dialer that has the state to see the address.
|
// dialer that has the state to see the address.
|
||||||
conn, err := grpc.Dial("unused", opts...)
|
conn, err := grpc.Dial("unused", opts...)
|
||||||
|
|||||||
32
vendor/github.com/hashicorp/go-plugin/server.go
сгенерированный
поставляемый
32
vendor/github.com/hashicorp/go-plugin/server.go
сгенерированный
поставляемый
@@ -363,14 +363,34 @@ func serverListener() (net.Listener, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func serverListener_tcp() (net.Listener, error) {
|
func serverListener_tcp() (net.Listener, error) {
|
||||||
minPort, err := strconv.ParseInt(os.Getenv("PLUGIN_MIN_PORT"), 10, 32)
|
envMinPort := os.Getenv("PLUGIN_MIN_PORT")
|
||||||
if err != nil {
|
envMaxPort := os.Getenv("PLUGIN_MAX_PORT")
|
||||||
return nil, err
|
|
||||||
|
var minPort, maxPort int64
|
||||||
|
var err error
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case len(envMinPort) == 0:
|
||||||
|
minPort = 0
|
||||||
|
default:
|
||||||
|
minPort, err = strconv.ParseInt(envMinPort, 10, 32)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Couldn't get value from PLUGIN_MIN_PORT: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
maxPort, err := strconv.ParseInt(os.Getenv("PLUGIN_MAX_PORT"), 10, 32)
|
switch {
|
||||||
if err != nil {
|
case len(envMaxPort) == 0:
|
||||||
return nil, err
|
maxPort = 0
|
||||||
|
default:
|
||||||
|
maxPort, err = strconv.ParseInt(envMaxPort, 10, 32)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Couldn't get value from PLUGIN_MAX_PORT: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if minPort > maxPort {
|
||||||
|
return nil, fmt.Errorf("ENV_MIN_PORT value of %d is greater than PLUGIN_MAX_PORT value of %d", minPort, maxPort)
|
||||||
}
|
}
|
||||||
|
|
||||||
for port := minPort; port <= maxPort; port++ {
|
for port := minPort; port <= maxPort; port++ {
|
||||||
|
|||||||
5
vendor/github.com/hashicorp/memberlist/config.go
сгенерированный
поставляемый
5
vendor/github.com/hashicorp/memberlist/config.go
сгенерированный
поставляемый
@@ -215,6 +215,11 @@ type Config struct {
|
|||||||
// This is a legacy name for backward compatibility but should really be
|
// This is a legacy name for backward compatibility but should really be
|
||||||
// called PacketBufferSize now that we have generalized the transport.
|
// called PacketBufferSize now that we have generalized the transport.
|
||||||
UDPBufferSize int
|
UDPBufferSize int
|
||||||
|
|
||||||
|
// DeadNodeReclaimTime controls the time before a dead node's name can be
|
||||||
|
// reclaimed by one with a different address or port. By default, this is 0,
|
||||||
|
// meaning nodes cannot be reclaimed this way.
|
||||||
|
DeadNodeReclaimTime time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultLANConfig returns a sane set of configurations for Memberlist.
|
// DefaultLANConfig returns a sane set of configurations for Memberlist.
|
||||||
|
|||||||
46
vendor/github.com/hashicorp/memberlist/state.go
сгенерированный
поставляемый
46
vendor/github.com/hashicorp/memberlist/state.go
сгенерированный
поставляемый
@@ -9,7 +9,7 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/armon/go-metrics"
|
metrics "github.com/armon/go-metrics"
|
||||||
)
|
)
|
||||||
|
|
||||||
type nodeStateType int
|
type nodeStateType int
|
||||||
@@ -891,6 +891,7 @@ func (m *Memberlist) aliveNode(a *alive, notify chan struct{}, bootstrap bool) {
|
|||||||
|
|
||||||
// Check if we've never seen this node before, and if not, then
|
// Check if we've never seen this node before, and if not, then
|
||||||
// store this node in our node map.
|
// store this node in our node map.
|
||||||
|
var updatesNode bool
|
||||||
if !ok {
|
if !ok {
|
||||||
state = &nodeState{
|
state = &nodeState{
|
||||||
Node: Node{
|
Node: Node{
|
||||||
@@ -926,29 +927,40 @@ func (m *Memberlist) aliveNode(a *alive, notify chan struct{}, bootstrap bool) {
|
|||||||
|
|
||||||
// Update numNodes after we've added a new node
|
// Update numNodes after we've added a new node
|
||||||
atomic.AddUint32(&m.numNodes, 1)
|
atomic.AddUint32(&m.numNodes, 1)
|
||||||
}
|
} else {
|
||||||
|
// Check if this address is different than the existing node unless the old node is dead.
|
||||||
|
if !bytes.Equal([]byte(state.Addr), a.Addr) || state.Port != a.Port {
|
||||||
|
// If DeadNodeReclaimTime is configured, check if enough time has elapsed since the node died.
|
||||||
|
canReclaim := (m.config.DeadNodeReclaimTime > 0 &&
|
||||||
|
time.Since(state.StateChange) > m.config.DeadNodeReclaimTime)
|
||||||
|
|
||||||
// Check if this address is different than the existing node
|
// Allow the address to be updated if a dead node is being replaced.
|
||||||
if !bytes.Equal([]byte(state.Addr), a.Addr) || state.Port != a.Port {
|
if state.State == stateDead && canReclaim {
|
||||||
m.logger.Printf("[ERR] memberlist: Conflicting address for %s. Mine: %v:%d Theirs: %v:%d",
|
m.logger.Printf("[INFO] memberlist: Updating address for failed node %s from %v:%d to %v:%d",
|
||||||
state.Name, state.Addr, state.Port, net.IP(a.Addr), a.Port)
|
state.Name, state.Addr, state.Port, net.IP(a.Addr), a.Port)
|
||||||
|
updatesNode = true
|
||||||
|
} else {
|
||||||
|
m.logger.Printf("[ERR] memberlist: Conflicting address for %s. Mine: %v:%d Theirs: %v:%d Old state: %v",
|
||||||
|
state.Name, state.Addr, state.Port, net.IP(a.Addr), a.Port, state.State)
|
||||||
|
|
||||||
// Inform the conflict delegate if provided
|
// Inform the conflict delegate if provided
|
||||||
if m.config.Conflict != nil {
|
if m.config.Conflict != nil {
|
||||||
other := Node{
|
other := Node{
|
||||||
Name: a.Node,
|
Name: a.Node,
|
||||||
Addr: a.Addr,
|
Addr: a.Addr,
|
||||||
Port: a.Port,
|
Port: a.Port,
|
||||||
Meta: a.Meta,
|
Meta: a.Meta,
|
||||||
|
}
|
||||||
|
m.config.Conflict.NotifyConflict(&state.Node, &other)
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
m.config.Conflict.NotifyConflict(&state.Node, &other)
|
|
||||||
}
|
}
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bail if the incarnation number is older, and this is not about us
|
// Bail if the incarnation number is older, and this is not about us
|
||||||
isLocalNode := state.Name == m.config.Name
|
isLocalNode := state.Name == m.config.Name
|
||||||
if a.Incarnation <= state.Incarnation && !isLocalNode {
|
if a.Incarnation <= state.Incarnation && !isLocalNode && !updatesNode {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1006,6 +1018,8 @@ func (m *Memberlist) aliveNode(a *alive, notify chan struct{}, bootstrap bool) {
|
|||||||
// Update the state and incarnation number
|
// Update the state and incarnation number
|
||||||
state.Incarnation = a.Incarnation
|
state.Incarnation = a.Incarnation
|
||||||
state.Meta = a.Meta
|
state.Meta = a.Meta
|
||||||
|
state.Addr = a.Addr
|
||||||
|
state.Port = a.Port
|
||||||
if state.State != stateAlive {
|
if state.State != stateAlive {
|
||||||
state.State = stateAlive
|
state.State = stateAlive
|
||||||
state.StateChange = time.Now()
|
state.StateChange = time.Now()
|
||||||
|
|||||||
2
vendor/github.com/jaytaylor/html2text/html2text.go
сгенерированный
поставляемый
2
vendor/github.com/jaytaylor/html2text/html2text.go
сгенерированный
поставляемый
@@ -399,7 +399,7 @@ func (ctx *textifyTraverseContext) traverse(node *html.Node) error {
|
|||||||
if ctx.isPre {
|
if ctx.isPre {
|
||||||
data = node.Data
|
data = node.Data
|
||||||
} else {
|
} else {
|
||||||
data = strings.Trim(spacingRe.ReplaceAllString(node.Data, " "), " ")
|
data = strings.TrimSpace(spacingRe.ReplaceAllString(node.Data, " "))
|
||||||
}
|
}
|
||||||
return ctx.emit(data)
|
return ctx.emit(data)
|
||||||
|
|
||||||
|
|||||||
13
vendor/github.com/lib/pq/.travis.sh
сгенерированный
поставляемый
13
vendor/github.com/lib/pq/.travis.sh
сгенерированный
поставляемый
@@ -70,17 +70,4 @@ postgresql_uninstall() {
|
|||||||
sudo rm -rf /var/lib/postgresql
|
sudo rm -rf /var/lib/postgresql
|
||||||
}
|
}
|
||||||
|
|
||||||
megacheck_install() {
|
|
||||||
# Lock megacheck version at $MEGACHECK_VERSION to prevent spontaneous
|
|
||||||
# new error messages in old code.
|
|
||||||
go get -d honnef.co/go/tools/...
|
|
||||||
git -C $GOPATH/src/honnef.co/go/tools/ checkout $MEGACHECK_VERSION
|
|
||||||
go install honnef.co/go/tools/cmd/megacheck
|
|
||||||
megacheck --version
|
|
||||||
}
|
|
||||||
|
|
||||||
golint_install() {
|
|
||||||
go get github.com/golang/lint/golint
|
|
||||||
}
|
|
||||||
|
|
||||||
$1
|
$1
|
||||||
|
|||||||
16
vendor/github.com/lib/pq/.travis.yml
сгенерированный
поставляемый
16
vendor/github.com/lib/pq/.travis.yml
сгенерированный
поставляемый
@@ -1,9 +1,8 @@
|
|||||||
language: go
|
language: go
|
||||||
|
|
||||||
go:
|
go:
|
||||||
- 1.8.x
|
- 1.11.x
|
||||||
- 1.9.x
|
- 1.12.x
|
||||||
- 1.10.x
|
|
||||||
- master
|
- master
|
||||||
|
|
||||||
sudo: true
|
sudo: true
|
||||||
@@ -14,16 +13,11 @@ env:
|
|||||||
- PQGOSSLTESTS=1
|
- PQGOSSLTESTS=1
|
||||||
- PQSSLCERTTEST_PATH=$PWD/certs
|
- PQSSLCERTTEST_PATH=$PWD/certs
|
||||||
- PGHOST=127.0.0.1
|
- PGHOST=127.0.0.1
|
||||||
- MEGACHECK_VERSION=2017.2.2
|
|
||||||
matrix:
|
matrix:
|
||||||
- PGVERSION=10
|
- PGVERSION=10
|
||||||
- PGVERSION=9.6
|
- PGVERSION=9.6
|
||||||
- PGVERSION=9.5
|
- PGVERSION=9.5
|
||||||
- PGVERSION=9.4
|
- PGVERSION=9.4
|
||||||
- PGVERSION=9.3
|
|
||||||
- PGVERSION=9.2
|
|
||||||
- PGVERSION=9.1
|
|
||||||
- PGVERSION=9.0
|
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- ./.travis.sh postgresql_uninstall
|
- ./.travis.sh postgresql_uninstall
|
||||||
@@ -31,9 +25,9 @@ before_install:
|
|||||||
- ./.travis.sh postgresql_install
|
- ./.travis.sh postgresql_install
|
||||||
- ./.travis.sh postgresql_configure
|
- ./.travis.sh postgresql_configure
|
||||||
- ./.travis.sh client_configure
|
- ./.travis.sh client_configure
|
||||||
- ./.travis.sh megacheck_install
|
|
||||||
- ./.travis.sh golint_install
|
|
||||||
- go get golang.org/x/tools/cmd/goimports
|
- go get golang.org/x/tools/cmd/goimports
|
||||||
|
- go get golang.org/x/lint/golint
|
||||||
|
- GO111MODULE=on go get honnef.co/go/tools/cmd/staticcheck@2019.2.1
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- createdb pqgotest
|
- createdb pqgotest
|
||||||
@@ -44,7 +38,7 @@ script:
|
|||||||
- >
|
- >
|
||||||
goimports -d -e $(find -name '*.go') | awk '{ print } END { exit NR == 0 ? 0 : 1 }'
|
goimports -d -e $(find -name '*.go') | awk '{ print } END { exit NR == 0 ? 0 : 1 }'
|
||||||
- go vet ./...
|
- go vet ./...
|
||||||
- megacheck -go 1.8 ./...
|
- staticcheck -go 1.11 ./...
|
||||||
- golint ./...
|
- golint ./...
|
||||||
- PQTEST_BINARY_PARAMETERS=no go test -race -v ./...
|
- PQTEST_BINARY_PARAMETERS=no go test -race -v ./...
|
||||||
- PQTEST_BINARY_PARAMETERS=yes go test -race -v ./...
|
- PQTEST_BINARY_PARAMETERS=yes go test -race -v ./...
|
||||||
|
|||||||
2
vendor/github.com/lib/pq/README.md
сгенерированный
поставляемый
2
vendor/github.com/lib/pq/README.md
сгенерированный
поставляемый
@@ -10,7 +10,7 @@
|
|||||||
## Docs
|
## Docs
|
||||||
|
|
||||||
For detailed documentation and basic usage examples, please see the package
|
For detailed documentation and basic usage examples, please see the package
|
||||||
documentation at <http://godoc.org/github.com/lib/pq>.
|
documentation at <https://godoc.org/github.com/lib/pq>.
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
|
|||||||
2
vendor/github.com/lib/pq/buf.go
сгенерированный
поставляемый
2
vendor/github.com/lib/pq/buf.go
сгенерированный
поставляемый
@@ -66,7 +66,7 @@ func (b *writeBuf) int16(n int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *writeBuf) string(s string) {
|
func (b *writeBuf) string(s string) {
|
||||||
b.buf = append(b.buf, (s + "\000")...)
|
b.buf = append(append(b.buf, s...), '\000')
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *writeBuf) byte(c byte) {
|
func (b *writeBuf) byte(c byte) {
|
||||||
|
|||||||
301
vendor/github.com/lib/pq/conn.go
сгенерированный
поставляемый
301
vendor/github.com/lib/pq/conn.go
сгенерированный
поставляемый
@@ -2,7 +2,9 @@ package pq
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"context"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
|
"crypto/sha256"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"database/sql/driver"
|
"database/sql/driver"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
@@ -20,6 +22,7 @@ import (
|
|||||||
"unicode"
|
"unicode"
|
||||||
|
|
||||||
"github.com/lib/pq/oid"
|
"github.com/lib/pq/oid"
|
||||||
|
"github.com/lib/pq/scram"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Common error types
|
// Common error types
|
||||||
@@ -89,13 +92,25 @@ type Dialer interface {
|
|||||||
DialTimeout(network, address string, timeout time.Duration) (net.Conn, error)
|
DialTimeout(network, address string, timeout time.Duration) (net.Conn, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type defaultDialer struct{}
|
// DialerContext is the context-aware dialer interface.
|
||||||
|
type DialerContext interface {
|
||||||
func (d defaultDialer) Dial(ntw, addr string) (net.Conn, error) {
|
DialContext(ctx context.Context, network, address string) (net.Conn, error)
|
||||||
return net.Dial(ntw, addr)
|
|
||||||
}
|
}
|
||||||
func (d defaultDialer) DialTimeout(ntw, addr string, timeout time.Duration) (net.Conn, error) {
|
|
||||||
return net.DialTimeout(ntw, addr, timeout)
|
type defaultDialer struct {
|
||||||
|
d net.Dialer
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d defaultDialer) Dial(network, address string) (net.Conn, error) {
|
||||||
|
return d.d.Dial(network, address)
|
||||||
|
}
|
||||||
|
func (d defaultDialer) DialTimeout(network, address string, timeout time.Duration) (net.Conn, error) {
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), timeout)
|
||||||
|
defer cancel()
|
||||||
|
return d.DialContext(ctx, network, address)
|
||||||
|
}
|
||||||
|
func (d defaultDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
|
||||||
|
return d.d.DialContext(ctx, network, address)
|
||||||
}
|
}
|
||||||
|
|
||||||
type conn struct {
|
type conn struct {
|
||||||
@@ -244,90 +259,35 @@ func (cn *conn) writeBuf(b byte) *writeBuf {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open opens a new connection to the database. name is a connection string.
|
// Open opens a new connection to the database. dsn is a connection string.
|
||||||
// Most users should only use it through database/sql package from the standard
|
// Most users should only use it through database/sql package from the standard
|
||||||
// library.
|
// library.
|
||||||
func Open(name string) (_ driver.Conn, err error) {
|
func Open(dsn string) (_ driver.Conn, err error) {
|
||||||
return DialOpen(defaultDialer{}, name)
|
return DialOpen(defaultDialer{}, dsn)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DialOpen opens a new connection to the database using a dialer.
|
// DialOpen opens a new connection to the database using a dialer.
|
||||||
func DialOpen(d Dialer, name string) (_ driver.Conn, err error) {
|
func DialOpen(d Dialer, dsn string) (_ driver.Conn, err error) {
|
||||||
|
c, err := NewConnector(dsn)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
c.dialer = d
|
||||||
|
return c.open(context.Background())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Connector) open(ctx context.Context) (cn *conn, err error) {
|
||||||
// Handle any panics during connection initialization. Note that we
|
// Handle any panics during connection initialization. Note that we
|
||||||
// specifically do *not* want to use errRecover(), as that would turn any
|
// specifically do *not* want to use errRecover(), as that would turn any
|
||||||
// connection errors into ErrBadConns, hiding the real error message from
|
// connection errors into ErrBadConns, hiding the real error message from
|
||||||
// the user.
|
// the user.
|
||||||
defer errRecoverNoErrBadConn(&err)
|
defer errRecoverNoErrBadConn(&err)
|
||||||
|
|
||||||
o := make(values)
|
o := c.opts
|
||||||
|
|
||||||
// A number of defaults are applied here, in this order:
|
cn = &conn{
|
||||||
//
|
|
||||||
// * Very low precedence defaults applied in every situation
|
|
||||||
// * Environment variables
|
|
||||||
// * Explicitly passed connection information
|
|
||||||
o["host"] = "localhost"
|
|
||||||
o["port"] = "5432"
|
|
||||||
// N.B.: Extra float digits should be set to 3, but that breaks
|
|
||||||
// Postgres 8.4 and older, where the max is 2.
|
|
||||||
o["extra_float_digits"] = "2"
|
|
||||||
for k, v := range parseEnviron(os.Environ()) {
|
|
||||||
o[k] = v
|
|
||||||
}
|
|
||||||
|
|
||||||
if strings.HasPrefix(name, "postgres://") || strings.HasPrefix(name, "postgresql://") {
|
|
||||||
name, err = ParseURL(name)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := parseOpts(name, o); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use the "fallback" application name if necessary
|
|
||||||
if fallback, ok := o["fallback_application_name"]; ok {
|
|
||||||
if _, ok := o["application_name"]; !ok {
|
|
||||||
o["application_name"] = fallback
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// We can't work with any client_encoding other than UTF-8 currently.
|
|
||||||
// However, we have historically allowed the user to set it to UTF-8
|
|
||||||
// explicitly, and there's no reason to break such programs, so allow that.
|
|
||||||
// Note that the "options" setting could also set client_encoding, but
|
|
||||||
// parsing its value is not worth it. Instead, we always explicitly send
|
|
||||||
// client_encoding as a separate run-time parameter, which should override
|
|
||||||
// anything set in options.
|
|
||||||
if enc, ok := o["client_encoding"]; ok && !isUTF8(enc) {
|
|
||||||
return nil, errors.New("client_encoding must be absent or 'UTF8'")
|
|
||||||
}
|
|
||||||
o["client_encoding"] = "UTF8"
|
|
||||||
// DateStyle needs a similar treatment.
|
|
||||||
if datestyle, ok := o["datestyle"]; ok {
|
|
||||||
if datestyle != "ISO, MDY" {
|
|
||||||
panic(fmt.Sprintf("setting datestyle must be absent or %v; got %v",
|
|
||||||
"ISO, MDY", datestyle))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
o["datestyle"] = "ISO, MDY"
|
|
||||||
}
|
|
||||||
|
|
||||||
// If a user is not provided by any other means, the last
|
|
||||||
// resort is to use the current operating system provided user
|
|
||||||
// name.
|
|
||||||
if _, ok := o["user"]; !ok {
|
|
||||||
u, err := userCurrent()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
o["user"] = u
|
|
||||||
}
|
|
||||||
|
|
||||||
cn := &conn{
|
|
||||||
opts: o,
|
opts: o,
|
||||||
dialer: d,
|
dialer: c.dialer,
|
||||||
}
|
}
|
||||||
err = cn.handleDriverSettings(o)
|
err = cn.handleDriverSettings(o)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -335,13 +295,16 @@ func DialOpen(d Dialer, name string) (_ driver.Conn, err error) {
|
|||||||
}
|
}
|
||||||
cn.handlePgpass(o)
|
cn.handlePgpass(o)
|
||||||
|
|
||||||
cn.c, err = dial(d, o)
|
cn.c, err = dial(ctx, c.dialer, o)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = cn.ssl(o)
|
err = cn.ssl(o)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if cn.c != nil {
|
||||||
|
cn.c.Close()
|
||||||
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,10 +327,10 @@ func DialOpen(d Dialer, name string) (_ driver.Conn, err error) {
|
|||||||
return cn, err
|
return cn, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func dial(d Dialer, o values) (net.Conn, error) {
|
func dial(ctx context.Context, d Dialer, o values) (net.Conn, error) {
|
||||||
ntw, addr := network(o)
|
network, address := network(o)
|
||||||
// SSL is not necessary or supported over UNIX domain sockets
|
// SSL is not necessary or supported over UNIX domain sockets
|
||||||
if ntw == "unix" {
|
if network == "unix" {
|
||||||
o["sslmode"] = "disable"
|
o["sslmode"] = "disable"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -378,19 +341,30 @@ func dial(d Dialer, o values) (net.Conn, error) {
|
|||||||
return nil, fmt.Errorf("invalid value for parameter connect_timeout: %s", err)
|
return nil, fmt.Errorf("invalid value for parameter connect_timeout: %s", err)
|
||||||
}
|
}
|
||||||
duration := time.Duration(seconds) * time.Second
|
duration := time.Duration(seconds) * time.Second
|
||||||
|
|
||||||
// connect_timeout should apply to the entire connection establishment
|
// connect_timeout should apply to the entire connection establishment
|
||||||
// procedure, so we both use a timeout for the TCP connection
|
// procedure, so we both use a timeout for the TCP connection
|
||||||
// establishment and set a deadline for doing the initial handshake.
|
// establishment and set a deadline for doing the initial handshake.
|
||||||
// The deadline is then reset after startup() is done.
|
// The deadline is then reset after startup() is done.
|
||||||
deadline := time.Now().Add(duration)
|
deadline := time.Now().Add(duration)
|
||||||
conn, err := d.DialTimeout(ntw, addr, duration)
|
var conn net.Conn
|
||||||
|
if dctx, ok := d.(DialerContext); ok {
|
||||||
|
ctx, cancel := context.WithTimeout(ctx, duration)
|
||||||
|
defer cancel()
|
||||||
|
conn, err = dctx.DialContext(ctx, network, address)
|
||||||
|
} else {
|
||||||
|
conn, err = d.DialTimeout(network, address, duration)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
err = conn.SetDeadline(deadline)
|
err = conn.SetDeadline(deadline)
|
||||||
return conn, err
|
return conn, err
|
||||||
}
|
}
|
||||||
return d.Dial(ntw, addr)
|
if dctx, ok := d.(DialerContext); ok {
|
||||||
|
return dctx.DialContext(ctx, network, address)
|
||||||
|
}
|
||||||
|
return d.Dial(network, address)
|
||||||
}
|
}
|
||||||
|
|
||||||
func network(o values) (string, string) {
|
func network(o values) (string, string) {
|
||||||
@@ -576,7 +550,7 @@ func (cn *conn) Commit() (err error) {
|
|||||||
// would get the same behaviour if you issued a COMMIT in a failed
|
// would get the same behaviour if you issued a COMMIT in a failed
|
||||||
// transaction, so it's also the least surprising thing to do here.
|
// transaction, so it's also the least surprising thing to do here.
|
||||||
if cn.txnStatus == txnStatusInFailedTransaction {
|
if cn.txnStatus == txnStatusInFailedTransaction {
|
||||||
if err := cn.Rollback(); err != nil {
|
if err := cn.rollback(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return ErrInFailedTransaction
|
return ErrInFailedTransaction
|
||||||
@@ -603,7 +577,10 @@ func (cn *conn) Rollback() (err error) {
|
|||||||
return driver.ErrBadConn
|
return driver.ErrBadConn
|
||||||
}
|
}
|
||||||
defer cn.errRecover(&err)
|
defer cn.errRecover(&err)
|
||||||
|
return cn.rollback()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cn *conn) rollback() (err error) {
|
||||||
cn.checkIsInTransaction(true)
|
cn.checkIsInTransaction(true)
|
||||||
_, commandTag, err := cn.simpleExec("ROLLBACK")
|
_, commandTag, err := cn.simpleExec("ROLLBACK")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -704,7 +681,7 @@ func (cn *conn) simpleQuery(q string) (res *rows, err error) {
|
|||||||
// res might be non-nil here if we received a previous
|
// res might be non-nil here if we received a previous
|
||||||
// CommandComplete, but that's fine; just overwrite it
|
// CommandComplete, but that's fine; just overwrite it
|
||||||
res = &rows{cn: cn}
|
res = &rows{cn: cn}
|
||||||
res.colNames, res.colFmts, res.colTyps = parsePortalRowDescribe(r)
|
res.rowsHeader = parsePortalRowDescribe(r)
|
||||||
|
|
||||||
// To work around a bug in QueryRow in Go 1.2 and earlier, wait
|
// To work around a bug in QueryRow in Go 1.2 and earlier, wait
|
||||||
// until the first DataRow has been received.
|
// until the first DataRow has been received.
|
||||||
@@ -861,17 +838,15 @@ func (cn *conn) query(query string, args []driver.Value) (_ *rows, err error) {
|
|||||||
cn.readParseResponse()
|
cn.readParseResponse()
|
||||||
cn.readBindResponse()
|
cn.readBindResponse()
|
||||||
rows := &rows{cn: cn}
|
rows := &rows{cn: cn}
|
||||||
rows.colNames, rows.colFmts, rows.colTyps = cn.readPortalDescribeResponse()
|
rows.rowsHeader = cn.readPortalDescribeResponse()
|
||||||
cn.postExecuteWorkaround()
|
cn.postExecuteWorkaround()
|
||||||
return rows, nil
|
return rows, nil
|
||||||
}
|
}
|
||||||
st := cn.prepareTo(query, "")
|
st := cn.prepareTo(query, "")
|
||||||
st.exec(args)
|
st.exec(args)
|
||||||
return &rows{
|
return &rows{
|
||||||
cn: cn,
|
cn: cn,
|
||||||
colNames: st.colNames,
|
rowsHeader: st.rowsHeader,
|
||||||
colTyps: st.colTyps,
|
|
||||||
colFmts: st.colFmts,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -992,7 +967,6 @@ func (cn *conn) recv() (t byte, r *readBuf) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch t {
|
switch t {
|
||||||
case 'E':
|
case 'E':
|
||||||
panic(parseError(r))
|
panic(parseError(r))
|
||||||
@@ -1163,6 +1137,55 @@ func (cn *conn) auth(r *readBuf, o values) {
|
|||||||
if r.int32() != 0 {
|
if r.int32() != 0 {
|
||||||
errorf("unexpected authentication response: %q", t)
|
errorf("unexpected authentication response: %q", t)
|
||||||
}
|
}
|
||||||
|
case 10:
|
||||||
|
sc := scram.NewClient(sha256.New, o["user"], o["password"])
|
||||||
|
sc.Step(nil)
|
||||||
|
if sc.Err() != nil {
|
||||||
|
errorf("SCRAM-SHA-256 error: %s", sc.Err().Error())
|
||||||
|
}
|
||||||
|
scOut := sc.Out()
|
||||||
|
|
||||||
|
w := cn.writeBuf('p')
|
||||||
|
w.string("SCRAM-SHA-256")
|
||||||
|
w.int32(len(scOut))
|
||||||
|
w.bytes(scOut)
|
||||||
|
cn.send(w)
|
||||||
|
|
||||||
|
t, r := cn.recv()
|
||||||
|
if t != 'R' {
|
||||||
|
errorf("unexpected password response: %q", t)
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.int32() != 11 {
|
||||||
|
errorf("unexpected authentication response: %q", t)
|
||||||
|
}
|
||||||
|
|
||||||
|
nextStep := r.next(len(*r))
|
||||||
|
sc.Step(nextStep)
|
||||||
|
if sc.Err() != nil {
|
||||||
|
errorf("SCRAM-SHA-256 error: %s", sc.Err().Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
scOut = sc.Out()
|
||||||
|
w = cn.writeBuf('p')
|
||||||
|
w.bytes(scOut)
|
||||||
|
cn.send(w)
|
||||||
|
|
||||||
|
t, r = cn.recv()
|
||||||
|
if t != 'R' {
|
||||||
|
errorf("unexpected password response: %q", t)
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.int32() != 12 {
|
||||||
|
errorf("unexpected authentication response: %q", t)
|
||||||
|
}
|
||||||
|
|
||||||
|
nextStep = r.next(len(*r))
|
||||||
|
sc.Step(nextStep)
|
||||||
|
if sc.Err() != nil {
|
||||||
|
errorf("SCRAM-SHA-256 error: %s", sc.Err().Error())
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
errorf("unknown authentication response: %d", code)
|
errorf("unknown authentication response: %d", code)
|
||||||
}
|
}
|
||||||
@@ -1180,12 +1203,10 @@ var colFmtDataAllBinary = []byte{0, 1, 0, 1}
|
|||||||
var colFmtDataAllText = []byte{0, 0}
|
var colFmtDataAllText = []byte{0, 0}
|
||||||
|
|
||||||
type stmt struct {
|
type stmt struct {
|
||||||
cn *conn
|
cn *conn
|
||||||
name string
|
name string
|
||||||
colNames []string
|
rowsHeader
|
||||||
colFmts []format
|
|
||||||
colFmtData []byte
|
colFmtData []byte
|
||||||
colTyps []fieldDesc
|
|
||||||
paramTyps []oid.Oid
|
paramTyps []oid.Oid
|
||||||
closed bool
|
closed bool
|
||||||
}
|
}
|
||||||
@@ -1231,10 +1252,8 @@ func (st *stmt) Query(v []driver.Value) (r driver.Rows, err error) {
|
|||||||
|
|
||||||
st.exec(v)
|
st.exec(v)
|
||||||
return &rows{
|
return &rows{
|
||||||
cn: st.cn,
|
cn: st.cn,
|
||||||
colNames: st.colNames,
|
rowsHeader: st.rowsHeader,
|
||||||
colTyps: st.colTyps,
|
|
||||||
colFmts: st.colFmts,
|
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1344,16 +1363,22 @@ func (cn *conn) parseComplete(commandTag string) (driver.Result, string) {
|
|||||||
return driver.RowsAffected(n), commandTag
|
return driver.RowsAffected(n), commandTag
|
||||||
}
|
}
|
||||||
|
|
||||||
type rows struct {
|
type rowsHeader struct {
|
||||||
cn *conn
|
|
||||||
finish func()
|
|
||||||
colNames []string
|
colNames []string
|
||||||
colTyps []fieldDesc
|
colTyps []fieldDesc
|
||||||
colFmts []format
|
colFmts []format
|
||||||
done bool
|
}
|
||||||
rb readBuf
|
|
||||||
result driver.Result
|
type rows struct {
|
||||||
tag string
|
cn *conn
|
||||||
|
finish func()
|
||||||
|
rowsHeader
|
||||||
|
done bool
|
||||||
|
rb readBuf
|
||||||
|
result driver.Result
|
||||||
|
tag string
|
||||||
|
|
||||||
|
next *rowsHeader
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rs *rows) Close() error {
|
func (rs *rows) Close() error {
|
||||||
@@ -1440,7 +1465,8 @@ func (rs *rows) Next(dest []driver.Value) (err error) {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
case 'T':
|
case 'T':
|
||||||
rs.colNames, rs.colFmts, rs.colTyps = parsePortalRowDescribe(&rs.rb)
|
next := parsePortalRowDescribe(&rs.rb)
|
||||||
|
rs.next = &next
|
||||||
return io.EOF
|
return io.EOF
|
||||||
default:
|
default:
|
||||||
errorf("unexpected message after execute: %q", t)
|
errorf("unexpected message after execute: %q", t)
|
||||||
@@ -1449,10 +1475,16 @@ func (rs *rows) Next(dest []driver.Value) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (rs *rows) HasNextResultSet() bool {
|
func (rs *rows) HasNextResultSet() bool {
|
||||||
return !rs.done
|
hasNext := rs.next != nil && !rs.done
|
||||||
|
return hasNext
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rs *rows) NextResultSet() error {
|
func (rs *rows) NextResultSet() error {
|
||||||
|
if rs.next == nil {
|
||||||
|
return io.EOF
|
||||||
|
}
|
||||||
|
rs.rowsHeader = *rs.next
|
||||||
|
rs.next = nil
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1475,6 +1507,39 @@ func QuoteIdentifier(name string) string {
|
|||||||
return `"` + strings.Replace(name, `"`, `""`, -1) + `"`
|
return `"` + strings.Replace(name, `"`, `""`, -1) + `"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// QuoteLiteral quotes a 'literal' (e.g. a parameter, often used to pass literal
|
||||||
|
// to DDL and other statements that do not accept parameters) to be used as part
|
||||||
|
// of an SQL statement. For example:
|
||||||
|
//
|
||||||
|
// exp_date := pq.QuoteLiteral("2023-01-05 15:00:00Z")
|
||||||
|
// err := db.Exec(fmt.Sprintf("CREATE ROLE my_user VALID UNTIL %s", exp_date))
|
||||||
|
//
|
||||||
|
// Any single quotes in name will be escaped. Any backslashes (i.e. "\") will be
|
||||||
|
// replaced by two backslashes (i.e. "\\") and the C-style escape identifier
|
||||||
|
// that PostgreSQL provides ('E') will be prepended to the string.
|
||||||
|
func QuoteLiteral(literal string) string {
|
||||||
|
// This follows the PostgreSQL internal algorithm for handling quoted literals
|
||||||
|
// from libpq, which can be found in the "PQEscapeStringInternal" function,
|
||||||
|
// which is found in the libpq/fe-exec.c source file:
|
||||||
|
// https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/interfaces/libpq/fe-exec.c
|
||||||
|
//
|
||||||
|
// substitute any single-quotes (') with two single-quotes ('')
|
||||||
|
literal = strings.Replace(literal, `'`, `''`, -1)
|
||||||
|
// determine if the string has any backslashes (\) in it.
|
||||||
|
// if it does, replace any backslashes (\) with two backslashes (\\)
|
||||||
|
// then, we need to wrap the entire string with a PostgreSQL
|
||||||
|
// C-style escape. Per how "PQEscapeStringInternal" handles this case, we
|
||||||
|
// also add a space before the "E"
|
||||||
|
if strings.Contains(literal, `\`) {
|
||||||
|
literal = strings.Replace(literal, `\`, `\\`, -1)
|
||||||
|
literal = ` E'` + literal + `'`
|
||||||
|
} else {
|
||||||
|
// otherwise, we can just wrap the literal with a pair of single quotes
|
||||||
|
literal = `'` + literal + `'`
|
||||||
|
}
|
||||||
|
return literal
|
||||||
|
}
|
||||||
|
|
||||||
func md5s(s string) string {
|
func md5s(s string) string {
|
||||||
h := md5.New()
|
h := md5.New()
|
||||||
h.Write([]byte(s))
|
h.Write([]byte(s))
|
||||||
@@ -1630,13 +1695,13 @@ func (cn *conn) readStatementDescribeResponse() (paramTyps []oid.Oid, colNames [
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cn *conn) readPortalDescribeResponse() (colNames []string, colFmts []format, colTyps []fieldDesc) {
|
func (cn *conn) readPortalDescribeResponse() rowsHeader {
|
||||||
t, r := cn.recv1()
|
t, r := cn.recv1()
|
||||||
switch t {
|
switch t {
|
||||||
case 'T':
|
case 'T':
|
||||||
return parsePortalRowDescribe(r)
|
return parsePortalRowDescribe(r)
|
||||||
case 'n':
|
case 'n':
|
||||||
return nil, nil, nil
|
return rowsHeader{}
|
||||||
case 'E':
|
case 'E':
|
||||||
err := parseError(r)
|
err := parseError(r)
|
||||||
cn.readReadyForQuery()
|
cn.readReadyForQuery()
|
||||||
@@ -1742,11 +1807,11 @@ func parseStatementRowDescribe(r *readBuf) (colNames []string, colTyps []fieldDe
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func parsePortalRowDescribe(r *readBuf) (colNames []string, colFmts []format, colTyps []fieldDesc) {
|
func parsePortalRowDescribe(r *readBuf) rowsHeader {
|
||||||
n := r.int16()
|
n := r.int16()
|
||||||
colNames = make([]string, n)
|
colNames := make([]string, n)
|
||||||
colFmts = make([]format, n)
|
colFmts := make([]format, n)
|
||||||
colTyps = make([]fieldDesc, n)
|
colTyps := make([]fieldDesc, n)
|
||||||
for i := range colNames {
|
for i := range colNames {
|
||||||
colNames[i] = r.string()
|
colNames[i] = r.string()
|
||||||
r.next(6)
|
r.next(6)
|
||||||
@@ -1755,7 +1820,11 @@ func parsePortalRowDescribe(r *readBuf) (colNames []string, colFmts []format, co
|
|||||||
colTyps[i].Mod = r.int32()
|
colTyps[i].Mod = r.int32()
|
||||||
colFmts[i] = format(r.int16())
|
colFmts[i] = format(r.int16())
|
||||||
}
|
}
|
||||||
return
|
return rowsHeader{
|
||||||
|
colNames: colNames,
|
||||||
|
colFmts: colFmts,
|
||||||
|
colTyps: colTyps,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseEnviron tries to mimic some of libpq's environment handling
|
// parseEnviron tries to mimic some of libpq's environment handling
|
||||||
|
|||||||
28
vendor/github.com/lib/pq/conn_go18.go
сгенерированный
поставляемый
28
vendor/github.com/lib/pq/conn_go18.go
сгенерированный
поставляемый
@@ -1,5 +1,3 @@
|
|||||||
// +build go1.8
|
|
||||||
|
|
||||||
package pq
|
package pq
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@@ -9,6 +7,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Implement the "QueryerContext" interface
|
// Implement the "QueryerContext" interface
|
||||||
@@ -76,13 +75,32 @@ func (cn *conn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx,
|
|||||||
return tx, nil
|
return tx, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cn *conn) Ping(ctx context.Context) error {
|
||||||
|
if finish := cn.watchCancel(ctx); finish != nil {
|
||||||
|
defer finish()
|
||||||
|
}
|
||||||
|
rows, err := cn.simpleQuery("SELECT 'lib/pq ping test';")
|
||||||
|
if err != nil {
|
||||||
|
return driver.ErrBadConn // https://golang.org/pkg/database/sql/driver/#Pinger
|
||||||
|
}
|
||||||
|
rows.Close()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (cn *conn) watchCancel(ctx context.Context) func() {
|
func (cn *conn) watchCancel(ctx context.Context) func() {
|
||||||
if done := ctx.Done(); done != nil {
|
if done := ctx.Done(); done != nil {
|
||||||
finished := make(chan struct{})
|
finished := make(chan struct{})
|
||||||
go func() {
|
go func() {
|
||||||
select {
|
select {
|
||||||
case <-done:
|
case <-done:
|
||||||
_ = cn.cancel()
|
// At this point the function level context is canceled,
|
||||||
|
// so it must not be used for the additional network
|
||||||
|
// request to cancel the query.
|
||||||
|
// Create a new context to pass into the dial.
|
||||||
|
ctxCancel, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
_ = cn.cancel(ctxCancel)
|
||||||
finished <- struct{}{}
|
finished <- struct{}{}
|
||||||
case <-finished:
|
case <-finished:
|
||||||
}
|
}
|
||||||
@@ -97,8 +115,8 @@ func (cn *conn) watchCancel(ctx context.Context) func() {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cn *conn) cancel() error {
|
func (cn *conn) cancel(ctx context.Context) error {
|
||||||
c, err := dial(cn.dialer, cn.opts)
|
c, err := dial(ctx, cn.dialer, cn.opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
91
vendor/github.com/lib/pq/connector.go
сгенерированный
поставляемый
91
vendor/github.com/lib/pq/connector.go
сгенерированный
поставляемый
@@ -1,10 +1,12 @@
|
|||||||
// +build go1.10
|
|
||||||
|
|
||||||
package pq
|
package pq
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"database/sql/driver"
|
"database/sql/driver"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Connector represents a fixed configuration for the pq driver with a given
|
// Connector represents a fixed configuration for the pq driver with a given
|
||||||
@@ -14,30 +16,95 @@ import (
|
|||||||
//
|
//
|
||||||
// See https://golang.org/pkg/database/sql/driver/#Connector.
|
// See https://golang.org/pkg/database/sql/driver/#Connector.
|
||||||
// See https://golang.org/pkg/database/sql/#OpenDB.
|
// See https://golang.org/pkg/database/sql/#OpenDB.
|
||||||
type connector struct {
|
type Connector struct {
|
||||||
name string
|
opts values
|
||||||
|
dialer Dialer
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connect returns a connection to the database using the fixed configuration
|
// Connect returns a connection to the database using the fixed configuration
|
||||||
// of this Connector. Context is not used.
|
// of this Connector. Context is not used.
|
||||||
func (c *connector) Connect(_ context.Context) (driver.Conn, error) {
|
func (c *Connector) Connect(ctx context.Context) (driver.Conn, error) {
|
||||||
return (&Driver{}).Open(c.name)
|
return c.open(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Driver returnst the underlying driver of this Connector.
|
// Driver returnst the underlying driver of this Connector.
|
||||||
func (c *connector) Driver() driver.Driver {
|
func (c *Connector) Driver() driver.Driver {
|
||||||
return &Driver{}
|
return &Driver{}
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ driver.Connector = &connector{}
|
|
||||||
|
|
||||||
// NewConnector returns a connector for the pq driver in a fixed configuration
|
// NewConnector returns a connector for the pq driver in a fixed configuration
|
||||||
// with the given name. The returned connector can be used to create any number
|
// with the given dsn. The returned connector can be used to create any number
|
||||||
// of equivalent Conn's. The returned connector is intended to be used with
|
// of equivalent Conn's. The returned connector is intended to be used with
|
||||||
// database/sql.OpenDB.
|
// database/sql.OpenDB.
|
||||||
//
|
//
|
||||||
// See https://golang.org/pkg/database/sql/driver/#Connector.
|
// See https://golang.org/pkg/database/sql/driver/#Connector.
|
||||||
// See https://golang.org/pkg/database/sql/#OpenDB.
|
// See https://golang.org/pkg/database/sql/#OpenDB.
|
||||||
func NewConnector(name string) (driver.Connector, error) {
|
func NewConnector(dsn string) (*Connector, error) {
|
||||||
return &connector{name: name}, nil
|
var err error
|
||||||
|
o := make(values)
|
||||||
|
|
||||||
|
// A number of defaults are applied here, in this order:
|
||||||
|
//
|
||||||
|
// * Very low precedence defaults applied in every situation
|
||||||
|
// * Environment variables
|
||||||
|
// * Explicitly passed connection information
|
||||||
|
o["host"] = "localhost"
|
||||||
|
o["port"] = "5432"
|
||||||
|
// N.B.: Extra float digits should be set to 3, but that breaks
|
||||||
|
// Postgres 8.4 and older, where the max is 2.
|
||||||
|
o["extra_float_digits"] = "2"
|
||||||
|
for k, v := range parseEnviron(os.Environ()) {
|
||||||
|
o[k] = v
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.HasPrefix(dsn, "postgres://") || strings.HasPrefix(dsn, "postgresql://") {
|
||||||
|
dsn, err = ParseURL(dsn)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := parseOpts(dsn, o); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use the "fallback" application name if necessary
|
||||||
|
if fallback, ok := o["fallback_application_name"]; ok {
|
||||||
|
if _, ok := o["application_name"]; !ok {
|
||||||
|
o["application_name"] = fallback
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// We can't work with any client_encoding other than UTF-8 currently.
|
||||||
|
// However, we have historically allowed the user to set it to UTF-8
|
||||||
|
// explicitly, and there's no reason to break such programs, so allow that.
|
||||||
|
// Note that the "options" setting could also set client_encoding, but
|
||||||
|
// parsing its value is not worth it. Instead, we always explicitly send
|
||||||
|
// client_encoding as a separate run-time parameter, which should override
|
||||||
|
// anything set in options.
|
||||||
|
if enc, ok := o["client_encoding"]; ok && !isUTF8(enc) {
|
||||||
|
return nil, errors.New("client_encoding must be absent or 'UTF8'")
|
||||||
|
}
|
||||||
|
o["client_encoding"] = "UTF8"
|
||||||
|
// DateStyle needs a similar treatment.
|
||||||
|
if datestyle, ok := o["datestyle"]; ok {
|
||||||
|
if datestyle != "ISO, MDY" {
|
||||||
|
return nil, fmt.Errorf("setting datestyle must be absent or %v; got %v", "ISO, MDY", datestyle)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
o["datestyle"] = "ISO, MDY"
|
||||||
|
}
|
||||||
|
|
||||||
|
// If a user is not provided by any other means, the last
|
||||||
|
// resort is to use the current operating system provided user
|
||||||
|
// name.
|
||||||
|
if _, ok := o["user"]; !ok {
|
||||||
|
u, err := userCurrent()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
o["user"] = u
|
||||||
|
}
|
||||||
|
|
||||||
|
return &Connector{opts: o, dialer: defaultDialer{}}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
2
vendor/github.com/lib/pq/doc.go
сгенерированный
поставляемый
2
vendor/github.com/lib/pq/doc.go
сгенерированный
поставляемый
@@ -239,7 +239,7 @@ for more information). Note that the channel name will be truncated to 63
|
|||||||
bytes by the PostgreSQL server.
|
bytes by the PostgreSQL server.
|
||||||
|
|
||||||
You can find a complete, working example of Listener usage at
|
You can find a complete, working example of Listener usage at
|
||||||
http://godoc.org/github.com/lib/pq/example/listen.
|
https://godoc.org/github.com/lib/pq/example/listen.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
package pq
|
package pq
|
||||||
|
|||||||
9
vendor/github.com/lib/pq/encode.go
сгенерированный
поставляемый
9
vendor/github.com/lib/pq/encode.go
сгенерированный
поставляемый
@@ -117,11 +117,10 @@ func textDecode(parameterStatus *parameterStatus, s []byte, typ oid.Oid) interfa
|
|||||||
}
|
}
|
||||||
return i
|
return i
|
||||||
case oid.T_float4, oid.T_float8:
|
case oid.T_float4, oid.T_float8:
|
||||||
bits := 64
|
// We always use 64 bit parsing, regardless of whether the input text is for
|
||||||
if typ == oid.T_float4 {
|
// a float4 or float8, because clients expect float64s for all float datatypes
|
||||||
bits = 32
|
// and returning a 32-bit parsed float64 produces lossy results.
|
||||||
}
|
f, err := strconv.ParseFloat(string(s), 64)
|
||||||
f, err := strconv.ParseFloat(string(s), bits)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errorf("%s", err)
|
errorf("%s", err)
|
||||||
}
|
}
|
||||||
|
|||||||
10
vendor/github.com/lib/pq/error.go
сгенерированный
поставляемый
10
vendor/github.com/lib/pq/error.go
сгенерированный
поставляемый
@@ -478,13 +478,13 @@ func errRecoverNoErrBadConn(err *error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *conn) errRecover(err *error) {
|
func (cn *conn) errRecover(err *error) {
|
||||||
e := recover()
|
e := recover()
|
||||||
switch v := e.(type) {
|
switch v := e.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
// Do nothing
|
// Do nothing
|
||||||
case runtime.Error:
|
case runtime.Error:
|
||||||
c.bad = true
|
cn.bad = true
|
||||||
panic(v)
|
panic(v)
|
||||||
case *Error:
|
case *Error:
|
||||||
if v.Fatal() {
|
if v.Fatal() {
|
||||||
@@ -493,7 +493,7 @@ func (c *conn) errRecover(err *error) {
|
|||||||
*err = v
|
*err = v
|
||||||
}
|
}
|
||||||
case *net.OpError:
|
case *net.OpError:
|
||||||
c.bad = true
|
cn.bad = true
|
||||||
*err = v
|
*err = v
|
||||||
case error:
|
case error:
|
||||||
if v == io.EOF || v.(error).Error() == "remote error: handshake failure" {
|
if v == io.EOF || v.(error).Error() == "remote error: handshake failure" {
|
||||||
@@ -503,13 +503,13 @@ func (c *conn) errRecover(err *error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
c.bad = true
|
cn.bad = true
|
||||||
panic(fmt.Sprintf("unknown error: %#v", e))
|
panic(fmt.Sprintf("unknown error: %#v", e))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Any time we return ErrBadConn, we need to remember it since *Tx doesn't
|
// Any time we return ErrBadConn, we need to remember it since *Tx doesn't
|
||||||
// mark the connection bad in database/sql.
|
// mark the connection bad in database/sql.
|
||||||
if *err == driver.ErrBadConn {
|
if *err == driver.ErrBadConn {
|
||||||
c.bad = true
|
cn.bad = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
264
vendor/github.com/lib/pq/scram/scram.go
сгенерированный
поставляемый
Обычный файл
264
vendor/github.com/lib/pq/scram/scram.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,264 @@
|
|||||||
|
// Copyright (c) 2014 - Gustavo Niemeyer <gustavo@niemeyer.net>
|
||||||
|
//
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are met:
|
||||||
|
//
|
||||||
|
// 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
// list of conditions and the following disclaimer.
|
||||||
|
// 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
// this list of conditions and the following disclaimer in the documentation
|
||||||
|
// and/or other materials provided with the distribution.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// Package scram implements a SCRAM-{SHA-1,etc} client per RFC5802.
|
||||||
|
//
|
||||||
|
// http://tools.ietf.org/html/rfc5802
|
||||||
|
//
|
||||||
|
package scram
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"crypto/hmac"
|
||||||
|
"crypto/rand"
|
||||||
|
"encoding/base64"
|
||||||
|
"fmt"
|
||||||
|
"hash"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Client implements a SCRAM-* client (SCRAM-SHA-1, SCRAM-SHA-256, etc).
|
||||||
|
//
|
||||||
|
// A Client may be used within a SASL conversation with logic resembling:
|
||||||
|
//
|
||||||
|
// var in []byte
|
||||||
|
// var client = scram.NewClient(sha1.New, user, pass)
|
||||||
|
// for client.Step(in) {
|
||||||
|
// out := client.Out()
|
||||||
|
// // send out to server
|
||||||
|
// in := serverOut
|
||||||
|
// }
|
||||||
|
// if client.Err() != nil {
|
||||||
|
// // auth failed
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
type Client struct {
|
||||||
|
newHash func() hash.Hash
|
||||||
|
|
||||||
|
user string
|
||||||
|
pass string
|
||||||
|
step int
|
||||||
|
out bytes.Buffer
|
||||||
|
err error
|
||||||
|
|
||||||
|
clientNonce []byte
|
||||||
|
serverNonce []byte
|
||||||
|
saltedPass []byte
|
||||||
|
authMsg bytes.Buffer
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewClient returns a new SCRAM-* client with the provided hash algorithm.
|
||||||
|
//
|
||||||
|
// For SCRAM-SHA-256, for example, use:
|
||||||
|
//
|
||||||
|
// client := scram.NewClient(sha256.New, user, pass)
|
||||||
|
//
|
||||||
|
func NewClient(newHash func() hash.Hash, user, pass string) *Client {
|
||||||
|
c := &Client{
|
||||||
|
newHash: newHash,
|
||||||
|
user: user,
|
||||||
|
pass: pass,
|
||||||
|
}
|
||||||
|
c.out.Grow(256)
|
||||||
|
c.authMsg.Grow(256)
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
// Out returns the data to be sent to the server in the current step.
|
||||||
|
func (c *Client) Out() []byte {
|
||||||
|
if c.out.Len() == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return c.out.Bytes()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Err returns the error that ocurred, or nil if there were no errors.
|
||||||
|
func (c *Client) Err() error {
|
||||||
|
return c.err
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetNonce sets the client nonce to the provided value.
|
||||||
|
// If not set, the nonce is generated automatically out of crypto/rand on the first step.
|
||||||
|
func (c *Client) SetNonce(nonce []byte) {
|
||||||
|
c.clientNonce = nonce
|
||||||
|
}
|
||||||
|
|
||||||
|
var escaper = strings.NewReplacer("=", "=3D", ",", "=2C")
|
||||||
|
|
||||||
|
// Step processes the incoming data from the server and makes the
|
||||||
|
// next round of data for the server available via Client.Out.
|
||||||
|
// Step returns false if there are no errors and more data is
|
||||||
|
// still expected.
|
||||||
|
func (c *Client) Step(in []byte) bool {
|
||||||
|
c.out.Reset()
|
||||||
|
if c.step > 2 || c.err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
c.step++
|
||||||
|
switch c.step {
|
||||||
|
case 1:
|
||||||
|
c.err = c.step1(in)
|
||||||
|
case 2:
|
||||||
|
c.err = c.step2(in)
|
||||||
|
case 3:
|
||||||
|
c.err = c.step3(in)
|
||||||
|
}
|
||||||
|
return c.step > 2 || c.err != nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) step1(in []byte) error {
|
||||||
|
if len(c.clientNonce) == 0 {
|
||||||
|
const nonceLen = 16
|
||||||
|
buf := make([]byte, nonceLen+b64.EncodedLen(nonceLen))
|
||||||
|
if _, err := rand.Read(buf[:nonceLen]); err != nil {
|
||||||
|
return fmt.Errorf("cannot read random SCRAM-SHA-256 nonce from operating system: %v", err)
|
||||||
|
}
|
||||||
|
c.clientNonce = buf[nonceLen:]
|
||||||
|
b64.Encode(c.clientNonce, buf[:nonceLen])
|
||||||
|
}
|
||||||
|
c.authMsg.WriteString("n=")
|
||||||
|
escaper.WriteString(&c.authMsg, c.user)
|
||||||
|
c.authMsg.WriteString(",r=")
|
||||||
|
c.authMsg.Write(c.clientNonce)
|
||||||
|
|
||||||
|
c.out.WriteString("n,,")
|
||||||
|
c.out.Write(c.authMsg.Bytes())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var b64 = base64.StdEncoding
|
||||||
|
|
||||||
|
func (c *Client) step2(in []byte) error {
|
||||||
|
c.authMsg.WriteByte(',')
|
||||||
|
c.authMsg.Write(in)
|
||||||
|
|
||||||
|
fields := bytes.Split(in, []byte(","))
|
||||||
|
if len(fields) != 3 {
|
||||||
|
return fmt.Errorf("expected 3 fields in first SCRAM-SHA-256 server message, got %d: %q", len(fields), in)
|
||||||
|
}
|
||||||
|
if !bytes.HasPrefix(fields[0], []byte("r=")) || len(fields[0]) < 2 {
|
||||||
|
return fmt.Errorf("server sent an invalid SCRAM-SHA-256 nonce: %q", fields[0])
|
||||||
|
}
|
||||||
|
if !bytes.HasPrefix(fields[1], []byte("s=")) || len(fields[1]) < 6 {
|
||||||
|
return fmt.Errorf("server sent an invalid SCRAM-SHA-256 salt: %q", fields[1])
|
||||||
|
}
|
||||||
|
if !bytes.HasPrefix(fields[2], []byte("i=")) || len(fields[2]) < 6 {
|
||||||
|
return fmt.Errorf("server sent an invalid SCRAM-SHA-256 iteration count: %q", fields[2])
|
||||||
|
}
|
||||||
|
|
||||||
|
c.serverNonce = fields[0][2:]
|
||||||
|
if !bytes.HasPrefix(c.serverNonce, c.clientNonce) {
|
||||||
|
return fmt.Errorf("server SCRAM-SHA-256 nonce is not prefixed by client nonce: got %q, want %q+\"...\"", c.serverNonce, c.clientNonce)
|
||||||
|
}
|
||||||
|
|
||||||
|
salt := make([]byte, b64.DecodedLen(len(fields[1][2:])))
|
||||||
|
n, err := b64.Decode(salt, fields[1][2:])
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot decode SCRAM-SHA-256 salt sent by server: %q", fields[1])
|
||||||
|
}
|
||||||
|
salt = salt[:n]
|
||||||
|
iterCount, err := strconv.Atoi(string(fields[2][2:]))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("server sent an invalid SCRAM-SHA-256 iteration count: %q", fields[2])
|
||||||
|
}
|
||||||
|
c.saltPassword(salt, iterCount)
|
||||||
|
|
||||||
|
c.authMsg.WriteString(",c=biws,r=")
|
||||||
|
c.authMsg.Write(c.serverNonce)
|
||||||
|
|
||||||
|
c.out.WriteString("c=biws,r=")
|
||||||
|
c.out.Write(c.serverNonce)
|
||||||
|
c.out.WriteString(",p=")
|
||||||
|
c.out.Write(c.clientProof())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) step3(in []byte) error {
|
||||||
|
var isv, ise bool
|
||||||
|
var fields = bytes.Split(in, []byte(","))
|
||||||
|
if len(fields) == 1 {
|
||||||
|
isv = bytes.HasPrefix(fields[0], []byte("v="))
|
||||||
|
ise = bytes.HasPrefix(fields[0], []byte("e="))
|
||||||
|
}
|
||||||
|
if ise {
|
||||||
|
return fmt.Errorf("SCRAM-SHA-256 authentication error: %s", fields[0][2:])
|
||||||
|
} else if !isv {
|
||||||
|
return fmt.Errorf("unsupported SCRAM-SHA-256 final message from server: %q", in)
|
||||||
|
}
|
||||||
|
if !bytes.Equal(c.serverSignature(), fields[0][2:]) {
|
||||||
|
return fmt.Errorf("cannot authenticate SCRAM-SHA-256 server signature: %q", fields[0][2:])
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) saltPassword(salt []byte, iterCount int) {
|
||||||
|
mac := hmac.New(c.newHash, []byte(c.pass))
|
||||||
|
mac.Write(salt)
|
||||||
|
mac.Write([]byte{0, 0, 0, 1})
|
||||||
|
ui := mac.Sum(nil)
|
||||||
|
hi := make([]byte, len(ui))
|
||||||
|
copy(hi, ui)
|
||||||
|
for i := 1; i < iterCount; i++ {
|
||||||
|
mac.Reset()
|
||||||
|
mac.Write(ui)
|
||||||
|
mac.Sum(ui[:0])
|
||||||
|
for j, b := range ui {
|
||||||
|
hi[j] ^= b
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c.saltedPass = hi
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) clientProof() []byte {
|
||||||
|
mac := hmac.New(c.newHash, c.saltedPass)
|
||||||
|
mac.Write([]byte("Client Key"))
|
||||||
|
clientKey := mac.Sum(nil)
|
||||||
|
hash := c.newHash()
|
||||||
|
hash.Write(clientKey)
|
||||||
|
storedKey := hash.Sum(nil)
|
||||||
|
mac = hmac.New(c.newHash, storedKey)
|
||||||
|
mac.Write(c.authMsg.Bytes())
|
||||||
|
clientProof := mac.Sum(nil)
|
||||||
|
for i, b := range clientKey {
|
||||||
|
clientProof[i] ^= b
|
||||||
|
}
|
||||||
|
clientProof64 := make([]byte, b64.EncodedLen(len(clientProof)))
|
||||||
|
b64.Encode(clientProof64, clientProof)
|
||||||
|
return clientProof64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) serverSignature() []byte {
|
||||||
|
mac := hmac.New(c.newHash, c.saltedPass)
|
||||||
|
mac.Write([]byte("Server Key"))
|
||||||
|
serverKey := mac.Sum(nil)
|
||||||
|
|
||||||
|
mac = hmac.New(c.newHash, serverKey)
|
||||||
|
mac.Write(c.authMsg.Bytes())
|
||||||
|
serverSignature := mac.Sum(nil)
|
||||||
|
|
||||||
|
encoded := make([]byte, b64.EncodedLen(len(serverSignature)))
|
||||||
|
b64.Encode(encoded, serverSignature)
|
||||||
|
return encoded
|
||||||
|
}
|
||||||
8
vendor/github.com/lib/pq/ssl.go
сгенерированный
поставляемый
8
vendor/github.com/lib/pq/ssl.go
сгенерированный
поставляемый
@@ -58,7 +58,13 @@ func ssl(o values) (func(net.Conn) (net.Conn, error), error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
sslRenegotiation(&tlsConf)
|
|
||||||
|
// Accept renegotiation requests initiated by the backend.
|
||||||
|
//
|
||||||
|
// Renegotiation was deprecated then removed from PostgreSQL 9.5, but
|
||||||
|
// the default configuration of older versions has it enabled. Redshift
|
||||||
|
// also initiates renegotiations and cannot be reconfigured.
|
||||||
|
tlsConf.Renegotiation = tls.RenegotiateFreelyAsClient
|
||||||
|
|
||||||
return func(conn net.Conn) (net.Conn, error) {
|
return func(conn net.Conn) (net.Conn, error) {
|
||||||
client := tls.Client(conn, &tlsConf)
|
client := tls.Client(conn, &tlsConf)
|
||||||
|
|||||||
14
vendor/github.com/lib/pq/ssl_go1.7.go
сгенерированный
поставляемый
14
vendor/github.com/lib/pq/ssl_go1.7.go
сгенерированный
поставляемый
@@ -1,14 +0,0 @@
|
|||||||
// +build go1.7
|
|
||||||
|
|
||||||
package pq
|
|
||||||
|
|
||||||
import "crypto/tls"
|
|
||||||
|
|
||||||
// Accept renegotiation requests initiated by the backend.
|
|
||||||
//
|
|
||||||
// Renegotiation was deprecated then removed from PostgreSQL 9.5, but
|
|
||||||
// the default configuration of older versions has it enabled. Redshift
|
|
||||||
// also initiates renegotiations and cannot be reconfigured.
|
|
||||||
func sslRenegotiation(conf *tls.Config) {
|
|
||||||
conf.Renegotiation = tls.RenegotiateFreelyAsClient
|
|
||||||
}
|
|
||||||
8
vendor/github.com/lib/pq/ssl_renegotiation.go
сгенерированный
поставляемый
8
vendor/github.com/lib/pq/ssl_renegotiation.go
сгенерированный
поставляемый
@@ -1,8 +0,0 @@
|
|||||||
// +build !go1.7
|
|
||||||
|
|
||||||
package pq
|
|
||||||
|
|
||||||
import "crypto/tls"
|
|
||||||
|
|
||||||
// Renegotiation is not supported by crypto/tls until Go 1.7.
|
|
||||||
func sslRenegotiation(*tls.Config) {}
|
|
||||||
2
vendor/github.com/magiconair/properties/.travis.yml
сгенерированный
поставляемый
2
vendor/github.com/magiconair/properties/.travis.yml
сгенерированный
поставляемый
@@ -7,4 +7,6 @@ go:
|
|||||||
- 1.8.x
|
- 1.8.x
|
||||||
- 1.9.x
|
- 1.9.x
|
||||||
- "1.10.x"
|
- "1.10.x"
|
||||||
|
- "1.11.x"
|
||||||
|
- "1.12.x"
|
||||||
- tip
|
- tip
|
||||||
|
|||||||
8
vendor/github.com/magiconair/properties/CHANGELOG.md
сгенерированный
поставляемый
8
vendor/github.com/magiconair/properties/CHANGELOG.md
сгенерированный
поставляемый
@@ -1,5 +1,13 @@
|
|||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
|
### [1.8.1](https://github.com/magiconair/properties/tree/v1.8.1) - 10 May 2019
|
||||||
|
|
||||||
|
* [PR #26](https://github.com/magiconair/properties/pull/35): Close body always after request
|
||||||
|
|
||||||
|
This patch ensures that in `LoadURL` the response body is always closed.
|
||||||
|
|
||||||
|
Thanks to [@liubog2008](https://github.com/liubog2008) for the patch.
|
||||||
|
|
||||||
### [1.8](https://github.com/magiconair/properties/tree/v1.8) - 15 May 2018
|
### [1.8](https://github.com/magiconair/properties/tree/v1.8) - 15 May 2018
|
||||||
|
|
||||||
* [PR #26](https://github.com/magiconair/properties/pull/26): Disable expansion during loading
|
* [PR #26](https://github.com/magiconair/properties/pull/26): Disable expansion during loading
|
||||||
|
|||||||
4
vendor/github.com/magiconair/properties/README.md
сгенерированный
поставляемый
4
vendor/github.com/magiconair/properties/README.md
сгенерированный
поставляемый
@@ -1,6 +1,6 @@
|
|||||||
[](https://github.com/magiconair/properties/releases)
|
[](https://github.com/magiconair/properties/releases)
|
||||||
[](https://travis-ci.org/magiconair/properties)
|
[](https://travis-ci.org/magiconair/properties)
|
||||||
[](https://app.codeship.com/projects/274177")
|
[](https://circleci.com/gh/magiconair/properties)
|
||||||
[](https://raw.githubusercontent.com/magiconair/properties/master/LICENSE)
|
[](https://raw.githubusercontent.com/magiconair/properties/master/LICENSE)
|
||||||
[](http://godoc.org/github.com/magiconair/properties)
|
[](http://godoc.org/github.com/magiconair/properties)
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ changed from `panic` to `log.Fatal` but this is configurable and custom
|
|||||||
error handling functions can be provided. See the package documentation for
|
error handling functions can be provided. See the package documentation for
|
||||||
details.
|
details.
|
||||||
|
|
||||||
Read the full documentation on [GoDoc](https://godoc.org/github.com/magiconair/properties) [](https://godoc.org/github.com/magiconair/properties)
|
Read the full documentation on [](http://godoc.org/github.com/magiconair/properties)
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
|
|||||||
1
vendor/github.com/magiconair/properties/go.mod
сгенерированный
поставляемый
Обычный файл
1
vendor/github.com/magiconair/properties/go.mod
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1 @@
|
|||||||
|
module github.com/magiconair/properties
|
||||||
2
vendor/github.com/magiconair/properties/load.go
сгенерированный
поставляемый
2
vendor/github.com/magiconair/properties/load.go
сгенерированный
поставляемый
@@ -115,6 +115,7 @@ func (l *Loader) LoadURL(url string) (*Properties, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("properties: error fetching %q. %s", url, err)
|
return nil, fmt.Errorf("properties: error fetching %q. %s", url, err)
|
||||||
}
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
if resp.StatusCode == 404 && l.IgnoreMissing {
|
if resp.StatusCode == 404 && l.IgnoreMissing {
|
||||||
LogPrintf("properties: %s returned %d. skipping", url, resp.StatusCode)
|
LogPrintf("properties: %s returned %d. skipping", url, resp.StatusCode)
|
||||||
@@ -129,7 +130,6 @@ func (l *Loader) LoadURL(url string) (*Properties, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("properties: %s error reading response. %s", url, err)
|
return nil, fmt.Errorf("properties: %s error reading response. %s", url, err)
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
|
||||||
|
|
||||||
ct := resp.Header.Get("Content-Type")
|
ct := resp.Header.Get("Content-Type")
|
||||||
var enc Encoding
|
var enc Encoding
|
||||||
|
|||||||
3
vendor/github.com/mailru/easyjson/Makefile
сгенерированный
поставляемый
3
vendor/github.com/mailru/easyjson/Makefile
сгенерированный
поставляемый
@@ -26,7 +26,7 @@ generate: root build
|
|||||||
.root/src/$(PKG)/tests/named_type.go \
|
.root/src/$(PKG)/tests/named_type.go \
|
||||||
.root/src/$(PKG)/tests/custom_map_key_type.go \
|
.root/src/$(PKG)/tests/custom_map_key_type.go \
|
||||||
.root/src/$(PKG)/tests/embedded_type.go \
|
.root/src/$(PKG)/tests/embedded_type.go \
|
||||||
.root/src/$(PKG)/tests/reference_to_pointer.go
|
.root/src/$(PKG)/tests/reference_to_pointer.go \
|
||||||
|
|
||||||
.root/bin/easyjson -all .root/src/$(PKG)/tests/data.go
|
.root/bin/easyjson -all .root/src/$(PKG)/tests/data.go
|
||||||
.root/bin/easyjson -all .root/src/$(PKG)/tests/nothing.go
|
.root/bin/easyjson -all .root/src/$(PKG)/tests/nothing.go
|
||||||
@@ -39,6 +39,7 @@ generate: root build
|
|||||||
.root/bin/easyjson .root/src/$(PKG)/tests/custom_map_key_type.go
|
.root/bin/easyjson .root/src/$(PKG)/tests/custom_map_key_type.go
|
||||||
.root/bin/easyjson .root/src/$(PKG)/tests/embedded_type.go
|
.root/bin/easyjson .root/src/$(PKG)/tests/embedded_type.go
|
||||||
.root/bin/easyjson .root/src/$(PKG)/tests/reference_to_pointer.go
|
.root/bin/easyjson .root/src/$(PKG)/tests/reference_to_pointer.go
|
||||||
|
.root/bin/easyjson .root/src/$(PKG)/tests/key_marshaler_map.go
|
||||||
.root/bin/easyjson -disallow_unknown_fields .root/src/$(PKG)/tests/disallow_unknown.go
|
.root/bin/easyjson -disallow_unknown_fields .root/src/$(PKG)/tests/disallow_unknown.go
|
||||||
|
|
||||||
test: generate root
|
test: generate root
|
||||||
|
|||||||
3
vendor/github.com/mailru/easyjson/README.md
сгенерированный
поставляемый
3
vendor/github.com/mailru/easyjson/README.md
сгенерированный
поставляемый
@@ -173,6 +173,9 @@ for more information.
|
|||||||
typically for many uses/protocols the final, marshaled length of the JSON
|
typically for many uses/protocols the final, marshaled length of the JSON
|
||||||
needs to be known prior to sending the data. Currently this is not possible
|
needs to be known prior to sending the data. Currently this is not possible
|
||||||
with easyjson's architecture.
|
with easyjson's architecture.
|
||||||
|
|
||||||
|
* easyjson parser and codegen based on reflection, so it wont works on `package main`
|
||||||
|
files, because they cant be imported by parser.
|
||||||
|
|
||||||
## Benchmarks
|
## Benchmarks
|
||||||
|
|
||||||
|
|||||||
2
vendor/github.com/mailru/easyjson/jlexer/lexer.go
сгенерированный
поставляемый
2
vendor/github.com/mailru/easyjson/jlexer/lexer.go
сгенерированный
поставляемый
@@ -1152,7 +1152,7 @@ func (r *Lexer) Interface() interface{} {
|
|||||||
} else if r.token.delimValue == '[' {
|
} else if r.token.delimValue == '[' {
|
||||||
r.consume()
|
r.consume()
|
||||||
|
|
||||||
var ret []interface{}
|
ret := []interface{}{}
|
||||||
for !r.IsDelim(']') {
|
for !r.IsDelim(']') {
|
||||||
ret = append(ret, r.Interface())
|
ret = append(ret, r.Interface())
|
||||||
r.WantComma()
|
r.WantComma()
|
||||||
|
|||||||
30
vendor/github.com/mattn/go-sqlite3/.travis.yml
сгенерированный
поставляемый
30
vendor/github.com/mattn/go-sqlite3/.travis.yml
сгенерированный
поставляемый
@@ -8,34 +8,24 @@ addons:
|
|||||||
apt:
|
apt:
|
||||||
update: true
|
update: true
|
||||||
|
|
||||||
env:
|
|
||||||
matrix:
|
|
||||||
- GOTAGS=
|
|
||||||
- GOTAGS=libsqlite3
|
|
||||||
- GOTAGS="sqlite_allow_uri_authority sqlite_app_armor sqlite_foreign_keys sqlite_fts5 sqlite_icu sqlite_introspect sqlite_json sqlite_secure_delete sqlite_see sqlite_stat4 sqlite_trace sqlite_userauth sqlite_vacuum_incr sqlite_vtable sqlite_unlock_notify"
|
|
||||||
- GOTAGS=sqlite_vacuum_full
|
|
||||||
|
|
||||||
go:
|
go:
|
||||||
- 1.9.x
|
- 1.9.x
|
||||||
- 1.10.x
|
- 1.10.x
|
||||||
- 1.11.x
|
- 1.11.x
|
||||||
|
- master
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- |
|
- |
|
||||||
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
|
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
|
||||||
brew update
|
brew update
|
||||||
fi
|
fi
|
||||||
- |
|
- go get github.com/smartystreets/goconvey
|
||||||
go get github.com/smartystreets/goconvey
|
- go get github.com/mattn/goveralls
|
||||||
if [[ "${GOOS}" != "windows" ]]; then
|
- go get golang.org/x/tools/cmd/cover
|
||||||
go get github.com/mattn/goveralls
|
|
||||||
go get golang.org/x/tools/cmd/cover
|
|
||||||
fi
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- GOOS=$(go env GOOS) GOARCH=$(go env GOARCH) go build -v -tags "${GOTAGS}" .
|
- $HOME/gopath/bin/goveralls -repotoken 3qJVUE0iQwqnCbmNcDsjYu1nh4J4KIFXx
|
||||||
- |
|
- go test -race -v . -tags ""
|
||||||
if [[ "${GOOS}" != "windows" ]]; then
|
- go test -race -v . -tags "libsqlite3"
|
||||||
$HOME/gopath/bin/goveralls -repotoken 3qJVUE0iQwqnCbmNcDsjYu1nh4J4KIFXx
|
- go test -race -v . -tags "sqlite_allow_uri_authority sqlite_app_armor sqlite_foreign_keys sqlite_fts5 sqlite_icu sqlite_introspect sqlite_json sqlite_secure_delete sqlite_see sqlite_stat4 sqlite_trace sqlite_userauth sqlite_vacuum_incr sqlite_vtable sqlite_unlock_notify"
|
||||||
go test -race -v . -tags "${GOTAGS}"
|
- go test -race -v . -tags "sqlite_vacuum_full"
|
||||||
fi
|
|
||||||
26
vendor/github.com/mattn/go-sqlite3/README.md
сгенерированный
поставляемый
26
vendor/github.com/mattn/go-sqlite3/README.md
сгенерированный
поставляемый
@@ -10,9 +10,7 @@ go-sqlite3
|
|||||||
|
|
||||||
sqlite3 driver conforming to the built-in database/sql interface
|
sqlite3 driver conforming to the built-in database/sql interface
|
||||||
|
|
||||||
Supported Golang version:
|
Supported Golang version: See .travis.yml
|
||||||
- 1.9.x
|
|
||||||
- 1.10.x
|
|
||||||
|
|
||||||
[This package follows the official Golang Release Policy.](https://golang.org/doc/devel/release.html#policy)
|
[This package follows the official Golang Release Policy.](https://golang.org/doc/devel/release.html#policy)
|
||||||
|
|
||||||
@@ -249,7 +247,7 @@ Required dependency
|
|||||||
brew install sqlite3
|
brew install sqlite3
|
||||||
```
|
```
|
||||||
|
|
||||||
For OSX there is an additional package install which is required if you whish to build the `icu` extension.
|
For OSX there is an additional package install which is required if you wish to build the `icu` extension.
|
||||||
|
|
||||||
This additional package can be installed with `homebrew`.
|
This additional package can be installed with `homebrew`.
|
||||||
|
|
||||||
@@ -282,7 +280,7 @@ To compile this package on Windows OS you must have the `gcc` compiler installed
|
|||||||
3) Open a terminal for the TDM-GCC toolchain, can be found in the Windows Start menu.
|
3) Open a terminal for the TDM-GCC toolchain, can be found in the Windows Start menu.
|
||||||
4) Navigate to your project folder and run the `go build ...` command for this package.
|
4) Navigate to your project folder and run the `go build ...` command for this package.
|
||||||
|
|
||||||
For example the TDM-GCC Toolchain can be found [here](ttps://sourceforge.net/projects/tdm-gcc/).
|
For example the TDM-GCC Toolchain can be found [here](https://sourceforge.net/projects/tdm-gcc/).
|
||||||
|
|
||||||
## Errors
|
## Errors
|
||||||
|
|
||||||
@@ -458,15 +456,19 @@ For an example see [shaxbee/go-spatialite](https://github.com/shaxbee/go-spatial
|
|||||||
|
|
||||||
Why is it racy if I use a `sql.Open("sqlite3", ":memory:")` database?
|
Why is it racy if I use a `sql.Open("sqlite3", ":memory:")` database?
|
||||||
|
|
||||||
Each connection to :memory: opens a brand new in-memory sql database, so if
|
Each connection to `":memory:"` opens a brand new in-memory sql database, so if
|
||||||
the stdlib's sql engine happens to open another connection and you've only
|
the stdlib's sql engine happens to open another connection and you've only
|
||||||
specified ":memory:", that connection will see a brand new database. A
|
specified `":memory:"`, that connection will see a brand new database. A
|
||||||
workaround is to use "file::memory:?mode=memory&cache=shared". Every
|
workaround is to use `"file::memory:?cache=shared"` (or `"file:foobar?mode=memory&cache=shared"`). Every
|
||||||
connection to this string will point to the same in-memory database.
|
connection to this string will point to the same in-memory database.
|
||||||
|
|
||||||
|
Note that if the last database connection in the pool closes, the in-memory database is deleted. Make sure the [max idle connection limit](https://golang.org/pkg/database/sql/#DB.SetMaxIdleConns) is > 0, and the [connection lifetime](https://golang.org/pkg/database/sql/#DB.SetConnMaxLifetime) is infinite.
|
||||||
|
|
||||||
For more information see
|
For more information see
|
||||||
* [#204](https://github.com/mattn/go-sqlite3/issues/204)
|
* [#204](https://github.com/mattn/go-sqlite3/issues/204)
|
||||||
* [#511](https://github.com/mattn/go-sqlite3/issues/511)
|
* [#511](https://github.com/mattn/go-sqlite3/issues/511)
|
||||||
|
* https://www.sqlite.org/sharedcache.html#shared_cache_and_in_memory_databases
|
||||||
|
* https://www.sqlite.org/inmemorydb.html#sharedmemdb
|
||||||
|
|
||||||
- Reading from database with large amount of goroutines fails on OSX.
|
- Reading from database with large amount of goroutines fails on OSX.
|
||||||
|
|
||||||
@@ -481,11 +483,11 @@ For an example see [shaxbee/go-spatialite](https://github.com/shaxbee/go-spatial
|
|||||||
|
|
||||||
You need to implement the feature or call the sqlite3 cli.
|
You need to implement the feature or call the sqlite3 cli.
|
||||||
|
|
||||||
More infomation see [#305](https://github.com/mattn/go-sqlite3/issues/305)
|
More information see [#305](https://github.com/mattn/go-sqlite3/issues/305)
|
||||||
|
|
||||||
- Error: `database is locked`
|
- Error: `database is locked`
|
||||||
|
|
||||||
When you get an database is locked. Please use the following options.
|
When you get a database is locked. Please use the following options.
|
||||||
|
|
||||||
Add to DSN: `cache=shared`
|
Add to DSN: `cache=shared`
|
||||||
|
|
||||||
@@ -497,7 +499,7 @@ For an example see [shaxbee/go-spatialite](https://github.com/shaxbee/go-spatial
|
|||||||
Second please set the database connections of the SQL package to 1.
|
Second please set the database connections of the SQL package to 1.
|
||||||
|
|
||||||
```go
|
```go
|
||||||
db.SetMaxOpenConn(1)
|
db.SetMaxOpenConns(1)
|
||||||
```
|
```
|
||||||
|
|
||||||
More information see [#209](https://github.com/mattn/go-sqlite3/issues/209)
|
More information see [#209](https://github.com/mattn/go-sqlite3/issues/209)
|
||||||
|
|||||||
2
vendor/github.com/mattn/go-sqlite3/callback.go
сгенерированный
поставляемый
2
vendor/github.com/mattn/go-sqlite3/callback.go
сгенерированный
поставляемый
@@ -368,7 +368,7 @@ func callbackRet(typ reflect.Type) (callbackRetConverter, error) {
|
|||||||
func callbackError(ctx *C.sqlite3_context, err error) {
|
func callbackError(ctx *C.sqlite3_context, err error) {
|
||||||
cstr := C.CString(err.Error())
|
cstr := C.CString(err.Error())
|
||||||
defer C.free(unsafe.Pointer(cstr))
|
defer C.free(unsafe.Pointer(cstr))
|
||||||
C.sqlite3_result_error(ctx, cstr, -1)
|
C.sqlite3_result_error(ctx, cstr, C.int(-1))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test support code. Tests are not allowed to import "C", so we can't
|
// Test support code. Tests are not allowed to import "C", so we can't
|
||||||
|
|||||||
18974
vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c
сгенерированный
поставляемый
18974
vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c
сгенерированный
поставляемый
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
297
vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h
сгенерированный
поставляемый
297
vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h
сгенерированный
поставляемый
@@ -124,9 +124,9 @@ extern "C" {
|
|||||||
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
|
||||||
** [sqlite_version()] and [sqlite_source_id()].
|
** [sqlite_version()] and [sqlite_source_id()].
|
||||||
*/
|
*/
|
||||||
#define SQLITE_VERSION "3.25.2"
|
#define SQLITE_VERSION "3.29.0"
|
||||||
#define SQLITE_VERSION_NUMBER 3025002
|
#define SQLITE_VERSION_NUMBER 3029000
|
||||||
#define SQLITE_SOURCE_ID "2018-09-25 19:08:10 fb90e7189ae6d62e77ba3a308ca5d683f90bbe633cf681865365b8e92792d1c7"
|
#define SQLITE_SOURCE_ID "2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: Run-Time Library Version Numbers
|
** CAPI3REF: Run-Time Library Version Numbers
|
||||||
@@ -190,6 +190,9 @@ SQLITE_API int sqlite3_libversion_number(void);
|
|||||||
#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
|
#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
|
||||||
SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
|
SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
|
||||||
SQLITE_API const char *sqlite3_compileoption_get(int N);
|
SQLITE_API const char *sqlite3_compileoption_get(int N);
|
||||||
|
#else
|
||||||
|
# define sqlite3_compileoption_used(X) 0
|
||||||
|
# define sqlite3_compileoption_get(X) ((void*)0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -824,6 +827,15 @@ struct sqlite3_io_methods {
|
|||||||
** file space based on this hint in order to help writes to the database
|
** file space based on this hint in order to help writes to the database
|
||||||
** file run faster.
|
** file run faster.
|
||||||
**
|
**
|
||||||
|
** <li>[[SQLITE_FCNTL_SIZE_LIMIT]]
|
||||||
|
** The [SQLITE_FCNTL_SIZE_LIMIT] opcode is used by in-memory VFS that
|
||||||
|
** implements [sqlite3_deserialize()] to set an upper bound on the size
|
||||||
|
** of the in-memory database. The argument is a pointer to a [sqlite3_int64].
|
||||||
|
** If the integer pointed to is negative, then it is filled in with the
|
||||||
|
** current limit. Otherwise the limit is set to the larger of the value
|
||||||
|
** of the integer pointed to and the current database size. The integer
|
||||||
|
** pointed to is set to the new limit.
|
||||||
|
**
|
||||||
** <li>[[SQLITE_FCNTL_CHUNK_SIZE]]
|
** <li>[[SQLITE_FCNTL_CHUNK_SIZE]]
|
||||||
** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS
|
** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS
|
||||||
** extends and truncates the database file in chunks of a size specified
|
** extends and truncates the database file in chunks of a size specified
|
||||||
@@ -1132,6 +1144,7 @@ struct sqlite3_io_methods {
|
|||||||
#define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33
|
#define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33
|
||||||
#define SQLITE_FCNTL_LOCK_TIMEOUT 34
|
#define SQLITE_FCNTL_LOCK_TIMEOUT 34
|
||||||
#define SQLITE_FCNTL_DATA_VERSION 35
|
#define SQLITE_FCNTL_DATA_VERSION 35
|
||||||
|
#define SQLITE_FCNTL_SIZE_LIMIT 36
|
||||||
|
|
||||||
/* deprecated names */
|
/* deprecated names */
|
||||||
#define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE
|
#define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE
|
||||||
@@ -1284,8 +1297,14 @@ typedef struct sqlite3_api_routines sqlite3_api_routines;
|
|||||||
** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
|
** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
|
||||||
** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
|
** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
|
||||||
** test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
|
** test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
|
||||||
** to test whether a file is at least readable. The file can be a
|
** to test whether a file is at least readable. The SQLITE_ACCESS_READ
|
||||||
** directory.
|
** flag is never actually used and is not implemented in the built-in
|
||||||
|
** VFSes of SQLite. The file is named by the second argument and can be a
|
||||||
|
** directory. The xAccess method returns [SQLITE_OK] on success or some
|
||||||
|
** non-zero error code if there is an I/O error or if the name of
|
||||||
|
** the file given in the second argument is illegal. If SQLITE_OK
|
||||||
|
** is returned, then non-zero or zero is written into *pResOut to indicate
|
||||||
|
** whether or not the file is accessible.
|
||||||
**
|
**
|
||||||
** ^SQLite will always allocate at least mxPathname+1 bytes for the
|
** ^SQLite will always allocate at least mxPathname+1 bytes for the
|
||||||
** output buffer xFullPathname. The exact size of the output buffer
|
** output buffer xFullPathname. The exact size of the output buffer
|
||||||
@@ -1973,6 +1992,17 @@ struct sqlite3_mem_methods {
|
|||||||
** negative value for this option restores the default behaviour.
|
** negative value for this option restores the default behaviour.
|
||||||
** This option is only available if SQLite is compiled with the
|
** This option is only available if SQLite is compiled with the
|
||||||
** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option.
|
** [SQLITE_ENABLE_SORTER_REFERENCES] compile-time option.
|
||||||
|
**
|
||||||
|
** [[SQLITE_CONFIG_MEMDB_MAXSIZE]]
|
||||||
|
** <dt>SQLITE_CONFIG_MEMDB_MAXSIZE
|
||||||
|
** <dd>The SQLITE_CONFIG_MEMDB_MAXSIZE option accepts a single parameter
|
||||||
|
** [sqlite3_int64] parameter which is the default maximum size for an in-memory
|
||||||
|
** database created using [sqlite3_deserialize()]. This default maximum
|
||||||
|
** size can be adjusted up or down for individual databases using the
|
||||||
|
** [SQLITE_FCNTL_SIZE_LIMIT] [sqlite3_file_control|file-control]. If this
|
||||||
|
** configuration setting is never used, then the default maximum is determined
|
||||||
|
** by the [SQLITE_MEMDB_DEFAULT_MAXSIZE] compile-time option. If that
|
||||||
|
** compile-time option is not set, then the default maximum is 1073741824.
|
||||||
** </dl>
|
** </dl>
|
||||||
*/
|
*/
|
||||||
#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
|
#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
|
||||||
@@ -2003,6 +2033,7 @@ struct sqlite3_mem_methods {
|
|||||||
#define SQLITE_CONFIG_STMTJRNL_SPILL 26 /* int nByte */
|
#define SQLITE_CONFIG_STMTJRNL_SPILL 26 /* int nByte */
|
||||||
#define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */
|
#define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */
|
||||||
#define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */
|
#define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */
|
||||||
|
#define SQLITE_CONFIG_MEMDB_MAXSIZE 29 /* sqlite3_int64 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: Database Connection Configuration Options
|
** CAPI3REF: Database Connection Configuration Options
|
||||||
@@ -2018,6 +2049,7 @@ struct sqlite3_mem_methods {
|
|||||||
** is invoked.
|
** is invoked.
|
||||||
**
|
**
|
||||||
** <dl>
|
** <dl>
|
||||||
|
** [[SQLITE_DBCONFIG_LOOKASIDE]]
|
||||||
** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt>
|
** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt>
|
||||||
** <dd> ^This option takes three additional arguments that determine the
|
** <dd> ^This option takes three additional arguments that determine the
|
||||||
** [lookaside memory allocator] configuration for the [database connection].
|
** [lookaside memory allocator] configuration for the [database connection].
|
||||||
@@ -2040,6 +2072,7 @@ struct sqlite3_mem_methods {
|
|||||||
** memory is in use leaves the configuration unchanged and returns
|
** memory is in use leaves the configuration unchanged and returns
|
||||||
** [SQLITE_BUSY].)^</dd>
|
** [SQLITE_BUSY].)^</dd>
|
||||||
**
|
**
|
||||||
|
** [[SQLITE_DBCONFIG_ENABLE_FKEY]]
|
||||||
** <dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt>
|
** <dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt>
|
||||||
** <dd> ^This option is used to enable or disable the enforcement of
|
** <dd> ^This option is used to enable or disable the enforcement of
|
||||||
** [foreign key constraints]. There should be two additional arguments.
|
** [foreign key constraints]. There should be two additional arguments.
|
||||||
@@ -2050,6 +2083,7 @@ struct sqlite3_mem_methods {
|
|||||||
** following this call. The second parameter may be a NULL pointer, in
|
** following this call. The second parameter may be a NULL pointer, in
|
||||||
** which case the FK enforcement setting is not reported back. </dd>
|
** which case the FK enforcement setting is not reported back. </dd>
|
||||||
**
|
**
|
||||||
|
** [[SQLITE_DBCONFIG_ENABLE_TRIGGER]]
|
||||||
** <dt>SQLITE_DBCONFIG_ENABLE_TRIGGER</dt>
|
** <dt>SQLITE_DBCONFIG_ENABLE_TRIGGER</dt>
|
||||||
** <dd> ^This option is used to enable or disable [CREATE TRIGGER | triggers].
|
** <dd> ^This option is used to enable or disable [CREATE TRIGGER | triggers].
|
||||||
** There should be two additional arguments.
|
** There should be two additional arguments.
|
||||||
@@ -2060,9 +2094,10 @@ struct sqlite3_mem_methods {
|
|||||||
** following this call. The second parameter may be a NULL pointer, in
|
** following this call. The second parameter may be a NULL pointer, in
|
||||||
** which case the trigger setting is not reported back. </dd>
|
** which case the trigger setting is not reported back. </dd>
|
||||||
**
|
**
|
||||||
|
** [[SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER]]
|
||||||
** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
|
** <dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
|
||||||
** <dd> ^This option is used to enable or disable the two-argument
|
** <dd> ^This option is used to enable or disable the
|
||||||
** version of the [fts3_tokenizer()] function which is part of the
|
** [fts3_tokenizer()] function which is part of the
|
||||||
** [FTS3] full-text search engine extension.
|
** [FTS3] full-text search engine extension.
|
||||||
** There should be two additional arguments.
|
** There should be two additional arguments.
|
||||||
** The first argument is an integer which is 0 to disable fts3_tokenizer() or
|
** The first argument is an integer which is 0 to disable fts3_tokenizer() or
|
||||||
@@ -2073,6 +2108,7 @@ struct sqlite3_mem_methods {
|
|||||||
** following this call. The second parameter may be a NULL pointer, in
|
** following this call. The second parameter may be a NULL pointer, in
|
||||||
** which case the new setting is not reported back. </dd>
|
** which case the new setting is not reported back. </dd>
|
||||||
**
|
**
|
||||||
|
** [[SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION]]
|
||||||
** <dt>SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</dt>
|
** <dt>SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</dt>
|
||||||
** <dd> ^This option is used to enable or disable the [sqlite3_load_extension()]
|
** <dd> ^This option is used to enable or disable the [sqlite3_load_extension()]
|
||||||
** interface independently of the [load_extension()] SQL function.
|
** interface independently of the [load_extension()] SQL function.
|
||||||
@@ -2090,7 +2126,7 @@ struct sqlite3_mem_methods {
|
|||||||
** be a NULL pointer, in which case the new setting is not reported back.
|
** be a NULL pointer, in which case the new setting is not reported back.
|
||||||
** </dd>
|
** </dd>
|
||||||
**
|
**
|
||||||
** <dt>SQLITE_DBCONFIG_MAINDBNAME</dt>
|
** [[SQLITE_DBCONFIG_MAINDBNAME]] <dt>SQLITE_DBCONFIG_MAINDBNAME</dt>
|
||||||
** <dd> ^This option is used to change the name of the "main" database
|
** <dd> ^This option is used to change the name of the "main" database
|
||||||
** schema. ^The sole argument is a pointer to a constant UTF8 string
|
** schema. ^The sole argument is a pointer to a constant UTF8 string
|
||||||
** which will become the new schema name in place of "main". ^SQLite
|
** which will become the new schema name in place of "main". ^SQLite
|
||||||
@@ -2099,6 +2135,7 @@ struct sqlite3_mem_methods {
|
|||||||
** until after the database connection closes.
|
** until after the database connection closes.
|
||||||
** </dd>
|
** </dd>
|
||||||
**
|
**
|
||||||
|
** [[SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE]]
|
||||||
** <dt>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</dt>
|
** <dt>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</dt>
|
||||||
** <dd> Usually, when a database in wal mode is closed or detached from a
|
** <dd> Usually, when a database in wal mode is closed or detached from a
|
||||||
** database handle, SQLite checks if this will mean that there are now no
|
** database handle, SQLite checks if this will mean that there are now no
|
||||||
@@ -2112,7 +2149,7 @@ struct sqlite3_mem_methods {
|
|||||||
** have been disabled - 0 if they are not disabled, 1 if they are.
|
** have been disabled - 0 if they are not disabled, 1 if they are.
|
||||||
** </dd>
|
** </dd>
|
||||||
**
|
**
|
||||||
** <dt>SQLITE_DBCONFIG_ENABLE_QPSG</dt>
|
** [[SQLITE_DBCONFIG_ENABLE_QPSG]] <dt>SQLITE_DBCONFIG_ENABLE_QPSG</dt>
|
||||||
** <dd>^(The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates
|
** <dd>^(The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates
|
||||||
** the [query planner stability guarantee] (QPSG). When the QPSG is active,
|
** the [query planner stability guarantee] (QPSG). When the QPSG is active,
|
||||||
** a single SQL query statement will always use the same algorithm regardless
|
** a single SQL query statement will always use the same algorithm regardless
|
||||||
@@ -2128,7 +2165,7 @@ struct sqlite3_mem_methods {
|
|||||||
** following this call.
|
** following this call.
|
||||||
** </dd>
|
** </dd>
|
||||||
**
|
**
|
||||||
** <dt>SQLITE_DBCONFIG_TRIGGER_EQP</dt>
|
** [[SQLITE_DBCONFIG_TRIGGER_EQP]] <dt>SQLITE_DBCONFIG_TRIGGER_EQP</dt>
|
||||||
** <dd> By default, the output of EXPLAIN QUERY PLAN commands does not
|
** <dd> By default, the output of EXPLAIN QUERY PLAN commands does not
|
||||||
** include output for any operations performed by trigger programs. This
|
** include output for any operations performed by trigger programs. This
|
||||||
** option is used to set or clear (the default) a flag that governs this
|
** option is used to set or clear (the default) a flag that governs this
|
||||||
@@ -2140,7 +2177,7 @@ struct sqlite3_mem_methods {
|
|||||||
** it is not disabled, 1 if it is.
|
** it is not disabled, 1 if it is.
|
||||||
** </dd>
|
** </dd>
|
||||||
**
|
**
|
||||||
** <dt>SQLITE_DBCONFIG_RESET_DATABASE</dt>
|
** [[SQLITE_DBCONFIG_RESET_DATABASE]] <dt>SQLITE_DBCONFIG_RESET_DATABASE</dt>
|
||||||
** <dd> Set the SQLITE_DBCONFIG_RESET_DATABASE flag and then run
|
** <dd> Set the SQLITE_DBCONFIG_RESET_DATABASE flag and then run
|
||||||
** [VACUUM] in order to reset a database back to an empty database
|
** [VACUUM] in order to reset a database back to an empty database
|
||||||
** with no schema and no content. The following process works even for
|
** with no schema and no content. The following process works even for
|
||||||
@@ -2159,6 +2196,58 @@ struct sqlite3_mem_methods {
|
|||||||
** Because resetting a database is destructive and irreversible, the
|
** Because resetting a database is destructive and irreversible, the
|
||||||
** process requires the use of this obscure API and multiple steps to help
|
** process requires the use of this obscure API and multiple steps to help
|
||||||
** ensure that it does not happen by accident.
|
** ensure that it does not happen by accident.
|
||||||
|
**
|
||||||
|
** [[SQLITE_DBCONFIG_DEFENSIVE]] <dt>SQLITE_DBCONFIG_DEFENSIVE</dt>
|
||||||
|
** <dd>The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the
|
||||||
|
** "defensive" flag for a database connection. When the defensive
|
||||||
|
** flag is enabled, language features that allow ordinary SQL to
|
||||||
|
** deliberately corrupt the database file are disabled. The disabled
|
||||||
|
** features include but are not limited to the following:
|
||||||
|
** <ul>
|
||||||
|
** <li> The [PRAGMA writable_schema=ON] statement.
|
||||||
|
** <li> The [PRAGMA journal_mode=OFF] statement.
|
||||||
|
** <li> Writes to the [sqlite_dbpage] virtual table.
|
||||||
|
** <li> Direct writes to [shadow tables].
|
||||||
|
** </ul>
|
||||||
|
** </dd>
|
||||||
|
**
|
||||||
|
** [[SQLITE_DBCONFIG_WRITABLE_SCHEMA]] <dt>SQLITE_DBCONFIG_WRITABLE_SCHEMA</dt>
|
||||||
|
** <dd>The SQLITE_DBCONFIG_WRITABLE_SCHEMA option activates or deactivates the
|
||||||
|
** "writable_schema" flag. This has the same effect and is logically equivalent
|
||||||
|
** to setting [PRAGMA writable_schema=ON] or [PRAGMA writable_schema=OFF].
|
||||||
|
** The first argument to this setting is an integer which is 0 to disable
|
||||||
|
** the writable_schema, positive to enable writable_schema, or negative to
|
||||||
|
** leave the setting unchanged. The second parameter is a pointer to an
|
||||||
|
** integer into which is written 0 or 1 to indicate whether the writable_schema
|
||||||
|
** is enabled or disabled following this call.
|
||||||
|
** </dd>
|
||||||
|
**
|
||||||
|
** [[SQLITE_DBCONFIG_LEGACY_ALTER_TABLE]]
|
||||||
|
** <dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt>
|
||||||
|
** <dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates
|
||||||
|
** the legacy behavior of the [ALTER TABLE RENAME] command such it
|
||||||
|
** behaves as it did prior to [version 3.24.0] (2018-06-04). See the
|
||||||
|
** "Compatibility Notice" on the [ALTER TABLE RENAME documentation] for
|
||||||
|
** additional information. This feature can also be turned on and off
|
||||||
|
** using the [PRAGMA legacy_alter_table] statement.
|
||||||
|
** </dd>
|
||||||
|
**
|
||||||
|
** [[SQLITE_DBCONFIG_DQS_DML]]
|
||||||
|
** <dt>SQLITE_DBCONFIG_DQS_DML</td>
|
||||||
|
** <dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates
|
||||||
|
** the legacy [double-quoted string literal] misfeature for DML statement
|
||||||
|
** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The
|
||||||
|
** default value of this setting is determined by the [-DSQLITE_DQS]
|
||||||
|
** compile-time option.
|
||||||
|
** </dd>
|
||||||
|
**
|
||||||
|
** [[SQLITE_DBCONFIG_DQS_DDL]]
|
||||||
|
** <dt>SQLITE_DBCONFIG_DQS_DDL</td>
|
||||||
|
** <dd>The SQLITE_DBCONFIG_DQS option activates or deactivates
|
||||||
|
** the legacy [double-quoted string literal] misfeature for DDL statements,
|
||||||
|
** such as CREATE TABLE and CREATE INDEX. The
|
||||||
|
** default value of this setting is determined by the [-DSQLITE_DQS]
|
||||||
|
** compile-time option.
|
||||||
** </dd>
|
** </dd>
|
||||||
** </dl>
|
** </dl>
|
||||||
*/
|
*/
|
||||||
@@ -2172,7 +2261,12 @@ struct sqlite3_mem_methods {
|
|||||||
#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
|
#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
|
||||||
#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
|
#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
|
||||||
#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
|
#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
|
||||||
#define SQLITE_DBCONFIG_MAX 1009 /* Largest DBCONFIG */
|
#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
|
||||||
|
#define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
|
||||||
|
#define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */
|
||||||
|
#define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */
|
||||||
|
#define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */
|
||||||
|
#define SQLITE_DBCONFIG_MAX 1014 /* Largest DBCONFIG */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: Enable Or Disable Extended Result Codes
|
** CAPI3REF: Enable Or Disable Extended Result Codes
|
||||||
@@ -2329,7 +2423,7 @@ SQLITE_API int sqlite3_changes(sqlite3*);
|
|||||||
** not. ^Changes to a view that are intercepted by INSTEAD OF triggers
|
** not. ^Changes to a view that are intercepted by INSTEAD OF triggers
|
||||||
** are not counted.
|
** are not counted.
|
||||||
**
|
**
|
||||||
** This the [sqlite3_total_changes(D)] interface only reports the number
|
** The [sqlite3_total_changes(D)] interface only reports the number
|
||||||
** of rows that changed due to SQL statement run against database
|
** of rows that changed due to SQL statement run against database
|
||||||
** connection D. Any changes by other database connections are ignored.
|
** connection D. Any changes by other database connections are ignored.
|
||||||
** To detect changes against a database file from other database
|
** To detect changes against a database file from other database
|
||||||
@@ -2973,9 +3067,9 @@ SQLITE_API int sqlite3_set_authorizer(
|
|||||||
** time is in units of nanoseconds, however the current implementation
|
** time is in units of nanoseconds, however the current implementation
|
||||||
** is only capable of millisecond resolution so the six least significant
|
** is only capable of millisecond resolution so the six least significant
|
||||||
** digits in the time are meaningless. Future versions of SQLite
|
** digits in the time are meaningless. Future versions of SQLite
|
||||||
** might provide greater resolution on the profiler callback. The
|
** might provide greater resolution on the profiler callback. Invoking
|
||||||
** sqlite3_profile() function is considered experimental and is
|
** either [sqlite3_trace()] or [sqlite3_trace_v2()] will cancel the
|
||||||
** subject to change in future versions of SQLite.
|
** profile callback.
|
||||||
*/
|
*/
|
||||||
SQLITE_API SQLITE_DEPRECATED void *sqlite3_trace(sqlite3*,
|
SQLITE_API SQLITE_DEPRECATED void *sqlite3_trace(sqlite3*,
|
||||||
void(*xTrace)(void*,const char*), void*);
|
void(*xTrace)(void*,const char*), void*);
|
||||||
@@ -3389,6 +3483,8 @@ SQLITE_API int sqlite3_open_v2(
|
|||||||
** is not a database file pathname pointer that SQLite passed into the xOpen
|
** is not a database file pathname pointer that SQLite passed into the xOpen
|
||||||
** VFS method, then the behavior of this routine is undefined and probably
|
** VFS method, then the behavior of this routine is undefined and probably
|
||||||
** undesirable.
|
** undesirable.
|
||||||
|
**
|
||||||
|
** See the [URI filename] documentation for additional information.
|
||||||
*/
|
*/
|
||||||
SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam);
|
SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam);
|
||||||
SQLITE_API int sqlite3_uri_boolean(const char *zFile, const char *zParam, int bDefault);
|
SQLITE_API int sqlite3_uri_boolean(const char *zFile, const char *zParam, int bDefault);
|
||||||
@@ -3610,9 +3706,24 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
|
|||||||
** on this hint by avoiding the use of [lookaside memory] so as not to
|
** on this hint by avoiding the use of [lookaside memory] so as not to
|
||||||
** deplete the limited store of lookaside memory. Future versions of
|
** deplete the limited store of lookaside memory. Future versions of
|
||||||
** SQLite may act on this hint differently.
|
** SQLite may act on this hint differently.
|
||||||
|
**
|
||||||
|
** [[SQLITE_PREPARE_NORMALIZE]] <dt>SQLITE_PREPARE_NORMALIZE</dt>
|
||||||
|
** <dd>The SQLITE_PREPARE_NORMALIZE flag is a no-op. This flag used
|
||||||
|
** to be required for any prepared statement that wanted to use the
|
||||||
|
** [sqlite3_normalized_sql()] interface. However, the
|
||||||
|
** [sqlite3_normalized_sql()] interface is now available to all
|
||||||
|
** prepared statements, regardless of whether or not they use this
|
||||||
|
** flag.
|
||||||
|
**
|
||||||
|
** [[SQLITE_PREPARE_NO_VTAB]] <dt>SQLITE_PREPARE_NO_VTAB</dt>
|
||||||
|
** <dd>The SQLITE_PREPARE_NO_VTAB flag causes the SQL compiler
|
||||||
|
** to return an error (error code SQLITE_ERROR) if the statement uses
|
||||||
|
** any virtual tables.
|
||||||
** </dl>
|
** </dl>
|
||||||
*/
|
*/
|
||||||
#define SQLITE_PREPARE_PERSISTENT 0x01
|
#define SQLITE_PREPARE_PERSISTENT 0x01
|
||||||
|
#define SQLITE_PREPARE_NORMALIZE 0x02
|
||||||
|
#define SQLITE_PREPARE_NO_VTAB 0x04
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: Compiling An SQL Statement
|
** CAPI3REF: Compiling An SQL Statement
|
||||||
@@ -3770,6 +3881,11 @@ SQLITE_API int sqlite3_prepare16_v3(
|
|||||||
** ^The sqlite3_expanded_sql(P) interface returns a pointer to a UTF-8
|
** ^The sqlite3_expanded_sql(P) interface returns a pointer to a UTF-8
|
||||||
** string containing the SQL text of prepared statement P with
|
** string containing the SQL text of prepared statement P with
|
||||||
** [bound parameters] expanded.
|
** [bound parameters] expanded.
|
||||||
|
** ^The sqlite3_normalized_sql(P) interface returns a pointer to a UTF-8
|
||||||
|
** string containing the normalized SQL text of prepared statement P. The
|
||||||
|
** semantics used to normalize a SQL statement are unspecified and subject
|
||||||
|
** to change. At a minimum, literal values will be replaced with suitable
|
||||||
|
** placeholders.
|
||||||
**
|
**
|
||||||
** ^(For example, if a prepared statement is created using the SQL
|
** ^(For example, if a prepared statement is created using the SQL
|
||||||
** text "SELECT $abc,:xyz" and if parameter $abc is bound to integer 2345
|
** text "SELECT $abc,:xyz" and if parameter $abc is bound to integer 2345
|
||||||
@@ -3785,14 +3901,16 @@ SQLITE_API int sqlite3_prepare16_v3(
|
|||||||
** bound parameter expansions. ^The [SQLITE_OMIT_TRACE] compile-time
|
** bound parameter expansions. ^The [SQLITE_OMIT_TRACE] compile-time
|
||||||
** option causes sqlite3_expanded_sql() to always return NULL.
|
** option causes sqlite3_expanded_sql() to always return NULL.
|
||||||
**
|
**
|
||||||
** ^The string returned by sqlite3_sql(P) is managed by SQLite and is
|
** ^The strings returned by sqlite3_sql(P) and sqlite3_normalized_sql(P)
|
||||||
** automatically freed when the prepared statement is finalized.
|
** are managed by SQLite and are automatically freed when the prepared
|
||||||
|
** statement is finalized.
|
||||||
** ^The string returned by sqlite3_expanded_sql(P), on the other hand,
|
** ^The string returned by sqlite3_expanded_sql(P), on the other hand,
|
||||||
** is obtained from [sqlite3_malloc()] and must be free by the application
|
** is obtained from [sqlite3_malloc()] and must be free by the application
|
||||||
** by passing it to [sqlite3_free()].
|
** by passing it to [sqlite3_free()].
|
||||||
*/
|
*/
|
||||||
SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt);
|
SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt);
|
||||||
SQLITE_API char *sqlite3_expanded_sql(sqlite3_stmt *pStmt);
|
SQLITE_API char *sqlite3_expanded_sql(sqlite3_stmt *pStmt);
|
||||||
|
SQLITE_API const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: Determine If An SQL Statement Writes The Database
|
** CAPI3REF: Determine If An SQL Statement Writes The Database
|
||||||
@@ -3830,6 +3948,18 @@ SQLITE_API char *sqlite3_expanded_sql(sqlite3_stmt *pStmt);
|
|||||||
*/
|
*/
|
||||||
SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
|
SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
|
||||||
|
|
||||||
|
/*
|
||||||
|
** CAPI3REF: Query The EXPLAIN Setting For A Prepared Statement
|
||||||
|
** METHOD: sqlite3_stmt
|
||||||
|
**
|
||||||
|
** ^The sqlite3_stmt_isexplain(S) interface returns 1 if the
|
||||||
|
** prepared statement S is an EXPLAIN statement, or 2 if the
|
||||||
|
** statement S is an EXPLAIN QUERY PLAN.
|
||||||
|
** ^The sqlite3_stmt_isexplain(S) interface returns 0 if S is
|
||||||
|
** an ordinary statement or a NULL pointer.
|
||||||
|
*/
|
||||||
|
SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: Determine If A Prepared Statement Has Been Reset
|
** CAPI3REF: Determine If A Prepared Statement Has Been Reset
|
||||||
** METHOD: sqlite3_stmt
|
** METHOD: sqlite3_stmt
|
||||||
@@ -3969,7 +4099,9 @@ typedef struct sqlite3_context sqlite3_context;
|
|||||||
** ^The fifth argument to the BLOB and string binding interfaces
|
** ^The fifth argument to the BLOB and string binding interfaces
|
||||||
** is a destructor used to dispose of the BLOB or
|
** is a destructor used to dispose of the BLOB or
|
||||||
** string after SQLite has finished with it. ^The destructor is called
|
** string after SQLite has finished with it. ^The destructor is called
|
||||||
** to dispose of the BLOB or string even if the call to bind API fails.
|
** to dispose of the BLOB or string even if the call to the bind API fails,
|
||||||
|
** except the destructor is not called if the third parameter is a NULL
|
||||||
|
** pointer or the fourth parameter is negative.
|
||||||
** ^If the fifth argument is
|
** ^If the fifth argument is
|
||||||
** the special value [SQLITE_STATIC], then SQLite assumes that the
|
** the special value [SQLITE_STATIC], then SQLite assumes that the
|
||||||
** information is in static, unmanaged space and does not need to be freed.
|
** information is in static, unmanaged space and does not need to be freed.
|
||||||
@@ -4886,6 +5018,8 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
|
|||||||
** <tr><td><b>sqlite3_value_nochange </b>
|
** <tr><td><b>sqlite3_value_nochange </b>
|
||||||
** <td>→ <td>True if the column is unchanged in an UPDATE
|
** <td>→ <td>True if the column is unchanged in an UPDATE
|
||||||
** against a virtual table.
|
** against a virtual table.
|
||||||
|
** <tr><td><b>sqlite3_value_frombind </b>
|
||||||
|
** <td>→ <td>True if value originated from a [bound parameter]
|
||||||
** </table></blockquote>
|
** </table></blockquote>
|
||||||
**
|
**
|
||||||
** <b>Details:</b>
|
** <b>Details:</b>
|
||||||
@@ -4947,6 +5081,11 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
|
|||||||
** than within an [xUpdate] method call for an UPDATE statement, then
|
** than within an [xUpdate] method call for an UPDATE statement, then
|
||||||
** the return value is arbitrary and meaningless.
|
** the return value is arbitrary and meaningless.
|
||||||
**
|
**
|
||||||
|
** ^The sqlite3_value_frombind(X) interface returns non-zero if the
|
||||||
|
** value X originated from one of the [sqlite3_bind_int|sqlite3_bind()]
|
||||||
|
** interfaces. ^If X comes from an SQL literal value, or a table column,
|
||||||
|
** and expression, then sqlite3_value_frombind(X) returns zero.
|
||||||
|
**
|
||||||
** Please pay particular attention to the fact that the pointer returned
|
** Please pay particular attention to the fact that the pointer returned
|
||||||
** from [sqlite3_value_blob()], [sqlite3_value_text()], or
|
** from [sqlite3_value_blob()], [sqlite3_value_text()], or
|
||||||
** [sqlite3_value_text16()] can be invalidated by a subsequent call to
|
** [sqlite3_value_text16()] can be invalidated by a subsequent call to
|
||||||
@@ -4992,6 +5131,7 @@ SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
|
|||||||
SQLITE_API int sqlite3_value_type(sqlite3_value*);
|
SQLITE_API int sqlite3_value_type(sqlite3_value*);
|
||||||
SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
|
SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
|
||||||
SQLITE_API int sqlite3_value_nochange(sqlite3_value*);
|
SQLITE_API int sqlite3_value_nochange(sqlite3_value*);
|
||||||
|
SQLITE_API int sqlite3_value_frombind(sqlite3_value*);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: Finding The Subtype Of SQL Values
|
** CAPI3REF: Finding The Subtype Of SQL Values
|
||||||
@@ -5727,7 +5867,7 @@ SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
|
|||||||
** associated with database N of connection D. ^The main database file
|
** associated with database N of connection D. ^The main database file
|
||||||
** has the name "main". If there is no attached database N on the database
|
** has the name "main". If there is no attached database N on the database
|
||||||
** connection D, or if database N is a temporary or in-memory database, then
|
** connection D, or if database N is a temporary or in-memory database, then
|
||||||
** a NULL pointer is returned.
|
** this function will return either a NULL pointer or an empty string.
|
||||||
**
|
**
|
||||||
** ^The filename returned by this function is the output of the
|
** ^The filename returned by this function is the output of the
|
||||||
** xFullPathname method of the [VFS]. ^In other words, the filename
|
** xFullPathname method of the [VFS]. ^In other words, the filename
|
||||||
@@ -6282,6 +6422,9 @@ struct sqlite3_module {
|
|||||||
int (*xSavepoint)(sqlite3_vtab *pVTab, int);
|
int (*xSavepoint)(sqlite3_vtab *pVTab, int);
|
||||||
int (*xRelease)(sqlite3_vtab *pVTab, int);
|
int (*xRelease)(sqlite3_vtab *pVTab, int);
|
||||||
int (*xRollbackTo)(sqlite3_vtab *pVTab, int);
|
int (*xRollbackTo)(sqlite3_vtab *pVTab, int);
|
||||||
|
/* The methods above are in versions 1 and 2 of the sqlite_module object.
|
||||||
|
** Those below are for version 3 and greater. */
|
||||||
|
int (*xShadowName)(const char*);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -7204,6 +7347,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
|
|||||||
#define SQLITE_TESTCTRL_OPTIMIZATIONS 15
|
#define SQLITE_TESTCTRL_OPTIMIZATIONS 15
|
||||||
#define SQLITE_TESTCTRL_ISKEYWORD 16 /* NOT USED */
|
#define SQLITE_TESTCTRL_ISKEYWORD 16 /* NOT USED */
|
||||||
#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */
|
#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */
|
||||||
|
#define SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 17
|
||||||
#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
|
#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
|
||||||
#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
|
#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
|
||||||
#define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD 19
|
#define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD 19
|
||||||
@@ -7214,7 +7358,8 @@ SQLITE_API int sqlite3_test_control(int op, ...);
|
|||||||
#define SQLITE_TESTCTRL_SORTER_MMAP 24
|
#define SQLITE_TESTCTRL_SORTER_MMAP 24
|
||||||
#define SQLITE_TESTCTRL_IMPOSTER 25
|
#define SQLITE_TESTCTRL_IMPOSTER 25
|
||||||
#define SQLITE_TESTCTRL_PARSER_COVERAGE 26
|
#define SQLITE_TESTCTRL_PARSER_COVERAGE 26
|
||||||
#define SQLITE_TESTCTRL_LAST 26 /* Largest TESTCTRL */
|
#define SQLITE_TESTCTRL_RESULT_INTREAL 27
|
||||||
|
#define SQLITE_TESTCTRL_LAST 27 /* Largest TESTCTRL */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: SQL Keyword Checking
|
** CAPI3REF: SQL Keyword Checking
|
||||||
@@ -8616,6 +8761,7 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
|
|||||||
** can use to customize and optimize their behavior.
|
** can use to customize and optimize their behavior.
|
||||||
**
|
**
|
||||||
** <dl>
|
** <dl>
|
||||||
|
** [[SQLITE_VTAB_CONSTRAINT_SUPPORT]]
|
||||||
** <dt>SQLITE_VTAB_CONSTRAINT_SUPPORT
|
** <dt>SQLITE_VTAB_CONSTRAINT_SUPPORT
|
||||||
** <dd>Calls of the form
|
** <dd>Calls of the form
|
||||||
** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported,
|
** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported,
|
||||||
@@ -9385,7 +9531,7 @@ struct sqlite3_rtree_query_info {
|
|||||||
sqlite3_int64 iRowid; /* Rowid for current entry */
|
sqlite3_int64 iRowid; /* Rowid for current entry */
|
||||||
sqlite3_rtree_dbl rParentScore; /* Score of parent node */
|
sqlite3_rtree_dbl rParentScore; /* Score of parent node */
|
||||||
int eParentWithin; /* Visibility of parent node */
|
int eParentWithin; /* Visibility of parent node */
|
||||||
int eWithin; /* OUT: Visiblity */
|
int eWithin; /* OUT: Visibility */
|
||||||
sqlite3_rtree_dbl rScore; /* OUT: Write the score here */
|
sqlite3_rtree_dbl rScore; /* OUT: Write the score here */
|
||||||
/* The following fields are only available in 3.8.11 and later */
|
/* The following fields are only available in 3.8.11 and later */
|
||||||
sqlite3_value **apSqlParam; /* Original SQL values of parameters */
|
sqlite3_value **apSqlParam; /* Original SQL values of parameters */
|
||||||
@@ -9881,12 +10027,38 @@ SQLITE_API int sqlite3session_isempty(sqlite3_session *pSession);
|
|||||||
** consecutively. There is no chance that the iterator will visit a change
|
** consecutively. There is no chance that the iterator will visit a change
|
||||||
** the applies to table X, then one for table Y, and then later on visit
|
** the applies to table X, then one for table Y, and then later on visit
|
||||||
** another change for table X.
|
** another change for table X.
|
||||||
|
**
|
||||||
|
** The behavior of sqlite3changeset_start_v2() and its streaming equivalent
|
||||||
|
** may be modified by passing a combination of
|
||||||
|
** [SQLITE_CHANGESETSTART_INVERT | supported flags] as the 4th parameter.
|
||||||
|
**
|
||||||
|
** Note that the sqlite3changeset_start_v2() API is still <b>experimental</b>
|
||||||
|
** and therefore subject to change.
|
||||||
*/
|
*/
|
||||||
SQLITE_API int sqlite3changeset_start(
|
SQLITE_API int sqlite3changeset_start(
|
||||||
sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */
|
sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */
|
||||||
int nChangeset, /* Size of changeset blob in bytes */
|
int nChangeset, /* Size of changeset blob in bytes */
|
||||||
void *pChangeset /* Pointer to blob containing changeset */
|
void *pChangeset /* Pointer to blob containing changeset */
|
||||||
);
|
);
|
||||||
|
SQLITE_API int sqlite3changeset_start_v2(
|
||||||
|
sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */
|
||||||
|
int nChangeset, /* Size of changeset blob in bytes */
|
||||||
|
void *pChangeset, /* Pointer to blob containing changeset */
|
||||||
|
int flags /* SESSION_CHANGESETSTART_* flags */
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
** CAPI3REF: Flags for sqlite3changeset_start_v2
|
||||||
|
**
|
||||||
|
** The following flags may passed via the 4th parameter to
|
||||||
|
** [sqlite3changeset_start_v2] and [sqlite3changeset_start_v2_strm]:
|
||||||
|
**
|
||||||
|
** <dt>SQLITE_CHANGESETAPPLY_INVERT <dd>
|
||||||
|
** Invert the changeset while iterating through it. This is equivalent to
|
||||||
|
** inverting a changeset using sqlite3changeset_invert() before applying it.
|
||||||
|
** It is an error to specify this flag with a patchset.
|
||||||
|
*/
|
||||||
|
#define SQLITE_CHANGESETSTART_INVERT 0x0002
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -9930,7 +10102,7 @@ SQLITE_API int sqlite3changeset_next(sqlite3_changeset_iter *pIter);
|
|||||||
** sqlite3changeset_next() is called on the iterator or until the
|
** sqlite3changeset_next() is called on the iterator or until the
|
||||||
** conflict-handler function returns. If pnCol is not NULL, then *pnCol is
|
** conflict-handler function returns. If pnCol is not NULL, then *pnCol is
|
||||||
** set to the number of columns in the table affected by the change. If
|
** set to the number of columns in the table affected by the change. If
|
||||||
** pbIncorrect is not NULL, then *pbIndirect is set to true (1) if the change
|
** pbIndirect is not NULL, then *pbIndirect is set to true (1) if the change
|
||||||
** is an indirect change, or false (0) otherwise. See the documentation for
|
** is an indirect change, or false (0) otherwise. See the documentation for
|
||||||
** [sqlite3session_indirect()] for a description of direct and indirect
|
** [sqlite3session_indirect()] for a description of direct and indirect
|
||||||
** changes. Finally, if pOp is not NULL, then *pOp is set to one of
|
** changes. Finally, if pOp is not NULL, then *pOp is set to one of
|
||||||
@@ -10541,7 +10713,7 @@ SQLITE_API int sqlite3changeset_apply_v2(
|
|||||||
),
|
),
|
||||||
void *pCtx, /* First argument passed to xConflict */
|
void *pCtx, /* First argument passed to xConflict */
|
||||||
void **ppRebase, int *pnRebase, /* OUT: Rebase data */
|
void **ppRebase, int *pnRebase, /* OUT: Rebase data */
|
||||||
int flags /* Combination of SESSION_APPLY_* flags */
|
int flags /* SESSION_CHANGESETAPPLY_* flags */
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -10559,8 +10731,14 @@ SQLITE_API int sqlite3changeset_apply_v2(
|
|||||||
** causes the sessions module to omit this savepoint. In this case, if the
|
** causes the sessions module to omit this savepoint. In this case, if the
|
||||||
** caller has an open transaction or savepoint when apply_v2() is called,
|
** caller has an open transaction or savepoint when apply_v2() is called,
|
||||||
** it may revert the partially applied changeset by rolling it back.
|
** it may revert the partially applied changeset by rolling it back.
|
||||||
|
**
|
||||||
|
** <dt>SQLITE_CHANGESETAPPLY_INVERT <dd>
|
||||||
|
** Invert the changeset before applying it. This is equivalent to inverting
|
||||||
|
** a changeset using sqlite3changeset_invert() before applying it. It is
|
||||||
|
** an error to specify this flag with a patchset.
|
||||||
*/
|
*/
|
||||||
#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001
|
#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001
|
||||||
|
#define SQLITE_CHANGESETAPPLY_INVERT 0x0002
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** CAPI3REF: Constants Passed To The Conflict Handler
|
** CAPI3REF: Constants Passed To The Conflict Handler
|
||||||
@@ -10791,7 +10969,7 @@ SQLITE_API int sqlite3rebaser_configure(
|
|||||||
** in size. This function allocates and populates a buffer with a copy
|
** in size. This function allocates and populates a buffer with a copy
|
||||||
** of the changeset rebased rebased according to the configuration of the
|
** of the changeset rebased rebased according to the configuration of the
|
||||||
** rebaser object passed as the first argument. If successful, (*ppOut)
|
** rebaser object passed as the first argument. If successful, (*ppOut)
|
||||||
** is set to point to the new buffer containing the rebased changset and
|
** is set to point to the new buffer containing the rebased changeset and
|
||||||
** (*pnOut) to its size in bytes and SQLITE_OK returned. It is the
|
** (*pnOut) to its size in bytes and SQLITE_OK returned. It is the
|
||||||
** responsibility of the caller to eventually free the new buffer using
|
** responsibility of the caller to eventually free the new buffer using
|
||||||
** sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut)
|
** sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut)
|
||||||
@@ -10954,6 +11132,12 @@ SQLITE_API int sqlite3changeset_start_strm(
|
|||||||
int (*xInput)(void *pIn, void *pData, int *pnData),
|
int (*xInput)(void *pIn, void *pData, int *pnData),
|
||||||
void *pIn
|
void *pIn
|
||||||
);
|
);
|
||||||
|
SQLITE_API int sqlite3changeset_start_v2_strm(
|
||||||
|
sqlite3_changeset_iter **pp,
|
||||||
|
int (*xInput)(void *pIn, void *pData, int *pnData),
|
||||||
|
void *pIn,
|
||||||
|
int flags
|
||||||
|
);
|
||||||
SQLITE_API int sqlite3session_changeset_strm(
|
SQLITE_API int sqlite3session_changeset_strm(
|
||||||
sqlite3_session *pSession,
|
sqlite3_session *pSession,
|
||||||
int (*xOutput)(void *pOut, const void *pData, int nData),
|
int (*xOutput)(void *pOut, const void *pData, int nData),
|
||||||
@@ -10980,6 +11164,45 @@ SQLITE_API int sqlite3rebaser_rebase_strm(
|
|||||||
void *pOut
|
void *pOut
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
** CAPI3REF: Configure global parameters
|
||||||
|
**
|
||||||
|
** The sqlite3session_config() interface is used to make global configuration
|
||||||
|
** changes to the sessions module in order to tune it to the specific needs
|
||||||
|
** of the application.
|
||||||
|
**
|
||||||
|
** The sqlite3session_config() interface is not threadsafe. If it is invoked
|
||||||
|
** while any other thread is inside any other sessions method then the
|
||||||
|
** results are undefined. Furthermore, if it is invoked after any sessions
|
||||||
|
** related objects have been created, the results are also undefined.
|
||||||
|
**
|
||||||
|
** The first argument to the sqlite3session_config() function must be one
|
||||||
|
** of the SQLITE_SESSION_CONFIG_XXX constants defined below. The
|
||||||
|
** interpretation of the (void*) value passed as the second parameter and
|
||||||
|
** the effect of calling this function depends on the value of the first
|
||||||
|
** parameter.
|
||||||
|
**
|
||||||
|
** <dl>
|
||||||
|
** <dt>SQLITE_SESSION_CONFIG_STRMSIZE<dd>
|
||||||
|
** By default, the sessions module streaming interfaces attempt to input
|
||||||
|
** and output data in approximately 1 KiB chunks. This operand may be used
|
||||||
|
** to set and query the value of this configuration setting. The pointer
|
||||||
|
** passed as the second argument must point to a value of type (int).
|
||||||
|
** If this value is greater than 0, it is used as the new streaming data
|
||||||
|
** chunk size for both input and output. Before returning, the (int) value
|
||||||
|
** pointed to by pArg is set to the final value of the streaming interface
|
||||||
|
** chunk size.
|
||||||
|
** </dl>
|
||||||
|
**
|
||||||
|
** This function returns SQLITE_OK if successful, or an SQLite error code
|
||||||
|
** otherwise.
|
||||||
|
*/
|
||||||
|
SQLITE_API int sqlite3session_config(int op, void *pArg);
|
||||||
|
|
||||||
|
/*
|
||||||
|
** CAPI3REF: Values for sqlite3session_config().
|
||||||
|
*/
|
||||||
|
#define SQLITE_SESSION_CONFIG_STRMSIZE 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Make sure we can call this stuff from C++.
|
** Make sure we can call this stuff from C++.
|
||||||
@@ -11113,12 +11336,8 @@ struct Fts5PhraseIter {
|
|||||||
**
|
**
|
||||||
** Usually, output parameter *piPhrase is set to the phrase number, *piCol
|
** Usually, output parameter *piPhrase is set to the phrase number, *piCol
|
||||||
** to the column in which it occurs and *piOff the token offset of the
|
** to the column in which it occurs and *piOff the token offset of the
|
||||||
** first token of the phrase. The exception is if the table was created
|
** first token of the phrase. Returns SQLITE_OK if successful, or an error
|
||||||
** with the offsets=0 option specified. In this case *piOff is always
|
** code (i.e. SQLITE_NOMEM) if an error occurs.
|
||||||
** set to -1.
|
|
||||||
**
|
|
||||||
** Returns SQLITE_OK if successful, or an error code (i.e. SQLITE_NOMEM)
|
|
||||||
** if an error occurs.
|
|
||||||
**
|
**
|
||||||
** This API can be quite slow if used with an FTS5 table created with the
|
** This API can be quite slow if used with an FTS5 table created with the
|
||||||
** "detail=none" or "detail=column" option.
|
** "detail=none" or "detail=column" option.
|
||||||
@@ -11159,7 +11378,7 @@ struct Fts5PhraseIter {
|
|||||||
** Save the pointer passed as the second argument as the extension functions
|
** Save the pointer passed as the second argument as the extension functions
|
||||||
** "auxiliary data". The pointer may then be retrieved by the current or any
|
** "auxiliary data". The pointer may then be retrieved by the current or any
|
||||||
** future invocation of the same fts5 extension function made as part of
|
** future invocation of the same fts5 extension function made as part of
|
||||||
** of the same MATCH query using the xGetAuxdata() API.
|
** the same MATCH query using the xGetAuxdata() API.
|
||||||
**
|
**
|
||||||
** Each extension function is allocated a single auxiliary data slot for
|
** Each extension function is allocated a single auxiliary data slot for
|
||||||
** each FTS query (MATCH expression). If the extension function is invoked
|
** each FTS query (MATCH expression). If the extension function is invoked
|
||||||
@@ -11174,7 +11393,7 @@ struct Fts5PhraseIter {
|
|||||||
** The xDelete callback, if one is specified, is also invoked on the
|
** The xDelete callback, if one is specified, is also invoked on the
|
||||||
** auxiliary data pointer after the FTS5 query has finished.
|
** auxiliary data pointer after the FTS5 query has finished.
|
||||||
**
|
**
|
||||||
** If an error (e.g. an OOM condition) occurs within this function, an
|
** If an error (e.g. an OOM condition) occurs within this function,
|
||||||
** the auxiliary data is set to NULL and an error code returned. If the
|
** the auxiliary data is set to NULL and an error code returned. If the
|
||||||
** xDelete parameter was not NULL, it is invoked on the auxiliary data
|
** xDelete parameter was not NULL, it is invoked on the auxiliary data
|
||||||
** pointer before returning.
|
** pointer before returning.
|
||||||
@@ -11407,11 +11626,11 @@ struct Fts5ExtensionApi {
|
|||||||
** the tokenizer substitutes "first" for "1st" and the query works
|
** the tokenizer substitutes "first" for "1st" and the query works
|
||||||
** as expected.
|
** as expected.
|
||||||
**
|
**
|
||||||
** <li> By adding multiple synonyms for a single term to the FTS index.
|
** <li> By querying the index for all synonyms of each query term
|
||||||
** In this case, when tokenizing query text, the tokenizer may
|
** separately. In this case, when tokenizing query text, the
|
||||||
** provide multiple synonyms for a single term within the document.
|
** tokenizer may provide multiple synonyms for a single term
|
||||||
** FTS5 then queries the index for each synonym individually. For
|
** within the document. FTS5 then queries the index for each
|
||||||
** example, faced with the query:
|
** synonym individually. For example, faced with the query:
|
||||||
**
|
**
|
||||||
** <codeblock>
|
** <codeblock>
|
||||||
** ... MATCH 'first place'</codeblock>
|
** ... MATCH 'first place'</codeblock>
|
||||||
@@ -11435,7 +11654,7 @@ struct Fts5ExtensionApi {
|
|||||||
** "place".
|
** "place".
|
||||||
**
|
**
|
||||||
** This way, even if the tokenizer does not provide synonyms
|
** This way, even if the tokenizer does not provide synonyms
|
||||||
** when tokenizing query text (it should not - to do would be
|
** when tokenizing query text (it should not - to do so would be
|
||||||
** inefficient), it doesn't matter if the user queries for
|
** inefficient), it doesn't matter if the user queries for
|
||||||
** 'first + place' or '1st + place', as there are entries in the
|
** 'first + place' or '1st + place', as there are entries in the
|
||||||
** FTS index corresponding to both forms of the first token.
|
** FTS index corresponding to both forms of the first token.
|
||||||
|
|||||||
29
vendor/github.com/mattn/go-sqlite3/sqlite3.go
сгенерированный
поставляемый
29
vendor/github.com/mattn/go-sqlite3/sqlite3.go
сгенерированный
поставляемый
@@ -683,7 +683,7 @@ func (c *SQLiteConn) RegisterAggregator(name string, impl interface{}, pure bool
|
|||||||
ai.stepArgConverters = append(ai.stepArgConverters, conv)
|
ai.stepArgConverters = append(ai.stepArgConverters, conv)
|
||||||
}
|
}
|
||||||
if step.IsVariadic() {
|
if step.IsVariadic() {
|
||||||
conv, err := callbackArg(t.In(start + stepNArgs).Elem())
|
conv, err := callbackArg(step.In(start + stepNArgs).Elem())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -740,6 +740,8 @@ func (c *SQLiteConn) RegisterAggregator(name string, impl interface{}, pure bool
|
|||||||
|
|
||||||
// AutoCommit return which currently auto commit or not.
|
// AutoCommit return which currently auto commit or not.
|
||||||
func (c *SQLiteConn) AutoCommit() bool {
|
func (c *SQLiteConn) AutoCommit() bool {
|
||||||
|
c.mu.Lock()
|
||||||
|
defer c.mu.Unlock()
|
||||||
return int(C.sqlite3_get_autocommit(c.db)) != 0
|
return int(C.sqlite3_get_autocommit(c.db)) != 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1340,6 +1342,9 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
|||||||
mutex|C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE,
|
mutex|C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE,
|
||||||
nil)
|
nil)
|
||||||
if rv != 0 {
|
if rv != 0 {
|
||||||
|
if db != nil {
|
||||||
|
C.sqlite3_close_v2(db)
|
||||||
|
}
|
||||||
return nil, Error{Code: ErrNo(rv)}
|
return nil, Error{Code: ErrNo(rv)}
|
||||||
}
|
}
|
||||||
if db == nil {
|
if db == nil {
|
||||||
@@ -1376,7 +1381,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
|||||||
// - Activate User Authentication
|
// - Activate User Authentication
|
||||||
// Check if the user wants to activate User Authentication.
|
// Check if the user wants to activate User Authentication.
|
||||||
// If so then first create a temporary AuthConn to the database
|
// If so then first create a temporary AuthConn to the database
|
||||||
// This is possible because we are already succesfully authenticated.
|
// This is possible because we are already successfully authenticated.
|
||||||
//
|
//
|
||||||
// - Check if `sqlite_user`` table exists
|
// - Check if `sqlite_user`` table exists
|
||||||
// YES => Add the provided user from DSN as Admin User and
|
// YES => Add the provided user from DSN as Admin User and
|
||||||
@@ -1387,7 +1392,7 @@ func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
|
|||||||
// Create connection to SQLite
|
// Create connection to SQLite
|
||||||
conn := &SQLiteConn{db: db, loc: loc, txlock: txlock}
|
conn := &SQLiteConn{db: db, loc: loc, txlock: txlock}
|
||||||
|
|
||||||
// Password Cipher has to be registerd before authentication
|
// Password Cipher has to be registered before authentication
|
||||||
if len(authCrypt) > 0 {
|
if len(authCrypt) > 0 {
|
||||||
switch strings.ToUpper(authCrypt) {
|
switch strings.ToUpper(authCrypt) {
|
||||||
case "SHA1":
|
case "SHA1":
|
||||||
@@ -1674,7 +1679,7 @@ func (c *SQLiteConn) prepare(ctx context.Context, query string) (driver.Stmt, er
|
|||||||
defer C.free(unsafe.Pointer(pquery))
|
defer C.free(unsafe.Pointer(pquery))
|
||||||
var s *C.sqlite3_stmt
|
var s *C.sqlite3_stmt
|
||||||
var tail *C.char
|
var tail *C.char
|
||||||
rv := C._sqlite3_prepare_v2_internal(c.db, pquery, -1, &s, &tail)
|
rv := C._sqlite3_prepare_v2_internal(c.db, pquery, C.int(-1), &s, &tail)
|
||||||
if rv != C.SQLITE_OK {
|
if rv != C.SQLITE_OK {
|
||||||
return nil, c.lastError()
|
return nil, c.lastError()
|
||||||
}
|
}
|
||||||
@@ -1718,7 +1723,7 @@ func (c *SQLiteConn) GetFilename(schemaName string) string {
|
|||||||
// GetLimit returns the current value of a run-time limit.
|
// GetLimit returns the current value of a run-time limit.
|
||||||
// See: sqlite3_limit, http://www.sqlite.org/c3ref/limit.html
|
// See: sqlite3_limit, http://www.sqlite.org/c3ref/limit.html
|
||||||
func (c *SQLiteConn) GetLimit(id int) int {
|
func (c *SQLiteConn) GetLimit(id int) int {
|
||||||
return int(C._sqlite3_limit(c.db, C.int(id), -1))
|
return int(C._sqlite3_limit(c.db, C.int(id), C.int(-1)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetLimit changes the value of a run-time limits.
|
// SetLimit changes the value of a run-time limits.
|
||||||
@@ -2024,16 +2029,11 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error {
|
|||||||
case C.SQLITE_BLOB:
|
case C.SQLITE_BLOB:
|
||||||
p := C.sqlite3_column_blob(rc.s.s, C.int(i))
|
p := C.sqlite3_column_blob(rc.s.s, C.int(i))
|
||||||
if p == nil {
|
if p == nil {
|
||||||
dest[i] = nil
|
dest[i] = []byte{}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
n := int(C.sqlite3_column_bytes(rc.s.s, C.int(i)))
|
n := C.sqlite3_column_bytes(rc.s.s, C.int(i))
|
||||||
switch dest[i].(type) {
|
dest[i] = C.GoBytes(p, n)
|
||||||
default:
|
|
||||||
slice := make([]byte, n)
|
|
||||||
copy(slice[:], (*[1 << 30]byte)(p)[0:n])
|
|
||||||
dest[i] = slice
|
|
||||||
}
|
|
||||||
case C.SQLITE_NULL:
|
case C.SQLITE_NULL:
|
||||||
dest[i] = nil
|
dest[i] = nil
|
||||||
case C.SQLITE_TEXT:
|
case C.SQLITE_TEXT:
|
||||||
@@ -2062,9 +2062,8 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error {
|
|||||||
}
|
}
|
||||||
dest[i] = t
|
dest[i] = t
|
||||||
default:
|
default:
|
||||||
dest[i] = []byte(s)
|
dest[i] = s
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
4
vendor/github.com/mattn/go-sqlite3/sqlite3_func_crypt.go
сгенерированный
поставляемый
4
vendor/github.com/mattn/go-sqlite3/sqlite3_func_crypt.go
сгенерированный
поставляемый
@@ -13,7 +13,7 @@ import (
|
|||||||
|
|
||||||
// This file provides several different implementations for the
|
// This file provides several different implementations for the
|
||||||
// default embedded sqlite_crypt function.
|
// default embedded sqlite_crypt function.
|
||||||
// This function is uses a ceasar-cypher by default
|
// This function is uses a caesar-cypher by default
|
||||||
// and is used within the UserAuthentication module to encode
|
// and is used within the UserAuthentication module to encode
|
||||||
// the password.
|
// the password.
|
||||||
//
|
//
|
||||||
@@ -40,7 +40,7 @@ import (
|
|||||||
// password X, sqlite_crypt(X,NULL) is run. A new random salt is selected
|
// password X, sqlite_crypt(X,NULL) is run. A new random salt is selected
|
||||||
// when the second argument is NULL.
|
// when the second argument is NULL.
|
||||||
//
|
//
|
||||||
// The built-in version of of sqlite_crypt() uses a simple Ceasar-cypher
|
// The built-in version of of sqlite_crypt() uses a simple Caesar-cypher
|
||||||
// which prevents passwords from being revealed by searching the raw database
|
// which prevents passwords from being revealed by searching the raw database
|
||||||
// for ASCII text, but is otherwise trivally broken. For better password
|
// for ASCII text, but is otherwise trivally broken. For better password
|
||||||
// security, the database should be encrypted using the SQLite Encryption
|
// security, the database should be encrypted using the SQLite Encryption
|
||||||
|
|||||||
4
vendor/github.com/mattn/go-sqlite3/sqlite3_go18.go
сгенерированный
поставляемый
4
vendor/github.com/mattn/go-sqlite3/sqlite3_go18.go
сгенерированный
поставляемый
@@ -10,7 +10,6 @@ package sqlite3
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql/driver"
|
"database/sql/driver"
|
||||||
"errors"
|
|
||||||
|
|
||||||
"context"
|
"context"
|
||||||
)
|
)
|
||||||
@@ -18,7 +17,8 @@ import (
|
|||||||
// Ping implement Pinger.
|
// Ping implement Pinger.
|
||||||
func (c *SQLiteConn) Ping(ctx context.Context) error {
|
func (c *SQLiteConn) Ping(ctx context.Context) error {
|
||||||
if c.db == nil {
|
if c.db == nil {
|
||||||
return errors.New("Connection was closed")
|
// must be ErrBadConn for sql to close the database
|
||||||
|
return driver.ErrBadConn
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
11
vendor/github.com/mattn/go-sqlite3/sqlite3ext.h
сгенерированный
поставляемый
11
vendor/github.com/mattn/go-sqlite3/sqlite3ext.h
сгенерированный
поставляемый
@@ -311,12 +311,18 @@ struct sqlite3_api_routines {
|
|||||||
int (*str_errcode)(sqlite3_str*);
|
int (*str_errcode)(sqlite3_str*);
|
||||||
int (*str_length)(sqlite3_str*);
|
int (*str_length)(sqlite3_str*);
|
||||||
char *(*str_value)(sqlite3_str*);
|
char *(*str_value)(sqlite3_str*);
|
||||||
|
/* Version 3.25.0 and later */
|
||||||
int (*create_window_function)(sqlite3*,const char*,int,int,void*,
|
int (*create_window_function)(sqlite3*,const char*,int,int,void*,
|
||||||
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
|
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
|
||||||
void (*xFinal)(sqlite3_context*),
|
void (*xFinal)(sqlite3_context*),
|
||||||
void (*xValue)(sqlite3_context*),
|
void (*xValue)(sqlite3_context*),
|
||||||
void (*xInv)(sqlite3_context*,int,sqlite3_value**),
|
void (*xInv)(sqlite3_context*,int,sqlite3_value**),
|
||||||
void(*xDestroy)(void*));
|
void(*xDestroy)(void*));
|
||||||
|
/* Version 3.26.0 and later */
|
||||||
|
const char *(*normalized_sql)(sqlite3_stmt*);
|
||||||
|
/* Version 3.28.0 and later */
|
||||||
|
int (*stmt_isexplain)(sqlite3_stmt*);
|
||||||
|
int (*value_frombind)(sqlite3_value*);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -604,6 +610,11 @@ typedef int (*sqlite3_loadext_entry)(
|
|||||||
#define sqlite3_str_value sqlite3_api->str_value
|
#define sqlite3_str_value sqlite3_api->str_value
|
||||||
/* Version 3.25.0 and later */
|
/* Version 3.25.0 and later */
|
||||||
#define sqlite3_create_window_function sqlite3_api->create_window_function
|
#define sqlite3_create_window_function sqlite3_api->create_window_function
|
||||||
|
/* Version 3.26.0 and later */
|
||||||
|
#define sqlite3_normalized_sql sqlite3_api->normalized_sql
|
||||||
|
/* Version 3.28.0 and later */
|
||||||
|
#define sqlite3_stmt_isexplain sqlite3_api->isexplain
|
||||||
|
#define sqlite3_value_frombind sqlite3_api->frombind
|
||||||
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
|
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
|
||||||
|
|
||||||
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
|
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
|
||||||
|
|||||||
40
vendor/github.com/miekg/dns/Gopkg.lock
сгенерированный
поставляемый
40
vendor/github.com/miekg/dns/Gopkg.lock
сгенерированный
поставляемый
@@ -3,55 +3,31 @@
|
|||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
digest = "1:6914c49eed986dfb8dffb33516fa129c49929d4d873f41e073c83c11c372b870"
|
|
||||||
name = "golang.org/x/crypto"
|
name = "golang.org/x/crypto"
|
||||||
packages = [
|
packages = ["ed25519","ed25519/internal/edwards25519"]
|
||||||
"ed25519",
|
revision = "20be4c3c3ed52bfccdb2d59a412ee1a936d175a7"
|
||||||
"ed25519/internal/edwards25519",
|
|
||||||
]
|
|
||||||
pruneopts = ""
|
|
||||||
revision = "e3636079e1a4c1f337f212cc5cd2aca108f6c900"
|
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
digest = "1:08e41d63f8dac84d83797368b56cf0b339e42d0224e5e56668963c28aec95685"
|
|
||||||
name = "golang.org/x/net"
|
name = "golang.org/x/net"
|
||||||
packages = [
|
packages = ["bpf","internal/iana","internal/socket","ipv4","ipv6"]
|
||||||
"bpf",
|
revision = "60506f45cf65977eb3a9c6e30f995f54a721c271"
|
||||||
"context",
|
|
||||||
"internal/iana",
|
|
||||||
"internal/socket",
|
|
||||||
"ipv4",
|
|
||||||
"ipv6",
|
|
||||||
]
|
|
||||||
pruneopts = ""
|
|
||||||
revision = "4dfa2610cdf3b287375bbba5b8f2a14d3b01d8de"
|
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
digest = "1:b2ea75de0ccb2db2ac79356407f8a4cd8f798fe15d41b381c00abf3ae8e55ed1"
|
|
||||||
name = "golang.org/x/sync"
|
name = "golang.org/x/sync"
|
||||||
packages = ["errgroup"]
|
packages = ["errgroup"]
|
||||||
pruneopts = ""
|
revision = "112230192c580c3556b8cee6403af37a4fc5f28c"
|
||||||
revision = "1d60e4601c6fd243af51cc01ddf169918a5407ca"
|
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
digest = "1:149a432fabebb8221a80f77731b1cd63597197ded4f14af606ebe3a0959004ec"
|
|
||||||
name = "golang.org/x/sys"
|
name = "golang.org/x/sys"
|
||||||
packages = ["unix"]
|
packages = ["unix","windows"]
|
||||||
pruneopts = ""
|
revision = "4c4f7f33c9ed00de01c4c741d2177abfcfe19307"
|
||||||
revision = "e4b3c5e9061176387e7cea65e4dc5853801f3fb7"
|
|
||||||
|
|
||||||
[solve-meta]
|
[solve-meta]
|
||||||
analyzer-name = "dep"
|
analyzer-name = "dep"
|
||||||
analyzer-version = 1
|
analyzer-version = 1
|
||||||
input-imports = [
|
inputs-digest = "fc70ece982d3660454fe1b9ccd5c91162a1cc080b58ad82aa065ad4a2ec93ce9"
|
||||||
"golang.org/x/crypto/ed25519",
|
|
||||||
"golang.org/x/net/ipv4",
|
|
||||||
"golang.org/x/net/ipv6",
|
|
||||||
"golang.org/x/sync/errgroup",
|
|
||||||
"golang.org/x/sys/unix",
|
|
||||||
]
|
|
||||||
solver-name = "gps-cdcl"
|
solver-name = "gps-cdcl"
|
||||||
solver-version = 1
|
solver-version = 1
|
||||||
|
|||||||
2
vendor/github.com/miekg/dns/README.md
сгенерированный
поставляемый
2
vendor/github.com/miekg/dns/README.md
сгенерированный
поставляемый
@@ -69,6 +69,7 @@ A not-so-up-to-date-list-that-may-be-actually-current:
|
|||||||
* https://github.com/semihalev/sdns
|
* https://github.com/semihalev/sdns
|
||||||
* https://render.com
|
* https://render.com
|
||||||
* https://github.com/peterzen/goresolver
|
* https://github.com/peterzen/goresolver
|
||||||
|
* https://github.com/folbricht/routedns
|
||||||
|
|
||||||
Send pull request if you want to be listed here.
|
Send pull request if you want to be listed here.
|
||||||
|
|
||||||
@@ -152,6 +153,7 @@ Example programs can be found in the `github.com/miekg/exdns` repository.
|
|||||||
* 6844 - CAA record
|
* 6844 - CAA record
|
||||||
* 6891 - EDNS0 update
|
* 6891 - EDNS0 update
|
||||||
* 6895 - DNS IANA considerations
|
* 6895 - DNS IANA considerations
|
||||||
|
* 6944 - DNSSEC DNSKEY Algorithm Status
|
||||||
* 6975 - Algorithm Understanding in DNSSEC
|
* 6975 - Algorithm Understanding in DNSSEC
|
||||||
* 7043 - EUI48/EUI64 records
|
* 7043 - EUI48/EUI64 records
|
||||||
* 7314 - DNS (EDNS) EXPIRE Option
|
* 7314 - DNS (EDNS) EXPIRE Option
|
||||||
|
|||||||
12
vendor/github.com/miekg/dns/acceptfunc.go
сгенерированный
поставляемый
12
vendor/github.com/miekg/dns/acceptfunc.go
сгенерированный
поставляемый
@@ -19,9 +19,10 @@ var DefaultMsgAcceptFunc MsgAcceptFunc = defaultMsgAcceptFunc
|
|||||||
type MsgAcceptAction int
|
type MsgAcceptAction int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MsgAccept MsgAcceptAction = iota // Accept the message
|
MsgAccept MsgAcceptAction = iota // Accept the message
|
||||||
MsgReject // Reject the message with a RcodeFormatError
|
MsgReject // Reject the message with a RcodeFormatError
|
||||||
MsgIgnore // Ignore the error and send nothing back.
|
MsgIgnore // Ignore the error and send nothing back.
|
||||||
|
MsgRejectNotImplemented // Reject the message with a RcodeNotImplemented
|
||||||
)
|
)
|
||||||
|
|
||||||
func defaultMsgAcceptFunc(dh Header) MsgAcceptAction {
|
func defaultMsgAcceptFunc(dh Header) MsgAcceptAction {
|
||||||
@@ -32,12 +33,9 @@ func defaultMsgAcceptFunc(dh Header) MsgAcceptAction {
|
|||||||
// Don't allow dynamic updates, because then the sections can contain a whole bunch of RRs.
|
// Don't allow dynamic updates, because then the sections can contain a whole bunch of RRs.
|
||||||
opcode := int(dh.Bits>>11) & 0xF
|
opcode := int(dh.Bits>>11) & 0xF
|
||||||
if opcode != OpcodeQuery && opcode != OpcodeNotify {
|
if opcode != OpcodeQuery && opcode != OpcodeNotify {
|
||||||
return MsgReject
|
return MsgRejectNotImplemented
|
||||||
}
|
}
|
||||||
|
|
||||||
if isZero := dh.Bits&_Z != 0; isZero {
|
|
||||||
return MsgReject
|
|
||||||
}
|
|
||||||
if dh.Qdcount != 1 {
|
if dh.Qdcount != 1 {
|
||||||
return MsgReject
|
return MsgReject
|
||||||
}
|
}
|
||||||
|
|||||||
83
vendor/github.com/miekg/dns/client.go
сгенерированный
поставляемый
83
vendor/github.com/miekg/dns/client.go
сгенерированный
поставляемый
@@ -6,6 +6,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -128,20 +129,15 @@ func (c *Client) Exchange(m *Msg, address string) (r *Msg, rtt time.Duration, er
|
|||||||
return c.exchange(m, address)
|
return c.exchange(m, address)
|
||||||
}
|
}
|
||||||
|
|
||||||
t := "nop"
|
q := m.Question[0]
|
||||||
if t1, ok := TypeToString[m.Question[0].Qtype]; ok {
|
key := fmt.Sprintf("%s:%d:%d", q.Name, q.Qtype, q.Qclass)
|
||||||
t = t1
|
r, rtt, err, shared := c.group.Do(key, func() (*Msg, time.Duration, error) {
|
||||||
}
|
|
||||||
cl := "nop"
|
|
||||||
if cl1, ok := ClassToString[m.Question[0].Qclass]; ok {
|
|
||||||
cl = cl1
|
|
||||||
}
|
|
||||||
r, rtt, err, shared := c.group.Do(m.Question[0].Name+t+cl, func() (*Msg, time.Duration, error) {
|
|
||||||
return c.exchange(m, address)
|
return c.exchange(m, address)
|
||||||
})
|
})
|
||||||
if r != nil && shared {
|
if r != nil && shared {
|
||||||
r = r.Copy()
|
r = r.Copy()
|
||||||
}
|
}
|
||||||
|
|
||||||
return r, rtt, err
|
return r, rtt, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,8 +215,15 @@ func (co *Conn) ReadMsgHeader(hdr *Header) ([]byte, error) {
|
|||||||
n int
|
n int
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
switch co.Conn.(type) {
|
|
||||||
case *net.TCPConn, *tls.Conn:
|
if _, ok := co.Conn.(net.PacketConn); ok {
|
||||||
|
if co.UDPSize > MinMsgSize {
|
||||||
|
p = make([]byte, co.UDPSize)
|
||||||
|
} else {
|
||||||
|
p = make([]byte, MinMsgSize)
|
||||||
|
}
|
||||||
|
n, err = co.Read(p)
|
||||||
|
} else {
|
||||||
var length uint16
|
var length uint16
|
||||||
if err := binary.Read(co.Conn, binary.BigEndian, &length); err != nil {
|
if err := binary.Read(co.Conn, binary.BigEndian, &length); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -228,13 +231,6 @@ func (co *Conn) ReadMsgHeader(hdr *Header) ([]byte, error) {
|
|||||||
|
|
||||||
p = make([]byte, length)
|
p = make([]byte, length)
|
||||||
n, err = io.ReadFull(co.Conn, p)
|
n, err = io.ReadFull(co.Conn, p)
|
||||||
default:
|
|
||||||
if co.UDPSize > MinMsgSize {
|
|
||||||
p = make([]byte, co.UDPSize)
|
|
||||||
} else {
|
|
||||||
p = make([]byte, MinMsgSize)
|
|
||||||
}
|
|
||||||
n, err = co.Read(p)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -260,22 +256,20 @@ func (co *Conn) Read(p []byte) (n int, err error) {
|
|||||||
return 0, ErrConnEmpty
|
return 0, ErrConnEmpty
|
||||||
}
|
}
|
||||||
|
|
||||||
switch co.Conn.(type) {
|
if _, ok := co.Conn.(net.PacketConn); ok {
|
||||||
case *net.TCPConn, *tls.Conn:
|
// UDP connection
|
||||||
var length uint16
|
return co.Conn.Read(p)
|
||||||
if err := binary.Read(co.Conn, binary.BigEndian, &length); err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
if int(length) > len(p) {
|
|
||||||
return 0, io.ErrShortBuffer
|
|
||||||
}
|
|
||||||
|
|
||||||
n, err := io.ReadFull(co.Conn, p[:length])
|
|
||||||
return int(n), err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// UDP connection
|
var length uint16
|
||||||
return co.Conn.Read(p)
|
if err := binary.Read(co.Conn, binary.BigEndian, &length); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if int(length) > len(p) {
|
||||||
|
return 0, io.ErrShortBuffer
|
||||||
|
}
|
||||||
|
|
||||||
|
return io.ReadFull(co.Conn, p[:length])
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteMsg sends a message through the connection co.
|
// WriteMsg sends a message through the connection co.
|
||||||
@@ -302,21 +296,20 @@ func (co *Conn) WriteMsg(m *Msg) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Write implements the net.Conn Write method.
|
// Write implements the net.Conn Write method.
|
||||||
func (co *Conn) Write(p []byte) (n int, err error) {
|
func (co *Conn) Write(p []byte) (int, error) {
|
||||||
switch co.Conn.(type) {
|
if len(p) > MaxMsgSize {
|
||||||
case *net.TCPConn, *tls.Conn:
|
return 0, &Error{err: "message too large"}
|
||||||
if len(p) > MaxMsgSize {
|
|
||||||
return 0, &Error{err: "message too large"}
|
|
||||||
}
|
|
||||||
|
|
||||||
l := make([]byte, 2)
|
|
||||||
binary.BigEndian.PutUint16(l, uint16(len(p)))
|
|
||||||
|
|
||||||
n, err := (&net.Buffers{l, p}).WriteTo(co.Conn)
|
|
||||||
return int(n), err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return co.Conn.Write(p)
|
if _, ok := co.Conn.(net.PacketConn); ok {
|
||||||
|
return co.Conn.Write(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
l := make([]byte, 2)
|
||||||
|
binary.BigEndian.PutUint16(l, uint16(len(p)))
|
||||||
|
|
||||||
|
n, err := (&net.Buffers{l, p}).WriteTo(co.Conn)
|
||||||
|
return int(n), err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the appropriate timeout for a specific request
|
// Return the appropriate timeout for a specific request
|
||||||
|
|||||||
8
vendor/github.com/miekg/dns/clientconfig.go
сгенерированный
поставляемый
8
vendor/github.com/miekg/dns/clientconfig.go
сгенерированный
поставляемый
@@ -68,14 +68,10 @@ func ClientConfigFromReader(resolvconf io.Reader) (*ClientConfig, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case "search": // set search path to given servers
|
case "search": // set search path to given servers
|
||||||
c.Search = make([]string, len(f)-1)
|
c.Search = append([]string(nil), f[1:]...)
|
||||||
for i := 0; i < len(c.Search); i++ {
|
|
||||||
c.Search[i] = f[i+1]
|
|
||||||
}
|
|
||||||
|
|
||||||
case "options": // magic options
|
case "options": // magic options
|
||||||
for i := 1; i < len(f); i++ {
|
for _, s := range f[1:] {
|
||||||
s := f[i]
|
|
||||||
switch {
|
switch {
|
||||||
case len(s) >= 6 && s[:6] == "ndots:":
|
case len(s) >= 6 && s[:6] == "ndots:":
|
||||||
n, _ := strconv.Atoi(s[6:])
|
n, _ := strconv.Atoi(s[6:])
|
||||||
|
|||||||
22
vendor/github.com/miekg/dns/defaults.go
сгенерированный
поставляемый
22
vendor/github.com/miekg/dns/defaults.go
сгенерированный
поставляемый
@@ -146,10 +146,9 @@ func (dns *Msg) IsTsig() *TSIG {
|
|||||||
// record in the additional section will do. It returns the OPT record
|
// record in the additional section will do. It returns the OPT record
|
||||||
// found or nil.
|
// found or nil.
|
||||||
func (dns *Msg) IsEdns0() *OPT {
|
func (dns *Msg) IsEdns0() *OPT {
|
||||||
// EDNS0 is at the end of the additional section, start there.
|
// RFC 6891, Section 6.1.1 allows the OPT record to appear
|
||||||
// We might want to change this to *only* look at the last two
|
// anywhere in the additional record section, but it's usually at
|
||||||
// records. So we see TSIG and/or OPT - this a slightly bigger
|
// the end so start there.
|
||||||
// change though.
|
|
||||||
for i := len(dns.Extra) - 1; i >= 0; i-- {
|
for i := len(dns.Extra) - 1; i >= 0; i-- {
|
||||||
if dns.Extra[i].Header().Rrtype == TypeOPT {
|
if dns.Extra[i].Header().Rrtype == TypeOPT {
|
||||||
return dns.Extra[i].(*OPT)
|
return dns.Extra[i].(*OPT)
|
||||||
@@ -158,6 +157,21 @@ func (dns *Msg) IsEdns0() *OPT {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// popEdns0 is like IsEdns0, but it removes the record from the message.
|
||||||
|
func (dns *Msg) popEdns0() *OPT {
|
||||||
|
// RFC 6891, Section 6.1.1 allows the OPT record to appear
|
||||||
|
// anywhere in the additional record section, but it's usually at
|
||||||
|
// the end so start there.
|
||||||
|
for i := len(dns.Extra) - 1; i >= 0; i-- {
|
||||||
|
if dns.Extra[i].Header().Rrtype == TypeOPT {
|
||||||
|
opt := dns.Extra[i].(*OPT)
|
||||||
|
dns.Extra = append(dns.Extra[:i], dns.Extra[i+1:]...)
|
||||||
|
return opt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// IsDomainName checks if s is a valid domain name, it returns the number of
|
// IsDomainName checks if s is a valid domain name, it returns the number of
|
||||||
// labels and true, when a domain name is valid. Note that non fully qualified
|
// labels and true, when a domain name is valid. Note that non fully qualified
|
||||||
// domain name is considered valid, in this case the last label is counted in
|
// domain name is considered valid, in this case the last label is counted in
|
||||||
|
|||||||
4
vendor/github.com/miekg/dns/dns.go
сгенерированный
поставляемый
4
vendor/github.com/miekg/dns/dns.go
сгенерированный
поставляемый
@@ -54,7 +54,7 @@ type RR interface {
|
|||||||
// parse parses an RR from zone file format.
|
// parse parses an RR from zone file format.
|
||||||
//
|
//
|
||||||
// This will only be called on a new and empty RR type with only the header populated.
|
// This will only be called on a new and empty RR type with only the header populated.
|
||||||
parse(c *zlexer, origin, file string) *ParseError
|
parse(c *zlexer, origin string) *ParseError
|
||||||
|
|
||||||
// isDuplicate returns whether the two RRs are duplicates.
|
// isDuplicate returns whether the two RRs are duplicates.
|
||||||
isDuplicate(r2 RR) bool
|
isDuplicate(r2 RR) bool
|
||||||
@@ -105,7 +105,7 @@ func (h *RR_Header) unpack(msg []byte, off int) (int, error) {
|
|||||||
panic("dns: internal error: unpack should never be called on RR_Header")
|
panic("dns: internal error: unpack should never be called on RR_Header")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *RR_Header) parse(c *zlexer, origin, file string) *ParseError {
|
func (h *RR_Header) parse(c *zlexer, origin string) *ParseError {
|
||||||
panic("dns: internal error: parse should never be called on RR_Header")
|
panic("dns: internal error: parse should never be called on RR_Header")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
32
vendor/github.com/miekg/dns/dnssec.go
сгенерированный
поставляемый
32
vendor/github.com/miekg/dns/dnssec.go
сгенерированный
поставляемый
@@ -141,8 +141,8 @@ func (k *DNSKEY) KeyTag() uint16 {
|
|||||||
switch k.Algorithm {
|
switch k.Algorithm {
|
||||||
case RSAMD5:
|
case RSAMD5:
|
||||||
// Look at the bottom two bytes of the modules, which the last
|
// Look at the bottom two bytes of the modules, which the last
|
||||||
// item in the pubkey. We could do this faster by looking directly
|
// item in the pubkey.
|
||||||
// at the base64 values. But I'm lazy.
|
// This algorithm has been deprecated, but keep this key-tag calculation.
|
||||||
modulus, _ := fromBase64([]byte(k.PublicKey))
|
modulus, _ := fromBase64([]byte(k.PublicKey))
|
||||||
if len(modulus) > 1 {
|
if len(modulus) > 1 {
|
||||||
x := binary.BigEndian.Uint16(modulus[len(modulus)-2:])
|
x := binary.BigEndian.Uint16(modulus[len(modulus)-2:])
|
||||||
@@ -318,6 +318,9 @@ func (rr *RRSIG) Sign(k crypto.Signer, rrset []RR) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
rr.Signature = toBase64(signature)
|
rr.Signature = toBase64(signature)
|
||||||
|
case RSAMD5, DSA, DSANSEC3SHA1:
|
||||||
|
// See RFC 6944.
|
||||||
|
return ErrAlg
|
||||||
default:
|
default:
|
||||||
h := hash.New()
|
h := hash.New()
|
||||||
h.Write(signdata)
|
h.Write(signdata)
|
||||||
@@ -556,19 +559,18 @@ func (k *DNSKEY) publicKeyRSA() *rsa.PublicKey {
|
|||||||
pubkey := new(rsa.PublicKey)
|
pubkey := new(rsa.PublicKey)
|
||||||
|
|
||||||
var expo uint64
|
var expo uint64
|
||||||
for i := 0; i < int(explen); i++ {
|
// The exponent of length explen is between keyoff and modoff.
|
||||||
|
for _, v := range keybuf[keyoff:modoff] {
|
||||||
expo <<= 8
|
expo <<= 8
|
||||||
expo |= uint64(keybuf[keyoff+i])
|
expo |= uint64(v)
|
||||||
}
|
}
|
||||||
if expo > 1<<31-1 {
|
if expo > 1<<31-1 {
|
||||||
// Larger exponent than supported by the crypto package.
|
// Larger exponent than supported by the crypto package.
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
pubkey.E = int(expo)
|
pubkey.E = int(expo)
|
||||||
|
pubkey.N = new(big.Int).SetBytes(keybuf[modoff:])
|
||||||
pubkey.N = big.NewInt(0)
|
|
||||||
pubkey.N.SetBytes(keybuf[modoff:])
|
|
||||||
|
|
||||||
return pubkey
|
return pubkey
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -593,10 +595,8 @@ func (k *DNSKEY) publicKeyECDSA() *ecdsa.PublicKey {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pubkey.X = big.NewInt(0)
|
pubkey.X = new(big.Int).SetBytes(keybuf[:len(keybuf)/2])
|
||||||
pubkey.X.SetBytes(keybuf[:len(keybuf)/2])
|
pubkey.Y = new(big.Int).SetBytes(keybuf[len(keybuf)/2:])
|
||||||
pubkey.Y = big.NewInt(0)
|
|
||||||
pubkey.Y.SetBytes(keybuf[len(keybuf)/2:])
|
|
||||||
return pubkey
|
return pubkey
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -617,10 +617,10 @@ func (k *DNSKEY) publicKeyDSA() *dsa.PublicKey {
|
|||||||
p, keybuf := keybuf[:size], keybuf[size:]
|
p, keybuf := keybuf[:size], keybuf[size:]
|
||||||
g, y := keybuf[:size], keybuf[size:]
|
g, y := keybuf[:size], keybuf[size:]
|
||||||
pubkey := new(dsa.PublicKey)
|
pubkey := new(dsa.PublicKey)
|
||||||
pubkey.Parameters.Q = big.NewInt(0).SetBytes(q)
|
pubkey.Parameters.Q = new(big.Int).SetBytes(q)
|
||||||
pubkey.Parameters.P = big.NewInt(0).SetBytes(p)
|
pubkey.Parameters.P = new(big.Int).SetBytes(p)
|
||||||
pubkey.Parameters.G = big.NewInt(0).SetBytes(g)
|
pubkey.Parameters.G = new(big.Int).SetBytes(g)
|
||||||
pubkey.Y = big.NewInt(0).SetBytes(y)
|
pubkey.Y = new(big.Int).SetBytes(y)
|
||||||
return pubkey
|
return pubkey
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
46
vendor/github.com/miekg/dns/dnssec_keygen.go
сгенерированный
поставляемый
46
vendor/github.com/miekg/dns/dnssec_keygen.go
сгенерированный
поставляемый
@@ -2,7 +2,6 @@ package dns
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto"
|
"crypto"
|
||||||
"crypto/dsa"
|
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"crypto/elliptic"
|
"crypto/elliptic"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
@@ -20,11 +19,9 @@ import (
|
|||||||
// bits should be set to the size of the algorithm.
|
// bits should be set to the size of the algorithm.
|
||||||
func (k *DNSKEY) Generate(bits int) (crypto.PrivateKey, error) {
|
func (k *DNSKEY) Generate(bits int) (crypto.PrivateKey, error) {
|
||||||
switch k.Algorithm {
|
switch k.Algorithm {
|
||||||
case DSA, DSANSEC3SHA1:
|
case RSAMD5, DSA, DSANSEC3SHA1:
|
||||||
if bits != 1024 {
|
return nil, ErrAlg
|
||||||
return nil, ErrKeySize
|
case RSASHA1, RSASHA256, RSASHA1NSEC3SHA1:
|
||||||
}
|
|
||||||
case RSAMD5, RSASHA1, RSASHA256, RSASHA1NSEC3SHA1:
|
|
||||||
if bits < 512 || bits > 4096 {
|
if bits < 512 || bits > 4096 {
|
||||||
return nil, ErrKeySize
|
return nil, ErrKeySize
|
||||||
}
|
}
|
||||||
@@ -47,20 +44,7 @@ func (k *DNSKEY) Generate(bits int) (crypto.PrivateKey, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch k.Algorithm {
|
switch k.Algorithm {
|
||||||
case DSA, DSANSEC3SHA1:
|
case RSASHA1, RSASHA256, RSASHA512, RSASHA1NSEC3SHA1:
|
||||||
params := new(dsa.Parameters)
|
|
||||||
if err := dsa.GenerateParameters(params, rand.Reader, dsa.L1024N160); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
priv := new(dsa.PrivateKey)
|
|
||||||
priv.PublicKey.Parameters = *params
|
|
||||||
err := dsa.GenerateKey(priv, rand.Reader)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
k.setPublicKeyDSA(params.Q, params.P, params.G, priv.PublicKey.Y)
|
|
||||||
return priv, nil
|
|
||||||
case RSAMD5, RSASHA1, RSASHA256, RSASHA512, RSASHA1NSEC3SHA1:
|
|
||||||
priv, err := rsa.GenerateKey(rand.Reader, bits)
|
priv, err := rsa.GenerateKey(rand.Reader, bits)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -120,16 +104,6 @@ func (k *DNSKEY) setPublicKeyECDSA(_X, _Y *big.Int) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the public key for DSA
|
|
||||||
func (k *DNSKEY) setPublicKeyDSA(_Q, _P, _G, _Y *big.Int) bool {
|
|
||||||
if _Q == nil || _P == nil || _G == nil || _Y == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
buf := dsaToBuf(_Q, _P, _G, _Y)
|
|
||||||
k.PublicKey = toBase64(buf)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the public key for Ed25519
|
// Set the public key for Ed25519
|
||||||
func (k *DNSKEY) setPublicKeyED25519(_K ed25519.PublicKey) bool {
|
func (k *DNSKEY) setPublicKeyED25519(_K ed25519.PublicKey) bool {
|
||||||
if _K == nil {
|
if _K == nil {
|
||||||
@@ -164,15 +138,3 @@ func curveToBuf(_X, _Y *big.Int, intlen int) []byte {
|
|||||||
buf = append(buf, intToBytes(_Y, intlen)...)
|
buf = append(buf, intToBytes(_Y, intlen)...)
|
||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the public key for X and Y for Curve. The two
|
|
||||||
// values are just concatenated.
|
|
||||||
func dsaToBuf(_Q, _P, _G, _Y *big.Int) []byte {
|
|
||||||
t := divRoundUp(divRoundUp(_G.BitLen(), 8)-64, 8)
|
|
||||||
buf := []byte{byte(t)}
|
|
||||||
buf = append(buf, intToBytes(_Q, 20)...)
|
|
||||||
buf = append(buf, intToBytes(_P, 64+t*8)...)
|
|
||||||
buf = append(buf, intToBytes(_G, 64+t*8)...)
|
|
||||||
buf = append(buf, intToBytes(_Y, 64+t*8)...)
|
|
||||||
return buf
|
|
||||||
}
|
|
||||||
|
|||||||
51
vendor/github.com/miekg/dns/dnssec_keyscan.go
сгенерированный
поставляемый
51
vendor/github.com/miekg/dns/dnssec_keyscan.go
сгенерированный
поставляемый
@@ -3,7 +3,6 @@ package dns
|
|||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"crypto"
|
"crypto"
|
||||||
"crypto/dsa"
|
|
||||||
"crypto/ecdsa"
|
"crypto/ecdsa"
|
||||||
"crypto/rsa"
|
"crypto/rsa"
|
||||||
"io"
|
"io"
|
||||||
@@ -44,19 +43,8 @@ func (k *DNSKEY) ReadPrivateKey(q io.Reader, file string) (crypto.PrivateKey, er
|
|||||||
return nil, ErrPrivKey
|
return nil, ErrPrivKey
|
||||||
}
|
}
|
||||||
switch uint8(algo) {
|
switch uint8(algo) {
|
||||||
case DSA:
|
case RSAMD5, DSA, DSANSEC3SHA1:
|
||||||
priv, err := readPrivateKeyDSA(m)
|
return nil, ErrAlg
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
pub := k.publicKeyDSA()
|
|
||||||
if pub == nil {
|
|
||||||
return nil, ErrKey
|
|
||||||
}
|
|
||||||
priv.PublicKey = *pub
|
|
||||||
return priv, nil
|
|
||||||
case RSAMD5:
|
|
||||||
fallthrough
|
|
||||||
case RSASHA1:
|
case RSASHA1:
|
||||||
fallthrough
|
fallthrough
|
||||||
case RSASHA1NSEC3SHA1:
|
case RSASHA1NSEC3SHA1:
|
||||||
@@ -109,21 +97,16 @@ func readPrivateKeyRSA(m map[string]string) (*rsa.PrivateKey, error) {
|
|||||||
}
|
}
|
||||||
switch k {
|
switch k {
|
||||||
case "modulus":
|
case "modulus":
|
||||||
p.PublicKey.N = big.NewInt(0)
|
p.PublicKey.N = new(big.Int).SetBytes(v1)
|
||||||
p.PublicKey.N.SetBytes(v1)
|
|
||||||
case "publicexponent":
|
case "publicexponent":
|
||||||
i := big.NewInt(0)
|
i := new(big.Int).SetBytes(v1)
|
||||||
i.SetBytes(v1)
|
|
||||||
p.PublicKey.E = int(i.Int64()) // int64 should be large enough
|
p.PublicKey.E = int(i.Int64()) // int64 should be large enough
|
||||||
case "privateexponent":
|
case "privateexponent":
|
||||||
p.D = big.NewInt(0)
|
p.D = new(big.Int).SetBytes(v1)
|
||||||
p.D.SetBytes(v1)
|
|
||||||
case "prime1":
|
case "prime1":
|
||||||
p.Primes[0] = big.NewInt(0)
|
p.Primes[0] = new(big.Int).SetBytes(v1)
|
||||||
p.Primes[0].SetBytes(v1)
|
|
||||||
case "prime2":
|
case "prime2":
|
||||||
p.Primes[1] = big.NewInt(0)
|
p.Primes[1] = new(big.Int).SetBytes(v1)
|
||||||
p.Primes[1].SetBytes(v1)
|
|
||||||
}
|
}
|
||||||
case "exponent1", "exponent2", "coefficient":
|
case "exponent1", "exponent2", "coefficient":
|
||||||
// not used in Go (yet)
|
// not used in Go (yet)
|
||||||
@@ -134,27 +117,9 @@ func readPrivateKeyRSA(m map[string]string) (*rsa.PrivateKey, error) {
|
|||||||
return p, nil
|
return p, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func readPrivateKeyDSA(m map[string]string) (*dsa.PrivateKey, error) {
|
|
||||||
p := new(dsa.PrivateKey)
|
|
||||||
p.X = big.NewInt(0)
|
|
||||||
for k, v := range m {
|
|
||||||
switch k {
|
|
||||||
case "private_value(x)":
|
|
||||||
v1, err := fromBase64([]byte(v))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
p.X.SetBytes(v1)
|
|
||||||
case "created", "publish", "activate":
|
|
||||||
/* not used in Go (yet) */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return p, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func readPrivateKeyECDSA(m map[string]string) (*ecdsa.PrivateKey, error) {
|
func readPrivateKeyECDSA(m map[string]string) (*ecdsa.PrivateKey, error) {
|
||||||
p := new(ecdsa.PrivateKey)
|
p := new(ecdsa.PrivateKey)
|
||||||
p.D = big.NewInt(0)
|
p.D = new(big.Int)
|
||||||
// TODO: validate that the required flags are present
|
// TODO: validate that the required flags are present
|
||||||
for k, v := range m {
|
for k, v := range m {
|
||||||
switch k {
|
switch k {
|
||||||
|
|||||||
13
vendor/github.com/miekg/dns/dnssec_privkey.go
сгенерированный
поставляемый
13
vendor/github.com/miekg/dns/dnssec_privkey.go
сгенерированный
поставляемый
@@ -13,6 +13,8 @@ import (
|
|||||||
|
|
||||||
const format = "Private-key-format: v1.3\n"
|
const format = "Private-key-format: v1.3\n"
|
||||||
|
|
||||||
|
var bigIntOne = big.NewInt(1)
|
||||||
|
|
||||||
// PrivateKeyString converts a PrivateKey to a string. This string has the same
|
// PrivateKeyString converts a PrivateKey to a string. This string has the same
|
||||||
// format as the private-key-file of BIND9 (Private-key-format: v1.3).
|
// format as the private-key-file of BIND9 (Private-key-format: v1.3).
|
||||||
// It needs some info from the key (the algorithm), so its a method of the DNSKEY
|
// It needs some info from the key (the algorithm), so its a method of the DNSKEY
|
||||||
@@ -31,12 +33,11 @@ func (r *DNSKEY) PrivateKeyString(p crypto.PrivateKey) string {
|
|||||||
prime2 := toBase64(p.Primes[1].Bytes())
|
prime2 := toBase64(p.Primes[1].Bytes())
|
||||||
// Calculate Exponent1/2 and Coefficient as per: http://en.wikipedia.org/wiki/RSA#Using_the_Chinese_remainder_algorithm
|
// Calculate Exponent1/2 and Coefficient as per: http://en.wikipedia.org/wiki/RSA#Using_the_Chinese_remainder_algorithm
|
||||||
// and from: http://code.google.com/p/go/issues/detail?id=987
|
// and from: http://code.google.com/p/go/issues/detail?id=987
|
||||||
one := big.NewInt(1)
|
p1 := new(big.Int).Sub(p.Primes[0], bigIntOne)
|
||||||
p1 := big.NewInt(0).Sub(p.Primes[0], one)
|
q1 := new(big.Int).Sub(p.Primes[1], bigIntOne)
|
||||||
q1 := big.NewInt(0).Sub(p.Primes[1], one)
|
exp1 := new(big.Int).Mod(p.D, p1)
|
||||||
exp1 := big.NewInt(0).Mod(p.D, p1)
|
exp2 := new(big.Int).Mod(p.D, q1)
|
||||||
exp2 := big.NewInt(0).Mod(p.D, q1)
|
coeff := new(big.Int).ModInverse(p.Primes[1], p.Primes[0])
|
||||||
coeff := big.NewInt(0).ModInverse(p.Primes[1], p.Primes[0])
|
|
||||||
|
|
||||||
exponent1 := toBase64(exp1.Bytes())
|
exponent1 := toBase64(exp1.Bytes())
|
||||||
exponent2 := toBase64(exp2.Bytes())
|
exponent2 := toBase64(exp2.Bytes())
|
||||||
|
|||||||
24
vendor/github.com/miekg/dns/edns.go
сгенерированный
поставляемый
24
vendor/github.com/miekg/dns/edns.go
сгенерированный
поставляемый
@@ -80,15 +80,15 @@ func (rr *OPT) String() string {
|
|||||||
|
|
||||||
func (rr *OPT) len(off int, compression map[string]struct{}) int {
|
func (rr *OPT) len(off int, compression map[string]struct{}) int {
|
||||||
l := rr.Hdr.len(off, compression)
|
l := rr.Hdr.len(off, compression)
|
||||||
for i := 0; i < len(rr.Option); i++ {
|
for _, o := range rr.Option {
|
||||||
l += 4 // Account for 2-byte option code and 2-byte option length.
|
l += 4 // Account for 2-byte option code and 2-byte option length.
|
||||||
lo, _ := rr.Option[i].pack()
|
lo, _ := o.pack()
|
||||||
l += len(lo)
|
l += len(lo)
|
||||||
}
|
}
|
||||||
return l
|
return l
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rr *OPT) parse(c *zlexer, origin, file string) *ParseError {
|
func (rr *OPT) parse(c *zlexer, origin string) *ParseError {
|
||||||
panic("dns: internal error: parse should never be called on OPT")
|
panic("dns: internal error: parse should never be called on OPT")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -453,11 +453,11 @@ func (e *EDNS0_DAU) unpack(b []byte) error { e.AlgCode = b; return nil }
|
|||||||
|
|
||||||
func (e *EDNS0_DAU) String() string {
|
func (e *EDNS0_DAU) String() string {
|
||||||
s := ""
|
s := ""
|
||||||
for i := 0; i < len(e.AlgCode); i++ {
|
for _, alg := range e.AlgCode {
|
||||||
if a, ok := AlgorithmToString[e.AlgCode[i]]; ok {
|
if a, ok := AlgorithmToString[alg]; ok {
|
||||||
s += " " + a
|
s += " " + a
|
||||||
} else {
|
} else {
|
||||||
s += " " + strconv.Itoa(int(e.AlgCode[i]))
|
s += " " + strconv.Itoa(int(alg))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return s
|
return s
|
||||||
@@ -477,11 +477,11 @@ func (e *EDNS0_DHU) unpack(b []byte) error { e.AlgCode = b; return nil }
|
|||||||
|
|
||||||
func (e *EDNS0_DHU) String() string {
|
func (e *EDNS0_DHU) String() string {
|
||||||
s := ""
|
s := ""
|
||||||
for i := 0; i < len(e.AlgCode); i++ {
|
for _, alg := range e.AlgCode {
|
||||||
if a, ok := HashToString[e.AlgCode[i]]; ok {
|
if a, ok := HashToString[alg]; ok {
|
||||||
s += " " + a
|
s += " " + a
|
||||||
} else {
|
} else {
|
||||||
s += " " + strconv.Itoa(int(e.AlgCode[i]))
|
s += " " + strconv.Itoa(int(alg))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return s
|
return s
|
||||||
@@ -502,11 +502,11 @@ func (e *EDNS0_N3U) unpack(b []byte) error { e.AlgCode = b; return nil }
|
|||||||
func (e *EDNS0_N3U) String() string {
|
func (e *EDNS0_N3U) String() string {
|
||||||
// Re-use the hash map
|
// Re-use the hash map
|
||||||
s := ""
|
s := ""
|
||||||
for i := 0; i < len(e.AlgCode); i++ {
|
for _, alg := range e.AlgCode {
|
||||||
if a, ok := HashToString[e.AlgCode[i]]; ok {
|
if a, ok := HashToString[alg]; ok {
|
||||||
s += " " + a
|
s += " " + a
|
||||||
} else {
|
} else {
|
||||||
s += " " + strconv.Itoa(int(e.AlgCode[i]))
|
s += " " + strconv.Itoa(int(alg))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return s
|
return s
|
||||||
|
|||||||
6
vendor/github.com/miekg/dns/format.go
сгенерированный
поставляемый
6
vendor/github.com/miekg/dns/format.go
сгенерированный
поставляемый
@@ -31,6 +31,9 @@ func Field(r RR, i int) string {
|
|||||||
switch reflect.ValueOf(r).Elem().Type().Field(i).Tag {
|
switch reflect.ValueOf(r).Elem().Type().Field(i).Tag {
|
||||||
case `dns:"a"`:
|
case `dns:"a"`:
|
||||||
// TODO(miek): Hmm store this as 16 bytes
|
// TODO(miek): Hmm store this as 16 bytes
|
||||||
|
if d.Len() < net.IPv4len {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
if d.Len() < net.IPv6len {
|
if d.Len() < net.IPv6len {
|
||||||
return net.IPv4(byte(d.Index(0).Uint()),
|
return net.IPv4(byte(d.Index(0).Uint()),
|
||||||
byte(d.Index(1).Uint()),
|
byte(d.Index(1).Uint()),
|
||||||
@@ -42,6 +45,9 @@ func Field(r RR, i int) string {
|
|||||||
byte(d.Index(14).Uint()),
|
byte(d.Index(14).Uint()),
|
||||||
byte(d.Index(15).Uint())).String()
|
byte(d.Index(15).Uint())).String()
|
||||||
case `dns:"aaaa"`:
|
case `dns:"aaaa"`:
|
||||||
|
if d.Len() < net.IPv6len {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
return net.IP{
|
return net.IP{
|
||||||
byte(d.Index(0).Uint()),
|
byte(d.Index(0).Uint()),
|
||||||
byte(d.Index(1).Uint()),
|
byte(d.Index(1).Uint()),
|
||||||
|
|||||||
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Ссылка в новой задаче
Block a user