diff --git a/.buildkite/pipeline.yaml b/.buildkite/pipeline.yaml index 9f44877fe..9d755a244 100644 --- a/.buildkite/pipeline.yaml +++ b/.buildkite/pipeline.yaml @@ -1,50 +1,49 @@ steps: - command: - - "go build ./cmd/..." - label: ":hammer-and-wrench: Build / :go: 1.11" - env: - GOGC: "400" - DENDRITE_LINT_DISABLE_GC: "1" + # https://github.com/golangci/golangci-lint#memory-usage-of-golangci-lint + - "GOGC=20 ./scripts/find-lint.sh" + label: "\U0001F9F9 Lint / :go: 1.12" + agents: + # Use a larger instance as linting takes a looot of memory + queue: "medium" plugins: - docker#v3.0.1: - image: "golang:1.11-alpine" + image: "golang:1.12" - - command: - - "go test ./..." - label: ":female-scientist: Unit tests / :go: 1.11" - env: - GOGC: "400" - DENDRITE_LINT_DISABLE_GC: "1" - plugins: - - docker#v3.0.1: - image: "golang:1.11-alpine" + - wait - command: - "go build ./cmd/..." - label: ":hammer-and-wrench: Build / :go: 1.12" - env: - GOGC: "400" - DENDRITE_LINT_DISABLE_GC: "1" + label: "\U0001F528 Build / :go: 1.11" plugins: - docker#v3.0.1: - image: "golang:1.12-alpine" + image: "golang:1.11" + retry: + automatic: + - exit_status: 128 + limit: 3 + + - command: + - "go build ./cmd/..." + label: "\U0001F528 Build / :go: 1.12" + plugins: + - docker#v3.0.1: + image: "golang:1.12" + retry: + automatic: + - exit_status: 128 + limit: 3 - command: - "go test ./..." - label: ":female-scientist: Unit tests / :go: 1.12" - env: - GOGC: "400" - DENDRITE_LINT_DISABLE_GC: "1" + label: "\U0001F9EA Unit tests / :go: 1.11" plugins: - docker#v3.0.1: - image: "golang:1.12-alpine" + image: "golang:1.11" - command: - - "./scripts/find-lint.sh" - label: ":lower_left_crayon: Lint / :go: 1.12" - env: - GOGC: "400" - DENDRITE_LINT_DISABLE_GC: "1" + - "go test ./..." + label: "\U0001F9EA Unit tests / :go: 1.12" plugins: - docker#v3.0.1: - image: "golang:1.12-alpine" + image: "golang:1.12" diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 000000000..0d0f51bd2 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,280 @@ +# Config file for golangci-lint + +# options for analysis running +run: + # default concurrency is a available CPU number + concurrency: 4 + + # timeout for analysis, e.g. 30s, 5m, default is 1m + deadline: 30m + + # exit code when at least one issue was found, default is 1 + issues-exit-code: 1 + + # include test files or not, default is true + tests: true + + # list of build tags, all linters use it. Default is empty list. + #build-tags: + # - mytag + + # which dirs to skip: they won't be analyzed; + # can use regexp here: generated.*, regexp is applied on full path; + # default value is empty list, but next dirs are always skipped independently + # from this option's value: + # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ + skip-dirs: + - bin + - docs + + # which files to skip: they will be analyzed, but issues from them + # won't be reported. Default value is empty list, but there is + # no need to include all autogenerated files, we confidently recognize + # autogenerated files. If it's not please let us know. + skip-files: + - ".*\\.md$" + - ".*\\.sh$" + - "^cmd/syncserver-integration-tests/testdata.go$" + + # by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules": + # If invoked with -mod=readonly, the go command is disallowed from the implicit + # automatic updating of go.mod described above. Instead, it fails when any changes + # to go.mod are needed. This setting is most useful to check that go.mod does + # not need updates, such as in a continuous integration and testing system. + # If invoked with -mod=vendor, the go command assumes that the vendor + # directory holds the correct copies of dependencies and ignores + # the dependency descriptions in go.mod. + #modules-download-mode: (release|readonly|vendor) + + +# output configuration options +output: + # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number" + format: colored-line-number + + # print lines of code with issue, default is true + print-issued-lines: true + + # print linter name in the end of issue text, default is true + print-linter-name: true + + +# all available settings of specific linters +linters-settings: + errcheck: + # report about not checking of errors in type assertions: `a := b.(MyStruct)`; + # default is false: such cases aren't reported by default. + check-type-assertions: false + + # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; + # default is false: such cases aren't reported by default. + check-blank: false + + # [deprecated] comma-separated list of pairs of the form pkg:regex + # the regex is used to ignore names within pkg. (default "fmt:.*"). + # see https://github.com/kisielk/errcheck#the-deprecated-method for details + #ignore: fmt:.*,io/ioutil:^Read.* + + # path to a file containing a list of functions to exclude from checking + # see https://github.com/kisielk/errcheck#excluding-functions for details + #exclude: /path/to/file.txt + govet: + # report about shadowed variables + check-shadowing: true + + # settings per analyzer + settings: + printf: # analyzer name, run `go tool vet help` to see all analyzers + funcs: # run `go tool vet help printf` to see available settings for `printf` analyzer + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf + golint: + # minimal confidence for issues, default is 0.8 + min-confidence: 0.8 + gofmt: + # simplify code: gofmt with `-s` option, true by default + simplify: true + goimports: + # put imports beginning with prefix after 3rd-party packages; + # it's a comma-separated list of prefixes + #local-prefixes: github.com/org/project + gocyclo: + # minimal code complexity to report, 30 by default (but we recommend 10-20) + min-complexity: 12 + maligned: + # print struct with more effective memory layout or not, false by default + suggest-new: true + dupl: + # tokens count to trigger issue, 150 by default + threshold: 100 + goconst: + # minimal length of string constant, 3 by default + min-len: 3 + # minimal occurrences count to trigger, 3 by default + min-occurrences: 3 + depguard: + list-type: blacklist + include-go-root: false + packages: + # - github.com/davecgh/go-spew/spew + misspell: + # Correct spellings using locale preferences for US or UK. + # Default is to use a neutral variety of English. + # Setting locale to US will correct the British spelling of 'colour' to 'color'. + locale: UK + ignore-words: + # - someword + lll: + # max line length, lines longer will be reported. Default is 120. + # '\t' is counted as 1 character by default, and can be changed with the tab-width option + line-length: 96 + # tab width in spaces. Default to 1. + tab-width: 1 + unused: + # treat code as a program (not a library) and report unused exported identifiers; default is false. + # XXX: if you enable this setting, unused will report a lot of false-positives in text editors: + # if it's called for subdir of a project it can't find funcs usages. All text editor integrations + # with golangci-lint call it on a directory with the changed file. + check-exported: false + unparam: + # Inspect exported functions, default is false. Set to true if no external program/library imports your code. + # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: + # if it's called for subdir of a project it can't find external interfaces. All text editor integrations + # with golangci-lint call it on a directory with the changed file. + check-exported: false + nakedret: + # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 + max-func-lines: 60 + prealloc: + # XXX: we don't recommend using this linter before doing performance profiling. + # For most programs usage of prealloc will be a premature optimization. + + # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. + # True by default. + simple: true + range-loops: true # Report preallocation suggestions on range loops, true by default + for-loops: false # Report preallocation suggestions on for loops, false by default + gocritic: + # Which checks should be enabled; can't be combined with 'disabled-checks'; + # See https://go-critic.github.io/overview#checks-overview + # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run` + # By default list of stable checks is used. + #enabled-checks: + + # Which checks should be disabled; can't be combined with 'enabled-checks'; default is empty + #disabled-checks: + + # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint` run to see all tags and checks. + # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". + #enabled-tags: + # - performance + + settings: # settings passed to gocritic + captLocal: # must be valid enabled check name + paramsOnly: true + #rangeValCopy: + # sizeThreshold: 32 + +linters: + enable: + - deadcode + - errcheck + - goconst + - gocyclo + - goimports # Does everything gofmt does + - gosimple + - ineffassign + - megacheck + - misspell # Check code comments, whereas misspell in CI checks *.md files + - nakedret + - staticcheck + - structcheck + - unparam + - unused + - varcheck + enable-all: false + disable: + - bodyclose + - depguard + - dupl + - gochecknoglobals + - gochecknoinits + - gocritic + - gofmt + - golint + - gosec # Should turn back on soon + - interfacer + - lll + - maligned + - prealloc # Should turn back on soon + - scopelint + - stylecheck + - typecheck # Should turn back on soon + - unconvert # Should turn back on soon + disable-all: false + presets: + fast: false + + +issues: + # List of regexps of issue texts to exclude, empty list by default. + # But independently from this option we use default exclude patterns, + # it can be disabled by `exclude-use-default: false`. To list all + # excluded by default patterns execute `golangci-lint run --help` + exclude: + # - abcdef + + # Excluding configuration per-path, per-linter, per-text and per-source + exclude-rules: + # Exclude some linters from running on tests files. + - path: _test\.go + linters: + - gocyclo + - errcheck + - dupl + - gosec + + # Exclude known linters from partially hard-vendored code, + # which is impossible to exclude via "nolint" comments. + - path: internal/hmac/ + text: "weak cryptographic primitive" + linters: + - gosec + + # Exclude some staticcheck messages + - linters: + - staticcheck + text: "SA9003:" + + # Exclude lll issues for long lines with go:generate + - linters: + - lll + source: "^//go:generate " + + # Independently from option `exclude` we use default exclude patterns, + # it can be disabled by this option. To list all + # excluded by default patterns execute `golangci-lint run --help`. + # Default value for this option is true. + exclude-use-default: false + + # Maximum issues count per one linter. Set to 0 to disable. Default is 50. + max-issues-per-linter: 0 + + # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. + max-same-issues: 0 + + # Show only new issues: if there are unstaged changes or untracked files, + # only those changes are analyzed, else only changes in HEAD~ are analyzed. + # It's a super-useful option for integration of golangci-lint into existing + # large codebase. It's not practical to fix all existing issues at the moment + # of integration: much better don't allow issues in new code. + # Default is false. + new: false + + # Show only new issues created after git revision `REV` + #new-from-rev: REV + + # Show only new issues created in git patch with set file path. + #new-from-patch: path/to/patch/file diff --git a/README.md b/README.md index 7ba64490f..8eadaf431 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Dendrite [![Build Status](https://travis-ci.org/matrix-org/dendrite.svg?branch=master)](https://travis-ci.org/matrix-org/dendrite) [![CircleCI](https://circleci.com/gh/matrix-org/dendrite.svg?style=svg)](https://circleci.com/gh/matrix-org/dendrite) [![Dendrite Dev on Matrix](https://img.shields.io/matrix/dendrite-dev:matrix.org.svg?label=%23dendrite-dev%3Amatrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#dendrite-dev:matrix.org) [![Dendrite on Matrix](https://img.shields.io/matrix/dendrite:matrix.org.svg?label=%23dendrite%3Amatrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#dendrite:matrix.org) +# Dendrite [![Build Status](https://badge.buildkite.com/4be40938ab19f2bbc4a6c6724517353ee3ec1422e279faf374.svg)](https://buildkite.com/matrix-dot-org/dendrite) [![CircleCI](https://circleci.com/gh/matrix-org/dendrite.svg?style=svg)](https://circleci.com/gh/matrix-org/dendrite) [![Dendrite Dev on Matrix](https://img.shields.io/matrix/dendrite-dev:matrix.org.svg?label=%23dendrite-dev%3Amatrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#dendrite-dev:matrix.org) [![Dendrite on Matrix](https://img.shields.io/matrix/dendrite:matrix.org.svg?label=%23dendrite%3Amatrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#dendrite:matrix.org) Dendrite will be a matrix homeserver written in go. diff --git a/build.sh b/build.sh index eed4d52f5..9a8050f3c 100755 --- a/build.sh +++ b/build.sh @@ -1,3 +1,3 @@ -#!/bin/bash +#!/bin/sh GOBIN=$PWD/`dirname $0`/bin go install -v ./cmd/... diff --git a/clientapi/auth/auth.go b/clientapi/auth/auth.go index 00943fb83..f51cfea26 100644 --- a/clientapi/auth/auth.go +++ b/clientapi/auth/auth.go @@ -130,7 +130,7 @@ func VerifyUserFromRequest( return nil, &util.JSONResponse{ Code: http.StatusUnauthorized, - JSON: jsonerror.UnknownToken("Unrecognized access token"), + JSON: jsonerror.UnknownToken("Unrecognized access token"), // nolint: misspell } } diff --git a/clientapi/auth/storage/accounts/storage.go b/clientapi/auth/storage/accounts/storage.go index 2650470b8..27c0a176a 100644 --- a/clientapi/auth/storage/accounts/storage.go +++ b/clientapi/auth/storage/accounts/storage.go @@ -23,6 +23,7 @@ import ( "github.com/matrix-org/dendrite/common" "github.com/matrix-org/gomatrixserverlib" "golang.org/x/crypto/bcrypt" + // Import the postgres database driver. _ "github.com/lib/pq" ) diff --git a/clientapi/jsonerror/jsonerror.go b/clientapi/jsonerror/jsonerror.go index fa15d9d8e..8df1fead2 100644 --- a/clientapi/jsonerror/jsonerror.go +++ b/clientapi/jsonerror/jsonerror.go @@ -87,7 +87,7 @@ func MissingToken(msg string) *MatrixError { } // UnknownToken is an error when the client tries to access a resource which -// requires authentication and supplies an unrecognized token +// requires authentication and supplies an unrecognised token func UnknownToken(msg string) *MatrixError { return &MatrixError{"M_UNKNOWN_TOKEN", msg} } diff --git a/clientapi/routing/login.go b/clientapi/routing/login.go index cb2218805..abcf7f569 100644 --- a/clientapi/routing/login.go +++ b/clientapi/routing/login.go @@ -19,6 +19,7 @@ import ( "context" "database/sql" + "github.com/matrix-org/dendrite/clientapi/auth" "github.com/matrix-org/dendrite/clientapi/auth/authtypes" "github.com/matrix-org/dendrite/clientapi/auth/storage/accounts" diff --git a/cmd/client-api-proxy/main.go b/cmd/client-api-proxy/main.go index b602016d5..27991c109 100644 --- a/cmd/client-api-proxy/main.go +++ b/cmd/client-api-proxy/main.go @@ -17,13 +17,14 @@ package main import ( "flag" "fmt" - log "github.com/sirupsen/logrus" "net/http" "net/http/httputil" "net/url" "os" "strings" "time" + + log "github.com/sirupsen/logrus" ) const usage = `Usage: %s diff --git a/cmd/federation-api-proxy/main.go b/cmd/federation-api-proxy/main.go index fc7a9e57a..fa90482d5 100644 --- a/cmd/federation-api-proxy/main.go +++ b/cmd/federation-api-proxy/main.go @@ -17,13 +17,14 @@ package main import ( "flag" "fmt" - log "github.com/sirupsen/logrus" "net/http" "net/http/httputil" "net/url" "os" "strings" "time" + + log "github.com/sirupsen/logrus" ) const usage = `Usage: %s diff --git a/cmd/kafka-producer/main.go b/cmd/kafka-producer/main.go index c35c587d8..8a4340f21 100644 --- a/cmd/kafka-producer/main.go +++ b/cmd/kafka-producer/main.go @@ -18,9 +18,10 @@ import ( "bufio" "flag" "fmt" - "github.com/Shopify/sarama" "os" "strings" + + "github.com/Shopify/sarama" ) const usage = `Usage: %s diff --git a/common/config/config.go b/common/config/config.go index 16e50aead..9fcab8cf9 100644 --- a/common/config/config.go +++ b/common/config/config.go @@ -585,7 +585,7 @@ func (config *Dendrite) check(monolithic bool) error { } // Due to how Golang manages its interface types, this condition is not redundant. - // In order to get the proper behavior, it is necessary to return an explicit nil + // In order to get the proper behaviour, it is necessary to return an explicit nil // and not a nil configErrors. // This is because the following equalities hold: // error(nil) == nil diff --git a/common/log.go b/common/log.go index 7daa069c4..89a705822 100644 --- a/common/log.go +++ b/common/log.go @@ -76,7 +76,7 @@ func SetupHookLogging(hooks []config.LogrusHook, componentName string) { // Check we received a proper logging level level, err := logrus.ParseLevel(hook.Level) if err != nil { - logrus.Fatalf("Unrecognized logging level %s: %q", hook.Level, err) + logrus.Fatalf("Unrecognised logging level %s: %q", hook.Level, err) } // Perform a first filter on the logs according to the lowest level of all @@ -90,7 +90,7 @@ func SetupHookLogging(hooks []config.LogrusHook, componentName string) { checkFileHookParams(hook.Params) setupFileHook(hook, level, componentName) default: - logrus.Fatalf("Unrecognized logging hook type: %s", hook.Type) + logrus.Fatalf("Unrecognised logging hook type: %s", hook.Type) } } } diff --git a/common/partition_offset_table.go b/common/partition_offset_table.go index bb23755c7..bf37e2ed5 100644 --- a/common/partition_offset_table.go +++ b/common/partition_offset_table.go @@ -50,7 +50,6 @@ type PartitionOffsetStatements struct { // Prepare converts the raw SQL statements into prepared statements. // Takes a prefix to prepend to the table name used to store the partition offsets. // This allows multiple components to share the same database schema. -// nolint: safesql func (s *PartitionOffsetStatements) Prepare(db *sql.DB, prefix string) (err error) { _, err = db.Exec(strings.Replace(partitionOffsetsSchema, "${prefix}", prefix, -1)) if err != nil { diff --git a/common/test/client.go b/common/test/client.go index d1c40e53f..a38540ac9 100644 --- a/common/test/client.go +++ b/common/test/client.go @@ -34,7 +34,7 @@ type Request struct { LastErr *LastRequestErr } -// LastRequestErr is a synchronized error wrapper +// LastRequestErr is a synchronised error wrapper // Useful for obtaining the last error from a set of requests type LastRequestErr struct { sync.Mutex diff --git a/common/types.go b/common/types.go index e539774e2..6888d3806 100644 --- a/common/types.go +++ b/common/types.go @@ -43,7 +43,7 @@ type DisplayName struct { // WeakBoolean is a type that will Unmarshal to true or false even if the encoded // representation is "true"/1 or "false"/0, as well as whatever other forms are -// recognized by strconv.ParseBool +// recognised by strconv.ParseBool type WeakBoolean bool // UnmarshalJSON is overridden here to allow strings vaguely representing a true diff --git a/docs/sytest.md b/docs/sytest.md index a0f7d85c1..e936dc493 100644 --- a/docs/sytest.md +++ b/docs/sytest.md @@ -1,8 +1,78 @@ # SyTest Dendrite uses [SyTest](https://github.com/matrix-org/sytest) for its -integration testing. When creating a new PR, add the test IDs that your PR -should allow to pass to `testfile` in dendrite's root directory. Not all PRs -need to make new tests pass. If we find your PR should be making a test pass we -may ask you to add to that file, as generally Dendrite's progress can be +integration testing. When creating a new PR, add the test IDs (see below) that +your PR should allow to pass to `testfile` in dendrite's root directory. Not all +PRs need to make new tests pass. If we find your PR should be making a test pass +we may ask you to add to that file, as generally Dendrite's progress can be tracked through the amount of SyTest tests it passes. + +## Finding out which tests to add + +We recommend you run the tests locally by manually setting up SyTest or using a +SyTest docker image. After running the tests, a script will print the tests you +need to add to `testfile` for you. + +You should proceed after you see no build problems for dendrite after running: + +```sh +./build.sh +``` + +### Manually Setting up SyTest + +Make sure you have Perl v5+ installed, and get SyTest with: + +(Note that this guide assumes your SyTest checkout is next to your +`dendrite` checkout.) + +```sh +git clone -b develop https://github.com/matrix-org/sytest +cd sytest +./install-deps.pl +``` + +Set up the database: + +```sh +sudo -u postgres psql -c "CREATE USER dendrite PASSWORD 'itsasecret'" +sudo -u postgres psql -c "CREATE DATABASE sytest_template OWNER dendrite" +mkdir -p "server-0" +cat > "server-0/database.yaml" << EOF +args: + user: dendrite + database: dendrite + host: 127.0.0.1 +type: pg +EOF +``` + +Run the tests: + +```sh +./run-tests.pl -I Dendrite::Monolith -d ../dendrite/bin -W ../dendrite/testfile -O tap --all | tee results.tap +``` + +where `tee` lets you see the results while they're being piped to the file. + +Once the tests are complete, run the helper script to see if you need to add +any newly passing test names to `testfile` in the project's root directory: + +```sh +../dendrite/show-expected-fail-tests.sh results.tap ../dendrite/testfile +``` + +If the script prints nothing/exits with 0, then you're good to go. + +### Using a SyTest Docker image + +Ensure you have the latest image for SyTest, then run the tests: + +```sh +docker pull matrixdotorg/sytest-dendrite +docker run --rm -v /path/to/dendrite/:/src/ matrixdotorg/sytest-dendrite +``` + +where `/path/to/dendrite/` should be replaced with the actual path to your +dendrite source code. The output should tell you if you need to add any tests to +`testfile`. diff --git a/federationapi/routing/state.go b/federationapi/routing/state.go index 130f8a4f7..86cf1cf54 100644 --- a/federationapi/routing/state.go +++ b/federationapi/routing/state.go @@ -75,7 +75,8 @@ func parseEventIDParam( ) (eventID string, resErr *util.JSONResponse) { URL, err := url.Parse(request.RequestURI()) if err != nil { - *resErr = util.ErrorResponse(err) + response := util.ErrorResponse(err) + resErr = &response return } @@ -102,6 +103,10 @@ func getState( return nil, resErr } + if event.RoomID() != roomID { + return nil, &util.JSONResponse{Code: http.StatusNotFound, JSON: nil} + } + prevEventIDs := getIDsFromEventRef(event.PrevEvents()) authEventIDs := getIDsFromEventRef(event.AuthEvents()) diff --git a/go.mod b/go.mod index 4ab381206..574905727 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b - github.com/davecgh/go-spew v1.1.0 + github.com/davecgh/go-spew v1.1.1 github.com/eapache/go-resiliency v0.0.0-20160104191539-b86b1ec0dd42 github.com/eapache/go-xerial-snappy v0.0.0-20160609142408-bb955e01b934 github.com/eapache/queue v1.1.0 @@ -22,10 +22,10 @@ require ( github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6 github.com/lib/pq v0.0.0-20170918175043-23da1db4f16d github.com/matrix-org/dugong v0.0.0-20171220115018-ea0a4690a0d5 - github.com/matrix-org/gomatrix v0.0.0-20171003113848-a7fc80c8060c - github.com/matrix-org/gomatrixserverlib v0.0.0-20181109104322-1c2cbc0872f0 + github.com/matrix-org/gomatrix v0.0.0-20190130130140-385f072fe9af + github.com/matrix-org/gomatrixserverlib v0.0.0-20190619132215-178ed5e3b8e2 github.com/matrix-org/naffka v0.0.0-20171115094957-662bfd0841d0 - github.com/matrix-org/util v0.0.0-20171013132526-8b1c8ab81986 + github.com/matrix-org/util v0.0.0-20171127121716-2e2df66af2f5 github.com/matttproud/golang_protobuf_extensions v1.0.1 github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 github.com/nicksnyder/go-i18n v1.8.1 @@ -40,11 +40,11 @@ require ( github.com/prometheus/common v0.0.0-20170108231212-dd2f054febf4 github.com/prometheus/procfs v0.0.0-20170128160123-1878d9fbb537 github.com/rcrowley/go-metrics v0.0.0-20161128210544-1f30fe9094a5 - github.com/sirupsen/logrus v0.0.0-20170822132746-89742aefa4b2 - github.com/stretchr/testify v0.0.0-20170809224252-890a5c3458b4 - github.com/tidwall/gjson v1.0.2 - github.com/tidwall/match v0.0.0-20171002075945-1731857f09b1 - github.com/tidwall/sjson v1.0.0 + github.com/sirupsen/logrus v1.3.0 + github.com/stretchr/testify v1.2.2 + github.com/tidwall/gjson v1.1.5 + github.com/tidwall/match v1.0.1 + github.com/tidwall/sjson v1.0.3 github.com/uber-go/atomic v1.3.0 github.com/uber/jaeger-client-go v2.15.0+incompatible github.com/uber/jaeger-lib v1.5.0 @@ -52,14 +52,14 @@ require ( go.uber.org/atomic v1.3.0 go.uber.org/multierr v0.0.0-20170829224307-fb7d312c2c04 go.uber.org/zap v1.7.1 - golang.org/x/crypto v0.0.0-20181106171534-e4dc69e5b2fd - golang.org/x/net v0.0.0-20170927055102-0a9397675ba3 - golang.org/x/sys v0.0.0-20171012164349-43eea11bc926 + golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613 + golang.org/x/net v0.0.0-20190301231341-16b79f2e4e95 + golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33 gopkg.in/Shopify/sarama.v1 v1.11.0 gopkg.in/airbrake/gobrake.v2 v2.0.9 gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20170727041045-23bcc3c4eae3 gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 gopkg.in/h2non/bimg.v1 v1.0.18 - gopkg.in/macaroon.v2 v2.0.0 - gopkg.in/yaml.v2 v2.0.0-20171116090243-287cf08546ab + gopkg.in/macaroon.v2 v2.1.0 + gopkg.in/yaml.v2 v2.2.2 ) diff --git a/go.sum b/go.sum index 941c4f813..250b300b6 100644 --- a/go.sum +++ b/go.sum @@ -10,38 +10,54 @@ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/eapache/go-resiliency v0.0.0-20160104191539-b86b1ec0dd42 h1:f8ERmXYuaC+kCSv2w+y3rBK/oVu6If4DEm3jywJJ0hc= github.com/eapache/go-resiliency v0.0.0-20160104191539-b86b1ec0dd42/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20160609142408-bb955e01b934 h1:oGLoaVIefp3tiOgi7+KInR/nNPvEpPM6GFo+El7fd14= github.com/eapache/go-xerial-snappy v0.0.0-20160609142408-bb955e01b934/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/frankban/quicktest v1.0.0/go.mod h1:R98jIehRai+d1/3Hv2//jOVCTJhW1VBavT6B6CuGq2k= github.com/golang/protobuf v0.0.0-20161117033126-8ee79997227b h1:fE/yi9pibxGEc0gSJuEShcsBXE2d5FW3OudsjE9tKzQ= github.com/golang/protobuf v0.0.0-20161117033126-8ee79997227b/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.0-20170119014723-7db9049039a0 h1:FMElzTwkd/2jQ2QzLEzt97JRgvFhYhnYiaQSwZ7tuyU= github.com/golang/snappy v0.0.0-20170119014723-7db9049039a0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/shlex v0.0.0-20150127133951-6f45313302b9/go.mod h1:RpwtwJQFrIEPstU94h88MWPXP2ektJZ8cZ0YntAmXiE= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.3.0 h1:HwSEKGN6U5T2aAQTfu5pW8fiwjSp3IgwdRbkICydk/c= github.com/gorilla/mux v1.3.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= github.com/jaegertracing/jaeger-client-go v0.0.0-20170921145708-3ad49a1d839b/go.mod h1:HWG7INeOG1ZE17I/S8eeb+svquXmBS/hf1Obi6hJUyQ= github.com/jaegertracing/jaeger-lib v0.0.0-20170920222118-21a3da6d66fe/go.mod h1:VqeqQrZmZr9G4WdLw4ei9tAHU54iJRkfoFHvTTQn4jQ= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6 h1:KAZ1BW2TCmT6PRihDPpocIy1QTtsAsrx6TneU/4+CMg= github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v0.0.0-20170918175043-23da1db4f16d h1:Hdtccv31GWxWoCzWsIhZXy5NxEktzAkA8lywhTKu8O4= github.com/lib/pq v0.0.0-20170918175043-23da1db4f16d/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/matrix-org/dugong v0.0.0-20171220115018-ea0a4690a0d5 h1:nMX2t7hbGF0NYDYySx0pCqEKGKAeZIiSqlWSspetlhY= github.com/matrix-org/dugong v0.0.0-20171220115018-ea0a4690a0d5/go.mod h1:NgPCr+UavRGH6n5jmdX8DuqFZ4JiCWIJoZiuhTRLSUg= github.com/matrix-org/gomatrix v0.0.0-20171003113848-a7fc80c8060c h1:aZap604NyBGhAUE0CyNHz6+Pryye5A5mHnYyO4KPPW8= github.com/matrix-org/gomatrix v0.0.0-20171003113848-a7fc80c8060c/go.mod h1:3fxX6gUjWyI/2Bt7J1OLhpCzOfO/bB3AiX0cJtEKud0= +github.com/matrix-org/gomatrix v0.0.0-20190130130140-385f072fe9af h1:piaIBNQGIHnni27xRB7VKkEwoWCgAmeuYf8pxAyG0bI= +github.com/matrix-org/gomatrix v0.0.0-20190130130140-385f072fe9af/go.mod h1:3fxX6gUjWyI/2Bt7J1OLhpCzOfO/bB3AiX0cJtEKud0= github.com/matrix-org/gomatrixserverlib v0.0.0-20181109104322-1c2cbc0872f0 h1:3UzhmERBbis4ZaB3imEbZwtDjGz/oVRC2cLLEajCzJA= github.com/matrix-org/gomatrixserverlib v0.0.0-20181109104322-1c2cbc0872f0/go.mod h1:YHyhIQUmuXyKtoVfDUMk/DyU93Taamlu6nPZkij/JtA= +github.com/matrix-org/gomatrixserverlib v0.0.0-20190619132215-178ed5e3b8e2 h1:pYajAEdi3sowj4iSunqctchhcMNW3rDjeeH0T4uDkMY= +github.com/matrix-org/gomatrixserverlib v0.0.0-20190619132215-178ed5e3b8e2/go.mod h1:sf0RcKOdiwJeTti7A313xsaejNUGYDq02MQZ4JD4w/E= github.com/matrix-org/naffka v0.0.0-20171115094957-662bfd0841d0 h1:p7WTwG+aXM86+yVrYAiCMW3ZHSmotVvuRbjtt3jC+4A= github.com/matrix-org/naffka v0.0.0-20171115094957-662bfd0841d0/go.mod h1:cXoYQIENbdWIQHt1SyCo6Bl3C3raHwJ0wgVrXHSqf+A= github.com/matrix-org/util v0.0.0-20171013132526-8b1c8ab81986 h1:TiWl4hLvezAhRPM8tPcPDFTysZ7k4T/1J4GPp/iqlZo= github.com/matrix-org/util v0.0.0-20171013132526-8b1c8ab81986/go.mod h1:lePuOiXLNDott7NZfnQvJk0lAZ5HgvIuWGhel6J+RLA= +github.com/matrix-org/util v0.0.0-20171127121716-2e2df66af2f5 h1:W7l5CP4V7wPyPb4tYE11dbmeAOwtFQBTW0rf4OonOS8= +github.com/matrix-org/util v0.0.0-20171127121716-2e2df66af2f5/go.mod h1:lePuOiXLNDott7NZfnQvJk0lAZ5HgvIuWGhel6J+RLA= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/dns v1.1.4/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 h1:BvoENQQU+fZ9uukda/RzCAL/191HHwJA5b13R6diVlY= github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/nicksnyder/go-i18n v1.8.1/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= @@ -67,13 +83,23 @@ github.com/rcrowley/go-metrics v0.0.0-20161128210544-1f30fe9094a5 h1:gwcdIpH6NU2 github.com/rcrowley/go-metrics v0.0.0-20161128210544-1f30fe9094a5/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/sirupsen/logrus v0.0.0-20170822132746-89742aefa4b2 h1:+8J/sCAVv2Y9Ct1BKszDFJEVWv6Aynr2O4FYGUg6+Mc= github.com/sirupsen/logrus v0.0.0-20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.3.0 h1:hI/7Q+DtNZ2kINb6qt/lS+IyXnHQe9e90POfeewL/ME= +github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v0.0.0-20170809224252-890a5c3458b4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/tidwall/gjson v1.0.2 h1:5BsM7kyEAHAUGEGDkEKO9Mdyiuw6QQ6TSDdarP0Nnmk= github.com/tidwall/gjson v1.0.2/go.mod h1:c/nTNbUr0E0OrXEhq1pwa8iEgc2DOt4ZZqAt1HtCkPA= +github.com/tidwall/gjson v1.1.5 h1:QysILxBeUEY3GTLA0fQVgkQG1zme8NxGvhh2SSqWNwI= +github.com/tidwall/gjson v1.1.5/go.mod h1:c/nTNbUr0E0OrXEhq1pwa8iEgc2DOt4ZZqAt1HtCkPA= github.com/tidwall/match v0.0.0-20171002075945-1731857f09b1 h1:pWIN9LOlFRCJFqWIOEbHLvY0WWJddsjH2FQ6N0HKZdU= github.com/tidwall/match v0.0.0-20171002075945-1731857f09b1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= +github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc= +github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= github.com/tidwall/sjson v1.0.0 h1:hOrzQPtGKlKAudQVmU43GkxEgG8TOgKyiKUyb7sE0rs= github.com/tidwall/sjson v1.0.0/go.mod h1:bURseu1nuBkFpIES5cz6zBtjmYeOQmEESshn7VpF15Y= +github.com/tidwall/sjson v1.0.3 h1:DeF+0LZqvIt4fKYw41aPB29ZGlvwVkHKktoXJ1YW9Y8= +github.com/tidwall/sjson v1.0.3/go.mod h1:bURseu1nuBkFpIES5cz6zBtjmYeOQmEESshn7VpF15Y= github.com/uber-go/atomic v1.3.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= github.com/uber/jaeger-client-go v2.15.0+incompatible h1:NP3qsSqNxh8VYr956ur1N/1C1PjvOJnJykCzcD5QHbk= github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= @@ -83,18 +109,29 @@ github.com/uber/tchannel-go v0.0.0-20170927010734-b3e26487e291/go.mod h1:Rrgz1eL go.uber.org/atomic v1.3.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v0.0.0-20170829224307-fb7d312c2c04/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.7.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180723164146-c126467f60eb/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181106171534-e4dc69e5b2fd h1:VtIkGDhk0ph3t+THbvXHfMZ8QHgsBO39Nh52+74pq7w= golang.org/x/crypto v0.0.0-20181106171534-e4dc69e5b2fd/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613 h1:MQ/ZZiDsUapFFiMS+vzwXkCTeEKaum+Do5rINYJDmxc= +golang.org/x/crypto v0.0.0-20190131182504-b8fe1690c613/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/net v0.0.0-20170927055102-0a9397675ba3 h1:tTDpczhDVjW6WN3DinzKcw5juwkDTVn22I7MNlfxSXM= golang.org/x/net v0.0.0-20170927055102-0a9397675ba3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190301231341-16b79f2e4e95/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/sys v0.0.0-20171012164349-43eea11bc926 h1:PY6OU86NqbyZiOzaPnDw6oOjAGtYQqIua16z6y9QkwE= golang.org/x/sys v0.0.0-20171012164349-43eea11bc926/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33 h1:I6FyU15t786LL7oL/hn43zqTuEGr4PN7F4XJ1p4E3Y8= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= gopkg.in/Shopify/sarama.v1 v1.11.0 h1:/3kaCyeYaPbr59IBjeqhIcUOB1vXlIVqXAYa5g5C5F0= gopkg.in/Shopify/sarama.v1 v1.11.0/go.mod h1:AxnvoaevB2nBjNK17cG61A3LleFcWFwVBHBt+cot4Oc= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v3-unstable v3.0.0-20170727041045-23bcc3c4eae3/go.mod h1:3HH7i1SgMqlzxCcBmUHW657sD4Kvv9sC3HpL3YukzwA= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/h2non/bimg.v1 v1.0.18/go.mod h1:PgsZL7dLwUbsGm1NYps320GxGgvQNTnecMCZqxV11So= +gopkg.in/h2non/gock.v1 v1.0.14/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= gopkg.in/macaroon.v2 v2.0.0/go.mod h1:+I6LnTMkm/uV5ew/0nsulNjL16SK4+C8yDmRUzHR17I= +gopkg.in/macaroon.v2 v2.1.0/go.mod h1:OUb+TQP/OP0WOerC2Jp/3CwhIKyIa9kQjuc7H24e6/o= gopkg.in/yaml.v2 v2.0.0-20171116090243-287cf08546ab h1:yZ6iByf7GKeJ3gsd1Dr/xaj1DyJ//wxKX1Cdh8LhoAw= gopkg.in/yaml.v2 v2.0.0-20171116090243-287cf08546ab/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/linter-fast.json b/linter-fast.json deleted file mode 100644 index 68d518444..000000000 --- a/linter-fast.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "Vendor": true, - "Cyclo": 12, - "Deadline": "5m", - "Enable": [ - "vetshadow", - "deadcode", - "gocyclo", - "ineffassign", - "misspell", - "errcheck", - "vet", - "gofmt", - "goconst" - ] -} diff --git a/linter.json b/linter.json deleted file mode 100644 index 1f0550aaf..000000000 --- a/linter.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "Vendor": true, - "Cyclo": 12, - "Deadline": "5m", - "Enable": [ - "vetshadow", - "deadcode", - "gocyclo", - "golint", - "varcheck", - "structcheck", - "ineffassign", - "misspell", - "unparam", - "errcheck", - "vet", - "gofmt", - "goconst" - ] -} diff --git a/mediaapi/thumbnailer/thumbnailer_nfnt.go b/mediaapi/thumbnailer/thumbnailer_nfnt.go index 43bf8efba..5df6ce4be 100644 --- a/mediaapi/thumbnailer/thumbnailer_nfnt.go +++ b/mediaapi/thumbnailer/thumbnailer_nfnt.go @@ -20,9 +20,11 @@ import ( "context" "image" "image/draw" + // Imported for gif codec _ "image/gif" "image/jpeg" + // Imported for png codec _ "image/png" "os" @@ -258,9 +260,6 @@ func adjustSize(dst types.Path, img image.Image, w, h int, crop bool, logger *lo out = target } else { out = resize.Thumbnail(uint(w), uint(h), img, resize.Lanczos3) - if err != nil { - return -1, -1, err - } } if err = writeFile(out, string(dst)); err != nil { diff --git a/publicroomsapi/storage/public_rooms_table.go b/publicroomsapi/storage/public_rooms_table.go index 85d65c2cc..5e1eb3e12 100644 --- a/publicroomsapi/storage/public_rooms_table.go +++ b/publicroomsapi/storage/public_rooms_table.go @@ -134,7 +134,6 @@ type publicRoomsStatements struct { updateRoomAttributeStmts map[string]*sql.Stmt } -// nolint: safesql func (s *publicRoomsStatements) prepare(db *sql.DB) (err error) { _, err = db.Exec(publicRoomsSchema) if err != nil { diff --git a/roomserver/storage/prepare.go b/roomserver/storage/prepare.go index 61c49a3c1..b19765992 100644 --- a/roomserver/storage/prepare.go +++ b/roomserver/storage/prepare.go @@ -25,7 +25,6 @@ type statementList []struct { } // prepare the SQL for each statement in the list and assign the result to the prepared statement. -// nolint: safesql func (s statementList) prepare(db *sql.DB) (err error) { for _, statement := range s { if *statement.statement, err = db.Prepare(statement.sql); err != nil { diff --git a/scripts/find-lint.sh b/scripts/find-lint.sh index a8201072b..6511272b2 100755 --- a/scripts/find-lint.sh +++ b/scripts/find-lint.sh @@ -3,44 +3,26 @@ # Runs the linters against dendrite # The linters can take a lot of resources and are slow, so they can be -# configured using two environment variables: +# configured using the following environment variables: # # - `DENDRITE_LINT_CONCURRENCY` - number of concurrent linters to run, -# gometalinter defaults this to 8 -# - `DENDRITE_LINT_DISABLE_GC` - if set then the the go gc will be disabled -# when running the linters, speeding them up but using much more memory. +# golangci-lint defaults this to NumCPU +# - `GOGC` - how often to perform garbage collection during golangci-lint runs. +# Essentially a ratio of memory/speed. See https://github.com/golangci/golangci-lint#memory-usage-of-golangci-lint +# for more info. set -eux cd `dirname $0`/.. -# gometalinter doesn't seem to work without this. -# We should move from gometalinter asap as per https://github.com/matrix-org/dendrite/issues/697 so this is a temporary -# fix. -export GO111MODULE=off - args="" if [ ${1:-""} = "fast" ] -then args="--config=linter-fast.json" -else args="--config=linter.json" +then args="--fast" fi -if [ -n "${DENDRITE_LINT_CONCURRENCY:-}" ] -then args="$args --concurrency=$DENDRITE_LINT_CONCURRENCY" -fi - -if [ -z "${DENDRITE_LINT_DISABLE_GC:-}" ] -then args="$args --enable-gc" -fi - -echo "Installing lint search engine..." -go get github.com/alecthomas/gometalinter/ - -gometalinter --config=linter.json ./... --install +echo "Installing golangci-lint..." +go get github.com/golangci/golangci-lint/cmd/golangci-lint echo "Looking for lint..." -gometalinter ./... $args - -echo "Double checking spelling..." -misspell -error src *.md +golangci-lint run $args diff --git a/show-expected-fail-tests.sh b/show-expected-fail-tests.sh new file mode 100755 index 000000000..f58416b2d --- /dev/null +++ b/show-expected-fail-tests.sh @@ -0,0 +1,44 @@ +#! /bin/bash + +results_file=$1 +testfile=$2 + +fail_build=0 + +if [ ! -f "$results_file" ]; then + echo "ERROR: Specified results file ${results_file} doesn't exist." + fail_build=1 +fi + +if [ ! -f "$testfile" ]; then + echo "ERROR: Specified testfile ${testfile} doesn't exist." + fail_build=1 +fi + +[ "$fail_build" = 0 ] || exit 1 + +passed_but_expected_fail=$(grep ' # TODO passed but expected fail' ${results_file} | sed -E 's/^ok [0-9]+ (\(expected fail\) )?//' | sed -E 's/( \([0-9]+ subtests\))? # TODO passed but expected fail$//') +tests_to_add="" +already_in_testfile="" + +while read -r test_id; do + grep "${test_id}" "${testfile}" > /dev/null 2>&1 + if [ "$?" != "0" ]; then + tests_to_add="${tests_to_add}${test_id}\n" + fail_build=1 + else + already_in_testfile="${already_in_testfile}${test_id}\n" + fi +done <<< "${passed_but_expected_fail}" + +if [ -n "${tests_to_add}" ]; then + echo "ERROR: The following passed tests are not present in testfile. Please append them to the file:" + echo -e "${tests_to_add}" +fi + +if [ -n "${already_in_testfile}" ]; then + echo "WARN: Tests in testfile still marked as expected fail:" + echo -e "${already_in_testfile}" +fi + +exit ${fail_build} diff --git a/syncapi/consumers/roomserver.go b/syncapi/consumers/roomserver.go index 273b6aea1..1866a9667 100644 --- a/syncapi/consumers/roomserver.go +++ b/syncapi/consumers/roomserver.go @@ -134,10 +134,6 @@ func (s *OutputRoomEventConsumer) onNewRoomEvent( msg.RemovesStateEventIDs, msg.TransactionID, ) - if err != nil { - return err - } - if err != nil { // panic rather than continue with an inconsistent database log.WithFields(log.Fields{ diff --git a/syncapi/storage/syncserver.go b/syncapi/storage/syncserver.go index ec973e2c1..b0655a0a8 100644 --- a/syncapi/storage/syncserver.go +++ b/syncapi/storage/syncserver.go @@ -23,6 +23,7 @@ import ( "github.com/matrix-org/dendrite/clientapi/auth/authtypes" "github.com/matrix-org/dendrite/roomserver/api" + // Import the postgres database driver. _ "github.com/lib/pq" "github.com/matrix-org/dendrite/common" diff --git a/testfile b/testfile index d90a9458c..ea6fc9172 100644 --- a/testfile +++ b/testfile @@ -1,4 +1,144 @@ GET /register yields a set of flows POST /register can create a user POST /register downcases capitals in usernames - +POST /register rejects registration of usernames with '!' +POST /register rejects registration of usernames with '"' +POST /register rejects registration of usernames with ':' +POST /register rejects registration of usernames with '?' +POST /register rejects registration of usernames with '\' +POST /register rejects registration of usernames with '@' +POST /register rejects registration of usernames with '[' +POST /register rejects registration of usernames with ']' +POST /register rejects registration of usernames with '{' +POST /register rejects registration of usernames with '|' +POST /register rejects registration of usernames with '}' +POST /register rejects registration of usernames with '£' +POST /register rejects registration of usernames with 'é' +POST /register rejects registration of usernames with '\n' +POST /register rejects registration of usernames with ''' +GET /login yields a set of flows +POST /login can log in as a user +POST /login can log in as a user with just the local part of the id +POST /login as non-existing user is rejected +POST /login wrong password is rejected +GET /events initially +GET /initialSync initially +Version responds 200 OK with valid structure +PUT /profile/:user_id/displayname sets my name +GET /profile/:user_id/displayname publicly accessible +PUT /profile/:user_id/avatar_url sets my avatar +GET /profile/:user_id/avatar_url publicly accessible +GET /device/{deviceId} gives a 404 for unknown devices +PUT /device/{deviceId} gives a 404 for unknown devices +POST /createRoom makes a public room +POST /createRoom makes a private room +POST /createRoom makes a private room with invites +POST /createRoom makes a room with a name +POST /createRoom makes a room with a topic +Can /sync newly created room +GET /rooms/:room_id/state/m.room.member/:user_id fetches my membership +GET /rooms/:room_id/state/m.room.power_levels fetches powerlevels +POST /join/:room_alias can join a room +POST /join/:room_id can join a room +POST /join/:room_id can join a room with custom content +POST /join/:room_alias can join a room with custom content +POST /rooms/:room_id/leave can leave a room +POST /rooms/:room_id/invite can send an invite +POST /rooms/:room_id/ban can ban a user +POST /rooms/:room_id/send/:event_type sends a message +PUT /rooms/:room_id/send/:event_type/:txn_id sends a message +PUT /rooms/:room_id/send/:event_type/:txn_id deduplicates the same txn id +GET /rooms/:room_id/state/m.room.power_levels can fetch levels +PUT /rooms/:room_id/state/m.room.power_levels can set levels +PUT power_levels should not explode if the old power levels were empty +Both GET and PUT work +POST /rooms/:room_id/read_markers can create read marker +User signups are forbidden from starting with '_' +Can logout all devices +Request to logout with invalid an access token is rejected +Request to logout without an access token is rejected +Room creation reports m.room.create to myself +Room creation reports m.room.member to myself +New room members see their own join event +Existing members see new members' join events +setting 'm.room.power_levels' respects room powerlevel +Unprivileged users can set m.room.topic if it only needs level 0 +Users cannot set ban powerlevel higher than their own +Users cannot set kick powerlevel higher than their own +Users cannot set redact powerlevel higher than their own +Can get rooms/{roomId}/members for a departed room (SPEC-216) +3pid invite join with wrong but valid signature are rejected +3pid invite join valid signature but revoked keys are rejected +3pid invite join valid signature but unreachable ID server are rejected +Room members can override their displayname on a room-specific basis +Room members can join a room with an overridden displayname +displayname updates affect room member events +avatar_url updates affect room member events +Real non-joined user cannot call /events on shared room +Real non-joined user cannot call /events on invited room +Real non-joined user cannot call /events on joined room +Real non-joined user cannot call /events on default room +Real non-joined users can get state for world_readable rooms +Real non-joined users can get individual state for world_readable rooms +Real non-joined users can get individual state for world_readable rooms after leaving +Real non-joined users cannot send messages to guest_access rooms if not joined +Real users can sync from world_readable guest_access rooms if joined +Real users can sync from default guest_access rooms if joined +Can't forget room you're still in +Can get rooms/{roomId}/members +Can create filter +Can download filter +Can sync +Can sync a joined room +Newly joined room is included in an incremental sync +User is offline if they set_presence=offline in their sync +Changes to state are included in an incremental sync +A change to displayname should appear in incremental /sync +Current state appears in timeline in private history +Current state appears in timeline in private history with many messages before +Rooms a user is invited to appear in an initial sync +Rooms a user is invited to appear in an incremental sync +Sync can be polled for updates +Sync is woken up for leaves +Newly left rooms appear in the leave section of incremental sync +We should see our own leave event, even if history_visibility is restricted (SYN-662) +We should see our own leave event when rejecting an invite, even if history_visibility is restricted (riot-web/3462) +Newly left rooms appear in the leave section of gapped sync +Previously left rooms don't appear in the leave section of sync +Left rooms appear in the leave section of full state sync +Newly banned rooms appear in the leave section of incremental sync +Newly banned rooms appear in the leave section of incremental sync +local user can join room with version 1 +User can invite local user to room with version 1 +local user can join room with version 2 +User can invite local user to room with version 2 +local user can join room with version 3 +User can invite local user to room with version 3 +local user can join room with version 4 +User can invite local user to room with version 4 +Should reject keys claiming to belong to a different user +Can add account data +Can add account data to room +Latest account data appears in v2 /sync +New account data appears in incremental v2 /sync +Checking local federation server +Inbound federation can query profile data +Outbound federation can send room-join requests +Outbound federation can send events +Inbound federation can backfill events +Backfill checks the events requested belong to the room +Can upload without a file name +Can download without a file name locally +Can upload with ASCII file name +Can send image in room message +AS cannot create users outside its own namespace +Regular users cannot register within the AS namespace +AS can't set displayname for random users +AS user (not ghost) can join room without registering, with user_id query param +Changing the actions of an unknown default rule fails with 404 +Changing the actions of an unknown rule fails with 404 +Enabling an unknown default rule fails with 404 +Trying to get push rules with unknown rule_id fails with 404 +Events come down the correct room +local user can join room with version 5 +User can invite local user to room with version 5 diff --git a/typingserver/cache/cache.go b/typingserver/cache/cache.go index 739f60a24..85d74cd19 100644 --- a/typingserver/cache/cache.go +++ b/typingserver/cache/cache.go @@ -28,7 +28,7 @@ type TypingCache struct { data map[string]userSet } -// NewTypingCache returns a new TypingCache initialized for use. +// NewTypingCache returns a new TypingCache initialised for use. func NewTypingCache() *TypingCache { return &TypingCache{data: make(map[string]userSet)} } diff --git a/typingserver/cache/cache_test.go b/typingserver/cache/cache_test.go index 7aa73e922..2a6ffa50e 100644 --- a/typingserver/cache/cache_test.go +++ b/typingserver/cache/cache_test.go @@ -38,7 +38,7 @@ func TestTypingCache(t *testing.T) { }) } -func testAddTypingUser(t *testing.T, tCache *TypingCache) { +func testAddTypingUser(t *testing.T, tCache *TypingCache) { // nolint: unparam present := time.Now() tests := []struct { userID string