🚚 Renamed project from oauth to indieauth

This commit is contained in:
Maxim Lebedev 2022-01-04 22:31:33 +05:00
parent bfbb15ea57
commit c9a76ddbd6
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
70 changed files with 937 additions and 891 deletions

View File

@ -39,37 +39,22 @@ func init() {
}
var messageKeyToIndex = map[string]int{
"Allow": 6,
"Authorize": 2,
"Authorize %s": 0,
"Authorize application": 1,
"Check your scopes": 4,
"Create a new remote token": 8,
"Deny": 5,
"Send": 9,
"Sign In": 7,
"application": 3,
"Allow": 1,
"Deny": 0,
"Sign In": 2,
}
var enIndex = []uint32{ // 11 elements
0x00000000, 0x00000010, 0x00000026, 0x00000030,
0x0000003c, 0x0000004e, 0x00000053, 0x00000059,
0x00000061, 0x0000007b, 0x00000080,
} // Size: 68 bytes
var enIndex = []uint32{ // 4 elements
0x00000000, 0x00000005, 0x0000000b, 0x00000013,
} // Size: 40 bytes
const enData string = "" + // Size: 128 bytes
"\x02Authorize %[1]s\x02Authorize application\x02Authorize\x02application" +
"\x02Check your scopes\x02Deny\x02Allow\x02Sign In\x02Create a new remote" +
" token\x02Send"
const enData string = "\x02Deny\x02Allow\x02Sign In"
var ruIndex = []uint32{ // 11 elements
0x00000000, 0x00000000, 0x0000002e, 0x0000002e,
0x0000002e, 0x00000057, 0x00000068, 0x0000007b,
0x00000086, 0x00000086, 0x00000086,
} // Size: 68 bytes
var ruIndex = []uint32{ // 4 elements
0x00000000, 0x00000011, 0x00000024, 0x0000002f,
} // Size: 40 bytes
const ruData string = "" + // Size: 134 bytes
"\x02Авторизовать приложение\x02Проверь права доступа\x02Отказать\x02Разр" +
"ешить\x02Войти"
const ruData string = "" + // Size: 47 bytes
"\x02Отказать\x02Разрешить\x02Войти"
// Total table size 398 bytes (0KiB); checksum: 1F3647E6
// Total table size 146 bytes (0KiB); checksum: 9261221B

12
go.mod
View File

@ -1,4 +1,4 @@
module source.toby3d.me/website/oauth
module source.toby3d.me/website/indieauth
go 1.16
@ -11,17 +11,19 @@ require (
github.com/lestrrat-go/jwx v1.2.7
github.com/pkg/errors v0.9.1
github.com/savsgio/gotils v0.0.0-20210921075833-21a6215cb0e4 // indirect
github.com/spf13/viper v1.9.0
github.com/spf13/cobra v1.3.0 // indirect
github.com/spf13/viper v1.10.0
github.com/stretchr/testify v1.7.0
github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80
github.com/valyala/fasthttp v1.30.0
github.com/valyala/fasthttp v1.31.0
github.com/valyala/fasttemplate v1.2.1
github.com/valyala/quicktemplate v1.7.0
go.etcd.io/bbolt v1.3.6
golang.org/x/net v0.0.0-20211004164453-cedda3a722dd // indirect
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f
golang.org/x/sys v0.0.0-20211004093028-2c5d950f24ef // indirect
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
golang.org/x/text v0.3.7 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
inet.af/netaddr v0.0.0-20211027220019-c74959edd3b6 // indirect
source.toby3d.me/toby3d/form v0.1.0 // indirect
willnorris.com/go/microformats v1.1.1
)

149
go.sum
View File

@ -23,6 +23,10 @@ cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSU
cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY=
cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ=
cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI=
cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4=
cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=
cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM=
cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
@ -32,6 +36,7 @@ cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM7
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU=
cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
@ -44,8 +49,13 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
github.com/andybalholm/brotli v1.0.3 h1:fpcw+r1N1h0Poc1F/pHbW40cUm/lMEQslZtCkBQ0UnM=
github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
@ -53,29 +63,46 @@ github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9Pq
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/brianvoe/gofakeit/v6 v6.9.0 h1:UCGhPCKLiqBc910TKS7LcOGf74NozftibFCbGIS6GZQ=
github.com/brianvoe/gofakeit/v6 v6.9.0/go.mod h1:palrJUk4Fyw38zIFB/uBZqsgzW5VsNllhHKKwAebzew=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
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/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
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/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d h1:1iy2qD6JEhHKKhUOA9IWs7mjco7lnw2qx8FsRI2wirE=
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d/go.mod h1:tmAIfUFEirG/Y8jhZ9M+h36obRZAk/1fcSpXwAVlfqE=
github.com/dvyukov/go-fuzz v0.0.0-20210103155950-6a8e9d1f2415/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@ -83,26 +110,37 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws=
github.com/fasthttp/router v1.4.3 h1:spS+LUnRryQ/+hbmYzs/xWGJlQCkeQI3hxGZdlVYhLU=
github.com/fasthttp/router v1.4.3/go.mod h1:9ytWCfZ5LcCcbD3S7pEXyBX9vZnOZmN918WiiaYUzr8=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
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-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/goccy/go-json v0.7.8/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/goccy/go-json v0.7.9 h1:mSp3uo1tr6MXQTYopSNhHTUnJhd2zQ4Yk+HdJZP+ZRY=
github.com/goccy/go-json v0.7.9/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
@ -171,18 +209,25 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
github.com/gorilla/schema v1.2.0 h1:YufUaxZYCKGFuAq3c96BOhjgd5nmXiOY9NGzF247Tsc=
github.com/gorilla/schema v1.2.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
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-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
@ -190,24 +235,37 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/golang-lru v0.5.0/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/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
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/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY=
github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4=
github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
@ -229,18 +287,24 @@ github.com/lestrrat-go/jwx v1.2.7 h1:wO7fEc3PW56wpQBMU5CyRkrk4DVsXxCoJg7oIm5HHE4
github.com/lestrrat-go/jwx v1.2.7/go.mod h1:bw24IXWbavc0R2RsOtpXL7RtMyP589yZ1+L7kd09ZGA=
github.com/lestrrat-go/option v1.0.0 h1:WqAWL8kh8VcSoD6xjSH34/1m8yxluXQbDeKNfvFeEO4=
github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I=
github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w=
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
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.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
@ -248,12 +312,19 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo=
github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs=
github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM=
github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@ -262,27 +333,48 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE=
github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig=
github.com/savsgio/gotils v0.0.0-20210907153846-c06938798b52/go.mod h1:oejLrk1Y/5zOF+c/aHtXqn3TFlzzbAgPWg8zBiAHDas=
github.com/savsgio/gotils v0.0.0-20210921075833-21a6215cb0e4 h1:ocK/D6lCgLji37Z2so4xhMl46se1ntReQQCUIU4BWI8=
github.com/savsgio/gotils v0.0.0-20210921075833-21a6215cb0e4/go.mod h1:oejLrk1Y/5zOF+c/aHtXqn3TFlzzbAgPWg8zBiAHDas=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY=
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v1.3.0 h1:R7cSvGu+Vv+qX0gW5R/85dx2kmmJT5z5NM8ifdYjdn0=
github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.9.0 h1:yR6EXjTp0y0cLN8OZg1CRZmOBdI88UcGkhgyJhu6nZk=
github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4=
github.com/spf13/viper v1.10.0 h1:mXH0UwHS4D2HwWZa75im4xIQynLfblmWV7qcWpfv0yk=
github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.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/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@ -294,10 +386,13 @@ github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 h1:nrZ3ySNYwJbSpD6ce9duiP+QkD3JuLCcWkdaehUS/3Y=
github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80/go.mod h1:iFyPdL66DjUD96XmzVL3ZntbzcflLnznH0fr99w5VqE=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
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.30.0 h1:nBNzWrgZUUHohyLPU/jTvXdhrcaf2m5k3bWk+3Q049g=
github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus=
github.com/valyala/fasthttp v1.31.0 h1:lrauRLII19afgCs2fnWRJ4M5IkV0lo2FqA61uGkNBfE=
github.com/valyala/fasthttp v1.31.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus=
github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4=
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/valyala/quicktemplate v1.7.0 h1:LUPTJmlVcb46OOUY3IeD9DojFpAVbsG+5WFTcjMJzCM=
@ -311,8 +406,11 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@ -324,6 +422,11 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
go4.org/intern v0.0.0-20211027215823-ae77deb06f29 h1:UXLjNohABv4S58tHmeuIZDO6e3mHpW2Dx33gaNt03LE=
go4.org/intern v0.0.0-20211027215823-ae77deb06f29/go.mod h1:cS2ma+47FKrLPdXFpr7CuxiTW3eyJbWew4qx0qtQWDA=
go4.org/unsafe/assume-no-moving-gc v0.0.0-20211027215541-db492cf91b37 h1:Tx9kY6yUkLge/pFG7IEMwDZy6CS2ajFc9TvQdPCW0uA=
go4.org/unsafe/assume-no-moving-gc v0.0.0-20211027215541-db492cf91b37/go.mod h1:FftLjUGFEDu5k8lt0ddY+HcrH/qU/0qk+H8j9/nTl3E=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/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-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@ -371,6 +474,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/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=
@ -383,6 +487,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@ -409,8 +514,10 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211004164453-cedda3a722dd h1:Q6PfiuMddtCdycHT4hrZ7ZhVpAdQlA7qJp+ZhUw7Rdo=
golang.org/x/net v0.0.0-20211004164453-cedda3a722dd/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@ -429,6 +536,9 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw=
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
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-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@ -442,11 +552,14 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -482,6 +595,7 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@ -495,9 +609,16 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211004093028-2c5d950f24ef h1:fPxZ3Umkct3LZ8gK9nbk+DWDJ9fstZa2grBn+lWVKPs=
golang.org/x/sys v0.0.0-20211004093028-2c5d950f24ef/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211205182925-97ca703d548d h1:FjkYO/PPp4Wi0EAUOVLxePm7qVW4r4ctbWpURyuOD0E=
golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -600,7 +721,12 @@ google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtuk
google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw=
google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU=
google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k=
google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE=
google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE=
google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI=
google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU=
google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I=
google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@ -661,6 +787,17 @@ google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKr
google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w=
google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@ -686,6 +823,8 @@ google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQ
google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@ -701,6 +840,7 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
@ -708,8 +848,13 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.63.2 h1:tGK/CyBg7SMzb60vP1M03vNZ3VDu3wGQJwn7Sxi9r3c=
gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI=
gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
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.3/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.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
@ -723,8 +868,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
inet.af/netaddr v0.0.0-20211027220019-c74959edd3b6 h1:acCzuUSQ79tGsM/O50VRFySfMm19IoMKL+sZztZkCxw=
inet.af/netaddr v0.0.0-20211027220019-c74959edd3b6/go.mod h1:y3MGhcFMlh0KZPMuXXow8mpjxxAk3yoDNsp4cQz54i8=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
source.toby3d.me/toby3d/form v0.1.0 h1:QoQfNfVmyEioopBB262cDVossxzjMzCW/Y1upVBaKIs=
source.toby3d.me/toby3d/form v0.1.0/go.mod h1:vCN3Br5j2QqW/pZSPvqBDzXf/n7bWxybvJR57YO42gk=
willnorris.com/go/microformats v1.1.1 h1:h5tk2luq6KBIRcwMGdksxdeea4GGuWrRFie5460OAbo=
willnorris.com/go/microformats v1.1.1/go.mod h1:kvVnWrkkEscVAIITCEoiTX66Hcyg59C7q0E49mb9TJ0=

