diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..64f847dc --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "gomod" + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 62b7a36e..b40a10cd 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -25,8 +25,8 @@ jobs: - name: Set up Go uses: actions/setup-go@v2 with: - go-version: 1.16 - + go-version: 1.17 + - name: Get dependencies run: go get -v -t -d ./... @@ -54,4 +54,3 @@ jobs: with: commit_message: update production style.css file_pattern: web/assets/style.css - diff --git a/Dockerfile b/Dockerfile index fbdc0277..2ba76a0b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: Unlicense -FROM golang:1.16-alpine +FROM golang:1.17-alpine RUN apk add --no-cache \ build-base \ diff --git a/README.md b/README.md index 2a68319a..dc77b558 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,12 @@ SPDX-License-Identifier: CC0-1.0 --> # Go-SSB Room -[![REUSE status](https://api.reuse.software/badge/github.com/ssb-ngi-pointer/go-ssb-room)](https://api.reuse.software/info/github.com/ssb-ngi-pointer/go-ssb-room) +[![REUSE status](https://api.reuse.software/badge/github.com/ssbc/go-ssb-room)](https://api.reuse.software/info/github.com/ssbc/go-ssb-room) This repository implements the [Room (v1+v2) server spec](https://github.com/ssbc/rooms2), in Go. It includes: -* secret-handshake+boxstream network transport, sometimes referred to as SHS, using [secretstream](https://github.com/cryptoscope/secretstream) +* secret-handshake+boxstream network transport, sometimes referred to as SHS, using [secretstream](https://github.com/ssbc/go-secretstream) * muxrpc handlers for tunneling connections * a fully embedded HTTP server & HTML frontend, for administering the room @@ -45,4 +45,3 @@ For an in-depth codebase walkthrough, see the [development.md](./docs/developmen ## License MIT - diff --git a/cmd/insert-user/main.go b/cmd/insert-user/main.go index d3c8bd0e..a7ef52cc 100644 --- a/cmd/insert-user/main.go +++ b/cmd/insert-user/main.go @@ -19,10 +19,10 @@ import ( _ "github.com/mattn/go-sqlite3" "golang.org/x/crypto/ssh/terminal" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite" ) func main() { @@ -76,7 +76,7 @@ func main() { check(err) defer db.Close() - fmt.Fprintln(os.Stderr, "Enter Password: ") + fmt.Fprintln(os.Stderr, "Choose a password to be able to log into the web frontend: ") bytePassword, err := terminal.ReadPassword(int(syscall.Stdin)) check(err) @@ -90,7 +90,7 @@ func main() { } ctx := context.Background() - mid, err := db.Members.Add(ctx, *pubKey, role) + mid, err := db.Members.Add(ctx, pubKey, role) check(err) err = db.AuthFallback.SetPassword(ctx, mid, string(bytePassword)) diff --git a/cmd/server/main.go b/cmd/server/main.go index d0f1c4b4..cd563b37 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -26,21 +26,21 @@ import ( _ "net/http/pprof" _ "github.com/mattn/go-sqlite3" + "github.com/ssbc/go-muxrpc/v2/debug" "github.com/throttled/throttled/v2" "github.com/throttled/throttled/v2/store/memstore" "github.com/unrolled/secure" - "go.cryptoscope.co/muxrpc/v2/debug" kitlog "go.mindeco.de/log" "go.mindeco.de/log/level" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/signinwithssb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomsrv" - mksrv "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomsrv" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/handlers" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/internal/signinwithssb" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite" + "github.com/ssbc/go-ssb-room/v2/roomsrv" + mksrv "github.com/ssbc/go-ssb-room/v2/roomsrv" + "github.com/ssbc/go-ssb-room/v2/web/handlers" ) // Version and Build are set by ldflags @@ -94,7 +94,7 @@ func initFlags() { u, err := user.Current() checkFatal(err) - flag.StringVar(&appKey, "shscap", "1KHLiKZvAvjbY1ziZEHMXawbCEIM6qwjCDm3VYRan/s=", "secret-handshake app-key (or capability)") + flag.StringVar(&appKey, "shscap", "1KHLiKZvAvjbY1ziZEHMXawbCEIM6qwjCDm3VYRan/s=", "secret-handshake app-key or capability; should likely not be changed as this makes you part of a different network") flag.StringVar(&listenAddrShsMux, "lismux", ":8008", "address to listen on for secret-handshake+muxrpc") flag.StringVar(&listenAddrHTTP, "lishttp", ":3000", "address to listen on for HTTP requests") @@ -379,7 +379,7 @@ func runroomsrv() error { // all init was successfull level.Info(log).Log( "event", "serving", - "ID", roomsrv.Whoami().Ref(), + "ID", roomsrv.Whoami().String(), "shsmuxaddr", listenAddrShsMux, "httpaddr", listenAddrHTTP, "version", version, "commit", commit, diff --git a/docs/architecture.md b/docs/architecture.md index 289fa405..20dadc26 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -9,9 +9,9 @@ SPDX-License-Identifier: CC0-1.0 ## Invite flow This implementation of Rooms 2.0 is compliant with the [Rooms 2.0 -specification](https://github.com/ssb-ngi-pointer/rooms2), but we add a few additional features +specification](https://github.com/ssbc/rooms2), but we add a few additional features and pages in order to improve user experience when their SSB app does not support [SSB -URIs](https://github.com/ssb-ngi-pointer/ssb-uri-spec). +URIs](https://github.com/ssbc/ssb-uri-spec). A summary can be seen in the following chart: @@ -25,7 +25,7 @@ in a form. ## Sign-in flow This implementation is compliant with [SSB HTTP -Authentication](https://github.com/ssb-ngi-pointer/ssb-http-auth-spec), but we add a few +Authentication](https://github.com/ssbc/ssb-http-auth-spec), but we add a few additional features and pages in order to improve user experience. For instance, besides conventional SSB HTTP Auth, we also render a QR code to sign-in with a remote SSB app (an SSB identity not on the device that has the browser open). We also support sign-in with @@ -33,4 +33,4 @@ username/password, what we call "fallback authentication". A summary can be seen in the following chart: -![Chart](./images/login-chart.png) \ No newline at end of file +![Chart](./images/login-chart.png) diff --git a/docs/deployment.md b/docs/deployment.md index 1f03fff0..143fd103 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -5,15 +5,16 @@ SPDX-License-Identifier: CC0-1.0 --> # Getting Started + There are two paths to starting your own room: creating a build from source, or downloading one of the premade releases. ## Premade builds -See the [releases page](https://github.com/ssb-ngi-pointer/go-ssb-room/releases) for packaged linux releases. +See the [releases page](https://github.com/ssbc/go-ssb-room/releases) for packaged linux releases. We currently only distributed pre-packaged releases for Debian-compatible distributions. -See [Issue #79](https://github.com/ssb-ngi-pointer/go-ssb-room/issues/79) for the details. +See [Issue #79](https://github.com/ssbc/go-ssb-room/issues/79) for the details. If this doesn't work for you, read the "Creating a build" section below. After running `sudo dpkg -i go-ssb-room_v1.2.3_Linux_x86_64.deb` pay special attention to the @@ -21,8 +22,8 @@ After running `sudo dpkg -i go-ssb-room_v1.2.3_Linux_x86_64.deb` pay special att ## Creating a build -* [Download Go](https://golang.org/doc/install) & [set up your Go environment](https://golang.org/doc/install#install). You will need at least Go v1.16. -* Download the repository `git clone git@github.com:ssb-ngi-pointer/go-ssb-room.git && cd go-ssb-room` +* [Download Go](https://golang.org/doc/install) & [set up your Go environment](https://golang.org/doc/install#install). You will need at least Go v1.17. +* Download the repository `git clone git@github.com:ssbc/go-ssb-room.git && cd go-ssb-room` * [Follow the development instructions](./development.md) * You should now have a working go-ssb-room binary! Read the HTTP Hosting section below and admin user sections below, for more instructions on the last mile. @@ -32,7 +33,7 @@ After running `sudo dpkg -i go-ssb-room_v1.2.3_Linux_x86_64.deb` pay special att This project includes a docker-compose.yml file as well as a Docker file. Using it should be fairly straight forward. -Start off by making a copy of `.env_example` called `.env` and insert your +Start off by making a copy of `.env_example` called `.env` and insert your website domain there. With that done execute ``` @@ -78,7 +79,7 @@ Two bits of rationale: 1. People usually want to have more than one site on their server. Put differently, we could have [LetsEncrypt](https://letsencrypt.org/) inside the go-ssb-room server but it would have to -listen on port :443—blocking the use of other domains on the same IP. +listen on port :443—blocking the use of other domains on the same IP. 2. Listening on :443 can be pretty annoying (you might need root privileges or similar capabilities). go-ssb-room needs three headers to function properly, which need to be forwarded by the @@ -111,7 +112,7 @@ is often added automatically by your provider. When the process is complete with `certbot`, pay attention to where the certificate has been placed in the filesystem. If it's at `/etc/letsencrypt/live/hermies.club`, it's correct, otherwise you may -need to rename it e.g. `hermies.club-0001` to `hermies.club`. +need to rename it e.g. `hermies.club-0001` to `hermies.club`. The example nginx configuration uses prebuilt Diffie-Hellman parameters. You can generate these with the following command: @@ -162,6 +163,8 @@ If you installed the Debian package, you will first need to install Go to build sudo apt-get install golang-go ``` +(**WARNING**: please check that `golang-go` is >= 1.17 and if not, you may need to use the [official installation documentation](https://go.dev/dl/) instead. `go-ssb-room` requires at least Go 1.17.) + In a new terminal window navigate to the insert-user utility folder and compile the GO-based utility into an executable your computer can use ``` @@ -184,5 +187,4 @@ Or if you installed go-ssb-room using the Debian package: sudo ./insert-user -repo "/var/lib/go-ssb-room" "@Bp5Z5TQKv6E/Y+QZn/3LiDWMPi63EP8MHsXZ4tiIb2w=.ed25519" ``` -You can now login in the web-front-end using these credentials - +It will ask you to create a password to access the web-front-end. You can now login in the web-front-end using these credentials. diff --git a/docs/development.md b/docs/development.md index f1480af7..d27fe189 100644 --- a/docs/development.md +++ b/docs/development.md @@ -6,7 +6,7 @@ SPDX-License-Identifier: CC0-1.0 ## Development notes -To get started, you need a recent version of [Go](https://golang.org). v1.16 and onward should be sufficient. +To get started, you need a recent version of [Go](https://golang.org). v1.17 and onward should be sufficient. Also, if you want to develop the CSS and HTML on the website, you need Node.js v14 in order to compile Tailwind. @@ -37,7 +37,7 @@ Usage of ./server: -repo string where to put the log and indexes (default "~/.ssb-go-room") -shscap string - secret-handshake app-key (or capability) (default "1KHLiKZvAvjbY1ziZEHMXawbCEIM6qwjCDm3VYRan/s=") + secret-handshake app-key or capability; should likely not be changed as this makes you part of a different network (default "1KHLiKZvAvjbY1ziZEHMXawbCEIM6qwjCDm3VYRan/s=") -version print version number and build date @@ -69,8 +69,8 @@ go generate ./... cd cmd/server && go build && ./server -htts-domain=my.room.example ``` - ## Tooling + ### Mocks [`counterfeiter`](https://github.com/maxbrunsfeld/counterfeiter) enables generating mocks for defined interfaces. To update the mocks, run `go generate` in package roomdb. @@ -126,7 +126,7 @@ See the [testing.md](./testing.md) for a thorough walkthorugh of the different t ## Release packaging -Because of [issue #79](https://github.com/ssb-ngi-pointer/go-ssb-room/issues/79) we can't simply create binaries for all platforms independantly. Therefore binaries for re-distributions need to be created on the relevant distributions themselvs. We currently do this for debian. The process is as follows: +Because of [issue #79](https://github.com/ssbc/go-ssb-room/issues/79) we can't simply create binaries for all platforms independantly. Therefore binaries for re-distributions need to be created on the relevant distributions themselvs. We currently do this for debian. The process is as follows: 1) Install a recent debian stable version onto a dedicated machine or VM for instance (docker might also be possible). 2) Install [Go](https://golang.org/doc/install). diff --git a/docs/files/debian-postinstall.sh b/docs/files/debian-postinstall.sh index 88d18b9e..c8a63586 100644 --- a/docs/files/debian-postinstall.sh +++ b/docs/files/debian-postinstall.sh @@ -16,12 +16,12 @@ It will store it's files (roomdb and cookie secrets) under /var/lib/go-ssb-room. This is also where you would put custom translations. For more configuration background see /usr/share/go-ssb-room/README.md -or visit the code repo at https://github.com/ssb-ngi-pointer/go-ssb-room/tree/master/docs +or visit the code repo at https://github.com/ssbc/go-ssb-room/tree/master/docs Like outlined in that document, we highly encourage using nginx with certbot for TLS termination. We also supply an example config for this. You can find it under /usr/share/go-ssb-room/nginx-example.conf -> Important +> Important Before you start using room server via the systemd service, you need to at least change the https domain in the systemd service. diff --git a/docs/testing.md b/docs/testing.md index 43f6fac3..5a758c52 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -37,21 +37,25 @@ The frontend tests—tests that check for the presence of various elements on se the module [`goquery`](https://github.com/PuerkitoBio/goquery) for querying the returned HTML. ## Snippets + #### Print the raw html of the corresponding page + ``` - html, _ := ts.Client.GetHTML(url) - fmt.Println(html.Html()) +html, _ := ts.Client.GetHTML(url) +fmt.Println(html.Html()) ``` #### Find and print the `title` element of a page + ``` - html, _ := ts.Client.GetHTML(url) - title := html.Find("title") - // print the title string - fmt.Println(title.Text()) +html, _ := ts.Client.GetHTML(url) +title := html.Find("title") +// print the title string +fmt.Println(title.Text()) ``` ## Filling the mockdb + `go-ssb-room` uses database mocks for performing tests against the backend database logic. This means prefilling a route with the data you expect to be returned when the route is queried. This type of testing is an alternative to using an entire pre-filled sqlite database of test @@ -59,7 +63,7 @@ data. As such, there is no command you run first to generate your fake database, but functions you have to call in a kind of pre-test setup, inside each testing -block you are authoring. +block you are authoring. > [counterfeiter](https://github.com/maxbrunsfeld/counterfeiter) generates a bunch of methods for each function, so you have > XXXXReturns, XXXCallCount XXXArgsForCall(i) etc @@ -72,6 +76,7 @@ That is, for a function `GetUID` there is a corresponding mock-filling function The following examples show more concretely what mocking the data looks like. **Having the List() function return a static list of three items:** + ```go // go-ssb-room/web/handlers/admin/allow_list_test.go:113 lst := roomdb.ListEntries{ @@ -80,10 +85,10 @@ lst := roomdb.ListEntries{ {ID: 3, PubKey: refs.FeedRef{ID: bytes.Repeat([]byte("acab"), 8), Algo: "true"}}, } ts.MembersDB.ListReturns(lst, nil) - ``` **Checking how often RemoveID was called and with what arguments:** + ```go // go-ssb-room/web/handlers/admin/allow_list_test.go:210 a.Equal(1, ts.MembersDB.RemoveIDCallCount()) @@ -91,8 +96,8 @@ ts.MembersDB.ListReturns(lst, nil) a.EqualValues(666, theID) ``` - ## Example test + ```go package handlers @@ -144,4 +149,3 @@ cd muxrpc/test/nodejs npm ci go test ``` - diff --git a/go.mod b/go.mod index 46f7b3d8..f238f643 100644 --- a/go.mod +++ b/go.mod @@ -2,60 +2,60 @@ // // SPDX-License-Identifier: Unlicense -module github.com/ssb-ngi-pointer/go-ssb-room/v2 +module github.com/ssbc/go-ssb-room/v2 go 1.16 require ( - github.com/BurntSushi/toml v0.3.1 - github.com/PuerkitoBio/goquery v1.5.0 + filippo.io/edwards25519 v1.0.0 // indirect + github.com/BurntSushi/toml v1.2.1 + github.com/PuerkitoBio/goquery v1.8.0 github.com/dustin/go-humanize v1.0.0 github.com/friendsofgo/errors v0.9.2 + github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/gofrs/uuid v4.0.0+incompatible // indirect - github.com/gorilla/csrf v1.7.0 + github.com/gomodule/redigo v2.0.0+incompatible // indirect + github.com/gorilla/csrf v1.7.1 github.com/gorilla/mux v1.8.0 github.com/gorilla/securecookie v1.1.1 github.com/gorilla/sessions v1.2.1 - github.com/gorilla/websocket v1.4.2 - github.com/mattevans/pwned-passwords v0.3.0 - github.com/mattn/go-sqlite3 v2.0.3+incompatible - github.com/maxbrunsfeld/counterfeiter/v6 v6.3.0 - github.com/mileusna/useragent v1.0.2 // indirect - github.com/nicksnyder/go-i18n/v2 v2.1.2 + github.com/gorilla/websocket v1.5.0 + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/mattevans/pwned-passwords v0.6.0 + github.com/mattn/go-sqlite3 v1.14.16 + github.com/maxbrunsfeld/counterfeiter/v6 v6.5.0 + github.com/mileusna/useragent v1.2.1 + github.com/nicksnyder/go-i18n/v2 v2.2.0 + github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect github.com/pkg/errors v0.9.1 - github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351 + github.com/rubenv/sql-migrate v1.2.0 github.com/russross/blackfriday/v2 v2.1.0 + github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e - github.com/stretchr/testify v1.7.0 - github.com/throttled/throttled/v2 v2.7.1 - github.com/unrolled/secure v1.0.8 + github.com/spf13/cast v1.5.0 // indirect + github.com/ssbc/go-muxrpc/v2 v2.0.14-0.20221020091224-b09bdf60812f + github.com/ssbc/go-netwrap v0.1.5-0.20221019160355-cd323bb2e29d + github.com/ssbc/go-secretstream v1.2.11-0.20221019175226-fa042d4912fe + github.com/ssbc/go-ssb-refs v0.5.2-0.20221019090322-8b558c2f31de + github.com/stretchr/testify v1.8.1 + github.com/throttled/throttled/v2 v2.9.1 + github.com/unrolled/secure v1.13.0 github.com/vcraescu/go-paginator/v2 v2.0.0 - github.com/volatiletech/sqlboiler/v4 v4.5.0 - github.com/volatiletech/strmangle v0.0.1 - go.cryptoscope.co/muxrpc/v2 v2.0.6 - go.cryptoscope.co/netwrap v0.1.1 + github.com/volatiletech/sqlboiler/v4 v4.13.0 + github.com/volatiletech/strmangle v0.0.4 go.cryptoscope.co/nocomment v0.0.0-20210520094614-fb744e81f810 - go.cryptoscope.co/secretstream v1.2.8 go.mindeco.de v1.12.0 - go.mindeco.de/ssb-refs v0.2.0 - golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/text v0.3.5 - golang.org/x/tools v0.1.1 - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + golang.org/x/crypto v0.1.0 + golang.org/x/sync v0.1.0 + golang.org/x/text v0.4.0 + golang.org/x/tools v0.2.0 + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + gorm.io/gorm v1.24.1 // indirect ) exclude go.cryptoscope.co/ssb v0.0.0-20201207161753-31d0f24b7a79 -// We need our internal/extra25519 since agl pulled his repo recently. -// Issue: https://github.com/cryptoscope/ssb/issues/44 -// Ours uses a fork of x/crypto where edwards25519 is not an internal package, -// This seemed like the easiest change to port agl's extra25519 to use x/crypto -// Background: https://github.com/agl/ed25519/issues/27#issuecomment-591073699 -// The branch in use: https://github.com/cryptix/golang_x_crypto/tree/non-internal-edwards -replace golang.org/x/crypto => github.com/cryptix/golang_x_crypto v0.0.0-20200924101112-886946aabeb8 - // https://github.com/rubenv/sql-migrate/pull/189 // and using branch 'drop-other-drivers' for less dependency pollution (oracaldb and the like) replace github.com/rubenv/sql-migrate => github.com/cryptix/go-sql-migrate v0.0.0-20210521142015-a3e4d9974764 diff --git a/go.sum b/go.sum index 4c7308a4..fcf46b02 100644 --- a/go.sum +++ b/go.sum @@ -1,89 +1,229 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +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/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= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +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.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.0/go.mod h1:afJwI0vaXwAG54kI7A//lP/lSPDkQORQuMkv56TxEPU= +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= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.0/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.13.1/go.mod h1:+nVKciyKD2J9TyVcEQ82Bo9b+3F92PiQfHrIE/zqLqM= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.9.1/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= +github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.4.1 h1:ThlnYciV1iM/V0OSF/dtkqWb6xo5qITT1TJBG1MRDJM= github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/sprig/v3 v3.2.2/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk= 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/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o= +github.com/PuerkitoBio/goquery v1.8.0 h1:PJTF7AmFCFKk1N6V6jmKfrNH9tV5pNE6lZMkG0gta/U= +github.com/PuerkitoBio/goquery v1.8.0/go.mod h1:ypIiRMtY7COPGk+I/YbZLbxsxn9g5ejnI2HSMtkjZvI= github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= +github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= +github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apmckinlay/gsuneido v0.0.0-20180907175622-1f10244968e3/go.mod h1:hJnaqxrCRgMCTWtpNz9XUFkBCREiQdlcyK6YNmOfroM= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +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-radix v0.0.0-20180808171621-7fddfc383310/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/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +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/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/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +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.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cryptix/go-sql-migrate v0.0.0-20210521142015-a3e4d9974764 h1:WH9iK1IuWftoB7ZqA0Dw1pLizx0EltZW3GhGjFueVsg= github.com/cryptix/go-sql-migrate v0.0.0-20210521142015-a3e4d9974764/go.mod h1:nHd5fan6DPkDNmJYbdgHCo31t7BTPKdOayfQYDBR9ug= -github.com/cryptix/golang_x_crypto v0.0.0-20200924101112-886946aabeb8 h1:eJ+NZ2KeNYBPYvshzkPxxKvaWM+h0CgpDyJw0aa6W1Y= -github.com/cryptix/golang_x_crypto v0.0.0-20200924101112-886946aabeb8/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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/denisenkom/go-mssqldb v0.0.0-20200206145737-bbfc9a55622e/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +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= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ericlagergren/decimal v0.0.0-20181231230500-73749d4874d5/go.mod h1:1yj25TwtUlJ+pfOu9apAVaM1RWfZGg+aFpd4hPQZekQ= 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/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/friendsofgo/errors v0.9.2 h1:X6NYxef4efCBdwI7BgS820zFaN7Cphrmb+Pljdzjtgk= github.com/friendsofgo/errors v0.9.2/go.mod h1:yCvFW5AkDIL9qn7suHVLiI/gH228n7PC4Pn44IGoTOI= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +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-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= +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-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +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/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= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v1.8.4/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +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/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/csrf v1.7.0 h1:mMPjV5/3Zd460xCavIkppUdvnl5fPXMpv2uz2Zyg7/Y= -github.com/gorilla/csrf v1.7.0/go.mod h1:+a/4tCmqhG6/w4oafeAZ9pEa3/NZOWYVbD9fV0FwIQA= +github.com/gorilla/csrf v1.7.1 h1:Ir3o2c1/Uzj6FBxMlAUB6SivgVMy1ONXwYgXn+/aHPE= +github.com/gorilla/csrf v1.7.1/go.mod h1:+a/4tCmqhG6/w4oafeAZ9pEa3/NZOWYVbD9fV0FwIQA= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= @@ -91,155 +231,225 @@ github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+ github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +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/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-immutable-radix v1.0.0/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 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +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= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +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 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= 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.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +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/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.1 h1:g39TucaRWyV3dwDO++eEc6qf8TVIQ/Da48WmqjZ3i7E= github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +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/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/karrick/bufpool v1.2.0 h1:AfhYmVv8A62iOzB31RuJrGLTdHlvBbl0+rh8Gvgvybg= github.com/karrick/bufpool v1.2.0/go.mod h1:ZRBxSXJi05b7mfd7kcL1M86UL1x8dTValcwCQp7I7P8= github.com/karrick/gopool v1.1.0/go.mod h1:Llf0mwk3WWtY0AIQoodGWVOU+5xfvUWqJKvck2qNwBU= github.com/karrick/gopool v1.2.2 h1:YcxpjUxiwimrsvxLlIdrMcPPH2mlgLa4XD5z5q90M9U= github.com/karrick/gopool v1.2.2/go.mod h1:5Fng5/Z1F8x09k7QiokCmFB96DKrLra/oub/tKb6mGA= -github.com/kat-co/vala v0.0.0-20170210184112-42e1d8b61f12/go.mod h1:u9MdXq/QageOOSGp7qG4XAQsYUMP+V5zEel/Vrl6OOc= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +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/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= +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/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.1-0.20191011153232-f91d3411e481/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mattevans/pwned-passwords v0.3.0 h1:PFUAQXHH6NVugTiQ3Uh/iUY5dUljtEmzdg2kE8a7cXI= -github.com/mattevans/pwned-passwords v0.3.0/go.mod h1:waUnV5nlikMlUqnjQtFV+DAgFPUQNPabvMGv8NG2IaQ= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/mattevans/pwned-passwords v0.6.0 h1:RuchJVFVkRE7fOGnv1PueY4CgOHnPkV/AjzgTj0WQhE= +github.com/mattevans/pwned-passwords v0.6.0/go.mod h1:DpU95yf8eqODvmeTBAT4ZG83RzNVqsPOYZuevP60RCs= 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-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/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-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.12.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.3/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= -github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= -github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/maxbrunsfeld/counterfeiter/v6 v6.3.0 h1:8E6DrFvII6QR4eJ3PkFvV+lc03P+2qwqTPLm1ax7694= -github.com/maxbrunsfeld/counterfeiter/v6 v6.3.0/go.mod h1:fcEyUyXZXoV4Abw8DX0t7wyL8mCDxXyU4iAFZfT3IHw= -github.com/mileusna/useragent v1.0.2 h1:DgVKtiPnjxlb73z9bCwgdUvU2nQNQ97uhgfO8l9uz/w= -github.com/mileusna/useragent v1.0.2/go.mod h1:3d8TOmwL/5I8pJjyVDteHtgDGcefrFUX4ccGOMKNYYc= +github.com/mattn/go-sqlite3 v1.14.10/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/maxbrunsfeld/counterfeiter/v6 v6.5.0 h1:rBhB9Rls+yb8kA4x5a/cWxOufWfXt24E+kq4YlbGj3g= +github.com/maxbrunsfeld/counterfeiter/v6 v6.5.0/go.mod h1:fJ0UAZc1fx3xZhU4eSHQDJ1ApFmTVhp5VTpV9tm2ogg= +github.com/microsoft/go-mssqldb v0.15.0/go.mod h1:Wr+jfynAR4lYmHA093AL8njUw2T6ovxe2jjBQKxBIco= +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/mileusna/useragent v1.2.1 h1:p3RJWhi3LfuI6BHdddojREyK3p6qX67vIfOVMnUIVr0= +github.com/mileusna/useragent v1.2.1/go.mod h1:3d8TOmwL/5I8pJjyVDteHtgDGcefrFUX4ccGOMKNYYc= github.com/miolini/datacounter v0.0.0-20171104152933-fd4e42a1d5e0/go.mod h1:P6fDJzlxN+cWYR09KbE9/ta+Y6JofX9tAUhJpWkWPaM= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 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= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/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/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nicksnyder/go-i18n/v2 v2.1.2 h1:QHYxcUJnGHBaq7XbvgunmZ2Pn0focXFqTD61CkH146c= -github.com/nicksnyder/go-i18n/v2 v2.1.2/go.mod h1:d++QJC9ZVf7pa48qrsRWhMJ5pSHIPmS3OLqK1niyLxs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/nicksnyder/go-i18n/v2 v2.2.0 h1:MNXbyPvd141JJqlU6gJKrczThxJy+kdCNivxZpBQFkw= +github.com/nicksnyder/go-i18n/v2 v2.2.0/go.mod h1:4OtLfzqyAxsscyCb//3gfqSvBc81gImX91LrZzczN1o= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.3 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA= -github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= -github.com/oxtoacart/bpool v0.0.0-20190524125616-8c0b41497736 h1:C9bEdTfu5QY+TIf4ohXC2oWkT88Qq3/t1yiUxf/Guvs= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/oxtoacart/bpool v0.0.0-20190524125616-8c0b41497736/go.mod h1:L3UMQOThbttwfYRNFOWLLVXMhk5Lkio4GGOtw5UrxS0= -github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= -github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= +github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= 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= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -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/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +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/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= 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/sclevine/spec v1.4.0 h1:z/Q9idDcay5m5irkZ28M7PtQM4aOISzOpj4bUPkDee8= github.com/sclevine/spec v1.4.0/go.mod h1:LvpgJaFyvQzRvc1kaDs0bulYwzC70PbiYjC4QnFHkOM= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shurcooL/httpfs v0.0.0-20190527155220-6a4d4a70508b h1:4kg1wyftSKxLtnPAvcRWakIPpokB9w780/KwrNLnfPA= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/httpfs v0.0.0-20190527155220-6a4d4a70508b/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.9.0/go.mod h1:+i6ajR7OX2XaiBkrcZJFK21htRk7eDeLg7+O6bhUPP4= +github.com/ssbc/go-luigi v0.3.7-0.20221019204020-324065b9a7c6 h1:4Mhg4qHaiX56eXNND9gGJAf0xzoRQQtfFFhv6wcIOIU= +github.com/ssbc/go-luigi v0.3.7-0.20221019204020-324065b9a7c6/go.mod h1:tBPMBysJeh1u3vStvrWe5w3YBC4fnbnGsLk5ML4D6do= +github.com/ssbc/go-muxrpc/v2 v2.0.14-0.20221020091224-b09bdf60812f h1:eIzrej3VH9sYd13X8zVVzlsDRh0uCjYCbdsLcsZqrnc= +github.com/ssbc/go-muxrpc/v2 v2.0.14-0.20221020091224-b09bdf60812f/go.mod h1:CFvV9kCI3SmJM38pf1NCXWrS7UVgTYXJdKs+Q9hkJIw= +github.com/ssbc/go-netwrap v0.1.5-0.20221019160355-cd323bb2e29d h1:UnYPPekKU0mHzMMOSuI6117Djq9xni60c/IzzUYxgCI= +github.com/ssbc/go-netwrap v0.1.5-0.20221019160355-cd323bb2e29d/go.mod h1:tsE1qeqkc8kvf1psPNdJ5s8O+/jE1WlKwsEETb2VZqs= +github.com/ssbc/go-secretstream v1.2.11-0.20221019175226-fa042d4912fe h1:naU+qPze58a1vOf4J0Glglc1GoTvRkuCv3+sWziocf4= +github.com/ssbc/go-secretstream v1.2.11-0.20221019175226-fa042d4912fe/go.mod h1:imXhXNa5OfEL+qrGtOs6NZ9zJe6L3P+ZwFVC2mIgH0E= +github.com/ssbc/go-ssb-refs v0.5.2-0.20221019090322-8b558c2f31de h1:av0v73MeB+HASXfbtr3+r1dWD1DrYlGEIMCdVKV09Ag= +github.com/ssbc/go-ssb-refs v0.5.2-0.20221019090322-8b558c2f31de/go.mod h1:TRIqkOhZERfVzB+NoO3eUoru0ceQAsDnfZricPd1sUM= 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/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= 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= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/throttled/throttled/v2 v2.7.1 h1:FnBysDX4Sok55bvfDMI0l2Y71V1vM2wi7O79OW7fNtw= -github.com/throttled/throttled/v2 v2.7.1/go.mod h1:fuOeyK9fmnA+LQnsBbfT/mmPHjmkdogRBQxaD8YsgZ8= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/unrolled/secure v1.0.8 h1:JaMvKbe4CRt8oyxVXn+xY+6jlqd7pyJNSVkmsBxxQsM= -github.com/unrolled/secure v1.0.8/go.mod h1:fO+mEan+FLB0CdEnHf6Q4ZZVNqG+5fuLFnP8p0BXDPI= -github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/throttled/throttled/v2 v2.9.1 h1:Es7fBRL04IUOvs4RwbieshgyccyztfaAjzQdKbrpqyo= +github.com/throttled/throttled/v2 v2.9.1/go.mod h1:SxVlv4wUgeS/hWOSMDeb9Ez+stPqP7tWY5wI5BUiGqs= +github.com/unrolled/secure v1.13.0 h1:sdr3Phw2+f8Px8HE5sd1EHdj1aV3yUwed/uZXChLFsk= +github.com/unrolled/secure v1.13.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40= github.com/vcraescu/go-paginator/v2 v2.0.0 h1:m9If0wF7pSjYfocrJZcyWNiWn7OfIeLFVQLbiDvHf3k= github.com/vcraescu/go-paginator/v2 v2.0.0/go.mod h1:qsrC8+/YgRL0LfurxeY3gCAtsN7oOthkIbmBdqpMX9U= github.com/volatiletech/inflect v0.0.1 h1:2a6FcMQyhmPZcLa+uet3VJ8gLn/9svWhJxJYwvE8KsU= @@ -248,139 +458,617 @@ github.com/volatiletech/null/v8 v8.1.2 h1:kiTiX1PpwvuugKwfvUNX/SU/5A2KGZMXfGD0DU github.com/volatiletech/null/v8 v8.1.2/go.mod h1:98DbwNoKEpRrYtGjWFctievIfm4n4MxG0A6EBUcoS5g= github.com/volatiletech/randomize v0.0.1 h1:eE5yajattWqTB2/eN8df4dw+8jwAzBtbdo5sbWC4nMk= github.com/volatiletech/randomize v0.0.1/go.mod h1:GN3U0QYqfZ9FOJ67bzax1cqZ5q2xuj2mXrXBjWaRTlY= -github.com/volatiletech/sqlboiler/v4 v4.5.0 h1:oJ3YXEvv0c48S9W/3TuPLxJxefIkewpub2qZioXXlUY= -github.com/volatiletech/sqlboiler/v4 v4.5.0/go.mod h1:tQgF5zxwqrjR6Wydc5rRylI6puDOO1WvBC70/5up+Hg= -github.com/volatiletech/strmangle v0.0.1 h1:UKQoHmY6be/R3tSvD2nQYrH41k43OJkidwEiC74KIzk= +github.com/volatiletech/sqlboiler/v4 v4.13.0 h1:dwrs3AEEGWNrEWDnrI1GILxp85p1Qb0WuzArpVXAZgk= +github.com/volatiletech/sqlboiler/v4 v4.13.0/go.mod h1:QmJpWSj/s9xGSHFr2SN/MF371fLgeo10PZ9Tl8AUQNw= github.com/volatiletech/strmangle v0.0.1/go.mod h1:F6RA6IkB5vq0yTG4GQ0UsbbRcl3ni9P76i+JrTBKFFg= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/volatiletech/strmangle v0.0.4 h1:CxrEPhobZL/PCZOTDSH1aq7s4Kv76hQpRoTVVlUOim4= +github.com/volatiletech/strmangle v0.0.4/go.mod h1:ycDvbDkjDvhC0NUU8w3fWwl5JEMTV56vTKXzR3GeR+0= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs= github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= -go.cryptoscope.co/luigi v0.3.5 h1:6rrNciUqbuwphT7hIjFd8eVRP3IatDX6HxdHs/Qo+Zw= -go.cryptoscope.co/luigi v0.3.5/go.mod h1:vJZOaxKWLWTC5oRWBOGVVW9X+o6nikLZSYUF9bvPd2w= -go.cryptoscope.co/muxrpc/v2 v2.0.6 h1:AzzrPQnx9sqUlqczJMOes9sQqYKvINz7Ie1ZJIdgy/Y= -go.cryptoscope.co/muxrpc/v2 v2.0.6/go.mod h1:og3Wr0CWnJBVp3aiRa9MmmTUQh901wWNjI96+o3NZag= -go.cryptoscope.co/netwrap v0.1.0/go.mod h1:7zcYswCa4CT+ct54e9uH9+IIbYYETEMHKDNpzl8Ukew= -go.cryptoscope.co/netwrap v0.1.1 h1:JLzzGKEvrUrkKzu3iM0DhpHmt+L/gYqmpcf1lJMUyFs= -go.cryptoscope.co/netwrap v0.1.1/go.mod h1:7zcYswCa4CT+ct54e9uH9+IIbYYETEMHKDNpzl8Ukew= go.cryptoscope.co/nocomment v0.0.0-20210520094614-fb744e81f810 h1:Sa7Q5X/La6bVTNT8Vcnt9GIGuOFOEFmjY3UNiwPErQk= go.cryptoscope.co/nocomment v0.0.0-20210520094614-fb744e81f810/go.mod h1:SJ9qQwHw1S7F2RsE9Ez9RmBhGpIdAphG1xGnI0rdKUI= -go.cryptoscope.co/secretstream v1.2.8 h1:M/2EYQfj2A97oe44jGWFDMxgu9NsRnjRSTnz1WPWTnA= -go.cryptoscope.co/secretstream v1.2.8/go.mod h1:OjHU/Io8LYyBxv1ehWohsFyyz4fVcKGozAzLoj6il50= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd/api/v3 v3.5.0/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/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.mindeco.de v1.12.0 h1:K5FHILjJlD/U1HJMs8Y9ZLwdfG4dPEsxw+e+eqg1wKc= go.mindeco.de v1.12.0/go.mod h1:dZty08izAk/rSX8wSLen4gMR4WDPYmA6vUTE0QtepHA= -go.mindeco.de/ssb-refs v0.2.0 h1:KL+W2gq8ZeUzoFsPlKL0G/oThYeJKscqq8V3D0AgMoc= -go.mindeco.de/ssb-refs v0.2.0/go.mod h1:Ysyvb0aGeR721Nvu5V7mCJtkQP1fwf0qEBLA4FXHXXk= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +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= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +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= +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= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= +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.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= 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= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +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-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= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200930145003-4acb6c075d10/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201026091529-146b70c837a4/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +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-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/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= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/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-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/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-20181026203630-95b1ffbd15a5/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-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-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/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= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/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-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +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.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= 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= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +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/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +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/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= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 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/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gorp.v1 v1.7.2 h1:j3DWlAyGVv8whO7AcIWznQ2Yj7yJkn34B8s63GViAAw= gopkg.in/gorp.v1 v1.7.2/go.mod h1:Wo3h+DBQZIxATwftsglhdD/62zRFPhGhTiu5jUJmCaw= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= 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.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/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= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/sqlite v1.1.3 h1:BYfdVuZB5He/u9dt4qDpZqiqDJ6KhPqs5QUqsr/Eeuc= gorm.io/driver/sqlite v1.1.3/go.mod h1:AKDgRWk8lcSQSw+9kxCJnX/yySj8G3rdwYlU57cB45c= gorm.io/gorm v1.20.1/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= -gorm.io/gorm v1.20.6 h1:qa7tC1WcU+DBI/ZKMxvXy1FcrlGsvxlaKufHrT2qQ08= gorm.io/gorm v1.20.6/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= +gorm.io/gorm v1.24.1 h1:CgvzRniUdG67hBAzsxDGOAuq4Te1osVMYsa1eQbd4fs= +gorm.io/gorm v1.24.1/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +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= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.20/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.22/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60= +modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw= +modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI= +modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag= +modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw= +modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ= +modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c= +modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo= +modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg= +modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I= +modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs= +modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8= +modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE= +modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk= +modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w= +modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE= +modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8= +modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc= +modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU= +modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE= +modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk= +modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI= +modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE= +modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg= +modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74= +modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU= +modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU= +modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc= +modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM= +modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ= +modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84= +modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ= +modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY= +modernc.org/ccgo/v3 v3.12.84/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w= +modernc.org/ccgo/v3 v3.12.86/go.mod h1:dN7S26DLTgVSni1PVA3KxxHTcykyDurf3OgUzNqTSrU= +modernc.org/ccgo/v3 v3.12.90/go.mod h1:obhSc3CdivCRpYZmrvO88TXlW0NvoSVvdh/ccRjJYko= +modernc.org/ccgo/v3 v3.12.92/go.mod h1:5yDdN7ti9KWPi5bRVWPl8UNhpEAtCjuEE7ayQnzzqHA= +modernc.org/ccgo/v3 v3.13.1/go.mod h1:aBYVOUfIlcSnrsRVU8VRS35y2DIfpgkmVkYZ0tpIXi4= +modernc.org/ccgo/v3 v3.14.0/go.mod h1:hBrkiBlUwvr5vV/ZH9YzXIp982jKE8Ek8tR1ytoAL6Q= +modernc.org/ccgo/v3 v3.15.1/go.mod h1:md59wBwDT2LznX/OTCPoVS6KIsdRgY8xqQwBV+hkTH0= +modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= +modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q= +modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg= +modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M= +modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU= +modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE= +modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso= +modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8= +modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8= +modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I= +modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk= +modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY= +modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE= +modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg= +modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM= +modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg= +modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo= +modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8= +modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ= +modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA= +modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM= +modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg= +modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE= +modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM= +modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU= +modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw= +modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M= +modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18= +modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8= +modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= +modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0= +modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI= +modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE= +modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY= +modernc.org/libc v1.11.88/go.mod h1:h3oIVe8dxmTcchcFuCcJ4nAWaoiwzKCdv82MM0oiIdQ= +modernc.org/libc v1.11.98/go.mod h1:ynK5sbjsU77AP+nn61+k+wxUGRx9rOFcIqWYYMaDZ4c= +modernc.org/libc v1.11.101/go.mod h1:wLLYgEiY2D17NbBOEp+mIJJJBGSiy7fLL4ZrGGZ+8jI= +modernc.org/libc v1.12.0/go.mod h1:2MH3DaF/gCU8i/UBiVE1VFRos4o523M7zipmwH8SIgQ= +modernc.org/libc v1.13.1/go.mod h1:npFeGWjmZTjFeWALQLrvklVmAxv4m80jnG3+xI8FdJk= +modernc.org/libc v1.13.2/go.mod h1:npFeGWjmZTjFeWALQLrvklVmAxv4m80jnG3+xI8FdJk= +modernc.org/libc v1.14.1/go.mod h1:npFeGWjmZTjFeWALQLrvklVmAxv4m80jnG3+xI8FdJk= +modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc= +modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.14.5/go.mod h1:YyX5Rx0WbXokitdWl2GJIDy4BrPxBP0PwwhpXOHCDLE= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/tcl v1.10.0/go.mod h1:WzWapmP/7dHVhFoyPpEaNSVTL8xtewhouN/cqSJ5A2s= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.2.21/go.mod h1:uXrObx4pGqXWIMliC5MiKuwAyMrltzwpteOFUP1PWCc= +modernc.org/z v1.3.0/go.mod h1:+mvgLH814oDjtATDdT3rs84JnUIpkvAF5B8AVkNlE2g= +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= diff --git a/internal/aliases/confirm.go b/internal/aliases/confirm.go index 44736b66..38ef0328 100644 --- a/internal/aliases/confirm.go +++ b/internal/aliases/confirm.go @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: MIT -// Package aliases implements the validation and signing features of https://ssb-ngi-pointer.github.io/rooms2/#alias +// Package aliases implements the validation and signing features of https://ssbc.github.io/rooms2/#alias package aliases import ( @@ -10,7 +10,7 @@ import ( "golang.org/x/crypto/ed25519" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" ) // Registration ties an alias to the ID of the user and the RoomID it should be registered on @@ -33,9 +33,9 @@ func (r Registration) Sign(privKey ed25519.PrivateKey) Confirmation { func (r Registration) createRegistrationMessage() []byte { var message bytes.Buffer message.WriteString("=room-alias-registration:") - message.WriteString(r.RoomID.Ref()) + message.WriteString(r.RoomID.String()) message.WriteString(":") - message.WriteString(r.UserID.Ref()) + message.WriteString(r.UserID.String()) message.WriteString(":") message.WriteString(r.Alias) return message.Bytes() diff --git a/internal/aliases/confirm_test.go b/internal/aliases/confirm_test.go index 607bb0f7..fbf29d45 100644 --- a/internal/aliases/confirm_test.go +++ b/internal/aliases/confirm_test.go @@ -8,18 +8,18 @@ import ( "bytes" "testing" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" "github.com/stretchr/testify/require" - refs "go.mindeco.de/ssb-refs" ) func TestConfirmation(t *testing.T) { r := require.New(t) // this is our room, it's not a valid feed but thats fine for this test - roomID := refs.FeedRef{ - ID: bytes.Repeat([]byte("test"), 8), - Algo: "test", + roomID, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("test"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) } // to make the test deterministic, decided by fair dice roll. @@ -36,7 +36,7 @@ func TestConfirmation(t *testing.T) { // internal function to create the registration string msg := valid.createRegistrationMessage() - want := "=room-alias-registration:@dGVzdHRlc3R0ZXN0dGVzdHRlc3R0ZXN0dGVzdHRlc3Q=.test:@Rt2aJrtOqWXhBZ5/vlfzeWQ9Bj/z6iT8CMhlr2WWlG4=.ed25519:TestConfirmation" + want := "=room-alias-registration:@dGVzdHRlc3R0ZXN0dGVzdHRlc3R0ZXN0dGVzdHRlc3Q=.ed25519:@Rt2aJrtOqWXhBZ5/vlfzeWQ9Bj/z6iT8CMhlr2WWlG4=.ed25519:TestConfirmation" r.Equal(want, string(msg)) // create the signed confirmation @@ -46,9 +46,9 @@ func TestConfirmation(t *testing.T) { r.True(yes, "should be valid for this room and feed") // make up another id for the invalid test(s) - otherID := refs.FeedRef{ - ID: bytes.Repeat([]byte("nope"), 8), - Algo: "test", + otherID, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("nope"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) } confirmation.RoomID = otherID diff --git a/internal/aliases/names.go b/internal/aliases/names.go index 56a064fc..0764ec86 100644 --- a/internal/aliases/names.go +++ b/internal/aliases/names.go @@ -5,7 +5,7 @@ package aliases // IsValid decides whether an alias is okay for use or not. -// The room spec defines it as _labels valid under RFC 1035_ ( https://ssb-ngi-pointer.github.io/rooms2/#alias-string ) +// The room spec defines it as _labels valid under RFC 1035_ ( https://ssbc.github.io/rooms2/#alias-string ) // but that can be mostly any string since DNS is a 8bit binary protocol, // as long as it's shorter then 63 charachters. // diff --git a/internal/broadcasts/attendants.go b/internal/broadcasts/attendants.go index a4f2bda5..cb05eeec 100644 --- a/internal/broadcasts/attendants.go +++ b/internal/broadcasts/attendants.go @@ -8,8 +8,8 @@ import ( "io" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/multierror" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/multierror" ) type AttendantsEmitter interface { diff --git a/internal/broadcasts/doc.go b/internal/broadcasts/doc.go index 601776df..92794b62 100644 --- a/internal/broadcasts/doc.go +++ b/internal/broadcasts/doc.go @@ -4,4 +4,4 @@ // Package broadcasts implements custom typed one-to-n facilities for broadcasting messages/calls to multiple subscribers. // They loosely follow from luigi.Broadcasts but using concrete types instead of empty interfaces. -package broadcasts \ No newline at end of file +package broadcasts diff --git a/internal/broadcasts/endpoints.go b/internal/broadcasts/endpoints.go index d50605a7..1a04b2cd 100644 --- a/internal/broadcasts/endpoints.go +++ b/internal/broadcasts/endpoints.go @@ -8,7 +8,7 @@ import ( "io" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/multierror" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/multierror" ) type EndpointsEmitter interface { diff --git a/internal/devtools/counterfeiter.go b/internal/devtools/counterfeiter.go index 19a2d270..c0ba9863 100644 --- a/internal/devtools/counterfeiter.go +++ b/internal/devtools/counterfeiter.go @@ -2,6 +2,7 @@ // // SPDX-License-Identifier: MIT +//go:build tools // +build tools package devtools diff --git a/internal/devtools/stringer.go b/internal/devtools/stringer.go index 265ca4a6..0f2c704d 100644 --- a/internal/devtools/stringer.go +++ b/internal/devtools/stringer.go @@ -2,6 +2,7 @@ // // SPDX-License-Identifier: MIT +//go:build tools // +build tools package devtools diff --git a/internal/maybemod/keys/keys.go b/internal/maybemod/keys/keys.go index 9f3857cd..143f1eaa 100644 --- a/internal/maybemod/keys/keys.go +++ b/internal/maybemod/keys/keys.go @@ -14,9 +14,9 @@ import ( "path/filepath" "strings" + "github.com/ssbc/go-secretstream/secrethandshake" + refs "github.com/ssbc/go-ssb-refs" "go.cryptoscope.co/nocomment" - "go.cryptoscope.co/secretstream/secrethandshake" - refs "go.mindeco.de/ssb-refs" ) var SecretPerms = os.FileMode(0600) @@ -38,8 +38,8 @@ type ssbSecret struct { // IsValidFeedFormat checks if the passed FeedRef is for one of the two supported formats, // legacy/crapp or GabbyGrove. func IsValidFeedFormat(r refs.FeedRef) error { - if r.Algo != refs.RefAlgoFeedSSB1 && r.Algo != refs.RefAlgoFeedGabby { - return fmt.Errorf("ssb: unsupported feed format:%s", r.Algo) + if r.Algo() != refs.RefAlgoFeedSSB1 && r.Algo() != refs.RefAlgoFeedGabby { + return fmt.Errorf("ssb: unsupported feed format:%s", r.Algo()) } return nil } @@ -53,11 +53,13 @@ func NewKeyPair(r io.Reader) (*KeyPair, error) { return nil, fmt.Errorf("ssb: error building key pair: %w", err) } + feed, err := refs.NewFeedRefFromBytes(kp.Public[:], refs.RefAlgoFeedSSB1) + if err != nil { + return nil, fmt.Errorf("ssb: error building key pair: %w", err) + } + keyPair := KeyPair{ - Feed: refs.FeedRef{ - ID: kp.Public[:], - Algo: refs.RefAlgoFeedSSB1, - }, + Feed: feed, Pair: *kp, } diff --git a/internal/maybemod/multicloser/multicloser.go b/internal/maybemod/multicloser/multicloser.go index 8dddfaab..56ea83e2 100644 --- a/internal/maybemod/multicloser/multicloser.go +++ b/internal/maybemod/multicloser/multicloser.go @@ -9,7 +9,7 @@ import ( "io" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/multierror" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/multierror" ) type Closer struct { diff --git a/internal/maybemuxrpc/plugin.go b/internal/maybemuxrpc/plugin.go index b34fbf00..63d33835 100644 --- a/internal/maybemuxrpc/plugin.go +++ b/internal/maybemuxrpc/plugin.go @@ -8,7 +8,7 @@ import ( "net" "sync" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" ) type Authorizer interface { diff --git a/internal/network/conntracker.go b/internal/network/conntracker.go index 5e6dd583..035415a0 100644 --- a/internal/network/conntracker.go +++ b/internal/network/conntracker.go @@ -11,8 +11,8 @@ import ( "sync" "time" - "go.cryptoscope.co/netwrap" - "go.cryptoscope.co/secretstream" + "github.com/ssbc/go-netwrap" + "github.com/ssbc/go-secretstream" ) type connEntry struct { diff --git a/internal/network/interface.go b/internal/network/interface.go index f15f403c..06236e48 100644 --- a/internal/network/interface.go +++ b/internal/network/interface.go @@ -15,10 +15,10 @@ import ( "net/url" "time" - "go.cryptoscope.co/muxrpc/v2" - "go.cryptoscope.co/netwrap" - "go.cryptoscope.co/secretstream" - refs "go.mindeco.de/ssb-refs" + "github.com/ssbc/go-muxrpc/v2" + "github.com/ssbc/go-netwrap" + "github.com/ssbc/go-secretstream" + refs "github.com/ssbc/go-ssb-refs" ) // ServerEndpointDetails encapsulates the endpoint information. @@ -131,10 +131,10 @@ type ConnTracker interface { } // GetFeedRefFromAddr uses netwrap to get the secretstream address and then uses ParseFeedRef -func GetFeedRefFromAddr(addr net.Addr) (*refs.FeedRef, error) { +func GetFeedRefFromAddr(addr net.Addr) (refs.FeedRef, error) { addr = netwrap.GetAddr(addr, secretstream.NetworkString) if addr == nil { - return nil, errors.New("no shs-bs address found") + return refs.FeedRef{}, errors.New("no shs-bs address found") } ssAddr := addr.(secretstream.Addr) return refs.ParseFeedRef(ssAddr.String()) diff --git a/internal/network/isserver_test.go b/internal/network/isserver_test.go index 721433aa..56d6487e 100644 --- a/internal/network/isserver_test.go +++ b/internal/network/isserver_test.go @@ -11,11 +11,11 @@ import ( "os" "testing" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" + "github.com/ssbc/go-ssb-room/v2/internal/network" "go.mindeco.de/log" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" "github.com/stretchr/testify/require" ) diff --git a/internal/network/mocked/endpoints.go b/internal/network/mocked/endpoints.go index a26dcf28..540bb77e 100644 --- a/internal/network/mocked/endpoints.go +++ b/internal/network/mocked/endpoints.go @@ -8,9 +8,9 @@ package mocked import ( "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - muxrpc "go.cryptoscope.co/muxrpc/v2" - refs "go.mindeco.de/ssb-refs" + muxrpc "github.com/ssbc/go-muxrpc/v2" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/network" ) type FakeEndpoints struct { diff --git a/internal/network/msaddr_test.go b/internal/network/msaddr_test.go index f56c73f1..09c4ca8f 100644 --- a/internal/network/msaddr_test.go +++ b/internal/network/msaddr_test.go @@ -10,8 +10,8 @@ import ( "strings" "testing" + refs "github.com/ssbc/go-ssb-refs" "github.com/stretchr/testify/assert" - refs "go.mindeco.de/ssb-refs" ) func TestMultiserverAddress(t *testing.T) { @@ -21,10 +21,11 @@ func TestMultiserverAddress(t *testing.T) { sed.Domain = "the.ho.st" sed.ListenAddressMUXRPC = ":8008" - sed.RoomID = refs.FeedRef{ - ID: bytes.Repeat([]byte("ohai"), 8), - Algo: "doesnt-matter", // not part of msaddr v1 + roomID, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("ohai"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) } + sed.RoomID = roomID gotMultiAddr := sed.MultiserverAddress() diff --git a/internal/network/new.go b/internal/network/new.go index 9d6b3cbd..13e0d220 100644 --- a/internal/network/new.go +++ b/internal/network/new.go @@ -14,14 +14,14 @@ import ( "strings" "sync" - "go.cryptoscope.co/muxrpc/v2" - "go.cryptoscope.co/netwrap" - "go.cryptoscope.co/secretstream" + "github.com/ssbc/go-muxrpc/v2" + "github.com/ssbc/go-netwrap" + "github.com/ssbc/go-secretstream" "go.mindeco.de/log" "go.mindeco.de/log/level" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" ) // DefaultPort is the default listening port for ScuttleButt. @@ -128,7 +128,7 @@ func (n *node) GetEndpointFor(ref refs.FeedRef) (muxrpc.Endpoint, bool) { n.remotesLock.Lock() defer n.remotesLock.Unlock() - edp, has := n.remotes[ref.Ref()] + edp, has := n.remotes[ref.String()] return edp, has } @@ -147,7 +147,7 @@ func (n *node) GetAllEndpoints() []EndpointStat { continue } stats = append(stats, EndpointStat{ - ID: id, + ID: &id, Addr: remote, Since: durr, Endpoint: edp, @@ -164,7 +164,7 @@ func (n *node) addRemote(edp muxrpc.Endpoint) { if err != nil { panic(err) } - // ref := r.Ref() + // ref := r.String() // if oldEdp, has := n.remotes[ref]; has { // n.log.Log("remotes", "previous active", "ref", ref) // c := client.FromEndpoint(oldEdp) @@ -175,7 +175,7 @@ func (n *node) addRemote(edp muxrpc.Endpoint) { // } // } // replace with new - n.remotes[r.Ref()] = edp + n.remotes[r.String()] = edp } // TODO: merge with conntracker @@ -186,7 +186,7 @@ func (n *node) removeRemote(edp muxrpc.Endpoint) { if err != nil { panic(err) } - delete(n.remotes, r.Ref()) + delete(n.remotes, r.String()) } func (n *node) handleConnection(ctx context.Context, origConn net.Conn, isServer bool, hws ...muxrpc.HandlerWrapper) { @@ -205,7 +205,7 @@ func (n *node) handleConnection(ctx context.Context, origConn net.Conn, isServer level.Error(n.log).Log("conn", "not shs authorized", "err", err) return } - rLogger := log.With(n.log, "peer", remoteRef.ShortRef()) + rLogger := log.With(n.log, "peer", remoteRef.ShortSigil()) ok, ctx := n.connTracker.OnAccept(ctx, conn) if !ok { diff --git a/internal/network/websocket.go b/internal/network/websocket.go index 5f6f0e8d..9bedcee9 100644 --- a/internal/network/websocket.go +++ b/internal/network/websocket.go @@ -13,7 +13,7 @@ import ( "time" "github.com/gorilla/websocket" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" kitlog "go.mindeco.de/log" "go.mindeco.de/log/level" ) diff --git a/internal/netwraputil/spoof.go b/internal/netwraputil/spoof.go index b8b77a65..b5c102ad 100644 --- a/internal/netwraputil/spoof.go +++ b/internal/netwraputil/spoof.go @@ -8,8 +8,8 @@ import ( "errors" "net" - "go.cryptoscope.co/netwrap" - "go.cryptoscope.co/secretstream" + "github.com/ssbc/go-netwrap" + "github.com/ssbc/go-secretstream" ) // SpoofRemoteAddress wraps the connection with the passed reference diff --git a/internal/netwraputil/spoof_test.go b/internal/netwraputil/spoof_test.go index 90549c2f..97ab47c6 100644 --- a/internal/netwraputil/spoof_test.go +++ b/internal/netwraputil/spoof_test.go @@ -8,8 +8,8 @@ import ( "net" "testing" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" + "github.com/ssbc/go-ssb-room/v2/internal/network" "github.com/stretchr/testify/require" ) @@ -28,7 +28,7 @@ func TestSpoof(t *testing.T) { ref, err := network.GetFeedRefFromAddr(wrapped.RemoteAddr()) r.NoError(err) - r.True(ref.Equal(&kp.Feed)) + r.True(ref.Equal(kp.Feed)) wc.Close() rc.Close() diff --git a/internal/repo/secret.go b/internal/repo/secret.go index aca4bb72..03679e20 100644 --- a/internal/repo/secret.go +++ b/internal/repo/secret.go @@ -11,8 +11,8 @@ import ( "os" "path/filepath" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" ) func DefaultKeyPair(r Interface) (*keys.KeyPair, error) { @@ -29,7 +29,7 @@ func DefaultKeyPair(r Interface) (*keys.KeyPair, error) { if err := keys.SaveKeyPair(*keyPair, secPath); err != nil { return nil, fmt.Errorf("repo: error saving new identity file: %w", err) } - log.Printf("saved identity %s to %s", keyPair.Feed.Ref(), secPath) + log.Printf("saved identity %s to %s", keyPair.Feed.String(), secPath) } return keyPair, nil } @@ -53,7 +53,7 @@ func newKeyPair(r Interface, name, algo string, seed io.Reader) (*keys.KeyPair, return nil, err } } - if algo != refs.RefAlgoFeedSSB1 && algo != refs.RefAlgoFeedGabby { // enums would be nice + if algo != string(refs.RefAlgoFeedSSB1) && algo != string(refs.RefAlgoFeedGabby) { // enums would be nice return nil, fmt.Errorf("invalid feed refrence algo") } if _, err := keys.LoadKeyPair(secPath); err == nil { @@ -63,11 +63,10 @@ func newKeyPair(r Interface, name, algo string, seed io.Reader) (*keys.KeyPair, if err != nil { return nil, fmt.Errorf("repo: no keypair but couldn't create one either: %w", err) } - keyPair.Feed.Algo = algo if err := keys.SaveKeyPair(*keyPair, secPath); err != nil { return nil, fmt.Errorf("repo: error saving new identity file: %w", err) } - log.Printf("saved identity %s to %s", keyPair.Feed.Ref(), secPath) + log.Printf("saved identity %s to %s", keyPair.Feed.String(), secPath) return keyPair, nil } diff --git a/internal/signinwithssb/challenges.go b/internal/signinwithssb/challenges.go index 642ad57c..4019d426 100644 --- a/internal/signinwithssb/challenges.go +++ b/internal/signinwithssb/challenges.go @@ -12,7 +12,7 @@ import ( "golang.org/x/crypto/ed25519" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" ) // sign-in with ssb uses 256-bit nonces @@ -54,9 +54,9 @@ type ClientPayload struct { func (cr ClientPayload) createMessage() []byte { var msg bytes.Buffer msg.WriteString("=http-auth-sign-in:") - msg.WriteString(cr.ServerID.Ref()) + msg.WriteString(cr.ServerID.String()) msg.WriteString(":") - msg.WriteString(cr.ClientID.Ref()) + msg.WriteString(cr.ClientID.String()) msg.WriteString(":") msg.WriteString(cr.ServerChallenge) msg.WriteString(":") diff --git a/internal/signinwithssb/simple_test.go b/internal/signinwithssb/simple_test.go index 74072104..e124943e 100644 --- a/internal/signinwithssb/simple_test.go +++ b/internal/signinwithssb/simple_test.go @@ -11,13 +11,20 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" ) func TestPayloadString(t *testing.T) { - server := refs.FeedRef{ID: bytes.Repeat([]byte{1}, 32), Algo: "test"} - client := refs.FeedRef{ID: bytes.Repeat([]byte{2}, 32), Algo: "test"} + server, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{1}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + + client, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{2}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } var req ClientPayload @@ -27,7 +34,7 @@ func TestPayloadString(t *testing.T) { req.ServerChallenge = "fooo" req.ClientChallenge = "barr" - want := "=http-auth-sign-in:@AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=.test:@AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI=.test:fooo:barr" + want := "=http-auth-sign-in:@AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE=.ed25519:@AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI=.ed25519:fooo:barr" got := req.createMessage() assert.Equal(t, want, string(got)) diff --git a/muxrpc/handlers/alias/handler.go b/muxrpc/handlers/alias/handler.go index 11901c08..337f009a 100644 --- a/muxrpc/handlers/alias/handler.go +++ b/muxrpc/handlers/alias/handler.go @@ -13,14 +13,14 @@ import ( "fmt" "strings" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" kitlog "go.mindeco.de/log" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/aliases" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/aliases" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" ) // Handler implements the muxrpc methods for alias registration and recvocation @@ -93,7 +93,7 @@ func (h Handler) Register(ctx context.Context, req *muxrpc.Request) (interface{} return nil, err } - confirmation.UserID = *userID + confirmation.UserID = userID // check the signature if !confirmation.Verify() { diff --git a/muxrpc/handlers/doc.go b/muxrpc/handlers/doc.go index 0e081914..8f0af1e2 100644 --- a/muxrpc/handlers/doc.go +++ b/muxrpc/handlers/doc.go @@ -4,5 +4,5 @@ // Package handlers contains the muxrpc handler packages for the room server. // -// The implementation the actual multiplexing implementation is go.cryptoscope.co/muxrpc. +// The implementation the actual multiplexing implementation is github.com/ssbc/go-muxrpc. package handlers diff --git a/muxrpc/handlers/gossip/ping.go b/muxrpc/handlers/gossip/ping.go index 4b0fbfc1..48e56c46 100644 --- a/muxrpc/handlers/gossip/ping.go +++ b/muxrpc/handlers/gossip/ping.go @@ -10,7 +10,7 @@ import ( "io" "time" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" "go.mindeco.de/encodedTime" ) diff --git a/muxrpc/handlers/signinwithssb/withssb.go b/muxrpc/handlers/signinwithssb/withssb.go index 6d12427f..15fc99e2 100644 --- a/muxrpc/handlers/signinwithssb/withssb.go +++ b/muxrpc/handlers/signinwithssb/withssb.go @@ -11,14 +11,14 @@ import ( "fmt" "strings" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" kitlog "go.mindeco.de/log" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/signinwithssb" - validate "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/signinwithssb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/signinwithssb" + validate "github.com/ssbc/go-ssb-room/v2/internal/signinwithssb" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) // Handler implements the muxrpc methods for the "Sign-in with SSB" calls. SendSolution and InvalidateAllSolutions. @@ -64,7 +64,7 @@ func (h Handler) SendSolution(ctx context.Context, req *muxrpc.Request) (interfa return nil, err } - member, err := h.members.GetByFeed(ctx, *clientID) + member, err := h.members.GetByFeed(ctx, clientID) if err != nil { return nil, fmt.Errorf("client is not a room member") } @@ -81,7 +81,7 @@ func (h Handler) SendSolution(ctx context.Context, req *muxrpc.Request) (interfa var payload validate.ClientPayload payload.ServerID = h.self payload.ServerChallenge = params[0] - payload.ClientID = *clientID + payload.ClientID = clientID payload.ClientChallenge = params[1] sig, err := base64.StdEncoding.DecodeString(strings.TrimSuffix(params[2], ".sig.ed25519")) @@ -120,7 +120,7 @@ func (h Handler) InvalidateAllSolutions(ctx context.Context, req *muxrpc.Request } // lookup the member - member, err := h.members.GetByFeed(ctx, *clientID) + member, err := h.members.GetByFeed(ctx, clientID) if err != nil { return nil, err } diff --git a/muxrpc/handlers/tunnel/server/attendants.go b/muxrpc/handlers/tunnel/server/attendants.go index cd5026b1..bc8af8bc 100644 --- a/muxrpc/handlers/tunnel/server/attendants.go +++ b/muxrpc/handlers/tunnel/server/attendants.go @@ -10,10 +10,10 @@ import ( "fmt" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "go.cryptoscope.co/muxrpc/v2" - refs "go.mindeco.de/ssb-refs" + "github.com/ssbc/go-muxrpc/v2" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) // AttendantsUpdate is emitted if a single member joins or leaves. @@ -43,14 +43,14 @@ func (h *Handler) attendants(ctx context.Context, req *muxrpc.Request, snk *muxr } if pm == roomdb.ModeCommunity || pm == roomdb.ModeRestricted { - _, err := h.membersdb.GetByFeed(ctx, *peer) + _, err := h.membersdb.GetByFeed(ctx, peer) if err != nil { return fmt.Errorf("external user are not allowed to enumerate members") } } // add peer to the state - h.state.AddEndpoint(*peer, req.Endpoint()) + h.state.AddEndpoint(peer, req.Endpoint()) // send the current state snk.SetEncoding(muxrpc.TypeJSON) diff --git a/muxrpc/handlers/tunnel/server/connect.go b/muxrpc/handlers/tunnel/server/connect.go index da0993d3..1f42eddf 100644 --- a/muxrpc/handlers/tunnel/server/connect.go +++ b/muxrpc/handlers/tunnel/server/connect.go @@ -10,13 +10,13 @@ import ( "fmt" "io" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" kitlog "go.mindeco.de/log" "go.mindeco.de/log/level" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomstate" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomstate" ) type ConnectArg struct { @@ -46,7 +46,7 @@ func (h connectHandler) HandleConnect(ctx context.Context, edp muxrpc.Endpoint) return } - h.state.Remove(*peer) + h.state.Remove(peer) } // HandleDuplex here implements the tunnel.connect behavior of the server-side. It receives incoming events @@ -63,7 +63,7 @@ func (h connectHandler) HandleDuplex(ctx context.Context, req *muxrpc.Request, p } arg := args[0] - if !arg.Portal.Equal(&h.self) { + if !arg.Portal.Equal(h.self) { return fmt.Errorf("talking to the wrong room") } @@ -74,29 +74,29 @@ func (h connectHandler) HandleDuplex(ctx context.Context, req *muxrpc.Request, p } // make sure they dont want to connect to themselves - if caller.Equal(&arg.Target) { + if caller.Equal(arg.Target) { return fmt.Errorf("can't connect to self") } // see if we have and endpoint for the target edp, has := h.state.Has(arg.Target) if !has { - return fmt.Errorf("could not connect to:%s", arg.Target.Ref()) + return fmt.Errorf("could not connect to:%s", arg.Target.String()) } // call connect on them var argWorigin connectWithOriginArg argWorigin.ConnectArg = arg - argWorigin.Origin = *caller + argWorigin.Origin = caller targetSrc, targetSnk, err := edp.Duplex(ctx, muxrpc.TypeBinary, muxrpc.Method{"tunnel", "connect"}, argWorigin) if err != nil { - return fmt.Errorf("could not connect to:%s", arg.Target.Ref()) + return fmt.Errorf("could not connect to:%s", arg.Target.String()) } // pipe data between caller and target var cpy muxrpcDuplexCopy - cpy.logger = kitlog.With(h.logger, "caller", caller.ShortRef(), "target", arg.Target.ShortRef()) + cpy.logger = kitlog.With(h.logger, "caller", caller.ShortSigil(), "target", arg.Target.ShortSigil()) cpy.ctx, cpy.cancel = context.WithCancel(ctx) go cpy.do(targetSnk, peerSrc) diff --git a/muxrpc/handlers/tunnel/server/members.go b/muxrpc/handlers/tunnel/server/members.go index e32a3782..d4f12a9d 100644 --- a/muxrpc/handlers/tunnel/server/members.go +++ b/muxrpc/handlers/tunnel/server/members.go @@ -8,10 +8,11 @@ import ( "context" "encoding/json" "fmt" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "go.cryptoscope.co/muxrpc/v2" - refs "go.mindeco.de/ssb-refs" + + "github.com/ssbc/go-muxrpc/v2" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) type Member struct { @@ -30,7 +31,7 @@ func (h *Handler) members(ctx context.Context, req *muxrpc.Request, snk *muxrpc. } if pm == roomdb.ModeCommunity || pm == roomdb.ModeRestricted { - _, err := h.membersdb.GetByFeed(ctx, *peer) + _, err := h.membersdb.GetByFeed(ctx, peer) if err != nil { return fmt.Errorf("external users are not allowed to list members: %w", err) } diff --git a/muxrpc/handlers/tunnel/server/plugin.go b/muxrpc/handlers/tunnel/server/plugin.go index 6144b5d3..289bb44d 100644 --- a/muxrpc/handlers/tunnel/server/plugin.go +++ b/muxrpc/handlers/tunnel/server/plugin.go @@ -5,13 +5,13 @@ package server import ( - "go.cryptoscope.co/muxrpc/v2" - "go.cryptoscope.co/muxrpc/v2/typemux" + "github.com/ssbc/go-muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2/typemux" kitlog "go.mindeco.de/log" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomstate" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomstate" ) /* manifest: diff --git a/muxrpc/handlers/tunnel/server/state.go b/muxrpc/handlers/tunnel/server/state.go index 59a01f57..dfde7e82 100644 --- a/muxrpc/handlers/tunnel/server/state.go +++ b/muxrpc/handlers/tunnel/server/state.go @@ -12,11 +12,11 @@ import ( "sync" "time" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomstate" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomstate" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" kitlog "go.mindeco.de/log" ) @@ -50,7 +50,7 @@ func (h *Handler) metadata(ctx context.Context, req *muxrpc.Request) (interface{ reply.Name = h.netInfo.Domain // check if caller is a member - if _, err := h.membersdb.GetByFeed(ctx, *ref); err != nil { + if _, err := h.membersdb.GetByFeed(ctx, ref); err != nil { if !errors.Is(err, roomdb.ErrNotFound) { return nil, err } @@ -90,7 +90,7 @@ func (h *Handler) announce(_ context.Context, req *muxrpc.Request) (interface{}, return nil, err } - h.state.AddEndpoint(*ref, req.Endpoint()) + h.state.AddEndpoint(ref, req.Endpoint()) return true, nil } @@ -101,7 +101,7 @@ func (h *Handler) leave(_ context.Context, req *muxrpc.Request) (interface{}, er return nil, err } - h.state.Remove(*ref) + h.state.Remove(ref) return true, nil } @@ -123,7 +123,7 @@ func (h *Handler) endpoints(ctx context.Context, req *muxrpc.Request, snk *muxrp case roomdb.ModeCommunity: fallthrough case roomdb.ModeRestricted: - _, err := h.membersdb.GetByFeed(ctx, *peer) + _, err := h.membersdb.GetByFeed(ctx, peer) if err != nil { return fmt.Errorf("external user are not allowed to enumerate members") } @@ -134,7 +134,7 @@ func (h *Handler) endpoints(ctx context.Context, req *muxrpc.Request, snk *muxrp h.state.RegisterLegacyEndpoints(toPeer) // add the peer to the room state if they arent already - h.state.AlreadyAdded(*peer, req.Endpoint()) + h.state.AlreadyAdded(peer, req.Endpoint()) // update the peer with toPeer.Update(h.state.List()) diff --git a/muxrpc/handlers/whoami/whoami.go b/muxrpc/handlers/whoami/whoami.go index eeeb1a7e..a367233d 100644 --- a/muxrpc/handlers/whoami/whoami.go +++ b/muxrpc/handlers/whoami/whoami.go @@ -7,13 +7,13 @@ package whoami import ( "context" - "go.cryptoscope.co/muxrpc/v2/typemux" + "github.com/ssbc/go-muxrpc/v2/typemux" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" kitlog "go.mindeco.de/log" "go.mindeco.de/log/level" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" ) var ( @@ -39,5 +39,5 @@ func (h handler) HandleAsync(ctx context.Context, req *muxrpc.Request) (interfac ID string `json:"id"` } - return ret{h.id.Ref()}, nil + return ret{h.id.String()}, nil } diff --git a/muxrpc/test/go/alias_test.go b/muxrpc/test/go/alias_test.go index b088b40f..d9aa915b 100644 --- a/muxrpc/test/go/alias_test.go +++ b/muxrpc/test/go/alias_test.go @@ -13,14 +13,14 @@ import ( "testing" "time" + "github.com/ssbc/go-muxrpc/v2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.cryptoscope.co/muxrpc/v2" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/aliases" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomsrv" + "github.com/ssbc/go-ssb-room/v2/internal/aliases" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomsrv" ) // technically we are usign two servers here @@ -104,7 +104,7 @@ func TestAliasRegister(t *testing.T) { a.Equal(confirmation.Alias, alias.Name) a.Equal(confirmation.Signature, alias.Signature) - a.True(confirmation.UserID.Equal(&bobsKey.Feed)) + a.True(confirmation.UserID.Equal(bobsKey.Feed)) t.Log("alias stored") @@ -183,7 +183,7 @@ func TestListAliases(t *testing.T) { var response string - err = clientForServer.Async(ctx, &response, muxrpc.TypeString, muxrpc.Method{"room", "listAliases"}, bobsKey.Feed.Ref()) + err = clientForServer.Async(ctx, &response, muxrpc.TypeString, muxrpc.Method{"room", "listAliases"}, bobsKey.Feed.String()) r.NoError(err) a.Equal("[]", response, "initially the list of aliases should be empty") @@ -191,7 +191,7 @@ func TestListAliases(t *testing.T) { r.NoError(err) a.NotEqual("", response, "response isn't empty") - err = clientForServer.Async(ctx, &response, muxrpc.TypeString, muxrpc.Method{"room", "listAliases"}, bobsKey.Feed.Ref()) + err = clientForServer.Async(ctx, &response, muxrpc.TypeString, muxrpc.Method{"room", "listAliases"}, bobsKey.Feed.String()) r.NoError(err) a.Equal("[\"bob\"]", response, "new alias should be in the list") } diff --git a/muxrpc/test/go/attendants_test.go b/muxrpc/test/go/attendants_test.go index 78615eca..9427db1c 100644 --- a/muxrpc/test/go/attendants_test.go +++ b/muxrpc/test/go/attendants_test.go @@ -13,11 +13,11 @@ import ( "testing" "time" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/muxrpc/handlers/tunnel/server" + "github.com/ssbc/go-muxrpc/v2" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/muxrpc/handlers/tunnel/server" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.cryptoscope.co/muxrpc/v2" - refs "go.mindeco.de/ssb-refs" ) // this tests the new room.attendants call @@ -55,7 +55,7 @@ func TestRoomAttendants(t *testing.T) { decodeJSONsrc(t, carlsSource, &initState) a.Equal("state", initState.Type) a.Len(initState.IDs, 1) - a.True(initState.IDs[0].Equal(&carl.feed)) + a.True(initState.IDs[0].Equal(carl.feed)) announcementsForCarl := make(announcements) go logAttendantsStream(ts, carlsSource, "carl", announcementsForCarl) @@ -85,7 +85,7 @@ func TestRoomAttendants(t *testing.T) { a.Len(announcementsForAlf, 0, "none yet") // assert what carl saw - _, seen = announcementsForCarl[alf.feed.Ref()] + _, seen = announcementsForCarl[alf.feed.String()] a.True(seen, "carl saw alf") // let bre join the room @@ -109,10 +109,10 @@ func TestRoomAttendants(t *testing.T) { a.Len(announcementsForBre, 0, "none yet") // the two present people saw her - _, seen = announcementsForAlf[bre.feed.Ref()] + _, seen = announcementsForAlf[bre.feed.String()] a.True(seen, "alf saw bre") - _, seen = announcementsForCarl[bre.feed.Ref()] + _, seen = announcementsForCarl[bre.feed.String()] a.True(seen, "carl saw alf") // shutdown alf first @@ -122,10 +122,10 @@ func TestRoomAttendants(t *testing.T) { // bre and arl should have removed him - _, seen = announcementsForBre[alf.feed.Ref()] + _, seen = announcementsForBre[alf.feed.String()] a.False(seen, "alf should be gone for bre") - _, seen = announcementsForCarl[alf.feed.Ref()] + _, seen = announcementsForCarl[alf.feed.String()] a.False(seen, "alf should be gone for carl") // terminate server and the clients @@ -143,12 +143,12 @@ func TestRoomAttendants(t *testing.T) { func assertListContains(t *testing.T, lst []refs.FeedRef, who refs.FeedRef) { var found = false for _, feed := range lst { - if feed.Equal(&who) { + if feed.Equal(who) { found = true } } if !found { - t.Errorf("did not find %s in list of %d", who.ShortRef(), len(lst)) + t.Errorf("did not find %s in list of %d", who.ShortSigil(), len(lst)) } } @@ -176,13 +176,13 @@ func logAttendantsStream(ts *testSession, src *muxrpc.ByteSource, who string, a if err != nil { panic(err) } - ts.t.Log(who, "got an update:", update.Type, update.ID.ShortRef()) + ts.t.Log(who, "got an update:", update.Type, update.ID.ShortSigil()) switch update.Type { case "joined": - a[update.ID.Ref()] = struct{}{} + a[update.ID.String()] = struct{}{} case "left": - delete(a, update.ID.Ref()) + delete(a, update.ID.String()) default: ts.t.Fatalf("%s: unexpected update type: %v", who, update.Type) } diff --git a/muxrpc/test/go/deny_test.go b/muxrpc/test/go/deny_test.go index 16a6c608..f8298304 100644 --- a/muxrpc/test/go/deny_test.go +++ b/muxrpc/test/go/deny_test.go @@ -9,12 +9,12 @@ import ( "testing" "time" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-muxrpc/v2" + refs "github.com/ssbc/go-ssb-refs" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.cryptoscope.co/muxrpc/v2" - refs "go.mindeco.de/ssb-refs" ) // This test denies connections for keys that have been added to the deny list database, DeniedKeys. @@ -72,7 +72,7 @@ func TestConnEstablishmentDeniedKey(t *testing.T) { a.Nil(endpointB, "should not have an endpoint on B") err = endpointB.Async(ctx, &srvWho, muxrpc.TypeJSON, muxrpc.Method{"whoami"}) r.Error(err) - t.Log(srvWho.ID.Ref()) + t.Log(srvWho.ID.String()) } endpointA, has := botA.Network.GetEndpointFor(serv.Whoami()) @@ -81,8 +81,8 @@ func TestConnEstablishmentDeniedKey(t *testing.T) { err = endpointA.Async(ctx, &srvWho, muxrpc.TypeJSON, muxrpc.Method{"whoami"}) r.NoError(err) - t.Log("server whoami:", srvWho.ID.Ref()) - a.True(serv.Whoami().Equal(&srvWho.ID)) + t.Log("server whoami:", srvWho.ID.String()) + a.True(serv.Whoami().Equal(srvWho.ID)) cancel() } @@ -141,7 +141,7 @@ func TestConnEstablishmentDenyNonMembersRestrictedRoom(t *testing.T) { a.Nil(endpointB, "should not have an endpoint on B (B is not a member, and the server is restricted)") err = endpointB.Async(ctx, &srvWho, muxrpc.TypeJSON, muxrpc.Method{"whoami"}) r.Error(err) - t.Log(srvWho.ID.Ref()) + t.Log(srvWho.ID.String()) } endpointA, has := botA.Network.GetEndpointFor(serv.Whoami()) @@ -150,8 +150,8 @@ func TestConnEstablishmentDenyNonMembersRestrictedRoom(t *testing.T) { err = endpointA.Async(ctx, &srvWho, muxrpc.TypeJSON, muxrpc.Method{"whoami"}) r.NoError(err) - t.Log("server whoami:", srvWho.ID.Ref()) - a.True(serv.Whoami().Equal(&srvWho.ID)) + t.Log("server whoami:", srvWho.ID.String()) + a.True(serv.Whoami().Equal(srvWho.ID)) cancel() } @@ -211,7 +211,7 @@ func TestConnEstablishmentAllowNonMembersCommunityRoom(t *testing.T) { r.True(has, "botB has no endpoint for the server") err = endpointB.Async(ctx, &srvWho, muxrpc.TypeJSON, muxrpc.Method{"whoami"}) r.NoError(err) - t.Log(srvWho.ID.Ref()) + t.Log(srvWho.ID.String()) endpointA, has := botA.Network.GetEndpointFor(serv.Whoami()) r.True(has, "botA has no endpoint for the server") @@ -219,8 +219,8 @@ func TestConnEstablishmentAllowNonMembersCommunityRoom(t *testing.T) { err = endpointA.Async(ctx, &srvWho, muxrpc.TypeJSON, muxrpc.Method{"whoami"}) r.NoError(err) - t.Log("server whoami:", srvWho.ID.Ref()) - a.True(serv.Whoami().Equal(&srvWho.ID)) + t.Log("server whoami:", srvWho.ID.String()) + a.True(serv.Whoami().Equal(srvWho.ID)) cancel() } diff --git a/muxrpc/test/go/endpoints_test.go b/muxrpc/test/go/endpoints_test.go index 9acc316b..6da2990e 100644 --- a/muxrpc/test/go/endpoints_test.go +++ b/muxrpc/test/go/endpoints_test.go @@ -12,11 +12,11 @@ import ( "testing" "time" + "github.com/ssbc/go-muxrpc/v2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.cryptoscope.co/muxrpc/v2" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" ) type announcements map[string]struct{} @@ -54,7 +54,7 @@ func TestEndpointClients(t *testing.T) { go logEndpointsStream(ts, carlEndpointsSrc, "carl", announcementsForCarl) time.Sleep(1 * time.Second) // give some time to process new events - _, seen := announcementsForCarl[carl.feed.Ref()] + _, seen := announcementsForCarl[carl.feed.String()] a.True(seen, "carl saw himself") // let alf join the room @@ -66,13 +66,13 @@ func TestEndpointClients(t *testing.T) { time.Sleep(1 * time.Second) // give some time to process new events // assert what alf saw - _, seen = announcementsForAlf[carl.feed.Ref()] + _, seen = announcementsForAlf[carl.feed.String()] a.True(seen, "alf saw carl") - _, seen = announcementsForAlf[alf.feed.Ref()] + _, seen = announcementsForAlf[alf.feed.String()] a.True(seen, "alf saw himself") // assert what carl saw - _, seen = announcementsForCarl[alf.feed.Ref()] + _, seen = announcementsForCarl[alf.feed.String()] a.True(seen, "carl saw alf") // let bre join the room @@ -85,17 +85,17 @@ func TestEndpointClients(t *testing.T) { time.Sleep(1 * time.Second) // give some time to process new events // assert bre saw the other two and herself - _, seen = announcementsForBre[carl.feed.Ref()] + _, seen = announcementsForBre[carl.feed.String()] a.True(seen, "bre saw carl") - _, seen = announcementsForBre[alf.feed.Ref()] + _, seen = announcementsForBre[alf.feed.String()] a.True(seen, "bre saw alf") - _, seen = announcementsForBre[bre.feed.Ref()] + _, seen = announcementsForBre[bre.feed.String()] a.True(seen, "bre saw herself") // assert the others saw bre - _, seen = announcementsForAlf[bre.feed.Ref()] + _, seen = announcementsForAlf[bre.feed.String()] a.True(seen, "alf saw bre") - _, seen = announcementsForCarl[bre.feed.Ref()] + _, seen = announcementsForCarl[bre.feed.String()] a.True(seen, "carl saw bre") // terminate server and the clients @@ -127,10 +127,10 @@ func logEndpointsStream(ts *testSession, src *muxrpc.ByteSource, who string, a a } ts.t.Log(who, "got endpoints:", len(edps)) for i, f := range edps { - ts.t.Log(who, ":", i, f.ShortRef()) + ts.t.Log(who, ":", i, f.ShortSigil()) // mark as f is present - a[f.Ref()] = struct{}{} + a[f.String()] = struct{}{} } } diff --git a/muxrpc/test/go/members_test.go b/muxrpc/test/go/members_test.go index 5b79abda..2af429c1 100644 --- a/muxrpc/test/go/members_test.go +++ b/muxrpc/test/go/members_test.go @@ -7,16 +7,16 @@ package go_test import ( "context" "encoding/json" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/muxrpc/handlers/tunnel/server" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomsrv" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" + "github.com/ssbc/go-ssb-room/v2/muxrpc/handlers/tunnel/server" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomsrv" "math/rand" "testing" "time" "github.com/stretchr/testify/require" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" ) // this tests the new room.members call diff --git a/muxrpc/test/go/roomstate_test.go b/muxrpc/test/go/roomstate_test.go index c9548cab..9381206a 100644 --- a/muxrpc/test/go/roomstate_test.go +++ b/muxrpc/test/go/roomstate_test.go @@ -13,10 +13,10 @@ import ( "testing" "time" + "github.com/ssbc/go-muxrpc/v2" "github.com/stretchr/testify/require" - "go.cryptoscope.co/muxrpc/v2" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/muxrpc/handlers/tunnel/server" + "github.com/ssbc/go-ssb-room/v2/muxrpc/handlers/tunnel/server" ) // peers not on the members list can't connect @@ -73,7 +73,7 @@ func TestStaleMembers(t *testing.T) { // restart srh oldSrh := srh.feed srh = ts.makeTestClient("srh") - r.True(oldSrh.Equal(&srh.feed)) + r.True(oldSrh.Equal(srh.feed)) t.Log("restarted srh") time.Sleep(1 * time.Second) // let server respond diff --git a/muxrpc/test/go/simple_test.go b/muxrpc/test/go/simple_test.go index c20db37e..b96720ba 100644 --- a/muxrpc/test/go/simple_test.go +++ b/muxrpc/test/go/simple_test.go @@ -9,13 +9,13 @@ import ( "testing" "time" + "github.com/ssbc/go-muxrpc/v2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.cryptoscope.co/muxrpc/v2" - tunserv "github.com/ssb-ngi-pointer/go-ssb-room/v2/muxrpc/handlers/tunnel/server" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + tunserv "github.com/ssbc/go-ssb-room/v2/muxrpc/handlers/tunnel/server" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) func TestTunnelServerSimple(t *testing.T) { @@ -68,7 +68,7 @@ func TestTunnelServerSimple(t *testing.T) { a.Nil(endpointB, "should not have an endpoint on B") err = endpointB.Async(ctx, &srvWho, muxrpc.TypeJSON, muxrpc.Method{"whoami"}) r.Error(err) - t.Log(srvWho.ID.Ref()) + t.Log(srvWho.ID.String()) } endpointA, has := botA.Network.GetEndpointFor(serv.Whoami()) @@ -77,8 +77,8 @@ func TestTunnelServerSimple(t *testing.T) { err = endpointA.Async(ctx, &srvWho, muxrpc.TypeJSON, muxrpc.Method{"whoami"}) r.NoError(err) - t.Log("server whoami:", srvWho.ID.Ref()) - a.True(serv.Whoami().Equal(&srvWho.ID)) + t.Log("server whoami:", srvWho.ID.String()) + a.True(serv.Whoami().Equal(srvWho.ID)) // start testing basic room stuff var meta tunserv.MetadataReply @@ -145,11 +145,11 @@ func TestRoomAnnounce(t *testing.T) { err = endpointA.Async(ctx, &srvWho, muxrpc.TypeJSON, muxrpc.Method{"whoami"}) r.NoError(err) - a.True(serv.Whoami().Equal(&srvWho.ID)) + a.True(serv.Whoami().Equal(srvWho.ID)) err = endpointB.Async(ctx, &srvWho, muxrpc.TypeJSON, muxrpc.Method{"whoami"}) r.NoError(err) - a.True(serv.Whoami().Equal(&srvWho.ID)) + a.True(serv.Whoami().Equal(srvWho.ID)) // let B listen for changes newRoomMember, err := endpointB.Source(ctx, muxrpc.TypeJSON, muxrpc.Method{"tunnel", "endpoints"}) diff --git a/muxrpc/test/go/utils_test.go b/muxrpc/test/go/utils_test.go index 794623a6..c145b862 100644 --- a/muxrpc/test/go/utils_test.go +++ b/muxrpc/test/go/utils_test.go @@ -19,25 +19,25 @@ import ( "time" _ "github.com/mattn/go-sqlite3" + "github.com/ssbc/go-muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2/debug" + "github.com/ssbc/go-netwrap" + "github.com/ssbc/go-secretstream" "github.com/stretchr/testify/require" - "go.cryptoscope.co/muxrpc/v2" - "go.cryptoscope.co/muxrpc/v2/debug" - "go.cryptoscope.co/netwrap" - "go.cryptoscope.co/secretstream" "go.mindeco.de/log" "go.mindeco.de/log/level" "golang.org/x/sync/errgroup" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/testutils" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/signinwithssb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/muxrpc/handlers/tunnel/server" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomsrv" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/testutils" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/internal/signinwithssb" + "github.com/ssbc/go-ssb-room/v2/muxrpc/handlers/tunnel/server" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite" + "github.com/ssbc/go-ssb-room/v2/roomsrv" ) var ( @@ -167,7 +167,7 @@ func (ts *testSession) makeTestClient(name string) testClient { ts.clientKeys[name] = client } - ts.t.Log(name, "is", client.Feed.ShortRef()) + ts.t.Log(name, "is", client.Feed.ShortSigil()) // add it as a memeber, if it isnt already _, err := ts.srv.Members.GetByFeed(ts.ctx, client.Feed) diff --git a/muxrpc/test/go/websocket_test.go b/muxrpc/test/go/websocket_test.go index 48a3b61a..a13f8f28 100644 --- a/muxrpc/test/go/websocket_test.go +++ b/muxrpc/test/go/websocket_test.go @@ -17,16 +17,16 @@ import ( "time" "github.com/gorilla/websocket" + "github.com/ssbc/go-muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2/debug" + "github.com/ssbc/go-secretstream" "github.com/stretchr/testify/require" - "go.cryptoscope.co/muxrpc/v2" - "go.cryptoscope.co/muxrpc/v2/debug" - "go.cryptoscope.co/secretstream" "go.mindeco.de/encodedTime" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - tunserv "github.com/ssb-ngi-pointer/go-ssb-room/v2/muxrpc/handlers/tunnel/server" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" + "github.com/ssbc/go-ssb-room/v2/internal/network" + tunserv "github.com/ssbc/go-ssb-room/v2/muxrpc/handlers/tunnel/server" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) func TestWebsocketDialing(t *testing.T) { diff --git a/muxrpc/test/nodejs/aliases_test.go b/muxrpc/test/nodejs/aliases_test.go index 94d11b7d..3ab6b72f 100644 --- a/muxrpc/test/nodejs/aliases_test.go +++ b/muxrpc/test/nodejs/aliases_test.go @@ -11,9 +11,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/aliases" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/mockdb" + "github.com/ssbc/go-ssb-room/v2/internal/aliases" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/mockdb" ) func TestGoServerJSClientAliases(t *testing.T) { @@ -51,7 +51,7 @@ func TestGoServerJSClientAliases(t *testing.T) { r.Equal(1, aliasesDB.RegisterCallCount(), "register call count") _, name, ref, signature := aliasesDB.RegisterArgsForCall(0) a.Equal("alice", name, "wrong alias registered") - a.Equal(alice.Ref(), ref.Ref()) + a.Equal(alice.String(), ref.String()) var aliasReq aliases.Confirmation aliasReq.Alias = name diff --git a/muxrpc/test/nodejs/setup_test.go b/muxrpc/test/nodejs/setup_test.go index bde0cc94..668d13aa 100644 --- a/muxrpc/test/nodejs/setup_test.go +++ b/muxrpc/test/nodejs/setup_test.go @@ -21,20 +21,20 @@ import ( "testing" "time" + "github.com/ssbc/go-muxrpc/v2/debug" + "github.com/ssbc/go-netwrap" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.cryptoscope.co/muxrpc/v2/debug" - "go.cryptoscope.co/netwrap" "go.mindeco.de/log" "golang.org/x/sync/errgroup" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/testutils" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/signinwithssb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/mockdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomsrv" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/testutils" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/signinwithssb" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/mockdb" + "github.com/ssbc/go-ssb-room/v2/roomsrv" ) func init() { @@ -121,7 +121,7 @@ func (ts *testSession) startGoServer( if err != nil { return nil, err } - fname := filepath.Join("testrun", ts.t.Name(), "muxdump", ref.ShortRef()) + fname := filepath.Join("testrun", ts.t.Name(), "muxdump", ref.ShortSigil()) return debug.WrapDump(fname, conn) }), ) @@ -135,7 +135,7 @@ func (ts *testSession) startGoServer( srv, err := roomsrv.New(membersDB, deniedKeysDB, aliasDB, authSessionsDB, sb, fakeConfig, netInfo, opts...) r.NoError(err, "failed to init tees a server") - ts.t.Logf("go server: %s", srv.Whoami().Ref()) + ts.t.Logf("go server: %s", srv.Whoami().String()) ts.t.Cleanup(func() { ts.t.Log("bot close:", srv.Close()) }) @@ -143,7 +143,7 @@ func (ts *testSession) startGoServer( ts.done.Go(func() error { err := srv.Network.Serve(ts.ctx) // if the muxrpc protocol fucks up by e.g. unpacking body data into a header, this type of error will be surfaced here and look scary in the test output - // example: https://github.com/ssb-ngi-pointer/go-ssb-room/pull/85#issuecomment-801106687 + // example: https://github.com/ssbc/go-ssb-room/pull/85#issuecomment-801106687 if err != nil && !errors.Is(err, context.Canceled) { err = fmt.Errorf("go server exited: %w", err) ts.t.Log(err) @@ -187,7 +187,7 @@ func (ts *testSession) startJSClient( "TEST_NAME=" + name, "TEST_REPO=" + cmd.Dir, "TEST_PEERADDR=" + netwrap.GetAddr(peerAddr, "tcp").String(), - "TEST_PEERREF=" + peerRef.Ref(), + "TEST_PEERREF=" + peerRef.String(), "TEST_SESSIONSCRIPT=" + testScript, // "DEBUG=ssb:room:tunnel:*", } @@ -221,8 +221,8 @@ func (ts *testSession) startJSClient( jsBotRef, err := refs.ParseFeedRef(pubScanner.Text()) r.NoError(err, "failed to get %s key from JS process") - ts.t.Logf("JS %s:%d %s", name, jsBotCnt, jsBotRef.Ref()) - return *jsBotRef + ts.t.Logf("JS %s:%d %s", name, jsBotCnt, jsBotRef.String()) + return jsBotRef } // startJSBotAsServer returns the servers public key and it's TCP port on localhost. @@ -277,8 +277,8 @@ func (ts *testSession) startJSBotAsServer(name, testScriptFileName string) (*ref srvRef, err := refs.ParseFeedRef(pubScanner.Text()) r.NoError(err, "failed to get srvRef key from JS process") - ts.t.Logf("JS %s: %s port: %d", name, srvRef.Ref(), port) - return srvRef, port + ts.t.Logf("JS %s: %s port: %d", name, srvRef.String(), port) + return &srvRef, port } func (ts *testSession) wait() { diff --git a/muxrpc/test/nodejs/tunnel_connect_test.go b/muxrpc/test/nodejs/tunnel_connect_test.go index eb9c4631..50cf3d4d 100644 --- a/muxrpc/test/nodejs/tunnel_connect_test.go +++ b/muxrpc/test/nodejs/tunnel_connect_test.go @@ -16,9 +16,9 @@ import ( "github.com/stretchr/testify/require" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/mockdb" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/mockdb" ) // legacy js end-to-end test as a sanity check @@ -136,7 +136,7 @@ func TestModernJSClient(t *testing.T) { } // found a nasty `throw err` in the JS stack around pull.drain. lets make sure it stays gone -// https://github.com/ssb-ngi-pointer/go-ssb-room/issues/190 +// https://github.com/ssbc/go-ssb-room/issues/190 func TestClientSurvivesShutdown(t *testing.T) { r := require.New(t) @@ -177,11 +177,11 @@ func TestClientSurvivesShutdown(t *testing.T) { func writeRoomHandleFile(srv, target refs.FeedRef, filePath string) error { var roomHandle bytes.Buffer roomHandle.WriteString("tunnel:") - roomHandle.WriteString(srv.Ref()) + roomHandle.WriteString(srv.String()) roomHandle.WriteString(":") - roomHandle.WriteString(target.Ref()) + roomHandle.WriteString(target.String()) roomHandle.WriteString("~shs:") - roomHandle.WriteString(base64.StdEncoding.EncodeToString(target.ID)) + roomHandle.WriteString(base64.StdEncoding.EncodeToString(target.PubKey())) os.MkdirAll(filepath.Dir(filePath), 0700) return ioutil.WriteFile(filePath, roomHandle.Bytes(), 0700) diff --git a/roomdb/interface.go b/roomdb/interface.go index b0409fc3..65670777 100644 --- a/roomdb/interface.go +++ b/roomdb/interface.go @@ -15,8 +15,8 @@ package roomdb import ( "context" + refs "github.com/ssbc/go-ssb-refs" "go.mindeco.de/http/auth" - refs "go.mindeco.de/ssb-refs" ) type RoomConfig interface { @@ -143,7 +143,7 @@ type AliasesService interface { type InvitesService interface { // Create creates a new invite for a new member. It returns the token or an error. // createdBy is user ID of the admin or moderator who created it. MemberID -1 is allowed if Privacy Mode is set to Open. - // aliasSuggestion is optional (empty string is fine) but can be used to disambiguate open invites. (See https://github.com/ssb-ngi-pointer/rooms2/issues/21) + // aliasSuggestion is optional (empty string is fine) but can be used to disambiguate open invites. (See https://github.com/ssbc/rooms2/issues/21) Create(ctx context.Context, createdBy int64) (string, error) // Consume checks if the passed token is still valid. diff --git a/roomdb/mockdb/aliases.go b/roomdb/mockdb/aliases.go index ec60485f..eb3e9ef1 100644 --- a/roomdb/mockdb/aliases.go +++ b/roomdb/mockdb/aliases.go @@ -9,8 +9,8 @@ import ( "context" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) type FakeAliasesService struct { diff --git a/roomdb/mockdb/auth.go b/roomdb/mockdb/auth.go index 06631d14..4f7453cb 100644 --- a/roomdb/mockdb/auth.go +++ b/roomdb/mockdb/auth.go @@ -9,7 +9,7 @@ import ( "context" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) type FakeAuthWithSSBService struct { diff --git a/roomdb/mockdb/auth_fallback.go b/roomdb/mockdb/auth_fallback.go index 1043323c..919fca94 100644 --- a/roomdb/mockdb/auth_fallback.go +++ b/roomdb/mockdb/auth_fallback.go @@ -9,7 +9,7 @@ import ( "context" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) type FakeAuthFallbackService struct { diff --git a/roomdb/mockdb/denied.go b/roomdb/mockdb/denied.go index 010ddc2e..14e2ec04 100644 --- a/roomdb/mockdb/denied.go +++ b/roomdb/mockdb/denied.go @@ -9,8 +9,8 @@ import ( "context" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) type FakeDeniedKeysService struct { diff --git a/roomdb/mockdb/fixed_pages.go b/roomdb/mockdb/fixed_pages.go index fde0eabe..5c3bb084 100644 --- a/roomdb/mockdb/fixed_pages.go +++ b/roomdb/mockdb/fixed_pages.go @@ -9,7 +9,7 @@ import ( "context" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) type FakePinnedNoticesService struct { diff --git a/roomdb/mockdb/invites.go b/roomdb/mockdb/invites.go index 6dde2ba5..17dd7e0b 100644 --- a/roomdb/mockdb/invites.go +++ b/roomdb/mockdb/invites.go @@ -9,8 +9,8 @@ import ( "context" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) type FakeInvitesService struct { diff --git a/roomdb/mockdb/members.go b/roomdb/mockdb/members.go index 957c5475..620ea7db 100644 --- a/roomdb/mockdb/members.go +++ b/roomdb/mockdb/members.go @@ -9,8 +9,8 @@ import ( "context" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) type FakeMembersService struct { diff --git a/roomdb/mockdb/pages.go b/roomdb/mockdb/pages.go index 73a753a9..7a32cb9d 100644 --- a/roomdb/mockdb/pages.go +++ b/roomdb/mockdb/pages.go @@ -9,7 +9,7 @@ import ( "context" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) type FakeNoticesService struct { diff --git a/roomdb/mockdb/roomconfig.go b/roomdb/mockdb/roomconfig.go index d2332e00..21dbf6e7 100644 --- a/roomdb/mockdb/roomconfig.go +++ b/roomdb/mockdb/roomconfig.go @@ -9,7 +9,7 @@ import ( "context" "sync" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) type FakeRoomConfig struct { diff --git a/roomdb/sqlite/aliases.go b/roomdb/sqlite/aliases.go index 748bacfc..a03d8477 100644 --- a/roomdb/sqlite/aliases.go +++ b/roomdb/sqlite/aliases.go @@ -13,9 +13,9 @@ import ( "github.com/volatiletech/sqlboiler/v4/boil" "github.com/volatiletech/sqlboiler/v4/queries/qm" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite/models" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite/models" ) // compiler assertion to ensure the struct fullfills the interface @@ -82,7 +82,7 @@ func (a Aliases) List(ctx context.Context) ([]roomdb.Alias, error) { func (a Aliases) Register(ctx context.Context, alias string, userFeed refs.FeedRef, signature []byte) error { return transact(a.db, func(tx *sql.Tx) error { // check we have a members entry for the feed and load it to get its ID - memberEntry, err := models.Members(qm.Where("pub_key = ?", userFeed.Ref())).One(ctx, tx) + memberEntry, err := models.Members(qm.Where("pub_key = ?", userFeed.String())).One(ctx, tx) if err != nil { if errors.Is(err, sql.ErrNoRows) { return roomdb.ErrNotFound diff --git a/roomdb/sqlite/aliases_test.go b/roomdb/sqlite/aliases_test.go index b8c23b05..e9c8b375 100644 --- a/roomdb/sqlite/aliases_test.go +++ b/roomdb/sqlite/aliases_test.go @@ -15,9 +15,9 @@ import ( "github.com/stretchr/testify/require" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) func TestAliases(t *testing.T) { @@ -28,7 +28,10 @@ func TestAliases(t *testing.T) { tr := repo.New(testRepo) // fake feed for testing, looks ok at least - newMember := refs.FeedRef{ID: bytes.Repeat([]byte("acab"), 8), Algo: refs.RefAlgoFeedSSB1} + newMember, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("acab"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } // 64 bytes of random for testing (validation is handled by the handlers) testSig := make([]byte, 64) @@ -112,7 +115,10 @@ func TestAliasesUniqueError(t *testing.T) { r.NoError(err) // fake feed for testing, looks ok at least - newMember := refs.FeedRef{ID: bytes.Repeat([]byte("acab"), 8), Algo: refs.RefAlgoFeedSSB1} + newMember, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("acab"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } // 64 bytes of random for testing (validation is handled by the handlers) testSig := make([]byte, 64) diff --git a/roomdb/sqlite/auth_fallback.go b/roomdb/sqlite/auth_fallback.go index f2bf85fc..3760ce0f 100644 --- a/roomdb/sqlite/auth_fallback.go +++ b/roomdb/sqlite/auth_fallback.go @@ -19,9 +19,9 @@ import ( "go.mindeco.de/http/auth" "golang.org/x/crypto/bcrypt" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite/models" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite/models" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" ) // compiler assertion to ensure the struct fullfills the interface diff --git a/roomdb/sqlite/auth_fallback_test.go b/roomdb/sqlite/auth_fallback_test.go index b8749cab..e481f14d 100644 --- a/roomdb/sqlite/auth_fallback_test.go +++ b/roomdb/sqlite/auth_fallback_test.go @@ -12,10 +12,10 @@ import ( "path/filepath" "testing" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/roomdb" "github.com/stretchr/testify/require" - refs "go.mindeco.de/ssb-refs" ) func TestFallbackAuth(t *testing.T) { @@ -27,7 +27,10 @@ func TestFallbackAuth(t *testing.T) { tr := repo.New(testRepo) // fake feed for testing, looks ok at least - newMember := refs.FeedRef{ID: bytes.Repeat([]byte("acab"), 8), Algo: refs.RefAlgoFeedSSB1} + newMember, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("acab"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } db, err := Open(tr, nil) r.NoError(err, "failed to open database") @@ -40,7 +43,7 @@ func TestFallbackAuth(t *testing.T) { err = db.AuthFallback.SetPassword(ctx, memberID, testPassword) r.NoError(err, "failed to create password") - cookieVal, err := db.AuthFallback.Check(newMember.Ref(), string(testPassword)) + cookieVal, err := db.AuthFallback.Check(newMember.String(), string(testPassword)) r.NoError(err, "failed to check password") gotID, ok := cookieVal.(int64) r.True(ok, "unexpected cookie value: %T", cookieVal) @@ -74,7 +77,10 @@ func TestFallbackAuthSetPassword(t *testing.T) { tr := repo.New(testRepo) // fake feed for testing, looks ok at least - newMember := refs.FeedRef{ID: bytes.Repeat([]byte("acab"), 8), Algo: refs.RefAlgoFeedSSB1} + newMember, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("acab"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } db, err := Open(tr, nil) r.NoError(err, "failed to open database") @@ -88,14 +94,14 @@ func TestFallbackAuthSetPassword(t *testing.T) { r.NoError(err, "failed to set password") // use the password - cookieVal, err := db.AuthFallback.Check(newMember.Ref(), string(testPassword)) + cookieVal, err := db.AuthFallback.Check(newMember.String(), string(testPassword)) r.NoError(err, "failed to check password") gotID, ok := cookieVal.(int64) r.True(ok, "unexpected cookie value: %T", cookieVal) r.Equal(memberID, gotID, "unexpected member ID value") // use a wrong password - cookieVal, err = db.AuthFallback.Check(newMember.Ref(), string(testPassword)+"nope-nope-nope") + cookieVal, err = db.AuthFallback.Check(newMember.String(), string(testPassword)+"nope-nope-nope") r.Error(err, "wrong password actually worked?!") r.Nil(cookieVal) @@ -105,11 +111,11 @@ func TestFallbackAuthSetPassword(t *testing.T) { r.NoError(err, "failed to update password") // now try to use old and new - cookieVal, err = db.AuthFallback.Check(newMember.Ref(), string(testPassword)) + cookieVal, err = db.AuthFallback.Check(newMember.String(), string(testPassword)) r.Error(err, "old password actually worked?!") r.Nil(cookieVal) - cookieVal, err = db.AuthFallback.Check(newMember.Ref(), string(changedTestPassword)) + cookieVal, err = db.AuthFallback.Check(newMember.String(), string(changedTestPassword)) r.NoError(err, "new password didnt work") gotID, ok = cookieVal.(int64) r.True(ok, "unexpected cookie value: %T", cookieVal) @@ -125,8 +131,15 @@ func TestFallbackAuthSetPasswordWithToken(t *testing.T) { tr := repo.New(testRepo) // two fake feeds for testing, looks ok at least - alf := refs.FeedRef{ID: bytes.Repeat([]byte("whyy"), 8), Algo: refs.RefAlgoFeedSSB1} - carl := refs.FeedRef{ID: bytes.Repeat([]byte("carl"), 8), Algo: refs.RefAlgoFeedSSB1} + alf, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("whyy"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } + + carl, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("carl"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } db, err := Open(tr, nil) r.NoError(err, "failed to open database") @@ -155,7 +168,7 @@ func TestFallbackAuthSetPasswordWithToken(t *testing.T) { r.NoError(err, "setPassword with token failed") // now use the new password - cookieVal, err := db.AuthFallback.Check(carl.Ref(), newPassword) + cookieVal, err := db.AuthFallback.Check(carl.String(), newPassword) r.NoError(err, "new password didnt work") gotID, ok := cookieVal.(int64) r.True(ok, "unexpected cookie value: %T", cookieVal) diff --git a/roomdb/sqlite/auth_withssb.go b/roomdb/sqlite/auth_withssb.go index 1d07457a..9af2eabb 100644 --- a/roomdb/sqlite/auth_withssb.go +++ b/roomdb/sqlite/auth_withssb.go @@ -14,9 +14,9 @@ import ( "github.com/volatiletech/sqlboiler/v4/boil" "github.com/volatiletech/sqlboiler/v4/queries/qm" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/randutil" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite/models" + "github.com/ssbc/go-ssb-room/v2/internal/randutil" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite/models" ) // compiler assertion to ensure the struct fullfills the interface diff --git a/roomdb/sqlite/denied.go b/roomdb/sqlite/denied.go index e9975e30..eb5ea063 100644 --- a/roomdb/sqlite/denied.go +++ b/roomdb/sqlite/denied.go @@ -14,9 +14,9 @@ import ( "github.com/volatiletech/sqlboiler/v4/boil" "github.com/volatiletech/sqlboiler/v4/queries/qm" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite/models" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite/models" ) // compiler assertion to ensure the struct fullfills the interface @@ -30,7 +30,7 @@ type DeniedKeys struct { // Add adds the feed to the list. func (dk DeniedKeys) Add(ctx context.Context, a refs.FeedRef, comment string) error { // TODO: better valid - if _, err := refs.ParseFeedRef(a.Ref()); err != nil { + if _, err := refs.ParseFeedRef(a.String()); err != nil { return err } @@ -53,7 +53,7 @@ func (dk DeniedKeys) Add(ctx context.Context, a refs.FeedRef, comment string) er // HasFeed returns true if a feed is on the list. func (dk DeniedKeys) HasFeed(ctx context.Context, h refs.FeedRef) bool { - _, err := models.DeniedKeys(qm.Where("pub_key = ?", h.Ref())).One(ctx, dk.db) + _, err := models.DeniedKeys(qm.Where("pub_key = ?", h.String())).One(ctx, dk.db) if err != nil { return false } @@ -116,7 +116,7 @@ func (dk DeniedKeys) Count(ctx context.Context) (uint, error) { // RemoveFeed removes the feed from the list. func (dk DeniedKeys) RemoveFeed(ctx context.Context, r refs.FeedRef) error { - entry, err := models.DeniedKeys(qm.Where("pub_key = ?", r.Ref())).One(ctx, dk.db) + entry, err := models.DeniedKeys(qm.Where("pub_key = ?", r.String())).One(ctx, dk.db) if err != nil { if errors.Is(err, sql.ErrNoRows) { return roomdb.ErrNotFound diff --git a/roomdb/sqlite/denied_test.go b/roomdb/sqlite/denied_test.go index 280c71b4..907631bf 100644 --- a/roomdb/sqlite/denied_test.go +++ b/roomdb/sqlite/denied_test.go @@ -12,12 +12,12 @@ import ( "testing" "time" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite/models" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite/models" "github.com/stretchr/testify/require" - refs "go.mindeco.de/ssb-refs" ) func TestDeniedKeys(t *testing.T) { @@ -32,14 +32,20 @@ func TestDeniedKeys(t *testing.T) { db, err := Open(tr, nil) require.NoError(t, err) - tf := refs.FeedRef{ID: bytes.Repeat([]byte("fooo"), 8), Algo: "nope"} + tf, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("fooo"), 8), "nope") + if err != nil { + r.Error(err) + } err = db.DeniedKeys.Add(ctx, tf, "wont work anyhow") r.Error(err) // looks ok at least created := time.Now() time.Sleep(time.Second) - okFeed := refs.FeedRef{ID: bytes.Repeat([]byte("b44d"), 8), Algo: refs.RefAlgoFeedSSB1} + okFeed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("b44d"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } err = db.DeniedKeys.Add(ctx, okFeed, "be gone") r.NoError(err) @@ -53,7 +59,7 @@ func TestDeniedKeys(t *testing.T) { lst, err := db.DeniedKeys.List(ctx) r.NoError(err) r.Len(lst, 1) - r.Equal(okFeed.Ref(), lst[0].PubKey.Ref()) + r.Equal(okFeed.String(), lst[0].PubKey.String()) r.Equal("be gone", lst[0].Comment) r.True(lst[0].CreatedAt.After(created), "not created after the sleep?") @@ -92,7 +98,10 @@ func TestDeniedKeysUnique(t *testing.T) { db, err := Open(tr, nil) require.NoError(t, err) - feedA := refs.FeedRef{ID: bytes.Repeat([]byte("b33f"), 8), Algo: refs.RefAlgoFeedSSB1} + feedA, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("b33f"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } err = db.DeniedKeys.Add(ctx, feedA, "test comment") r.NoError(err) @@ -118,7 +127,10 @@ func TestDeniedKeysByID(t *testing.T) { db, err := Open(tr, nil) require.NoError(t, err) - feedA := refs.FeedRef{ID: bytes.Repeat([]byte("b33f"), 8), Algo: refs.RefAlgoFeedSSB1} + feedA, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("b33f"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } err = db.DeniedKeys.Add(ctx, feedA, "nope") r.NoError(err) diff --git a/roomdb/sqlite/invites.go b/roomdb/sqlite/invites.go index cd539254..21008d7a 100644 --- a/roomdb/sqlite/invites.go +++ b/roomdb/sqlite/invites.go @@ -17,9 +17,9 @@ import ( "github.com/volatiletech/sqlboiler/v4/boil" "github.com/volatiletech/sqlboiler/v4/queries/qm" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite/models" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite/models" ) // compiler assertion to ensure the struct fullfills the interface @@ -37,7 +37,7 @@ type Invites struct { // Create creates a new invite for a new member. It returns the token or an error. // createdBy is user ID of the admin or moderator who created it. -// aliasSuggestion is optional (empty string is fine) but can be used to disambiguate open invites. (See https://github.com/ssb-ngi-pointer/rooms2/issues/21) +// aliasSuggestion is optional (empty string is fine) but can be used to disambiguate open invites. (See https://github.com/ssbc/rooms2/issues/21) // The returned token is base64 URL encoded and has inviteTokenLength when decoded. func (i Invites) Create(ctx context.Context, createdBy int64) (string, error) { var newInvite = models.Invite{ @@ -147,7 +147,7 @@ func (i Invites) Consume(ctx context.Context, token string, newMember refs.FeedR _, err := i.members.add(ctx, tx, newMember, roomdb.RoleMember) var alreadyAdded roomdb.ErrAlreadyAdded if err != nil { - if errors.As(err, &alreadyAdded) && alreadyAdded.Ref.Equal(&newMember) { + if errors.As(err, &alreadyAdded) && alreadyAdded.Ref.Equal(newMember) { // it is fine to use an invite twice } else { return err diff --git a/roomdb/sqlite/invites_test.go b/roomdb/sqlite/invites_test.go index 9980efd1..81193ea4 100644 --- a/roomdb/sqlite/invites_test.go +++ b/roomdb/sqlite/invites_test.go @@ -16,9 +16,9 @@ import ( "github.com/stretchr/testify/require" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) func TestInvites(t *testing.T) { @@ -29,7 +29,10 @@ func TestInvites(t *testing.T) { tr := repo.New(testRepo) // fake feed for testing, looks ok at least - newMember := refs.FeedRef{ID: bytes.Repeat([]byte("acab"), 8), Algo: refs.RefAlgoFeedSSB1} + newMember, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("acab"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } db, err := Open(tr, nil) require.NoError(t, err) @@ -55,7 +58,10 @@ func TestInvites(t *testing.T) { r.Error(err, "can't create invite for invalid user") }) - invitingMember := refs.FeedRef{ID: bytes.Repeat([]byte("ohai"), 8), Algo: refs.RefAlgoFeedSSB1} + invitingMember, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("ohai"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } mid, err := db.Members.Add(ctx, invitingMember, roomdb.RoleModerator) require.NoError(t, err, "failed to create test user") diff --git a/roomdb/sqlite/members.go b/roomdb/sqlite/members.go index af335573..e4629ec0 100644 --- a/roomdb/sqlite/members.go +++ b/roomdb/sqlite/members.go @@ -11,11 +11,11 @@ import ( "github.com/friendsofgo/errors" "github.com/mattn/go-sqlite3" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite/models" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite/models" "github.com/volatiletech/sqlboiler/v4/boil" "github.com/volatiletech/sqlboiler/v4/queries/qm" - refs "go.mindeco.de/ssb-refs" ) // compiler assertion to ensure the struct fullfills the interface @@ -59,7 +59,7 @@ func (Members) add(ctx context.Context, tx *sql.Tx, pubKey refs.FeedRef, role ro return -1, err } - if _, err := refs.ParseFeedRef(pubKey.Ref()); err != nil { + if _, err := refs.ParseFeedRef(pubKey.String()); err != nil { return -1, err } @@ -105,7 +105,7 @@ func (m Members) GetByID(ctx context.Context, mid int64) (roomdb.Member, error) // GetByFeed returns the member if it exists func (m Members) GetByFeed(ctx context.Context, h refs.FeedRef) (roomdb.Member, error) { - entry, err := models.Members(qm.Where("pub_key = ?", h.Ref())).One(ctx, m.db) + entry, err := models.Members(qm.Where("pub_key = ?", h.String())).One(ctx, m.db) if err != nil { if errors.Is(err, sql.ErrNoRows) { return roomdb.Member{}, roomdb.ErrNotFound @@ -156,7 +156,7 @@ func (m Members) Count(ctx context.Context) (uint, error) { // RemoveFeed removes the feed from the list. func (m Members) RemoveFeed(ctx context.Context, r refs.FeedRef) error { - entry, err := models.Members(qm.Where("pub_key = ?", r.Ref())).One(ctx, m.db) + entry, err := models.Members(qm.Where("pub_key = ?", r.String())).One(ctx, m.db) if err != nil { if errors.Is(err, sql.ErrNoRows) { return roomdb.ErrNotFound diff --git a/roomdb/sqlite/members_test.go b/roomdb/sqlite/members_test.go index 57bc5c63..59052f77 100644 --- a/roomdb/sqlite/members_test.go +++ b/roomdb/sqlite/members_test.go @@ -11,12 +11,12 @@ import ( "path/filepath" "testing" + refs "github.com/ssbc/go-ssb-refs" "github.com/stretchr/testify/require" - refs "go.mindeco.de/ssb-refs" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite/models" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite/models" ) func TestMembers(t *testing.T) { @@ -32,12 +32,18 @@ func TestMembers(t *testing.T) { require.NoError(t, err) // broken feed (unknown algo) - tf := refs.FeedRef{ID: bytes.Repeat([]byte("fooo"), 8), Algo: "nope"} + tf, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("fooo"), 8), "nope") + if err != nil { + r.Error(err) + } _, err = db.Members.Add(ctx, tf, roomdb.RoleMember) r.Error(err) // looks ok at least - okFeed := refs.FeedRef{ID: bytes.Repeat([]byte("acab"), 8), Algo: refs.RefAlgoFeedSSB1} + okFeed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("acab"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } mid, err := db.Members.Add(ctx, okFeed, roomdb.RoleMember) r.NoError(err) @@ -57,7 +63,7 @@ func TestMembers(t *testing.T) { r.NoError(err) r.Equal(okMember.ID, mid) r.Equal(okMember.Role, roomdb.RoleMember) - r.True(okMember.PubKey.Equal(&okFeed)) + r.True(okMember.PubKey.Equal(okFeed)) _, yes = db.Members.GetByFeed(ctx, tf) r.Error(yes) @@ -91,7 +97,10 @@ func TestMembersUnique(t *testing.T) { db, err := Open(tr, nil) require.NoError(t, err) - feedA := refs.FeedRef{ID: bytes.Repeat([]byte("1312"), 8), Algo: refs.RefAlgoFeedSSB1} + feedA, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("1312"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } _, err = db.Members.Add(ctx, feedA, roomdb.RoleMember) r.NoError(err) @@ -117,7 +126,10 @@ func TestMembersByID(t *testing.T) { db, err := Open(tr, nil) require.NoError(t, err) - feedA := refs.FeedRef{ID: bytes.Repeat([]byte("1312"), 8), Algo: refs.RefAlgoFeedSSB1} + feedA, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("1312"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } _, err = db.Members.Add(ctx, feedA, roomdb.RoleMember) r.NoError(err) @@ -157,12 +169,18 @@ func TestMembersSetRole(t *testing.T) { require.NoError(t, err) // create two users - feedA := refs.FeedRef{ID: bytes.Repeat([]byte("1"), 32), Algo: refs.RefAlgoFeedSSB1} + feedA, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("1"), 32), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } idA, err := db.Members.Add(ctx, feedA, roomdb.RoleAdmin) r.NoError(err) t.Log("member A:", idA) - feedB := refs.FeedRef{ID: bytes.Repeat([]byte("2"), 32), Algo: refs.RefAlgoFeedSSB1} + feedB, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("2"), 32), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } idB, err := db.Members.Add(ctx, feedB, roomdb.RoleModerator) r.NoError(err) t.Log("member B:", idB) @@ -238,7 +256,10 @@ func TestMembersAliases(t *testing.T) { db, err := Open(tr, nil) require.NoError(t, err) - feedA := refs.FeedRef{ID: bytes.Repeat([]byte("1312"), 8), Algo: refs.RefAlgoFeedSSB1} + feedA, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("1312"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + r.Error(err) + } mid, err := db.Members.Add(ctx, feedA, roomdb.RoleMember) r.NoError(err) diff --git a/roomdb/sqlite/models/config.go b/roomdb/sqlite/models/config.go index 09047cc7..da7cf47c 100644 --- a/roomdb/sqlite/models/config.go +++ b/roomdb/sqlite/models/config.go @@ -17,7 +17,7 @@ import ( "time" "github.com/friendsofgo/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" "github.com/volatiletech/sqlboiler/v4/boil" "github.com/volatiletech/sqlboiler/v4/queries" "github.com/volatiletech/sqlboiler/v4/queries/qm" diff --git a/roomdb/sqlite/models/denied_keys.go b/roomdb/sqlite/models/denied_keys.go index 17bac00b..a67c6203 100644 --- a/roomdb/sqlite/models/denied_keys.go +++ b/roomdb/sqlite/models/denied_keys.go @@ -17,7 +17,7 @@ import ( "time" "github.com/friendsofgo/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" "github.com/volatiletech/sqlboiler/v4/boil" "github.com/volatiletech/sqlboiler/v4/queries" "github.com/volatiletech/sqlboiler/v4/queries/qm" diff --git a/roomdb/sqlite/models/members.go b/roomdb/sqlite/models/members.go index 770ec1ea..bc51cbbf 100644 --- a/roomdb/sqlite/models/members.go +++ b/roomdb/sqlite/models/members.go @@ -17,7 +17,7 @@ import ( "time" "github.com/friendsofgo/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" "github.com/volatiletech/sqlboiler/v4/boil" "github.com/volatiletech/sqlboiler/v4/queries" "github.com/volatiletech/sqlboiler/v4/queries/qm" diff --git a/roomdb/sqlite/new.go b/roomdb/sqlite/new.go index 7d3fa93e..ef02d430 100644 --- a/roomdb/sqlite/new.go +++ b/roomdb/sqlite/new.go @@ -28,7 +28,7 @@ import ( migrate "github.com/rubenv/sql-migrate" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/internal/repo" ) type Database struct { diff --git a/roomdb/sqlite/new_test.go b/roomdb/sqlite/new_test.go index d7b3e56f..2cbb2c1f 100644 --- a/roomdb/sqlite/new_test.go +++ b/roomdb/sqlite/new_test.go @@ -12,7 +12,7 @@ import ( _ "github.com/mattn/go-sqlite3" "github.com/stretchr/testify/require" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/internal/repo" ) // verify the database opens and migrates successfully from zero state diff --git a/roomdb/sqlite/notices.go b/roomdb/sqlite/notices.go index 97cb9409..ecea9adb 100644 --- a/roomdb/sqlite/notices.go +++ b/roomdb/sqlite/notices.go @@ -13,8 +13,8 @@ import ( "github.com/volatiletech/sqlboiler/v4/boil" "github.com/volatiletech/sqlboiler/v4/queries/qm" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite/models" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite/models" ) // compiler assertion to ensure the struct fullfills the interface diff --git a/roomdb/sqlite/notices_test.go b/roomdb/sqlite/notices_test.go index 0385e73c..621276fa 100644 --- a/roomdb/sqlite/notices_test.go +++ b/roomdb/sqlite/notices_test.go @@ -12,8 +12,8 @@ import ( "path/filepath" "testing" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/roomdb" "github.com/stretchr/testify/require" ) diff --git a/roomdb/sqlite/roomconfig.go b/roomdb/sqlite/roomconfig.go index c5b71426..6076902c 100644 --- a/roomdb/sqlite/roomconfig.go +++ b/roomdb/sqlite/roomconfig.go @@ -9,8 +9,8 @@ import ( "database/sql" "fmt" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/sqlite/models" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/sqlite/models" "github.com/volatiletech/sqlboiler/v4/boil" ) diff --git a/roomdb/sqlite/roomconfig_test.go b/roomdb/sqlite/roomconfig_test.go index ff409ec8..42c5c757 100644 --- a/roomdb/sqlite/roomconfig_test.go +++ b/roomdb/sqlite/roomconfig_test.go @@ -10,9 +10,9 @@ import ( "path/filepath" "testing" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/internal/repo" "github.com/stretchr/testify/require" ) diff --git a/roomdb/types.go b/roomdb/types.go index 31c349f0..af684cd5 100644 --- a/roomdb/types.go +++ b/roomdb/types.go @@ -11,7 +11,7 @@ import ( "sort" "time" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" ) // ErrNotFound is returned by the admin db if an object couldn't be found. @@ -169,7 +169,7 @@ type ErrAlreadyAdded struct { } func (aa ErrAlreadyAdded) Error() string { - return fmt.Sprintf("roomdb: the item (%s) is already on the list", aa.Ref.Ref()) + return fmt.Sprintf("roomdb: the item (%s) is already on the list", aa.Ref.PubKey()) } // Invite is a combination of an invite id, who created it and when. @@ -205,14 +205,14 @@ func (r *DBFeedRef) Scan(src interface{}) error { return err } - r.FeedRef = *fr + r.FeedRef = fr return nil } // Value returns feed references as strings to the database. // https://pkg.go.dev/database/sql/driver#Valuer func (r DBFeedRef) Value() (driver.Value, error) { - return driver.Value(r.Ref()), nil + return driver.Value(r.String()), nil } // PinnedNoticeName holds a name of a well known part of the page with a fixed location. diff --git a/roomsrv/init_handlers.go b/roomsrv/init_handlers.go index ea930458..d80ce34d 100644 --- a/roomsrv/init_handlers.go +++ b/roomsrv/init_handlers.go @@ -5,15 +5,15 @@ package roomsrv import ( - muxrpc "go.cryptoscope.co/muxrpc/v2" - "go.cryptoscope.co/muxrpc/v2/typemux" + muxrpc "github.com/ssbc/go-muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2/typemux" kitlog "go.mindeco.de/log" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/muxrpc/handlers/alias" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/muxrpc/handlers/gossip" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/muxrpc/handlers/signinwithssb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/muxrpc/handlers/tunnel/server" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/muxrpc/handlers/whoami" + "github.com/ssbc/go-ssb-room/v2/muxrpc/handlers/alias" + "github.com/ssbc/go-ssb-room/v2/muxrpc/handlers/gossip" + "github.com/ssbc/go-ssb-room/v2/muxrpc/handlers/signinwithssb" + "github.com/ssbc/go-ssb-room/v2/muxrpc/handlers/tunnel/server" + "github.com/ssbc/go-ssb-room/v2/muxrpc/handlers/whoami" ) // instantiate and register the muxrpc handlers diff --git a/roomsrv/init_network.go b/roomsrv/init_network.go index e736c492..01412652 100644 --- a/roomsrv/init_network.go +++ b/roomsrv/init_network.go @@ -8,10 +8,10 @@ import ( "fmt" "net" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) // opens the shs listener for TCP connections @@ -37,13 +37,13 @@ func (s *Server) initNetwork() error { // if privacy mode is restricted, deny connections from non-members if pm == roomdb.ModeRestricted { - if _, err := s.Members.GetByFeed(s.rootCtx, *remote); err != nil { + if _, err := s.Members.GetByFeed(s.rootCtx, remote); err != nil { return nil, fmt.Errorf("access restricted to members") } } // if feed is in the deny list, deny their connection - if s.DeniedKeys.HasFeed(s.rootCtx, *remote) { + if s.DeniedKeys.HasFeed(s.rootCtx, remote) { return nil, fmt.Errorf("this key has been banned") } diff --git a/roomsrv/init_unixsock.go b/roomsrv/init_unixsock.go index cfdb62cc..1201d78b 100644 --- a/roomsrv/init_unixsock.go +++ b/roomsrv/init_unixsock.go @@ -10,12 +10,12 @@ import ( "os" "path/filepath" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" kitlog "go.mindeco.de/log" "go.mindeco.de/log/level" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/netwraputil" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/internal/netwraputil" + "github.com/ssbc/go-ssb-room/v2/internal/repo" ) // WithUNIXSocket enables listening for muxrpc connections on a unix socket files ($repo/socket). @@ -34,7 +34,7 @@ func (s *Server) initUnixSock() error { if s.keyPair == nil { return fmt.Errorf("roomsrv/unixsock: keypair is nil. please use unixSocket with LateOption") } - spoofWrapper := netwraputil.SpoofRemoteAddress(s.keyPair.Feed.ID) + spoofWrapper := netwraputil.SpoofRemoteAddress(s.keyPair.Feed.PubKey()) r := repo.New(s.repoPath) sockPath := r.GetPath("socket") diff --git a/roomsrv/manifest.go b/roomsrv/manifest.go index 61760c3f..9a99d9d3 100644 --- a/roomsrv/manifest.go +++ b/roomsrv/manifest.go @@ -9,7 +9,7 @@ import ( "encoding/json" "fmt" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" ) type manifestHandler string diff --git a/roomsrv/options.go b/roomsrv/options.go index 0ce336cf..ae820aa1 100644 --- a/roomsrv/options.go +++ b/roomsrv/options.go @@ -9,10 +9,10 @@ import ( "fmt" "strings" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "go.cryptoscope.co/netwrap" + "github.com/ssbc/go-netwrap" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/repo" kitlog "go.mindeco.de/log" ) diff --git a/roomsrv/server.go b/roomsrv/server.go index e50019c6..248d9b6d 100644 --- a/roomsrv/server.go +++ b/roomsrv/server.go @@ -16,19 +16,19 @@ import ( "path/filepath" "sync" - "go.cryptoscope.co/muxrpc/v2/typemux" - "go.cryptoscope.co/netwrap" + "github.com/ssbc/go-muxrpc/v2/typemux" + "github.com/ssbc/go-netwrap" kitlog "go.mindeco.de/log" "go.mindeco.de/log/level" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/multicloser" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/signinwithssb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomstate" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/multicloser" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/internal/signinwithssb" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomstate" ) type Server struct { diff --git a/roomstate/roomstate.go b/roomstate/roomstate.go index 60346099..c70bbc49 100644 --- a/roomstate/roomstate.go +++ b/roomstate/roomstate.go @@ -9,11 +9,11 @@ import ( "sort" "sync" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" kitlog "go.mindeco.de/log" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/broadcasts" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/broadcasts" ) type Manager struct { @@ -79,7 +79,7 @@ func (m *Manager) ListAsRefs() []refs.FeedRef { if err != nil { panic(fmt.Errorf("invalid feed ref in room state: %d: %s", i, err)) } - rlst[i] = *fr + rlst[i] = fr } return rlst } @@ -88,7 +88,7 @@ func (m *Manager) ListAsRefs() []refs.FeedRef { func (m *Manager) AddEndpoint(who refs.FeedRef, edp muxrpc.Endpoint) { m.roomMu.Lock() // add ref to to the room map - m.room[who.Ref()] = edp + m.room[who.String()] = edp currentMembers := m.room.AsList() m.roomMu.Unlock() // update all the connected tunnel.endpoints calls @@ -101,7 +101,7 @@ func (m *Manager) AddEndpoint(who refs.FeedRef, edp muxrpc.Endpoint) { func (m *Manager) Remove(who refs.FeedRef) { m.roomMu.Lock() // remove ref from lobby - delete(m.room, who.Ref()) + delete(m.room, who.String()) currentMembers := m.room.AsList() m.roomMu.Unlock() // update all the connected tunnel.endpoints calls @@ -117,10 +117,10 @@ func (m *Manager) AlreadyAdded(who refs.FeedRef, edp muxrpc.Endpoint) bool { var currentMembers []string // if the peer didn't call tunnel.announce() - _, has := m.room[who.Ref()] + _, has := m.room[who.String()] if !has { // register them as if they didnt - m.room[who.Ref()] = edp + m.room[who.String()] = edp currentMembers = m.room.AsList() } m.roomMu.Unlock() @@ -138,7 +138,7 @@ func (m *Manager) AlreadyAdded(who refs.FeedRef, edp muxrpc.Endpoint) bool { func (m *Manager) Has(who refs.FeedRef) (muxrpc.Endpoint, bool) { m.roomMu.Lock() // add ref to to the room map - edp, has := m.room[who.Ref()] + edp, has := m.room[who.String()] m.roomMu.Unlock() return edp, has } diff --git a/web/embedded_dev.go b/web/embedded_dev.go index e23b155c..7f4b5dc0 100644 --- a/web/embedded_dev.go +++ b/web/embedded_dev.go @@ -16,7 +16,7 @@ import ( const Production = false // absolute path of where this package is located -var pkgDir = goutils.MustLocatePackage("github.com/ssb-ngi-pointer/go-ssb-room/v2/web") +var pkgDir = goutils.MustLocatePackage("github.com/ssbc/go-ssb-room/v2/web") var Templates = http.Dir(filepath.Join(pkgDir, "templates")) diff --git a/web/errors/errhandler.go b/web/errors/errhandler.go index ef6dc584..36eb0489 100644 --- a/web/errors/errhandler.go +++ b/web/errors/errhandler.go @@ -14,8 +14,8 @@ import ( "go.mindeco.de/log/level" "go.mindeco.de/logging" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/i18n" ) type ErrorHandler struct { @@ -120,7 +120,7 @@ func localizeError(ih *i18n.Localizer, err error) (int, template.HTML) { msg = ih.LocalizeSimple("ErrorNotFound") case errors.As(err, &aa): - msg = ih.LocalizeWithData("ErrorAlreadyAdded", "Feed", aa.Ref.Ref()) + msg = ih.LocalizeWithData("ErrorAlreadyAdded", "Feed", aa.Ref.String()) case errors.As(err, &pnf): code = http.StatusNotFound diff --git a/web/errors/flashes.go b/web/errors/flashes.go index 58a0b55f..203bb890 100644 --- a/web/errors/flashes.go +++ b/web/errors/flashes.go @@ -11,7 +11,7 @@ import ( "net/http" "github.com/gorilla/sessions" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n" + "github.com/ssbc/go-ssb-room/v2/web/i18n" ) type FlashHelper struct { diff --git a/web/handlers/admin/aliases.go b/web/handlers/admin/aliases.go index 86c97717..499a1ad1 100644 --- a/web/handlers/admin/aliases.go +++ b/web/handlers/admin/aliases.go @@ -12,9 +12,9 @@ import ( "github.com/gorilla/csrf" "go.mindeco.de/http/render" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/members" + "github.com/ssbc/go-ssb-room/v2/roomdb" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/members" ) // aliasesHandler implements the managment endpoints for aliases (list and revoke), @@ -90,7 +90,7 @@ func (h aliasesHandler) revoke(rw http.ResponseWriter, req *http.Request) { } // ensure own alias or admin - if !aliasEntry.Feed.Equal(¤tMember.PubKey) && currentMember.Role != roomdb.RoleAdmin { + if !aliasEntry.Feed.Equal(currentMember.PubKey) && currentMember.Role != roomdb.RoleAdmin { err := weberrors.ErrForbidden{Details: fmt.Errorf("not your alias or not an admin")} h.flashes.AddError(rw, req, err) return diff --git a/web/handlers/admin/aliases_test.go b/web/handlers/admin/aliases_test.go index 9de0b449..2a646cc3 100644 --- a/web/handlers/admin/aliases_test.go +++ b/web/handlers/admin/aliases_test.go @@ -11,10 +11,10 @@ import ( "github.com/stretchr/testify/assert" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/webassert" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/webassert" ) func TestAliasesRevokeConfirmation(t *testing.T) { @@ -23,7 +23,7 @@ func TestAliasesRevokeConfirmation(t *testing.T) { testKey, err := refs.ParseFeedRef("@x7iOLUcq3o+sjGeAnipvWeGzfuYgrXl8L4LYlxIhwDc=.ed25519") a.NoError(err) - testEntry := roomdb.Alias{ID: 666, Name: "the-test-name", Feed: *testKey} + testEntry := roomdb.Alias{ID: 666, Name: "the-test-name", Feed: testKey} ts.AliasesDB.GetByIDReturns(testEntry, nil) urlRevokeConfirm := ts.URLTo(router.AdminAliasesRevokeConfirm, "id", 3) @@ -31,7 +31,7 @@ func TestAliasesRevokeConfirmation(t *testing.T) { html, resp := ts.Client.GetHTML(urlRevokeConfirm) a.Equal(http.StatusOK, resp.Code, "wrong HTTP status code") - a.Equal(testKey.Ref(), html.Find("pre#verify").Text(), "has the key for verification") + a.Equal(testKey.String(), html.Find("pre#verify").Text(), "has the key for verification") form := html.Find("form#confirm") diff --git a/web/handlers/admin/dashboard.go b/web/handlers/admin/dashboard.go index 8de0909f..1e4fa282 100644 --- a/web/handlers/admin/dashboard.go +++ b/web/handlers/admin/dashboard.go @@ -10,15 +10,15 @@ import ( "net/http" "time" + refs "github.com/ssbc/go-ssb-refs" "go.mindeco.de/http/render" "go.mindeco.de/log/level" "go.mindeco.de/logging" - refs "go.mindeco.de/ssb-refs" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomstate" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomstate" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" ) type dashboardHandler struct { @@ -34,7 +34,7 @@ func (h dashboardHandler) overview(w http.ResponseWriter, req *http.Request) (in var ( err error ctx = req.Context() - roomRef = h.netInfo.RoomID.Ref() + roomRef = h.netInfo.RoomID.String() onlineRefs []refs.FeedRef refsUpdateCh = make(chan []refs.FeedRef) @@ -116,5 +116,5 @@ func (dm connectedUser) String() string { if len(dm.Aliases) > 0 { return dm.Aliases[0].Name } - return dm.PubKey.Ref() + return dm.PubKey.String() } diff --git a/web/handlers/admin/dashboard_test.go b/web/handlers/admin/dashboard_test.go index 2d4ab4d7..f288a498 100644 --- a/web/handlers/admin/dashboard_test.go +++ b/web/handlers/admin/dashboard_test.go @@ -10,18 +10,21 @@ import ( "net/http" "testing" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/webassert" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/webassert" "github.com/stretchr/testify/assert" - refs "go.mindeco.de/ssb-refs" ) func TestDashboardSimple(t *testing.T) { ts := newSession(t) a := assert.New(t) - testRef := refs.FeedRef{Algo: "ed25519", ID: bytes.Repeat([]byte{0}, 32)} + testRef, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{0}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } ts.RoomState.AddEndpoint(testRef, nil) // 1 online ts.MembersDB.CountReturns(4, nil) // 4 members ts.InvitesDB.CountReturns(3, nil) // 3 invites @@ -47,15 +50,21 @@ func TestDashboardWithVisitors(t *testing.T) { ts := newSession(t) a := assert.New(t) - visitorRef := refs.FeedRef{Algo: "ed25519", ID: bytes.Repeat([]byte{0}, 32)} - memberRef := refs.FeedRef{Algo: "ed25519", ID: bytes.Repeat([]byte{1}, 32)} + visitorRef, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{0}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + memberRef, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{1}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } ts.RoomState.AddEndpoint(visitorRef, nil) ts.RoomState.AddEndpoint(memberRef, nil) ts.MembersDB.CountReturns(1, nil) // return a member for the member but not for the visitor ts.MembersDB.GetByFeedStub = func(ctx context.Context, r refs.FeedRef) (roomdb.Member, error) { - if r.Equal(&memberRef) { + if r.Equal(memberRef) { return roomdb.Member{ID: 23, Role: roomdb.RoleMember, PubKey: r}, nil } return roomdb.Member{}, roomdb.ErrNotFound @@ -73,12 +82,12 @@ func TestDashboardWithVisitors(t *testing.T) { a.Equal(2, memberList.Length()) htmlVisitor := memberList.Eq(0) - a.Equal(visitorRef.Ref(), htmlVisitor.Text()) + a.Equal(visitorRef.String(), htmlVisitor.Text()) gotLink, has := htmlVisitor.Attr("href") a.False(has, "visitor should not have a link to a details page: %v", gotLink) htmlMember := memberList.Eq(1) - a.Equal(memberRef.Ref(), htmlMember.Text()) + a.Equal(memberRef.String(), htmlMember.Text()) gotLink, has = htmlMember.Attr("href") a.True(has, "member should have a link to a details page") wantLink := ts.URLTo(router.AdminMemberDetails, "id", 23) diff --git a/web/handlers/admin/denied_keys.go b/web/handlers/admin/denied_keys.go index 9d89cd63..5fb8aac4 100644 --- a/web/handlers/admin/denied_keys.go +++ b/web/handlers/admin/denied_keys.go @@ -12,10 +12,10 @@ import ( "github.com/gorilla/csrf" "go.mindeco.de/http/render" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/members" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/members" ) type deniedKeysHandler struct { @@ -65,7 +65,7 @@ func (h deniedKeysHandler) add(w http.ResponseWriter, req *http.Request) { // can be empty comment := req.Form.Get("comment") - err = h.db.Add(req.Context(), *newEntryParsed, comment) + err = h.db.Add(req.Context(), newEntryParsed, comment) if err != nil { h.flashes.AddError(w, req, err) } else { diff --git a/web/handlers/admin/denied_keys_test.go b/web/handlers/admin/denied_keys_test.go index 3adf1f31..c7cd994c 100644 --- a/web/handlers/admin/denied_keys_test.go +++ b/web/handlers/admin/denied_keys_test.go @@ -14,10 +14,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/webassert" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/webassert" ) func TestDeniedKeysEmpty(t *testing.T) { @@ -91,7 +91,7 @@ func TestDeniedKeysAddDisabledInterface(t *testing.T) { // require call count to not panic r.Equal(totalAddCallCount, ts.DeniedKeysDB.AddCallCount()) _, addedKey, addedComment := ts.DeniedKeysDB.AddArgsForCall(totalAddCallCount - 1) - a.Equal(newKey, addedKey.Ref()) + a.Equal(newKey, addedKey.String()) a.Equal("some comment", addedComment) } else { r.Equal(totalAddCallCount, ts.DeniedKeysDB.AddCallCount()) @@ -191,7 +191,7 @@ func TestDeniedKeysAdd(t *testing.T) { a.Equal(1, ts.DeniedKeysDB.AddCallCount()) _, addedKey, addedComment := ts.DeniedKeysDB.AddArgsForCall(0) - a.Equal(newKey, addedKey.Ref()) + a.Equal(newKey, addedKey.String()) a.Equal("some comment", addedComment) } @@ -223,10 +223,25 @@ func TestDeniedKeys(t *testing.T) { ts := newSession(t) a := assert.New(t) + fakeFeed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{0}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + + oneThreeOneTwoFeed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("1312"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + + acabFeed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("acab"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + lst := []roomdb.ListEntry{ - {ID: 1, PubKey: refs.FeedRef{ID: bytes.Repeat([]byte{0}, 32), Algo: "fake"}}, - {ID: 2, PubKey: refs.FeedRef{ID: bytes.Repeat([]byte("1312"), 8), Algo: "test"}}, - {ID: 3, PubKey: refs.FeedRef{ID: bytes.Repeat([]byte("acab"), 8), Algo: "true"}}, + {ID: 1, PubKey: fakeFeed}, + {ID: 2, PubKey: oneThreeOneTwoFeed}, + {ID: 3, PubKey: acabFeed}, } ts.DeniedKeysDB.ListReturns(lst, nil) @@ -243,8 +258,12 @@ func TestDeniedKeys(t *testing.T) { a.EqualValues(html.Find("#theList li").Length(), 3) + feed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{1}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } lst = []roomdb.ListEntry{ - {ID: 666, PubKey: refs.FeedRef{ID: bytes.Repeat([]byte{1}, 32), Algo: "one"}}, + {ID: 666, PubKey: feed}, } ts.DeniedKeysDB.ListReturns(lst, nil) @@ -273,7 +292,7 @@ func TestDeniedKeysRemoveConfirmation(t *testing.T) { testKey, err := refs.ParseFeedRef("@x7iOLUcq3o+sjGeAnipvWeGzfuYgrXl8L4LYlxIhwDc=.ed25519") a.NoError(err) - testEntry := roomdb.ListEntry{ID: 666, PubKey: *testKey} + testEntry := roomdb.ListEntry{ID: 666, PubKey: testKey} ts.DeniedKeysDB.GetByIDReturns(testEntry, nil) urlRemoveConfirm := ts.URLTo(router.AdminDeniedKeysRemoveConfirm, "id", 3) @@ -281,7 +300,7 @@ func TestDeniedKeysRemoveConfirmation(t *testing.T) { html, resp := ts.Client.GetHTML(urlRemoveConfirm) a.Equal(http.StatusOK, resp.Code, "wrong HTTP status code") - a.Equal(testKey.Ref(), html.Find("pre#verify").Text(), "has the key for verification") + a.Equal(testKey.String(), html.Find("pre#verify").Text(), "has the key for verification") form := html.Find("form#confirm") @@ -333,8 +352,12 @@ func TestDeniedKeysRemovalRights(t *testing.T) { ts := newSession(t) // check disabled remove button on list page + pubKey, err := generatePubKey() + if err != nil { + t.Error(err) + } ts.DeniedKeysDB.ListReturns([]roomdb.ListEntry{ - {ID: 666, PubKey: generatePubKey(), Comment: "test-entry"}, + {ID: 666, PubKey: pubKey, Comment: "test-entry"}, }, nil) urlRemoveConfirm := ts.URLTo(router.AdminDeniedKeysRemoveConfirm, "id", "666").String() @@ -382,21 +405,36 @@ func TestDeniedKeysRemovalRights(t *testing.T) { } } + memKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + + modKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + + adminKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + // the users who will execute the action memberUser := roomdb.Member{ ID: 7331, Role: roomdb.RoleMember, - PubKey: generatePubKey(), + PubKey: memKey, } modUser := roomdb.Member{ ID: 9001, Role: roomdb.RoleModerator, - PubKey: generatePubKey(), + PubKey: modKey, } adminUser := roomdb.Member{ ID: 1337, Role: roomdb.RoleAdmin, - PubKey: generatePubKey(), + PubKey: adminKey, } /* test various restricted mode with the roles member, mod, admin */ diff --git a/web/handlers/admin/handler.go b/web/handlers/admin/handler.go index 5fe53087..fd64246e 100644 --- a/web/handlers/admin/handler.go +++ b/web/handlers/admin/handler.go @@ -18,13 +18,13 @@ import ( "github.com/vcraescu/go-paginator/v2/view" "go.mindeco.de/http/render" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomstate" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomstate" + "github.com/ssbc/go-ssb-room/v2/web" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/i18n" + "github.com/ssbc/go-ssb-room/v2/web/router" ) // HTMLTemplates define the list of files the template system should load. diff --git a/web/handlers/admin/invites.go b/web/handlers/admin/invites.go index 4ce3c316..9d722f9d 100644 --- a/web/handlers/admin/invites.go +++ b/web/handlers/admin/invites.go @@ -13,11 +13,11 @@ import ( "github.com/gorilla/csrf" "go.mindeco.de/http/render" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/members" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/members" + "github.com/ssbc/go-ssb-room/v2/web/router" ) type invitesHandler struct { diff --git a/web/handlers/admin/invites_test.go b/web/handlers/admin/invites_test.go index 6d7735a1..b1a2f238 100644 --- a/web/handlers/admin/invites_test.go +++ b/web/handlers/admin/invites_test.go @@ -14,9 +14,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/webassert" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/webassert" ) func TestInvitesOverview(t *testing.T) { @@ -218,20 +218,35 @@ func TestInvitesCreateAndRevoke(t *testing.T) { shownLink := doc.Find("#invite-facade-link").Text() a.Equal(wantURL.String(), shownLink) + memKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + + modKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + + adminKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + memberUser := roomdb.Member{ ID: 7331, Role: roomdb.RoleMember, - PubKey: generatePubKey(), + PubKey: memKey, } modUser := roomdb.Member{ ID: 9001, Role: roomdb.RoleModerator, - PubKey: generatePubKey(), + PubKey: modKey, } adminUser := roomdb.Member{ ID: 1337, Role: roomdb.RoleAdmin, - PubKey: generatePubKey(), + PubKey: adminKey, } /* test invite creation under various restricted mode with the roles member, mod, admin */ diff --git a/web/handlers/admin/members.go b/web/handlers/admin/members.go index 7a39e0fd..9966b0ab 100644 --- a/web/handlers/admin/members.go +++ b/web/handlers/admin/members.go @@ -14,13 +14,13 @@ import ( "github.com/gorilla/csrf" "go.mindeco.de/http/render" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/members" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/members" + "github.com/ssbc/go-ssb-room/v2/web/router" ) type membersHandler struct { @@ -59,7 +59,7 @@ func (h membersHandler) add(w http.ResponseWriter, req *http.Request) { return } - _, err = h.db.Add(req.Context(), *newEntryParsed, roomdb.RoleMember) + _, err = h.db.Add(req.Context(), newEntryParsed, roomdb.RoleMember) if err != nil { h.flashes.AddError(w, req, err) return diff --git a/web/handlers/admin/members_test.go b/web/handlers/admin/members_test.go index 3c55e964..6cc37573 100644 --- a/web/handlers/admin/members_test.go +++ b/web/handlers/admin/members_test.go @@ -15,10 +15,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/webassert" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/webassert" ) func TestMembersEmpty(t *testing.T) { @@ -78,7 +78,7 @@ func TestMembersAdd(t *testing.T) { a.Equal(1, ts.MembersDB.AddCallCount()) _, addedPubKey, addedRole := ts.MembersDB.AddArgsForCall(0) - a.Equal(newKey, addedPubKey.Ref()) + a.Equal(newKey, addedPubKey.String()) a.Equal(roomdb.RoleMember, addedRole) /* Verify that the inputs are visible/hidden depending on user roles */ @@ -149,10 +149,25 @@ func TestMembers(t *testing.T) { ts := newSession(t) a := assert.New(t) + fakeFeed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{0}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + + oneThreeOneTwoFeed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("1312"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + + acabFeed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("acab"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + lst := []roomdb.Member{ - {ID: 1, Role: roomdb.RoleMember, PubKey: refs.FeedRef{ID: bytes.Repeat([]byte{0}, 32), Algo: "fake"}}, - {ID: 2, Role: roomdb.RoleModerator, PubKey: refs.FeedRef{ID: bytes.Repeat([]byte("1312"), 8), Algo: "test"}}, - {ID: 3, Role: roomdb.RoleAdmin, PubKey: refs.FeedRef{ID: bytes.Repeat([]byte("acab"), 8), Algo: "true"}}, + {ID: 1, Role: roomdb.RoleMember, PubKey: fakeFeed}, + {ID: 2, Role: roomdb.RoleModerator, PubKey: oneThreeOneTwoFeed}, + {ID: 3, Role: roomdb.RoleAdmin, PubKey: acabFeed}, } ts.MembersDB.ListReturns(lst, nil) @@ -175,8 +190,13 @@ func TestMembers(t *testing.T) { a.EqualValues(elems.Find("span[data-role='admin']").Length(), 1) a.EqualValues(elems.Find("span[data-role='moderator']").Length(), 1) + oneFeed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{1}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + lst = []roomdb.Member{ - {ID: 666, Role: roomdb.RoleAdmin, PubKey: refs.FeedRef{ID: bytes.Repeat([]byte{1}, 32), Algo: "one"}}, + {ID: 666, Role: roomdb.RoleAdmin, PubKey: oneFeed}, } ts.MembersDB.ListReturns(lst, nil) @@ -208,7 +228,11 @@ func TestMemberDetails(t *testing.T) { ts := newSession(t) a := assert.New(t) - feedRef := refs.FeedRef{ID: bytes.Repeat([]byte{0}, 32), Algo: "fake"} + feedRef, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{0}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + aliases := []roomdb.Alias{ {ID: 11, Name: "robert", Feed: feedRef, Signature: bytes.Repeat([]byte{0}, 4)}, {ID: 21, Name: "bob", Feed: feedRef, Signature: bytes.Repeat([]byte{0}, 4)}, @@ -271,7 +295,7 @@ func TestMemberDetails(t *testing.T) { // check for SSB ID ssbID := html.Find("#ssb-id") - a.Equal(feedRef.Ref(), ssbID.Text()) + a.Equal(feedRef.String(), ssbID.Text()) // check for change-role dropdown roleDropdown := html.Find("#change-role") @@ -312,20 +336,35 @@ func TestMemberDetails(t *testing.T) { webassert.HasFlashMessages(t, ts.Client, overviewURL, wantLabel) } + memKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + + modKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + + adminKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + memberUser := roomdb.Member{ ID: 7331, Role: roomdb.RoleMember, - PubKey: generatePubKey(), + PubKey: memKey, } modUser := roomdb.Member{ ID: 9001, Role: roomdb.RoleModerator, - PubKey: generatePubKey(), + PubKey: modKey, } adminUser := roomdb.Member{ ID: 1337, Role: roomdb.RoleAdmin, - PubKey: generatePubKey(), + PubKey: adminKey, } for _, mode := range roomdb.AllPrivacyModes { @@ -370,7 +409,7 @@ func TestMembersRemoveConfirmation(t *testing.T) { testKey, err := refs.ParseFeedRef("@x7iOLUcq3o+sjGeAnipvWeGzfuYgrXl8L4LYlxIhwDc=.ed25519") a.NoError(err) - testEntry := roomdb.Member{ID: 666, PubKey: *testKey} + testEntry := roomdb.Member{ID: 666, PubKey: testKey} ts.MembersDB.GetByIDReturns(testEntry, nil) urlRemoveConfirm := ts.URLTo(router.AdminMembersRemoveConfirm, "id", 3) @@ -378,7 +417,7 @@ func TestMembersRemoveConfirmation(t *testing.T) { html, resp := ts.Client.GetHTML(urlRemoveConfirm) a.Equal(http.StatusOK, resp.Code, "wrong HTTP status code") - a.Equal(testKey.Ref(), html.Find("pre#verify").Text(), "has the key for verification") + a.Equal(testKey.String(), html.Find("pre#verify").Text(), "has the key for verification") form := html.Find("form#confirm") @@ -441,10 +480,15 @@ func TestMembersCreateResetToken(t *testing.T) { // setup mock + testRef, err := refs.NewFeedRefFromBytes(make([]byte, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + ts.MembersDB.GetByIDReturns(roomdb.Member{ ID: 2342, Role: roomdb.RoleMember, - PubKey: refs.FeedRef{ID: make([]byte, 32), Algo: refs.RefAlgoFeedSSB1}, + PubKey: testRef, }, nil) urlViewDetails := ts.URLTo(router.AdminMemberDetails, "id", "2342") @@ -482,7 +526,7 @@ func TestMembersCreateResetToken(t *testing.T) { }) a.Equal(http.StatusOK, resp.Code) - doc, err := goquery.NewDocumentFromReader(resp.Body) + doc, err = goquery.NewDocumentFromReader(resp.Body) require.NoError(t, err) gotResetURL, has := doc.Find("#password-reset-link").Attr("href") diff --git a/web/handlers/admin/notices.go b/web/handlers/admin/notices.go index ce66f9d9..7601910f 100644 --- a/web/handlers/admin/notices.go +++ b/web/handlers/admin/notices.go @@ -11,14 +11,14 @@ import ( "strconv" "strings" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/members" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web" + "github.com/ssbc/go-ssb-room/v2/web/members" + "github.com/ssbc/go-ssb-room/v2/web/router" "github.com/gorilla/csrf" "github.com/russross/blackfriday/v2" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/roomdb" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" "go.mindeco.de/http/render" ) diff --git a/web/handlers/admin/notices_test.go b/web/handlers/admin/notices_test.go index d8af74c5..5f5d3861 100644 --- a/web/handlers/admin/notices_test.go +++ b/web/handlers/admin/notices_test.go @@ -10,9 +10,9 @@ import ( "net/url" "testing" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/webassert" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/webassert" "github.com/stretchr/testify/assert" ) @@ -214,20 +214,35 @@ func TestNoticesRoleRightsEditing(t *testing.T) { a.Equal(totalSaveCallCount, ts.NoticeDB.SaveCallCount(), "call count missmatch") } + memKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + + modKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + + adminKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + memberUser := roomdb.Member{ ID: 7331, Role: roomdb.RoleMember, - PubKey: generatePubKey(), + PubKey: memKey, } modUser := roomdb.Member{ ID: 9001, Role: roomdb.RoleModerator, - PubKey: generatePubKey(), + PubKey: modKey, } adminUser := roomdb.Member{ ID: 1337, Role: roomdb.RoleAdmin, - PubKey: generatePubKey(), + PubKey: adminKey, } /* test invite creation under various restricted mode with the roles member, mod, admin */ @@ -310,20 +325,35 @@ func TestNoticesRoleRightsAddingTranslation(t *testing.T) { a.Equal(totalAddCallCount, ts.PinnedDB.SetCallCount(), "call count missmatch") } + memKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + + modKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + + adminKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + memberUser := roomdb.Member{ ID: 7331, Role: roomdb.RoleMember, - PubKey: generatePubKey(), + PubKey: memKey, } modUser := roomdb.Member{ ID: 9001, Role: roomdb.RoleModerator, - PubKey: generatePubKey(), + PubKey: modKey, } adminUser := roomdb.Member{ ID: 1337, Role: roomdb.RoleAdmin, - PubKey: generatePubKey(), + PubKey: adminKey, } /* test invite creation under various restricted mode with the roles member, mod, admin */ diff --git a/web/handlers/admin/set_language_test.go b/web/handlers/admin/set_language_test.go index d7491a2c..d34aa1a1 100644 --- a/web/handlers/admin/set_language_test.go +++ b/web/handlers/admin/set_language_test.go @@ -9,8 +9,8 @@ import ( "strings" "testing" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" "github.com/stretchr/testify/assert" ) diff --git a/web/handlers/admin/settings.go b/web/handlers/admin/settings.go index 1e57593d..10dee026 100644 --- a/web/handlers/admin/settings.go +++ b/web/handlers/admin/settings.go @@ -12,12 +12,12 @@ import ( "go.mindeco.de/http/render" "github.com/gorilla/csrf" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/members" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/i18n" + "github.com/ssbc/go-ssb-room/v2/web/members" + "github.com/ssbc/go-ssb-room/v2/web/router" ) type settingsHandler struct { diff --git a/web/handlers/admin/settings_test.go b/web/handlers/admin/settings_test.go index 3d6a1e03..d075391d 100644 --- a/web/handlers/admin/settings_test.go +++ b/web/handlers/admin/settings_test.go @@ -12,8 +12,8 @@ import ( "github.com/PuerkitoBio/goquery" "github.com/stretchr/testify/assert" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" ) func TestSettingsOverview(t *testing.T) { diff --git a/web/handlers/admin/setup_test.go b/web/handlers/admin/setup_test.go index f49f3100..fe6580d3 100644 --- a/web/handlers/admin/setup_test.go +++ b/web/handlers/admin/setup_test.go @@ -19,23 +19,23 @@ import ( "github.com/dustin/go-humanize" "github.com/gorilla/sessions" "github.com/pkg/errors" + refs "github.com/ssbc/go-ssb-refs" "go.mindeco.de/http/render" "go.mindeco.de/http/tester" "go.mindeco.de/logging/logtest" - refs "go.mindeco.de/ssb-refs" - - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/randutil" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/mockdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomstate" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" - weberrs "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n/i18ntesting" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/members" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" + + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/randutil" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/mockdb" + "github.com/ssbc/go-ssb-room/v2/roomstate" + "github.com/ssbc/go-ssb-room/v2/web" + weberrs "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/i18n" + "github.com/ssbc/go-ssb-room/v2/web/i18n/i18ntesting" + "github.com/ssbc/go-ssb-room/v2/web/members" + "github.com/ssbc/go-ssb-room/v2/web/router" ) type testSession struct { @@ -62,10 +62,13 @@ type testSession struct { var pubKeyCount byte -func generatePubKey() refs.FeedRef { - pk := refs.FeedRef{Algo: "ed25519", ID: bytes.Repeat([]byte{pubKeyCount}, 32)} +func generatePubKey() (refs.FeedRef, error) { + pk, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{pubKeyCount}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + return refs.FeedRef{}, err + } pubKeyCount++ - return pk + return pk, nil } func newSession(t *testing.T) *testSession { @@ -87,10 +90,14 @@ func newSession(t *testing.T) *testSession { log, _ := logtest.KitLogger("admin", t) ts.RoomState = roomstate.NewManager(log) - ts.netInfo = network.ServerEndpointDetails{ - Domain: randutil.String(10), - RoomID: generatePubKey(), + pubKey, err := generatePubKey() + if err != nil { + t.Error(err) + } + ts.netInfo = network.ServerEndpointDetails{ + Domain: randutil.String(10), + RoomID: pubKey, UseSubdomainForAliases: true, } @@ -108,11 +115,16 @@ func newSession(t *testing.T) *testSession { return testURL } + pubKey, err = generatePubKey() + if err != nil { + t.Error(err) + } + // fake user ts.User = roomdb.Member{ ID: 1234, Role: roomdb.RoleModerator, - PubKey: generatePubKey(), + PubKey: pubKey, } testPath := filepath.Join("testrun", t.Name()) diff --git a/web/handlers/aliases.go b/web/handlers/aliases.go index a25e21c5..7a8929dd 100644 --- a/web/handlers/aliases.go +++ b/web/handlers/aliases.go @@ -16,10 +16,10 @@ import ( "github.com/gorilla/mux" "go.mindeco.de/http/render" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/aliases" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" + "github.com/ssbc/go-ssb-room/v2/internal/aliases" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web" ) // aliasHandler implements the public resolve endpoint for HTML and JSON requests. @@ -110,10 +110,10 @@ func (json *aliasJSONResponder) UpdateRoomInfo(netInfo network.ServerEndpointDet func (json aliasJSONResponder) SendConfirmation(alias roomdb.Alias) { var resp = aliasJSONResponse{ Status: "successful", - RoomID: json.netInfo.RoomID.Ref(), + RoomID: json.netInfo.RoomID.String(), MultiserverAddress: json.netInfo.MultiserverAddress(), Alias: alias.Name, - UserID: alias.Feed.Ref(), + UserID: alias.Feed.String(), Signature: base64.StdEncoding.EncodeToString(alias.Signature), } json.enc.Encode(resp) @@ -152,9 +152,9 @@ func (html aliasHTMLResponder) SendConfirmation(alias roomdb.Alias) { // construct the ssb:experimental?action=consume-alias&... uri for linking into apps queryParams := url.Values{} queryParams.Set("action", "consume-alias") - queryParams.Set("roomId", html.netInfo.RoomID.Ref()) + queryParams.Set("roomId", html.netInfo.RoomID.String()) queryParams.Set("alias", alias.Name) - queryParams.Set("userId", alias.Feed.Ref()) + queryParams.Set("userId", alias.Feed.String()) queryParams.Set("signature", base64.URLEncoding.EncodeToString(alias.Signature)) queryParams.Set("multiserverAddress", html.netInfo.MultiserverAddress()) diff --git a/web/handlers/aliases_test.go b/web/handlers/aliases_test.go index b44ef7fe..2c1ad711 100644 --- a/web/handlers/aliases_test.go +++ b/web/handlers/aliases_test.go @@ -16,11 +16,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/randutil" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/randutil" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" ) func TestAliasResolve(t *testing.T) { @@ -29,13 +29,14 @@ func TestAliasResolve(t *testing.T) { a := assert.New(t) r := require.New(t) + feed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{'F'}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } var testAlias = roomdb.Alias{ - ID: 54321, - Name: "test-name", - Feed: refs.FeedRef{ - ID: bytes.Repeat([]byte{'F'}, 32), - Algo: "test", - }, + ID: 54321, + Name: "test-name", + Feed: feed, Signature: bytes.Repeat([]byte{'S'}, 32), } ts.AliasesDB.ResolveReturns(testAlias, nil) @@ -67,11 +68,11 @@ func TestAliasResolve(t *testing.T) { params := aliasURI.Query() a.Equal("consume-alias", params.Get("action")) a.Equal(testAlias.Name, params.Get("alias")) - a.Equal(testAlias.Feed.Ref(), params.Get("userId")) + a.Equal(testAlias.Feed.String(), params.Get("userId")) sigData, err := base64.StdEncoding.DecodeString(params.Get("signature")) r.NoError(err) a.Equal(testAlias.Signature, sigData) - a.Equal(ts.NetworkInfo.RoomID.Ref(), params.Get("roomId")) + a.Equal(ts.NetworkInfo.RoomID.String(), params.Get("roomId")) a.Equal(ts.NetworkInfo.MultiserverAddress(), params.Get("multiserverAddress")) // now as JSON @@ -92,8 +93,8 @@ func TestAliasResolve(t *testing.T) { sigData2, err := base64.StdEncoding.DecodeString(ar.Signature) r.NoError(err) a.Equal(testAlias.Signature, sigData2) - a.Equal(testAlias.Feed.Ref(), ar.UserID, "wrong user feed on response") - a.Equal(ts.NetworkInfo.RoomID.Ref(), ar.RoomID, "wrong room feed on response") + a.Equal(testAlias.Feed.String(), ar.UserID, "wrong user feed on response") + a.Equal(ts.NetworkInfo.RoomID.String(), ar.RoomID, "wrong room feed on response") a.Equal(ts.NetworkInfo.MultiserverAddress(), ar.MultiserverAddress) /* alias resolving should not work for restricted rooms */ @@ -110,13 +111,14 @@ func TestAliasResolveOnAndroidChrome(t *testing.T) { a := assert.New(t) r := require.New(t) + feed, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{'F'}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } var testAlias = roomdb.Alias{ - ID: 54321, - Name: "test-name", - Feed: refs.FeedRef{ - ID: bytes.Repeat([]byte{'F'}, 32), - Algo: "test", - }, + ID: 54321, + Name: "test-name", + Feed: feed, Signature: bytes.Repeat([]byte{'S'}, 32), } ts.AliasesDB.ResolveReturns(testAlias, nil) @@ -153,11 +155,11 @@ func TestAliasResolveOnAndroidChrome(t *testing.T) { params := aliasURI.Query() a.Equal("consume-alias", params.Get("action")) a.Equal(testAlias.Name, params.Get("alias")) - a.Equal(testAlias.Feed.Ref(), params.Get("userId")) + a.Equal(testAlias.Feed.String(), params.Get("userId")) sigData, err := base64.StdEncoding.DecodeString(params.Get("signature")) r.NoError(err) a.Equal(testAlias.Signature, sigData) - a.Equal(ts.NetworkInfo.RoomID.Ref(), params.Get("roomId")) + a.Equal(ts.NetworkInfo.RoomID.String(), params.Get("roomId")) a.Equal(ts.NetworkInfo.MultiserverAddress(), params.Get("multiserverAddress")) frag := aliasURI.Fragment diff --git a/web/handlers/auth/withssb.go b/web/handlers/auth/withssb.go index f55da84a..5dbe54da 100644 --- a/web/handlers/auth/withssb.go +++ b/web/handlers/auth/withssb.go @@ -21,19 +21,19 @@ import ( "github.com/gorilla/mux" "github.com/gorilla/sessions" "github.com/skip2/go-qrcode" - "go.cryptoscope.co/muxrpc/v2" + "github.com/ssbc/go-muxrpc/v2" "go.mindeco.de/http/render" kitlog "go.mindeco.de/log" "go.mindeco.de/log/level" "go.mindeco.de/logging" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/signinwithssb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/signinwithssb" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/router" ) var HTMLTemplates = []string{ @@ -61,7 +61,7 @@ const ( const sessionLifetime = time.Hour * 24 // WithSSBHandler implements the oauth-like challenge/response dance described in -// https://ssb-ngi-pointer.github.io/ssb-http-auth-spec +// https://ssbc.github.io/ssb-http-auth-spec type WithSSBHandler struct { render *render.Renderer @@ -225,7 +225,7 @@ func (h WithSSBHandler) DecideMethod(w http.ResponseWriter, req *http.Request) { if cidString := queryVals.Get("cid"); cidString != "" { parsedCID, err := refs.ParseFeedRef(cidString) if err == nil { - cid = parsedCID + cid = &parsedCID _, err := h.membersdb.GetByFeed(req.Context(), *cid) if err != nil { @@ -356,10 +356,10 @@ func (h WithSSBHandler) serverInitiated(sc string, userAgent string) (templateDa } // prepare the ssb-uri - // https://ssb-ngi-pointer.github.io/ssb-http-auth-spec/#list-of-new-ssb-uris + // https://ssbc.github.io/ssb-http-auth-spec/#list-of-new-ssb-uris var queryParams = make(url.Values) queryParams.Set("action", "start-http-auth") - queryParams.Set("sid", h.netInfo.RoomID.Ref()) + queryParams.Set("sid", h.netInfo.RoomID.String()) queryParams.Set("sc", sc) queryParams.Set("multiserverAddress", h.netInfo.MultiserverAddress()) diff --git a/web/handlers/auth_test.go b/web/handlers/auth_test.go index 92f531cf..7997f971 100644 --- a/web/handlers/auth_test.go +++ b/web/handlers/auth_test.go @@ -15,18 +15,18 @@ import ( "testing" "time" + "github.com/ssbc/go-muxrpc/v2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.cryptoscope.co/muxrpc/v2" "go.mindeco.de/http/auth" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/maybemod/keys" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/signinwithssb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/webassert" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/maybemod/keys" + "github.com/ssbc/go-ssb-room/v2/internal/signinwithssb" + "github.com/ssbc/go-ssb-room/v2/roomdb" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/webassert" ) func TestRestricted(t *testing.T) { @@ -180,7 +180,10 @@ func TestFallbackAuthWorks(t *testing.T) { {"title", "AdminDashboardTitle"}, }) - testRef := refs.FeedRef{Algo: "ed25519", ID: bytes.Repeat([]byte{0}, 32)} + testRef, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{0}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } ts.RoomState.AddEndpoint(testRef, nil) html, resp = ts.Client.GetHTML(dashboardURL) @@ -191,7 +194,10 @@ func TestFallbackAuthWorks(t *testing.T) { {"title", "AdminDashboardTitle"}, }) - testRef2 := refs.FeedRef{Algo: "ed25519", ID: bytes.Repeat([]byte{1}, 32)} + testRef2, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{1}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } ts.RoomState.AddEndpoint(testRef2, nil) html, resp = ts.Client.GetHTML(dashboardURL) @@ -216,7 +222,7 @@ func TestAuthWithSSBClientInitNotConnected(t *testing.T) { cc := signinwithssb.GenerateChallenge() signInStartURL := ts.URLTo(router.AuthWithSSBLogin, - "cid", client.Feed.Ref(), + "cid", client.Feed.String(), "cc", cc, ) r.NotNil(signInStartURL) @@ -243,7 +249,7 @@ func TestAuthWithSSBClientInitNotAllowed(t *testing.T) { cc := signinwithssb.GenerateChallenge() signInStartURL := ts.URLTo(router.AuthWithSSBLogin, - "cid", client.Feed.Ref(), + "cid", client.Feed.String(), "cc", cc, ) r.NotNil(signInStartURL) @@ -273,7 +279,7 @@ func TestAuthWithSSBClientAlternativeRoute(t *testing.T) { loginURL := ts.URLTo(router.AuthLogin, "ssb-http-auth", 1, - "cid", client.Feed.Ref(), + "cid", client.Feed.String(), "cc", cc, ) r.NotNil(loginURL) @@ -352,7 +358,7 @@ func TestAuthWithSSBClientInitHasClient(t *testing.T) { // prepare the url signInStartURL := ts.URLTo(router.AuthWithSSBLogin, - "cid", client.Feed.Ref(), + "cid", client.Feed.String(), "cc", cc, ) signInStartURL.Host = "localhost" @@ -375,7 +381,7 @@ func TestAuthWithSSBClientInitHasClient(t *testing.T) { // analyse the endpoints call a.Equal(1, ts.MockedEndpoints.GetEndpointForCallCount()) edpRef := ts.MockedEndpoints.GetEndpointForArgsForCall(0) - a.Equal(client.Feed.Ref(), edpRef.Ref()) + a.Equal(client.Feed.String(), edpRef.String()) // check the mock was called a.Equal(1, edp.AsyncCallCount()) @@ -410,7 +416,7 @@ func TestAuthWithSSBServerInitHappyPath(t *testing.T) { // prepare the url signInStartURL := ts.URLTo(router.AuthWithSSBLogin, - "cid", client.Feed.Ref(), + "cid", client.Feed.String(), ) r.NotNil(signInStartURL) @@ -444,7 +450,7 @@ func TestAuthWithSSBServerInitHappyPath(t *testing.T) { qry := parsedURI.Query() a.Equal("start-http-auth", qry.Get("action")) a.Equal(serverChallenge, qry.Get("sc")) - a.Equal(ts.NetworkInfo.RoomID.Ref(), qry.Get("sid")) + a.Equal(ts.NetworkInfo.RoomID.String(), qry.Get("sid")) a.Equal(ts.NetworkInfo.MultiserverAddress(), qry.Get("multiserverAddress")) qrCode, has := html.Find("#start-auth-qrcode").Attr("src") @@ -511,7 +517,7 @@ func TestAuthWithSSBServerInitWrongSolution(t *testing.T) { // prepare the url signInStartURL := ts.URLTo(router.AuthWithSSBLogin, - "cid", client.Feed.Ref(), + "cid", client.Feed.String(), ) r.NotNil(signInStartURL) @@ -572,7 +578,7 @@ func TestAuthWithSSBServerOnAndroidChrome(t *testing.T) { // prepare the url signInStartURL := ts.URLTo(router.AuthWithSSBLogin, - "cid", client.Feed.Ref(), + "cid", client.Feed.String(), ) r.NotNil(signInStartURL) diff --git a/web/handlers/basic_test.go b/web/handlers/basic_test.go index 71b601ec..11431cd8 100644 --- a/web/handlers/basic_test.go +++ b/web/handlers/basic_test.go @@ -11,8 +11,8 @@ import ( "github.com/stretchr/testify/assert" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/webassert" + "github.com/ssbc/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/webassert" ) func TestIndex(t *testing.T) { diff --git a/web/handlers/http.go b/web/handlers/http.go index 1109af03..5f5577b9 100644 --- a/web/handlers/http.go +++ b/web/handlers/http.go @@ -20,18 +20,18 @@ import ( "go.mindeco.de/log/level" "go.mindeco.de/logging" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/signinwithssb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomstate" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" - weberrs "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/handlers/admin" - roomsAuth "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/handlers/auth" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/members" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/internal/signinwithssb" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomstate" + "github.com/ssbc/go-ssb-room/v2/web" + weberrs "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/handlers/admin" + roomsAuth "github.com/ssbc/go-ssb-room/v2/web/handlers/auth" + "github.com/ssbc/go-ssb-room/v2/web/i18n" + "github.com/ssbc/go-ssb-room/v2/web/members" + "github.com/ssbc/go-ssb-room/v2/web/router" ) var HTMLTemplates = []string{ @@ -329,12 +329,13 @@ func New( // notices (the mini-CMS) var nh = noticeHandler{ + render: r, flashes: flashHelper, notices: dbs.Notices, pinned: dbs.PinnedNotices, } - m.Get(router.CompleteNoticeList).Handler(r.HTML("notice/list.tmpl", nh.list)) + m.Get(router.CompleteNoticeList).HandlerFunc(nh.list) m.Get(router.CompleteNoticeShow).Handler(r.HTML("notice/show.tmpl", nh.show)) // public aliases diff --git a/web/handlers/invites.go b/web/handlers/invites.go index 6e437245..edc34ca9 100644 --- a/web/handlers/invites.go +++ b/web/handlers/invites.go @@ -20,12 +20,12 @@ import ( "go.mindeco.de/log/level" "go.mindeco.de/logging" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/router" ) type inviteHandler struct { @@ -237,7 +237,7 @@ func (h inviteHandler) consume(rw http.ResponseWriter, req *http.Request) { resp.SendError(err) return } - newMember = *parsedID + newMember = parsedID default: http.Error(rw, fmt.Sprintf("unhandled Content-Type (%q)", ct), http.StatusBadRequest) return @@ -261,7 +261,7 @@ func (h inviteHandler) consume(rw http.ResponseWriter, req *http.Request) { return } log := logging.FromContext(req.Context()) - level.Info(log).Log("event", "invite consumed", "id", inv.ID, "ref", newMember.ShortRef()) + level.Info(log).Log("event", "invite consumed", "id", inv.ID, "ref", newMember.ShortSigil()) resp.SendSuccess() } diff --git a/web/handlers/invites_test.go b/web/handlers/invites_test.go index 0c02a909..71d03e50 100644 --- a/web/handlers/invites_test.go +++ b/web/handlers/invites_test.go @@ -16,11 +16,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/webassert" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/roomdb" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/webassert" ) func TestInviteShowAcceptForm(t *testing.T) { @@ -38,7 +38,7 @@ func TestInviteShowAcceptForm(t *testing.T) { // request the form doc, resp := ts.Client.GetHTML(acceptURL404) - // 500 until https://github.com/ssb-ngi-pointer/go-ssb-room/issues/66 is fixed + // 500 until https://github.com/ssbc/go-ssb-room/issues/66 is fixed a.Equal(http.StatusInternalServerError, resp.Code) // check database calls @@ -197,13 +197,13 @@ func TestInviteConsumeInviteHTTP(t *testing.T) { a.True(has, "should have value attribute") // create the consume request - testNewMember := refs.FeedRef{ - ID: bytes.Repeat([]byte{1}, 32), - Algo: refs.RefAlgoFeedSSB1, + testNewMember, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{1}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) } consumeVals := url.Values{ "invite": []string{testToken}, - "id": []string{testNewMember.Ref()}, + "id": []string{testNewMember.String()}, csrfName: []string{csrfValue}, } @@ -227,7 +227,7 @@ func TestInviteConsumeInviteHTTP(t *testing.T) { r.EqualValues(1, ts.InvitesDB.ConsumeCallCount()) _, tokenFromArg, newMemberRef := ts.InvitesDB.ConsumeArgsForCall(0) a.Equal(testToken, tokenFromArg) - a.True(newMemberRef.Equal(&testNewMember)) + a.True(newMemberRef.Equal(testNewMember)) } func TestInviteConsumeInviteJSON(t *testing.T) { @@ -266,9 +266,9 @@ func TestInviteConsumeInviteJSON(t *testing.T) { a.Equal(testToken, reply.Invite, "wrong invite token") // create the consume request - testNewMember := refs.FeedRef{ - ID: bytes.Repeat([]byte{1}, 32), - Algo: refs.RefAlgoFeedSSB1, + testNewMember, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{1}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) } var consume inviteConsumePayload consume.Invite = testToken @@ -285,7 +285,7 @@ func TestInviteConsumeInviteJSON(t *testing.T) { r.EqualValues(1, ts.InvitesDB.ConsumeCallCount()) _, tokenFromArg, newMemberRef := ts.InvitesDB.ConsumeArgsForCall(0) a.Equal(testToken, tokenFromArg) - a.True(newMemberRef.Equal(&testNewMember)) + a.True(newMemberRef.Equal(testNewMember)) var jsonConsumeResp inviteConsumeJSONResponse err = json.NewDecoder(resp.Body).Decode(&jsonConsumeResp) @@ -312,9 +312,9 @@ func TestInviteConsumptionDenied(t *testing.T) { ts.DeniedKeysDB.HasFeedReturns(true) // create the consume request - testNewMember := refs.FeedRef{ - ID: bytes.Repeat([]byte{1}, 32), - Algo: refs.RefAlgoFeedSSB1, + testNewMember, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte{1}, 32), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) } var consume inviteConsumePayload @@ -333,7 +333,7 @@ func TestInviteConsumptionDenied(t *testing.T) { // decode the json response var jsonConsumeResp inviteConsumeJSONResponse - err := json.NewDecoder(resp.Body).Decode(&jsonConsumeResp) + err = json.NewDecoder(resp.Body).Decode(&jsonConsumeResp) r.NoError(err) // json response should indicate an error for the denied key diff --git a/web/handlers/members_password.go b/web/handlers/members_password.go index ed261328..09dbb15b 100644 --- a/web/handlers/members_password.go +++ b/web/handlers/members_password.go @@ -13,11 +13,11 @@ import ( hibp "github.com/mattevans/pwned-passwords" "go.mindeco.de/http/render" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" - weberrs "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/members" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web" + weberrs "github.com/ssbc/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/web/members" + "github.com/ssbc/go-ssb-room/v2/web/router" ) type membersHandler struct { @@ -46,10 +46,13 @@ func newMembersHandler(devMode bool, r *render.Renderer, urlTo web.URLMaker, fh } } else { // Init the have-i-been-pwned client for insecure password checks. - const storeExpiry = 1 * time.Hour - hibpClient := hibp.NewClient(storeExpiry) + httpClient := http.DefaultClient + httpClient.Timeout = 1 * time.Hour - mh.leakedLookup = hibpClient.Pwned.Compromised + hibpClient := hibp.NewClient() + hibpClient.SetHTTPClient(httpClient) + + mh.leakedLookup = hibpClient.Compromised } return mh diff --git a/web/handlers/members_password_test.go b/web/handlers/members_password_test.go index af2f798b..c63eff0c 100644 --- a/web/handlers/members_password_test.go +++ b/web/handlers/members_password_test.go @@ -11,9 +11,9 @@ import ( "github.com/stretchr/testify/assert" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/webassert" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/webassert" ) func TestLoginAndChangePassword(t *testing.T) { diff --git a/web/handlers/notices.go b/web/handlers/notices.go index a56d491b..fb53184f 100644 --- a/web/handlers/notices.go +++ b/web/handlers/notices.go @@ -5,17 +5,20 @@ package handlers import ( + "encoding/json" + "go.mindeco.de/http/render" "html/template" "net/http" "strconv" "github.com/russross/blackfriday/v2" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/errors" ) type noticeHandler struct { + render *render.Renderer flashes *errors.FlashHelper pinned roomdb.PinnedNoticesService @@ -27,22 +30,33 @@ type noticesListData struct { Flashes []errors.FlashMessage } -func (h noticeHandler) list(rw http.ResponseWriter, req *http.Request) (interface{}, error) { +func (h noticeHandler) list(rw http.ResponseWriter, req *http.Request) { + var responder listNoticesResponder + switch req.URL.Query().Get("encoding") { + case "json": + responder = newListNoticesJSONResponder(rw) + default: + responder = newListNoticesHTMLResponder(h.render, rw, req) + } lst, err := h.pinned.List(req.Context()) if err != nil { - return nil, err + responder.RenderError(err) + return + } + + flashes, err := h.flashes.GetAll(rw, req) + if err != nil { + responder.RenderError(err) + return } pageData := noticesListData{ AllNotices: lst.Sorted(), - } - pageData.Flashes, err = h.flashes.GetAll(rw, req) - if err != nil { - return nil, err + Flashes: flashes, } - return pageData, nil + responder.Render(pageData) } type noticeShowData struct { @@ -80,3 +94,86 @@ func (h noticeHandler) show(rw http.ResponseWriter, req *http.Request) (interfac return pageData, nil } + +type listNoticesResponder interface { + Render(noticesListData) + RenderError(error) +} + +type listNoticesJSONResponder struct { + rw http.ResponseWriter +} + +func newListNoticesJSONResponder(rw http.ResponseWriter) *listNoticesJSONResponder { + return &listNoticesJSONResponder{rw: rw} +} + +func (l listNoticesJSONResponder) Render(data noticesListData) { + l.rw.Header().Set("Content-Type", "application/json") + var pinnedNotices []listNoticesJSONResponsePinnedNotice + for _, pinnedNotice := range data.AllNotices { + v := listNoticesJSONResponsePinnedNotice{ + Name: string(pinnedNotice.Name), + Notices: nil, + } + for _, notice := range pinnedNotice.Notices { + v.Notices = append(v.Notices, listNoticesJSONResponseNotice{ + ID: notice.ID, + Title: notice.Title, + Content: notice.Content, + Language: notice.Language, + }) + } + pinnedNotices = append(pinnedNotices, v) + } + + var resp = listNoticesJSONResponse{ + PinnedNotices: pinnedNotices, + } + json.NewEncoder(l.rw).Encode(resp) +} + +func (l listNoticesJSONResponder) RenderError(err error) { + l.rw.Header().Set("Content-Type", "application/json") + l.rw.WriteHeader(http.StatusInternalServerError) + json.NewEncoder(l.rw).Encode(struct { + Status string `json:"status"` + Error string `json:"error"` + }{"error", err.Error()}) +} + +type listNoticesHTMLResponder struct { + renderer *render.Renderer + rw http.ResponseWriter + req *http.Request +} + +func newListNoticesHTMLResponder(renderer *render.Renderer, rw http.ResponseWriter, req *http.Request) *listNoticesHTMLResponder { + return &listNoticesHTMLResponder{renderer: renderer, rw: rw, req: req} +} + +func (l listNoticesHTMLResponder) Render(data noticesListData) { + l.renderer.HTML("notice/list.tmpl", func(w http.ResponseWriter, req *http.Request) (interface{}, error) { + return data, nil + })(l.rw, l.req) +} + +func (l listNoticesHTMLResponder) RenderError(err error) { + l.renderer.Error(l.rw, l.req, http.StatusInternalServerError, err) +} + +type listNoticesJSONResponse struct { + PinnedNotices []listNoticesJSONResponsePinnedNotice `json:"pinned_notices"` +} + +type listNoticesJSONResponsePinnedNotice struct { + Name string `json:"name"` + Notices []listNoticesJSONResponseNotice `json:"notices"` +} + +type listNoticesJSONResponseNotice struct { + ID int64 `json:"id"` + Title string `json:"title"` + Content string `json:"content"` + Language string `json:"language"` +} diff --git a/web/handlers/notices_test.go b/web/handlers/notices_test.go index 3521533f..b79713df 100644 --- a/web/handlers/notices_test.go +++ b/web/handlers/notices_test.go @@ -9,9 +9,9 @@ import ( "net/url" "testing" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/webassert" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/webassert" "github.com/stretchr/testify/assert" ) @@ -223,3 +223,74 @@ func TestNoticesCreateOnlyModsAndHigherInRestricted(t *testing.T) { webassert.HasFlashMessages(t, ts.Client, noticeListURL, "ErrorNotAuthorized") } + +func TestNoticesListReturnsJSONWhenCorrectParameterIsSet(t *testing.T) { + ts := setup(t) + a := assert.New(t) + + ts.PinnedDB.ListReturns(roomdb.PinnedNotices{ + "name1": { + { + ID: 1, + Title: "title1", + Content: "content1", + Language: "language1", + }, + { + ID: 2, + Title: "title2", + Content: "content2", + Language: "language2", + }, + }, + "name2": { + { + ID: 3, + Title: "title3", + Content: "content3", + Language: "language3", + }, + }, + }, nil) + + noticeURL := ts.URLTo(router.CompleteNoticeList) + values := noticeURL.Query() + values.Set("encoding", "json") + noticeURL.RawQuery = values.Encode() + + var response listNoticesJSONResponse + res := ts.Client.GetJSON(noticeURL, &response) + a.Equal(http.StatusOK, res.Code, "wrong HTTP status code") + a.Equal(listNoticesJSONResponse{ + PinnedNotices: []listNoticesJSONResponsePinnedNotice{ + { + Name: "name1", + Notices: []listNoticesJSONResponseNotice{ + { + ID: 1, + Title: "title1", + Content: "content1", + Language: "language1", + }, + { + ID: 2, + Title: "title2", + Content: "content2", + Language: "language2", + }, + }, + }, + { + Name: "name2", + Notices: []listNoticesJSONResponseNotice{ + { + ID: 3, + Title: "title3", + Content: "content3", + Language: "language3", + }, + }, + }, + }, + }, response) +} diff --git a/web/handlers/set_language_test.go b/web/handlers/set_language_test.go index 3480a26e..87d6897c 100644 --- a/web/handlers/set_language_test.go +++ b/web/handlers/set_language_test.go @@ -12,8 +12,8 @@ import ( "github.com/stretchr/testify/assert" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" + "github.com/ssbc/go-ssb-room/v2/web/i18n" + "github.com/ssbc/go-ssb-room/v2/web/router" ) func TestLanguageDefaultNoCookie(t *testing.T) { diff --git a/web/handlers/setup_test.go b/web/handlers/setup_test.go index cd323ff8..6563e9cd 100644 --- a/web/handlers/setup_test.go +++ b/web/handlers/setup_test.go @@ -15,17 +15,17 @@ import ( "go.mindeco.de/http/tester" "go.mindeco.de/logging/logtest" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/network/mocked" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/signinwithssb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/mockdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomstate" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n/i18ntesting" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/router" - refs "go.mindeco.de/ssb-refs" + refs "github.com/ssbc/go-ssb-refs" + "github.com/ssbc/go-ssb-room/v2/internal/network" + "github.com/ssbc/go-ssb-room/v2/internal/network/mocked" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/internal/signinwithssb" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb/mockdb" + "github.com/ssbc/go-ssb-room/v2/roomstate" + "github.com/ssbc/go-ssb-room/v2/web" + "github.com/ssbc/go-ssb-room/v2/web/i18n/i18ntesting" + "github.com/ssbc/go-ssb-room/v2/web/router" ) type testSession struct { @@ -86,16 +86,16 @@ func setup(t *testing.T) *testSession { ts.MockedEndpoints = new(mocked.FakeEndpoints) - ts.NetworkInfo = network.ServerEndpointDetails{ - Domain: "localhost", - PortHTTPS: 443, + roomID, err := refs.NewFeedRefFromBytes(bytes.Repeat([]byte("test"), 8), refs.RefAlgoFeedSSB1) + if err != nil { + t.Error(err) + } + ts.NetworkInfo = network.ServerEndpointDetails{ + Domain: "localhost", + PortHTTPS: 443, ListenAddressMUXRPC: ":8008", - - RoomID: refs.FeedRef{ - ID: bytes.Repeat([]byte("test"), 8), - Algo: refs.RefAlgoFeedSSB1, - }, + RoomID: roomID, } log, _ := logtest.KitLogger("complete", t) diff --git a/web/i18n/dev.go b/web/i18n/dev.go index 1c55e6a7..d7cfdb11 100644 --- a/web/i18n/dev.go +++ b/web/i18n/dev.go @@ -17,6 +17,6 @@ import ( var Defaults fs.FS = os.DirFS(defaultsPath) var ( - pkgDir = goutils.MustLocatePackage("github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n") + pkgDir = goutils.MustLocatePackage("github.com/ssbc/go-ssb-room/v2/web/i18n") defaultsPath = filepath.Join(pkgDir, "defaults") ) diff --git a/web/i18n/helper.go b/web/i18n/helper.go index eceae653..ebf16075 100644 --- a/web/i18n/helper.go +++ b/web/i18n/helper.go @@ -20,12 +20,12 @@ import ( "github.com/BurntSushi/toml" "github.com/gorilla/sessions" "github.com/nicksnyder/go-i18n/v2/i18n" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web" + "github.com/ssbc/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/web" "go.mindeco.de/http/render" "golang.org/x/text/language" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/internal/repo" ) const LanguageCookieName = "gossbroom-language" diff --git a/web/i18n/i18ntesting/i18n_helper_test.go b/web/i18n/i18ntesting/i18n_helper_test.go index 5ea6b94b..d0e4a5bd 100644 --- a/web/i18n/i18ntesting/i18n_helper_test.go +++ b/web/i18n/i18ntesting/i18n_helper_test.go @@ -10,9 +10,9 @@ import ( "github.com/stretchr/testify/assert" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb/mockdb" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/roomdb/mockdb" + "github.com/ssbc/go-ssb-room/v2/web/i18n" ) func TestListLanguages(t *testing.T) { diff --git a/web/i18n/i18ntesting/testing.go b/web/i18n/i18ntesting/testing.go index e0f79755..1cc09d1b 100644 --- a/web/i18n/i18ntesting/testing.go +++ b/web/i18n/i18ntesting/testing.go @@ -14,8 +14,8 @@ import ( "github.com/BurntSushi/toml" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/internal/repo" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/i18n" + "github.com/ssbc/go-ssb-room/v2/internal/repo" + "github.com/ssbc/go-ssb-room/v2/web/i18n" ) // justTheKeys auto generates from the defaults a list of Label = "Label" diff --git a/web/members/helper.go b/web/members/helper.go index 8b6e6bbf..a376d427 100644 --- a/web/members/helper.go +++ b/web/members/helper.go @@ -13,9 +13,9 @@ import ( "go.mindeco.de/http/auth" "go.mindeco.de/http/render" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" - weberrors "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/errors" - authWithSSB "github.com/ssb-ngi-pointer/go-ssb-room/v2/web/handlers/auth" + "github.com/ssbc/go-ssb-room/v2/roomdb" + weberrors "github.com/ssbc/go-ssb-room/v2/web/errors" + authWithSSB "github.com/ssbc/go-ssb-room/v2/web/handlers/auth" ) type roomMemberContextKeyType string diff --git a/web/members/testing.go b/web/members/testing.go index 074a4135..e326966d 100644 --- a/web/members/testing.go +++ b/web/members/testing.go @@ -8,7 +8,7 @@ import ( "context" "net/http" - "github.com/ssb-ngi-pointer/go-ssb-room/v2/roomdb" + "github.com/ssbc/go-ssb-room/v2/roomdb" ) // MiddlewareForTests gives us a way to inject _test members_. It should not be used in production. diff --git a/web/templates/admin/aliases-revoke-confirm.tmpl b/web/templates/admin/aliases-revoke-confirm.tmpl index 934c48ae..de6501bb 100644 --- a/web/templates/admin/aliases-revoke-confirm.tmpl +++ b/web/templates/admin/aliases-revoke-confirm.tmpl @@ -16,7 +16,7 @@ SPDX-License-Identifier: CC-BY-4.0
{{.Entry.Feed.Ref}}+ >{{.Entry.Feed.String}} -{{end}} \ No newline at end of file +{{end}} diff --git a/web/templates/admin/denied-keys-remove-confirm.tmpl b/web/templates/admin/denied-keys-remove-confirm.tmpl index 530fbf5d..08111879 100644 --- a/web/templates/admin/denied-keys-remove-confirm.tmpl +++ b/web/templates/admin/denied-keys-remove-confirm.tmpl @@ -16,7 +16,7 @@ SPDX-License-Identifier: CC-BY-4.0
{{.Entry.PubKey.Ref}}+ >{{.Entry.PubKey.String}}
{{.Member.PubKey.Ref}}
+{{.Member.PubKey.String}}
{{ $user := is_logged_in }} - {{ $viewerIsSameAsMember := eq $user.PubKey.Ref .Member.PubKey.Ref }} + {{ $viewerIsSameAsMember := eq $user.PubKey.String .Member.PubKey.String }} {{ if member_is_elevated }}{{.Entry.PubKey.Ref}}+ >{{.Entry.PubKey.String}}