diff --git a/go.mod b/go.mod index 80285c947716dfab3bdd97c2c8036267f3014f63..becae21189431182285be017b184f196c686405c 100644 --- a/go.mod +++ b/go.mod @@ -4,43 +4,18 @@ go 1.13 require ( git.zgwit.com/iot/beeq v0.0.7 - github.com/ajg/form v1.5.1 // indirect - github.com/andybalholm/brotli v1.0.1-0.20200619015827-c3da72aa01ed // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/denisbrodbeck/machineid v1.0.1 - github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072 // indirect github.com/go-sql-driver/mysql v1.5.0 github.com/golang/snappy v0.0.1 // indirect - github.com/google/go-querystring v1.0.0 // indirect - github.com/gorilla/websocket v1.4.2 // indirect - github.com/imkira/go-interpol v1.1.0 // indirect - github.com/iris-contrib/jade v1.1.4 // indirect - github.com/iris-contrib/schema v0.0.2 // indirect - github.com/json-iterator/go v1.1.10 // indirect - github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 // indirect - github.com/kataras/golog v0.0.18 // indirect - github.com/kataras/iris/v12 v12.1.8 - github.com/klauspost/compress v1.10.10 // indirect - github.com/mattn/go-colorable v0.1.8 // indirect - github.com/microcosm-cc/bluemonday v1.0.3 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect - github.com/moul/http2curl v1.0.0 // indirect - github.com/sergi/go-diff v1.1.0 // indirect - github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect - github.com/smartystreets/goconvey v1.6.4 // indirect + github.com/gorilla/mux v1.8.0 + github.com/kr/pretty v0.1.0 // indirect github.com/stretchr/testify v1.6.1 // indirect - github.com/valyala/fasthttp v1.16.0 // indirect - github.com/xeipuuv/gojsonschema v1.2.0 // indirect - github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 // indirect - github.com/yudai/gojsondiff v1.0.0 // indirect - github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect - github.com/yudai/pp v2.0.1+incompatible // indirect - golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de // indirect golang.org/x/net v0.0.0-20200822124328-c89045814202 golang.org/x/sys v0.0.0-20200908134130-d2e65c121b96 // indirect golang.org/x/text v0.3.3 // indirect google.golang.org/protobuf v1.25.0 // indirect - gopkg.in/ini.v1 v1.57.0 // indirect + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect gopkg.in/yaml.v2 v2.2.8 gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect xorm.io/xorm v1.0.5 diff --git a/go.sum b/go.sum index e73f40891fe90faa0eddf003eae403e46ebdd01d..a822cb68c8e397c9c234caae72be4ef89927d083 100644 --- a/go.sum +++ b/go.sum @@ -3,72 +3,28 @@ git.zgwit.com/iot/beeq v0.0.7 h1:dkW8XVNg9MXDuKpYJcdr5ZgisD1beM8C/ZxVNd5KiKk= git.zgwit.com/iot/beeq v0.0.7/go.mod h1:De5ClL8bpgxLxVGkgLhSPqIpjRZtumdKGGUrz2svzqg= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGqTOXqu2aRi/XEQxDCBwM8yJtE6s= gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v3 v3.0.0 h1:1PwO5w5VCtlUUl+KTOBsTGZlhjWkcybsGaAau52tOy8= -github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= -github.com/Joker/hpp v1.0.0 h1:65+iuJYdRXv/XyN62C1uEmmOx3432rNG/rKlX6V7Kkc= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398 h1:WDC6ySpJzbxGWFh4aMxFFC28wwGp5pEuoTtvA4q/qQ4= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/andybalholm/brotli v1.0.0 h1:7UCwP93aiSfvWpapti8g88vVVGp2qqtGyePsSuDafo4= -github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.1-0.20200619015827-c3da72aa01ed h1:G/gj6aolvcaqMTCmlHRDsLLQlJ/fXTC4vE9o18KRZtw= -github.com/andybalholm/brotli v1.0.1-0.20200619015827-c3da72aa01ed/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= -github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible h1:Ppm0npCCsmuR9oQaBtRuZcmILVE74aXE+AmrJj8L2ns= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/chris-ramon/douceur v0.2.0 h1:IDMEdxlEUUBYBKE4z/mJnFyVXox+MjuEVDJNN27glkU= -github.com/chris-ramon/douceur v0.2.0/go.mod h1:wDW5xjJdeoMm1mRt4sD4c/LbF/mWdEpRXQKjTR8nIBE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -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-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -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.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denisbrodbeck/machineid v1.0.1 h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMSRhl4D7AQ= github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI= github.com/denisenkom/go-mssqldb v0.0.0-20200428022330-06a60b6afbbc/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072 h1:DddqAaWDpywytcG8w/qoQ5sAN8X12d3Z3koB0C3Rxsc= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= -github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gavv/httpexpect v2.0.0+incompatible h1:1X9kcRshkSKEjNJJxX9Y9mQ5BRfbxU5kORdjhlA1yX8= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127 h1:0gkP6mzaMqkmpcJYCFOLkIBwI7xFExG03bbkOkCvUPI= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/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/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -81,141 +37,35 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pO github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= 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-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= -github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= -github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/iris-contrib/blackfriday v2.0.0+incompatible h1:o5sHQHHm0ToHUlAJSTjW9UWicjJSDDauOOQ2AHuIVp4= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible h1:XZubAYg61/JwnJNbZilGjf3b3pB80+OQg2qf6c8BfWE= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/jade v1.1.3 h1:p7J/50I0cjo0wq/VWVCDFd8taPJbuFC+bq23SniRFX0= -github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= -github.com/iris-contrib/jade v1.1.4 h1:WoYdfyJFfZIUgqNAeOyRfTNQZOksSlZ6+FnXR3AEpX0= -github.com/iris-contrib/jade v1.1.4/go.mod h1:EDqR+ur9piDl6DUgs6qRrlfzmlx/D5UybogqrXvJTBE= -github.com/iris-contrib/pongo2 v0.0.1 h1:zGP7pW51oi5eQZMIlGA3I+FHY9/HOQWDB+572yin0to= -github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= -github.com/iris-contrib/schema v0.0.1 h1:10g/WnoRR+U+XXHWKBHeNy/+tZmM2kcAVGLOsz+yaDA= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= -github.com/iris-contrib/schema v0.0.2 h1:qd3RU2sLPaTTamv6BGn+PDD5Gmny+i3jO8xDAmWnNLs= -github.com/iris-contrib/schema v0.0.2/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= -github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/kataras/golog v0.0.10 h1:vRDRUmwacco/pmBAm8geLn8rHEdc+9Z4NAr5Sh7TG/4= -github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= -github.com/kataras/golog v0.0.18 h1:Td7hcKN25yzqB/0SO5iohOsMk5Mq5V9kDtM5apaJLY0= -github.com/kataras/golog v0.0.18/go.mod h1:jRYl7dFYqP8aQj9VkwdBUXYZSfUktm+YYg1arJILfyw= -github.com/kataras/iris/v12 v12.1.8 h1:O3gJasjm7ZxpxwTH8tApZsvf274scSGQAUpNe47c37U= -github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= -github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= -github.com/kataras/pio v0.0.2 h1:6NAi+uPJ/Zuid6mrAKlgpbI11/zK/lV4B2rxWaJN98Y= -github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= -github.com/kataras/pio v0.0.8 h1:6pX6nHJk7DAV3x1dEimibQF2CmJLlo0jWVmM9yE9KY8= -github.com/kataras/pio v0.0.8/go.mod h1:NFfMp2kVP1rmV4N6gH6qgWpuoDKlrOeYi3VrAIWCGsE= -github.com/kataras/sitemap v0.0.5 h1:4HCONX5RLgVy6G4RkYOV3vKNcma9p236LdGOipJsaFE= -github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= -github.com/klauspost/compress v1.9.7 h1:hYW1gP94JUmAhBtJ+LNz5My+gBobDxPR1iVuKug26aA= -github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.10.7 h1:7rix8v8GpI3ZBb0nSozFRgbtXKv+hOe+qfEpZqybrAg= -github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I= -github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.7.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA= github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= -github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -github.com/microcosm-cc/bluemonday v1.0.2 h1:5lPfLTTAvAbtS0VqT+94yOtFnGfUWYyx0+iToC3Os3s= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= -github.com/microcosm-cc/bluemonday v1.0.3 h1:EjVH7OqbU219kdm8acbveoclh2zZFqPJTJw6VUlTLAQ= -github.com/microcosm-cc/bluemonday v1.0.3/go.mod h1:8iwZnFn2CDDNZ0r6UXhF4xawGvzaqzCRa1n3/lO3W2w= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -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_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk= -github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -223,37 +73,11 @@ github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.16.0 h1:9zAqOYLl8Tuy3E5R6ckzGDJ1g8+pw15oQp2iL9Jl6gQ= -github.com/valyala/fasthttp v1.16.0/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl6TwOBhHCA= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3IfnEUduWvb9is428/nNb5L3U01M= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible h1:Q4//iY4pNF6yPLZIigmvcl7k/bPgrcTPIFIcmawg5bI= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -262,50 +86,33 @@ golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73r 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-20180906233101-161cd47e91fd/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-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200908134130-d2e65c121b96 h1:gJciq3lOg0eS9fSZJcoHfv7q1BfC6cJfnmSSKL1yu3Q= golang.org/x/sys v0.0.0-20200908134130-d2e65c121b96/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/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-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/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/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -330,19 +137,12 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogR gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/ini.v1 v1.51.1 h1:GyboHr4UqMiLUybYjd22ZjQIKEJEpgtLXtuGbR21Oho= -gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww= -gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= 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/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= diff --git a/models/project.go b/models/project.go index fa700bfab53d17f7e489af1ff3b927a7c6768146..07a2b4c6279c09a3753d827e6a34a276c35115e5 100644 --- a/models/project.go +++ b/models/project.go @@ -11,9 +11,9 @@ type Project struct { Version string `json:"version"` Disabled bool `json:"disabled"` + Created time.Time `json:"created" xorm:"created"` Updated time.Time `json:"updated" xorm:"updated"` - Deployed time.Time `json:"deployed"` //如果 deployed < updated,说明有更新,提示重新部署 } type ProjectElement struct { diff --git a/web/api/curd.go b/web/api/curd.go index da9d579c5ba64f87632b36fde4724a37e93c1c6b..07932ca8734661a9b374b217ab0ee8d049f2b572 100644 --- a/web/api/curd.go +++ b/web/api/curd.go @@ -1,9 +1,13 @@ package api import ( + "encoding/json" "git.zgwit.com/zgwit/iot-admin/db" - "github.com/kataras/iris/v12" + "github.com/gorilla/mux" + "io/ioutil" + "net/http" "reflect" + "strconv" ) type hook func(value interface{}) error @@ -18,14 +22,24 @@ func createSliceFromType(mod reflect.Type) interface{} { return ptr.Interface() } -func curdApiList(mod reflect.Type) iris.Handler { - return func(ctx iris.Context) { +func parseBody(request *http.Request, data interface{}) error { + body, err := ioutil.ReadAll(request.Body) + if err != nil { + return err + } + return json.Unmarshal(body, data) +} + +type Handler func(writer http.ResponseWriter, request *http.Request) + +func curdApiList(mod reflect.Type) Handler { + return func(writer http.ResponseWriter, request *http.Request) { datas := createSliceFromType(mod) var body paramSearch - err := ctx.ReadJSON(&body) + err := parseBody(request, &body) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } @@ -56,33 +70,29 @@ func curdApiList(mod reflect.Type) iris.Handler { } cnt, err := op.FindAndCount(datas) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } //replyOk(ctx, cs) - ctx.JSON(iris.Map{ - "ok": true, - "data": datas, - "total": cnt, - }) + replyList(writer, datas, cnt) } } -func curdApiListById(mod reflect.Type, field string) iris.Handler { - return func(ctx iris.Context) { +func curdApiListById(mod reflect.Type, field string) Handler { + return func(writer http.ResponseWriter, request *http.Request) { datas := createSliceFromType(mod) - id, err := ctx.URLParamInt64("id") + id, err := strconv.ParseInt(mux.Vars(request)["id"], 10, 64) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } var body paramSearch - err = ctx.ReadJSON(&body) + err = parseBody(request, &body) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } @@ -113,120 +123,116 @@ func curdApiListById(mod reflect.Type, field string) iris.Handler { } cnt, err := op.FindAndCount(datas) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } //replyOk(ctx, cs) - ctx.JSON(iris.Map{ - "ok": true, - "data": datas, - "total": cnt, - }) + replyList(writer, datas, cnt) } } -func curdApiCreate(mod reflect.Type, after hook) iris.Handler { - return func(ctx iris.Context) { +func curdApiCreate(mod reflect.Type, after hook) Handler { + return func(writer http.ResponseWriter, request *http.Request) { data := reflect.New(mod).Interface() - if err := ctx.ReadJSON(data); err != nil { - replyError(ctx, err) + if err := parseBody(request, data); err != nil { + replyError(writer, err) return } _, err := db.Engine.Insert(data) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } if after != nil { err = after(data) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } } - replyOk(ctx, data) + replyOk(writer, data) } } -func curdApiModify(mod reflect.Type, updateFields []string, after hook) iris.Handler { - return func(ctx iris.Context) { - id, err := ctx.URLParamInt64("id") +func curdApiModify(mod reflect.Type, updateFields []string, after hook) Handler { + return func(writer http.ResponseWriter, request *http.Request) { + id, err := strconv.ParseInt(mux.Vars(request)["id"], 10, 64) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } data := reflect.New(mod).Interface() - if err := ctx.ReadJSON(data); err != nil { - replyError(ctx, err) + if err := parseBody(request, data); err != nil { + replyError(writer, err) return } _, err = db.Engine.ID(id).Cols(updateFields...).Update(data) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } if after != nil { err = after(data) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } } - replyOk(ctx, data) + replyOk(writer, data) } } -func curdApiDelete(mod reflect.Type, after hook) iris.Handler { - return func(ctx iris.Context) { - id, err := ctx.URLParamInt64("id") +func curdApiDelete(mod reflect.Type, after hook) Handler { + return func(writer http.ResponseWriter, request *http.Request) { + id, err := strconv.ParseInt(mux.Vars(request)["id"], 10, 64) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } data := reflect.New(mod).Interface() _, err = db.Engine.ID(id).Delete(data) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } if after != nil { err = after(data) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } } - replyOk(ctx, nil) + replyOk(writer, nil) } } -func curdApiGet(mod reflect.Type) iris.Handler { - return func(ctx iris.Context) { - id, err := ctx.URLParamInt64("id") +func curdApiGet(mod reflect.Type) Handler { + return func(writer http.ResponseWriter, request *http.Request) { + id, err := strconv.ParseInt(mux.Vars(request)["id"], 10, 64) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } data := reflect.New(mod).Interface() has, err := db.Engine.ID(id).Get(data) if !has { - replyFail(ctx, "记录不存在") + replyFail(writer, "记录不存在") return } else if err != nil { - replyError(ctx, err) + replyError(writer, err) return } - replyOk(ctx, data) + replyOk(writer, data) } } diff --git a/web/api/project.go b/web/api/project.go index 77ea78797bdbea0abbe53cf279f7df5e7d026613..49c26ecab6972cbaefdce672c1a553d3128f4ecd 100644 --- a/web/api/project.go +++ b/web/api/project.go @@ -1,58 +1,17 @@ package api import ( - "git.zgwit.com/zgwit/iot-admin/db" - "git.zgwit.com/zgwit/iot-admin/models" - "github.com/kataras/iris/v12" + "net/http" ) -func projectImport(ctx iris.Context) { - var model models.Template +func projectImport(writer http.ResponseWriter, request *http.Request) { - err := ctx.ReadJSON(&model) - if err != nil { - replyError(ctx, err) - return - } - - replyOk(ctx, nil) } -func projectExport(ctx iris.Context) { - id, err := ctx.URLParamInt64("id") - if err != nil { - replyError(ctx, err) - return - } - - var model models.Template - has, err := db.Engine.ID(id).Table("model").Get(&model) - if !has { - replyFail(ctx, "记录不存在") - return - } - if err != nil { - replyError(ctx, err) - return - } - - //读取任务 - err = db.Engine.Where("model_id=?", id).Find(&model.Jobs) - if err != nil { - replyError(ctx, err) - return - } - - //读取策略 - err = db.Engine.Where("model_id=?", id).Find(&model.Strategies) - if err != nil { - replyError(ctx, err) - return - } +func projectExport(writer http.ResponseWriter, request *http.Request) { - replyOk(ctx, model) } -func projectDeploy(ctx iris.Context) { +func projectDeploy(writer http.ResponseWriter, request *http.Request) { } diff --git a/web/api/router.go b/web/api/router.go index f0bb869f4d0eaa624ca25332997c74bf4eddba0e..4475197dcabc5d540ac4feff797bc96b21d154fa 100644 --- a/web/api/router.go +++ b/web/api/router.go @@ -1,11 +1,11 @@ package api import ( + "encoding/json" "git.zgwit.com/zgwit/iot-admin/conf" "git.zgwit.com/zgwit/iot-admin/models" - "github.com/kataras/iris/v12" - "github.com/kataras/iris/v12/middleware/basicauth" - "github.com/kataras/iris/v12/sessions" + "github.com/gorilla/mux" + "net/http" "reflect" ) @@ -31,37 +31,37 @@ type paramId2 struct { Id int64 `uri:"id"` Id2 int64 `uri:"id2"` } - -var ( - cookieNameForSessionID ="iot-admin" - sess = sessions.New(sessions.Config{Cookie:cookieNameForSessionID}) -) - -func mustLogin(ctx iris.Context) { - session := sess.Start(ctx) - if user := session.Get("user"); user != nil { - ctx.Next() - } else { - //TODO 检查OAuth2返回的code,进一步获取用户信息,放置到session中 - - ctx.StatusCode(iris.StatusUnauthorized) - ctx.JSON(iris.Map{"ok": false, "error": "Unauthorized"}) - //ctx.Abort() - } -} - -func RegisterRoutes(app iris.Party) { +// +//var ( +// cookieNameForSessionID = "iot-admin" +// sess = sessions.New(sessions.Config{Cookie: cookieNameForSessionID}) +//) +// +//func mustLogin(ctx iris.Context) { +// session := sess.Start(ctx) +// if user := session.Get("user"); user != nil { +// ctx.Next() +// } else { +// //TODO 检查OAuth2返回的code,进一步获取用户信息,放置到session中 +// +// ctx.StatusCode(iris.StatusUnauthorized) +// ctx.JSON(iris.Map{"ok": false, "error": "Unauthorized"}) +// //ctx.Abort() +// } +//} + +func RegisterRoutes(app *mux.Router) { if conf.Config.SysAdmin.Enable { //检查 session,必须登录 - app.Use(mustLogin) + //app.Use(mustLogin) } else if conf.Config.BaseAuth.Enable { //检查HTTP认证 //app.Use(gin.BasicAuth(gin.Accounts(conf.Config.BaseAuth.Users))) - authConfig := basicauth.Config{ - Users: conf.Config.BaseAuth.Users, - } - app.Use(basicauth.New(authConfig)) + //authConfig := basicauth.Config{ + // Users: conf.Config.BaseAuth.Users, + //} + //app.Use(basicauth.New(authConfig)) } else { //支持匿名访问 } @@ -73,154 +73,174 @@ func RegisterRoutes(app iris.Party) { "register_enable", "register_regex", "register_min", "register_max", "heart_beat_enable", "heart_beat_interval", "heart_beat_content", "heart_beat_is_hex", "disabled"} - app.Post("/project/:id/tunnels", curdApiListById(mod, "project_id")) - app.Post("/tunnels", curdApiList(mod)) - app.Post("/tunnel", curdApiCreate(mod, nil)) //TODO 启动 - app.Delete("/tunnel/:id", curdApiDelete(mod, nil)) //TODO 停止 - app.Put("/tunnel/:id", curdApiModify(mod, fields, nil)) //TODO 重新启动 - app.Get("/tunnel/:id", curdApiGet(mod)) + app.HandleFunc("/project/:id/tunnels", curdApiListById(mod, "project_id")).Methods("POST") + app.HandleFunc("/tunnels", curdApiList(mod)).Methods("POST") + app.HandleFunc("/tunnel", curdApiCreate(mod, nil)).Methods("POST") //TODO 启动 + app.HandleFunc("/tunnel/:id", curdApiDelete(mod, nil)).Methods("DELETE") //TODO 停止 + app.HandleFunc("/tunnel/:id", curdApiModify(mod, fields, nil)).Methods("PUT") //TODO 重新启动 + app.HandleFunc("/tunnel/:id", curdApiGet(mod)).Methods("GET") - app.Get("/tunnel/:id/start", tunnelStart) - app.Get("/tunnel/:id/stop", tunnelStop) + app.HandleFunc("/tunnel/:id/start", tunnelStart).Methods("GET") + app.HandleFunc("/tunnel/:id/stop", tunnelStop).Methods("GET") - //app.Post("/channel/:id/links") + //app.HandleFunc("/channel/:id/links") //连接管理 mod = reflect.TypeOf(models.Link{}) fields = []string{"name"} - app.Post("/tunnel/:id/links", curdApiListById(mod, "tunnel_id")) - app.Post("/links", curdApiList(mod)) - app.Delete("/link/:id", curdApiDelete(mod, nil)) //TODO 停止 - app.Put("/link/:id", curdApiModify(mod, fields, nil)) - app.Get("/link/:id", curdApiGet(mod)) + app.HandleFunc("/tunnel/:id/links", curdApiListById(mod, "tunnel_id")).Methods("POST") + app.HandleFunc("/links", curdApiList(mod)).Methods("POST") + app.HandleFunc("/link/:id", curdApiDelete(mod, nil)).Methods("DELETE") //TODO 停止 + app.HandleFunc("/link/:id", curdApiModify(mod, fields, nil)).Methods("PUT") + app.HandleFunc("/link/:id", curdApiGet(mod)).Methods("GET") mod = reflect.TypeOf(models.Device{}) fields = []string{"name"} - app.Post("/project/:id/devices", curdApiListById(mod, "project_id")) - app.Post("/devices", curdApiList(mod)) - app.Post("/device", curdApiCreate(mod, nil)) - app.Delete("/device/:id", curdApiDelete(mod, nil)) - app.Put("/device/:id", curdApiModify(mod, fields, nil)) - app.Get("/device/:id", curdApiGet(mod)) + app.HandleFunc("/project/:id/devices", curdApiListById(mod, "project_id")).Methods("POST") + app.HandleFunc("/devices", curdApiList(mod)).Methods("POST") + app.HandleFunc("/device", curdApiCreate(mod, nil)).Methods("POST") + app.HandleFunc("/device/:id", curdApiDelete(mod, nil)).Methods("DELETE") + app.HandleFunc("/device/:id", curdApiModify(mod, fields, nil)).Methods("PUT") + app.HandleFunc("/device/:id", curdApiGet(mod)).Methods("GET") mod = reflect.TypeOf(models.Location{}) fields = []string{"name"} - app.Post("/device/:id/locations", curdApiListById(mod, "device_id")) - //app.Post("/locations", curdApiList(mod)) - //app.Post("/location", curdApiCreate(mod, nil)) - app.Delete("/location/:id", curdApiDelete(mod, nil)) - //app.Put("/location/:id", curdApiModify(mod, fields, nil)) - app.Get("/location/:id", curdApiGet(mod)) + app.HandleFunc("/device/:id/locations", curdApiListById(mod, "device_id")).Methods("POST") + //app.HandleFunc("/locations", curdApiList(mod)).Methods("POST") + //app.HandleFunc("/location", curdApiCreate(mod, nil)).Methods("POST") + app.HandleFunc("/location/:id", curdApiDelete(mod, nil)).Methods("DELETE") + //app.HandleFunc("/location/:id", curdApiModify(mod, fields, nil)).Methods("PUT") + app.HandleFunc("/location/:id", curdApiGet(mod)).Methods("GET") //插件管理 mod = reflect.TypeOf(models.Plugin{}) fields = []string{"name"} - app.Post("/plugins", curdApiList(mod)) - app.Post("/plugin", curdApiCreate(mod, nil)) - app.Delete("/plugin/:id", curdApiDelete(mod, nil)) - app.Put("/plugin/:id", curdApiModify(mod, fields, nil)) - app.Get("/plugin/:id", curdApiGet(mod)) + app.HandleFunc("/plugins", curdApiList(mod)).Methods("POST") + app.HandleFunc("/plugin", curdApiCreate(mod, nil)).Methods("POST") + app.HandleFunc("/plugin/:id", curdApiDelete(mod, nil)).Methods("DELETE") + app.HandleFunc("/plugin/:id", curdApiModify(mod, fields, nil)).Methods("PUT") + app.HandleFunc("/plugin/:id", curdApiGet(mod)).Methods("GET") //模型管理 mod = reflect.TypeOf(models.Project{}) fields = []string{"name"} - app.Post("/projects", curdApiList(mod)) - app.Post("/project", curdApiCreate(mod, nil)) - app.Delete("/project/:id", curdApiDelete(mod, nil)) - app.Put("/project/:id", curdApiModify(mod, fields, nil)) - app.Get("/project/:id", curdApiGet(mod)) - - //app.Get("/project/:id/tunnels", nop) - //app.Get("/project/:id/variables", nop) - //app.Get("/project/:id/batches", nop) - //app.Get("/project/:id/jobs", nop) - //app.Get("/project/:id/strategies", nop) - - app.Post("/project/import", projectImport) - app.Get("/project/:id/export", projectExport) - app.Get("/project/:id/deploy", projectDeploy) - - + app.HandleFunc("/projects", curdApiList(mod)).Methods("POST") + app.HandleFunc("/project", curdApiCreate(mod, nil)).Methods("POST") + app.HandleFunc("/project/:id", curdApiDelete(mod, nil)).Methods("DELETE") + app.HandleFunc("/project/:id", curdApiModify(mod, fields, nil)).Methods("PUT") + app.HandleFunc("/project/:id", curdApiGet(mod)).Methods("GET") + + //app.HandleFunc("/project/:id/tunnels", nop) + //app.HandleFunc("/project/:id/variables", nop) + //app.HandleFunc("/project/:id/batches", nop) + //app.HandleFunc("/project/:id/jobs", nop) + //app.HandleFunc("/project/:id/strategies", nop) + + //app.HandleFunc("/project/import", projectImport).Methods("POST") + //app.HandleFunc("/project/:id/export", projectExport).Methods("GET") + //app.HandleFunc("/project/:id/deploy", projectDeploy).Methods("GET") + mod = reflect.TypeOf(models.ProjectElement{}) fields = []string{"name"} - app.Post("/project/:id/elements", curdApiListById(mod, "project_id")) - //app.Post("/project/elements", curdApiList(mod)) - app.Post("/project/element", curdApiCreate(mod, nil)) - app.Delete("/project/element/:id", curdApiDelete(mod, nil)) - app.Put("/project/element/:id", curdApiModify(mod, fields, nil)) - app.Get("/project/element/:id", curdApiGet(mod)) + app.HandleFunc("/project/:id/elements", curdApiListById(mod, "project_id")).Methods("POST") + //app.HandleFunc("/project/elements", curdApiList(mod)).Methods("POST") + app.HandleFunc("/project/element", curdApiCreate(mod, nil)).Methods("POST") + app.HandleFunc("/project/element/:id", curdApiDelete(mod, nil)).Methods("DELETE") + app.HandleFunc("/project/element/:id", curdApiModify(mod, fields, nil)).Methods("PUT") + app.HandleFunc("/project/element/:id", curdApiGet(mod)).Methods("GET") mod = reflect.TypeOf(models.ProjectJob{}) fields = []string{"name"} - app.Post("/project/:id/jobs", curdApiListById(mod, "project_id")) - //app.Post("/project/jobs", curdApiList(mod)) - app.Post("/project/job", curdApiCreate(mod, nil)) - app.Delete("/project/job/:id", curdApiDelete(mod, nil)) - app.Put("/project/job/:id", curdApiModify(mod, fields, nil)) - app.Get("/project/job/:id", curdApiGet(mod)) + app.HandleFunc("/project/:id/jobs", curdApiListById(mod, "project_id")).Methods("POST") + //app.HandleFunc("/project/jobs", curdApiList(mod)).Methods("POST") + app.HandleFunc("/project/job", curdApiCreate(mod, nil)).Methods("POST") + app.HandleFunc("/project/job/:id", curdApiDelete(mod, nil)).Methods("DELETE") + app.HandleFunc("/project/job/:id", curdApiModify(mod, fields, nil)).Methods("PUT") + app.HandleFunc("/project/job/:id", curdApiGet(mod)).Methods("GET") mod = reflect.TypeOf(models.ProjectStrategy{}) fields = []string{"name"} - app.Post("/project/:id/strategies", curdApiListById(mod, "project_id")) - //app.Post("/project/strategies", curdApiList(mod)) - app.Post("/project/strategy", curdApiCreate(mod, nil)) - app.Delete("/project/strategy/:id", curdApiDelete(mod, nil)) - app.Put("/project/strategy/:id", curdApiModify(mod, fields, nil)) - app.Get("/project/strategy/:id", curdApiGet(mod)) + app.HandleFunc("/project/:id/strategies", curdApiListById(mod, "project_id")).Methods("POST") + //app.HandleFunc("/project/strategies", curdApiList(mod)).Methods("POST") + app.HandleFunc("/project/strategy", curdApiCreate(mod, nil)).Methods("POST") + app.HandleFunc("/project/strategy/:id", curdApiDelete(mod, nil)).Methods("DELETE") + app.HandleFunc("/project/strategy/:id", curdApiModify(mod, fields, nil)).Methods("PUT") + app.HandleFunc("/project/strategy/:id", curdApiGet(mod)).Methods("GET") //元件管理 mod = reflect.TypeOf(models.Element{}) fields = []string{"name"} - app.Post("/elements", curdApiList(mod)) - app.Post("/element", curdApiCreate(mod, nil)) - app.Delete("/element/:id", curdApiDelete(mod, nil)) - app.Put("/element/:id", curdApiModify(mod, fields, nil)) - app.Get("/element/:id", curdApiGet(mod)) + app.HandleFunc("/elements", curdApiList(mod)).Methods("POST") + app.HandleFunc("/element", curdApiCreate(mod, nil)).Methods("POST") + app.HandleFunc("/element/:id", curdApiDelete(mod, nil)).Methods("DELETE") + app.HandleFunc("/element/:id", curdApiModify(mod, fields, nil)).Methods("PUT") + app.HandleFunc("/element/:id", curdApiGet(mod)).Methods("GET") //元件变量 mod = reflect.TypeOf(models.ElementVariable{}) fields = []string{"name"} - app.Post("/element/:id/variables", curdApiListById(mod, "element_id")) - //app.Post("/element/variables", curdApiList(mod)) - app.Post("/element/variable", curdApiCreate(mod, nil)) - app.Delete("/element/variable/:id", curdApiDelete(mod, nil)) - app.Put("/element/variable/:id", curdApiModify(mod, fields, nil)) - app.Get("/element/variable/:id", curdApiGet(mod)) + app.HandleFunc("/element/:id/variables", curdApiListById(mod, "element_id")).Methods("POST") + //app.HandleFunc("/element/variables", curdApiList(mod)).Methods("POST") + app.HandleFunc("/element/variable", curdApiCreate(mod, nil)).Methods("POST") + app.HandleFunc("/element/variable/:id", curdApiDelete(mod, nil)).Methods("DELETE") + app.HandleFunc("/element/variable/:id", curdApiModify(mod, fields, nil)).Methods("PUT") + app.HandleFunc("/element/variable/:id", curdApiGet(mod)).Methods("GET") //元件批量操作 mod = reflect.TypeOf(models.ElementBatch{}) fields = []string{"name"} - app.Post("/element/:id/batches", curdApiListById(mod, "element_id")) - //app.Post("/element/batches", curdApiList(mod)) - app.Post("/element/batch", curdApiCreate(mod, nil)) - app.Delete("/element/batch/:id", curdApiDelete(mod, nil)) - app.Put("/element/batch/:id", curdApiModify(mod, fields, nil)) - app.Get("/element/batch/:id", curdApiGet(mod)) + app.HandleFunc("/element/:id/batches", curdApiListById(mod, "element_id")).Methods("POST") + //app.HandleFunc("/element/batches", curdApiList(mod)).Methods("POST") + app.HandleFunc("/element/batch", curdApiCreate(mod, nil)).Methods("POST") + app.HandleFunc("/element/batch/:id", curdApiDelete(mod, nil)).Methods("DELETE") + app.HandleFunc("/element/batch/:id", curdApiModify(mod, fields, nil)).Methods("PUT") + app.HandleFunc("/element/batch/:id", curdApiGet(mod)).Methods("GET") } -func replyOk(ctx iris.Context, data interface{}) { - ctx.JSON(iris.Map{ - "ok": true, - "data": data, - }) +type Reply struct { + Ok bool `json:"ok"` + Error string `json:"error,omitempty"` + Data interface{} `json:"data,omitempty"` + Total int64 `json:"total,omitempty"` } -func replyFail(ctx iris.Context, err string) { - ctx.JSON(iris.Map{ - "ok": false, - "error": err, - }) +func replyList(writer http.ResponseWriter, data interface{}, total int64) { + r := Reply{ + Ok: true, + Data: data, + Total: total, + } + b, _ := json.Marshal(r) + _, _ = writer.Write(b) +} + +func replyOk(writer http.ResponseWriter, data interface{}) { + r := Reply{ + Ok: true, + Data: data, + } + b, _ := json.Marshal(r) + _, _ = writer.Write(b) } -func replyError(ctx iris.Context, err error) { - ctx.JSON(iris.Map{ - "ok": false, - "error": err.Error(), - }) +func replyFail(writer http.ResponseWriter, err string) { + r := Reply{ + Error: err, + } + b, _ := json.Marshal(r) + _, _ = writer.Write(b) +} + +func replyError(writer http.ResponseWriter, err error) { + r := Reply{ + Error: err.Error(), + } + b, _ := json.Marshal(r) + _, _ = writer.Write(b) } -func nop(ctx iris.Context) { - ctx.StatusCode(iris.StatusForbidden) - ctx.WriteString("Unsupported") +func nop(writer http.ResponseWriter, request *http.Request) { + writer.WriteHeader(http.StatusForbidden) + _, _ = writer.Write([]byte("Unsupported")) } diff --git a/web/api/tunnel.go b/web/api/tunnel.go index 08b8d4489ed99de89da8849c2b50cc0b181ae2c6..dbff2679fd75b9ab2960bb58afd36872d2da65dc 100644 --- a/web/api/tunnel.go +++ b/web/api/tunnel.go @@ -2,47 +2,49 @@ package api import ( "git.zgwit.com/zgwit/iot-admin/core" - "github.com/kataras/iris/v12" + "github.com/gorilla/mux" + "net/http" + "strconv" ) -func tunnelStart(ctx iris.Context) { - id, err := ctx.URLParamInt64("id") +func tunnelStart(writer http.ResponseWriter, request *http.Request) { + id, err := strconv.ParseInt(mux.Vars(request)["id"], 10, 64) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } c, err := core.GetTunnel(id) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } err = c.Open() if err != nil { - replyError(ctx, err) + replyError(writer, err) return } - replyOk(ctx, nil) + replyOk(writer, nil) } -func tunnelStop(ctx iris.Context) { - id, err := ctx.URLParamInt64("id") +func tunnelStop(writer http.ResponseWriter, request *http.Request) { + id, err := strconv.ParseInt(mux.Vars(request)["id"], 10, 64) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } c, err := core.GetTunnel(id) if err != nil { - replyError(ctx, err) + replyError(writer, err) return } err = c.Close() if err != nil { - replyError(ctx, err) + replyError(writer, err) return } - replyOk(ctx, nil) + replyOk(writer, nil) } diff --git a/web/app.go b/web/app.go index 62783dcf265640ba96cfb6e933e7e566a16c3d98..c703c990f3c508b193af00c01613994f22e22c53 100644 --- a/web/app.go +++ b/web/app.go @@ -5,9 +5,10 @@ import ( "git.zgwit.com/zgwit/iot-admin/web/api" "git.zgwit.com/zgwit/iot-admin/web/open" wwwFiles "git.zgwit.com/zgwit/iot-admin/web/www" - "github.com/kataras/iris/v12" + "github.com/gorilla/mux" "log" "net/http" + "time" ) func Serve() { @@ -16,10 +17,12 @@ func Serve() { } + app := mux.NewRouter() + //GIN初始化 //app := gin.Default() - app := iris.New() + //app := iris.New() //加入swagger会增加10MB多体积,使用github.com/zgwit/swagger-files,去除Map文件,可以节省7MB左右 @@ -27,12 +30,13 @@ func Serve() { //app.Get("/docs/*any", ginSwagger.WrapHandler(swaggerFiles.Handler)) //MQTT - app.Get("/mqtt", mqtt) + app.HandleFunc("/mqtt", mqtt).Methods("GET") //透传 - app.Get("/peer", peer) + app.HandleFunc("/peer", peer).Methods("GET") //开放接口 - open.RegisterRoutes(app.Party("/open")) + open.RegisterRoutes(app.PathPrefix("/open").Subrouter()) + //启用session //app.Use(sessions.Sessions("core-admin", memstore.NewStore([]byte("core-admin-secret")))) @@ -45,20 +49,20 @@ func Serve() { //注册前端接口 - api.RegisterRoutes(app.Party("/api")) + api.RegisterRoutes(app.PathPrefix("/open").Subrouter()) //未登录,访问前端文件,跳转到OAuth2登录 if conf.Config.SysAdmin.Enable { - app.Use(func(c iris.Context) { - //session := sessions.Default(c) - //if user := session.Get("user"); user != nil { - // c.Next() - //} else { - // //TODO 拼接 OAuth2链接,需要AppKey和Secret - // url := conf.Config.SysAdmin.Addr + "?redirect_uri=" - // c.Redirect(http.StatusFound, url) - //} - }) + //app.Use(func(c iris.Context) { + // //session := sessions.Default(c) + // //if user := session.Get("user"); user != nil { + // // c.Next() + // //} else { + // // //TODO 拼接 OAuth2链接,需要AppKey和Secret + // // url := conf.Config.SysAdmin.Addr + "?redirect_uri=" + // // c.Redirect(http.StatusFound, url) + // //} + //}) } else if conf.Config.BaseAuth.Enable { //开启基本HTTP认证 //app.Use(gin.BasicAuth(gin.Accounts(conf.Config.BaseAuth.Users))) @@ -66,23 +70,32 @@ func Serve() { //前端静态文件 //app.Get("/*any", func(c iris.Context) { - app.Use(func(c iris.Context) { - if c.Method() == http.MethodGet { - //支持前端框架的无“#”路由 - if c.Request().RequestURI == "/" { - c.Request().URL.Path = "index.html" - } else if _, err := wwwFiles.FS.Stat(wwwFiles.CTX, c.Request().RequestURI); err != nil { - c.Request().URL.Path = "index.html" + app.Use(func(next http.Handler) http.Handler { + return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { + if request.Method == http.MethodGet { + //支持前端框架的无“#”路由 + if request.RequestURI == "/" { + request.URL.Path = "index.html" + } else if _, err := wwwFiles.FS.Stat(wwwFiles.CTX, request.RequestURI); err != nil { + request.URL.Path = "index.html" + } + //TODO 如果未登录,则跳转SysAdmin OAuth2自动授权页面 + + //文件失效期已经在Handler中处理 + wwwFiles.Handler.ServeHTTP(writer, request) } - //TODO 如果未登录,则跳转SysAdmin OAuth2自动授权页面 - - //文件失效期已经在Handler中处理 - wwwFiles.Handler.ServeHTTP(c.ResponseWriter(), c.Request()) - } + }) }) //监听HTTP - if err := app.Listen(conf.Config.Web.Addr); err != nil { + srv := &http.Server{ + Addr: conf.Config.Web.Addr, + WriteTimeout: time.Second * 15, + ReadTimeout: time.Second * 15, + IdleTimeout: time.Second * 60, + Handler: app, + } + if err := srv.ListenAndServe(); err != nil { log.Fatal("HTTP 服务启动错误", err) } } diff --git a/web/mqtt.go b/web/mqtt.go index 8a0b1cde9187cd5222e1c3a3516ec21897f5cd5a..6c58148594e97f50a02c17489880da29200401fd 100644 --- a/web/mqtt.go +++ b/web/mqtt.go @@ -2,15 +2,15 @@ package web import ( "git.zgwit.com/zgwit/iot-admin/core" - "github.com/kataras/iris/v12" "golang.org/x/net/websocket" + "net/http" ) -func mqtt(ctx iris.Context) { +func mqtt(writer http.ResponseWriter, request *http.Request) { websocket.Handler(func(ws *websocket.Conn) { //设置二进制模式 ws.PayloadType = websocket.BinaryFrame core.Hive().Receive(ws) - }).ServeHTTP(ctx.ResponseWriter(), ctx.Request()) + }).ServeHTTP(writer, request) //ctx.Abort() } diff --git a/web/open/router.go b/web/open/router.go index 54b0406a0d5d1957e2c7617192b9fa987ef84fec..148c8693d2fa6d827785343e5527660c6b89c14e 100644 --- a/web/open/router.go +++ b/web/open/router.go @@ -1,19 +1,19 @@ package open import ( - "github.com/kataras/iris/v12" + "github.com/gorilla/mux" ) -func RegisterRoutes(app iris.Party) { +func RegisterRoutes(app *mux.Router) { //跨域咨问题 //app.Use(cors.Default()) - app.Use(func(ctx iris.Context) { - //TODO 检查KEY - - //log.Println("open", ctx.FullPath()) - }) + //app.Use(func(ctx iris.Context) { + // //TODO 检查KEY + // + // //log.Println("open", ctx.FullPath()) + //}) //app.Get("/channels") } diff --git a/web/peer.go b/web/peer.go index 08e9b3bc0677a0fecd1021779062a7f09d61005b..ac797c8c3140f4c3121e537dc254189d3ecc3f83 100644 --- a/web/peer.go +++ b/web/peer.go @@ -1,13 +1,13 @@ package web import ( - "github.com/kataras/iris/v12" "golang.org/x/net/websocket" "log" + "net/http" ) -func peer(ctx iris.Context) { - key := ctx.URLParam("key") +func peer(writer http.ResponseWriter, request *http.Request) { + key := request.URL.Query()["key"] log.Println(key) //TODO 获取链接 @@ -17,7 +17,7 @@ func peer(ctx iris.Context) { websocket.Handler(func(ws *websocket.Conn) { //peer := core.NewPeer(ws, nil) //peer.Receive() - }).ServeHTTP(ctx.ResponseWriter(), ctx.Request()) + }).ServeHTTP(writer, request) //ctx.Abort() }