View File

@ -8,8 +8,8 @@ import (
json "github.com/goccy/go-json"
http "github.com/valyala/fasthttp"
"gitlab.com/toby3d/indieauth/internal/auth"
"gitlab.com/toby3d/indieauth/internal/domain"
"gitlab.com/toby3d/indieauth/internal/middleware"
"gitlab.com/toby3d/indieauth/internal/model"
"gitlab.com/toby3d/indieauth/internal/pkce"
"gitlab.com/toby3d/indieauth/web"
)
@ -82,15 +82,15 @@ func (h *Handler) Register(r *router.Router) {
func (r *AuthorizeRequest) bind(ctx *http.RequestCtx) error {
if r.ClientID = string(ctx.QueryArgs().Peek("client_id")); r.ClientID == "" {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "'client_id' query is required",
}
}
if r.ResponseType = string(ctx.QueryArgs().Peek("response_type")); r.ResponseType != "code" {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "'response_type' must be 'code'",
}
}
@ -98,8 +98,8 @@ func (r *AuthorizeRequest) bind(ctx *http.RequestCtx) error {
if ctx.QueryArgs().Has("code_challenge") {
r.CodeChallenge = string(ctx.QueryArgs().Peek("code_challenge"))
if len(r.CodeChallenge) < 43 || len(r.CodeChallenge) > 128 {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "length of the 'code_challenge' value must be greater than 43 and less than 128 symbols",
}
}
@ -110,12 +110,11 @@ func (r *AuthorizeRequest) bind(ctx *http.RequestCtx) error {
}
if _, err := pkce.New(r.CodeChallengeMethod); err != nil {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: err.Error(),
}
}
}
r.RedirectURI = string(ctx.QueryArgs().Peek("redirect_uri"))
@ -179,22 +178,22 @@ func (r *RedirectRequest) bind(ctx *http.RequestCtx) (err error) {
r.RedirectURI = string(ctx.PostArgs().Peek("redirect_uri"))
if r.ClientID = string(ctx.PostArgs().Peek("client_id")); r.ClientID == "" {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "'client_id' query is required",
}
}
if r.Authorize = string(ctx.PostArgs().Peek("authorize")); r.Authorize != "allow" && r.Authorize != "deny" {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "invalid prompt action, try starting the authorization flow again",
}
}
if r.ResponseType = string(ctx.PostArgs().Peek("response_type")); r.ResponseType != "code" {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "'response_type' must be 'code', try starting the authorization flow again",
}
}
@ -203,8 +202,8 @@ func (r *RedirectRequest) bind(ctx *http.RequestCtx) (err error) {
r.CodeChallenge = string(ctx.PostArgs().Peek("code_challenge"))
if len(r.CodeChallenge) < 43 || len(r.CodeChallenge) > 128 {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "length of the 'code_challenge' value must be greater than 43 and less than 128 symbols, try starting the authorization flow again",
}
}
@ -216,8 +215,8 @@ func (r *RedirectRequest) bind(ctx *http.RequestCtx) (err error) {
_, err := pkce.New(r.CodeChallengeMethod)
if err != nil {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: err.Error(),
}
}
@ -250,7 +249,7 @@ func (h *Handler) Redirect(ctx *http.RequestCtx) {
switch r.Authorize {
case "allow":
code, err := h.useCase.Approve(ctx, &model.Login{
code, err := h.useCase.Approve(ctx, &domain.Login{
CreatedAt: time.Now().UTC().Unix(),
ClientID: r.ClientID,
CodeChallenge: r.CodeChallenge,
@ -260,7 +259,7 @@ func (h *Handler) Redirect(ctx *http.RequestCtx) {
Scope: r.Scope,
})
if err != nil {
query.Set("error", model.ErrServerError.Code)
query.Set("error", domain.ErrServerError.Code)
query.Set("error_description", err.Error())
redirectUri.RawQuery = query.Encode()
@ -272,7 +271,7 @@ func (h *Handler) Redirect(ctx *http.RequestCtx) {
query.Set("code", code)
case "deny":
query.Set("error", model.ErrAccessDenied.Code)
query.Set("error", domain.ErrAccessDenied.Code)
}
redirectUri.RawQuery = query.Encode()
@ -282,29 +281,29 @@ func (h *Handler) Redirect(ctx *http.RequestCtx) {
func (r *ExchangeRequest) bind(ctx *http.RequestCtx) (err error) {
if r.GrantType = string(ctx.PostArgs().Peek("grant_type")); r.GrantType != "authorization_code" {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "'grant_type' must be 'authorization_code'",
}
}
if r.RedirectURI = string(ctx.PostArgs().Peek("redirect_uri")); r.RedirectURI == "" {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "'redirect_uri' query is required",
}
}
if r.ClientID = string(ctx.PostArgs().Peek("client_id")); r.ClientID == "" {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "'client_id' query is required",
}
}
if r.Code = string(ctx.PostArgs().Peek("code")); r.Code == "" {
return model.Error{
Code: model.ErrInvalidRequest.Code,
return domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "'code' query is required",
}
}
@ -324,7 +323,7 @@ func (h *Handler) Exchange(ctx *http.RequestCtx) {
return
}
me, err := h.useCase.Exchange(ctx, &model.ExchangeRequest{
me, err := h.useCase.Exchange(ctx, &domain.ExchangeRequest{
ClientID: req.ClientID,
Code: req.Code,
CodeVerifier: req.CodeVerifier,
@ -337,7 +336,7 @@ func (h *Handler) Exchange(ctx *http.RequestCtx) {
}
if me == "" {
ctx.Error(model.ErrUnauthorizedClient.Error(), http.StatusUnauthorized)
ctx.Error(domain.ErrUnauthorizedClient.Error(), http.StatusUnauthorized)
return
}

View File

@ -3,11 +3,11 @@ package auth
import (
"context"
"gitlab.com/toby3d/indieauth/internal/model"
"gitlab.com/toby3d/indieauth/internal/domain"
)
type Repository interface {
Create(ctx context.Context, login *model.Login) error
Get(ctx context.Context, code string) (*model.Login, error)
Create(ctx context.Context, login *domain.Login) error
Get(ctx context.Context, code string) (*domain.Login, error)
Delete(ctx context.Context, code string) error
}

View File

@ -5,7 +5,7 @@ import (
json "github.com/goccy/go-json"
"gitlab.com/toby3d/indieauth/internal/auth"
"gitlab.com/toby3d/indieauth/internal/model"
"gitlab.com/toby3d/indieauth/internal/domain"
bolt "go.etcd.io/bbolt"
)
@ -15,7 +15,7 @@ type boltAuthRepository struct {
func NewBoltAuthRepository(db *bolt.DB) (auth.Repository, error) {
if err := db.Update(func(tx *bolt.Tx) (err error) {
_, err = tx.CreateBucketIfNotExists(model.Login{}.Bucket())
_, err = tx.CreateBucketIfNotExists(domain.Login{}.Bucket())
return err
}); err != nil {
@ -27,22 +27,22 @@ func NewBoltAuthRepository(db *bolt.DB) (auth.Repository, error) {
}, nil
}
func (repo *boltAuthRepository) Create(ctx context.Context, login *model.Login) error {
func (repo *boltAuthRepository) Create(ctx context.Context, login *domain.Login) error {
jsonLogin, err := json.Marshal(login)
if err != nil {
return err
}
return repo.db.Update(func(tx *bolt.Tx) error {
return tx.Bucket(model.Login{}.Bucket()).Put([]byte(login.Code), jsonLogin)
return tx.Bucket(domain.Login{}.Bucket()).Put([]byte(login.Code), jsonLogin)
})
}
func (repo *boltAuthRepository) Get(ctx context.Context, code string) (*model.Login, error) {
login := new(model.Login)
func (repo *boltAuthRepository) Get(ctx context.Context, code string) (*domain.Login, error) {
login := new(domain.Login)
if err := repo.db.View(func(tx *bolt.Tx) error {
return json.Unmarshal(tx.Bucket(model.Login{}.Bucket()).Get([]byte(code)), login)
return json.Unmarshal(tx.Bucket(domain.Login{}.Bucket()).Get([]byte(code)), login)
}); err != nil {
return nil, err
}
@ -52,6 +52,6 @@ func (repo *boltAuthRepository) Get(ctx context.Context, code string) (*model.Lo
func (repo *boltAuthRepository) Delete(ctx context.Context, code string) error {
return repo.db.Update(func(tx *bolt.Tx) error {
return tx.Bucket(model.Login{}.Bucket()).Delete([]byte(code))
return tx.Bucket(domain.Login{}.Bucket()).Delete([]byte(code))
})
}

View File

@ -5,7 +5,7 @@ import (
"sync"
"gitlab.com/toby3d/indieauth/internal/auth"
"gitlab.com/toby3d/indieauth/internal/model"
"gitlab.com/toby3d/indieauth/internal/domain"
)
type memoryAuthRepository struct {
@ -18,19 +18,19 @@ func NewMemoryAuthRepository() auth.Repository {
}
}
func (repo *memoryAuthRepository) Create(ctx context.Context, login *model.Login) error {
func (repo *memoryAuthRepository) Create(ctx context.Context, login *domain.Login) error {
repo.logins.Store(login.Code, login)
return nil
}
func (repo *memoryAuthRepository) Get(ctx context.Context, code string) (*model.Login, error) {
func (repo *memoryAuthRepository) Get(ctx context.Context, code string) (*domain.Login, error) {
login, ok := repo.logins.LoadAndDelete(code)
if !ok {
return nil, nil
}
return login.(*model.Login), nil
return login.(*domain.Login), nil
}
func (repo *memoryAuthRepository) Delete(ctx context.Context, code string) error {

View File

@ -3,11 +3,11 @@ package auth
import (
"context"
"gitlab.com/toby3d/indieauth/internal/model"
"gitlab.com/toby3d/indieauth/internal/domain"
)
type UseCase interface {
Discovery(ctx context.Context, clientId string) (*model.Client, error)
Approve(ctx context.Context, login *model.Login) (string, error)
Exchange(ctx context.Context, req *model.ExchangeRequest) (string, error)
Discovery(ctx context.Context, clientId string) (*domain.Client, error)
Approve(ctx context.Context, login *domain.Login) (string, error)
Exchange(ctx context.Context, req *domain.ExchangeRequest) (string, error)
}

View File

@ -8,7 +8,7 @@ import (
http "github.com/valyala/fasthttp"
"gitlab.com/toby3d/indieauth/internal/auth"
"gitlab.com/toby3d/indieauth/internal/model"
"gitlab.com/toby3d/indieauth/internal/domain"
"gitlab.com/toby3d/indieauth/internal/pkce"
"gitlab.com/toby3d/indieauth/internal/random"
"willnorris.com/go/microformats"
@ -26,7 +26,7 @@ func NewAuthUseCase(repo auth.Repository) auth.UseCase {
}
}
func (useCase *authUseCase) Discovery(ctx context.Context, clientId string) (*model.Client, error) {
func (useCase *authUseCase) Discovery(ctx context.Context, clientId string) (*domain.Client, error) {
_, src, err := useCase.client.Get(nil, clientId)
if err != nil {
return nil, err
@ -39,7 +39,7 @@ func (useCase *authUseCase) Discovery(ctx context.Context, clientId string) (*mo
data := microformats.Parse(bytes.NewReader(src), cid)
client := new(model.Client)
client := new(domain.Client)
client.RedirectURI = make([]string, 0)
for i := range data.Items {
@ -68,7 +68,6 @@ func (useCase *authUseCase) Discovery(ctx context.Context, clientId string) (*mo
}
}
}
}
for key, values := range data.Rels {
@ -80,8 +79,8 @@ func (useCase *authUseCase) Discovery(ctx context.Context, clientId string) (*mo
}
if client.URL != clientId {
return nil, model.Error{
Code: model.ErrInvalidRequest.Code,
return nil, domain.Error{
Code: domain.ErrInvalidRequest.Code,
Description: "'client_id' does not match the actual client URL",
}
}
@ -89,7 +88,7 @@ func (useCase *authUseCase) Discovery(ctx context.Context, clientId string) (*mo
return client, nil
}
func (useCase *authUseCase) Approve(ctx context.Context, login *model.Login) (string, error) {
func (useCase *authUseCase) Approve(ctx context.Context, login *domain.Login) (string, error) {
login.Code = random.New().String(32)
if err := useCase.repo.Create(ctx, login); err != nil {
@ -99,7 +98,7 @@ func (useCase *authUseCase) Approve(ctx context.Context, login *model.Login) (st
return login.Code, nil
}
func (useCase *authUseCase) Exchange(ctx context.Context, req *model.ExchangeRequest) (string, error) {
func (useCase *authUseCase) Exchange(ctx context.Context, req *domain.ExchangeRequest) (string, error) {
login, err := useCase.repo.Get(ctx, req.Code)
if err != nil {
return "", err
@ -116,7 +115,7 @@ func (useCase *authUseCase) Exchange(ctx context.Context, req *model.ExchangeReq
}
if login.ClientID != req.ClientID || login.RedirectURI != req.RedirectURI {
return "", model.ErrInvalidRequest
return "", domain.ErrInvalidRequest
}
if login.CodeChallenge != "" {
@ -130,7 +129,7 @@ func (useCase *authUseCase) Exchange(ctx context.Context, req *model.ExchangeReq
codeChallenge.Generate()
if login.CodeChallenge != codeChallenge.Challenge {
return "", model.ErrInvalidRequest
return "", domain.ErrInvalidRequest
}
}

View File

@ -9,10 +9,10 @@ import (
"golang.org/x/text/language"
"golang.org/x/text/message"
"source.toby3d.me/website/oauth/internal/common"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/random"
"source.toby3d.me/website/oauth/web"
"source.toby3d.me/website/indieauth/internal/common"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/random"
"source.toby3d.me/website/indieauth/web"
)
type RequestHandler struct {

View File

@ -10,9 +10,9 @@ import (
"golang.org/x/text/language"
"golang.org/x/text/message"
delivery "source.toby3d.me/website/oauth/internal/client/delivery/http"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/testing/httptest"
delivery "source.toby3d.me/website/indieauth/internal/client/delivery/http"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/testing/httptest"
)
func TestRead(t *testing.T) {

View File

@ -4,7 +4,7 @@ import (
"context"
"errors"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
type Repository interface {

View File

@ -11,8 +11,8 @@ import (
http "github.com/valyala/fasthttp"
"willnorris.com/go/microformats"
"source.toby3d.me/website/oauth/internal/client"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/client"
"source.toby3d.me/website/indieauth/internal/domain"
)
type httpClientRepository struct {

View File

@ -9,10 +9,10 @@ import (
"github.com/stretchr/testify/require"
http "github.com/valyala/fasthttp"
repository "source.toby3d.me/website/oauth/internal/client/repository/http"
"source.toby3d.me/website/oauth/internal/common"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/testing/httptest"
repository "source.toby3d.me/website/indieauth/internal/client/repository/http"
"source.toby3d.me/website/indieauth/internal/common"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/testing/httptest"
)
const testBody string = `

View File

@ -5,8 +5,8 @@ import (
"path"
"sync"
"source.toby3d.me/website/oauth/internal/client"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/client"
"source.toby3d.me/website/indieauth/internal/domain"
)
type memoryClientRepository struct {

View File

@ -9,8 +9,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
repository "source.toby3d.me/website/oauth/internal/client/repository/memory"
"source.toby3d.me/website/oauth/internal/domain"
repository "source.toby3d.me/website/indieauth/internal/client/repository/memory"
"source.toby3d.me/website/indieauth/internal/domain"
)
func TestGet(t *testing.T) {

View File

@ -4,7 +4,7 @@ import (
"context"
"errors"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
type UseCase interface {

View File

@ -4,8 +4,8 @@ import (
"context"
"fmt"
"source.toby3d.me/website/oauth/internal/client"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/client"
"source.toby3d.me/website/indieauth/internal/domain"
)
type clientUseCase struct {

View File

@ -9,9 +9,9 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
repository "source.toby3d.me/website/oauth/internal/client/repository/memory"
"source.toby3d.me/website/oauth/internal/client/usecase"
"source.toby3d.me/website/oauth/internal/domain"
repository "source.toby3d.me/website/indieauth/internal/client/repository/memory"
"source.toby3d.me/website/indieauth/internal/client/usecase"
"source.toby3d.me/website/indieauth/internal/domain"
)
func TestDiscovery(t *testing.T) {

View File

@ -8,7 +8,7 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/viper"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
//nolint: gochecknoglobals

View File

@ -16,16 +16,16 @@ import (
"github.com/spf13/cobra"
http "github.com/valyala/fasthttp"
"github.com/valyala/fasthttp/pprofhandler"
bolt "go.etcd.io/bbolt"
"golang.org/x/text/language"
"golang.org/x/text/message"
clienthttpdelivery "source.toby3d.me/website/oauth/internal/client/delivery/http"
healthhttpdelivery "source.toby3d.me/website/oauth/internal/health/delivery/http"
metadatahttpdelivery "source.toby3d.me/website/oauth/internal/metadata/delivery/http"
tickethttpdelivery "source.toby3d.me/website/oauth/internal/ticket/delivery/http"
ticketrepo "source.toby3d.me/website/oauth/internal/ticket/repository/http"
ticketucase "source.toby3d.me/website/oauth/internal/ticket/usecase"
// bolt "go.etcd.io/bbolt".
clienthttpdelivery "source.toby3d.me/website/indieauth/internal/client/delivery/http"
healthhttpdelivery "source.toby3d.me/website/indieauth/internal/health/delivery/http"
metadatahttpdelivery "source.toby3d.me/website/indieauth/internal/metadata/delivery/http"
tickethttpdelivery "source.toby3d.me/website/indieauth/internal/ticket/delivery/http"
ticketrepo "source.toby3d.me/website/indieauth/internal/ticket/repository/http"
ticketucase "source.toby3d.me/website/indieauth/internal/ticket/usecase"
)
const (
@ -58,11 +58,13 @@ func init() {
}
func startServer(cmd *cobra.Command, args []string) {
store, err := bolt.Open(config.Database.Path, os.ModePerm, nil)
if err != nil {
log.Fatalln("failed to open database connection:", err)
}
defer store.Close()
/*
store, err := bolt.Open(config.Database.Path, os.ModePerm, nil)
if err != nil {
log.Fatalln("failed to open database connection:", err)
}
defer store.Close()
*/
httpClient := &http.Client{
Name: fmt.Sprintf("%s/0.1 (+%s)", config.Name, config.Server.GetAddress()),
@ -135,7 +137,7 @@ func startServer(cmd *cobra.Command, args []string) {
<-done
if err = server.Shutdown(); err != nil {
if err := server.Shutdown(); err != nil {
log.Fatalln("failed shutdown of server:", err)
}

View File

@ -6,7 +6,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
//nolint: funlen

View File

@ -8,7 +8,7 @@ import (
"github.com/brianvoe/gofakeit/v6"
"github.com/stretchr/testify/require"
"source.toby3d.me/website/oauth/internal/random"
"source.toby3d.me/website/indieauth/internal/random"
)
// Code describes the PKCE challenge to validate the security of the request.

View File

@ -5,7 +5,7 @@ import (
"github.com/stretchr/testify/assert"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
func TestParseCodeChallengeMethod(t *testing.T) {

View File

@ -13,8 +13,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/random"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/random"
)
//nolint: funlen

View File

@ -6,7 +6,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
func TestMe(t *testing.T) {

View File

@ -7,7 +7,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
func TestScopesUnmarshalJSON(t *testing.T) {

View File

@ -10,7 +10,7 @@ import (
"github.com/stretchr/testify/require"
http "github.com/valyala/fasthttp"
"source.toby3d.me/website/oauth/internal/random"
"source.toby3d.me/website/indieauth/internal/random"
)
type (

View File

@ -4,7 +4,7 @@ import (
"github.com/fasthttp/router"
http "github.com/valyala/fasthttp"
"source.toby3d.me/website/oauth/internal/common"
"source.toby3d.me/website/indieauth/internal/common"
)
type RequestHandler struct{}

View File

@ -8,8 +8,8 @@ import (
"github.com/stretchr/testify/require"
http "github.com/valyala/fasthttp"
delivery "source.toby3d.me/website/oauth/internal/health/delivery/http"
"source.toby3d.me/website/oauth/internal/testing/httptest"
delivery "source.toby3d.me/website/indieauth/internal/health/delivery/http"
"source.toby3d.me/website/indieauth/internal/testing/httptest"
)
func TestRequestHandler(t *testing.T) {

View File

@ -6,8 +6,8 @@ import (
"github.com/fasthttp/router"
http "github.com/valyala/fasthttp"
"source.toby3d.me/website/oauth/internal/common"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/common"
"source.toby3d.me/website/indieauth/internal/domain"
)
type (

View File

@ -9,9 +9,9 @@ import (
"github.com/stretchr/testify/require"
http "github.com/valyala/fasthttp"
"source.toby3d.me/website/oauth/internal/domain"
delivery "source.toby3d.me/website/oauth/internal/metadata/delivery/http"
"source.toby3d.me/website/oauth/internal/testing/httptest"
"source.toby3d.me/website/indieauth/internal/domain"
delivery "source.toby3d.me/website/indieauth/internal/metadata/delivery/http"
"source.toby3d.me/website/indieauth/internal/testing/httptest"
)
func TestMetadata(t *testing.T) {

View File

@ -9,9 +9,9 @@ import (
"golang.org/x/xerrors"
"source.toby3d.me/toby3d/form"
"source.toby3d.me/website/oauth/internal/common"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/ticket"
"source.toby3d.me/website/indieauth/internal/common"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/ticket"
)
type (

View File

@ -11,12 +11,12 @@ import (
"github.com/stretchr/testify/require"
http "github.com/valyala/fasthttp"
"source.toby3d.me/website/oauth/internal/common"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/testing/httptest"
delivery "source.toby3d.me/website/oauth/internal/ticket/delivery/http"
ticketrepo "source.toby3d.me/website/oauth/internal/ticket/repository/memory"
ucase "source.toby3d.me/website/oauth/internal/ticket/usecase"
"source.toby3d.me/website/indieauth/internal/common"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/testing/httptest"
delivery "source.toby3d.me/website/indieauth/internal/ticket/delivery/http"
ticketrepo "source.toby3d.me/website/indieauth/internal/ticket/repository/memory"
ucase "source.toby3d.me/website/indieauth/internal/ticket/usecase"
)
// TODO(toby3d): looks ugly, refactor this?

View File

@ -4,7 +4,7 @@ import (
"context"
"errors"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
type Repository interface {

View File

@ -12,8 +12,8 @@ import (
http "github.com/valyala/fasthttp"
"willnorris.com/go/microformats"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/ticket"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/ticket"
)
type (

View File

@ -11,10 +11,10 @@ import (
"github.com/stretchr/testify/require"
http "github.com/valyala/fasthttp"
"source.toby3d.me/website/oauth/internal/common"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/testing/httptest"
repository "source.toby3d.me/website/oauth/internal/ticket/repository/http"
"source.toby3d.me/website/indieauth/internal/common"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/testing/httptest"
repository "source.toby3d.me/website/indieauth/internal/ticket/repository/http"
)
type TestCase struct {

View File

@ -5,8 +5,8 @@ import (
"path"
"sync"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/ticket"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/ticket"
)
type memoryTicketRepository struct {

View File

@ -9,8 +9,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"source.toby3d.me/website/oauth/internal/domain"
repository "source.toby3d.me/website/oauth/internal/ticket/repository/memory"
"source.toby3d.me/website/indieauth/internal/domain"
repository "source.toby3d.me/website/indieauth/internal/ticket/repository/memory"
)
func TestGet(t *testing.T) {

View File

@ -3,7 +3,7 @@ package ticket
import (
"context"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
type UseCase interface {

View File

@ -7,9 +7,9 @@ import (
http "github.com/valyala/fasthttp"
"source.toby3d.me/website/oauth/internal/common"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/ticket"
"source.toby3d.me/website/indieauth/internal/common"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/ticket"
)
type (

View File

@ -11,11 +11,11 @@ import (
"github.com/stretchr/testify/require"
http "github.com/valyala/fasthttp"
"source.toby3d.me/website/oauth/internal/common"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/testing/httptest"
repo "source.toby3d.me/website/oauth/internal/ticket/repository/memory"
ucase "source.toby3d.me/website/oauth/internal/ticket/usecase"
"source.toby3d.me/website/indieauth/internal/common"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/testing/httptest"
repo "source.toby3d.me/website/indieauth/internal/ticket/repository/memory"
ucase "source.toby3d.me/website/indieauth/internal/ticket/usecase"
)
func TestRedeem(t *testing.T) {

View File

@ -9,9 +9,9 @@ import (
http "github.com/valyala/fasthttp"
"golang.org/x/xerrors"
"source.toby3d.me/website/oauth/internal/common"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/token"
"source.toby3d.me/website/indieauth/internal/common"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/token"
)
type (

View File

@ -12,14 +12,14 @@ import (
"github.com/stretchr/testify/require"
http "github.com/valyala/fasthttp"
"source.toby3d.me/website/oauth/internal/common"
configrepo "source.toby3d.me/website/oauth/internal/config/repository/viper"
configucase "source.toby3d.me/website/oauth/internal/config/usecase"
"source.toby3d.me/website/oauth/internal/domain"
delivery "source.toby3d.me/website/oauth/internal/token/delivery/http"
repository "source.toby3d.me/website/oauth/internal/token/repository/memory"
"source.toby3d.me/website/oauth/internal/token/usecase"
"source.toby3d.me/website/oauth/internal/util"
"source.toby3d.me/website/indieauth/internal/common"
configrepo "source.toby3d.me/website/indieauth/internal/config/repository/viper"
configucase "source.toby3d.me/website/indieauth/internal/config/usecase"
"source.toby3d.me/website/indieauth/internal/domain"
delivery "source.toby3d.me/website/indieauth/internal/token/delivery/http"
repository "source.toby3d.me/website/indieauth/internal/token/repository/memory"
"source.toby3d.me/website/indieauth/internal/token/usecase"
"source.toby3d.me/website/indieauth/internal/util"
)
func TestVerification(t *testing.T) {

View File

@ -4,7 +4,7 @@ import (
"context"
"errors"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
type Repository interface {

View File

@ -9,8 +9,8 @@ import (
bolt "go.etcd.io/bbolt"
"golang.org/x/xerrors"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/token"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/token"
)
type (

View File

@ -10,10 +10,10 @@ import (
"github.com/stretchr/testify/require"
bolt "go.etcd.io/bbolt"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/token"
repository "source.toby3d.me/website/oauth/internal/token/repository/bolt"
"source.toby3d.me/website/oauth/internal/util"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/token"
repository "source.toby3d.me/website/indieauth/internal/token/repository/bolt"
"source.toby3d.me/website/indieauth/internal/util"
)
func TestCreate(t *testing.T) {

View File

@ -7,8 +7,8 @@ import (
"golang.org/x/xerrors"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/token"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/token"
)
type memoryTokenRepository struct {

View File

@ -9,9 +9,9 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/token"
repository "source.toby3d.me/website/oauth/internal/token/repository/memory"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/token"
repository "source.toby3d.me/website/indieauth/internal/token/repository/memory"
)
func TestCreate(t *testing.T) {

View File

@ -4,7 +4,7 @@ import (
"context"
"errors"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
type (

View File

@ -10,10 +10,10 @@ import (
"github.com/pkg/errors"
"golang.org/x/xerrors"
"source.toby3d.me/website/oauth/internal/config"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/random"
"source.toby3d.me/website/oauth/internal/token"
"source.toby3d.me/website/indieauth/internal/config"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/random"
"source.toby3d.me/website/indieauth/internal/token"
)
type (

View File

@ -10,12 +10,12 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
configrepo "source.toby3d.me/website/oauth/internal/config/repository/viper"
configucase "source.toby3d.me/website/oauth/internal/config/usecase"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/token"
repository "source.toby3d.me/website/oauth/internal/token/repository/memory"
ucase "source.toby3d.me/website/oauth/internal/token/usecase"
configrepo "source.toby3d.me/website/indieauth/internal/config/repository/viper"
configucase "source.toby3d.me/website/indieauth/internal/config/usecase"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/token"
repository "source.toby3d.me/website/indieauth/internal/token/repository/memory"
ucase "source.toby3d.me/website/indieauth/internal/token/usecase"
)
func TestGenerate(t *testing.T) {

View File

@ -4,7 +4,7 @@ import (
"context"
"errors"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
type Repository interface {

View File

@ -12,8 +12,8 @@ import (
http "github.com/valyala/fasthttp"
"willnorris.com/go/microformats"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/user"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/user"
)
type (

View File

@ -12,10 +12,10 @@ import (
"github.com/stretchr/testify/require"
http "github.com/valyala/fasthttp"
"source.toby3d.me/website/oauth/internal/common"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/testing/httptest"
repository "source.toby3d.me/website/oauth/internal/user/repository/http"
"source.toby3d.me/website/indieauth/internal/common"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/testing/httptest"
repository "source.toby3d.me/website/indieauth/internal/user/repository/http"
)
const testBody string = `

View File

@ -5,8 +5,8 @@ import (
"path"
"sync"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/user"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/user"
)
type memoryUserRepository struct {

View File

@ -9,8 +9,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"source.toby3d.me/website/oauth/internal/domain"
repository "source.toby3d.me/website/oauth/internal/user/repository/memory"
"source.toby3d.me/website/indieauth/internal/domain"
repository "source.toby3d.me/website/indieauth/internal/user/repository/memory"
)
func TestGet(t *testing.T) {

View File

@ -3,7 +3,7 @@ package user
import (
"context"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
type UseCase interface {

View File

@ -4,8 +4,8 @@ import (
"context"
"fmt"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/oauth/internal/user"
"source.toby3d.me/website/indieauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/user"
)
type userUseCase struct {

View File

@ -8,9 +8,9 @@ import (
"github.com/stretchr/testify/assert"
"source.toby3d.me/website/oauth/internal/domain"
repository "source.toby3d.me/website/oauth/internal/user/repository/memory"
ucase "source.toby3d.me/website/oauth/internal/user/usecase"
"source.toby3d.me/website/indieauth/internal/domain"
repository "source.toby3d.me/website/indieauth/internal/user/repository/memory"
ucase "source.toby3d.me/website/indieauth/internal/user/usecase"
)
func TestFetch(t *testing.T) {

View File

@ -1,51 +1,6 @@
{
"language": "en",
"messages": [
{
"id": "Authorize {Name0}",
"message": "Authorize {Name0}",
"translation": "Authorize {Name0}",
"translatorComment": "Copied from source.",
"placeholders": [
{
"id": "Name0",
"string": "%[1]s",
"type": "string",
"underlyingType": "string",
"argNum": 1,
"expr": "p.Client.Name[0]"
}
],
"fuzzy": true
},
{
"id": "Authorize application",
"message": "Authorize application",
"translation": "Authorize application",
"translatorComment": "Authorization page header for an unnamed application",
"fuzzy": true
},
{
"id": "Authorize",
"message": "Authorize",
"translation": "Authorize",
"translatorComment": "Copied from source.",
"fuzzy": true
},
{
"id": "application",
"message": "application",
"translation": "application",
"translatorComment": "Copied from source.",
"fuzzy": true
},
{
"id": "Check your scopes",
"message": "Check your scopes",
"translation": "Check your scopes",
"translatorComment": "Name of the section with the set of access rights checkboxes on the login page",
"fuzzy": true
},
{
"id": "Deny",
"message": "Deny",
@ -66,20 +21,6 @@
"translation": "Sign In",
"translatorComment": "The name of the button in the site address entry form to start the login process",
"fuzzy": true
},
{
"id": "Create a new remote token",
"message": "Create a new remote token",
"translation": "Create a new remote token",
"translatorComment": "Copied from source.",
"fuzzy": true
},
{
"id": "Send",
"message": "Send",
"translation": "Send",
"translatorComment": "Copied from source.",
"fuzzy": true
}
]
}

View File

@ -1,43 +1,6 @@
{
"language": "ru",
"messages": [
{
"id": "Authorize {Name0}",
"message": "Authorize {Name0}",
"translation": "",
"placeholders": [
{
"id": "Name0",
"string": "%[1]s",
"type": "string",
"underlyingType": "string",
"argNum": 1,
"expr": "p.Client.Name[0]"
}
]
},
{
"id": "Authorize application",
"message": "Authorize application",
"translation": "Авторизовать приложение",
"translatorComment": "Заголовок страницы авторизации безымянного приложения"
},
{
"id": "Authorize",
"message": "Authorize",
"translation": ""
},
{
"id": "application",
"message": "application",
"translation": ""
},
{
"id": "Check your scopes",
"message": "Check your scopes",
"translation": "Проверь права доступа",
"translatorComment": "Имя секции с набором чекбоксов прав доступа на странице авторизации"
},
{
"id": "Deny",
"message": "Deny",
@ -55,16 +18,6 @@
"message": "Sign In",
"translation": "Войти",
"translatorComment": "Название кнопки в форме ввода адреса сайта для начала процесса входа"
},
{
"id": "Create a new remote token",
"message": "Create a new remote token",
"translation": ""
},
{
"id": "Send",
"message": "Send",
"translation": ""
}
]
}

View File

@ -7,7 +7,7 @@ package main
import (
_ "embed"
"source.toby3d.me/website/oauth/internal/cmd"
"source.toby3d.me/website/indieauth/internal/cmd"
)
func main() { cmd.Execute() }

View File

@ -1,351 +0,0 @@
// Code generated by qtc from "auth.qtpl". DO NOT EDIT.
// See https://github.com/valyala/quicktemplate for details.
//line ../../web/auth.qtpl:1
package web
//line ../../web/auth.qtpl:1
import "gitlab.com/toby3d/indieauth/internal/model"
//line ../../web/auth.qtpl:3
import (
qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate"
)
//line ../../web/auth.qtpl:3
var (
_ = qtio422016.Copy
_ = qt422016.AcquireByteBuffer
)
//line ../../web/auth.qtpl:4
type AuthPage struct {
Client *model.Client
CodeChallenge string
CodeChallengeMethod string
CSRF []byte
Me string
RedirectURI string
ResponseType string
Scope string
State []byte
}
//line ../../web/auth.qtpl:17
func (p *AuthPage) StreamLang(qw422016 *qt422016.Writer) {
//line ../../web/auth.qtpl:17
qw422016.N().S(`
en
`)
//line ../../web/auth.qtpl:19
}
//line ../../web/auth.qtpl:19
func (p *AuthPage) WriteLang(qq422016 qtio422016.Writer) {
//line ../../web/auth.qtpl:19
qw422016 := qt422016.AcquireWriter(qq422016)
//line ../../web/auth.qtpl:19
p.StreamLang(qw422016)
//line ../../web/auth.qtpl:19
qt422016.ReleaseWriter(qw422016)
//line ../../web/auth.qtpl:19
}
//line ../../web/auth.qtpl:19
func (p *AuthPage) Lang() string {
//line ../../web/auth.qtpl:19
qb422016 := qt422016.AcquireByteBuffer()
//line ../../web/auth.qtpl:19
p.WriteLang(qb422016)
//line ../../web/auth.qtpl:19
qs422016 := string(qb422016.B)
//line ../../web/auth.qtpl:19
qt422016.ReleaseByteBuffer(qb422016)
//line ../../web/auth.qtpl:19
return qs422016
//line ../../web/auth.qtpl:19
}
//line ../../web/auth.qtpl:21
func (p *AuthPage) StreamTitle(qw422016 *qt422016.Writer) {
//line ../../web/auth.qtpl:21
qw422016.N().S(`
Authorize `)
//line ../../web/auth.qtpl:22
qw422016.E().S(p.Client.Name)
//line ../../web/auth.qtpl:22
qw422016.N().S(`
`)
//line ../../web/auth.qtpl:23
}
//line ../../web/auth.qtpl:23
func (p *AuthPage) WriteTitle(qq422016 qtio422016.Writer) {
//line ../../web/auth.qtpl:23
qw422016 := qt422016.AcquireWriter(qq422016)
//line ../../web/auth.qtpl:23
p.StreamTitle(qw422016)
//line ../../web/auth.qtpl:23
qt422016.ReleaseWriter(qw422016)
//line ../../web/auth.qtpl:23
}
//line ../../web/auth.qtpl:23
func (p *AuthPage) Title() string {
//line ../../web/auth.qtpl:23
qb422016 := qt422016.AcquireByteBuffer()
//line ../../web/auth.qtpl:23
p.WriteTitle(qb422016)
//line ../../web/auth.qtpl:23
qs422016 := string(qb422016.B)
//line ../../web/auth.qtpl:23
qt422016.ReleaseByteBuffer(qb422016)
//line ../../web/auth.qtpl:23
return qs422016
//line ../../web/auth.qtpl:23
}
//line ../../web/auth.qtpl:25
func (p *AuthPage) StreamHead(qw422016 *qt422016.Writer) {
//line ../../web/auth.qtpl:25
qw422016.N().S(`
`)
//line ../../web/auth.qtpl:26
}
//line ../../web/auth.qtpl:26
func (p *AuthPage) WriteHead(qq422016 qtio422016.Writer) {
//line ../../web/auth.qtpl:26
qw422016 := qt422016.AcquireWriter(qq422016)
//line ../../web/auth.qtpl:26
p.StreamHead(qw422016)
//line ../../web/auth.qtpl:26
qt422016.ReleaseWriter(qw422016)
//line ../../web/auth.qtpl:26
}
//line ../../web/auth.qtpl:26
func (p *AuthPage) Head() string {
//line ../../web/auth.qtpl:26
qb422016 := qt422016.AcquireByteBuffer()
//line ../../web/auth.qtpl:26
p.WriteHead(qb422016)
//line ../../web/auth.qtpl:26
qs422016 := string(qb422016.B)
//line ../../web/auth.qtpl:26
qt422016.ReleaseByteBuffer(qb422016)
//line ../../web/auth.qtpl:26
return qs422016
//line ../../web/auth.qtpl:26
}
//line ../../web/auth.qtpl:28
func (p *AuthPage) StreamBody(qw422016 *qt422016.Writer) {
//line ../../web/auth.qtpl:28
qw422016.N().S(`
`)
//line ../../web/auth.qtpl:29
if p.Client.Logo != "" {
//line ../../web/auth.qtpl:29
qw422016.N().S(`
<img
alt="`)
//line ../../web/auth.qtpl:31
qw422016.E().S(p.Client.Name)
//line ../../web/auth.qtpl:31
qw422016.N().S(`"
crossorigin="anonymous"
decoding="async"
height="140"
importance="high"
loading="lazy"
referrerpolicy="no-referrer-when-downgrade"
src="`)
//line ../../web/auth.qtpl:38
qw422016.E().S(p.Client.Logo)
//line ../../web/auth.qtpl:38
qw422016.N().S(`"
width="140">
`)
//line ../../web/auth.qtpl:40
}
//line ../../web/auth.qtpl:40
qw422016.N().S(`
<h2>`)
//line ../../web/auth.qtpl:42
qw422016.E().S(p.Client.Name)
//line ../../web/auth.qtpl:42
qw422016.N().S(`</h2>
<form
accept-charset="utf-8"
action="/authorize"
autocomplete="off"
enctype="application/x-www-form-urlencoded"
method="post"
novalidate="true"
target="_self">
`)
//line ../../web/auth.qtpl:53
if p.CSRF != nil {
//line ../../web/auth.qtpl:53
qw422016.N().S(`
<input
name="_csrf"
type="hidden"
value="`)
//line ../../web/auth.qtpl:57
qw422016.E().Z(p.CSRF)
//line ../../web/auth.qtpl:57
qw422016.N().S(`">
`)
//line ../../web/auth.qtpl:58
}
//line ../../web/auth.qtpl:58
qw422016.N().S(`
<input
name="response_type"
type="hidden"
value="code">
<input
name="client_id"
type="hidden"
value="`)
//line ../../web/auth.qtpl:68
qw422016.E().S(p.Client.URL)
//line ../../web/auth.qtpl:68
qw422016.N().S(`">
<input
name="redirect_uri"
type="hidden"
value="`)
//line ../../web/auth.qtpl:73
qw422016.E().S(p.RedirectURI)
//line ../../web/auth.qtpl:73
qw422016.N().S(`">
<input
name="state"
type="hidden"
value="`)
//line ../../web/auth.qtpl:78
qw422016.E().Z(p.State)
//line ../../web/auth.qtpl:78
qw422016.N().S(`">
`)
//line ../../web/auth.qtpl:80
if p.CodeChallenge != "" {
//line ../../web/auth.qtpl:80
qw422016.N().S(`
<input
name="code_challenge"
type="hidden"
value="`)
//line ../../web/auth.qtpl:84
qw422016.E().S(p.CodeChallenge)
//line ../../web/auth.qtpl:84
qw422016.N().S(`">
<input
name="code_challenge_method"
type="hidden"
value="`)
//line ../../web/auth.qtpl:89
qw422016.E().S(p.CodeChallengeMethod)
//line ../../web/auth.qtpl:89
qw422016.N().S(`">
`)
//line ../../web/auth.qtpl:90
}
//line ../../web/auth.qtpl:90
qw422016.N().S(`
`)
//line ../../web/auth.qtpl:92
if p.Scope != "" {
//line ../../web/auth.qtpl:92
qw422016.N().S(`
<input
name="scope"
type="hidden"
value="`)
//line ../../web/auth.qtpl:96
qw422016.E().S(p.Scope)
//line ../../web/auth.qtpl:96
qw422016.N().S(`">
`)
//line ../../web/auth.qtpl:97
}
//line ../../web/auth.qtpl:97
qw422016.N().S(`
`)
//line ../../web/auth.qtpl:99
if p.Me != "" {
//line ../../web/auth.qtpl:99
qw422016.N().S(`
<input
name="me"
type="hidden"
value="`)
//line ../../web/auth.qtpl:103
qw422016.E().S(p.Me)
//line ../../web/auth.qtpl:103
qw422016.N().S(`">
`)
//line ../../web/auth.qtpl:104
}
//line ../../web/auth.qtpl:104
qw422016.N().S(`
<button
name="authorize"
type="submit"
value="deny">
Deny
</button>
<button
name="authorize"
type="submit"
value="allow">
Allow
</button>
</form>
`)
//line ../../web/auth.qtpl:120
}
//line ../../web/auth.qtpl:120
func (p *AuthPage) WriteBody(qq422016 qtio422016.Writer) {
//line ../../web/auth.qtpl:120
qw422016 := qt422016.AcquireWriter(qq422016)
//line ../../web/auth.qtpl:120
p.StreamBody(qw422016)
//line ../../web/auth.qtpl:120
qt422016.ReleaseWriter(qw422016)
//line ../../web/auth.qtpl:120
}
//line ../../web/auth.qtpl:120
func (p *AuthPage) Body() string {
//line ../../web/auth.qtpl:120
qb422016 := qt422016.AcquireByteBuffer()
//line ../../web/auth.qtpl:120
p.WriteBody(qb422016)
//line ../../web/auth.qtpl:120
qs422016 := string(qb422016.B)
//line ../../web/auth.qtpl:120
qt422016.ReleaseByteBuffer(qb422016)
//line ../../web/auth.qtpl:120
return qs422016
//line ../../web/auth.qtpl:120
}

View File

@ -1,60 +1,59 @@
{% import "gitlab.com/toby3d/indieauth/internal/model" %}
{% import "source.toby3d.me/website/indieauth/internal/domain" %}
{% code
type AuthPage struct {
Client *model.Client
CodeChallenge string
CodeChallengeMethod string
CSRF []byte
Me string
RedirectURI string
ResponseType string
Scope string
State []byte
}
%}
{% code type AuthPage struct {
BaseOf
Client *domain.Client
Me *domain.Me
RedirectURI *domain.URL
CodeChallengeMethod domain.CodeChallengeMethod
ResponseType domain.ResponseType
Scope domain.Scopes
CodeChallenge string
CSRF string
State string
} %}
{% func (p *AuthPage) Lang() %}
en
{% endfunc %}
{% func (p *AuthPage) Title() %}
Authorize {%s p.Client.Name %}
Authorize {%s p.Client.Name[0] %}
{% endfunc %}
{% func (p *AuthPage) Head() %}
{% endfunc %}
{% func (p *AuthPage) Body() %}
{% if p.Client.Logo != "" %}
{% if p.Client.Logo[0] != nil %}
<img
alt="{%s p.Client.Name %}"
alt="{%s p.Client.Name[0] %}"
crossorigin="anonymous"
decoding="async"
height="140"
importance="high"
loading="lazy"
referrerpolicy="no-referrer-when-downgrade"
src="{%s p.Client.Logo %}"
src="{%s p.Client.Logo[0].String() %}"
width="140">
{% endif %}
<h2>{%s p.Client.Name %}</h2>
<h2>{%s p.Client.Name[0] %}</h2>
<form
accept-charset="utf-8"
action="/authorize"
action="/api/authorize"
autocomplete="off"
enctype="application/x-www-form-urlencoded"
method="post"
novalidate="true"
target="_self">
{% if p.CSRF != nil %}
{% if p.CSRF != "" %}
<input
name="_csrf"
type="hidden"
value="{%z p.CSRF %}">
value="{%s p.CSRF %}">
{% endif %}
<input
@ -65,17 +64,17 @@
<input
name="client_id"
type="hidden"
value="{%s p.Client.URL %}">
value="{%s p.Client.URL[0].String() %}">
<input
name="redirect_uri"
type="hidden"
value="{%s p.RedirectURI %}">
value="{%s p.RedirectURI.String() %}">
<input
name="state"
type="hidden"
value="{%z p.State %}">
value="{%s p.State %}">
{% if p.CodeChallenge != "" %}
<input
@ -86,35 +85,37 @@
<input
name="code_challenge_method"
type="hidden"
value="{%s p.CodeChallengeMethod %}">
value="{%s p.CodeChallengeMethod.String() %}">
{% endif %}
{% if p.Scope != "" %}
{% if len(p.Scope) != 0 %}
<input
name="scope"
type="hidden"
value="{%s p.Scope %}">
value="{%s p.Scope.String() %}">
{% endif %}
{% if p.Me != "" %}
{% if p.Me != nil %}
<input
name="me"
type="hidden"
value="{%s p.Me %}">
value="{%s p.Me.String() %}">
{% endif %}
<button
name="authorize"
type="submit"
value="deny">
Deny
{%= p.T("Deny") %}
</button>
<button
name="authorize"
type="submit"
value="allow">
Allow
{%= p.T("Allow") %}
</button>
</form>
{% endfunc %}

362
web/authorize.qtpl.go Normal file
View File

@ -0,0 +1,362 @@
// Code generated by qtc from "authorize.qtpl". DO NOT EDIT.
// See https://github.com/valyala/quicktemplate for details.
//line web/authorize.qtpl:1
package web
//line web/authorize.qtpl:1
import "source.toby3d.me/website/indieauth/internal/domain"
//line web/authorize.qtpl:3
import (
qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate"
)
//line web/authorize.qtpl:3
var (
_ = qtio422016.Copy
_ = qt422016.AcquireByteBuffer
)
//line web/authorize.qtpl:3
type AuthPage struct {
BaseOf
Client *domain.Client
Me *domain.Me
RedirectURI *domain.URL
CodeChallengeMethod domain.CodeChallengeMethod
ResponseType domain.ResponseType
Scope domain.Scopes
CodeChallenge string
CSRF string
State string
}
//line web/authorize.qtpl:16
func (p *AuthPage) StreamLang(qw422016 *qt422016.Writer) {
//line web/authorize.qtpl:16
qw422016.N().S(`
en
`)
//line web/authorize.qtpl:18
}
//line web/authorize.qtpl:18
func (p *AuthPage) WriteLang(qq422016 qtio422016.Writer) {
//line web/authorize.qtpl:18
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/authorize.qtpl:18
p.StreamLang(qw422016)
//line web/authorize.qtpl:18
qt422016.ReleaseWriter(qw422016)
//line web/authorize.qtpl:18
}
//line web/authorize.qtpl:18
func (p *AuthPage) Lang() string {
//line web/authorize.qtpl:18
qb422016 := qt422016.AcquireByteBuffer()
//line web/authorize.qtpl:18
p.WriteLang(qb422016)
//line web/authorize.qtpl:18
qs422016 := string(qb422016.B)
//line web/authorize.qtpl:18
qt422016.ReleaseByteBuffer(qb422016)
//line web/authorize.qtpl:18
return qs422016
//line web/authorize.qtpl:18
}
//line web/authorize.qtpl:20
func (p *AuthPage) StreamTitle(qw422016 *qt422016.Writer) {
//line web/authorize.qtpl:20
qw422016.N().S(`
Authorize `)
//line web/authorize.qtpl:21
qw422016.E().S(p.Client.Name[0])
//line web/authorize.qtpl:21
qw422016.N().S(`
`)
//line web/authorize.qtpl:22
}
//line web/authorize.qtpl:22
func (p *AuthPage) WriteTitle(qq422016 qtio422016.Writer) {
//line web/authorize.qtpl:22
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/authorize.qtpl:22
p.StreamTitle(qw422016)
//line web/authorize.qtpl:22
qt422016.ReleaseWriter(qw422016)
//line web/authorize.qtpl:22
}
//line web/authorize.qtpl:22
func (p *AuthPage) Title() string {
//line web/authorize.qtpl:22
qb422016 := qt422016.AcquireByteBuffer()
//line web/authorize.qtpl:22
p.WriteTitle(qb422016)
//line web/authorize.qtpl:22
qs422016 := string(qb422016.B)
//line web/authorize.qtpl:22
qt422016.ReleaseByteBuffer(qb422016)
//line web/authorize.qtpl:22
return qs422016
//line web/authorize.qtpl:22
}
//line web/authorize.qtpl:24
func (p *AuthPage) StreamHead(qw422016 *qt422016.Writer) {
//line web/authorize.qtpl:24
qw422016.N().S(`
`)
//line web/authorize.qtpl:25
}
//line web/authorize.qtpl:25
func (p *AuthPage) WriteHead(qq422016 qtio422016.Writer) {
//line web/authorize.qtpl:25
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/authorize.qtpl:25
p.StreamHead(qw422016)
//line web/authorize.qtpl:25
qt422016.ReleaseWriter(qw422016)
//line web/authorize.qtpl:25
}
//line web/authorize.qtpl:25
func (p *AuthPage) Head() string {
//line web/authorize.qtpl:25
qb422016 := qt422016.AcquireByteBuffer()
//line web/authorize.qtpl:25
p.WriteHead(qb422016)
//line web/authorize.qtpl:25
qs422016 := string(qb422016.B)
//line web/authorize.qtpl:25
qt422016.ReleaseByteBuffer(qb422016)
//line web/authorize.qtpl:25
return qs422016
//line web/authorize.qtpl:25
}
//line web/authorize.qtpl:27
func (p *AuthPage) StreamBody(qw422016 *qt422016.Writer) {
//line web/authorize.qtpl:27
qw422016.N().S(`
`)
//line web/authorize.qtpl:28
if p.Client.Logo[0] != nil {
//line web/authorize.qtpl:28
qw422016.N().S(`
<img
alt="`)
//line web/authorize.qtpl:30
qw422016.E().S(p.Client.Name[0])
//line web/authorize.qtpl:30
qw422016.N().S(`"
crossorigin="anonymous"
decoding="async"
height="140"
importance="high"
loading="lazy"
referrerpolicy="no-referrer-when-downgrade"
src="`)
//line web/authorize.qtpl:37
qw422016.E().S(p.Client.Logo[0].String())
//line web/authorize.qtpl:37
qw422016.N().S(`"
width="140">
`)
//line web/authorize.qtpl:39
}
//line web/authorize.qtpl:39
qw422016.N().S(`
<h2>`)
//line web/authorize.qtpl:41
qw422016.E().S(p.Client.Name[0])
//line web/authorize.qtpl:41
qw422016.N().S(`</h2>
<form
accept-charset="utf-8"
action="/api/authorize"
autocomplete="off"
enctype="application/x-www-form-urlencoded"
method="post"
novalidate="true"
target="_self">
`)
//line web/authorize.qtpl:52
if p.CSRF != "" {
//line web/authorize.qtpl:52
qw422016.N().S(`
<input
name="_csrf"
type="hidden"
value="`)
//line web/authorize.qtpl:56
qw422016.E().S(p.CSRF)
//line web/authorize.qtpl:56
qw422016.N().S(`">
`)
//line web/authorize.qtpl:57
}
//line web/authorize.qtpl:57
qw422016.N().S(`
<input
name="response_type"
type="hidden"
value="code">
<input
name="client_id"
type="hidden"
value="`)
//line web/authorize.qtpl:67
qw422016.E().S(p.Client.URL[0].String())
//line web/authorize.qtpl:67
qw422016.N().S(`">
<input
name="redirect_uri"
type="hidden"
value="`)
//line web/authorize.qtpl:72
qw422016.E().S(p.RedirectURI.String())
//line web/authorize.qtpl:72
qw422016.N().S(`">
<input
name="state"
type="hidden"
value="`)
//line web/authorize.qtpl:77
qw422016.E().S(p.State)
//line web/authorize.qtpl:77
qw422016.N().S(`">
`)
//line web/authorize.qtpl:79
if p.CodeChallenge != "" {
//line web/authorize.qtpl:79
qw422016.N().S(`
<input
name="code_challenge"
type="hidden"
value="`)
//line web/authorize.qtpl:83
qw422016.E().S(p.CodeChallenge)
//line web/authorize.qtpl:83
qw422016.N().S(`">
<input
name="code_challenge_method"
type="hidden"
value="`)
//line web/authorize.qtpl:88
qw422016.E().S(p.CodeChallengeMethod.String())
//line web/authorize.qtpl:88
qw422016.N().S(`">
`)
//line web/authorize.qtpl:89
}
//line web/authorize.qtpl:89
qw422016.N().S(`
`)
//line web/authorize.qtpl:91
if len(p.Scope) != 0 {
//line web/authorize.qtpl:91
qw422016.N().S(`
<input
name="scope"
type="hidden"
value="`)
//line web/authorize.qtpl:95
qw422016.E().S(p.Scope.String())
//line web/authorize.qtpl:95
qw422016.N().S(`">
`)
//line web/authorize.qtpl:96
}
//line web/authorize.qtpl:96
qw422016.N().S(`
`)
//line web/authorize.qtpl:98
if p.Me != nil {
//line web/authorize.qtpl:98
qw422016.N().S(`
<input
name="me"
type="hidden"
value="`)
//line web/authorize.qtpl:102
qw422016.E().S(p.Me.String())
//line web/authorize.qtpl:102
qw422016.N().S(`">
`)
//line web/authorize.qtpl:103
}
//line web/authorize.qtpl:103
qw422016.N().S(`
<button
name="authorize"
type="submit"
value="deny">
`)
//line web/authorize.qtpl:110
p.StreamT(qw422016, "Deny")
//line web/authorize.qtpl:110
qw422016.N().S(`
</button>
<button
name="authorize"
type="submit"
value="allow">
`)
//line web/authorize.qtpl:118
p.StreamT(qw422016, "Allow")
//line web/authorize.qtpl:118
qw422016.N().S(`
</button>
</form>
`)
//line web/authorize.qtpl:121
}
//line web/authorize.qtpl:121
func (p *AuthPage) WriteBody(qq422016 qtio422016.Writer) {
//line web/authorize.qtpl:121
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/authorize.qtpl:121
p.StreamBody(qw422016)
//line web/authorize.qtpl:121
qt422016.ReleaseWriter(qw422016)
//line web/authorize.qtpl:121
}
//line web/authorize.qtpl:121
func (p *AuthPage) Body() string {
//line web/authorize.qtpl:121
qb422016 := qt422016.AcquireByteBuffer()
//line web/authorize.qtpl:121
p.WriteBody(qb422016)
//line web/authorize.qtpl:121
qs422016 := string(qb422016.B)
//line web/authorize.qtpl:121
qt422016.ReleaseByteBuffer(qb422016)
//line web/authorize.qtpl:121
return qs422016
//line web/authorize.qtpl:121
}

View File

@ -2,7 +2,7 @@
"golang.org/x/text/language"
"golang.org/x/text/message"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
) %}
{% interface Page {
@ -10,15 +10,14 @@
Head()
Lang()
Title()
T(format string, args ...interface{})
} %}
{% code
type BaseOf struct {
Config *domain.Config
Language language.Tag
Printer *message.Printer
}
%}
{% code type BaseOf struct {
Config *domain.Config
Language language.Tag
Printer *message.Printer
} %}
{% stripspace %}
{% func (p *BaseOf) Lang() %}
@ -71,6 +70,7 @@
content="width=device-width, initial-scale=1.0">
{%= p.Head() %}
<title>{%= p.Title() %}</title>
</head>
<body class="page__body body">
@ -79,9 +79,9 @@
</html>
{% endfunc %}
{% func (p *BaseOf) T(str string, args ...interface{}) %}
{% func (p *BaseOf) T(format string, args ...interface{}) %}
{% code
result := p.Printer.Sprintf(str, args...)
result := p.Printer.Sprintf(format, args...)
%}
{%s result %}
{% endfunc %}

View File

@ -9,7 +9,7 @@ import (
"golang.org/x/text/language"
"golang.org/x/text/message"
"source.toby3d.me/website/oauth/internal/domain"
"source.toby3d.me/website/indieauth/internal/domain"
)
//line web/baseof.qtpl:8
@ -51,6 +51,12 @@ type Page interface {
StreamTitle(qw422016 *qt422016.Writer)
//line web/baseof.qtpl:8
WriteTitle(qq422016 qtio422016.Writer)
//line web/baseof.qtpl:8
T(format string, args ...interface{}) string
//line web/baseof.qtpl:8
StreamT(qw422016 *qt422016.Writer, format string, args ...interface{})
//line web/baseof.qtpl:8
WriteT(qq422016 qtio422016.Writer, format string, args ...interface{})
//line web/baseof.qtpl:8
}
@ -61,177 +67,177 @@ type BaseOf struct {
Printer *message.Printer
}
//line web/baseof.qtpl:24
//line web/baseof.qtpl:23
func (p *BaseOf) StreamLang(qw422016 *qt422016.Writer) {
//line web/baseof.qtpl:25
//line web/baseof.qtpl:24
if p.Language != language.Und {
//line web/baseof.qtpl:26
//line web/baseof.qtpl:25
qw422016.E().S(p.Language.String())
//line web/baseof.qtpl:27
//line web/baseof.qtpl:26
} else {
//line web/baseof.qtpl:27
//line web/baseof.qtpl:26
qw422016.N().S(`en`)
//line web/baseof.qtpl:29
//line web/baseof.qtpl:28
}
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
}
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
func (p *BaseOf) WriteLang(qq422016 qtio422016.Writer) {
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
p.StreamLang(qw422016)
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
qt422016.ReleaseWriter(qw422016)
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
}
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
func (p *BaseOf) Lang() string {
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
qb422016 := qt422016.AcquireByteBuffer()
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
p.WriteLang(qb422016)
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
qs422016 := string(qb422016.B)
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
qt422016.ReleaseByteBuffer(qb422016)
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
return qs422016
//line web/baseof.qtpl:30
//line web/baseof.qtpl:29
}
//line web/baseof.qtpl:34
//line web/baseof.qtpl:33
func (p *BaseOf) StreamTitle(qw422016 *qt422016.Writer) {
//line web/baseof.qtpl:33
qw422016.N().S(` `)
//line web/baseof.qtpl:34
qw422016.E().S(p.Config.Name)
//line web/baseof.qtpl:34
qw422016.N().S(` `)
//line web/baseof.qtpl:35
qw422016.E().S(p.Config.Name)
}
//line web/baseof.qtpl:35
qw422016.N().S(` `)
//line web/baseof.qtpl:36
}
//line web/baseof.qtpl:36
func (p *BaseOf) WriteTitle(qq422016 qtio422016.Writer) {
//line web/baseof.qtpl:36
//line web/baseof.qtpl:35
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/baseof.qtpl:36
//line web/baseof.qtpl:35
p.StreamTitle(qw422016)
//line web/baseof.qtpl:36
//line web/baseof.qtpl:35
qt422016.ReleaseWriter(qw422016)
//line web/baseof.qtpl:36
//line web/baseof.qtpl:35
}
//line web/baseof.qtpl:36
//line web/baseof.qtpl:35
func (p *BaseOf) Title() string {
//line web/baseof.qtpl:36
//line web/baseof.qtpl:35
qb422016 := qt422016.AcquireByteBuffer()
//line web/baseof.qtpl:36
//line web/baseof.qtpl:35
p.WriteTitle(qb422016)
//line web/baseof.qtpl:36
//line web/baseof.qtpl:35
qs422016 := string(qb422016.B)
//line web/baseof.qtpl:36
//line web/baseof.qtpl:35
qt422016.ReleaseByteBuffer(qb422016)
//line web/baseof.qtpl:36
//line web/baseof.qtpl:35
return qs422016
//line web/baseof.qtpl:36
//line web/baseof.qtpl:35
}
//line web/baseof.qtpl:38
//line web/baseof.qtpl:37
func (p *BaseOf) StreamHead(qw422016 *qt422016.Writer) {
//line web/baseof.qtpl:38
//line web/baseof.qtpl:37
qw422016.N().S(` `)
//line web/baseof.qtpl:39
//line web/baseof.qtpl:38
qw422016.N().S(` <link rel="icon" href="`)
//line web/baseof.qtpl:42
//line web/baseof.qtpl:41
qw422016.E().S(p.Config.Server.StaticURLPrefix)
//line web/baseof.qtpl:42
//line web/baseof.qtpl:41
qw422016.N().S(`/favicon.ico" sizes="any"> <link rel="icon" href="`)
//line web/baseof.qtpl:47
//line web/baseof.qtpl:46
qw422016.E().S(p.Config.Server.StaticURLPrefix)
//line web/baseof.qtpl:47
//line web/baseof.qtpl:46
qw422016.N().S(`/icon.svg" type="image/svg+xml"> <link rel="apple-touch-icon" href="`)
//line web/baseof.qtpl:52
//line web/baseof.qtpl:51
qw422016.E().S(p.Config.Server.StaticURLPrefix)
//line web/baseof.qtpl:52
//line web/baseof.qtpl:51
qw422016.N().S(`/apple-touch-icon.png"> <link rel="manifest" href="`)
//line web/baseof.qtpl:56
//line web/baseof.qtpl:55
qw422016.E().S(p.Config.Server.StaticURLPrefix)
//line web/baseof.qtpl:56
//line web/baseof.qtpl:55
qw422016.N().S(`/manifest.webmanifest"> `)
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
}
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
func (p *BaseOf) WriteHead(qq422016 qtio422016.Writer) {
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
p.StreamHead(qw422016)
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
qt422016.ReleaseWriter(qw422016)
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
}
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
func (p *BaseOf) Head() string {
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
qb422016 := qt422016.AcquireByteBuffer()
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
p.WriteHead(qb422016)
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
qs422016 := string(qb422016.B)
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
qt422016.ReleaseByteBuffer(qb422016)
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
return qs422016
//line web/baseof.qtpl:57
//line web/baseof.qtpl:56
}
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
func (p *BaseOf) StreamBody(qw422016 *qt422016.Writer) {
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
}
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
func (p *BaseOf) WriteBody(qq422016 qtio422016.Writer) {
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
p.StreamBody(qw422016)
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
qt422016.ReleaseWriter(qw422016)
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
}
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
func (p *BaseOf) Body() string {
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
qb422016 := qt422016.AcquireByteBuffer()
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
p.WriteBody(qb422016)
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
qs422016 := string(qb422016.B)
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
qt422016.ReleaseByteBuffer(qb422016)
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
return qs422016
//line web/baseof.qtpl:59
//line web/baseof.qtpl:58
}
//line web/baseof.qtpl:61
//line web/baseof.qtpl:60
func StreamTemplate(qw422016 *qt422016.Writer, p Page) {
//line web/baseof.qtpl:61
//line web/baseof.qtpl:60
qw422016.N().S(` <!DOCTYPE html> <html class="page" lang="`)
//line web/baseof.qtpl:65
//line web/baseof.qtpl:64
p.StreamLang(qw422016)
//line web/baseof.qtpl:65
//line web/baseof.qtpl:64
qw422016.N().S(`"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> `)
//line web/baseof.qtpl:73
//line web/baseof.qtpl:72
p.StreamHead(qw422016)
//line web/baseof.qtpl:73
//line web/baseof.qtpl:72
qw422016.N().S(` <title>`)
//line web/baseof.qtpl:74
p.StreamTitle(qw422016)
@ -271,11 +277,11 @@ func Template(p Page) string {
}
//line web/baseof.qtpl:82
func (p *BaseOf) StreamT(qw422016 *qt422016.Writer, str string, args ...interface{}) {
func (p *BaseOf) StreamT(qw422016 *qt422016.Writer, format string, args ...interface{}) {
//line web/baseof.qtpl:82
qw422016.N().S(` `)
//line web/baseof.qtpl:84
result := p.Printer.Sprintf(str, args...)
result := p.Printer.Sprintf(format, args...)
//line web/baseof.qtpl:85
qw422016.N().S(` `)
@ -287,22 +293,22 @@ func (p *BaseOf) StreamT(qw422016 *qt422016.Writer, str string, args ...interfac
}
//line web/baseof.qtpl:87
func (p *BaseOf) WriteT(qq422016 qtio422016.Writer, str string, args ...interface{}) {
func (p *BaseOf) WriteT(qq422016 qtio422016.Writer, format string, args ...interface{}) {
//line web/baseof.qtpl:87
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/baseof.qtpl:87
p.StreamT(qw422016, str, args...)
p.StreamT(qw422016, format, args...)
//line web/baseof.qtpl:87
qt422016.ReleaseWriter(qw422016)
//line web/baseof.qtpl:87
}
//line web/baseof.qtpl:87
func (p *BaseOf) T(str string, args ...interface{}) string {
func (p *BaseOf) T(format string, args ...interface{}) string {
//line web/baseof.qtpl:87
qb422016 := qt422016.AcquireByteBuffer()
//line web/baseof.qtpl:87
p.WriteT(qb422016, str, args...)
p.WriteT(qb422016, format, args...)
//line web/baseof.qtpl:87
qs422016 := string(qb422016.B)
//line web/baseof.qtpl:87

View File

@ -1,14 +1,12 @@
{% import "source.toby3d.me/website/oauth/internal/domain" %}
{% import "source.toby3d.me/website/indieauth/internal/domain" %}
{% code
type HomePage struct {
BaseOf
RedirectURI []*domain.URL
Client *domain.Client
AuthEndpoint,
State string
}
%}
{% code type HomePage struct {
BaseOf
RedirectURI []*domain.URL
Client *domain.Client
AuthEndpoint,
State string
} %}
{% collapsespace %}
{% func (p *HomePage) Head() %}

View File

@ -5,7 +5,7 @@
package web
//line web/home.qtpl:1
import "source.toby3d.me/website/oauth/internal/domain"
import "source.toby3d.me/website/indieauth/internal/domain"
//line web/home.qtpl:3
import (
@ -20,7 +20,7 @@ var (
_ = qt422016.AcquireByteBuffer
)
//line web/home.qtpl:4
//line web/home.qtpl:3
type HomePage struct {
BaseOf
RedirectURI []*domain.URL
@ -29,137 +29,137 @@ type HomePage struct {
State string
}
//line web/home.qtpl:14
//line web/home.qtpl:12
func (p *HomePage) StreamHead(qw422016 *qt422016.Writer) {
//line web/home.qtpl:14
//line web/home.qtpl:12
qw422016.N().S(` `)
//line web/home.qtpl:15
//line web/home.qtpl:13
p.BaseOf.StreamHead(qw422016)
//line web/home.qtpl:15
//line web/home.qtpl:13
qw422016.N().S(` `)
//line web/home.qtpl:16
//line web/home.qtpl:14
for i := range p.RedirectURI {
//line web/home.qtpl:16
//line web/home.qtpl:14
qw422016.N().S(` <link rel="redirect_uri" href="`)
//line web/home.qtpl:17
//line web/home.qtpl:15
qw422016.E().S(p.RedirectURI[i].String())
//line web/home.qtpl:17
//line web/home.qtpl:15
qw422016.N().S(`"> `)
//line web/home.qtpl:18
//line web/home.qtpl:16
}
//line web/home.qtpl:18
//line web/home.qtpl:16
qw422016.N().S(` `)
//line web/home.qtpl:19
//line web/home.qtpl:17
}
//line web/home.qtpl:19
//line web/home.qtpl:17
func (p *HomePage) WriteHead(qq422016 qtio422016.Writer) {
//line web/home.qtpl:19
//line web/home.qtpl:17
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/home.qtpl:19
//line web/home.qtpl:17
p.StreamHead(qw422016)
//line web/home.qtpl:19
//line web/home.qtpl:17
qt422016.ReleaseWriter(qw422016)
//line web/home.qtpl:19
//line web/home.qtpl:17
}
//line web/home.qtpl:19
//line web/home.qtpl:17
func (p *HomePage) Head() string {
//line web/home.qtpl:19
//line web/home.qtpl:17
qb422016 := qt422016.AcquireByteBuffer()
//line web/home.qtpl:19
//line web/home.qtpl:17
p.WriteHead(qb422016)
//line web/home.qtpl:19
//line web/home.qtpl:17
qs422016 := string(qb422016.B)
//line web/home.qtpl:19
//line web/home.qtpl:17
qt422016.ReleaseByteBuffer(qb422016)
//line web/home.qtpl:19
//line web/home.qtpl:17
return qs422016
//line web/home.qtpl:19
//line web/home.qtpl:17
}
//line web/home.qtpl:21
//line web/home.qtpl:19
func (p *HomePage) StreamBody(qw422016 *qt422016.Writer) {
//line web/home.qtpl:21
//line web/home.qtpl:19
qw422016.N().S(` <div class="h-app h-x-app"> <img class="u-logo" src="`)
//line web/home.qtpl:25
//line web/home.qtpl:23
qw422016.E().S(p.Client.Logo[0].String())
//line web/home.qtpl:25
//line web/home.qtpl:23
qw422016.N().S(`" alt="`)
//line web/home.qtpl:26
//line web/home.qtpl:24
qw422016.E().S(p.Client.Name[0])
//line web/home.qtpl:26
//line web/home.qtpl:24
qw422016.N().S(`" crossorigin="anonymous" decoding="async" height="140" importance="high" referrerpolicy="no-referrer-when-downgrade" width="140"> <h1> <a class="p-name u-url" href="`)
//line web/home.qtpl:37
//line web/home.qtpl:35
qw422016.E().S(p.Client.URL[0].String())
//line web/home.qtpl:37
//line web/home.qtpl:35
qw422016.N().S(`"> `)
//line web/home.qtpl:39
//line web/home.qtpl:37
qw422016.E().S(p.Client.Name[0])
//line web/home.qtpl:39
//line web/home.qtpl:37
qw422016.N().S(` </a> </h1> <form method="get" action="`)
//line web/home.qtpl:45
//line web/home.qtpl:43
qw422016.E().S(p.AuthEndpoint)
//line web/home.qtpl:45
//line web/home.qtpl:43
qw422016.N().S(`" enctype="application/x-www-form-urlencoded" accept-charset="utf-8" target="_self"> `)
//line web/home.qtpl:50
//line web/home.qtpl:48
for name, value := range map[string]string{
"client_id": p.Client.ID.String(),
"redirect_uri": p.Client.RedirectURI[0].String(),
"response_type": "code",
"state": p.State,
} {
//line web/home.qtpl:55
//line web/home.qtpl:53
qw422016.N().S(` <input type="hidden" name="`)
//line web/home.qtpl:58
//line web/home.qtpl:56
qw422016.E().S(name)
//line web/home.qtpl:58
//line web/home.qtpl:56
qw422016.N().S(`" value="`)
//line web/home.qtpl:59
//line web/home.qtpl:57
qw422016.E().S(value)
//line web/home.qtpl:59
//line web/home.qtpl:57
qw422016.N().S(`"> `)
//line web/home.qtpl:60
//line web/home.qtpl:58
}
//line web/home.qtpl:60
//line web/home.qtpl:58
qw422016.N().S(` <input type="hidden" name="scope" value="`)
//line web/home.qtpl:65
//line web/home.qtpl:63
qw422016.E().S(domain.ScopeProfile.String())
//line web/home.qtpl:65
//line web/home.qtpl:63
qw422016.N().S(` `)
//line web/home.qtpl:65
//line web/home.qtpl:63
qw422016.E().S(domain.ScopeEmail.String())
//line web/home.qtpl:65
//line web/home.qtpl:63
qw422016.N().S(`"> <input type="url" name="me" placeholder="https://example.com/" inputmode="url" autocomplete="url" required> <button type="submit">`)
//line web/home.qtpl:75
//line web/home.qtpl:73
p.StreamT(qw422016, "Sign In")
//line web/home.qtpl:75
//line web/home.qtpl:73
qw422016.N().S(`</button> </form> </div> `)
//line web/home.qtpl:78
//line web/home.qtpl:76
}
//line web/home.qtpl:78
//line web/home.qtpl:76
func (p *HomePage) WriteBody(qq422016 qtio422016.Writer) {
//line web/home.qtpl:78
//line web/home.qtpl:76
qw422016 := qt422016.AcquireWriter(qq422016)
//line web/home.qtpl:78
//line web/home.qtpl:76
p.StreamBody(qw422016)
//line web/home.qtpl:78
//line web/home.qtpl:76
qt422016.ReleaseWriter(qw422016)
//line web/home.qtpl:78
//line web/home.qtpl:76
}
//line web/home.qtpl:78
//line web/home.qtpl:76
func (p *HomePage) Body() string {
//line web/home.qtpl:78
//line web/home.qtpl:76
qb422016 := qt422016.AcquireByteBuffer()
//line web/home.qtpl:78
//line web/home.qtpl:76
p.WriteBody(qb422016)
//line web/home.qtpl:78
//line web/home.qtpl:76
qs422016 := string(qb422016.B)
//line web/home.qtpl:78
//line web/home.qtpl:76
qt422016.ReleaseByteBuffer(qb422016)
//line web/home.qtpl:78
//line web/home.qtpl:76
return qs422016
//line web/home.qtpl:78
//line web/home.qtpl:76
}