mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-29 19:52:24 -05:00 
			
		
		
		
	[chore] update dependencies, bump to Go 1.19.1 (#826)
* update dependencies, bump Go version to 1.19 * bump test image Go version * update golangci-lint * update gotosocial-drone-build * sign * linting, go fmt * update swagger docs * update swagger docs * whitespace * update contributing.md * fuckin whoopsie doopsie * linterino, linteroni * fix followrequest test not starting processor * fix other api/client tests not starting processor * fix remaining tests where processor not started * bump go-runners version * don't check last-webfingered-at, processor may have updated this * update swagger command * update bun to latest version * fix embed to work the same as before with new bun Signed-off-by: kim <grufwub@gmail.com> Co-authored-by: tsmethurst <tobi.smethurst@protonmail.com>
This commit is contained in:
		
					parent
					
						
							
								00d38855d4
							
						
					
				
			
			
				commit
				
					
						a156188b3e
					
				
			
		
					 1135 changed files with 258905 additions and 137146 deletions
				
			
		
							
								
								
									
										12
									
								
								.drone.yml
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								.drone.yml
									
										
									
									
									
								
							|  | @ -12,7 +12,7 @@ steps: | ||||||
|   # We use golangci-lint for linting. |   # We use golangci-lint for linting. | ||||||
|   # See: https://golangci-lint.run/ |   # See: https://golangci-lint.run/ | ||||||
|   - name: lint |   - name: lint | ||||||
|     image: golangci/golangci-lint:v1.45.2 |     image: golangci/golangci-lint:v1.49.0 | ||||||
|     volumes: |     volumes: | ||||||
|       - name: go-build-cache |       - name: go-build-cache | ||||||
|         path: /root/.cache/go-build |         path: /root/.cache/go-build | ||||||
|  | @ -28,7 +28,7 @@ steps: | ||||||
|           - pull_request |           - pull_request | ||||||
| 
 | 
 | ||||||
|   - name: test |   - name: test | ||||||
|     image: golang:1.18.3-alpine |     image: golang:1.19.1-alpine | ||||||
|     volumes: |     volumes: | ||||||
|       - name: go-build-cache |       - name: go-build-cache | ||||||
|         path: /root/.cache/go-build |         path: /root/.cache/go-build | ||||||
|  | @ -45,7 +45,7 @@ steps: | ||||||
|           - pull_request |           - pull_request | ||||||
| 
 | 
 | ||||||
|   - name: snapshot |   - name: snapshot | ||||||
|     image: superseriousbusiness/gotosocial-drone-build:0.0.5 # https://github.com/superseriousbusiness/gotosocial-drone-build |     image: superseriousbusiness/gotosocial-drone-build:0.0.6 # https://github.com/superseriousbusiness/gotosocial-drone-build | ||||||
|     volumes: |     volumes: | ||||||
|       - name: go-build-cache |       - name: go-build-cache | ||||||
|         path: /root/.cache/go-build |         path: /root/.cache/go-build | ||||||
|  | @ -74,7 +74,7 @@ steps: | ||||||
|           - main |           - main | ||||||
| 
 | 
 | ||||||
|   - name: release |   - name: release | ||||||
|     image: superseriousbusiness/gotosocial-drone-build:0.0.5 # https://github.com/superseriousbusiness/gotosocial-drone-build |     image: superseriousbusiness/gotosocial-drone-build:0.0.6 # https://github.com/superseriousbusiness/gotosocial-drone-build | ||||||
|     volumes: |     volumes: | ||||||
|       - name: go-build-cache |       - name: go-build-cache | ||||||
|         path: /root/.cache/go-build |         path: /root/.cache/go-build | ||||||
|  | @ -133,7 +133,7 @@ clone: | ||||||
| 
 | 
 | ||||||
| steps: | steps: | ||||||
|   - name: mirror |   - name: mirror | ||||||
|     image: superseriousbusiness/gotosocial-drone-build:0.0.5 |     image: superseriousbusiness/gotosocial-drone-build:0.0.6 | ||||||
|     environment: |     environment: | ||||||
|       ORIGIN_REPO: https://github.com/superseriousbusiness/gotosocial |       ORIGIN_REPO: https://github.com/superseriousbusiness/gotosocial | ||||||
|       TARGET_REPO: https://codeberg.org/superseriousbusiness/gotosocial |       TARGET_REPO: https://codeberg.org/superseriousbusiness/gotosocial | ||||||
|  | @ -146,6 +146,6 @@ steps: | ||||||
| 
 | 
 | ||||||
| --- | --- | ||||||
| kind: signature | kind: signature | ||||||
| hmac: d696d93f3d1583b9815488fcd2ff1ade53a5d7512abac63f16bd8cd0079f03a5 | hmac: 59bf8f7a44f7c87e795b8a03a528c4cef0249815370c8bacaa3186f78c82e87c | ||||||
| 
 | 
 | ||||||
| ... | ... | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ before: | ||||||
|   # https://goreleaser.com/customization/hooks/ |   # https://goreleaser.com/customization/hooks/ | ||||||
|   hooks: |   hooks: | ||||||
|   # generate the swagger.yaml file using go-swagger and bundle it into the assets directory |   # generate the swagger.yaml file using go-swagger and bundle it into the assets directory | ||||||
|   - swagger generate spec -o web/assets/swagger.yaml --scan-models |   - swagger generate spec --scan-models --exclude-deps -o web/assets/swagger.yaml | ||||||
|   - sed -i "s/REPLACE_ME/{{ incpatch .Version }}/" web/assets/swagger.yaml |   - sed -i "s/REPLACE_ME/{{ incpatch .Version }}/" web/assets/swagger.yaml | ||||||
|   # bundle web assets |   # bundle web assets | ||||||
|   - yarn install --cwd web/source |   - yarn install --cwd web/source | ||||||
|  |  | ||||||
|  | @ -50,7 +50,7 @@ In lieu of a fuller code of conduct, here are a few ground rules. | ||||||
| 
 | 
 | ||||||
| ## Setting up your development environment | ## Setting up your development environment | ||||||
| 
 | 
 | ||||||
| To get started, you first need to have Go installed. GtS is currently using Go 1.18, so you should take that too. See [here](https://golang.org/doc/install). | To get started, you first need to have Go installed. GtS is currently using Go 1.19, so you should take that too. See [here](https://golang.org/doc/install). | ||||||
| 
 | 
 | ||||||
| Once you've got go installed, clone this repository into your Go path. Normally, this should be `~/go/src/github.com/superseriousbusiness/gotosocial`. | Once you've got go installed, clone this repository into your Go path. Normally, this should be `~/go/src/github.com/superseriousbusiness/gotosocial`. | ||||||
| 
 | 
 | ||||||
|  | @ -244,7 +244,7 @@ You can install go-swagger following the instructions [here](https://goswagger.i | ||||||
| If you change Swagger annotations on any of the API paths, you can generate a new Swagger file at `./docs/api/swagger.yaml` by running: | If you change Swagger annotations on any of the API paths, you can generate a new Swagger file at `./docs/api/swagger.yaml` by running: | ||||||
| 
 | 
 | ||||||
| ```bash | ```bash | ||||||
| swagger generate spec -o docs/api/swagger.yaml --scan-models | swagger generate spec --scan-models --exclude-deps -o docs/api/swagger.yaml | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ## CI/CD configuration | ## CI/CD configuration | ||||||
|  |  | ||||||
|  | @ -22,7 +22,7 @@ import ( | ||||||
| 	"bytes" | 	"bytes" | ||||||
| 	"context" | 	"context" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io/ioutil" | 	"io" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"os" | 	"os" | ||||||
| 	"os/signal" | 	"os/signal" | ||||||
|  | @ -86,7 +86,7 @@ var Start action.GTSAction = func(ctx context.Context) error { | ||||||
| 	// build backend handlers | 	// build backend handlers | ||||||
| 	oauthServer := testrig.NewTestOauthServer(dbService) | 	oauthServer := testrig.NewTestOauthServer(dbService) | ||||||
| 	transportController := testrig.NewTestTransportController(testrig.NewMockHTTPClient(func(req *http.Request) (*http.Response, error) { | 	transportController := testrig.NewTestTransportController(testrig.NewMockHTTPClient(func(req *http.Request) (*http.Response, error) { | ||||||
| 		r := ioutil.NopCloser(bytes.NewReader([]byte{})) | 		r := io.NopCloser(bytes.NewReader([]byte{})) | ||||||
| 		return &http.Response{ | 		return &http.Response{ | ||||||
| 			StatusCode: 200, | 			StatusCode: 200, | ||||||
| 			Body:       r, | 			Body:       r, | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -16,8 +16,6 @@ | ||||||
|    along with this program.  If not, see <http://www.gnu.org/licenses/>. |    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| // Package docs GoToSocial |  | ||||||
| // |  | ||||||
| // GoToSocial Swagger documentation. | // GoToSocial Swagger documentation. | ||||||
| // | // | ||||||
| //	Schemes: https, http | //	Schemes: https, http | ||||||
|  | @ -26,6 +24,7 @@ | ||||||
| //	Host: example.org | //	Host: example.org | ||||||
| //	License: AGPL3 https://www.gnu.org/licenses/agpl-3.0.en.html | //	License: AGPL3 https://www.gnu.org/licenses/agpl-3.0.en.html | ||||||
| //	Contact: GoToSocial Authors <admin@gotosocial.org> | //	Contact: GoToSocial Authors <admin@gotosocial.org> | ||||||
|  | // | ||||||
| //	SecurityDefinitions: | //	SecurityDefinitions: | ||||||
| //	  OAuth2 Bearer: | //	  OAuth2 Bearer: | ||||||
| //	    type: oauth2 | //	    type: oauth2 | ||||||
|  | @ -37,6 +36,8 @@ | ||||||
| //	      read:accounts: grants read access to accounts | //	      read:accounts: grants read access to accounts | ||||||
| //	      read:blocks: grant read access to blocks | //	      read:blocks: grant read access to blocks | ||||||
| //	      read:custom_emojis: grant read access to custom_emojis | //	      read:custom_emojis: grant read access to custom_emojis | ||||||
|  | //	      read:favourites: grant read access to favourites | ||||||
|  | //	      read:follows: grant read access to follows | ||||||
| //	      read:media: grant read access to media | //	      read:media: grant read access to media | ||||||
| //	      read:search: grant read access to searches | //	      read:search: grant read access to searches | ||||||
| //	      read:statuses: grants read access to statuses | //	      read:statuses: grants read access to statuses | ||||||
|  |  | ||||||
							
								
								
									
										111
									
								
								go.mod
									
										
									
									
									
								
							
							
						
						
									
										111
									
								
								go.mod
									
										
									
									
									
								
							|  | @ -1,60 +1,60 @@ | ||||||
| module github.com/superseriousbusiness/gotosocial | module github.com/superseriousbusiness/gotosocial | ||||||
| 
 | 
 | ||||||
| go 1.18 | go 1.19 | ||||||
| 
 | 
 | ||||||
| require ( | require ( | ||||||
| 	codeberg.org/gruf/go-atomics v1.1.0 | 	codeberg.org/gruf/go-atomics v1.1.0 | ||||||
| 	codeberg.org/gruf/go-bytesize v0.2.1 | 	codeberg.org/gruf/go-bytesize v0.2.1 | ||||||
| 	codeberg.org/gruf/go-byteutil v1.0.2 | 	codeberg.org/gruf/go-byteutil v1.0.2 | ||||||
| 	codeberg.org/gruf/go-cache/v2 v2.1.2 | 	codeberg.org/gruf/go-cache/v2 v2.1.4 | ||||||
| 	codeberg.org/gruf/go-debug v1.2.0 | 	codeberg.org/gruf/go-debug v1.2.0 | ||||||
| 	codeberg.org/gruf/go-errors/v2 v2.0.2 | 	codeberg.org/gruf/go-errors/v2 v2.0.2 | ||||||
| 	codeberg.org/gruf/go-kv v1.3.2 | 	codeberg.org/gruf/go-kv v1.5.2 | ||||||
| 	codeberg.org/gruf/go-logger/v2 v2.0.6 | 	codeberg.org/gruf/go-logger/v2 v2.2.1 | ||||||
| 	codeberg.org/gruf/go-mutexes v1.1.2 | 	codeberg.org/gruf/go-mutexes v1.1.2 | ||||||
| 	codeberg.org/gruf/go-runners v1.2.2 | 	codeberg.org/gruf/go-runners v1.3.1 | ||||||
| 	codeberg.org/gruf/go-store v1.3.8 | 	codeberg.org/gruf/go-store v1.3.8 | ||||||
| 	github.com/buckket/go-blurhash v1.1.0 | 	github.com/buckket/go-blurhash v1.1.0 | ||||||
| 	github.com/coreos/go-oidc/v3 v3.1.0 | 	github.com/coreos/go-oidc/v3 v3.4.0 | ||||||
| 	github.com/disintegration/imaging v1.6.2 | 	github.com/disintegration/imaging v1.6.2 | ||||||
| 	github.com/gin-contrib/cors v1.3.1 | 	github.com/gin-contrib/cors v1.4.0 | ||||||
| 	github.com/gin-contrib/gzip v0.0.5 | 	github.com/gin-contrib/gzip v0.0.6 | ||||||
| 	github.com/gin-contrib/sessions v0.0.5 | 	github.com/gin-contrib/sessions v0.0.5 | ||||||
| 	github.com/gin-gonic/gin v1.7.7 | 	github.com/gin-gonic/gin v1.8.1 | ||||||
| 	github.com/go-fed/httpsig v1.1.0 | 	github.com/go-fed/httpsig v1.1.0 | ||||||
| 	github.com/go-playground/validator/v10 v10.11.0 | 	github.com/go-playground/validator/v10 v10.11.0 | ||||||
| 	github.com/google/uuid v1.3.0 | 	github.com/google/uuid v1.3.0 | ||||||
| 	github.com/gorilla/websocket v1.5.0 | 	github.com/gorilla/websocket v1.5.0 | ||||||
| 	github.com/h2non/filetype v1.1.3 | 	github.com/h2non/filetype v1.1.3 | ||||||
| 	github.com/jackc/pgconn v1.11.0 | 	github.com/jackc/pgconn v1.13.0 | ||||||
| 	github.com/jackc/pgx/v4 v4.15.0 | 	github.com/jackc/pgx/v4 v4.17.2 | ||||||
| 	github.com/microcosm-cc/bluemonday v1.0.18 | 	github.com/microcosm-cc/bluemonday v1.0.20 | ||||||
| 	github.com/miekg/dns v1.1.49 | 	github.com/miekg/dns v1.1.50 | ||||||
| 	github.com/minio/minio-go/v7 v7.0.29 | 	github.com/minio/minio-go/v7 v7.0.36 | ||||||
| 	github.com/mitchellh/mapstructure v1.5.0 | 	github.com/mitchellh/mapstructure v1.5.0 | ||||||
| 	github.com/oklog/ulid v1.3.1 | 	github.com/oklog/ulid v1.3.1 | ||||||
| 	github.com/robfig/cron/v3 v3.0.1 | 	github.com/robfig/cron/v3 v3.0.1 | ||||||
| 	github.com/russross/blackfriday/v2 v2.1.0 | 	github.com/russross/blackfriday/v2 v2.1.0 | ||||||
| 	github.com/spf13/cobra v1.4.0 | 	github.com/spf13/cobra v1.5.0 | ||||||
| 	github.com/spf13/viper v1.11.0 | 	github.com/spf13/viper v1.13.0 | ||||||
| 	github.com/stretchr/testify v1.8.0 | 	github.com/stretchr/testify v1.8.0 | ||||||
| 	github.com/superseriousbusiness/activity v1.2.1-gts | 	github.com/superseriousbusiness/activity v1.2.1-gts | ||||||
| 	github.com/superseriousbusiness/exif-terminator v0.4.0 | 	github.com/superseriousbusiness/exif-terminator v0.4.0 | ||||||
| 	github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB | 	github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB | ||||||
| 	github.com/tdewolff/minify/v2 v2.12.0 | 	github.com/tdewolff/minify/v2 v2.12.1 | ||||||
| 	github.com/ulule/limiter/v3 v3.10.0 | 	github.com/ulule/limiter/v3 v3.10.0 | ||||||
| 	github.com/uptrace/bun v1.1.7 | 	github.com/uptrace/bun v1.1.8 | ||||||
| 	github.com/uptrace/bun/dialect/pgdialect v1.1.7 | 	github.com/uptrace/bun/dialect/pgdialect v1.1.8 | ||||||
| 	github.com/uptrace/bun/dialect/sqlitedialect v1.1.7 | 	github.com/uptrace/bun/dialect/sqlitedialect v1.1.8 | ||||||
| 	github.com/wagslane/go-password-validator v0.3.0 | 	github.com/wagslane/go-password-validator v0.3.0 | ||||||
| 	golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f | 	golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 | ||||||
| 	golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d | 	golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d | ||||||
| 	golang.org/x/net v0.0.0-20220524220425-1d687d428aca | 	golang.org/x/net v0.0.0-20220909164309-bea034e7d591 | ||||||
| 	golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 | 	golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 | ||||||
| 	golang.org/x/text v0.3.7 | 	golang.org/x/text v0.3.7 | ||||||
| 	gopkg.in/mcuadros/go-syslog.v2 v2.3.0 | 	gopkg.in/mcuadros/go-syslog.v2 v2.3.0 | ||||||
| 	modernc.org/sqlite v1.18.1 | 	modernc.org/sqlite v1.18.2 | ||||||
| 	mvdan.cc/xurls/v2 v2.3.0 | 	mvdan.cc/xurls/v2 v2.4.0 | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| require ( | require ( | ||||||
|  | @ -64,7 +64,7 @@ require ( | ||||||
| 	codeberg.org/gruf/go-fastpath v1.0.3 // indirect | 	codeberg.org/gruf/go-fastpath v1.0.3 // indirect | ||||||
| 	codeberg.org/gruf/go-hashenc v1.0.2 // indirect | 	codeberg.org/gruf/go-hashenc v1.0.2 // indirect | ||||||
| 	codeberg.org/gruf/go-pools v1.1.0 // indirect | 	codeberg.org/gruf/go-pools v1.1.0 // indirect | ||||||
| 	codeberg.org/gruf/go-sched v1.0.4 // indirect | 	codeberg.org/gruf/go-sched v1.1.1 // indirect | ||||||
| 	github.com/aymerick/douceur v0.2.0 // indirect | 	github.com/aymerick/douceur v0.2.0 // indirect | ||||||
| 	github.com/davecgh/go-spew v1.1.1 // indirect | 	github.com/davecgh/go-spew v1.1.1 // indirect | ||||||
| 	github.com/dsoprea/go-exif/v3 v3.0.0-20210625224831-a6301f85c82b // indirect | 	github.com/dsoprea/go-exif/v3 v3.0.0-20210625224831-a6301f85c82b // indirect | ||||||
|  | @ -80,6 +80,7 @@ require ( | ||||||
| 	github.com/go-playground/locales v0.14.0 // indirect | 	github.com/go-playground/locales v0.14.0 // indirect | ||||||
| 	github.com/go-playground/universal-translator v0.18.0 // indirect | 	github.com/go-playground/universal-translator v0.18.0 // indirect | ||||||
| 	github.com/go-xmlfmt/xmlfmt v0.0.0-20211206191508-7fd73a941850 // indirect | 	github.com/go-xmlfmt/xmlfmt v0.0.0-20211206191508-7fd73a941850 // indirect | ||||||
|  | 	github.com/goccy/go-json v0.9.11 // indirect | ||||||
| 	github.com/golang-jwt/jwt v3.2.2+incompatible // indirect | 	github.com/golang-jwt/jwt v3.2.2+incompatible // indirect | ||||||
| 	github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 // indirect | 	github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 // indirect | ||||||
| 	github.com/golang/protobuf v1.5.2 // indirect | 	github.com/golang/protobuf v1.5.2 // indirect | ||||||
|  | @ -89,63 +90,61 @@ require ( | ||||||
| 	github.com/gorilla/securecookie v1.1.1 // indirect | 	github.com/gorilla/securecookie v1.1.1 // indirect | ||||||
| 	github.com/gorilla/sessions v1.2.1 // indirect | 	github.com/gorilla/sessions v1.2.1 // indirect | ||||||
| 	github.com/hashicorp/hcl v1.0.0 // indirect | 	github.com/hashicorp/hcl v1.0.0 // indirect | ||||||
| 	github.com/inconshreveable/mousetrap v1.0.0 // indirect | 	github.com/inconshreveable/mousetrap v1.0.1 // indirect | ||||||
| 	github.com/jackc/chunkreader/v2 v2.0.1 // indirect | 	github.com/jackc/chunkreader/v2 v2.0.1 // indirect | ||||||
| 	github.com/jackc/pgio v1.0.0 // indirect | 	github.com/jackc/pgio v1.0.0 // indirect | ||||||
| 	github.com/jackc/pgpassfile v1.0.0 // indirect | 	github.com/jackc/pgpassfile v1.0.0 // indirect | ||||||
| 	github.com/jackc/pgproto3/v2 v2.2.0 // indirect | 	github.com/jackc/pgproto3/v2 v2.3.1 // indirect | ||||||
| 	github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect | 	github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect | ||||||
| 	github.com/jackc/pgtype v1.10.0 // indirect | 	github.com/jackc/pgtype v1.12.0 // indirect | ||||||
| 	github.com/jinzhu/inflection v1.0.0 // indirect | 	github.com/jinzhu/inflection v1.0.0 // indirect | ||||||
| 	github.com/json-iterator/go v1.1.12 // indirect | 	github.com/json-iterator/go v1.1.12 // indirect | ||||||
| 	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect | 	github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect | ||||||
| 	github.com/klauspost/compress v1.15.0 // indirect | 	github.com/klauspost/compress v1.15.9 // indirect | ||||||
| 	github.com/klauspost/cpuid v1.3.1 // indirect | 	github.com/klauspost/cpuid/v2 v2.1.1 // indirect | ||||||
| 	github.com/leodido/go-urn v1.2.1 // indirect | 	github.com/leodido/go-urn v1.2.1 // indirect | ||||||
| 	github.com/magiconair/properties v1.8.6 // indirect | 	github.com/magiconair/properties v1.8.6 // indirect | ||||||
| 	github.com/mattn/go-isatty v0.0.14 // indirect | 	github.com/mattn/go-isatty v0.0.16 // indirect | ||||||
| 	github.com/minio/md5-simd v1.1.0 // indirect | 	github.com/minio/md5-simd v1.1.2 // indirect | ||||||
| 	github.com/minio/sha256-simd v0.1.1 // indirect | 	github.com/minio/sha256-simd v1.0.0 // indirect | ||||||
| 	github.com/mitchellh/go-homedir v1.1.0 // indirect |  | ||||||
| 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||||||
| 	github.com/modern-go/reflect2 v1.0.2 // indirect | 	github.com/modern-go/reflect2 v1.0.2 // indirect | ||||||
| 	github.com/pelletier/go-toml v1.9.5 // indirect | 	github.com/pelletier/go-toml v1.9.5 // indirect | ||||||
| 	github.com/pelletier/go-toml/v2 v2.0.0 // indirect | 	github.com/pelletier/go-toml/v2 v2.0.5 // indirect | ||||||
| 	github.com/pkg/errors v0.9.1 // indirect | 	github.com/pkg/errors v0.9.1 // indirect | ||||||
| 	github.com/pmezard/go-difflib v1.0.0 // indirect | 	github.com/pmezard/go-difflib v1.0.0 // indirect | ||||||
| 	github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b // indirect | 	github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b // indirect | ||||||
| 	github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect | 	github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect | ||||||
| 	github.com/rs/xid v1.2.1 // indirect | 	github.com/rs/xid v1.4.0 // indirect | ||||||
| 	github.com/sirupsen/logrus v1.8.1 // indirect | 	github.com/sirupsen/logrus v1.9.0 // indirect | ||||||
| 	github.com/spf13/afero v1.8.2 // indirect | 	github.com/spf13/afero v1.9.2 // indirect | ||||||
| 	github.com/spf13/cast v1.4.1 // indirect | 	github.com/spf13/cast v1.5.0 // indirect | ||||||
| 	github.com/spf13/jwalterweatherman v1.1.0 // indirect | 	github.com/spf13/jwalterweatherman v1.1.0 // indirect | ||||||
| 	github.com/spf13/pflag v1.0.5 // indirect | 	github.com/spf13/pflag v1.0.5 // indirect | ||||||
| 	github.com/subosito/gotenv v1.2.0 // indirect | 	github.com/subosito/gotenv v1.4.1 // indirect | ||||||
| 	github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe // indirect | 	github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe // indirect | ||||||
| 	github.com/tdewolff/parse/v2 v2.6.1 // indirect | 	github.com/tdewolff/parse/v2 v2.6.3 // indirect | ||||||
| 	github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect | 	github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect | ||||||
| 	github.com/ugorji/go/codec v1.2.7 // indirect | 	github.com/ugorji/go/codec v1.2.7 // indirect | ||||||
| 	github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect | 	github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect | ||||||
| 	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect | 	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect | ||||||
| 	golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 // indirect | 	golang.org/x/image v0.0.0-20220902085622-e7cb96979f69 // indirect | ||||||
| 	golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect | 	golang.org/x/mod v0.6.0-dev.0.20220907135952-02c991387e35 // indirect | ||||||
| 	golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect | 	golang.org/x/sys v0.0.0-20220913120320-3275c407cedc // indirect | ||||||
| 	golang.org/x/tools v0.1.10 // indirect | 	golang.org/x/tools v0.1.12 // indirect | ||||||
| 	golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect |  | ||||||
| 	google.golang.org/appengine v1.6.7 // indirect | 	google.golang.org/appengine v1.6.7 // indirect | ||||||
| 	google.golang.org/protobuf v1.28.0 // indirect | 	google.golang.org/protobuf v1.28.1 // indirect | ||||||
| 	gopkg.in/ini.v1 v1.66.4 // indirect | 	gopkg.in/ini.v1 v1.67.0 // indirect | ||||||
| 	gopkg.in/square/go-jose.v2 v2.6.0 // indirect | 	gopkg.in/square/go-jose.v2 v2.6.0 // indirect | ||||||
| 	gopkg.in/yaml.v2 v2.4.0 // indirect | 	gopkg.in/yaml.v2 v2.4.0 // indirect | ||||||
| 	gopkg.in/yaml.v3 v3.0.1 // indirect | 	gopkg.in/yaml.v3 v3.0.1 // indirect | ||||||
| 	lukechampine.com/uint128 v1.2.0 // indirect | 	lukechampine.com/uint128 v1.2.0 // indirect | ||||||
| 	modernc.org/cc/v3 v3.36.0 // indirect | 	modernc.org/cc/v3 v3.38.1 // indirect | ||||||
| 	modernc.org/ccgo/v3 v3.16.8 // indirect | 	modernc.org/ccgo/v3 v3.16.9 // indirect | ||||||
| 	modernc.org/libc v1.16.19 // indirect | 	modernc.org/libc v1.18.2 // indirect | ||||||
| 	modernc.org/mathutil v1.4.1 // indirect | 	modernc.org/mathutil v1.5.0 // indirect | ||||||
| 	modernc.org/memory v1.1.1 // indirect | 	modernc.org/memory v1.3.0 // indirect | ||||||
| 	modernc.org/opt v0.1.3 // indirect | 	modernc.org/opt v0.1.3 // indirect | ||||||
| 	modernc.org/strutil v1.1.1 // indirect | 	modernc.org/strutil v1.1.3 // indirect | ||||||
| 	modernc.org/token v1.0.0 // indirect | 	modernc.org/token v1.0.1 // indirect | ||||||
| ) | ) | ||||||
|  |  | ||||||
							
								
								
									
										460
									
								
								go.sum
									
										
									
									
									
								
							
							
						
						
									
										460
									
								
								go.sum
									
										
									
									
									
								
							|  | @ -17,14 +17,34 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb | ||||||
| cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= | 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.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= | ||||||
| cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= | cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= | ||||||
|  | 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 v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= | ||||||
|  | cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= | ||||||
|  | cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= | ||||||
|  | cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= | ||||||
|  | cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= | ||||||
| cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= | 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.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.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= | ||||||
| cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= | 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.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/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= | ||||||
|  | cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= | ||||||
|  | cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= | ||||||
|  | cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= | ||||||
|  | cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= | ||||||
|  | cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= | ||||||
|  | cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= | ||||||
| cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= | 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/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= | ||||||
|  | cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= | ||||||
| cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= | 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.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.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= | ||||||
|  | @ -35,12 +55,12 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl | ||||||
| cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= | 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= | cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= | ||||||
| cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= | cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= | ||||||
|  | cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= | ||||||
| codeberg.org/gruf/go-atomics v1.1.0 h1:ni9QXYoRUFYQMXE3akWaUb1wMcPBDc05Md6Rgml7W58= | codeberg.org/gruf/go-atomics v1.1.0 h1:ni9QXYoRUFYQMXE3akWaUb1wMcPBDc05Md6Rgml7W58= | ||||||
| codeberg.org/gruf/go-atomics v1.1.0/go.mod h1:a/4/y/LgvjxjQVnpoy1VVkOSzLS1W9i1g4SJ0nflAa4= | codeberg.org/gruf/go-atomics v1.1.0/go.mod h1:a/4/y/LgvjxjQVnpoy1VVkOSzLS1W9i1g4SJ0nflAa4= | ||||||
| codeberg.org/gruf/go-bitutil v1.0.0/go.mod h1:sb8IjlDnjVTz8zPK/8lmHesKxY0Yb3iqHWjUM/SkphA= | codeberg.org/gruf/go-bitutil v1.0.0/go.mod h1:sb8IjlDnjVTz8zPK/8lmHesKxY0Yb3iqHWjUM/SkphA= | ||||||
| codeberg.org/gruf/go-bitutil v1.0.1 h1:l8z9nOvCpHhicU2LZyJ6jLK03UNzCF6bxVCwu+VEenQ= | codeberg.org/gruf/go-bitutil v1.0.1 h1:l8z9nOvCpHhicU2LZyJ6jLK03UNzCF6bxVCwu+VEenQ= | ||||||
| codeberg.org/gruf/go-bitutil v1.0.1/go.mod h1:3ezHnADoiRJs9jgn65AEZ3HY7dsabAYLmmnIvseCGJI= | codeberg.org/gruf/go-bitutil v1.0.1/go.mod h1:3ezHnADoiRJs9jgn65AEZ3HY7dsabAYLmmnIvseCGJI= | ||||||
| codeberg.org/gruf/go-buf v1.0.0/go.mod h1:9fuVcFZsqnuXyeNFr9DtrxR4c6MIRoDE37YV7B2egD0= |  | ||||||
| codeberg.org/gruf/go-bytes v1.0.0/go.mod h1:1v/ibfaosfXSZtRdW2rWaVrDXMc9E3bsi/M9Ekx39cg= | codeberg.org/gruf/go-bytes v1.0.0/go.mod h1:1v/ibfaosfXSZtRdW2rWaVrDXMc9E3bsi/M9Ekx39cg= | ||||||
| codeberg.org/gruf/go-bytes v1.0.2 h1:malqE42Ni+h1nnYWBUAJaDDtEzF4aeN4uPN8DfMNNvo= | codeberg.org/gruf/go-bytes v1.0.2 h1:malqE42Ni+h1nnYWBUAJaDDtEzF4aeN4uPN8DfMNNvo= | ||||||
| codeberg.org/gruf/go-bytes v1.0.2/go.mod h1:1v/ibfaosfXSZtRdW2rWaVrDXMc9E3bsi/M9Ekx39cg= | codeberg.org/gruf/go-bytes v1.0.2/go.mod h1:1v/ibfaosfXSZtRdW2rWaVrDXMc9E3bsi/M9Ekx39cg= | ||||||
|  | @ -50,9 +70,8 @@ codeberg.org/gruf/go-byteutil v1.0.0/go.mod h1:cWM3tgMCroSzqoBXUXMhvxTxYJp+TbCr6 | ||||||
| codeberg.org/gruf/go-byteutil v1.0.2 h1:OesVyK5VKWeWdeDR00zRJ+Oy8hjXx1pBhn7WVvcZWVE= | codeberg.org/gruf/go-byteutil v1.0.2 h1:OesVyK5VKWeWdeDR00zRJ+Oy8hjXx1pBhn7WVvcZWVE= | ||||||
| codeberg.org/gruf/go-byteutil v1.0.2/go.mod h1:cWM3tgMCroSzqoBXUXMhvxTxYJp+TbCr6ioISRY5vSU= | codeberg.org/gruf/go-byteutil v1.0.2/go.mod h1:cWM3tgMCroSzqoBXUXMhvxTxYJp+TbCr6ioISRY5vSU= | ||||||
| codeberg.org/gruf/go-cache v1.1.2/go.mod h1:/Dbc+xU72Op3hMn6x2PXF3NE9uIDFeS+sXPF00hN/7o= | codeberg.org/gruf/go-cache v1.1.2/go.mod h1:/Dbc+xU72Op3hMn6x2PXF3NE9uIDFeS+sXPF00hN/7o= | ||||||
| codeberg.org/gruf/go-cache/v2 v2.1.2 h1:MjnnsrZit4WYN4E6pZhcw3YY2QXNBRG5Ijz7z3r6z2o= | codeberg.org/gruf/go-cache/v2 v2.1.4 h1:r+6wJiTHZn0qqf+p1VtAjGOgXXJl7s8txhPIwoSMZtI= | ||||||
| codeberg.org/gruf/go-cache/v2 v2.1.2/go.mod h1:bFZSpjN9cszV3ArmHW7IwvcDDn/SklfECv0U1FMRMdU= | codeberg.org/gruf/go-cache/v2 v2.1.4/go.mod h1:j7teiz814lG0PfSfnUs+6HA+2/jcjTAR71Ou3Wbt2Xk= | ||||||
| codeberg.org/gruf/go-ctx v1.0.2/go.mod h1:iMyid3m2Rr1wSWL+snliBK5qE51b4pLY5CozVUrb/QU= |  | ||||||
| codeberg.org/gruf/go-debug v1.2.0 h1:WBbTMnK1ArFKUmgv04aO2JiC/daTOB8zQGi521qb7OU= | codeberg.org/gruf/go-debug v1.2.0 h1:WBbTMnK1ArFKUmgv04aO2JiC/daTOB8zQGi521qb7OU= | ||||||
| codeberg.org/gruf/go-debug v1.2.0/go.mod h1:N+vSy9uJBQgpQcJUqjctvqFz7tBHJf+S/PIjLILzpLg= | codeberg.org/gruf/go-debug v1.2.0/go.mod h1:N+vSy9uJBQgpQcJUqjctvqFz7tBHJf+S/PIjLILzpLg= | ||||||
| codeberg.org/gruf/go-errors/v2 v2.0.0/go.mod h1:ZRhbdhvgoUA3Yw6e56kd9Ox984RrvbEFC2pOXyHDJP4= | codeberg.org/gruf/go-errors/v2 v2.0.0/go.mod h1:ZRhbdhvgoUA3Yw6e56kd9Ox984RrvbEFC2pOXyHDJP4= | ||||||
|  | @ -65,14 +84,10 @@ codeberg.org/gruf/go-fastpath v1.0.3 h1:3Iftz9Z2suCEgTLkQMucew+2+4Oe46JPbAM2JEhn | ||||||
| codeberg.org/gruf/go-fastpath v1.0.3/go.mod h1:edveE/Kp3Eqi0JJm0lXYdkVrB28cNUkcb/bRGFTPqeI= | codeberg.org/gruf/go-fastpath v1.0.3/go.mod h1:edveE/Kp3Eqi0JJm0lXYdkVrB28cNUkcb/bRGFTPqeI= | ||||||
| codeberg.org/gruf/go-hashenc v1.0.2 h1:U3jH6zMXZiL96czD/qaJd8OR2h7LlBzGv/2WxnMHI/g= | codeberg.org/gruf/go-hashenc v1.0.2 h1:U3jH6zMXZiL96czD/qaJd8OR2h7LlBzGv/2WxnMHI/g= | ||||||
| codeberg.org/gruf/go-hashenc v1.0.2/go.mod h1:eK+A8clLcEN/m1nftNsRId0kfYDQnETnuIfBGZ8Gvsg= | codeberg.org/gruf/go-hashenc v1.0.2/go.mod h1:eK+A8clLcEN/m1nftNsRId0kfYDQnETnuIfBGZ8Gvsg= | ||||||
| codeberg.org/gruf/go-kv v1.2.0/go.mod h1:z2+9sJc3cWuW9vUZI5tX0Uc9DNgmDdFihsThkShUk6w= | codeberg.org/gruf/go-kv v1.5.2 h1:B0RkAXLUXYn3Za1NzTXOcUvAc+JUC2ZadTMkCUDa0mc= | ||||||
| codeberg.org/gruf/go-kv v1.2.1/go.mod h1:nTmEd529nq8jV8jXwrr7HXR5nHRnKA9jPR0R8PX/EYw= | codeberg.org/gruf/go-kv v1.5.2/go.mod h1:al6ASW/2CbGqz2YcM8B00tvWnVi1bU1CH3HYs5tZxo4= | ||||||
| codeberg.org/gruf/go-kv v1.3.2 h1:FVWQMCZfFJlzYssOQDXs/sJ8kLhcOx4CPJmdzxfe41c= | codeberg.org/gruf/go-logger/v2 v2.2.1 h1:RP2u059EQKTBFV3cN8X6xDxNk2RkzqdgXGKflKqB7Oc= | ||||||
| codeberg.org/gruf/go-kv v1.3.2/go.mod h1:0I7qkI6eLpUtv940vrPasHFhMqlZojGlHf7iF2/Z86A= | codeberg.org/gruf/go-logger/v2 v2.2.1/go.mod h1:m/vBfG5jNUmYXI8Hg9aVSk7Pn8YgEBITQB/B/CzdRss= | ||||||
| codeberg.org/gruf/go-log v1.0.4/go.mod h1:XOkZfvx78Q214dWVKuaPFqkRWJQBipsdou+LrDRlwB8= |  | ||||||
| codeberg.org/gruf/go-logger/v2 v2.0.6 h1:uKpfwQufP76avJ326WUWI40T1qIh7UbxpPlA9UQ8zr8= |  | ||||||
| codeberg.org/gruf/go-logger/v2 v2.0.6/go.mod h1:9kg3GVDGzBXsrv1vALNRm/NJAkPvs5P000DLzladkb0= |  | ||||||
| codeberg.org/gruf/go-middleware v1.1.0/go.mod h1:6D5GVA+qdg/xd+FP+6RgX61mWaMlZZ2Jz6dowJs0rPI= |  | ||||||
| codeberg.org/gruf/go-mutexes v1.1.2 h1:AMC1CFV6kMi+iBjR3yQv8yIagG3lWm68U6sQHYFHEf4= | codeberg.org/gruf/go-mutexes v1.1.2 h1:AMC1CFV6kMi+iBjR3yQv8yIagG3lWm68U6sQHYFHEf4= | ||||||
| codeberg.org/gruf/go-mutexes v1.1.2/go.mod h1:1j/6/MBeBQUedAtAtysLLnBKogfOZAxdym0E3wlaBD8= | codeberg.org/gruf/go-mutexes v1.1.2/go.mod h1:1j/6/MBeBQUedAtAtysLLnBKogfOZAxdym0E3wlaBD8= | ||||||
| codeberg.org/gruf/go-nowish v1.0.0/go.mod h1:70nvICNcqQ9OHpF07N614Dyk7cpL5ToWU1K1ZVCec2s= | codeberg.org/gruf/go-nowish v1.0.0/go.mod h1:70nvICNcqQ9OHpF07N614Dyk7cpL5ToWU1K1ZVCec2s= | ||||||
|  | @ -81,27 +96,30 @@ codeberg.org/gruf/go-pools v1.1.0 h1:LbYP24eQLl/YI1fSU2pafiwhGol1Z1zPjRrMsXpF88s | ||||||
| codeberg.org/gruf/go-pools v1.1.0/go.mod h1:ZMYpt/DjQWYC3zFD3T97QWSFKs62zAUGJ/tzvgB9D68= | codeberg.org/gruf/go-pools v1.1.0/go.mod h1:ZMYpt/DjQWYC3zFD3T97QWSFKs62zAUGJ/tzvgB9D68= | ||||||
| codeberg.org/gruf/go-runners v1.1.1/go.mod h1:9gTrmMnO3d+50C+hVzcmGBf+zTuswReS278E2EMvnmw= | codeberg.org/gruf/go-runners v1.1.1/go.mod h1:9gTrmMnO3d+50C+hVzcmGBf+zTuswReS278E2EMvnmw= | ||||||
| codeberg.org/gruf/go-runners v1.2.1/go.mod h1:9gTrmMnO3d+50C+hVzcmGBf+zTuswReS278E2EMvnmw= | codeberg.org/gruf/go-runners v1.2.1/go.mod h1:9gTrmMnO3d+50C+hVzcmGBf+zTuswReS278E2EMvnmw= | ||||||
| codeberg.org/gruf/go-runners v1.2.2 h1:o0u8ggAeT5j8R0oaND961OeWEZOzW9wqwhmnVEeteqs= | codeberg.org/gruf/go-runners v1.3.1 h1:d/OQMMMiA6yPaDSbSr0/Jc+lucWmm7AiAZjWffpNKVQ= | ||||||
| codeberg.org/gruf/go-runners v1.2.2/go.mod h1:rl0EdZNozkRMb21DAtOL5L4oTfmslYQdZgq2RMMc/H4= | codeberg.org/gruf/go-runners v1.3.1/go.mod h1:rl0EdZNozkRMb21DAtOL5L4oTfmslYQdZgq2RMMc/H4= | ||||||
| codeberg.org/gruf/go-sched v1.0.4 h1:gEfbDQbPUhCE+JPTo28l3eTaNilP+YXMjXS2e3KOtDQ= | codeberg.org/gruf/go-sched v1.1.1 h1:YtLSQhpypzuD3HTup5oF7LLWB79gTL4nqW06kH4Vwks= | ||||||
| codeberg.org/gruf/go-sched v1.0.4/go.mod h1:5C2IQtzxSPR0Q5+EWTAY5HcxZIIFr5B6MtFwL9FtsoA= | codeberg.org/gruf/go-sched v1.1.1/go.mod h1:SRcdP/5qim+EBT3n3r4aUra1C30yPqV4OJOXuqvgdQM= | ||||||
| codeberg.org/gruf/go-store v1.3.8 h1:7Hzzsa8gaOc6spuGWXJVUWRAyKiOR/m60/jNYrD8cT0= | codeberg.org/gruf/go-store v1.3.8 h1:7Hzzsa8gaOc6spuGWXJVUWRAyKiOR/m60/jNYrD8cT0= | ||||||
| codeberg.org/gruf/go-store v1.3.8/go.mod h1:Fy5pXEHiIVFRWDx8DfILwXS1ulrj/jLdSK2C2oElz3I= | codeberg.org/gruf/go-store v1.3.8/go.mod h1:Fy5pXEHiIVFRWDx8DfILwXS1ulrj/jLdSK2C2oElz3I= | ||||||
| codeberg.org/gruf/go-ulid v1.0.0/go.mod h1:dVNsZJpVTge8+jfBTjAMpnscYSiCqk+g32ZgtorCAMs= |  | ||||||
| dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= | dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= | ||||||
| github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | ||||||
| github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= | github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= | ||||||
| github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= | github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= | ||||||
| github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= | github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= | ||||||
|  | github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= | ||||||
| github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= | github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= | ||||||
| github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= | github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= | ||||||
| github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= | github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= | ||||||
| github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= | github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= | ||||||
|  | github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= | ||||||
| github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= | github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= | ||||||
| github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= | github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= | ||||||
| github.com/buckket/go-blurhash v1.1.0 h1:X5M6r0LIvwdvKiUtiNcRL2YlmOfMzYobI3VCKCZc9Do= | github.com/buckket/go-blurhash v1.1.0 h1:X5M6r0LIvwdvKiUtiNcRL2YlmOfMzYobI3VCKCZc9Do= | ||||||
| github.com/buckket/go-blurhash v1.1.0/go.mod h1:aT2iqo5W9vu9GpyoLErKfTHwgODsZp3bQfXjXJUxNb8= | github.com/buckket/go-blurhash v1.1.0/go.mod h1:aT2iqo5W9vu9GpyoLErKfTHwgODsZp3bQfXjXJUxNb8= | ||||||
| github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= | 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/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= | ||||||
| github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= | github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= | ||||||
| github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= | 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/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= | ||||||
|  | @ -110,13 +128,19 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk | ||||||
| github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= | 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-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | ||||||
| github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= | ||||||
|  | github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= | ||||||
|  | github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | ||||||
|  | github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | ||||||
|  | github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | ||||||
|  | github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | ||||||
|  | github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= | ||||||
| github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= | github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= | ||||||
| github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= | github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= | ||||||
| github.com/coreos/go-oidc/v3 v3.1.0 h1:6avEvcdvTa1qYsOZ6I5PRkSYHzpTNWgKYmaJfaYbrRw= | github.com/coreos/go-oidc/v3 v3.4.0 h1:xz7elHb/LDwm/ERpwHd+5nb7wFHL32rsr6bBOgaeu6g= | ||||||
| github.com/coreos/go-oidc/v3 v3.1.0/go.mod h1:rEJ/idjfUyfkBit1eI1fvyr+64/g9dcKpAm8MJMesvo= | github.com/coreos/go-oidc/v3 v3.4.0/go.mod h1:eHUXhZtXPQLgEaDrOVTgwbgmz1xGOkJNye6h3zkD2Pw= | ||||||
| github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | ||||||
| github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | ||||||
| github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= | github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= | ||||||
| github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= | github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= | ||||||
| github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= | github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= | ||||||
| github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||||
|  | @ -150,29 +174,32 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m | ||||||
| github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= | 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.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.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= | ||||||
|  | github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= | ||||||
|  | github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= | ||||||
|  | github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= | ||||||
|  | github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= | ||||||
| github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= | github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= | ||||||
| github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= | github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= | ||||||
| github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= | github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= | ||||||
| github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= | github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= | ||||||
| github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= | github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= | ||||||
| github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | ||||||
| github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= | github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= | ||||||
| github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= | github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= | ||||||
| github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= | github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= | ||||||
| github.com/gavv/httpexpect v2.0.0+incompatible h1:1X9kcRshkSKEjNJJxX9Y9mQ5BRfbxU5kORdjhlA1yX8= | github.com/gavv/httpexpect v2.0.0+incompatible h1:1X9kcRshkSKEjNJJxX9Y9mQ5BRfbxU5kORdjhlA1yX8= | ||||||
| github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= | github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= | ||||||
| github.com/gin-contrib/cors v1.3.1 h1:doAsuITavI4IOcd0Y19U4B+O0dNWihRyX//nn4sEmgA= | github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | ||||||
| github.com/gin-contrib/cors v1.3.1/go.mod h1:jjEJ4268OPZUcU7k9Pm653S7lXUGcqMADzFA61xsmDk= | github.com/gin-contrib/cors v1.4.0 h1:oJ6gwtUl3lqV0WEIwM/LxPF1QZ5qe2lGWdY2+bz7y0g= | ||||||
| github.com/gin-contrib/gzip v0.0.5 h1:mhnVU32YnnBh2LPH2iqRqsA/eR7SAqRaD388jL2s/j0= | github.com/gin-contrib/cors v1.4.0/go.mod h1:bs9pNM0x/UsmHPBWT2xZz9ROh8xYjYkiURUfmBoMlcs= | ||||||
| github.com/gin-contrib/gzip v0.0.5/go.mod h1:OPIK6HR0Um2vNmBUTlayD7qle4yVVRZT0PyhdUigrKk= | github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= | ||||||
|  | github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= | ||||||
| github.com/gin-contrib/sessions v0.0.5 h1:CATtfHmLMQrMNpJRgzjWXD7worTh7g7ritsQfmF+0jE= | github.com/gin-contrib/sessions v0.0.5 h1:CATtfHmLMQrMNpJRgzjWXD7worTh7g7ritsQfmF+0jE= | ||||||
| github.com/gin-contrib/sessions v0.0.5/go.mod h1:vYAuaUPqie3WUSsft6HUlCjlwwoJQs97miaG2+7neKY= | github.com/gin-contrib/sessions v0.0.5/go.mod h1:vYAuaUPqie3WUSsft6HUlCjlwwoJQs97miaG2+7neKY= | ||||||
| github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= | github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= | ||||||
| github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= | github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= | ||||||
| github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= | github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= | ||||||
| github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= | github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= | ||||||
| github.com/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs= |  | ||||||
| github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= |  | ||||||
| github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= | github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= | ||||||
| github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= | github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= | ||||||
| github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= | github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= | ||||||
|  | @ -187,15 +214,11 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb | ||||||
| github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= | github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= | ||||||
| github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= | github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= | ||||||
| github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= | github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= | ||||||
| github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= |  | ||||||
| github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= |  | ||||||
| github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= | github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= | ||||||
| github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= | github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= | ||||||
| github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= |  | ||||||
| github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= |  | ||||||
| github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= | github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= | ||||||
| github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= | github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= | ||||||
| github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= | github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= | ||||||
| github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw= | github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw= | ||||||
| github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= | github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= | ||||||
| github.com/go-session/session v3.1.2+incompatible/go.mod h1:8B3iivBQjrz/JtC68Np2T1yBBLxTan3mn/3OM0CyRt0= | github.com/go-session/session v3.1.2+incompatible/go.mod h1:8B3iivBQjrz/JtC68Np2T1yBBLxTan3mn/3OM0CyRt0= | ||||||
|  | @ -203,6 +226,9 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me | ||||||
| github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= | github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= | ||||||
| github.com/go-xmlfmt/xmlfmt v0.0.0-20211206191508-7fd73a941850 h1:PSPmmucxGiFBtbQcttHTUc4LQ3P09AW+ldO2qspyKdY= | github.com/go-xmlfmt/xmlfmt v0.0.0-20211206191508-7fd73a941850 h1:PSPmmucxGiFBtbQcttHTUc4LQ3P09AW+ldO2qspyKdY= | ||||||
| github.com/go-xmlfmt/xmlfmt v0.0.0-20211206191508-7fd73a941850/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= | github.com/go-xmlfmt/xmlfmt v0.0.0-20211206191508-7fd73a941850/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= | ||||||
|  | github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= | ||||||
|  | github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= | ||||||
|  | github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= | ||||||
| github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= | 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/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= | ||||||
| github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= | github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= | ||||||
|  | @ -223,7 +249,9 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt | ||||||
| github.com/golang/mock v1.4.1/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.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.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 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= | github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= | ||||||
|  | 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.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.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.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||||||
|  | @ -239,8 +267,10 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD | ||||||
| github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | 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.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | ||||||
| github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | 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 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= | github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= | ||||||
| github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | 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/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= | github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= | ||||||
| github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||||||
| github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | ||||||
|  | @ -257,13 +287,16 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ | ||||||
| github.com/google/go-cmp v0.5.4/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.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.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||||
|  | github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= | ||||||
| github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= | github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= | ||||||
|  | github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||||||
| github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= | github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= | ||||||
| github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= | github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= | ||||||
| github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | 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 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.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.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-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-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-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | ||||||
|  | @ -274,13 +307,25 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf | ||||||
| github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | 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-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||||||
| github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/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-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/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.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.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||||
| github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= | github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= | ||||||
| github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | ||||||
|  | github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= | ||||||
| github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= | github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= | ||||||
| github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= | github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= | ||||||
|  | github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= | ||||||
|  | github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= | ||||||
|  | github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= | ||||||
|  | github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= | ||||||
|  | github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= | ||||||
|  | github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= | ||||||
| github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= | github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= | ||||||
| github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= | github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= | ||||||
| github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||||||
|  | @ -295,6 +340,7 @@ github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/z | ||||||
| github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | ||||||
| github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= | 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/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/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= | github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= | ||||||
| github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= | github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= | ||||||
| github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= | ||||||
|  | @ -306,8 +352,9 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: | ||||||
| github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= | github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= | ||||||
| github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= | github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= | ||||||
| github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= | github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= | ||||||
| github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= |  | ||||||
| github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= | github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= | ||||||
|  | github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= | ||||||
|  | github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= | ||||||
| github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= | github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= | ||||||
| github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= | github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= | ||||||
| github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= | github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= | ||||||
|  | @ -318,8 +365,8 @@ github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsU | ||||||
| github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= | github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= | ||||||
| github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= | github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= | ||||||
| github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= | github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= | ||||||
| github.com/jackc/pgconn v1.11.0 h1:HiHArx4yFbwl91X3qqIHtUFoiIfLNJXCQRsnzkiwwaQ= | github.com/jackc/pgconn v1.13.0 h1:3L1XMNV2Zvca/8BYhzcRFS70Lr0WlDg16Di6SFGAbys= | ||||||
| github.com/jackc/pgconn v1.11.0/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= | github.com/jackc/pgconn v1.13.0/go.mod h1:AnowpAqO4CMIIJNZl2VJp+KrkAZciAkhEl0W0JIobpI= | ||||||
| github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= | github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= | ||||||
| github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= | github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= | ||||||
| github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= | github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= | ||||||
|  | @ -335,31 +382,29 @@ github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvW | ||||||
| github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= | github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= | ||||||
| github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= | github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= | ||||||
| github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= | github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= | ||||||
| github.com/jackc/pgproto3/v2 v2.2.0 h1:r7JypeP2D3onoQTCxWdTpCtJ4D+qpKr0TxvoyMhZ5ns= | github.com/jackc/pgproto3/v2 v2.3.1 h1:nwj7qwf0S+Q7ISFfBndqeLwSwxs+4DPsbRFjECT1Y4Y= | ||||||
| github.com/jackc/pgproto3/v2 v2.2.0/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= | github.com/jackc/pgproto3/v2 v2.3.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= | ||||||
| github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= | github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= | ||||||
| github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= | github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= | ||||||
| github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= | github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= | ||||||
| github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= | github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= | ||||||
| github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= | github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= | ||||||
| github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= | github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= | ||||||
| github.com/jackc/pgtype v1.10.0 h1:ILnBWrRMSXGczYvmkYD6PsYyVFUNLTnIUJHHDLmqk38= | github.com/jackc/pgtype v1.12.0 h1:Dlq8Qvcch7kiehm8wPGIW0W3KsCCHJnRacKW0UM8n5w= | ||||||
| github.com/jackc/pgtype v1.10.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= | github.com/jackc/pgtype v1.12.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= | ||||||
| github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= | github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= | ||||||
| github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= | github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= | ||||||
| github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= | github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= | ||||||
| github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= | github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= | ||||||
| github.com/jackc/pgx/v4 v4.15.0 h1:B7dTkXsdILD3MF987WGGCcg+tvLW6bZJdEcqVFeU//w= | github.com/jackc/pgx/v4 v4.17.2 h1:0Ut0rpeKwvIVbMQ1KbMBU4h6wxehBI535LK6Flheh8E= | ||||||
| github.com/jackc/pgx/v4 v4.15.0/go.mod h1:D/zyOyXiaM1TmVWnOM18p0xdDtdakRBa0RsVGI3U3bw= | github.com/jackc/pgx/v4 v4.17.2/go.mod h1:lcxIZN44yMIrWI78a5CpucdD14hX0SBDbNRvjDBItsw= | ||||||
| github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= | github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= | ||||||
| github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= | github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= | ||||||
| github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= | github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= | ||||||
| github.com/jackc/puddle v1.2.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= | github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= | ||||||
| github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= | github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= | ||||||
| github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= | 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/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= | ||||||
| github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= |  | ||||||
| github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= |  | ||||||
| github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= | github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= | ||||||
| github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= | ||||||
| github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= | github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= | ||||||
|  | @ -372,11 +417,12 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:C | ||||||
| github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||||||
| github.com/klauspost/compress v1.10.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | github.com/klauspost/compress v1.10.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | ||||||
| github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= | ||||||
| github.com/klauspost/compress v1.15.0 h1:xqfchp4whNFxn5A4XFyyYtitiWI8Hy5EW59jEwcyL6U= | github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= | ||||||
| github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= | github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= | ||||||
| github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= | github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= | ||||||
| github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= | github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= | ||||||
| github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= | github.com/klauspost/cpuid/v2 v2.1.1 h1:t0wUqjowdm8ezddV5k0tLWVklVuvLJpoHeb4WBdydm0= | ||||||
|  | github.com/klauspost/cpuid/v2 v2.1.1/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= | ||||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||||
| github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||||||
| github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= | github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= | ||||||
|  | @ -389,8 +435,6 @@ github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= | ||||||
| github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | ||||||
| github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= | ||||||
| github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= | ||||||
| github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= |  | ||||||
| github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= |  | ||||||
| github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= | github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= | ||||||
| github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= | github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= | ||||||
| github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= | github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= | ||||||
|  | @ -406,29 +450,26 @@ github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope | ||||||
| github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= | github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= | ||||||
| github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= | github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= | ||||||
| github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= | github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= | ||||||
| github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= |  | ||||||
| github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= | github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= | ||||||
| github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= |  | ||||||
| github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= | github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= | ||||||
|  | github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= | ||||||
|  | github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= | ||||||
| github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= | github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= | ||||||
| github.com/microcosm-cc/bluemonday v1.0.18 h1:6HcxvXDAi3ARt3slx6nTesbvorIc3QeTzBNRvWktHBo= | github.com/microcosm-cc/bluemonday v1.0.20 h1:flpzsq4KU3QIYAYGV/szUat7H+GPOXR0B2JU5A1Wp8Y= | ||||||
| github.com/microcosm-cc/bluemonday v1.0.18/go.mod h1:Z0r70sCuXHig8YpBzCc5eGHAap2K7e/u082ZUpDRRqM= | github.com/microcosm-cc/bluemonday v1.0.20/go.mod h1:yfBmMi8mxvaZut3Yytv+jTXRY8mxyjJ0/kQBTElld50= | ||||||
| github.com/miekg/dns v1.1.49 h1:qe0mQU3Z/XpFeE+AEBo2rqaS1IPBJ3anmqZ4XiZJVG8= | github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= | ||||||
| github.com/miekg/dns v1.1.49/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= | github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= | ||||||
| github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= | github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= | ||||||
| github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= | github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= | ||||||
| github.com/minio/minio-go/v7 v7.0.29 h1:7md6lIq1s6zPzUiDRX1BVLHolA4pDM8RMQqIszaJbY0= | github.com/minio/minio-go/v7 v7.0.36 h1:KPzAl8C6jcRFEUsGUHR6deRivvKATPNZThzi7D9y/sc= | ||||||
| github.com/minio/minio-go/v7 v7.0.29/go.mod h1:x81+AX5gHSfCSqw7jxRKHvxUXMlE5uKX0Vb75Xk5yYg= | github.com/minio/minio-go/v7 v7.0.36/go.mod h1:nCrRzjoSUQh8hgKKtu3Y708OLvRLtuASMg2/nvmbarw= | ||||||
| github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= | github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= | ||||||
| github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= | github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= | ||||||
| github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= |  | ||||||
| github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= |  | ||||||
| github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= | github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= | ||||||
| github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= | ||||||
| github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||||||
| github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= | ||||||
| github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||||||
| github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= |  | ||||||
| github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= | github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= | ||||||
| github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= | github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= | ||||||
| github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= | github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= | ||||||
|  | @ -443,8 +484,9 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J | ||||||
| github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= | github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= | ||||||
| github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= | github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= | ||||||
| github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= | github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= | ||||||
| github.com/pelletier/go-toml/v2 v2.0.0 h1:P7Bq0SaI8nsexyay5UAyDo+ICWy5MQPgEZ5+l8JQTKo= | github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= | ||||||
| github.com/pelletier/go-toml/v2 v2.0.0/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= | github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= | ||||||
|  | github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= | ||||||
| github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= | github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= | ||||||
| github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||||||
| github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||||||
|  | @ -459,12 +501,15 @@ github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6O | ||||||
| github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= | github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= | ||||||
| github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= | github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= | ||||||
| github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= | github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= | ||||||
|  | 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.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= | ||||||
| github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= | github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= | ||||||
| github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= |  | ||||||
| github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= | github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= | ||||||
| github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= | github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= | ||||||
|  | github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= | ||||||
| github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= | github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= | ||||||
|  | github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= | ||||||
|  | github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= | ||||||
| github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= | github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= | ||||||
| github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= | github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= | ||||||
| github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= | github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= | ||||||
|  | @ -478,24 +523,25 @@ github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXY | ||||||
| github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= | github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= | ||||||
| github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= | github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= | ||||||
| github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= | github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= | ||||||
| github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= | github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= | ||||||
| github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= | github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= | ||||||
| github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= | github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= | ||||||
| github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | ||||||
| github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= | github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= | ||||||
| github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | ||||||
| github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= | github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | ||||||
| github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= | github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= | ||||||
| github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= | github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= | ||||||
| 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/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= | github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= | ||||||
| github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= | github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= | ||||||
|  | github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= | ||||||
| github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= | github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= | ||||||
| github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= | github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= | ||||||
| github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= | github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= | ||||||
| github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= | github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= | ||||||
| github.com/spf13/viper v1.11.0 h1:7OX/1FS6n7jHD1zGrZTM7WtY13ZELRyosK4k93oPr44= | github.com/spf13/viper v1.13.0 h1:BWSJ/M+f+3nmdz9bxB+bWX28kkALN2ok11D0rSo8EJU= | ||||||
| github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= | github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= | ||||||
| github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||||||
| github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||||||
| github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= | github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= | ||||||
|  | @ -509,8 +555,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ | ||||||
| github.com/stretchr/testify v1.7.1/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 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= | github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= | ||||||
| github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= | github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= | ||||||
| github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= | github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= | ||||||
| github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= | github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= | ||||||
| github.com/superseriousbusiness/activity v1.2.1-gts h1:wh7v0zYa1mJmqB35PSfvgl4cs51Dh5PyfKvcZLSxMQU= | github.com/superseriousbusiness/activity v1.2.1-gts h1:wh7v0zYa1mJmqB35PSfvgl4cs51Dh5PyfKvcZLSxMQU= | ||||||
| github.com/superseriousbusiness/activity v1.2.1-gts/go.mod h1:AZw0Xb4Oju8rmaJCZ21gc5CPg47MmNgyac+Hx5jo8VM= | github.com/superseriousbusiness/activity v1.2.1-gts/go.mod h1:AZw0Xb4Oju8rmaJCZ21gc5CPg47MmNgyac+Hx5jo8VM= | ||||||
| github.com/superseriousbusiness/exif-terminator v0.4.0 h1:pzAg7luCi8oc2LVDwgTLvTinh/+/2UuWgJZrM8MMaT4= | github.com/superseriousbusiness/exif-terminator v0.4.0 h1:pzAg7luCi8oc2LVDwgTLvTinh/+/2UuWgJZrM8MMaT4= | ||||||
|  | @ -519,11 +565,10 @@ github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430 | ||||||
| github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe/go.mod h1:gH4P6gN1V+wmIw5o97KGaa1RgXB/tVpC2UNzijhg3E4= | github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe/go.mod h1:gH4P6gN1V+wmIw5o97KGaa1RgXB/tVpC2UNzijhg3E4= | ||||||
| github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB h1:PtW2w6budTvRV2J5QAoSvThTHBuvh8t/+BXIZFAaBSc= | github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB h1:PtW2w6budTvRV2J5QAoSvThTHBuvh8t/+BXIZFAaBSc= | ||||||
| github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB/go.mod h1:uYC/W92oVRJ49Vh1GcvTqpeFqHi+Ovrl2sMllQWRAEo= | github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB/go.mod h1:uYC/W92oVRJ49Vh1GcvTqpeFqHi+Ovrl2sMllQWRAEo= | ||||||
| github.com/tdewolff/minify/v2 v2.12.0 h1:ZyvMKeciyR3vzJrK/oHyBcSmpttQ/V+ah7qOqTZclaU= | github.com/tdewolff/minify/v2 v2.12.1 h1:zcjJTcO0uI+asdT+nd4TjXi3KUmVV/G2kxOKKrgKlGw= | ||||||
| github.com/tdewolff/minify/v2 v2.12.0/go.mod h1:8mvf+KglD7XurfvvFZDUYvVURy6bA/r0oTvmakXMnyg= | github.com/tdewolff/minify/v2 v2.12.1/go.mod h1:p5pwbvNs1ghbFED/ZW1towGsnnWwzvM8iz8l0eURi9g= | ||||||
| github.com/tdewolff/parse/v2 v2.6.1 h1:RIfy1erADkO90ynJWvty8VIkqqKYRzf2iLp8ObG174I= | github.com/tdewolff/parse/v2 v2.6.3 h1:O5rshbkaRmpRtD7k2lG65bEJpcfUMNg5Cx2uRKWVsI8= | ||||||
| github.com/tdewolff/parse/v2 v2.6.1/go.mod h1:WzaJpRSbwq++EIQHYIRTpbYKNA3gn9it1Ik++q4zyho= | github.com/tdewolff/parse/v2 v2.6.3/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= | ||||||
| github.com/tdewolff/test v1.0.6/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= |  | ||||||
| github.com/tdewolff/test v1.0.7 h1:8Vs0142DmPFW/bQeHRP3MV19m1gvndjUb1sn8yy74LM= | github.com/tdewolff/test v1.0.7 h1:8Vs0142DmPFW/bQeHRP3MV19m1gvndjUb1sn8yy74LM= | ||||||
| github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= | github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= | ||||||
| github.com/tidwall/btree v0.0.0-20191029221954-400434d76274 h1:G6Z6HvJuPjG6XfNGi/feOATzeJrfgTNJY+rGrHbA04E= | github.com/tidwall/btree v0.0.0-20191029221954-400434d76274 h1:G6Z6HvJuPjG6XfNGi/feOATzeJrfgTNJY+rGrHbA04E= | ||||||
|  | @ -546,19 +591,17 @@ github.com/tidwall/tinyqueue v0.0.0-20180302190814-1e39f5511563 h1:Otn9S136ELckZ | ||||||
| github.com/tidwall/tinyqueue v0.0.0-20180302190814-1e39f5511563/go.mod h1:mLqSmt7Dv/CNneF2wfcChfN1rvapyQr01LGKnKex0DQ= | github.com/tidwall/tinyqueue v0.0.0-20180302190814-1e39f5511563/go.mod h1:mLqSmt7Dv/CNneF2wfcChfN1rvapyQr01LGKnKex0DQ= | ||||||
| github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo= | github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo= | ||||||
| github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= | github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= | ||||||
| github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= |  | ||||||
| github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= | github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= | ||||||
| github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= |  | ||||||
| github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= | github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= | ||||||
| github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= | github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= | ||||||
| github.com/ulule/limiter/v3 v3.10.0 h1:C9mx3tgxYnt4pUYKWktZf7aEOVPbRYxR+onNFjQTEp0= | github.com/ulule/limiter/v3 v3.10.0 h1:C9mx3tgxYnt4pUYKWktZf7aEOVPbRYxR+onNFjQTEp0= | ||||||
| github.com/ulule/limiter/v3 v3.10.0/go.mod h1:NqPA/r8QfP7O11iC+95X6gcWJPtRWjKrtOUw07BTvoo= | github.com/ulule/limiter/v3 v3.10.0/go.mod h1:NqPA/r8QfP7O11iC+95X6gcWJPtRWjKrtOUw07BTvoo= | ||||||
| github.com/uptrace/bun v1.1.7 h1:biOoh5dov69hQPBlaRsXSHoEOIEnCxFzQvUmbscSNJI= | github.com/uptrace/bun v1.1.8 h1:slxuaP4LYWFbPRUmTtQhfJN+6eX/6ar2HDKYTcI50SA= | ||||||
| github.com/uptrace/bun v1.1.7/go.mod h1:Z2Pd3cRvNKbrYuL6Gp1XGjA9QEYz+rDz5KkEi9MZLnQ= | github.com/uptrace/bun v1.1.8/go.mod h1:iT89ESdV3uMupD9ixt6Khidht+BK0STabK/LeZE+B84= | ||||||
| github.com/uptrace/bun/dialect/pgdialect v1.1.7 h1:94GPc8RRC9AVoQ+4KCqRX2zScevsVfOttk13wm60/P8= | github.com/uptrace/bun/dialect/pgdialect v1.1.8 h1:wayJhjYDPGv8tgOBLolbBtSFQ0TihFoo8E1T129UdA8= | ||||||
| github.com/uptrace/bun/dialect/pgdialect v1.1.7/go.mod h1:kKHFmQIyBl0kvQDsoyrlXaKsceTH2TJnbCUFlK9QAmE= | github.com/uptrace/bun/dialect/pgdialect v1.1.8/go.mod h1:nNbU8PHTjTUM+CRtGmqyBb9zcuRAB8I680/qoFSmBUk= | ||||||
| github.com/uptrace/bun/dialect/sqlitedialect v1.1.7 h1:xxc1n1nUdn6zqY6ji1ZkiaHQyop8J237uRyptqXGW08= | github.com/uptrace/bun/dialect/sqlitedialect v1.1.8 h1:IJ6qBLjeON21tpgmZF/V/k/oHdzAql5UrnaqMCksTlY= | ||||||
| github.com/uptrace/bun/dialect/sqlitedialect v1.1.7/go.mod h1:GjqiPWAa9JCLlv51mB1rjk8QRgwv6HlQ+IAtyrobfAY= | github.com/uptrace/bun/dialect/sqlitedialect v1.1.8/go.mod h1:IZF76cHEf8eeGA29OpkYyPYDs4l/iSMTYRyuFRqeXdY= | ||||||
| github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= | github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= | ||||||
| github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= | github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= | ||||||
| github.com/valyala/fasthttp v1.14.0/go.mod h1:ol1PCaL0dX20wC0htZ7sYCsvCYmrouYra0zHzaclZhE= | github.com/valyala/fasthttp v1.14.0/go.mod h1:ol1PCaL0dX20wC0htZ7sYCsvCYmrouYra0zHzaclZhE= | ||||||
|  | @ -598,6 +641,8 @@ 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.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | ||||||
| go.opencensus.io v0.22.4/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.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.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= | go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= | ||||||
| go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= | go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= | ||||||
| go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= | go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= | ||||||
|  | @ -622,8 +667,9 @@ golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5y | ||||||
| golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | ||||||
| golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= | ||||||
| golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||||
| golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f h1:OeJjE6G4dgCY4PIXvIRQbE8+RX+uXZyGhUy/ksMGJoc= | golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||||
| golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= | ||||||
|  | golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= | ||||||
| golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= | ||||||
| golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/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-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= | ||||||
|  | @ -638,8 +684,9 @@ golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d h1:vtUKgx8dahOomfFzLREU8nSv2 | ||||||
| golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= | golang.org/x/exp v0.0.0-20220613132600-b0d781184e0d/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= | ||||||
| golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= | 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/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= | ||||||
| golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 h1:hVwzHzIUGRjiF7EcUjqNxk3NCfkPxbDKRdnNE1Rpg0U= |  | ||||||
| golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= | golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= | ||||||
|  | golang.org/x/image v0.0.0-20220902085622-e7cb96979f69 h1:Lj6HJGCSn5AjxRAH2+r35Mir4icalbqku+CLUtjnvXY= | ||||||
|  | golang.org/x/image v0.0.0-20220902085622-e7cb96979f69/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY= | ||||||
| golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | ||||||
| golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= | golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= | ||||||
| golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | ||||||
|  | @ -651,6 +698,7 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu | ||||||
| golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= | 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-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-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-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/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.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= | ||||||
|  | @ -662,8 +710,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||||
| golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||||
| golang.org/x/mod v0.4.1/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.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||||
| golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= | golang.org/x/mod v0.6.0-dev.0.20220907135952-02c991387e35 h1:CZP0Rbk/s1EIiUMx5DS2MhK2ct52xpQxqddVD0FmF+o= | ||||||
| golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= | golang.org/x/mod v0.6.0-dev.0.20220907135952-02c991387e35/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= | ||||||
| golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||||
| golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||||
| golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||||||
|  | @ -687,7 +735,6 @@ golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLL | ||||||
| golang.org/x/net v0.0.0-20200320220750-118fecf932d8/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | golang.org/x/net v0.0.0-20200320220750-118fecf932d8/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-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-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||||
| golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/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-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-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-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||||||
|  | @ -697,16 +744,26 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R | ||||||
| golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= | ||||||
| golang.org/x/net v0.0.0-20201021035429-f5854403a974/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-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | 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-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | ||||||
| golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= | golang.org/x/net v0.0.0-20201224014010-6772e930b67b/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-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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= | ||||||
| golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||||
| golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||||
| golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||||
| golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= | golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= | ||||||
| golang.org/x/net v0.0.0-20220524220425-1d687d428aca h1:xTaFYiPROfpPhqrfTIDXj0ri1SpfueYT951s4bAuDO8= | golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= | ||||||
| golang.org/x/net v0.0.0-20220524220425-1d687d428aca/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= | golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= | ||||||
|  | golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= | ||||||
|  | golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= | ||||||
|  | golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= | ||||||
|  | golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= | ||||||
|  | golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= | ||||||
|  | golang.org/x/net v0.0.0-20220909164309-bea034e7d591 h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI= | ||||||
|  | golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= | ||||||
| golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||||
| golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||||
| golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||||
|  | @ -716,9 +773,19 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ | ||||||
| golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/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-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-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-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/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||||
| golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE= | golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= | ||||||
|  | golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= | ||||||
|  | golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= | ||||||
| golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= | golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= | ||||||
|  | golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= | ||||||
|  | golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094 h1:2o1E+E8TpNLklK9nHiPiK1uzIYrIHt+cQx3ynCwq9V8= | ||||||
|  | golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= | ||||||
| golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
|  | @ -729,8 +796,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ | ||||||
| golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/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-20210220032951-036812b2e83c/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-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
|  | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= | ||||||
| golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
| golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
| golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
|  | @ -775,19 +843,42 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w | ||||||
| golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/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-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
|  | golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/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-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||||
| golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/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-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-20210615035016-665e8c7367d1/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-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-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-20210908233432-aa78b53d3365/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-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
| golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
| golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg= | golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
| golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
|  | golang.org/x/sys v0.0.0-20220913120320-3275c407cedc h1:dpclq5m2YrqPGStKmtw7IcNbKLfbIqKXvNxDJKdIKYc= | ||||||
|  | golang.org/x/sys v0.0.0-20220913120320-3275c407cedc/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||||
| golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= | golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= | ||||||
| golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | ||||||
| golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= | ||||||
|  | @ -798,6 +889,7 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 | ||||||
| golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= | 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.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||||
| golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | 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.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||||
| golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= | golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= | ||||||
| golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= | ||||||
|  | @ -858,17 +950,23 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f | ||||||
| golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||||
| golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||||||
| golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= | 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.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= | ||||||
| golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20= | golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= | ||||||
| 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/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||||
| golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||||
| golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | 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-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-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||||
| golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||||
| golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= |  | ||||||
| golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||||
|  | golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= | ||||||
|  | golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= | ||||||
| google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= | 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.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.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= | ||||||
|  | @ -888,6 +986,26 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 | ||||||
| google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= | 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.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= | ||||||
| google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= | 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.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.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= | ||||||
|  | google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= | ||||||
|  | google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= | ||||||
|  | google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= | ||||||
|  | google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= | ||||||
|  | google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= | ||||||
|  | google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= | ||||||
|  | google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= | ||||||
|  | google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= | ||||||
|  | google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= | ||||||
|  | google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= | ||||||
|  | google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= | ||||||
|  | google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= | ||||||
| google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | ||||||
| google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | ||||||
| google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= | ||||||
|  | @ -919,6 +1037,7 @@ google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfG | ||||||
| google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/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-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-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-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-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-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= | ||||||
|  | @ -931,7 +1050,50 @@ google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6D | ||||||
| google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/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-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | ||||||
| google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/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-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= | google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/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-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= | ||||||
|  | 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/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= | ||||||
|  | google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= | ||||||
|  | google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= | ||||||
|  | google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||||
|  | google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||||
|  | google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||||
|  | google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||||
|  | google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||||
|  | google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||||
|  | google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= | ||||||
|  | google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= | ||||||
|  | google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= | ||||||
|  | google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= | ||||||
|  | google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= | ||||||
|  | google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= | ||||||
|  | google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= | ||||||
|  | google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= | ||||||
|  | google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= | ||||||
|  | google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= | ||||||
|  | google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= | ||||||
|  | google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= | ||||||
|  | google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= | ||||||
|  | google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= | ||||||
|  | google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= | ||||||
|  | google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= | ||||||
| google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= | google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= | ||||||
| google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= | 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.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= | ||||||
|  | @ -945,9 +1107,25 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji | ||||||
| google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= | 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.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.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.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.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.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 v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= | ||||||
|  | google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= | ||||||
|  | google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= | ||||||
|  | google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= | ||||||
|  | google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= | ||||||
|  | google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= | ||||||
|  | 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-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-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 v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= | ||||||
|  | @ -960,8 +1138,10 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj | ||||||
| google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= | 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-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.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= | ||||||
| google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= | google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= | ||||||
| google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||||
|  | google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= | ||||||
|  | google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
| gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/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-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||||
|  | @ -969,21 +1149,18 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN | ||||||
| gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= | 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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= | ||||||
| gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= | gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= | ||||||
| gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= |  | ||||||
| gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= |  | ||||||
| gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= | gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= | ||||||
| gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= | gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= | ||||||
| gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= | ||||||
| gopkg.in/mcuadros/go-syslog.v2 v2.3.0 h1:kcsiS+WsTKyIEPABJBJtoG0KkOS6yzvJ+/eZlhD79kk= | gopkg.in/mcuadros/go-syslog.v2 v2.3.0 h1:kcsiS+WsTKyIEPABJBJtoG0KkOS6yzvJ+/eZlhD79kk= | ||||||
| gopkg.in/mcuadros/go-syslog.v2 v2.3.0/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= | gopkg.in/mcuadros/go-syslog.v2 v2.3.0/go.mod h1:l5LPIyOOyIdQquNg+oU6Z3524YwrcqEm0aKH+5zpt2U= | ||||||
| gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= |  | ||||||
| gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= | gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= | ||||||
| gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= | gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= | ||||||
| gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= | gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= | ||||||
| gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||||||
|  | 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.4/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.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.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 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= | ||||||
| gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= | ||||||
|  | @ -1002,41 +1179,40 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 | ||||||
| lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= | lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= | ||||||
| lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= | lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= | ||||||
| lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= | lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= | ||||||
| modernc.org/cc/v3 v3.36.0 h1:0kmRkTmqNidmu3c7BNDSdVHCxXCkWLmWmCIVX4LUboo= | modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= | ||||||
| modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= | modernc.org/cc/v3 v3.38.1 h1:Yu2IiiRpustRFUgMDZKwVn2RvyJzpfYSOw7zHeKtSi4= | ||||||
| modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= | modernc.org/cc/v3 v3.38.1/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= | ||||||
| modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= | modernc.org/ccgo/v3 v3.16.9 h1:AXquSwg7GuMk11pIdw7fmO1Y/ybgazVkMhsZWCV0mHM= | ||||||
| modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= | modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= | ||||||
| modernc.org/ccgo/v3 v3.16.8 h1:G0QNlTqI5uVgczBWfGKs7B++EPwCfXPWGD2MdeKloDs= |  | ||||||
| modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= |  | ||||||
| modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= | modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= | ||||||
| modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= | modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= | ||||||
| modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= | modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= | ||||||
| modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= | modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= | ||||||
| modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= | modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= | ||||||
| modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= | modernc.org/libc v1.18.2 h1:3pMI+TsEHOlOohXIPvH8g3ITfuKe+1iNDgxJMvebp/E= | ||||||
| modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= | modernc.org/libc v1.18.2/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= | ||||||
| modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= |  | ||||||
| modernc.org/libc v1.16.19 h1:S8flPn5ZeXx6iw/8yNa986hwTQDrY8RXU7tObZuAozo= |  | ||||||
| modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= |  | ||||||
| modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= | modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= | ||||||
| modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8= |  | ||||||
| modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= | modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= | ||||||
| modernc.org/memory v1.1.1 h1:bDOL0DIDLQv7bWhP3gMvIrnoFw+Eo6F7a2QK9HPDiFU= | modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= | ||||||
| modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= | modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= | ||||||
|  | modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= | ||||||
|  | modernc.org/memory v1.3.0 h1:6ZIOLb5ronARPxEPxtZz1WbSRllgA09FCvNNyql5kZg= | ||||||
|  | modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= | ||||||
| modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= | modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= | ||||||
| modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= | modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= | ||||||
| modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= | modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= | ||||||
| modernc.org/sqlite v1.18.1 h1:ko32eKt3jf7eqIkCgPAeHMBXw3riNSLhl2f3loEF7o8= | modernc.org/sqlite v1.18.2 h1:S2uFiaNPd/vTAP/4EmyY8Qe2Quzu26A2L1e25xRNTio= | ||||||
| modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= | modernc.org/sqlite v1.18.2/go.mod h1:kvrTLEWgxUcHa2GfHBQtanR1H9ht3hTJNtKpzH9k1u0= | ||||||
| modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= |  | ||||||
| modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= | modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= | ||||||
| modernc.org/tcl v1.13.1 h1:npxzTwFTZYM8ghWicVIX1cRWzj7Nd8i6AqqX2p+IYao= | modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= | ||||||
| modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk= | modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= | ||||||
|  | modernc.org/tcl v1.13.2 h1:5PQgL/29XkQ9wsEmmNPjzKs+7iPCaYqUJAhzPvQbjDA= | ||||||
| modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= | modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= | ||||||
|  | modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= | ||||||
|  | modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= | ||||||
| modernc.org/z v1.5.1 h1:RTNHdsrOpeoSeOF4FbzTo8gBYByaJ5xT7NgZ9ZqRiJM= | modernc.org/z v1.5.1 h1:RTNHdsrOpeoSeOF4FbzTo8gBYByaJ5xT7NgZ9ZqRiJM= | ||||||
| mvdan.cc/xurls/v2 v2.3.0 h1:59Olnbt67UKpxF1EwVBopJvkSUBmgtb468E4GVWIZ1I= | mvdan.cc/xurls/v2 v2.4.0 h1:tzxjVAj+wSBmDcF6zBB7/myTy3gX9xvi8Tyr28AuQgc= | ||||||
| mvdan.cc/xurls/v2 v2.3.0/go.mod h1:AjuTy7gEiUArFMjgBBDU4SMxlfUYsRokpJQgNWOt3e4= | mvdan.cc/xurls/v2 v2.4.0/go.mod h1:+GEjq9uNjqs8LQfM9nVnM8rff0OQ5Iash5rzX+N1CSg= | ||||||
| rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= | 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/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= | ||||||
| rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= | rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= | ||||||
|  |  | ||||||
|  | @ -168,6 +168,7 @@ func ExtractPublished(i WithPublished) (time.Time, error) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ExtractIconURL extracts a URL to a supported image file from something like: | // ExtractIconURL extracts a URL to a supported image file from something like: | ||||||
|  | // | ||||||
| //	"icon": { | //	"icon": { | ||||||
| //	  "mediaType": "image/jpeg", | //	  "mediaType": "image/jpeg", | ||||||
| //	  "type": "Image", | //	  "type": "Image", | ||||||
|  | @ -204,6 +205,7 @@ func ExtractIconURL(i WithIcon) (*url.URL, error) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ExtractImageURL extracts a URL to a supported image file from something like: | // ExtractImageURL extracts a URL to a supported image file from something like: | ||||||
|  | // | ||||||
| //	"image": { | //	"image": { | ||||||
| //	  "mediaType": "image/jpeg", | //	  "mediaType": "image/jpeg", | ||||||
| //	  "type": "Image", | //	  "type": "Image", | ||||||
|  |  | ||||||
|  | @ -74,6 +74,8 @@ func (suite *AccountStandardTestSuite) SetupTest() { | ||||||
| 	suite.accountModule = account.New(suite.processor).(*account.Module) | 	suite.accountModule = account.New(suite.processor).(*account.Module) | ||||||
| 	testrig.StandardDBSetup(suite.db, nil) | 	testrig.StandardDBSetup(suite.db, nil) | ||||||
| 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | ||||||
|  | 
 | ||||||
|  | 	suite.NoError(suite.processor.Start()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *AccountStandardTestSuite) TearDownTest() { | func (suite *AccountStandardTestSuite) TearDownTest() { | ||||||
|  |  | ||||||
|  | @ -41,7 +41,8 @@ import ( | ||||||
| //	- multipart/form-data | //	- multipart/form-data | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: password | //	- | ||||||
|  | //		name: password | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Password of the account user, for confirmation. | //		description: Password of the account user, for confirmation. | ||||||
| //		type: string | //		type: string | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: The id of the requested account. | //		description: The id of the requested account. | ||||||
| //		in: path | //		in: path | ||||||
|  | @ -52,6 +53,7 @@ import ( | ||||||
| // | // | ||||||
| //	responses: | //	responses: | ||||||
| //		'200': | //		'200': | ||||||
|  | //			description: The requested account. | ||||||
| //			schema: | //			schema: | ||||||
| //				"$ref": "#/definitions/account" | //				"$ref": "#/definitions/account" | ||||||
| //		'400': | //		'400': | ||||||
|  |  | ||||||
|  | @ -46,55 +46,67 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: discoverable | //	- | ||||||
|  | //		name: discoverable | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Account should be made discoverable and shown in the profile directory (if enabled). | //		description: Account should be made discoverable and shown in the profile directory (if enabled). | ||||||
| //		type: boolean | //		type: boolean | ||||||
| // - name: bot | //	- | ||||||
|  | //		name: bot | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Account is flagged as a bot. | //		description: Account is flagged as a bot. | ||||||
| //		type: boolean | //		type: boolean | ||||||
| // - name: display_name | //	- | ||||||
|  | //		name: display_name | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: The display name to use for the account. | //		description: The display name to use for the account. | ||||||
| //		type: string | //		type: string | ||||||
| //		allowEmptyValue: true | //		allowEmptyValue: true | ||||||
| // - name: note | //	- | ||||||
|  | //		name: note | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Bio/description of this account. | //		description: Bio/description of this account. | ||||||
| //		type: string | //		type: string | ||||||
| //		allowEmptyValue: true | //		allowEmptyValue: true | ||||||
| // - name: avatar | //	- | ||||||
|  | //		name: avatar | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Avatar of the user. | //		description: Avatar of the user. | ||||||
| //		type: file | //		type: file | ||||||
| // - name: header | //	- | ||||||
|  | //		name: header | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Header of the user. | //		description: Header of the user. | ||||||
| //		type: file | //		type: file | ||||||
| // - name: locked | //	- | ||||||
|  | //		name: locked | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Require manual approval of follow requests. | //		description: Require manual approval of follow requests. | ||||||
| //		type: boolean | //		type: boolean | ||||||
| // - name: source[privacy] | //	- | ||||||
|  | //		name: source[privacy] | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Default post privacy for authored statuses. | //		description: Default post privacy for authored statuses. | ||||||
| //		type: string | //		type: string | ||||||
| // - name: source[sensitive] | //	- | ||||||
|  | //		name: source[sensitive] | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Mark authored statuses as sensitive by default. | //		description: Mark authored statuses as sensitive by default. | ||||||
| //		type: boolean | //		type: boolean | ||||||
| // - name: source[language] | //	- | ||||||
|  | //		name: source[language] | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Default language to use for authored statuses (ISO 6391). | //		description: Default language to use for authored statuses (ISO 6391). | ||||||
| //		type: string | //		type: string | ||||||
| // - name: source[status_format] | //	- | ||||||
|  | //		name: source[status_format] | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Default format to use for authored statuses (plain or markdown). | //		description: Default format to use for authored statuses (plain or markdown). | ||||||
| //		type: string | //		type: string | ||||||
| // - name: custom_css | //	- | ||||||
|  | //		name: custom_css | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Custom CSS to use when rendering this account's profile or statuses. | //			Custom CSS to use when rendering this account's profile or statuses. | ||||||
| //			String must be no more than 5,000 characters (~5kb). | //			String must be no more than 5,000 characters (~5kb). | ||||||
| //		type: string | //		type: string | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: The id of the account to block. | //		description: The id of the account to block. | ||||||
| //		in: path | //		in: path | ||||||
|  | @ -52,8 +53,7 @@ import ( | ||||||
| // | // | ||||||
| //	responses: | //	responses: | ||||||
| //		'200': | //		'200': | ||||||
| //     name: account relationship | //			description: Your relationship to the account. | ||||||
| //     description: Your relationship to this account. |  | ||||||
| //			schema: | //			schema: | ||||||
| //				"$ref": "#/definitions/accountRelationship" | //				"$ref": "#/definitions/accountRelationship" | ||||||
| //		'400': | //		'400': | ||||||
|  |  | ||||||
|  | @ -46,23 +46,24 @@ import ( | ||||||
| //	- application/x-www-form-urlencoded | //	- application/x-www-form-urlencoded | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		required: true | //		required: true | ||||||
| //		in: path | //		in: path | ||||||
| //		description: ID of the account to follow. | //		description: ID of the account to follow. | ||||||
| //		type: string | //		type: string | ||||||
| // - default: true | //	- | ||||||
| //   description: Show reblogs from this account. |  | ||||||
| //   in: formData |  | ||||||
| //		name: reblogs | //		name: reblogs | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //   x-go-name: Reblogs | //		default: true | ||||||
| // - default: false | //		description: Show reblogs from this account. | ||||||
|  | //		in: formData | ||||||
|  | //	- | ||||||
|  | //		default: false | ||||||
| //		description: Notify when this account posts. | //		description: Notify when this account posts. | ||||||
| //		in: formData | //		in: formData | ||||||
| //		name: notify | //		name: notify | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //   x-go-name: Notify |  | ||||||
| // | // | ||||||
| //	produces: | //	produces: | ||||||
| //	- application/json | //	- application/json | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Account ID. | //		description: Account ID. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Account ID. | //		description: Account ID. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -23,7 +23,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: array | //		type: array | ||||||
| //		items: | //		items: | ||||||
| //			type: string | //			type: string | ||||||
|  |  | ||||||
|  | @ -44,55 +44,64 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Account ID. | //		description: Account ID. | ||||||
| //		in: path | //		in: path | ||||||
| //		required: true | //		required: true | ||||||
| // - name: limit | //	- | ||||||
|  | //		name: limit | ||||||
| //		type: integer | //		type: integer | ||||||
| //		description: Number of statuses to return. | //		description: Number of statuses to return. | ||||||
| //		default: 30 | //		default: 30 | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: exclude_replies | //	- | ||||||
|  | //		name: exclude_replies | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //		description: Exclude statuses that are a reply to another status. | //		description: Exclude statuses that are a reply to another status. | ||||||
| //		default: false | //		default: false | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: exclude_reblogs | //	- | ||||||
|  | //		name: exclude_reblogs | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //		description: Exclude statuses that are a reblog/boost of another status. | //		description: Exclude statuses that are a reblog/boost of another status. | ||||||
| //		default: false | //		default: false | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: max_id | //	- | ||||||
|  | //		name: max_id | ||||||
| //		type: string | //		type: string | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Return only statuses *OLDER* than the given max status ID. | //			Return only statuses *OLDER* than the given max status ID. | ||||||
| //			The status with the specified ID will not be included in the response. | //			The status with the specified ID will not be included in the response. | ||||||
| //		in: query | //		in: query | ||||||
| // - name: min_id | //	- | ||||||
|  | //		name: min_id | ||||||
| //		type: string | //		type: string | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Return only statuses *NEWER* than the given min status ID. | //			Return only statuses *NEWER* than the given min status ID. | ||||||
| //			The status with the specified ID will not be included in the response. | //			The status with the specified ID will not be included in the response. | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: pinned_only | //	- | ||||||
|  | //		name: pinned_only | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //		description: Show only pinned statuses. In other words, exclude statuses that are not pinned to the given account ID. | //		description: Show only pinned statuses. In other words, exclude statuses that are not pinned to the given account ID. | ||||||
| //		default: false | //		default: false | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: only_media | //	- | ||||||
|  | //		name: only_media | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //		description: Show only statuses with media attachments. | //		description: Show only statuses with media attachments. | ||||||
| //		default: false | //		default: false | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: only_public | //	- | ||||||
|  | //		name: only_public | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //		description: Show only statuses with a privacy setting of 'public'. | //		description: Show only statuses with a privacy setting of 'public'. | ||||||
| //		default: false | //		default: false | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: The id of the account to unblock. | //		description: The id of the account to unblock. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: The id of the account to unfollow. | //		description: The id of the account to unfollow. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -45,18 +45,20 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		required: true | //		required: true | ||||||
| //		in: path | //		in: path | ||||||
| //		description: ID of the account. | //		description: ID of the account. | ||||||
| //		type: string | //		type: string | ||||||
| // - name: type | //	- | ||||||
|  | //		name: type | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: Type of action to be taken (`disable`, `silence`, or `suspend`). | ||||||
| //     Type of action to be taken. One of: disable, silence, suspend. |  | ||||||
| //		type: string | //		type: string | ||||||
| //		required: true | //		required: true | ||||||
| // - name: text | //	- | ||||||
|  | //		name: text | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Optional text describing why this action was taken. | //		description: Optional text describing why this action was taken. | ||||||
| //		type: string | //		type: string | ||||||
|  |  | ||||||
|  | @ -35,9 +35,9 @@ import ( | ||||||
| // | // | ||||||
| // Create one or more domain blocks, from a string or a file. | // Create one or more domain blocks, from a string or a file. | ||||||
| // | // | ||||||
| // Note that you have two options when using this endpoint: either you can set `import` to true | // You have two options when using this endpoint: either you can set `import` to `true` and | ||||||
| // and upload a file containing multiple domain blocks, JSON-formatted, or you can leave import as | // upload a file containing multiple domain blocks, JSON-formatted, or you can leave import as | ||||||
| // false, and just add one domain block. | // `false`, and just add one domain block. | ||||||
| // | // | ||||||
| // The format of the json file should be something like: `[{"domain":"example.org"},{"domain":"whatever.com","public_comment":"they smell"}]` | // The format of the json file should be something like: `[{"domain":"example.org"},{"domain":"whatever.com","public_comment":"they smell"}]` | ||||||
| // | // | ||||||
|  | @ -52,45 +52,52 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: import | //	- | ||||||
|  | //		name: import | ||||||
| //		in: query | //		in: query | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Signal that a list of domain blocks is being imported as a file. | //			Signal that a list of domain blocks is being imported as a file. | ||||||
| //     If set to true, then 'domains' must be present as a JSON-formatted file. | //			If set to `true`, then 'domains' must be present as a JSON-formatted file. | ||||||
| //     If set to false, then 'domains' will be ignored, and 'domain' must be present. | //			If set to `false`, then `domains` will be ignored, and `domain` must be present. | ||||||
| //		type: boolean | //		type: boolean | ||||||
| // - name: domains | //		default: false | ||||||
|  | //	- | ||||||
|  | //		name: domains | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			JSON-formatted list of domain blocks to import. | //			JSON-formatted list of domain blocks to import. | ||||||
| //     This is only used if `import` is set to true. | //			This is only used if `import` is set to `true`. | ||||||
| //		type: file | //		type: file | ||||||
| // - name: domain | //	- | ||||||
|  | //		name: domain | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Single domain to block. | //			Single domain to block. | ||||||
| //     Used only if `import` is not true. | //			Used only if `import` is not `true`. | ||||||
| //		type: string | //		type: string | ||||||
| // - name: obfuscate | //	- | ||||||
|  | //		name: obfuscate | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Obfuscate the name of the domain when serving it publicly. | //			Obfuscate the name of the domain when serving it publicly. | ||||||
| //     Eg., 'example.org' becomes something like 'ex***e.org'. | //			Eg., `example.org` becomes something like `ex***e.org`. | ||||||
| //     Used only if `import` is not true. | //			Used only if `import` is not `true`. | ||||||
| //		type: boolean | //		type: boolean | ||||||
| // - name: public_comment | //	- | ||||||
|  | //		name: public_comment | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Public comment about this domain block. | //			Public comment about this domain block. | ||||||
| //     Will be displayed alongside the domain block if you choose to share blocks. | //			This will be displayed alongside the domain block if you choose to share blocks. | ||||||
| //     Used only if `import` is not true. | //			Used only if `import` is not `true`. | ||||||
| //		type: string | //		type: string | ||||||
| // - name: private_comment | //	- | ||||||
|  | //		name: private_comment | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Private comment about this domain block. Will only be shown to other admins, so this | //			Private comment about this domain block. Will only be shown to other admins, so this | ||||||
| //			is a useful way of internally keeping track of why a certain domain ended up blocked. | //			is a useful way of internally keeping track of why a certain domain ended up blocked. | ||||||
| //     Used only if `import` is not true. | //			Used only if `import` is not `true`. | ||||||
| //		type: string | //		type: string | ||||||
| // | // | ||||||
| //	security: | //	security: | ||||||
|  | @ -99,9 +106,9 @@ import ( | ||||||
| // | // | ||||||
| //	responses: | //	responses: | ||||||
| //		'200': | //		'200': | ||||||
| //     description: |- | //			description: >- | ||||||
| //				The newly created domain block, if `import` != `true`. | //				The newly created domain block, if `import` != `true`. | ||||||
| //       Note that if a list has been imported, then an `array` of newly created domain blocks will be returned instead. | //				If a list has been imported, then an `array` of newly created domain blocks will be returned instead. | ||||||
| //			schema: | //			schema: | ||||||
| //				"$ref": "#/definitions/domainBlock" | //				"$ref": "#/definitions/domainBlock" | ||||||
| //		'400': | //		'400': | ||||||
|  |  | ||||||
|  | @ -41,7 +41,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: The id of the domain block. | //		description: The id of the domain block. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -42,7 +42,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: The id of the domain block. | //		description: The id of the domain block. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -41,13 +41,14 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: export | //	- | ||||||
|  | //		name: export | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //   description: |- | //		description: >- | ||||||
| //     If set to true, then each entry in the returned list of domain blocks will only consist of | //			If set to `true`, then each entry in the returned list of domain blocks will only consist of | ||||||
| //     the fields 'domain' and 'public_comment'. This is perfect for when you want to save and share | //			the fields `domain` and `public_comment`. This is perfect for when you want to save and share | ||||||
| //			a list of all the domains you have blocked on your instance, so that someone else can easily import them, | //			a list of all the domains you have blocked on your instance, so that someone else can easily import them, | ||||||
| //     but you don't need them to see the database IDs of your blocks, or private comments etc. | //			but you don't want them to see the database IDs of your blocks, or private comments etc. | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // | // | ||||||
|  |  | ||||||
|  | @ -47,17 +47,19 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: shortcode | //	- | ||||||
|  | //		name: shortcode | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			The code to use for the emoji, which will be used by instance denizens to select it. | //			The code to use for the emoji, which will be used by instance denizens to select it. | ||||||
| //			This must be unique on the instance. | //			This must be unique on the instance. | ||||||
| //		type: string | //		type: string | ||||||
| //		pattern: \w{2,30} | //		pattern: \w{2,30} | ||||||
| //		required: true | //		required: true | ||||||
| // - name: image | //	- | ||||||
|  | //		name: image | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			A png or gif image of the emoji. Animated pngs work too! | //			A png or gif image of the emoji. Animated pngs work too! | ||||||
| //			To ensure compatibility with other fedi implementations, emoji size limit is 50kb by default. | //			To ensure compatibility with other fedi implementations, emoji size limit is 50kb by default. | ||||||
| //		type: file | //		type: file | ||||||
|  | @ -83,7 +85,7 @@ import ( | ||||||
| //		'406': | //		'406': | ||||||
| //			description: not acceptable | //			description: not acceptable | ||||||
| //		'409': | //		'409': | ||||||
| //      description: conflict -- domain/shortcode combo for emoji already exists | //			description: conflict -- shortcode for this emoji is already in use | ||||||
| //		'500': | //		'500': | ||||||
| //			description: internal server error | //			description: internal server error | ||||||
| func (m *Module) EmojiCreatePOSTHandler(c *gin.Context) { | func (m *Module) EmojiCreatePOSTHandler(c *gin.Context) { | ||||||
|  |  | ||||||
|  | @ -53,8 +53,9 @@ import ( | ||||||
| // | // | ||||||
| //	responses: | //	responses: | ||||||
| //		'200': | //		'200': | ||||||
| //     description: |- | //			description: >- | ||||||
| //      Echos the number of days requested. The cleanup is performed asynchronously after the request completes. | //				Echos the number of days requested. | ||||||
|  | //				The cleanup is performed asynchronously after the request completes. | ||||||
| //		'400': | //		'400': | ||||||
| //			description: bad request | //			description: bad request | ||||||
| //		'401': | //		'401': | ||||||
|  |  | ||||||
|  | @ -48,21 +48,24 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: limit | //	- | ||||||
|  | //		name: limit | ||||||
| //		type: integer | //		type: integer | ||||||
| //		description: Number of blocks to return. | //		description: Number of blocks to return. | ||||||
| //		default: 20 | //		default: 20 | ||||||
| //		in: query | //		in: query | ||||||
| // - name: max_id | //	- | ||||||
|  | //		name: max_id | ||||||
| //		type: string | //		type: string | ||||||
| //   description: |- | //		description: >- | ||||||
| //     Return only blocks *OLDER* than the given max block ID. | //			Return only blocks *OLDER* than the given block ID. | ||||||
| //			The block with the specified ID will not be included in the response. | //			The block with the specified ID will not be included in the response. | ||||||
| //		in: query | //		in: query | ||||||
| // - name: since_id | //	- | ||||||
|  | //		name: since_id | ||||||
| //		type: string | //		type: string | ||||||
| //   description: |- | //		description: >- | ||||||
| //     Return only blocks *NEWER* than the given since block ID. | //		  Return only blocks *NEWER* than the given block ID. | ||||||
| //		  The block with the specified ID will not be included in the response. | //		  The block with the specified ID will not be included in the response. | ||||||
| //		in: query | //		in: query | ||||||
| // | // | ||||||
|  |  | ||||||
|  | @ -11,7 +11,70 @@ import ( | ||||||
| 	"github.com/superseriousbusiness/gotosocial/internal/oauth" | 	"github.com/superseriousbusiness/gotosocial/internal/oauth" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // FavouritesGETHandler handles GETting favourites. | // FavouritesGETHandler swagger:operation GET /api/v1/favourites favouritesGet | ||||||
|  | // | ||||||
|  | // Get an array of statuses that the requesting account has favourited. | ||||||
|  | // | ||||||
|  | // The next and previous queries can be parsed from the returned Link header. | ||||||
|  | // Example: | ||||||
|  | // | ||||||
|  | // ``` | ||||||
|  | // <https://example.org/api/v1/favourites?limit=80&max_id=01FC0SKA48HNSVR6YKZCQGS2V8>; rel="next", <https://example.org/api/v1/favourites?limit=80&min_id=01FC0SKW5JK2Q4EVAV2B462YY0>; rel="prev" | ||||||
|  | // ```` | ||||||
|  | // | ||||||
|  | //	--- | ||||||
|  | //	tags: | ||||||
|  | //	- favourites | ||||||
|  | // | ||||||
|  | //	produces: | ||||||
|  | //	- application/json | ||||||
|  | // | ||||||
|  | //	parameters: | ||||||
|  | //	- | ||||||
|  | //		name: limit | ||||||
|  | //		type: integer | ||||||
|  | //		description: Number of statuses to return. | ||||||
|  | //		default: 20 | ||||||
|  | //		in: query | ||||||
|  | //	- | ||||||
|  | //		name: max_id | ||||||
|  | //		type: string | ||||||
|  | //		description: >- | ||||||
|  | //			Return only favourited statuses *OLDER* than the given favourite ID. | ||||||
|  | //			The status with the corresponding fave ID will not be included in the response. | ||||||
|  | //		in: query | ||||||
|  | //	- | ||||||
|  | //		name: min_id | ||||||
|  | //		type: string | ||||||
|  | //		description: >- | ||||||
|  | //			Return only favourited statuses *NEWER* than the given favourite ID. | ||||||
|  | //			The status with the corresponding fave ID will not be included in the response. | ||||||
|  | //		in: query | ||||||
|  | // | ||||||
|  | //	security: | ||||||
|  | //	- OAuth2 Bearer: | ||||||
|  | //		- read:favourites | ||||||
|  | // | ||||||
|  | //	responses: | ||||||
|  | //		'200': | ||||||
|  | //			headers: | ||||||
|  | //				Link: | ||||||
|  | //					type: string | ||||||
|  | //					description: Links to the next and previous queries. | ||||||
|  | //			schema: | ||||||
|  | //				type: array | ||||||
|  | //				items: | ||||||
|  | //					"$ref": "#/definitions/status" | ||||||
|  | //		'400': | ||||||
|  | //			description: bad request | ||||||
|  | //		'401': | ||||||
|  | //			description: unauthorized | ||||||
|  | //		'404': | ||||||
|  | //			description: not found | ||||||
|  | //		'406': | ||||||
|  | //			description: not acceptable | ||||||
|  | //		'500': | ||||||
|  | //			description: internal server error | ||||||
| func (m *Module) FavouritesGETHandler(c *gin.Context) { | func (m *Module) FavouritesGETHandler(c *gin.Context) { | ||||||
| 	authed, err := oauth.Authed(c, true, true, true, true) | 	authed, err := oauth.Authed(c, true, true, true, true) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  |  | ||||||
|  | @ -42,7 +42,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: account_id | //	- | ||||||
|  | //		name: account_id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: ID of the account requesting to follow you. | //		description: ID of the account requesting to follow you. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -88,6 +88,8 @@ func (suite *FollowRequestStandardTestSuite) SetupTest() { | ||||||
| 	suite.followRequestModule = followrequest.New(suite.processor).(*followrequest.Module) | 	suite.followRequestModule = followrequest.New(suite.processor).(*followrequest.Module) | ||||||
| 	testrig.StandardDBSetup(suite.db, nil) | 	testrig.StandardDBSetup(suite.db, nil) | ||||||
| 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | ||||||
|  | 
 | ||||||
|  | 	suite.NoError(suite.processor.Start()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *FollowRequestStandardTestSuite) TearDownTest() { | func (suite *FollowRequestStandardTestSuite) TearDownTest() { | ||||||
|  |  | ||||||
|  | @ -30,13 +30,7 @@ import ( | ||||||
| // FollowRequestGETHandler swagger:operation GET /api/v1/follow_requests getFollowRequests | // FollowRequestGETHandler swagger:operation GET /api/v1/follow_requests getFollowRequests | ||||||
| // | // | ||||||
| // Get an array of accounts that have requested to follow you. | // Get an array of accounts that have requested to follow you. | ||||||
| // | // Accounts will be sorted in order of follow request date descending (newest first). | ||||||
| // The next and previous queries can be parsed from the returned Link header. |  | ||||||
| // Example: |  | ||||||
| // |  | ||||||
| // ``` |  | ||||||
| // <https://example.org/api/v1/follow_requests?limit=80&max_id=01FC0SKA48HNSVR6YKZCQGS2V8>; rel="next", <https://example.org/api/v1/follow_requests?limit=80&min_id=01FC0SKW5JK2Q4EVAV2B462YY0>; rel="prev" |  | ||||||
| // ```` |  | ||||||
| // | // | ||||||
| //	--- | //	--- | ||||||
| //	tags: | //	tags: | ||||||
|  | @ -46,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: limit | //	- | ||||||
|  | //		name: limit | ||||||
| //		type: integer | //		type: integer | ||||||
| //		description: Number of accounts to return. | //		description: Number of accounts to return. | ||||||
| //		default: 40 | //		default: 40 | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: account_id | //	- | ||||||
|  | //		name: account_id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: ID of the account requesting to follow you. | //		description: ID of the account requesting to follow you. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -32,10 +32,6 @@ import ( | ||||||
| // | // | ||||||
| // View instance information. | // View instance information. | ||||||
| // | // | ||||||
| // This is mostly provided for Mastodon application compatibility, since many apps that work with Mastodon use `/api/v1/instance` to inform their connection parameters. |  | ||||||
| // |  | ||||||
| // However, it can also be used by other instances for gathering instance information and representing instances in some UI or other. |  | ||||||
| // |  | ||||||
| //	--- | //	--- | ||||||
| //	tags: | //	tags: | ||||||
| //	- instance | //	- instance | ||||||
|  |  | ||||||
|  | @ -46,47 +46,55 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: title | //	- | ||||||
|  | //		name: title | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Title to use for the instance. | //		description: Title to use for the instance. | ||||||
| //		type: string | //		type: string | ||||||
| //		maximum: 40 | //		maximum: 40 | ||||||
| //		allowEmptyValue: true | //		allowEmptyValue: true | ||||||
| // - name: contact_username | //	- | ||||||
|  | //		name: contact_username | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Username of the contact account. | //			Username of the contact account. | ||||||
| //			This must be the username of an instance admin. | //			This must be the username of an instance admin. | ||||||
| //		type: string | //		type: string | ||||||
| //		allowEmptyValue: true | //		allowEmptyValue: true | ||||||
| // - name: contact_email | //	- | ||||||
|  | //		name: contact_email | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Email address to use as the instance contact. | //		description: Email address to use as the instance contact. | ||||||
| //		type: string | //		type: string | ||||||
| //		allowEmptyValue: true | //		allowEmptyValue: true | ||||||
| // - name: short_description | //	- | ||||||
|  | //		name: short_description | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Short description of the instance. | //		description: Short description of the instance. | ||||||
| //		type: string | //		type: string | ||||||
| //		maximum: 500 | //		maximum: 500 | ||||||
| //		allowEmptyValue: true | //		allowEmptyValue: true | ||||||
| // - name: description | //	- | ||||||
|  | //		name: description | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Longer description of the instance. | //		description: Longer description of the instance. | ||||||
| //		type: string | //		type: string | ||||||
| //		maximum: 5000 | //		maximum: 5000 | ||||||
| //		allowEmptyValue: true | //		allowEmptyValue: true | ||||||
| // - name: terms | //	- | ||||||
|  | //		name: terms | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Terms and conditions of the instance. | //		description: Terms and conditions of the instance. | ||||||
| //		type: string | //		type: string | ||||||
| //		maximum: 5000 | //		maximum: 5000 | ||||||
| //		allowEmptyValue: true | //		allowEmptyValue: true | ||||||
| // - name: avatar | //	- | ||||||
|  | //		name: avatar | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Avatar of the instance. | //		description: Avatar of the instance. | ||||||
| //		type: file | //		type: file | ||||||
| // - name: header | //	- | ||||||
|  | //		name: header | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: Header of the instance. | //		description: Header of the instance. | ||||||
| //		type: file | //		type: file | ||||||
|  |  | ||||||
|  | @ -40,36 +40,46 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: filter | //	- | ||||||
|  | //		name: filter | ||||||
| //		type: string | //		type: string | ||||||
| //		description: |- | //		description: |- | ||||||
| //     Comma-separated list of filters to apply to results. Recognized values are: | //			Comma-separated list of filters to apply to results. Recognized filters are: | ||||||
| //     'open' -- include peers that are not suspended or silenced | //				- `open` -- include peers that are not suspended or silenced | ||||||
| //     'suspended' -- include peers that have been suspended. | //				- `suspended` -- include peers that have been suspended. | ||||||
| //     If filter is 'open', only instances that haven't been suspended or silenced will be returned. | // | ||||||
| //     If filter is 'suspended', only suspended instances will be shown. | //			If filter is `open`, only instances that haven't been suspended or silenced will be returned. | ||||||
| //     If filter is 'open,suspended', then all known instances will be returned. | // | ||||||
| //     If filter is an empty string or not set, then 'open' will be assumed as the default. | //			If filter is `suspended`, only suspended instances will be shown. | ||||||
|  | // | ||||||
|  | //			If filter is `open,suspended`, then all known instances will be returned. | ||||||
|  | // | ||||||
|  | //			If filter is an empty string or not set, then `open` will be assumed as the default. | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
|  | //		default: "open" | ||||||
| // | // | ||||||
| //	responses: | //	responses: | ||||||
| //		'200': | //		'200': | ||||||
| //     description: |- | //			description: >- | ||||||
| //				If no filter parameter is provided, or filter is empty, then a legacy, | //				If no filter parameter is provided, or filter is empty, then a legacy, | ||||||
| //				Mastodon-API compatible response will be returned. This will consist of | //				Mastodon-API compatible response will be returned. This will consist of | ||||||
| //       just a 'flat' array of strings like `["example.com", "example.org"]`. | //				just a 'flat' array of strings like `["example.com", "example.org"]`, | ||||||
|  | //				which corresponds to domains this instance peers with. | ||||||
|  | // | ||||||
| // | // | ||||||
| //				If a filter parameter is provided, then an array of objects with at least | //				If a filter parameter is provided, then an array of objects with at least | ||||||
| //				a `domain` key set on each object will be returned. | //				a `domain` key set on each object will be returned. | ||||||
| // | // | ||||||
|  | // | ||||||
| //				Domains that are silenced or suspended will also have a key | //				Domains that are silenced or suspended will also have a key | ||||||
| //       'suspended_at' or 'silenced_at' that contains an iso8601 date string. | //				`suspended_at` or `silenced_at` that contains an iso8601 date string. | ||||||
| //				If one of these keys is not present on the domain object, it is open. | //				If one of these keys is not present on the domain object, it is open. | ||||||
| //				Suspended instances may in some cases be obfuscated, which means they | //				Suspended instances may in some cases be obfuscated, which means they | ||||||
| //       will have some letters replaced by '*' to make it more difficult for | //				will have some letters replaced by `*` to make it more difficult for | ||||||
| //				bad actors to target instances with harassment. | //				bad actors to target instances with harassment. | ||||||
| // | // | ||||||
|  | // | ||||||
| //				Whether a flat response or a more detailed response is returned, domains | //				Whether a flat response or a more detailed response is returned, domains | ||||||
| //				will be sorted alphabetically by hostname. | //				will be sorted alphabetically by hostname. | ||||||
| //			schema: | //			schema: | ||||||
|  |  | ||||||
|  | @ -46,26 +46,31 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: api version | //	- | ||||||
|  | //		name: api_version | ||||||
| //		type: string | //		type: string | ||||||
| //		in: path | //		in: path | ||||||
| //   description: Version of the API to use. Must be one of v1 or v2. | //		description: Version of the API to use. Must be either `v1` or `v2`. | ||||||
| //		required: true | //		required: true | ||||||
| // - name: description | //	- | ||||||
|  | //		name: description | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Image or media description to use as alt-text on the attachment. | //			Image or media description to use as alt-text on the attachment. | ||||||
| //     This is very useful for users of screenreaders. | //			This is very useful for users of screenreaders! | ||||||
| //			May or may not be required, depending on your instance settings. | //			May or may not be required, depending on your instance settings. | ||||||
| //		type: string | //		type: string | ||||||
| // - name: focus | //	- | ||||||
|  | //		name: focus | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Focus of the media file. | //			Focus of the media file. | ||||||
| //			If present, it should be in the form of two comma-separated floats between -1 and 1. | //			If present, it should be in the form of two comma-separated floats between -1 and 1. | ||||||
| //			For example: `-0.5,0.25`. | //			For example: `-0.5,0.25`. | ||||||
| //		type: string | //		type: string | ||||||
| // - name: file | //		default: "0,0" | ||||||
|  | //	- | ||||||
|  | //		name: file | ||||||
| //		in: formData | //		in: formData | ||||||
| //		description: The media attachment to upload. | //		description: The media attachment to upload. | ||||||
| //		type: file | //		type: file | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		description: id of the attachment | //		description: id of the attachment | ||||||
| //		type: string | //		type: string | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -53,27 +53,31 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		description: id of the attachment to update | //		description: id of the attachment to update | ||||||
| //		type: string | //		type: string | ||||||
| //		in: path | //		in: path | ||||||
| //		required: true | //		required: true | ||||||
| // - name: description | //	- | ||||||
|  | //		name: description | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Image or media description to use as alt-text on the attachment. | //			Image or media description to use as alt-text on the attachment. | ||||||
| //     This is very useful for users of screenreaders. | //			This is very useful for users of screenreaders! | ||||||
| //			May or may not be required, depending on your instance settings. | //			May or may not be required, depending on your instance settings. | ||||||
| //		type: string | //		type: string | ||||||
| //		allowEmptyValue: true | //		allowEmptyValue: true | ||||||
| // - name: focus | //	- | ||||||
|  | //		name: focus | ||||||
| //		in: formData | //		in: formData | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Focus of the media file. | //			Focus of the media file. | ||||||
| //			If present, it should be in the form of two comma-separated floats between -1 and 1. | //			If present, it should be in the form of two comma-separated floats between -1 and 1. | ||||||
| //			For example: `-0.5,0.25`. | //			For example: `-0.5,0.25`. | ||||||
| //		type: string | //		type: string | ||||||
| //		allowEmptyValue: true | //		allowEmptyValue: true | ||||||
|  | //		default: "0,0" | ||||||
| // | // | ||||||
| //	security: | //	security: | ||||||
| //	- OAuth2 Bearer: | //	- OAuth2 Bearer: | ||||||
|  |  | ||||||
|  | @ -27,7 +27,37 @@ import ( | ||||||
| 	"github.com/superseriousbusiness/gotosocial/internal/oauth" | 	"github.com/superseriousbusiness/gotosocial/internal/oauth" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // NotificationsClearPOSTHandler clears all the notifications | // NotificationsClearPOSTHandler swagger:operation POST /api/v1/notifications clearNotifications | ||||||
|  | // | ||||||
|  | // Clear/delete all notifications for currently authorized user. | ||||||
|  | // | ||||||
|  | // Will return an empty object `{}` to indicate success. | ||||||
|  | // | ||||||
|  | //	--- | ||||||
|  | //	tags: | ||||||
|  | //	- notifications | ||||||
|  | // | ||||||
|  | //	produces: | ||||||
|  | //	- application/json | ||||||
|  | // | ||||||
|  | //	security: | ||||||
|  | //	- OAuth2 Bearer: | ||||||
|  | //		- read:notifications | ||||||
|  | // | ||||||
|  | //	responses: | ||||||
|  | //		'200': | ||||||
|  | //			schema: | ||||||
|  | //				type: object | ||||||
|  | //		'400': | ||||||
|  | //			description: bad request | ||||||
|  | //		'401': | ||||||
|  | //			description: unauthorized | ||||||
|  | //		'404': | ||||||
|  | //			description: not found | ||||||
|  | //		'406': | ||||||
|  | //			description: not acceptable | ||||||
|  | //		'500': | ||||||
|  | //			description: internal server error | ||||||
| func (m *Module) NotificationsClearPOSTHandler(c *gin.Context) { | func (m *Module) NotificationsClearPOSTHandler(c *gin.Context) { | ||||||
| 	authed, err := oauth.Authed(c, true, true, true, true) | 	authed, err := oauth.Authed(c, true, true, true, true) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  |  | ||||||
|  | @ -35,6 +35,13 @@ import ( | ||||||
| // | // | ||||||
| // The notifications will be returned in descending chronological order (newest first), with sequential IDs (bigger = newer). | // The notifications will be returned in descending chronological order (newest first), with sequential IDs (bigger = newer). | ||||||
| // | // | ||||||
|  | // The next and previous queries can be parsed from the returned Link header. | ||||||
|  | // Example: | ||||||
|  | // | ||||||
|  | // ``` | ||||||
|  | // <https://example.org/api/v1/notifications?limit=80&max_id=01FC0SKA48HNSVR6YKZCQGS2V8>; rel="next", <https://example.org/api/v1/notifications?limit=80&since_id=01FC0SKW5JK2Q4EVAV2B462YY0>; rel="prev" | ||||||
|  | // ```` | ||||||
|  | // | ||||||
| //	--- | //	--- | ||||||
| //	tags: | //	tags: | ||||||
| //	- notifications | //	- notifications | ||||||
|  | @ -43,27 +50,31 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: limit | //	- | ||||||
|  | //		name: limit | ||||||
| //		type: integer | //		type: integer | ||||||
| //		description: Number of notifications to return. | //		description: Number of notifications to return. | ||||||
| //		default: 20 | //		default: 20 | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: exclude_types | //	- | ||||||
|  | //		name: exclude_types | ||||||
| //		type: array | //		type: array | ||||||
| //		items: | //		items: | ||||||
| //			type: string | //			type: string | ||||||
| //			description: Array of types of notifications to exclude (follow, favourite, reblog, mention, poll, follow_request) | //			description: Array of types of notifications to exclude (follow, favourite, reblog, mention, poll, follow_request) | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: max_id | //	- | ||||||
|  | //		name: max_id | ||||||
| //		type: string | //		type: string | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Return only notifications *OLDER* than the given max status ID. | //			Return only notifications *OLDER* than the given max status ID. | ||||||
| //			The status with the specified ID will not be included in the response. | //			The status with the specified ID will not be included in the response. | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: since_id | //	- | ||||||
|  | //		name: since_id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: |- | //		description: |- | ||||||
| //			Return only notifications *NEWER* than the given since status ID. | //			Return only notifications *NEWER* than the given since status ID. | ||||||
|  | @ -77,6 +88,10 @@ import ( | ||||||
| // | // | ||||||
| //	responses: | //	responses: | ||||||
| //		'200': | //		'200': | ||||||
|  | //			headers: | ||||||
|  | //				Link: | ||||||
|  | //					type: string | ||||||
|  | //					description: Links to the next and previous queries. | ||||||
| //			name: notifications | //			name: notifications | ||||||
| //			description: Array of notifications. | //			description: Array of notifications. | ||||||
| //			schema: | //			schema: | ||||||
|  |  | ||||||
|  | @ -88,6 +88,8 @@ func (suite *StatusStandardTestSuite) SetupTest() { | ||||||
| 	suite.emailSender = testrig.NewEmailSender("../../../../web/template/", nil) | 	suite.emailSender = testrig.NewEmailSender("../../../../web/template/", nil) | ||||||
| 	suite.processor = testrig.NewTestProcessor(suite.db, suite.storage, suite.federator, suite.emailSender, suite.mediaManager, clientWorker, fedWorker) | 	suite.processor = testrig.NewTestProcessor(suite.db, suite.storage, suite.federator, suite.emailSender, suite.mediaManager, clientWorker, fedWorker) | ||||||
| 	suite.statusModule = status.New(suite.processor).(*status.Module) | 	suite.statusModule = status.New(suite.processor).(*status.Module) | ||||||
|  | 
 | ||||||
|  | 	suite.NoError(suite.processor.Start()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *StatusStandardTestSuite) TearDownTest() { | func (suite *StatusStandardTestSuite) TearDownTest() { | ||||||
|  |  | ||||||
|  | @ -33,7 +33,7 @@ import ( | ||||||
| // Reblog/boost status with the given ID. | // Reblog/boost status with the given ID. | ||||||
| // | // | ||||||
| // If the target status is rebloggable/boostable, it will be shared with your followers. | // If the target status is rebloggable/boostable, it will be shared with your followers. | ||||||
| // This is equivalent to an activitypub 'announce' activity. | // This is equivalent to an ActivityPub 'Announce' activity. | ||||||
| // | // | ||||||
| //	--- | //	--- | ||||||
| //	tags: | //	tags: | ||||||
|  | @ -43,7 +43,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Target status ID. | //		description: Target status ID. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Target status ID. | //		description: Target status ID. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -42,7 +42,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Target status ID. | //		description: Target status ID. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -43,7 +43,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Target status ID. | //		description: Target status ID. | ||||||
| //		in: path | //		in: path | ||||||
|  | @ -55,7 +56,7 @@ import ( | ||||||
| // | // | ||||||
| //	responses: | //	responses: | ||||||
| //		'200': | //		'200': | ||||||
| //     description: "The newly deleted status." | //			description: "The status that was just deleted." | ||||||
| //			schema: | //			schema: | ||||||
| //				"$ref": "#/definitions/status" | //				"$ref": "#/definitions/status" | ||||||
| //		'400': | //		'400': | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Target status ID. | //		description: Target status ID. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Target status ID. | //		description: Target status ID. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Target status ID. | //		description: Target status ID. | ||||||
| //		in: path | //		in: path | ||||||
|  | @ -52,7 +53,7 @@ import ( | ||||||
| // | // | ||||||
| //	responses: | //	responses: | ||||||
| //		'200': | //		'200': | ||||||
| //     description: "The requested created status." | //			description: "The requested status." | ||||||
| //			schema: | //			schema: | ||||||
| //				"$ref": "#/definitions/status" | //				"$ref": "#/definitions/status" | ||||||
| //		'400': | //		'400': | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Target status ID. | //		description: Target status ID. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -40,7 +40,8 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: id | //	- | ||||||
|  | //		name: id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Target status ID. | //		description: Target status ID. | ||||||
| //		in: path | //		in: path | ||||||
|  |  | ||||||
|  | @ -46,12 +46,14 @@ var wsUpgrader = websocket.Upgrader{ | ||||||
| //	- wss | //	- wss | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: access_token | //	- | ||||||
|  | //		name: access_token | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Access token for the requesting account. | //		description: Access token for the requesting account. | ||||||
| //		in: query | //		in: query | ||||||
| //		required: true | //		required: true | ||||||
| // - name: stream | //	- | ||||||
|  | //		name: stream | ||||||
| //		type: string | //		type: string | ||||||
| //		description: |- | //		description: |- | ||||||
| //			Type of stream to request. | //			Type of stream to request. | ||||||
|  | @ -67,6 +69,7 @@ var wsUpgrader = websocket.Upgrader{ | ||||||
| //			`direct`: receive updates for direct messages. | //			`direct`: receive updates for direct messages. | ||||||
| //		in: query | //		in: query | ||||||
| //		required: true | //		required: true | ||||||
|  | // | ||||||
| //	security: | //	security: | ||||||
| //	- OAuth2 Bearer: | //	- OAuth2 Bearer: | ||||||
| //		- read:streaming | //		- read:streaming | ||||||
|  |  | ||||||
|  | @ -51,33 +51,38 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: max_id | //	- | ||||||
|  | //		name: max_id | ||||||
| //		type: string | //		type: string | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Return only statuses *OLDER* than the given max status ID. | //			Return only statuses *OLDER* than the given max status ID. | ||||||
| //			The status with the specified ID will not be included in the response. | //			The status with the specified ID will not be included in the response. | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: since_id | //	- | ||||||
|  | //		name: since_id | ||||||
| //		type: string | //		type: string | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Return only statuses *NEWER* than the given since status ID. | //			Return only statuses *NEWER* than the given since status ID. | ||||||
| //			The status with the specified ID will not be included in the response. | //			The status with the specified ID will not be included in the response. | ||||||
| //		in: query | //		in: query | ||||||
| // - name: min_id | //	- | ||||||
|  | //		name: min_id | ||||||
| //		type: string | //		type: string | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Return only statuses *NEWER* than the given since status ID. | //			Return only statuses *NEWER* than the given since status ID. | ||||||
| //			The status with the specified ID will not be included in the response. | //			The status with the specified ID will not be included in the response. | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: limit | //	- | ||||||
|  | //		name: limit | ||||||
| //		type: integer | //		type: integer | ||||||
| //		description: Number of statuses to return. | //		description: Number of statuses to return. | ||||||
| //		default: 20 | //		default: 20 | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: local | //	- | ||||||
|  | //		name: local | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //		description: Show only statuses posted by local accounts. | //		description: Show only statuses posted by local accounts. | ||||||
| //		default: false | //		default: false | ||||||
|  |  | ||||||
|  | @ -51,33 +51,38 @@ import ( | ||||||
| //	- application/json | //	- application/json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: max_id | //	- | ||||||
|  | //		name: max_id | ||||||
| //		type: string | //		type: string | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Return only statuses *OLDER* than the given max status ID. | //			Return only statuses *OLDER* than the given max status ID. | ||||||
| //			The status with the specified ID will not be included in the response. | //			The status with the specified ID will not be included in the response. | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: since_id | //	- | ||||||
|  | //		name: since_id | ||||||
| //		type: string | //		type: string | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Return only statuses *NEWER* than the given since status ID. | //			Return only statuses *NEWER* than the given since status ID. | ||||||
| //			The status with the specified ID will not be included in the response. | //			The status with the specified ID will not be included in the response. | ||||||
| //		in: query | //		in: query | ||||||
| // - name: min_id | //	- | ||||||
|  | //		name: min_id | ||||||
| //		type: string | //		type: string | ||||||
| //   description: |- | //		description: >- | ||||||
| //			Return only statuses *NEWER* than the given since status ID. | //			Return only statuses *NEWER* than the given since status ID. | ||||||
| //			The status with the specified ID will not be included in the response. | //			The status with the specified ID will not be included in the response. | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: limit | //	- | ||||||
|  | //		name: limit | ||||||
| //		type: integer | //		type: integer | ||||||
| //		description: Number of statuses to return. | //		description: Number of statuses to return. | ||||||
| //		default: 20 | //		default: 20 | ||||||
| //		in: query | //		in: query | ||||||
| //		required: false | //		required: false | ||||||
| // - name: local | //	- | ||||||
|  | //		name: local | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //		description: Show only statuses posted by local accounts. | //		description: Show only statuses posted by local accounts. | ||||||
| //		default: false | //		default: false | ||||||
|  |  | ||||||
|  | @ -76,6 +76,8 @@ func (suite *UserStandardTestSuite) SetupTest() { | ||||||
| 	suite.userModule = user.New(suite.processor).(*user.Module) | 	suite.userModule = user.New(suite.processor).(*user.Module) | ||||||
| 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | ||||||
| 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | ||||||
|  | 
 | ||||||
|  | 	suite.NoError(suite.processor.Start()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *UserStandardTestSuite) TearDownTest() { | func (suite *UserStandardTestSuite) TearDownTest() { | ||||||
|  |  | ||||||
|  | @ -168,15 +168,10 @@ type StatusCreateRequest struct { | ||||||
| 	// in: formData | 	// in: formData | ||||||
| 	SpoilerText string `form:"spoiler_text" json:"spoiler_text" xml:"spoiler_text"` | 	SpoilerText string `form:"spoiler_text" json:"spoiler_text" xml:"spoiler_text"` | ||||||
| 	// Visibility of the posted status. | 	// Visibility of the posted status. | ||||||
| 	// enum: |  | ||||||
| 	// - public |  | ||||||
| 	// - unlisted |  | ||||||
| 	// - private |  | ||||||
| 	// - direct |  | ||||||
| 	// in: formData | 	// in: formData | ||||||
| 	Visibility Visibility `form:"visibility" json:"visibility" xml:"visibility"` | 	Visibility Visibility `form:"visibility" json:"visibility" xml:"visibility"` | ||||||
| 	// ISO 8601 Datetime at which to schedule a status. | 	// ISO 8601 Datetime at which to schedule a status. | ||||||
| 	// Providing this paramter will cause ScheduledStatus to be returned instead of Status. | 	// Providing this parameter will cause ScheduledStatus to be returned instead of Status. | ||||||
| 	// Must be at least 5 minutes in the future. | 	// Must be at least 5 minutes in the future. | ||||||
| 	// in: formData | 	// in: formData | ||||||
| 	ScheduledAt string `form:"scheduled_at" json:"scheduled_at" xml:"scheduled_at"` | 	ScheduledAt string `form:"scheduled_at" json:"scheduled_at" xml:"scheduled_at"` | ||||||
|  | @ -184,22 +179,14 @@ type StatusCreateRequest struct { | ||||||
| 	// in: formData | 	// in: formData | ||||||
| 	Language string `form:"language" json:"language" xml:"language"` | 	Language string `form:"language" json:"language" xml:"language"` | ||||||
| 	// Format to use when parsing this status. | 	// Format to use when parsing this status. | ||||||
| 	// enum: |  | ||||||
| 	// - plain |  | ||||||
| 	// - markdown |  | ||||||
| 	// in: formData | 	// in: formData | ||||||
| 	Format StatusFormat `form:"format" json:"format" xml:"format"` | 	Format StatusFormat `form:"format" json:"format" xml:"format"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Visibility models the visibility of a status. | // Visibility models the visibility of a status. | ||||||
| // | // | ||||||
| // swagger:model statusVisibility | // swagger:enum statusVisibility | ||||||
| // enum: | // swagger:type string | ||||||
| // - public |  | ||||||
| // - unlisted |  | ||||||
| // - private |  | ||||||
| // - mutuals_only |  | ||||||
| // - direct |  | ||||||
| type Visibility string | type Visibility string | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
|  | @ -242,11 +229,8 @@ type AdvancedVisibilityFlagsForm struct { | ||||||
| // StatusFormat is the format in which to parse the submitted status. | // StatusFormat is the format in which to parse the submitted status. | ||||||
| // Can be either plain or markdown. Empty will default to plain. | // Can be either plain or markdown. Empty will default to plain. | ||||||
| // | // | ||||||
| // swagger:model statusFormat | // swagger:enum statusFormat | ||||||
| // enum: | // swagger:type string | ||||||
| // - plain |  | ||||||
| // - markdown |  | ||||||
| // example: plain |  | ||||||
| type StatusFormat string | type StatusFormat string | ||||||
| 
 | 
 | ||||||
| // Format to use when parsing submitted status into an html-formatted status | // Format to use when parsing submitted status into an html-formatted status | ||||||
|  |  | ||||||
|  | @ -26,7 +26,6 @@ import ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // ActivityPubAcceptHeaders represents the Accept headers mentioned here: | // ActivityPubAcceptHeaders represents the Accept headers mentioned here: | ||||||
| // |  | ||||||
| var ActivityPubAcceptHeaders = []MIME{ | var ActivityPubAcceptHeaders = []MIME{ | ||||||
| 	AppActivityJSON, | 	AppActivityJSON, | ||||||
| 	AppActivityLDJSON, | 	AppActivityLDJSON, | ||||||
|  |  | ||||||
|  | @ -84,6 +84,8 @@ func (suite *EmojiGetTestSuite) SetupTest() { | ||||||
| 	suite.securityModule = security.New(suite.db, suite.oauthServer).(*security.Module) | 	suite.securityModule = security.New(suite.db, suite.oauthServer).(*security.Module) | ||||||
| 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | ||||||
| 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | ||||||
|  | 
 | ||||||
|  | 	suite.NoError(suite.processor.Start()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *EmojiGetTestSuite) TearDownTest() { | func (suite *EmojiGetTestSuite) TearDownTest() { | ||||||
|  |  | ||||||
|  | @ -93,6 +93,7 @@ func (suite *InboxPostTestSuite) TestPostBlock() { | ||||||
| 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | ||||||
| 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | ||||||
| 	userModule := user.New(processor).(*user.Module) | 	userModule := user.New(processor).(*user.Module) | ||||||
|  | 	suite.NoError(processor.Start()) | ||||||
| 
 | 
 | ||||||
| 	// setup request | 	// setup request | ||||||
| 	recorder := httptest.NewRecorder() | 	recorder := httptest.NewRecorder() | ||||||
|  | @ -196,6 +197,7 @@ func (suite *InboxPostTestSuite) TestPostUnblock() { | ||||||
| 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | ||||||
| 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | ||||||
| 	userModule := user.New(processor).(*user.Module) | 	userModule := user.New(processor).(*user.Module) | ||||||
|  | 	suite.NoError(processor.Start()) | ||||||
| 
 | 
 | ||||||
| 	// setup request | 	// setup request | ||||||
| 	recorder := httptest.NewRecorder() | 	recorder := httptest.NewRecorder() | ||||||
|  | @ -300,6 +302,7 @@ func (suite *InboxPostTestSuite) TestPostUpdate() { | ||||||
| 	}() | 	}() | ||||||
| 
 | 
 | ||||||
| 	userModule := user.New(processor).(*user.Module) | 	userModule := user.New(processor).(*user.Module) | ||||||
|  | 	suite.NoError(processor.Start()) | ||||||
| 
 | 
 | ||||||
| 	// setup request | 	// setup request | ||||||
| 	recorder := httptest.NewRecorder() | 	recorder := httptest.NewRecorder() | ||||||
|  | @ -430,8 +433,7 @@ func (suite *InboxPostTestSuite) TestPostDelete() { | ||||||
| 	federator := testrig.NewTestFederator(suite.db, tc, suite.storage, suite.mediaManager, fedWorker) | 	federator := testrig.NewTestFederator(suite.db, tc, suite.storage, suite.mediaManager, fedWorker) | ||||||
| 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | ||||||
| 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | ||||||
| 	err = processor.Start() | 	suite.NoError(processor.Start()) | ||||||
| 	suite.NoError(err) |  | ||||||
| 	userModule := user.New(processor).(*user.Module) | 	userModule := user.New(processor).(*user.Module) | ||||||
| 
 | 
 | ||||||
| 	// setup request | 	// setup request | ||||||
|  |  | ||||||
|  | @ -49,21 +49,25 @@ import ( | ||||||
| //	- application/activity+json | //	- application/activity+json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: username | //	- | ||||||
|  | //		name: username | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Username of the account. | //		description: Username of the account. | ||||||
| //		in: path | //		in: path | ||||||
| //		required: true | //		required: true | ||||||
| // - name: page | //	- | ||||||
|  | //		name: page | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //		description: Return response as a CollectionPage. | //		description: Return response as a CollectionPage. | ||||||
| //		in: query | //		in: query | ||||||
| //		default: false | //		default: false | ||||||
| // - name: min_id | //	- | ||||||
|  | //		name: min_id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Minimum ID of the next status, used for paging. | //		description: Minimum ID of the next status, used for paging. | ||||||
| //		in: query | //		in: query | ||||||
| // - name: max_id | //	- | ||||||
|  | //		name: max_id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Maximum ID of the next status, used for paging. | //		description: Maximum ID of the next status, used for paging. | ||||||
| //		in: query | //		in: query | ||||||
|  |  | ||||||
|  | @ -103,6 +103,7 @@ func (suite *OutboxGetTestSuite) TestGetOutboxFirstPage() { | ||||||
| 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | ||||||
| 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | ||||||
| 	userModule := user.New(processor).(*user.Module) | 	userModule := user.New(processor).(*user.Module) | ||||||
|  | 	suite.NoError(processor.Start()) | ||||||
| 
 | 
 | ||||||
| 	// setup request | 	// setup request | ||||||
| 	recorder := httptest.NewRecorder() | 	recorder := httptest.NewRecorder() | ||||||
|  | @ -161,6 +162,7 @@ func (suite *OutboxGetTestSuite) TestGetOutboxNextPage() { | ||||||
| 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | ||||||
| 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | ||||||
| 	userModule := user.New(processor).(*user.Module) | 	userModule := user.New(processor).(*user.Module) | ||||||
|  | 	suite.NoError(processor.Start()) | ||||||
| 
 | 
 | ||||||
| 	// setup request | 	// setup request | ||||||
| 	recorder := httptest.NewRecorder() | 	recorder := httptest.NewRecorder() | ||||||
|  |  | ||||||
|  | @ -49,27 +49,32 @@ import ( | ||||||
| //	- application/activity+json | //	- application/activity+json | ||||||
| // | // | ||||||
| //	parameters: | //	parameters: | ||||||
| // - name: username | //	- | ||||||
|  | //		name: username | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Username of the account. | //		description: Username of the account. | ||||||
| //		in: path | //		in: path | ||||||
| //		required: true | //		required: true | ||||||
| // - name: status | //	- | ||||||
|  | //		name: status | ||||||
| //		type: string | //		type: string | ||||||
| //		description: ID of the status. | //		description: ID of the status. | ||||||
| //		in: path | //		in: path | ||||||
| //		required: true | //		required: true | ||||||
| // - name: page | //	- | ||||||
|  | //		name: page | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //		description: Return response as a CollectionPage. | //		description: Return response as a CollectionPage. | ||||||
| //		in: query | //		in: query | ||||||
| //		default: false | //		default: false | ||||||
| // - name: only_other_accounts | //	- | ||||||
|  | //		name: only_other_accounts | ||||||
| //		type: boolean | //		type: boolean | ||||||
| //		description: Return replies only from accounts other than the status owner. | //		description: Return replies only from accounts other than the status owner. | ||||||
| //		in: query | //		in: query | ||||||
| //		default: false | //		default: false | ||||||
| // - name: min_id | //	- | ||||||
|  | //		name: min_id | ||||||
| //		type: string | //		type: string | ||||||
| //		description: Minimum ID of the next status, used for paging. | //		description: Minimum ID of the next status, used for paging. | ||||||
| //		in: query | //		in: query | ||||||
|  |  | ||||||
|  | @ -112,6 +112,7 @@ func (suite *RepliesGetTestSuite) TestGetRepliesNext() { | ||||||
| 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | ||||||
| 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | ||||||
| 	userModule := user.New(processor).(*user.Module) | 	userModule := user.New(processor).(*user.Module) | ||||||
|  | 	suite.NoError(processor.Start()) | ||||||
| 
 | 
 | ||||||
| 	// setup request | 	// setup request | ||||||
| 	recorder := httptest.NewRecorder() | 	recorder := httptest.NewRecorder() | ||||||
|  | @ -179,6 +180,7 @@ func (suite *RepliesGetTestSuite) TestGetRepliesLast() { | ||||||
| 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | 	emailSender := testrig.NewEmailSender("../../../../web/template/", nil) | ||||||
| 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | 	processor := testrig.NewTestProcessor(suite.db, suite.storage, federator, emailSender, suite.mediaManager, clientWorker, fedWorker) | ||||||
| 	userModule := user.New(processor).(*user.Module) | 	userModule := user.New(processor).(*user.Module) | ||||||
|  | 	suite.NoError(processor.Start()) | ||||||
| 
 | 
 | ||||||
| 	// setup request | 	// setup request | ||||||
| 	recorder := httptest.NewRecorder() | 	recorder := httptest.NewRecorder() | ||||||
|  |  | ||||||
|  | @ -93,6 +93,8 @@ func (suite *UserStandardTestSuite) SetupTest() { | ||||||
| 	suite.securityModule = security.New(suite.db, suite.oauthServer).(*security.Module) | 	suite.securityModule = security.New(suite.db, suite.oauthServer).(*security.Module) | ||||||
| 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | ||||||
| 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | ||||||
|  | 
 | ||||||
|  | 	suite.NoError(suite.processor.Start()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *UserStandardTestSuite) TearDownTest() { | func (suite *UserStandardTestSuite) TearDownTest() { | ||||||
|  |  | ||||||
|  | @ -98,11 +98,6 @@ func (suite *UserGetTestSuite) TestGetUser() { | ||||||
| // TestGetUserPublicKeyDeleted checks whether the public key of a deleted account can still be dereferenced. | // TestGetUserPublicKeyDeleted checks whether the public key of a deleted account can still be dereferenced. | ||||||
| // This is needed by remote instances for authenticating delete requests and stuff like that. | // This is needed by remote instances for authenticating delete requests and stuff like that. | ||||||
| func (suite *UserGetTestSuite) TestGetUserPublicKeyDeleted() { | func (suite *UserGetTestSuite) TestGetUserPublicKeyDeleted() { | ||||||
| 	if err := suite.processor.Start(); err != nil { |  | ||||||
| 		suite.FailNow(err.Error()) |  | ||||||
| 	} |  | ||||||
| 	defer suite.processor.Stop() |  | ||||||
| 
 |  | ||||||
| 	userModule := user.New(suite.processor).(*user.Module) | 	userModule := user.New(suite.processor).(*user.Module) | ||||||
| 	targetAccount := suite.testAccounts["local_account_1"] | 	targetAccount := suite.testAccounts["local_account_1"] | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -96,6 +96,8 @@ func (suite *WebfingerStandardTestSuite) SetupTest() { | ||||||
| 	suite.securityModule = security.New(suite.db, suite.oauthServer).(*security.Module) | 	suite.securityModule = security.New(suite.db, suite.oauthServer).(*security.Module) | ||||||
| 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | ||||||
| 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | 	testrig.StandardStorageSetup(suite.storage, "../../../../testrig/media") | ||||||
|  | 
 | ||||||
|  | 	suite.NoError(suite.processor.Start()) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (suite *WebfingerStandardTestSuite) TearDownTest() { | func (suite *WebfingerStandardTestSuite) TearDownTest() { | ||||||
|  |  | ||||||
|  | @ -39,7 +39,9 @@ import ( | ||||||
| // For example, a GET to `https://goblin.technology/.well-known/webfinger?resource=acct:tobi@goblin.technology` would return: | // For example, a GET to `https://goblin.technology/.well-known/webfinger?resource=acct:tobi@goblin.technology` would return: | ||||||
| // | // | ||||||
| // ``` | // ``` | ||||||
|  | // | ||||||
| //	{"subject":"acct:tobi@goblin.technology","aliases":["https://goblin.technology/users/tobi","https://goblin.technology/@tobi"],"links":[{"rel":"http://webfinger.net/rel/profile-page","type":"text/html","href":"https://goblin.technology/@tobi"},{"rel":"self","type":"application/activity+json","href":"https://goblin.technology/users/tobi"}]} | //	{"subject":"acct:tobi@goblin.technology","aliases":["https://goblin.technology/users/tobi","https://goblin.technology/@tobi"],"links":[{"rel":"http://webfinger.net/rel/profile-page","type":"text/html","href":"https://goblin.technology/@tobi"},{"rel":"self","type":"application/activity+json","href":"https://goblin.technology/users/tobi"}]} | ||||||
|  | // | ||||||
| // ``` | // ``` | ||||||
| // | // | ||||||
| // See: https://webfinger.net/ | // See: https://webfinger.net/ | ||||||
|  |  | ||||||
|  | @ -34,6 +34,7 @@ import ( | ||||||
| type WorkerPool[MsgType any] struct { | type WorkerPool[MsgType any] struct { | ||||||
| 	workers runners.WorkerPool | 	workers runners.WorkerPool | ||||||
| 	process func(context.Context, MsgType) error | 	process func(context.Context, MsgType) error | ||||||
|  | 	nw, nq  int | ||||||
| 	prefix  string // contains type prefix for logging | 	prefix  string // contains type prefix for logging | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -57,8 +58,9 @@ func NewWorkerPool[MsgType any](workers int, queueRatio int) *WorkerPool[MsgType | ||||||
| 	_, msgType = path.Split(msgType) | 	_, msgType = path.Split(msgType) | ||||||
| 
 | 
 | ||||||
| 	w := &WorkerPool[MsgType]{ | 	w := &WorkerPool[MsgType]{ | ||||||
| 		workers: runners.NewWorkerPool(workers, workers*queueRatio), |  | ||||||
| 		process: nil, | 		process: nil, | ||||||
|  | 		nw:      workers, | ||||||
|  | 		nq:      workers * queueRatio, | ||||||
| 		prefix:  fmt.Sprintf("worker.Worker[%s]", msgType), | 		prefix:  fmt.Sprintf("worker.Worker[%s]", msgType), | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -82,7 +84,7 @@ func (w *WorkerPool[MsgType]) Start() error { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Attempt to start pool | 	// Attempt to start pool | ||||||
| 	if !w.workers.Start() { | 	if !w.workers.Start(w.nw, w.nq) { | ||||||
| 		return errors.New("failed to start Worker pool") | 		return errors.New("failed to start Worker pool") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -111,8 +113,8 @@ func (w *WorkerPool[MsgType]) SetProcessor(fn func(context.Context, MsgType) err | ||||||
| 
 | 
 | ||||||
| // Queue will queue provided message to be processed with there's a free worker. | // Queue will queue provided message to be processed with there's a free worker. | ||||||
| func (w *WorkerPool[MsgType]) Queue(msg MsgType) { | func (w *WorkerPool[MsgType]) Queue(msg MsgType) { | ||||||
| 	log.Tracef("%s queueing message (workers=%d queue=%d): %+v", | 	log.Tracef("%s queueing message (queue=%d): %+v", | ||||||
| 		w.prefix, w.workers.Workers(), w.workers.Queue(), msg, | 		w.prefix, w.workers.Queue(), msg, | ||||||
| 	) | 	) | ||||||
| 	w.workers.Enqueue(func(ctx context.Context) { | 	w.workers.Enqueue(func(ctx context.Context) { | ||||||
| 		if err := w.process(ctx, msg); err != nil { | 		if err := w.process(ctx, msg); err != nil { | ||||||
|  |  | ||||||
|  | @ -282,7 +282,7 @@ func sqliteConn(ctx context.Context) (*DBConn, error) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func pgConn(ctx context.Context) (*DBConn, error) { | func pgConn(ctx context.Context) (*DBConn, error) { | ||||||
| 	opts, err := deriveBunDBPGOptions() | 	opts, err := deriveBunDBPGOptions() //nolint:contextcheck | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("could not create bundb postgres options: %s", err) | 		return nil, fmt.Errorf("could not create bundb postgres options: %s", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -55,7 +55,7 @@ func (conn *DBConn) RunInTx(ctx context.Context, fn func(bun.Tx) error) db.Error | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// Finally, commit | 		// Finally, commit | ||||||
| 		err = tx.Commit() | 		err = tx.Commit() //nolint:contextcheck | ||||||
| 		done = true | 		done = true | ||||||
| 		return err | 		return err | ||||||
| 	}()) | 	}()) | ||||||
|  |  | ||||||
|  | @ -30,7 +30,7 @@ type MediaAttachment struct { | ||||||
| 	URL               string           `validate:"required_without=RemoteURL,omitempty,url" bun:",nullzero"`                           // Where can the attachment be retrieved on *this* server | 	URL               string           `validate:"required_without=RemoteURL,omitempty,url" bun:",nullzero"`                           // Where can the attachment be retrieved on *this* server | ||||||
| 	RemoteURL         string           `validate:"required_without=URL,omitempty,url" bun:",nullzero"`                                 // Where can the attachment be retrieved on a remote server (empty for local media) | 	RemoteURL         string           `validate:"required_without=URL,omitempty,url" bun:",nullzero"`                                 // Where can the attachment be retrieved on a remote server (empty for local media) | ||||||
| 	Type              FileType         `validate:"oneof=Image Gif Audio Video Unknown" bun:",nullzero,notnull"`                        // Type of file (image/gif/audio/video) | 	Type              FileType         `validate:"oneof=Image Gif Audio Video Unknown" bun:",nullzero,notnull"`                        // Type of file (image/gif/audio/video) | ||||||
| 	FileMeta          FileMeta         `validate:"required" bun:",embed:filemeta_,nullzero,notnull"`                                   // Metadata about the file | 	FileMeta          FileMeta         `validate:"required" bun:",embed:,nullzero,notnull"`                                            // Metadata about the file | ||||||
| 	AccountID         string           `validate:"required,ulid" bun:"type:CHAR(26),nullzero,notnull"`                                 // To which account does this attachment belong | 	AccountID         string           `validate:"required,ulid" bun:"type:CHAR(26),nullzero,notnull"`                                 // To which account does this attachment belong | ||||||
| 	Account           *Account         `validate:"-" bun:"rel:has-one"`                                                                // Account corresponding to accountID | 	Account           *Account         `validate:"-" bun:"rel:has-one"`                                                                // Account corresponding to accountID | ||||||
| 	Description       string           `validate:"-" bun:""`                                                                           // Description of the attachment (for screenreaders) | 	Description       string           `validate:"-" bun:""`                                                                           // Description of the attachment (for screenreaders) | ||||||
|  |  | ||||||
|  | @ -32,7 +32,7 @@ type MediaAttachment struct { | ||||||
| 	URL               string           `validate:"required_without=RemoteURL,omitempty,url" bun:",nullzero"`                           // Where can the attachment be retrieved on *this* server | 	URL               string           `validate:"required_without=RemoteURL,omitempty,url" bun:",nullzero"`                           // Where can the attachment be retrieved on *this* server | ||||||
| 	RemoteURL         string           `validate:"required_without=URL,omitempty,url" bun:",nullzero"`                                 // Where can the attachment be retrieved on a remote server (empty for local media) | 	RemoteURL         string           `validate:"required_without=URL,omitempty,url" bun:",nullzero"`                                 // Where can the attachment be retrieved on a remote server (empty for local media) | ||||||
| 	Type              FileType         `validate:"oneof=Image Gif Audio Video Unknown" bun:",nullzero,notnull"`                        // Type of file (image/gif/audio/video) | 	Type              FileType         `validate:"oneof=Image Gif Audio Video Unknown" bun:",nullzero,notnull"`                        // Type of file (image/gif/audio/video) | ||||||
| 	FileMeta          FileMeta         `validate:"required" bun:",embed:filemeta_,nullzero,notnull"`                                   // Metadata about the file | 	FileMeta          FileMeta         `validate:"required" bun:",embed:,nullzero,notnull"`                                            // Metadata about the file | ||||||
| 	AccountID         string           `validate:"required,ulid" bun:"type:CHAR(26),nullzero,notnull"`                                 // To which account does this attachment belong | 	AccountID         string           `validate:"required,ulid" bun:"type:CHAR(26),nullzero,notnull"`                                 // To which account does this attachment belong | ||||||
| 	Account           *Account         `validate:"-" bun:"rel:has-one"`                                                                // Account corresponding to accountID | 	Account           *Account         `validate:"-" bun:"rel:has-one"`                                                                // Account corresponding to accountID | ||||||
| 	Description       string           `validate:"-" bun:""`                                                                           // Description of the attachment (for screenreaders) | 	Description       string           `validate:"-" bun:""`                                                                           // Description of the attachment (for screenreaders) | ||||||
|  |  | ||||||
|  | @ -300,6 +300,7 @@ func (f *federatingDB) collectIRIs(ctx context.Context, iris []*url.URL) (vocab. | ||||||
| //   - The target account that owns the inbox or URI being interacted with. | //   - The target account that owns the inbox or URI being interacted with. | ||||||
| //   - The requesting account that posted to the inbox. | //   - The requesting account that posted to the inbox. | ||||||
| //   - A channel that messages for the processor can be placed into. | //   - A channel that messages for the processor can be placed into. | ||||||
|  | // | ||||||
| // If a value is not present, nil will be returned for it. It's up to the caller to check this and respond appropriately. | // If a value is not present, nil will be returned for it. It's up to the caller to check this and respond appropriately. | ||||||
| func extractFromCtx(ctx context.Context) (receivingAccount, requestingAccount *gtsmodel.Account) { | func extractFromCtx(ctx context.Context) (receivingAccount, requestingAccount *gtsmodel.Account) { | ||||||
| 	receivingAccountI := ctx.Value(ap.ContextReceivingAccount) | 	receivingAccountI := ctx.Value(ap.ContextReceivingAccount) | ||||||
|  |  | ||||||
|  | @ -32,7 +32,7 @@ type MediaAttachment struct { | ||||||
| 	URL               string           `validate:"required_without=RemoteURL,omitempty,url" bun:",nullzero"`                           // Where can the attachment be retrieved on *this* server | 	URL               string           `validate:"required_without=RemoteURL,omitempty,url" bun:",nullzero"`                           // Where can the attachment be retrieved on *this* server | ||||||
| 	RemoteURL         string           `validate:"required_without=URL,omitempty,url" bun:",nullzero"`                                 // Where can the attachment be retrieved on a remote server (empty for local media) | 	RemoteURL         string           `validate:"required_without=URL,omitempty,url" bun:",nullzero"`                                 // Where can the attachment be retrieved on a remote server (empty for local media) | ||||||
| 	Type              FileType         `validate:"oneof=Image Gifv Audio Video Unknown" bun:",nullzero,notnull"`                       // Type of file (image/gifv/audio/video) | 	Type              FileType         `validate:"oneof=Image Gifv Audio Video Unknown" bun:",nullzero,notnull"`                       // Type of file (image/gifv/audio/video) | ||||||
| 	FileMeta          FileMeta         `validate:"required" bun:",embed:filemeta_,nullzero,notnull"`                                   // Metadata about the file | 	FileMeta          FileMeta         `validate:"required" bun:",embed:,nullzero,notnull"`                                            // Metadata about the file | ||||||
| 	AccountID         string           `validate:"required,ulid" bun:"type:CHAR(26),nullzero,notnull"`                                 // To which account does this attachment belong | 	AccountID         string           `validate:"required,ulid" bun:"type:CHAR(26),nullzero,notnull"`                                 // To which account does this attachment belong | ||||||
| 	Account           *Account         `validate:"-" bun:"rel:belongs-to,join:account_id=id"`                                          // Account corresponding to accountID | 	Account           *Account         `validate:"-" bun:"rel:belongs-to,join:account_id=id"`                                          // Account corresponding to accountID | ||||||
| 	Description       string           `validate:"-" bun:""`                                                                           // Description of the attachment (for screenreaders) | 	Description       string           `validate:"-" bun:""`                                                                           // Description of the attachment (for screenreaders) | ||||||
|  |  | ||||||
|  | @ -15,6 +15,7 @@ | ||||||
|    You should have received a copy of the GNU Affero General Public License |    You should have received a copy of the GNU Affero General Public License | ||||||
|    along with this program.  If not, see <http://www.gnu.org/licenses/>. |    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||||
| */ | */ | ||||||
|  | 
 | ||||||
| package oauth_test | package oauth_test | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  |  | ||||||
|  | @ -19,6 +19,8 @@ | ||||||
| package status_test | package status_test | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
|  | 	"context" | ||||||
|  | 
 | ||||||
| 	"github.com/stretchr/testify/suite" | 	"github.com/stretchr/testify/suite" | ||||||
| 	"github.com/superseriousbusiness/gotosocial/internal/concurrency" | 	"github.com/superseriousbusiness/gotosocial/internal/concurrency" | ||||||
| 	"github.com/superseriousbusiness/gotosocial/internal/db" | 	"github.com/superseriousbusiness/gotosocial/internal/db" | ||||||
|  | @ -85,6 +87,8 @@ func (suite *StatusStandardTestSuite) SetupTest() { | ||||||
| 	suite.mediaManager = testrig.NewTestMediaManager(suite.db, suite.storage) | 	suite.mediaManager = testrig.NewTestMediaManager(suite.db, suite.storage) | ||||||
| 	suite.federator = testrig.NewTestFederator(suite.db, suite.tc, suite.storage, suite.mediaManager, fedWorker) | 	suite.federator = testrig.NewTestFederator(suite.db, suite.tc, suite.storage, suite.mediaManager, fedWorker) | ||||||
| 	suite.status = status.New(suite.db, suite.typeConverter, suite.clientWorker, processing.GetParseMentionFunc(suite.db, suite.federator)) | 	suite.status = status.New(suite.db, suite.typeConverter, suite.clientWorker, processing.GetParseMentionFunc(suite.db, suite.federator)) | ||||||
|  | 	suite.clientWorker.SetProcessor(func(ctx context.Context, msg messages.FromClientAPI) error { return nil }) | ||||||
|  | 	suite.NoError(suite.clientWorker.Start()) | ||||||
| 
 | 
 | ||||||
| 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | 	testrig.StandardDBSetup(suite.db, suite.testAccounts) | ||||||
| 	testrig.StandardStorageSetup(suite.storage, "../../../testrig/media") | 	testrig.StandardStorageSetup(suite.storage, "../../../testrig/media") | ||||||
|  |  | ||||||
|  | @ -21,7 +21,7 @@ package transport | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io/ioutil" | 	"io" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"net/url" | 	"net/url" | ||||||
| 
 | 
 | ||||||
|  | @ -71,5 +71,5 @@ func (t *transport) Dereference(ctx context.Context, iri *url.URL) ([]byte, erro | ||||||
| 		return nil, fmt.Errorf("GET request to %s failed (%d): %s", iriStr, rsp.StatusCode, rsp.Status) | 		return nil, fmt.Errorf("GET request to %s failed (%d): %s", iriStr, rsp.StatusCode, rsp.Status) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return ioutil.ReadAll(rsp.Body) | 	return io.ReadAll(rsp.Body) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -23,7 +23,7 @@ import ( | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io/ioutil" | 	"io" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"net/url" | 	"net/url" | ||||||
| 	"strings" | 	"strings" | ||||||
|  | @ -106,7 +106,7 @@ func dereferenceByAPIV1Instance(ctx context.Context, t *transport, iri *url.URL) | ||||||
| 		return nil, fmt.Errorf("GET request to %s failed (%d): %s", iriStr, resp.StatusCode, resp.Status) | 		return nil, fmt.Errorf("GET request to %s failed (%d): %s", iriStr, resp.StatusCode, resp.Status) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	b, err := ioutil.ReadAll(resp.Body) | 	b, err := io.ReadAll(resp.Body) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} else if len(b) == 0 { | 	} else if len(b) == 0 { | ||||||
|  | @ -257,7 +257,7 @@ func callNodeInfoWellKnown(ctx context.Context, t *transport, iri *url.URL) (*ur | ||||||
| 		return nil, fmt.Errorf("callNodeInfoWellKnown: GET request to %s failed (%d): %s", iriStr, resp.StatusCode, resp.Status) | 		return nil, fmt.Errorf("callNodeInfoWellKnown: GET request to %s failed (%d): %s", iriStr, resp.StatusCode, resp.Status) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	b, err := ioutil.ReadAll(resp.Body) | 	b, err := io.ReadAll(resp.Body) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} else if len(b) == 0 { | 	} else if len(b) == 0 { | ||||||
|  | @ -309,7 +309,7 @@ func callNodeInfo(ctx context.Context, t *transport, iri *url.URL) (*apimodel.No | ||||||
| 		return nil, fmt.Errorf("callNodeInfo: GET request to %s failed (%d): %s", iriStr, resp.StatusCode, resp.Status) | 		return nil, fmt.Errorf("callNodeInfo: GET request to %s failed (%d): %s", iriStr, resp.StatusCode, resp.Status) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	b, err := ioutil.ReadAll(resp.Body) | 	b, err := io.ReadAll(resp.Body) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} else if len(b) == 0 { | 	} else if len(b) == 0 { | ||||||
|  |  | ||||||
|  | @ -21,7 +21,7 @@ package transport | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io/ioutil" | 	"io" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 
 | 
 | ||||||
| 	"github.com/superseriousbusiness/gotosocial/internal/api" | 	"github.com/superseriousbusiness/gotosocial/internal/api" | ||||||
|  | @ -56,5 +56,5 @@ func (t *transport) Finger(ctx context.Context, targetUsername string, targetDom | ||||||
| 		return nil, fmt.Errorf("GET request to %s failed (%d): %s", urlStr, rsp.StatusCode, rsp.Status) | 		return nil, fmt.Errorf("GET request to %s failed (%d): %s", urlStr, rsp.StatusCode, rsp.Status) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return ioutil.ReadAll(rsp.Body) | 	return io.ReadAll(rsp.Body) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -19,8 +19,8 @@ | ||||||
| package typeutils | package typeutils | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"io/ioutil" |  | ||||||
| 	"math/rand" | 	"math/rand" | ||||||
|  | 	"os" | ||||||
| 	"path/filepath" | 	"path/filepath" | ||||||
| 	"strings" | 	"strings" | ||||||
| 
 | 
 | ||||||
|  | @ -45,7 +45,7 @@ func populateDefaultAvatars() (defaultAvatars []string) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	defaultAvatarsAbsFilePath := filepath.Join(webAssetsAbsFilePath, "default_avatars") | 	defaultAvatarsAbsFilePath := filepath.Join(webAssetsAbsFilePath, "default_avatars") | ||||||
| 	defaultAvatarFiles, err := ioutil.ReadDir(defaultAvatarsAbsFilePath) | 	defaultAvatarFiles, err := os.ReadDir(defaultAvatarsAbsFilePath) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Warnf("populateDefaultAvatars: error reading default avatars at %s: %s", defaultAvatarsAbsFilePath, err) | 		log.Warnf("populateDefaultAvatars: error reading default avatars at %s: %s", defaultAvatarsAbsFilePath, err) | ||||||
| 		return | 		return | ||||||
|  | @ -58,7 +58,7 @@ func populateDefaultAvatars() (defaultAvatars []string) { | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// ignore files bigger than 50kb | 		// ignore files bigger than 50kb | ||||||
| 		if f.Size() > 50000 { | 		if i, err := f.Info(); err != nil || i.Size() > 50000 { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -135,14 +135,14 @@ func (m *Module) returnAPProfile(ctx context.Context, c *gin.Context, username s | ||||||
| 
 | 
 | ||||||
| 	user, errWithCode := m.processor.GetFediUser(ctx, username, c.Request.URL) | 	user, errWithCode := m.processor.GetFediUser(ctx, username, c.Request.URL) | ||||||
| 	if errWithCode != nil { | 	if errWithCode != nil { | ||||||
| 		api.ErrorHandler(c, errWithCode, m.processor.InstanceGet) | 		api.ErrorHandler(c, errWithCode, m.processor.InstanceGet) //nolint:contextcheck | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	b, mErr := json.Marshal(user) | 	b, mErr := json.Marshal(user) | ||||||
| 	if mErr != nil { | 	if mErr != nil { | ||||||
| 		err := fmt.Errorf("could not marshal json: %s", mErr) | 		err := fmt.Errorf("could not marshal json: %s", mErr) | ||||||
| 		api.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGet) | 		api.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGet) //nolint:contextcheck | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -137,14 +137,14 @@ func (m *Module) returnAPStatus(ctx context.Context, c *gin.Context, username st | ||||||
| 
 | 
 | ||||||
| 	status, errWithCode := m.processor.GetFediStatus(ctx, username, statusID, c.Request.URL) | 	status, errWithCode := m.processor.GetFediStatus(ctx, username, statusID, c.Request.URL) | ||||||
| 	if errWithCode != nil { | 	if errWithCode != nil { | ||||||
| 		api.ErrorHandler(c, errWithCode, m.processor.InstanceGet) | 		api.ErrorHandler(c, errWithCode, m.processor.InstanceGet) //nolint:contextcheck | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	b, mErr := json.Marshal(status) | 	b, mErr := json.Marshal(status) | ||||||
| 	if mErr != nil { | 	if mErr != nil { | ||||||
| 		err := fmt.Errorf("could not marshal json: %s", mErr) | 		err := fmt.Errorf("could not marshal json: %s", mErr) | ||||||
| 		api.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGet) | 		api.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGet) //nolint:contextcheck | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -30,8 +30,11 @@ import ( | ||||||
| // CreateMultipartFormData is a handy function for taking a fieldname and a filename, and creating a multipart form bytes buffer | // CreateMultipartFormData is a handy function for taking a fieldname and a filename, and creating a multipart form bytes buffer | ||||||
| // with the file contents set in the given fieldname. The extraFields param can be used to add extra FormFields to the request, as necessary. | // with the file contents set in the given fieldname. The extraFields param can be used to add extra FormFields to the request, as necessary. | ||||||
| // The returned bytes.Buffer b can be used like so: | // The returned bytes.Buffer b can be used like so: | ||||||
|  | // | ||||||
| //	httptest.NewRequest(http.MethodPost, "https://example.org/whateverpath", bytes.NewReader(b.Bytes())) | //	httptest.NewRequest(http.MethodPost, "https://example.org/whateverpath", bytes.NewReader(b.Bytes())) | ||||||
|  | // | ||||||
| // The returned *multipart.Writer w can be used to set the content type of the request, like so: | // The returned *multipart.Writer w can be used to set the content type of the request, like so: | ||||||
|  | // | ||||||
| //	req.Header.Set("Content-Type", w.FormDataContentType()) | //	req.Header.Set("Content-Type", w.FormDataContentType()) | ||||||
| func CreateMultipartFormData(fieldName string, fileName string, extraFields map[string]string) (bytes.Buffer, *multipart.Writer, error) { | func CreateMultipartFormData(fieldName string, fileName string, extraFields map[string]string) (bytes.Buffer, *multipart.Writer, error) { | ||||||
| 	var b bytes.Buffer | 	var b bytes.Buffer | ||||||
|  |  | ||||||
							
								
								
									
										7
									
								
								vendor/codeberg.org/gruf/go-cache/v2/scheduler.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/codeberg.org/gruf/go-cache/v2/scheduler.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -8,10 +8,13 @@ import ( | ||||||
| 
 | 
 | ||||||
| // scheduler is the global cache runtime scheduler | // scheduler is the global cache runtime scheduler | ||||||
| // for handling regular cache evictions. | // for handling regular cache evictions. | ||||||
| var scheduler = sched.NewScheduler(5) | var scheduler sched.Scheduler | ||||||
| 
 | 
 | ||||||
| // schedule will given sweep  routine to the global scheduler, and start global scheduler. | // schedule will given sweep  routine to the global scheduler, and start global scheduler. | ||||||
| func schedule(sweep func(time.Time), freq time.Duration) func() { | func schedule(sweep func(time.Time), freq time.Duration) func() { | ||||||
| 	go scheduler.Start() // does nothing if already running | 	if !scheduler.Running() { | ||||||
|  | 		// ensure running | ||||||
|  | 		_ = scheduler.Start() | ||||||
|  | 	} | ||||||
| 	return scheduler.Schedule(sched.NewJob(sweep).Every(freq)) | 	return scheduler.Schedule(sched.NewJob(sweep).Every(freq)) | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								vendor/codeberg.org/gruf/go-kv/field.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/codeberg.org/gruf/go-kv/field.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -75,7 +75,7 @@ type Field struct { | ||||||
| // Key returns the formatted key string of this Field. | // Key returns the formatted key string of this Field. | ||||||
| func (f Field) Key() string { | func (f Field) Key() string { | ||||||
| 	buf := byteutil.Buffer{B: make([]byte, 0, bufsize/2)} | 	buf := byteutil.Buffer{B: make([]byte, 0, bufsize/2)} | ||||||
| 	appendQuoteKey(&buf, f.K) | 	AppendQuoteKey(&buf, f.K) | ||||||
| 	return buf.String() | 	return buf.String() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										33
									
								
								vendor/codeberg.org/gruf/go-kv/field_fmt.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								vendor/codeberg.org/gruf/go-kv/field_fmt.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -5,10 +5,18 @@ package kv | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"sync" | ||||||
| 
 | 
 | ||||||
| 	"codeberg.org/gruf/go-byteutil" | 	"codeberg.org/gruf/go-byteutil" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | // bufPool is a memory pool of byte buffers. | ||||||
|  | var bufPool = sync.Pool{ | ||||||
|  | 	New: func() interface{} { | ||||||
|  | 		return &byteutil.Buffer{B: make([]byte, 0, 512)} | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // AppendFormat will append formatted format of Field to 'buf'. See .String() for details. | // AppendFormat will append formatted format of Field to 'buf'. See .String() for details. | ||||||
| func (f Field) AppendFormat(buf *byteutil.Buffer, vbose bool) { | func (f Field) AppendFormat(buf *byteutil.Buffer, vbose bool) { | ||||||
| 	var fmtstr string | 	var fmtstr string | ||||||
|  | @ -17,9 +25,9 @@ func (f Field) AppendFormat(buf *byteutil.Buffer, vbose bool) { | ||||||
| 	} else /* regular */ { | 	} else /* regular */ { | ||||||
| 		fmtstr = `%+v` | 		fmtstr = `%+v` | ||||||
| 	} | 	} | ||||||
| 	appendQuoteKey(buf, f.K) | 	AppendQuoteKey(buf, f.K) | ||||||
| 	buf.WriteByte('=') | 	buf.WriteByte('=') | ||||||
| 	appendQuoteValue(buf, fmt.Sprintf(fmtstr, f.V)) | 	appendValuef(buf, fmtstr, f.V) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Value returns the formatted value string of this Field. | // Value returns the formatted value string of this Field. | ||||||
|  | @ -31,6 +39,25 @@ func (f Field) Value(vbose bool) string { | ||||||
| 		fmtstr = `%+v` | 		fmtstr = `%+v` | ||||||
| 	} | 	} | ||||||
| 	buf := byteutil.Buffer{B: make([]byte, 0, bufsize/2)} | 	buf := byteutil.Buffer{B: make([]byte, 0, bufsize/2)} | ||||||
| 	appendQuoteValue(&buf, fmt.Sprintf(fmtstr, f.V)) | 	appendValuef(&buf, fmtstr, f.V) | ||||||
| 	return buf.String() | 	return buf.String() | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // appendValuef appends a quoted value string (formatted by fmt.Appendf) to 'buf'. | ||||||
|  | func appendValuef(buf *byteutil.Buffer, format string, args ...interface{}) { | ||||||
|  | 	// Write format string to a byte buffer | ||||||
|  | 	fmtbuf := bufPool.Get().(*byteutil.Buffer) | ||||||
|  | 	fmtbuf.B = fmt.Appendf(fmtbuf.B, format, args...) | ||||||
|  | 
 | ||||||
|  | 	// Append quoted value to dst buffer | ||||||
|  | 	AppendQuoteValue(buf, fmtbuf.String()) | ||||||
|  | 
 | ||||||
|  | 	// Drop overly large capacity buffers | ||||||
|  | 	if fmtbuf.Cap() > int(^uint16(0)) { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Replace buffer in pool | ||||||
|  | 	fmtbuf.Reset() | ||||||
|  | 	bufPool.Put(fmtbuf) | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								vendor/codeberg.org/gruf/go-kv/field_format.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/codeberg.org/gruf/go-kv/field_format.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -16,7 +16,7 @@ func (f Field) AppendFormat(buf *byteutil.Buffer, vbose bool) { | ||||||
| 	} else /* regular */ { | 	} else /* regular */ { | ||||||
| 		fmtstr = "{:v}" | 		fmtstr = "{:v}" | ||||||
| 	} | 	} | ||||||
| 	appendQuoteKey(buf, f.K) | 	AppendQuoteKey(buf, f.K) | ||||||
| 	buf.WriteByte('=') | 	buf.WriteByte('=') | ||||||
| 	format.Appendf(buf, fmtstr, f.V) | 	format.Appendf(buf, fmtstr, f.V) | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										4
									
								
								vendor/codeberg.org/gruf/go-kv/format/format.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/codeberg.org/gruf/go-kv/format/format.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -311,7 +311,7 @@ func (f format) AppendString(s string) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (f format) AppendStringKey(s string) { | func (f format) AppendStringKey(s string) { | ||||||
| 	if !strconv.CanBackquote(s) { | 	if len(s) > SingleTermLine || !strconv.CanBackquote(s) { | ||||||
| 		// Requires quoting AND escaping | 		// Requires quoting AND escaping | ||||||
| 		f.Buffer.B = strconv.AppendQuote(f.Buffer.B, s) | 		f.Buffer.B = strconv.AppendQuote(f.Buffer.B, s) | ||||||
| 	} else if ContainsDoubleQuote(s) { | 	} else if ContainsDoubleQuote(s) { | ||||||
|  | @ -329,7 +329,7 @@ func (f format) AppendStringKey(s string) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (f format) AppendStringQuoted(s string) { | func (f format) AppendStringQuoted(s string) { | ||||||
| 	if !strconv.CanBackquote(s) { | 	if len(s) > SingleTermLine || !strconv.CanBackquote(s) { | ||||||
| 		// Requires quoting AND escaping | 		// Requires quoting AND escaping | ||||||
| 		f.Buffer.B = strconv.AppendQuote(f.Buffer.B, s) | 		f.Buffer.B = strconv.AppendQuote(f.Buffer.B, s) | ||||||
| 	} else if ContainsDoubleQuote(s) { | 	} else if ContainsDoubleQuote(s) { | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								vendor/codeberg.org/gruf/go-kv/format/util.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/codeberg.org/gruf/go-kv/format/util.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -5,6 +5,19 @@ import ( | ||||||
| 	"unsafe" | 	"unsafe" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | const ( | ||||||
|  | 	// SingleTermLine: beyond a certain length of string, all of the | ||||||
|  | 	// extra checks to handle quoting/not-quoting add a significant | ||||||
|  | 	// amount of extra processing time. Quoting in this manner only really | ||||||
|  | 	// effects readability on a single line, so a max string length that | ||||||
|  | 	// encompasses the maximum number of columns on *most* terminals was | ||||||
|  | 	// selected. This was chosen using the metric that 1080p is one of the | ||||||
|  | 	// most common display resolutions, and that a relatively small font size | ||||||
|  | 	// of 7 requires 223 columns. So 256 should be >= $COLUMNS (fullscreen) | ||||||
|  | 	// in 99% of usecases (these figures all pulled out of my ass). | ||||||
|  | 	SingleTermLine = 256 | ||||||
|  | ) | ||||||
|  | 
 | ||||||
| // ContainsSpaceOrTab checks if "s" contains space or tabs. | // ContainsSpaceOrTab checks if "s" contains space or tabs. | ||||||
| func ContainsSpaceOrTab(s string) bool { | func ContainsSpaceOrTab(s string) bool { | ||||||
| 	if i := strings.IndexByte(s, ' '); i != -1 { | 	if i := strings.IndexByte(s, ' '); i != -1 { | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								vendor/codeberg.org/gruf/go-kv/util.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/codeberg.org/gruf/go-kv/util.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -7,10 +7,10 @@ import ( | ||||||
| 	"codeberg.org/gruf/go-kv/format" | 	"codeberg.org/gruf/go-kv/format" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // appendQuoteKey will append and escape/quote a formatted key string. | // AppendQuoteKey will append and escape/quote a formatted key string. | ||||||
| func appendQuoteKey(buf *byteutil.Buffer, str string) { | func AppendQuoteKey(buf *byteutil.Buffer, str string) { | ||||||
| 	switch { | 	switch { | ||||||
| 	case !strconv.CanBackquote(str): | 	case len(str) > format.SingleTermLine || !strconv.CanBackquote(str): | ||||||
| 		// Append quoted and escaped string | 		// Append quoted and escaped string | ||||||
| 		buf.B = strconv.AppendQuote(buf.B, str) | 		buf.B = strconv.AppendQuote(buf.B, str) | ||||||
| 	case format.ContainsDoubleQuote(str): | 	case format.ContainsDoubleQuote(str): | ||||||
|  | @ -27,10 +27,10 @@ func appendQuoteKey(buf *byteutil.Buffer, str string) { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // appendQuoteValue will append and escape/quote a formatted value string. | // AppendQuoteValue will append and escape/quote a formatted value string. | ||||||
| func appendQuoteValue(buf *byteutil.Buffer, str string) { | func AppendQuoteValue(buf *byteutil.Buffer, str string) { | ||||||
| 	switch { | 	switch { | ||||||
| 	case !strconv.CanBackquote(str): | 	case len(str) > format.SingleTermLine || !strconv.CanBackquote(str): | ||||||
| 		// Append quoted and escaped string | 		// Append quoted and escaped string | ||||||
| 		buf.B = strconv.AppendQuote(buf.B, str) | 		buf.B = strconv.AppendQuote(buf.B, str) | ||||||
| 		return | 		return | ||||||
|  |  | ||||||
							
								
								
									
										26
									
								
								vendor/codeberg.org/gruf/go-logger/v2/level/levels.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/codeberg.org/gruf/go-logger/v2/level/levels.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -1,5 +1,10 @@ | ||||||
| package level | package level | ||||||
| 
 | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
| // LEVEL defines a level of logging. | // LEVEL defines a level of logging. | ||||||
| type LEVEL uint8 | type LEVEL uint8 | ||||||
| 
 | 
 | ||||||
|  | @ -34,12 +39,6 @@ func Default() Levels { | ||||||
| 		ERROR: "ERROR", | 		ERROR: "ERROR", | ||||||
| 		FATAL: "FATAL", | 		FATAL: "FATAL", | ||||||
| 		PANIC: "PANIC", | 		PANIC: "PANIC", | ||||||
| 
 |  | ||||||
| 		// we set these just so that |  | ||||||
| 		// it can be debugged when someone |  | ||||||
| 		// attempts to log with ALL/UNSET |  | ||||||
| 		ALL:   "{all}", |  | ||||||
| 		UNSET: "{unset}", |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -47,3 +46,18 @@ func Default() Levels { | ||||||
| func (l Levels) Get(lvl LEVEL) string { | func (l Levels) Get(lvl LEVEL) string { | ||||||
| 	return l[int(lvl)] | 	return l[int(lvl)] | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // Parse will attempt to decode a LEVEL from given string, checking (case insensitive) against strings in Levels. | ||||||
|  | func (l Levels) Parse(s string) (LEVEL, error) { | ||||||
|  | 	// Ensure consistent casing | ||||||
|  | 	s = strings.ToUpper(s) | ||||||
|  | 
 | ||||||
|  | 	for lvl := LEVEL(0); int(lvl) < len(l); lvl++ { | ||||||
|  | 		// Compare to eqach known level | ||||||
|  | 		if strings.ToUpper(l[lvl]) == s { | ||||||
|  | 			return lvl, nil | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return 0, fmt.Errorf("unrecognized log level: %s", s) | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										209
									
								
								vendor/codeberg.org/gruf/go-runners/pool.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										209
									
								
								vendor/codeberg.org/gruf/go-runners/pool.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -7,124 +7,105 @@ import ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // WorkerFunc represents a function processable by a worker in WorkerPool. Note | // WorkerFunc represents a function processable by a worker in WorkerPool. Note | ||||||
| // that implementations absolutely MUST check whether passed context is Done() | // that implementations absolutely MUST check whether passed context is <-ctx.Done() | ||||||
| // otherwise stopping the pool may block for large periods of time. | // otherwise stopping the pool may block indefinitely. | ||||||
| type WorkerFunc func(context.Context) | type WorkerFunc func(context.Context) | ||||||
| 
 | 
 | ||||||
| // WorkerPool provides a means of enqueuing asynchronous work. | // WorkerPool provides a means of enqueuing asynchronous work. | ||||||
| type WorkerPool struct { | type WorkerPool struct { | ||||||
| 	queue chan WorkerFunc | 	fns chan WorkerFunc | ||||||
| 	free  chan struct{} |  | ||||||
| 	wait  sync.WaitGroup |  | ||||||
| 	svc Service | 	svc Service | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // NewWorkerPool returns a new WorkerPool with provided worker count and WorkerFunc queue size. | // Start will start the main WorkerPool management loop in a new goroutine, along | ||||||
| // The number of workers represents how many WorkerFuncs can be executed simultaneously, and the | // with requested number of child worker goroutines. Returns false if already running. | ||||||
| // queue size represents the max number of WorkerFuncs that can be queued at any one time. | func (pool *WorkerPool) Start(workers int, queue int) bool { | ||||||
| func NewWorkerPool(workers int, queue int) WorkerPool { | 	// Attempt to start the svc | ||||||
|  | 	ctx, ok := pool.svc.doStart() | ||||||
|  | 	if !ok { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if workers < 1 { | 	if workers < 1 { | ||||||
|  | 		// Use $GOMAXPROCS as default worker count | ||||||
| 		workers = runtime.GOMAXPROCS(0) | 		workers = runtime.GOMAXPROCS(0) | ||||||
| 	} | 	} | ||||||
| 	if queue < 1 { | 
 | ||||||
|  | 	if queue < 0 { | ||||||
|  | 		// Set a reasonable queue default | ||||||
| 		queue = workers * 2 | 		queue = workers * 2 | ||||||
| 	} | 	} | ||||||
| 	return WorkerPool{ |  | ||||||
| 		queue: make(chan WorkerFunc, queue), |  | ||||||
| 		free:  make(chan struct{}, workers), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| // Start will attempt to start the worker pool, asynchronously. Return is success state. | 	// Allocate pool queue of given size | ||||||
| func (pool *WorkerPool) Start() bool { | 	fns := make(chan WorkerFunc, queue) | ||||||
| 	ok := true | 	pool.fns = fns | ||||||
| 
 | 
 | ||||||
| 	done := make(chan struct{}) |  | ||||||
| 	go func() { | 	go func() { | ||||||
| 		ok = pool.svc.Run(func(ctx context.Context) { | 		defer func() { | ||||||
| 			close(done) | 			// unlock single wait | ||||||
| 			pool.process(ctx) | 			pool.svc.wait.Unlock() | ||||||
| 		}) | 
 | ||||||
| 		if !ok { | 			// ensure stopped | ||||||
| 			close(done) | 			pool.svc.Stop() | ||||||
|  | 		}() | ||||||
|  | 
 | ||||||
|  | 		var wait sync.WaitGroup | ||||||
|  | 
 | ||||||
|  | 		// Start goroutine worker functions | ||||||
|  | 		for i := 0; i < workers; i++ { | ||||||
|  | 			go func() { | ||||||
|  | 				// Trigger start / stop | ||||||
|  | 				wait.Add(1) | ||||||
|  | 				defer wait.Done() | ||||||
|  | 
 | ||||||
|  | 				// Keep workers running on panic | ||||||
|  | 				for !workerstart(ctx, fns) { | ||||||
| 				} | 				} | ||||||
| 			}() | 			}() | ||||||
| 	<-done |  | ||||||
| 
 |  | ||||||
| 	return ok |  | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| // Stop will attempt to stop the worker pool, this will block until stopped. Return is success state. | 		// Set GC finalizer to stop pool on dealloc | ||||||
|  | 		runtime.SetFinalizer(pool, func(pool *WorkerPool) { | ||||||
|  | 			pool.svc.Stop() | ||||||
|  | 		}) | ||||||
|  | 
 | ||||||
|  | 		// Wait on ctx | ||||||
|  | 		<-ctx.Done() | ||||||
|  | 
 | ||||||
|  | 		// Stop all workers | ||||||
|  | 		close(pool.fns) | ||||||
|  | 		wait.Wait() | ||||||
|  | 	}() | ||||||
|  | 
 | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // workerstart is the main worker runner routine, accepting functions from 'fns' until it is closed. | ||||||
|  | func workerstart(ctx context.Context, fns <-chan WorkerFunc) bool { | ||||||
|  | 	// Recover and drop any panic | ||||||
|  | 	defer func() { recover() }() | ||||||
|  | 
 | ||||||
|  | 	for { | ||||||
|  | 		// Wait on next func | ||||||
|  | 		fn, ok := <-fns | ||||||
|  | 		if !ok { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// Run with ctx | ||||||
|  | 		fn(ctx) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Stop will stop the WorkerPool management loop, blocking until stopped. | ||||||
| func (pool *WorkerPool) Stop() bool { | func (pool *WorkerPool) Stop() bool { | ||||||
| 	return pool.svc.Stop() | 	return pool.svc.Stop() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Running returns whether the worker pool is running. |  | ||||||
| func (pool *WorkerPool) Running() bool { |  | ||||||
| 	return pool.svc.Running() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // execute will take a queued function and pass it to a free worker when available. |  | ||||||
| func (pool *WorkerPool) execute(ctx context.Context, fn WorkerFunc) { |  | ||||||
| 	var acquired bool |  | ||||||
| 
 |  | ||||||
| 	// Set as running |  | ||||||
| 	pool.wait.Add(1) |  | ||||||
| 
 |  | ||||||
| 	select { |  | ||||||
| 	// Pool context cancelled |  | ||||||
| 	// (we fall through and let |  | ||||||
| 	// the function execute). |  | ||||||
| 	case <-ctx.Done(): |  | ||||||
| 
 |  | ||||||
| 	// Free worker acquired. |  | ||||||
| 	case pool.free <- struct{}{}: |  | ||||||
| 		acquired = true |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	go func() { |  | ||||||
| 		defer func() { |  | ||||||
| 			// defer in case panic |  | ||||||
| 			if acquired { |  | ||||||
| 				<-pool.free |  | ||||||
| 			} |  | ||||||
| 			pool.wait.Done() |  | ||||||
| 		}() |  | ||||||
| 
 |  | ||||||
| 		// Run queued |  | ||||||
| 		fn(ctx) |  | ||||||
| 	}() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // process is the background processing routine that passes queued functions to workers. |  | ||||||
| func (pool *WorkerPool) process(ctx context.Context) { |  | ||||||
| 	for { |  | ||||||
| 		select { |  | ||||||
| 		// Pool context cancelled |  | ||||||
| 		case <-ctx.Done(): |  | ||||||
| 			for { |  | ||||||
| 				select { |  | ||||||
| 				// Pop and execute queued |  | ||||||
| 				case fn := <-pool.queue: |  | ||||||
| 					fn(ctx) // ctx is closed |  | ||||||
| 
 |  | ||||||
| 				// Empty, wait for workers |  | ||||||
| 				default: |  | ||||||
| 					pool.wait.Wait() |  | ||||||
| 					return |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 		// Queued func received |  | ||||||
| 		case fn := <-pool.queue: |  | ||||||
| 			pool.execute(ctx, fn) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Enqueue will add provided WorkerFunc to the queue to be performed when there is a free worker. | // Enqueue will add provided WorkerFunc to the queue to be performed when there is a free worker. | ||||||
| // This will block until the function has been queued. 'fn' will ALWAYS be executed, even on pool | // This will block until function is queued or pool is stopped. In all cases, the WorkerFunc will be | ||||||
| // close, which can be determined via context <-ctx.Done(). WorkerFuncs MUST respect the passed context. | // executed, with the state of the pool being indicated by <-ctx.Done() of the passed ctx. | ||||||
|  | // WorkerFuncs MUST respect the passed context. | ||||||
| func (pool *WorkerPool) Enqueue(fn WorkerFunc) { | func (pool *WorkerPool) Enqueue(fn WorkerFunc) { | ||||||
| 	// Check valid fn | 	// Check valid fn | ||||||
| 	if fn == nil { | 	if fn == nil { | ||||||
|  | @ -132,29 +113,50 @@ func (pool *WorkerPool) Enqueue(fn WorkerFunc) { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	select { | 	select { | ||||||
| 	// Pool context cancelled | 	// Pool ctx cancelled | ||||||
| 	case <-pool.svc.Done(): | 	case <-pool.svc.Done(): | ||||||
| 		fn(closedctx) | 		fn(closedctx) | ||||||
| 
 | 
 | ||||||
| 	// Placed fn in queue | 	// Placed fn in queue | ||||||
| 	case pool.queue <- fn: | 	case pool.fns <- fn: | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // EnqueueNoBlock attempts Enqueue but returns false if not executed. | // EnqueueCtx is functionally identical to WorkerPool.Enqueue() but returns early in the | ||||||
| func (pool *WorkerPool) EnqueueNoBlock(fn WorkerFunc) bool { | // case that caller provided <-ctx.Done() is closed, WITHOUT running the WorkerFunc. | ||||||
|  | func (pool *WorkerPool) EnqueueCtx(ctx context.Context, fn WorkerFunc) { | ||||||
|  | 	// Check valid fn | ||||||
|  | 	if fn == nil { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	select { | ||||||
|  | 	// Caller ctx cancelled | ||||||
|  | 	case <-ctx.Done(): | ||||||
|  | 
 | ||||||
|  | 	// Pool ctx cancelled | ||||||
|  | 	case <-pool.svc.Done(): | ||||||
|  | 		fn(closedctx) | ||||||
|  | 
 | ||||||
|  | 	// Placed fn in queue | ||||||
|  | 	case pool.fns <- fn: | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // EnqueueNow attempts Enqueue but returns false if not executed. | ||||||
|  | func (pool *WorkerPool) EnqueueNow(fn WorkerFunc) bool { | ||||||
| 	// Check valid fn | 	// Check valid fn | ||||||
| 	if fn == nil { | 	if fn == nil { | ||||||
| 		return false | 		return false | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	select { | 	select { | ||||||
| 	// Pool context cancelled | 	// Pool ctx cancelled | ||||||
| 	case <-pool.svc.Done(): | 	case <-pool.svc.Done(): | ||||||
| 		return false | 		return false | ||||||
| 
 | 
 | ||||||
| 	// Placed fn in queue | 	// Placed fn in queue | ||||||
| 	case pool.queue <- fn: | 	case pool.fns <- fn: | ||||||
| 		return true | 		return true | ||||||
| 
 | 
 | ||||||
| 	// Queue is full | 	// Queue is full | ||||||
|  | @ -165,10 +167,5 @@ func (pool *WorkerPool) EnqueueNoBlock(fn WorkerFunc) bool { | ||||||
| 
 | 
 | ||||||
| // Queue returns the number of currently queued WorkerFuncs. | // Queue returns the number of currently queued WorkerFuncs. | ||||||
| func (pool *WorkerPool) Queue() int { | func (pool *WorkerPool) Queue() int { | ||||||
| 	return len(pool.queue) | 	return len(pool.fns) | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Workers returns the number of currently active workers. |  | ||||||
| func (pool *WorkerPool) Workers() int { |  | ||||||
| 	return len(pool.free) |  | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										29
									
								
								vendor/codeberg.org/gruf/go-runners/service.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								vendor/codeberg.org/gruf/go-runners/service.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -15,7 +15,7 @@ type Service struct { | ||||||
| 	mu    sync.Mutex         // mu protects state changes | 	mu    sync.Mutex         // mu protects state changes | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Run will run the supplied function until completion, use given context to propagate cancel. | // Run will run the supplied function until completion, using given context to propagate cancel. | ||||||
| // Immediately returns false if the Service is already running, and true after completed run. | // Immediately returns false if the Service is already running, and true after completed run. | ||||||
| func (svc *Service) Run(fn func(context.Context)) bool { | func (svc *Service) Run(fn func(context.Context)) bool { | ||||||
| 	// Attempt to start the svc | 	// Attempt to start the svc | ||||||
|  | @ -39,6 +39,33 @@ func (svc *Service) Run(fn func(context.Context)) bool { | ||||||
| 	return true | 	return true | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // GoRun will run the supplied function until completion in a goroutine, using given context to | ||||||
|  | // propagate cancel. Immediately returns boolean indicating success, or that service is already running. | ||||||
|  | func (svc *Service) GoRun(fn func(context.Context)) bool { | ||||||
|  | 	// Attempt to start the svc | ||||||
|  | 	ctx, ok := svc.doStart() | ||||||
|  | 	if !ok { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	go func() { | ||||||
|  | 		defer func() { | ||||||
|  | 			// unlock single wait | ||||||
|  | 			svc.wait.Unlock() | ||||||
|  | 
 | ||||||
|  | 			// ensure stopped | ||||||
|  | 			svc.Stop() | ||||||
|  | 		}() | ||||||
|  | 
 | ||||||
|  | 		// Run user func | ||||||
|  | 		if fn != nil { | ||||||
|  | 			fn(ctx) | ||||||
|  | 		} | ||||||
|  | 	}() | ||||||
|  | 
 | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Stop will attempt to stop the service, cancelling the running function's context. Immediately | // Stop will attempt to stop the service, cancelling the running function's context. Immediately | ||||||
| // returns false if not running, and true only after Service is fully stopped. | // returns false if not running, and true only after Service is fully stopped. | ||||||
| func (svc *Service) Stop() bool { | func (svc *Service) Stop() bool { | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								vendor/codeberg.org/gruf/go-sched/job.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/codeberg.org/gruf/go-sched/job.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -61,6 +61,11 @@ func (job *Job) With(t Timing) *Job { | ||||||
| 		panic("nil Timing") | 		panic("nil Timing") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if job.id != 0 { | ||||||
|  | 		// Cannot update scheduled job | ||||||
|  | 		panic("job already scheduled") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if job.timing == emptytiming { | 	if job.timing == emptytiming { | ||||||
| 		// Set new timing | 		// Set new timing | ||||||
| 		job.timing = t | 		job.timing = t | ||||||
|  | @ -76,12 +81,18 @@ func (job *Job) With(t Timing) *Job { | ||||||
| 	return job | 	return job | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Panic specifics how this job handles panics, default is an actual panic. | // OnPanic specifies how this job handles panics, default is an actual panic. | ||||||
| func (job *Job) Panic(fn func(interface{})) *Job { | func (job *Job) OnPanic(fn func(interface{})) *Job { | ||||||
| 	if fn == nil { | 	if fn == nil { | ||||||
| 		// Ensure a function | 		// Ensure a function | ||||||
| 		panic("nil func") | 		panic("nil func") | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	if job.id != 0 { | ||||||
|  | 		// Cannot update scheduled job | ||||||
|  | 		panic("job already scheduled") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	job.panic = fn | 	job.panic = fn | ||||||
| 	return job | 	return job | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										92
									
								
								vendor/codeberg.org/gruf/go-sched/scheduler.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										92
									
								
								vendor/codeberg.org/gruf/go-sched/scheduler.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -2,13 +2,18 @@ package sched | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
|  | 	"runtime" | ||||||
| 	"sort" | 	"sort" | ||||||
|  | 	"sync" | ||||||
|  | 	"sync/atomic" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"codeberg.org/gruf/go-atomics" |  | ||||||
| 	"codeberg.org/gruf/go-runners" | 	"codeberg.org/gruf/go-runners" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | // precision is the maximum time we can offer scheduler run-time precision down to. | ||||||
|  | const precision = time.Millisecond | ||||||
|  | 
 | ||||||
| var ( | var ( | ||||||
| 	// neverticks is a timer channel that never ticks (it's starved). | 	// neverticks is a timer channel that never ticks (it's starved). | ||||||
| 	neverticks = make(chan time.Time) | 	neverticks = make(chan time.Time) | ||||||
|  | @ -27,20 +32,41 @@ type Scheduler struct { | ||||||
| 	jobs []*Job           // jobs is a list of tracked Jobs to be executed | 	jobs []*Job           // jobs is a list of tracked Jobs to be executed | ||||||
| 	jch  chan interface{} // jch accepts either Jobs or job IDs to notify new/removed jobs | 	jch  chan interface{} // jch accepts either Jobs or job IDs to notify new/removed jobs | ||||||
| 	svc  runners.Service  // svc manages the main scheduler routine | 	svc  runners.Service  // svc manages the main scheduler routine | ||||||
| 	jid  atomics.Uint64   // jid is used to iteratively generate unique IDs for jobs | 	jid  atomic.Uint64    // jid is used to iteratively generate unique IDs for jobs | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // New returns a new Scheduler instance with given job change queue size. |  | ||||||
| func NewScheduler(queue int) Scheduler { |  | ||||||
| 	if queue < 0 { |  | ||||||
| 		queue = 10 |  | ||||||
| 	} |  | ||||||
| 	return Scheduler{jch: make(chan interface{}, queue)} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Start will attempt to start the Scheduler. Immediately returns false if the Service is already running, and true after completed run. | // Start will attempt to start the Scheduler. Immediately returns false if the Service is already running, and true after completed run. | ||||||
| func (sch *Scheduler) Start() bool { | func (sch *Scheduler) Start() bool { | ||||||
| 	return sch.svc.Run(sch.run) | 	var block sync.Mutex | ||||||
|  | 
 | ||||||
|  | 	// Use mutex to synchronize between started | ||||||
|  | 	// goroutine and ourselves, to ensure that | ||||||
|  | 	// we don't return before Scheduler init'd. | ||||||
|  | 	block.Lock() | ||||||
|  | 	defer block.Unlock() | ||||||
|  | 
 | ||||||
|  | 	ok := sch.svc.GoRun(func(ctx context.Context) { | ||||||
|  | 		// Create Scheduler job channel | ||||||
|  | 		sch.jch = make(chan interface{}) | ||||||
|  | 
 | ||||||
|  | 		// Unlock start routine | ||||||
|  | 		block.Unlock() | ||||||
|  | 
 | ||||||
|  | 		// Set GC finalizer to ensure scheduler stopped | ||||||
|  | 		runtime.SetFinalizer(sch, func(sch *Scheduler) { | ||||||
|  | 			_ = sch.Stop() | ||||||
|  | 		}) | ||||||
|  | 
 | ||||||
|  | 		// Enter main loop | ||||||
|  | 		sch.run(ctx) | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	if ok { | ||||||
|  | 		// Wait on goroutine | ||||||
|  | 		block.Lock() | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return ok | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Stop will attempt to stop the Scheduler. Immediately returns false if not running, and true only after Scheduler is fully stopped. | // Stop will attempt to stop the Scheduler. Immediately returns false if not running, and true only after Scheduler is fully stopped. | ||||||
|  | @ -55,24 +81,41 @@ func (sch *Scheduler) Running() bool { | ||||||
| 
 | 
 | ||||||
| // Schedule will add provided Job to the Scheduler, returning a cancel function. | // Schedule will add provided Job to the Scheduler, returning a cancel function. | ||||||
| func (sch *Scheduler) Schedule(job *Job) (cancel func()) { | func (sch *Scheduler) Schedule(job *Job) (cancel func()) { | ||||||
| 	if job == nil { | 	switch { | ||||||
| 		// Ensure there's a job! | 	// Check a job was passed | ||||||
|  | 	case job == nil: | ||||||
| 		panic("nil job") | 		panic("nil job") | ||||||
|  | 
 | ||||||
|  | 	// Check we are running | ||||||
|  | 	case sch.jch == nil: | ||||||
|  | 		panic("scheduler not running") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Get last known job ID | 	// Calculate next job ID | ||||||
| 	last := sch.jid.Load() | 	last := sch.jid.Load() | ||||||
| 
 | 	next := sch.jid.Add(1) | ||||||
| 	// Give this job an ID and check overflow | 	if next < last { | ||||||
| 	if job.id = sch.jid.Add(1); job.id < last { | 		panic("job id overflow") | ||||||
| 		panic("scheduler job id overflow") |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Pass job to scheduler | 	// Pass job to scheduler | ||||||
|  | 	job.id = next | ||||||
| 	sch.jch <- job | 	sch.jch <- job | ||||||
| 
 | 
 | ||||||
|  | 	// Take ptrs to current state chs | ||||||
|  | 	ctx := sch.svc.Done() | ||||||
|  | 	jch := sch.jch | ||||||
|  | 
 | ||||||
| 	// Return cancel function for job ID | 	// Return cancel function for job ID | ||||||
| 	return func() { sch.jch <- job.id } | 	return func() { | ||||||
|  | 		select { | ||||||
|  | 		// Sched stopped | ||||||
|  | 		case <-ctx: | ||||||
|  | 
 | ||||||
|  | 		// Cancel this job | ||||||
|  | 		case jch <- next: | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // run is the main scheduler run routine, which runs for as long as ctx is valid. | // run is the main scheduler run routine, which runs for as long as ctx is valid. | ||||||
|  | @ -136,11 +179,8 @@ func (sch *Scheduler) run(ctx context.Context) { | ||||||
| 			// don't bother sleeping. It's wasted cycles only | 			// don't bother sleeping. It's wasted cycles only | ||||||
| 			// sleeping for some obscenely tiny amount of time | 			// sleeping for some obscenely tiny amount of time | ||||||
| 			// we can't guarantee precision for. | 			// we can't guarantee precision for. | ||||||
| 			const precision = time.Millisecond |  | ||||||
| 
 |  | ||||||
| 			if until := next.Sub(now); until <= precision/1e3 { | 			if until := next.Sub(now); until <= precision/1e3 { | ||||||
| 				// This job is behind schedule, | 				// This job is behind schedule, set to always tick. | ||||||
| 				// set timer to always tick |  | ||||||
| 				tch = alwaysticks | 				tch = alwaysticks | ||||||
| 			} else { | 			} else { | ||||||
| 				// Reset timer to period | 				// Reset timer to period | ||||||
|  | @ -216,13 +256,13 @@ func (sch *Scheduler) schedule(now time.Time) { | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		// Pass job to runner | ||||||
|  | 		go job.Run(now) | ||||||
|  | 
 | ||||||
| 		// Update the next call time | 		// Update the next call time | ||||||
| 		next := job.timing.Next(now) | 		next := job.timing.Next(now) | ||||||
| 		job.next.Store(next) | 		job.next.Store(next) | ||||||
| 
 | 
 | ||||||
| 		// Run this job async! |  | ||||||
| 		go job.Run(now) |  | ||||||
| 
 |  | ||||||
| 		if next.IsZero() { | 		if next.IsZero() { | ||||||
| 			// Zero time, this job is done and can be dropped | 			// Zero time, this job is done and can be dropped | ||||||
| 			sch.jobs = append(sch.jobs[:i], sch.jobs[i+1:]...) | 			sch.jobs = append(sch.jobs[:i], sch.jobs[i+1:]...) | ||||||
|  |  | ||||||
							
								
								
									
										42
									
								
								vendor/github.com/coreos/go-oidc/v3/oidc/jwks.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								vendor/github.com/coreos/go-oidc/v3/oidc/jwks.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -2,6 +2,9 @@ package oidc | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
|  | 	"crypto" | ||||||
|  | 	"crypto/ecdsa" | ||||||
|  | 	"crypto/rsa" | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
|  | @ -12,6 +15,35 @@ import ( | ||||||
| 	jose "gopkg.in/square/go-jose.v2" | 	jose "gopkg.in/square/go-jose.v2" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | // StaticKeySet is a verifier that validates JWT against a static set of public keys. | ||||||
|  | type StaticKeySet struct { | ||||||
|  | 	// PublicKeys used to verify the JWT. Supported types are *rsa.PublicKey and | ||||||
|  | 	// *ecdsa.PublicKey. | ||||||
|  | 	PublicKeys []crypto.PublicKey | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // VerifySignature compares the signature against a static set of public keys. | ||||||
|  | func (s *StaticKeySet) VerifySignature(ctx context.Context, jwt string) ([]byte, error) { | ||||||
|  | 	jws, err := jose.ParseSigned(jwt) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, fmt.Errorf("parsing jwt: %v", err) | ||||||
|  | 	} | ||||||
|  | 	for _, pub := range s.PublicKeys { | ||||||
|  | 		switch pub.(type) { | ||||||
|  | 		case *rsa.PublicKey: | ||||||
|  | 		case *ecdsa.PublicKey: | ||||||
|  | 		default: | ||||||
|  | 			return nil, fmt.Errorf("invalid public key type provided: %T", pub) | ||||||
|  | 		} | ||||||
|  | 		payload, err := jws.Verify(pub) | ||||||
|  | 		if err != nil { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		return payload, nil | ||||||
|  | 	} | ||||||
|  | 	return nil, fmt.Errorf("no public keys able to verify jwt") | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // NewRemoteKeySet returns a KeySet that can validate JSON web tokens by using HTTP | // NewRemoteKeySet returns a KeySet that can validate JSON web tokens by using HTTP | ||||||
| // GETs to fetch JSON web token sets hosted at a remote URL. This is automatically | // GETs to fetch JSON web token sets hosted at a remote URL. This is automatically | ||||||
| // used by NewProvider using the URLs returned by OpenID Connect discovery, but is | // used by NewProvider using the URLs returned by OpenID Connect discovery, but is | ||||||
|  | @ -81,16 +113,24 @@ func (i *inflight) result() ([]jose.JSONWebKey, error) { | ||||||
| 	return i.keys, i.err | 	return i.keys, i.err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // paresdJWTKey is a context key that allows common setups to avoid parsing the | ||||||
|  | // JWT twice. It holds a *jose.JSONWebSignature value. | ||||||
|  | var parsedJWTKey contextKey | ||||||
|  | 
 | ||||||
| // VerifySignature validates a payload against a signature from the jwks_uri. | // VerifySignature validates a payload against a signature from the jwks_uri. | ||||||
| // | // | ||||||
| // Users MUST NOT call this method directly and should use an IDTokenVerifier | // Users MUST NOT call this method directly and should use an IDTokenVerifier | ||||||
| // instead. This method skips critical validations such as 'alg' values and is | // instead. This method skips critical validations such as 'alg' values and is | ||||||
| // only exported to implement the KeySet interface. | // only exported to implement the KeySet interface. | ||||||
| func (r *RemoteKeySet) VerifySignature(ctx context.Context, jwt string) ([]byte, error) { | func (r *RemoteKeySet) VerifySignature(ctx context.Context, jwt string) ([]byte, error) { | ||||||
| 	jws, err := jose.ParseSigned(jwt) | 	jws, ok := ctx.Value(parsedJWTKey).(*jose.JSONWebSignature) | ||||||
|  | 	if !ok { | ||||||
|  | 		var err error | ||||||
|  | 		jws, err = jose.ParseSigned(jwt) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return nil, fmt.Errorf("oidc: malformed jwt: %v", err) | 			return nil, fmt.Errorf("oidc: malformed jwt: %v", err) | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
| 	return r.verify(ctx, jws) | 	return r.verify(ctx, jws) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										42
									
								
								vendor/github.com/coreos/go-oidc/v3/oidc/oidc.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								vendor/github.com/coreos/go-oidc/v3/oidc/oidc.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -134,6 +134,48 @@ var supportedAlgorithms = map[string]bool{ | ||||||
| 	PS512: true, | 	PS512: true, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // ProviderConfig allows creating providers when discovery isn't supported. It's | ||||||
|  | // generally easier to use NewProvider directly. | ||||||
|  | type ProviderConfig struct { | ||||||
|  | 	// IssuerURL is the identity of the provider, and the string it uses to sign | ||||||
|  | 	// ID tokens with. For example "https://accounts.google.com". This value MUST | ||||||
|  | 	// match ID tokens exactly. | ||||||
|  | 	IssuerURL string | ||||||
|  | 	// AuthURL is the endpoint used by the provider to support the OAuth 2.0 | ||||||
|  | 	// authorization endpoint. | ||||||
|  | 	AuthURL string | ||||||
|  | 	// TokenURL is the endpoint used by the provider to support the OAuth 2.0 | ||||||
|  | 	// token endpoint. | ||||||
|  | 	TokenURL string | ||||||
|  | 	// UserInfoURL is the endpoint used by the provider to support the OpenID | ||||||
|  | 	// Connect UserInfo flow. | ||||||
|  | 	// | ||||||
|  | 	// https://openid.net/specs/openid-connect-core-1_0.html#UserInfo | ||||||
|  | 	UserInfoURL string | ||||||
|  | 	// JWKSURL is the endpoint used by the provider to advertise public keys to | ||||||
|  | 	// verify issued ID tokens. This endpoint is polled as new keys are made | ||||||
|  | 	// available. | ||||||
|  | 	JWKSURL string | ||||||
|  | 
 | ||||||
|  | 	// Algorithms, if provided, indicate a list of JWT algorithms allowed to sign | ||||||
|  | 	// ID tokens. If not provided, this defaults to the algorithms advertised by | ||||||
|  | 	// the JWK endpoint, then the set of algorithms supported by this package. | ||||||
|  | 	Algorithms []string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // NewProvider initializes a provider from a set of endpoints, rather than | ||||||
|  | // through discovery. | ||||||
|  | func (p *ProviderConfig) NewProvider(ctx context.Context) *Provider { | ||||||
|  | 	return &Provider{ | ||||||
|  | 		issuer:       p.IssuerURL, | ||||||
|  | 		authURL:      p.AuthURL, | ||||||
|  | 		tokenURL:     p.TokenURL, | ||||||
|  | 		userInfoURL:  p.UserInfoURL, | ||||||
|  | 		algorithms:   p.Algorithms, | ||||||
|  | 		remoteKeySet: NewRemoteKeySet(cloneContext(ctx), p.JWKSURL), | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // NewProvider uses the OpenID Connect discovery mechanism to construct a Provider. | // NewProvider uses the OpenID Connect discovery mechanism to construct a Provider. | ||||||
| // | // | ||||||
| // The issuer is the URL identifier for the service. For example: "https://accounts.google.com" | // The issuer is the URL identifier for the service. For example: "https://accounts.google.com" | ||||||
|  |  | ||||||
							
								
								
									
										58
									
								
								vendor/github.com/coreos/go-oidc/v3/oidc/verify.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										58
									
								
								vendor/github.com/coreos/go-oidc/v3/oidc/verify.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -21,6 +21,18 @@ const ( | ||||||
| 	issuerGoogleAccountsNoScheme = "accounts.google.com" | 	issuerGoogleAccountsNoScheme = "accounts.google.com" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | // TokenExpiredError indicates that Verify failed because the token was expired. This | ||||||
|  | // error does NOT indicate that the token is not also invalid for other reasons. Other | ||||||
|  | // checks might have failed if the expiration check had not failed. | ||||||
|  | type TokenExpiredError struct { | ||||||
|  | 	// Expiry is the time when the token expired. | ||||||
|  | 	Expiry time.Time | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (e *TokenExpiredError) Error() string { | ||||||
|  | 	return fmt.Sprintf("oidc: token is expired (Token Expiry: %v)", e.Expiry) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // KeySet is a set of publc JSON Web Keys that can be used to validate the signature | // KeySet is a set of publc JSON Web Keys that can be used to validate the signature | ||||||
| // of JSON web tokens. This is expected to be backed by a remote key set through | // of JSON web tokens. This is expected to be backed by a remote key set through | ||||||
| // provider metadata discovery or an in-memory set of keys delivered out-of-band. | // provider metadata discovery or an in-memory set of keys delivered out-of-band. | ||||||
|  | @ -55,15 +67,10 @@ type IDTokenVerifier struct { | ||||||
| //		keySet := oidc.NewRemoteKeySet(ctx, "https://www.googleapis.com/oauth2/v3/certs") | //		keySet := oidc.NewRemoteKeySet(ctx, "https://www.googleapis.com/oauth2/v3/certs") | ||||||
| //		verifier := oidc.NewVerifier("https://accounts.google.com", keySet, config) | //		verifier := oidc.NewVerifier("https://accounts.google.com", keySet, config) | ||||||
| // | // | ||||||
| // Since KeySet is an interface, this constructor can also be used to supply custom | // Or a static key set (e.g. for testing): | ||||||
| // public key sources. For example, if a user wanted to supply public keys out-of-band |  | ||||||
| // and hold them statically in-memory: |  | ||||||
| // | // | ||||||
| //		// Custom KeySet implementation. | //		keySet := &oidc.StaticKeySet{PublicKeys: []crypto.PublicKey{pub1, pub2}} | ||||||
| //		keySet := newStatisKeySet(publicKeys...) | //		verifier := oidc.NewVerifier("https://accounts.google.com", keySet, config) | ||||||
| // |  | ||||||
| //		// Verifier uses the custom KeySet implementation. |  | ||||||
| //		verifier := oidc.NewVerifier("https://auth.example.com", keySet, config) |  | ||||||
| // | // | ||||||
| func NewVerifier(issuerURL string, keySet KeySet, config *Config) *IDTokenVerifier { | func NewVerifier(issuerURL string, keySet KeySet, config *Config) *IDTokenVerifier { | ||||||
| 	return &IDTokenVerifier{keySet: keySet, config: config, issuer: issuerURL} | 	return &IDTokenVerifier{keySet: keySet, config: config, issuer: issuerURL} | ||||||
|  | @ -100,12 +107,20 @@ type Config struct { | ||||||
| 
 | 
 | ||||||
| 	// Time function to check Token expiry. Defaults to time.Now | 	// Time function to check Token expiry. Defaults to time.Now | ||||||
| 	Now func() time.Time | 	Now func() time.Time | ||||||
|  | 
 | ||||||
|  | 	// InsecureSkipSignatureCheck causes this package to skip JWT signature validation. | ||||||
|  | 	// It's intended for special cases where providers (such as Azure), use the "none" | ||||||
|  | 	// algorithm. | ||||||
|  | 	// | ||||||
|  | 	// This option can only be enabled safely when the ID Token is received directly | ||||||
|  | 	// from the provider after the token exchange. | ||||||
|  | 	// | ||||||
|  | 	// This option MUST NOT be used when receiving an ID Token from sources other | ||||||
|  | 	// than the token endpoint. | ||||||
|  | 	InsecureSkipSignatureCheck bool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Verifier returns an IDTokenVerifier that uses the provider's key set to verify JWTs. | // Verifier returns an IDTokenVerifier that uses the provider's key set to verify JWTs. | ||||||
| // |  | ||||||
| // The returned IDTokenVerifier is tied to the Provider's context and its behavior is |  | ||||||
| // undefined once the Provider's context is canceled. |  | ||||||
| func (p *Provider) Verifier(config *Config) *IDTokenVerifier { | func (p *Provider) Verifier(config *Config) *IDTokenVerifier { | ||||||
| 	if len(config.SupportedSigningAlgs) == 0 && len(p.algorithms) > 0 { | 	if len(config.SupportedSigningAlgs) == 0 && len(p.algorithms) > 0 { | ||||||
| 		// Make a copy so we don't modify the config values. | 		// Make a copy so we don't modify the config values. | ||||||
|  | @ -192,11 +207,6 @@ func resolveDistributedClaim(ctx context.Context, verifier *IDTokenVerifier, src | ||||||
| //    token, err := verifier.Verify(ctx, rawIDToken) | //    token, err := verifier.Verify(ctx, rawIDToken) | ||||||
| // | // | ||||||
| func (v *IDTokenVerifier) Verify(ctx context.Context, rawIDToken string) (*IDToken, error) { | func (v *IDTokenVerifier) Verify(ctx context.Context, rawIDToken string) (*IDToken, error) { | ||||||
| 	jws, err := jose.ParseSigned(rawIDToken) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, fmt.Errorf("oidc: malformed jwt: %v", err) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Throw out tokens with invalid claims before trying to verify the token. This lets | 	// Throw out tokens with invalid claims before trying to verify the token. This lets | ||||||
| 	// us do cheap checks before possibly re-syncing keys. | 	// us do cheap checks before possibly re-syncing keys. | ||||||
| 	payload, err := parseJWT(rawIDToken) | 	payload, err := parseJWT(rawIDToken) | ||||||
|  | @ -268,13 +278,15 @@ func (v *IDTokenVerifier) Verify(ctx context.Context, rawIDToken string) (*IDTok | ||||||
| 		nowTime := now() | 		nowTime := now() | ||||||
| 
 | 
 | ||||||
| 		if t.Expiry.Before(nowTime) { | 		if t.Expiry.Before(nowTime) { | ||||||
| 			return nil, fmt.Errorf("oidc: token is expired (Token Expiry: %v)", t.Expiry) | 			return nil, &TokenExpiredError{Expiry: t.Expiry} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// If nbf claim is provided in token, ensure that it is indeed in the past. | 		// If nbf claim is provided in token, ensure that it is indeed in the past. | ||||||
| 		if token.NotBefore != nil { | 		if token.NotBefore != nil { | ||||||
| 			nbfTime := time.Time(*token.NotBefore) | 			nbfTime := time.Time(*token.NotBefore) | ||||||
| 			leeway := 1 * time.Minute | 			// Set to 5 minutes since this is what other OpenID Connect providers do to deal with clock skew. | ||||||
|  | 			// https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/6.12.2/src/Microsoft.IdentityModel.Tokens/TokenValidationParameters.cs#L149-L153 | ||||||
|  | 			leeway := 5 * time.Minute | ||||||
| 
 | 
 | ||||||
| 			if nowTime.Add(leeway).Before(nbfTime) { | 			if nowTime.Add(leeway).Before(nbfTime) { | ||||||
| 				return nil, fmt.Errorf("oidc: current time %v before the nbf (not before) time: %v", nowTime, nbfTime) | 				return nil, fmt.Errorf("oidc: current time %v before the nbf (not before) time: %v", nowTime, nbfTime) | ||||||
|  | @ -282,6 +294,15 @@ func (v *IDTokenVerifier) Verify(ctx context.Context, rawIDToken string) (*IDTok | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if v.config.InsecureSkipSignatureCheck { | ||||||
|  | 		return t, nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	jws, err := jose.ParseSigned(rawIDToken) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, fmt.Errorf("oidc: malformed jwt: %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	switch len(jws.Signatures) { | 	switch len(jws.Signatures) { | ||||||
| 	case 0: | 	case 0: | ||||||
| 		return nil, fmt.Errorf("oidc: id token not signed") | 		return nil, fmt.Errorf("oidc: id token not signed") | ||||||
|  | @ -302,6 +323,7 @@ func (v *IDTokenVerifier) Verify(ctx context.Context, rawIDToken string) (*IDTok | ||||||
| 
 | 
 | ||||||
| 	t.sigAlgorithm = sig.Header.Algorithm | 	t.sigAlgorithm = sig.Header.Algorithm | ||||||
| 
 | 
 | ||||||
|  | 	ctx = context.WithValue(ctx, parsedJWTKey, jws) | ||||||
| 	gotPayload, err := v.keySet.VerifySignature(ctx, rawIDToken) | 	gotPayload, err := v.keySet.VerifySignature(ctx, rawIDToken) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to verify signature: %v", err) | 		return nil, fmt.Errorf("failed to verify signature: %v", err) | ||||||
|  |  | ||||||
							
								
								
									
										43
									
								
								vendor/github.com/gin-contrib/cors/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								vendor/github.com/gin-contrib/cors/.golangci.yml
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,43 @@ | ||||||
|  | linters: | ||||||
|  |   enable-all: false | ||||||
|  |   disable-all: true | ||||||
|  |   fast: false | ||||||
|  |   enable: | ||||||
|  |     - bodyclose | ||||||
|  |     - deadcode | ||||||
|  |     - depguard | ||||||
|  |     - dogsled | ||||||
|  |     - dupl | ||||||
|  |     - errcheck | ||||||
|  |     - exportloopref | ||||||
|  |     - exhaustive | ||||||
|  |     - gochecknoinits | ||||||
|  |     - goconst | ||||||
|  |     - gocritic | ||||||
|  |     - gocyclo | ||||||
|  |     - gofmt | ||||||
|  |     - goimports | ||||||
|  |     - goprintffuncname | ||||||
|  |     - gosec | ||||||
|  |     - gosimple | ||||||
|  |     - govet | ||||||
|  |     - ineffassign | ||||||
|  |     - lll | ||||||
|  |     - misspell | ||||||
|  |     - nakedret | ||||||
|  |     - noctx | ||||||
|  |     - nolintlint | ||||||
|  |     - rowserrcheck | ||||||
|  |     - staticcheck | ||||||
|  |     - structcheck | ||||||
|  |     - stylecheck | ||||||
|  |     - typecheck | ||||||
|  |     - unconvert | ||||||
|  |     - unparam | ||||||
|  |     - unused | ||||||
|  |     - varcheck | ||||||
|  |     - whitespace | ||||||
|  |     - gofumpt | ||||||
|  | 
 | ||||||
|  | run: | ||||||
|  |   timeout: 3m | ||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue