Merge branch 'main' into 1408_caldav_alarms
All checks were successful
continuous-integration/drone/pr Build is passing
All checks were successful
continuous-integration/drone/pr Build is passing
This commit is contained in:
commit
4b35f83278
|
@ -141,7 +141,7 @@ steps:
|
||||||
commands:
|
commands:
|
||||||
- export "GOROOT=$(go env GOROOT)"
|
- export "GOROOT=$(go env GOROOT)"
|
||||||
- apk --no-cache add build-base git
|
- apk --no-cache add build-base git
|
||||||
- wget -O - -q https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.51.2
|
- wget -O - -q https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.52.1
|
||||||
- ./mage-static check:all
|
- ./mage-static check:all
|
||||||
when:
|
when:
|
||||||
event: [ push, tag, pull_request ]
|
event: [ push, tag, pull_request ]
|
||||||
|
@ -506,7 +506,7 @@ steps:
|
||||||
|
|
||||||
# Build os packages and push it to our bucket
|
# Build os packages and push it to our bucket
|
||||||
- name: build-os-packages-unstable
|
- name: build-os-packages-unstable
|
||||||
image: goreleaser/nfpm:v2.26.0
|
image: goreleaser/nfpm:v2.27.1
|
||||||
pull: always
|
pull: always
|
||||||
commands:
|
commands:
|
||||||
- apk add git go
|
- apk add git go
|
||||||
|
@ -522,7 +522,7 @@ steps:
|
||||||
depends_on: [ after-build-compress ]
|
depends_on: [ after-build-compress ]
|
||||||
|
|
||||||
- name: build-os-packages-version
|
- name: build-os-packages-version
|
||||||
image: goreleaser/nfpm:v2.26.0
|
image: goreleaser/nfpm:v2.27.1
|
||||||
pull: always
|
pull: always
|
||||||
commands:
|
commands:
|
||||||
- apk add git go
|
- apk add git go
|
||||||
|
@ -731,6 +731,6 @@ steps:
|
||||||
- failure
|
- failure
|
||||||
---
|
---
|
||||||
kind: signature
|
kind: signature
|
||||||
hmac: 7242860ad70556ffeb8fc804ce0ffa0d3d1aa8e0d9167ad476aa392d7e937d48
|
hmac: 166caa5ba66cd55bc0f1c5cb42be0a0a647fbadf66716778cf795fc084fc80fd
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
|
@ -79,6 +79,7 @@ issues:
|
||||||
- path: pkg/routes/api/v1/docs.go
|
- path: pkg/routes/api/v1/docs.go
|
||||||
linters:
|
linters:
|
||||||
- goheader
|
- goheader
|
||||||
|
- misspell
|
||||||
- text: "Missed string"
|
- text: "Missed string"
|
||||||
linters:
|
linters:
|
||||||
- goheader
|
- goheader
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
# │─││ │││ │ │
|
# │─││ │││ │ │
|
||||||
# ┘─┘┘─┘┘┘─┘┘─┘
|
# ┘─┘┘─┘┘┘─┘┘─┘
|
||||||
|
|
||||||
FROM --platform=$BUILDPLATFORM techknowlogick/xgo:go-1.20.0 AS builder
|
FROM --platform=$BUILDPLATFORM techknowlogick/xgo:go-1.20.x AS builder
|
||||||
|
|
||||||
RUN go install github.com/magefile/mage@latest && \
|
RUN go install github.com/magefile/mage@latest && \
|
||||||
mv /go/bin/mage /usr/local/go/bin
|
mv /go/bin/mage /usr/local/go/bin
|
||||||
|
|
|
@ -168,6 +168,10 @@ log:
|
||||||
events: "off"
|
events: "off"
|
||||||
# The log level for event log messages. Possible values (case-insensitive) are ERROR, INFO, DEBUG.
|
# The log level for event log messages. Possible values (case-insensitive) are ERROR, INFO, DEBUG.
|
||||||
eventslevel: "info"
|
eventslevel: "info"
|
||||||
|
# Whether or not to log mail log messages. This will not log mail contents. Possible values are stdout, stderr, file or off to disable mail-related logging.
|
||||||
|
mail: "off"
|
||||||
|
# The log level for mail log messages. Possible values (case-insensitive) are ERROR, WARNING, INFO, DEBUG.
|
||||||
|
maillevel: "info"
|
||||||
|
|
||||||
ratelimit:
|
ratelimit:
|
||||||
# whether or not to enable the rate limit
|
# whether or not to enable the rate limit
|
||||||
|
|
|
@ -871,6 +871,28 @@ Full path: `log.eventslevel`
|
||||||
Environment path: `VIKUNJA_LOG_EVENTSLEVEL`
|
Environment path: `VIKUNJA_LOG_EVENTSLEVEL`
|
||||||
|
|
||||||
|
|
||||||
|
### mail
|
||||||
|
|
||||||
|
Whether or not to log mail log messages. This will not log mail contents. Possible values are stdout, stderr, file or off to disable mail-related logging.
|
||||||
|
|
||||||
|
Default: `off`
|
||||||
|
|
||||||
|
Full path: `log.mail`
|
||||||
|
|
||||||
|
Environment path: `VIKUNJA_LOG_MAIL`
|
||||||
|
|
||||||
|
|
||||||
|
### maillevel
|
||||||
|
|
||||||
|
The log level for mail log messages. Possible values (case-insensitive) are ERROR, WARNING, INFO, DEBUG.
|
||||||
|
|
||||||
|
Default: `info`
|
||||||
|
|
||||||
|
Full path: `log.maillevel`
|
||||||
|
|
||||||
|
Environment path: `VIKUNJA_LOG_MAILLEVEL`
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ratelimit
|
## ratelimit
|
||||||
|
|
10
go.mod
10
go.mod
|
@ -21,7 +21,7 @@ require (
|
||||||
gitea.com/xorm/xorm-redis-cache v0.2.0
|
gitea.com/xorm/xorm-redis-cache v0.2.0
|
||||||
github.com/ThreeDotsLabs/watermill v1.2.0
|
github.com/ThreeDotsLabs/watermill v1.2.0
|
||||||
github.com/adlio/trello v1.10.0
|
github.com/adlio/trello v1.10.0
|
||||||
github.com/arran4/golang-ical v0.0.0-20230213232137-07c6aad5e4f0
|
github.com/arran4/golang-ical v0.0.0-20230318005454-19abf92700cc
|
||||||
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef
|
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef
|
||||||
github.com/bbrks/go-blurhash v1.1.1
|
github.com/bbrks/go-blurhash v1.1.1
|
||||||
github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b
|
github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b
|
||||||
|
@ -34,12 +34,12 @@ require (
|
||||||
github.com/getsentry/sentry-go v0.19.0
|
github.com/getsentry/sentry-go v0.19.0
|
||||||
github.com/go-sql-driver/mysql v1.7.0
|
github.com/go-sql-driver/mysql v1.7.0
|
||||||
github.com/go-testfixtures/testfixtures/v3 v3.8.1
|
github.com/go-testfixtures/testfixtures/v3 v3.8.1
|
||||||
github.com/gocarina/gocsv v0.0.0-20230226133904-70c27cb2918a
|
github.com/gocarina/gocsv v0.0.0-20230325173030-9a18a846a479
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0
|
github.com/golang-jwt/jwt/v4 v4.5.0
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
||||||
github.com/google/uuid v1.3.0
|
github.com/google/uuid v1.3.0
|
||||||
github.com/iancoleman/strcase v0.2.0
|
github.com/iancoleman/strcase v0.2.0
|
||||||
github.com/imdario/mergo v0.3.13
|
github.com/imdario/mergo v0.3.15
|
||||||
github.com/jinzhu/copier v0.3.5
|
github.com/jinzhu/copier v0.3.5
|
||||||
github.com/labstack/echo-jwt/v4 v4.1.0
|
github.com/labstack/echo-jwt/v4 v4.1.0
|
||||||
github.com/labstack/echo/v4 v4.10.2
|
github.com/labstack/echo/v4 v4.10.2
|
||||||
|
@ -58,11 +58,11 @@ require (
|
||||||
github.com/spf13/cobra v1.6.1
|
github.com/spf13/cobra v1.6.1
|
||||||
github.com/spf13/viper v1.15.0
|
github.com/spf13/viper v1.15.0
|
||||||
github.com/stretchr/testify v1.8.2
|
github.com/stretchr/testify v1.8.2
|
||||||
github.com/swaggo/swag v1.8.10
|
github.com/swaggo/swag v1.8.11
|
||||||
github.com/tkuchiki/go-timezone v0.2.2
|
github.com/tkuchiki/go-timezone v0.2.2
|
||||||
github.com/ulule/limiter/v3 v3.11.1
|
github.com/ulule/limiter/v3 v3.11.1
|
||||||
github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae
|
github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae
|
||||||
github.com/wneessen/go-mail v0.3.8
|
github.com/wneessen/go-mail v0.3.9
|
||||||
github.com/yuin/goldmark v1.5.4
|
github.com/yuin/goldmark v1.5.4
|
||||||
golang.org/x/crypto v0.7.0
|
golang.org/x/crypto v0.7.0
|
||||||
golang.org/x/image v0.6.0
|
golang.org/x/image v0.6.0
|
||||||
|
|
12
go.sum
12
go.sum
|
@ -78,6 +78,8 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV
|
||||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||||
github.com/arran4/golang-ical v0.0.0-20230213232137-07c6aad5e4f0 h1:VVPogIxPiZ6WK5G4Pve5VSQ4HEFiJ8GChpqRjo1gN2c=
|
github.com/arran4/golang-ical v0.0.0-20230213232137-07c6aad5e4f0 h1:VVPogIxPiZ6WK5G4Pve5VSQ4HEFiJ8GChpqRjo1gN2c=
|
||||||
github.com/arran4/golang-ical v0.0.0-20230213232137-07c6aad5e4f0/go.mod h1:BSTTrYHuM12oAL8jDdcmPdw02SBThKYWNFHQlvEG6b0=
|
github.com/arran4/golang-ical v0.0.0-20230213232137-07c6aad5e4f0/go.mod h1:BSTTrYHuM12oAL8jDdcmPdw02SBThKYWNFHQlvEG6b0=
|
||||||
|
github.com/arran4/golang-ical v0.0.0-20230318005454-19abf92700cc h1:up1aDcTCZ3KrL2ukKxNqjMRx/CCaXyn9Wl6N7ea3EWc=
|
||||||
|
github.com/arran4/golang-ical v0.0.0-20230318005454-19abf92700cc/go.mod h1:BSTTrYHuM12oAL8jDdcmPdw02SBThKYWNFHQlvEG6b0=
|
||||||
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
|
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
|
||||||
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg=
|
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg=
|
||||||
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
|
||||||
|
@ -217,6 +219,8 @@ github.com/go-testfixtures/testfixtures/v3 v3.8.1 h1:uonwvepqRvSgddcrReZQhojTlWl
|
||||||
github.com/go-testfixtures/testfixtures/v3 v3.8.1/go.mod h1:Kdu7YeMC0KRXVHdaQ91Vmx3pcjoTF63h4f1qTJDdXLA=
|
github.com/go-testfixtures/testfixtures/v3 v3.8.1/go.mod h1:Kdu7YeMC0KRXVHdaQ91Vmx3pcjoTF63h4f1qTJDdXLA=
|
||||||
github.com/gocarina/gocsv v0.0.0-20230226133904-70c27cb2918a h1:/5o1ejt5M0fNAN2lU1NBLtPzUSZru689EWJq01ptr+E=
|
github.com/gocarina/gocsv v0.0.0-20230226133904-70c27cb2918a h1:/5o1ejt5M0fNAN2lU1NBLtPzUSZru689EWJq01ptr+E=
|
||||||
github.com/gocarina/gocsv v0.0.0-20230226133904-70c27cb2918a/go.mod h1:5YoVOkjYAQumqlV356Hj3xeYh4BdZuLE0/nRkf2NKkI=
|
github.com/gocarina/gocsv v0.0.0-20230226133904-70c27cb2918a/go.mod h1:5YoVOkjYAQumqlV356Hj3xeYh4BdZuLE0/nRkf2NKkI=
|
||||||
|
github.com/gocarina/gocsv v0.0.0-20230325173030-9a18a846a479 h1:KaCpc4e48emF9hYmMB9INyfpGJHAZxEAS9EqWFkpTig=
|
||||||
|
github.com/gocarina/gocsv v0.0.0-20230325173030-9a18a846a479/go.mod h1:5YoVOkjYAQumqlV356Hj3xeYh4BdZuLE0/nRkf2NKkI=
|
||||||
github.com/goccy/go-json v0.8.1/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.8.1/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 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk=
|
||||||
github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
|
@ -348,6 +352,10 @@ 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/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
|
github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
|
||||||
github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
|
github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
|
||||||
|
github.com/imdario/mergo v0.3.14 h1:fOqeC1+nCuuk6PKQdg9YmosXX7Y7mHX6R/0ZldI9iHo=
|
||||||
|
github.com/imdario/mergo v0.3.14/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
|
||||||
|
github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM=
|
||||||
|
github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
|
||||||
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 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
|
||||||
github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||||
|
@ -684,6 +692,8 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8
|
||||||
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
|
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
|
||||||
github.com/swaggo/swag v1.8.10 h1:eExW4bFa52WOjqRzRD58bgWsWfdFJso50lpbeTcmTfo=
|
github.com/swaggo/swag v1.8.10 h1:eExW4bFa52WOjqRzRD58bgWsWfdFJso50lpbeTcmTfo=
|
||||||
github.com/swaggo/swag v1.8.10/go.mod h1:ezQVUUhly8dludpVk+/PuwJWvLLanB13ygV5Pr9enSk=
|
github.com/swaggo/swag v1.8.10/go.mod h1:ezQVUUhly8dludpVk+/PuwJWvLLanB13ygV5Pr9enSk=
|
||||||
|
github.com/swaggo/swag v1.8.11 h1:Fp1dNNtDvbCf+8kvehZbHQnlF6AxHGjmw6H/xAMrZfY=
|
||||||
|
github.com/swaggo/swag v1.8.11/go.mod h1:2GXgpNI9iy5OdsYWu8zXfRAGnOAPxYxTWTyM0XOTYZQ=
|
||||||
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
||||||
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
||||||
github.com/tkuchiki/go-timezone v0.2.2 h1:MdHR65KwgVTwWFQrota4SKzc4L5EfuH5SdZZGtk/P2Q=
|
github.com/tkuchiki/go-timezone v0.2.2 h1:MdHR65KwgVTwWFQrota4SKzc4L5EfuH5SdZZGtk/P2Q=
|
||||||
|
@ -711,6 +721,8 @@ github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae h1:oyiy
|
||||||
github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae/go.mod h1:PnwzbSst7KD3vpBzzlntZU5gjVa455Uqa5QPiKSYJzQ=
|
github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae/go.mod h1:PnwzbSst7KD3vpBzzlntZU5gjVa455Uqa5QPiKSYJzQ=
|
||||||
github.com/wneessen/go-mail v0.3.8 h1:ja5D/o/RVwrtRIYFlrO7GmtcjDNeMakGQuwQRZYv0JM=
|
github.com/wneessen/go-mail v0.3.8 h1:ja5D/o/RVwrtRIYFlrO7GmtcjDNeMakGQuwQRZYv0JM=
|
||||||
github.com/wneessen/go-mail v0.3.8/go.mod h1:m25lkU2GYQnlVr6tdwK533/UXxo57V0kLOjaFYmub0E=
|
github.com/wneessen/go-mail v0.3.8/go.mod h1:m25lkU2GYQnlVr6tdwK533/UXxo57V0kLOjaFYmub0E=
|
||||||
|
github.com/wneessen/go-mail v0.3.9 h1:Q4DbCk3htT5DtDWKeMgNXCiHc4bBY/vv/XQPT6XDXzc=
|
||||||
|
github.com/wneessen/go-mail v0.3.9/go.mod h1:zxOlafWCP/r6FEhAaRgH4IC1vg2YXxO0Nar9u0IScZ8=
|
||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
|
|
|
@ -405,7 +405,7 @@ func checkGolangCiLintInstalled() {
|
||||||
mg.Deps(initVars)
|
mg.Deps(initVars)
|
||||||
if err := exec.Command("golangci-lint").Run(); err != nil && strings.Contains(err.Error(), "executable file not found") {
|
if err := exec.Command("golangci-lint").Run(); err != nil && strings.Contains(err.Error(), "executable file not found") {
|
||||||
fmt.Println("Please manually install golangci-lint by running")
|
fmt.Println("Please manually install golangci-lint by running")
|
||||||
fmt.Println("curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.51.2")
|
fmt.Println("curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.52.1")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,6 +118,8 @@ const (
|
||||||
LogPath Key = `log.path`
|
LogPath Key = `log.path`
|
||||||
LogEvents Key = `log.events`
|
LogEvents Key = `log.events`
|
||||||
LogEventsLevel Key = `log.eventslevel`
|
LogEventsLevel Key = `log.eventslevel`
|
||||||
|
LogMail Key = `log.mail`
|
||||||
|
LogMailLevel Key = `log.maillevel`
|
||||||
|
|
||||||
RateLimitEnabled Key = `ratelimit.enabled`
|
RateLimitEnabled Key = `ratelimit.enabled`
|
||||||
RateLimitKind Key = `ratelimit.kind`
|
RateLimitKind Key = `ratelimit.kind`
|
||||||
|
@ -351,6 +353,8 @@ func InitDefaultConfig() {
|
||||||
LogPath.setDefault(ServiceRootpath.GetString() + "/logs")
|
LogPath.setDefault(ServiceRootpath.GetString() + "/logs")
|
||||||
LogEvents.setDefault("off")
|
LogEvents.setDefault("off")
|
||||||
LogEventsLevel.setDefault("INFO")
|
LogEventsLevel.setDefault("INFO")
|
||||||
|
LogMail.setDefault("off")
|
||||||
|
LogMailLevel.setDefault("INFO")
|
||||||
// Rate Limit
|
// Rate Limit
|
||||||
RateLimitEnabled.setDefault(false)
|
RateLimitEnabled.setDefault(false)
|
||||||
RateLimitKind.setDefault("user")
|
RateLimitKind.setDefault("user")
|
||||||
|
|
87
pkg/log/mail_logger.go
Normal file
87
pkg/log/mail_logger.go
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
// Vikunja is a to-do list application to facilitate your life.
|
||||||
|
// Copyright 2018-2021 Vikunja and contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public Licensee as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public Licensee for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public Licensee
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
package log
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"code.vikunja.io/api/pkg/config"
|
||||||
|
"github.com/op/go-logging"
|
||||||
|
"xorm.io/xorm/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MailLogger struct {
|
||||||
|
logger *logging.Logger
|
||||||
|
level log.LogLevel
|
||||||
|
}
|
||||||
|
|
||||||
|
const mailFormat = `%{color}%{time:` + time.RFC3339Nano + `}: %{level}` + "\t" + `▶ [MAIL] %{id:03x}%{color:reset} %{message}`
|
||||||
|
const mailLogModule = `vikunja_mail`
|
||||||
|
|
||||||
|
func NewMailLogger() *MailLogger {
|
||||||
|
lvl := strings.ToUpper(config.LogMailLevel.GetString())
|
||||||
|
level, err := logging.LogLevel(lvl)
|
||||||
|
if err != nil {
|
||||||
|
Criticalf("Error setting database log level: %s", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
mailLogger := &MailLogger{
|
||||||
|
logger: logging.MustGetLogger(mailLogModule),
|
||||||
|
}
|
||||||
|
|
||||||
|
logBackend := logging.NewLogBackend(GetLogWriter("mail"), "", 0)
|
||||||
|
backend := logging.NewBackendFormatter(logBackend, logging.MustStringFormatter(mailFormat+"\n"))
|
||||||
|
|
||||||
|
backendLeveled := logging.AddModuleLevel(backend)
|
||||||
|
backendLeveled.SetLevel(level, mailLogModule)
|
||||||
|
|
||||||
|
mailLogger.logger.SetBackend(backendLeveled)
|
||||||
|
|
||||||
|
switch level {
|
||||||
|
case logging.CRITICAL:
|
||||||
|
case logging.ERROR:
|
||||||
|
mailLogger.level = log.LOG_ERR
|
||||||
|
case logging.WARNING:
|
||||||
|
mailLogger.level = log.LOG_WARNING
|
||||||
|
case logging.NOTICE:
|
||||||
|
case logging.INFO:
|
||||||
|
mailLogger.level = log.LOG_INFO
|
||||||
|
case logging.DEBUG:
|
||||||
|
mailLogger.level = log.LOG_DEBUG
|
||||||
|
default:
|
||||||
|
mailLogger.level = log.LOG_OFF
|
||||||
|
}
|
||||||
|
|
||||||
|
return mailLogger
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MailLogger) Errorf(format string, v ...interface{}) {
|
||||||
|
m.logger.Errorf(format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MailLogger) Warnf(format string, v ...interface{}) {
|
||||||
|
m.logger.Warningf(format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MailLogger) Infof(format string, v ...interface{}) {
|
||||||
|
m.logger.Infof(format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MailLogger) Debugf(format string, v ...interface{}) {
|
||||||
|
m.logger.Debugf(format, v...)
|
||||||
|
}
|
|
@ -23,6 +23,6 @@ import (
|
||||||
// NoopBackend doesn't log anything. Used in cases where we want to disable logging completely.
|
// NoopBackend doesn't log anything. Used in cases where we want to disable logging completely.
|
||||||
type NoopBackend struct{}
|
type NoopBackend struct{}
|
||||||
|
|
||||||
func (n *NoopBackend) Log(level logging.Level, i int, record *logging.Record) error {
|
func (n *NoopBackend) Log(_ logging.Level, _ int, _ *logging.Record) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,6 @@ func (w *WatermillLogger) Trace(msg string, fields watermill.LogFields) {
|
||||||
w.logger.Debugf("%s, %s", msg, concatFields(fields))
|
w.logger.Debugf("%s, %s", msg, concatFields(fields))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *WatermillLogger) With(fields watermill.LogFields) watermill.LoggerAdapter {
|
func (w *WatermillLogger) With(_ watermill.LogFields) watermill.LoggerAdapter {
|
||||||
return w
|
return w
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,8 @@ func getClient() (*mail.Client, error) {
|
||||||
ServerName: config.MailerHost.GetString(),
|
ServerName: config.MailerHost.GetString(),
|
||||||
}),
|
}),
|
||||||
mail.WithTimeout((config.MailerQueueTimeout.GetDuration() + 3) * time.Second), // 3s more for us to close before mail server timeout
|
mail.WithTimeout((config.MailerQueueTimeout.GetDuration() + 3) * time.Second), // 3s more for us to close before mail server timeout
|
||||||
|
mail.WithLogger(log.NewMailLogger()),
|
||||||
|
mail.WithDebugLog(),
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.MailerForceSSL.GetBool() {
|
if config.MailerForceSSL.GetBool() {
|
||||||
|
|
|
@ -109,10 +109,7 @@ func Rollback(migrationID string) {
|
||||||
// MigrateTo executes all migrations up to a certain point
|
// MigrateTo executes all migrations up to a certain point
|
||||||
func MigrateTo(migrationID string, x *xorm.Engine) error {
|
func MigrateTo(migrationID string, x *xorm.Engine) error {
|
||||||
m := initMigration(x)
|
m := initMigration(x)
|
||||||
if err := m.MigrateTo(migrationID); err != nil {
|
return m.MigrateTo(migrationID)
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deletes a column from a table. All arguments are strings, to let them be standalone and not depending on any struct.
|
// Deletes a column from a table. All arguments are strings, to let them be standalone and not depending on any struct.
|
||||||
|
|
|
@ -281,7 +281,7 @@ func (b *Bucket) Create(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 404 {object} web.HTTPError "The bucket does not exist."
|
// @Failure 404 {object} web.HTTPError "The bucket does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /projects/{projectID}/buckets/{bucketID} [post]
|
// @Router /projects/{projectID}/buckets/{bucketID} [post]
|
||||||
func (b *Bucket) Update(s *xorm.Session, a web.Auth) (err error) {
|
func (b *Bucket) Update(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
doneBucket, err := getDoneBucketForProject(s, b.ProjectID)
|
doneBucket, err := getDoneBucketForProject(s, b.ProjectID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -320,7 +320,7 @@ func (b *Bucket) Update(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 404 {object} web.HTTPError "The bucket does not exist."
|
// @Failure 404 {object} web.HTTPError "The bucket does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /projects/{projectID}/buckets/{bucketID} [delete]
|
// @Router /projects/{projectID}/buckets/{bucketID} [delete]
|
||||||
func (b *Bucket) Delete(s *xorm.Session, a web.Auth) (err error) {
|
func (b *Bucket) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
|
|
||||||
// Prevent removing the last bucket
|
// Prevent removing the last bucket
|
||||||
total, err := s.Where("project_id = ?", b.ProjectID).Count(&Bucket{})
|
total, err := s.Where("project_id = ?", b.ProjectID).Count(&Bucket{})
|
||||||
|
|
|
@ -123,7 +123,7 @@ func (l *Label) Update(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 404 {object} web.HTTPError "Label not found."
|
// @Failure 404 {object} web.HTTPError "Label not found."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /labels/{id} [delete]
|
// @Router /labels/{id} [delete]
|
||||||
func (l *Label) Delete(s *xorm.Session, a web.Auth) (err error) {
|
func (l *Label) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
_, err = s.ID(l.ID).Delete(&Label{})
|
_, err = s.ID(l.ID).Delete(&Label{})
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -175,7 +175,7 @@ func (l *Label) ReadAll(s *xorm.Session, a web.Auth, search string, page int, pe
|
||||||
// @Failure 404 {object} web.HTTPError "Label not found"
|
// @Failure 404 {object} web.HTTPError "Label not found"
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /labels/{id} [get]
|
// @Router /labels/{id} [get]
|
||||||
func (l *Label) ReadOne(s *xorm.Session, a web.Auth) (err error) {
|
func (l *Label) ReadOne(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
label, err := getLabelByIDSimple(s, l.ID)
|
label, err := getLabelByIDSimple(s, l.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
|
|
@ -40,7 +40,7 @@ func (l *Label) CanRead(s *xorm.Session, a web.Auth) (bool, int, error) {
|
||||||
|
|
||||||
// CanCreate checks if the user can create a label
|
// CanCreate checks if the user can create a label
|
||||||
// Currently a dummy.
|
// Currently a dummy.
|
||||||
func (l *Label) CanCreate(s *xorm.Session, a web.Auth) (bool, error) {
|
func (l *Label) CanCreate(_ *xorm.Session, a web.Auth) (bool, error) {
|
||||||
if _, is := a.(*LinkSharing); is {
|
if _, is := a.(*LinkSharing); is {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ func (LabelTask) TableName() string {
|
||||||
// @Failure 404 {object} web.HTTPError "Label not found."
|
// @Failure 404 {object} web.HTTPError "Label not found."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /tasks/{task}/labels/{label} [delete]
|
// @Router /tasks/{task}/labels/{label} [delete]
|
||||||
func (lt *LabelTask) Delete(s *xorm.Session, a web.Auth) (err error) {
|
func (lt *LabelTask) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
_, err = s.Delete(&LabelTask{LabelID: lt.LabelID, TaskID: lt.TaskID})
|
_, err = s.Delete(&LabelTask{LabelID: lt.LabelID, TaskID: lt.TaskID})
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ func (lt *LabelTask) Delete(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 404 {object} web.HTTPError "The label does not exist."
|
// @Failure 404 {object} web.HTTPError "The label does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /tasks/{task}/labels [put]
|
// @Router /tasks/{task}/labels [put]
|
||||||
func (lt *LabelTask) Create(s *xorm.Session, a web.Auth) (err error) {
|
func (lt *LabelTask) Create(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
// Check if the label is already added
|
// Check if the label is already added
|
||||||
exists, err := s.Exist(&LabelTask{LabelID: lt.LabelID, TaskID: lt.TaskID})
|
exists, err := s.Exist(&LabelTask{LabelID: lt.LabelID, TaskID: lt.TaskID})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -118,7 +118,7 @@ func (lt *LabelTask) Create(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Success 200 {array} models.Label "The labels"
|
// @Success 200 {array} models.Label "The labels"
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /tasks/{task}/labels [get]
|
// @Router /tasks/{task}/labels [get]
|
||||||
func (lt *LabelTask) ReadAll(s *xorm.Session, a web.Auth, search string, page int, perPage int) (result interface{}, resultCount int, numberOfTotalItems int64, err error) {
|
func (lt *LabelTask) ReadAll(s *xorm.Session, a web.Auth, search string, page int, _ int) (result interface{}, resultCount int, numberOfTotalItems int64, err error) {
|
||||||
// Check if the user has the right to see the task
|
// Check if the user has the right to see the task
|
||||||
task := Task{ID: lt.TaskID}
|
task := Task{ID: lt.TaskID}
|
||||||
canRead, _, err := task.CanRead(s, a)
|
canRead, _, err := task.CanRead(s, a)
|
||||||
|
|
|
@ -169,7 +169,7 @@ func (share *LinkSharing) Create(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 404 {object} web.HTTPError "Share Link not found."
|
// @Failure 404 {object} web.HTTPError "Share Link not found."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /projects/{project}/shares/{share} [get]
|
// @Router /projects/{project}/shares/{share} [get]
|
||||||
func (share *LinkSharing) ReadOne(s *xorm.Session, a web.Auth) (err error) {
|
func (share *LinkSharing) ReadOne(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
exists, err := s.Where("id = ?", share.ID).Get(share)
|
exists, err := s.Where("id = ?", share.ID).Get(share)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -269,7 +269,7 @@ func (share *LinkSharing) ReadAll(s *xorm.Session, a web.Auth, search string, pa
|
||||||
// @Failure 404 {object} web.HTTPError "Share Link not found."
|
// @Failure 404 {object} web.HTTPError "Share Link not found."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /projects/{project}/shares/{share} [delete]
|
// @Router /projects/{project}/shares/{share} [delete]
|
||||||
func (share *LinkSharing) Delete(s *xorm.Session, a web.Auth) (err error) {
|
func (share *LinkSharing) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
_, err = s.Where("id = ?", share.ID).Delete(share)
|
_, err = s.Where("id = ?", share.ID).Delete(share)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ func (s *IncreaseTaskCounter) Name() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle is executed when the event IncreaseTaskCounter listens on is fired
|
// Handle is executed when the event IncreaseTaskCounter listens on is fired
|
||||||
func (s *IncreaseTaskCounter) Handle(msg *message.Message) (err error) {
|
func (s *IncreaseTaskCounter) Handle(_ *message.Message) (err error) {
|
||||||
return keyvalue.IncrBy(metrics.TaskCountKey, 1)
|
return keyvalue.IncrBy(metrics.TaskCountKey, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ func (s *DecreaseTaskCounter) Name() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle is executed when the event DecreaseTaskCounter listens on is fired
|
// Handle is executed when the event DecreaseTaskCounter listens on is fired
|
||||||
func (s *DecreaseTaskCounter) Handle(msg *message.Message) (err error) {
|
func (s *DecreaseTaskCounter) Handle(_ *message.Message) (err error) {
|
||||||
return keyvalue.DecrBy(metrics.TaskCountKey, 1)
|
return keyvalue.DecrBy(metrics.TaskCountKey, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -480,7 +480,7 @@ func (s *IncreaseProjectCounter) Name() string {
|
||||||
return "project.counter.increase"
|
return "project.counter.increase"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *IncreaseProjectCounter) Handle(msg *message.Message) (err error) {
|
func (s *IncreaseProjectCounter) Handle(_ *message.Message) (err error) {
|
||||||
return keyvalue.IncrBy(metrics.ProjectCountKey, 1)
|
return keyvalue.IncrBy(metrics.ProjectCountKey, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -491,7 +491,7 @@ func (s *DecreaseProjectCounter) Name() string {
|
||||||
return "project.counter.decrease"
|
return "project.counter.decrease"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *DecreaseProjectCounter) Handle(msg *message.Message) (err error) {
|
func (s *DecreaseProjectCounter) Handle(_ *message.Message) (err error) {
|
||||||
return keyvalue.DecrBy(metrics.ProjectCountKey, 1)
|
return keyvalue.DecrBy(metrics.ProjectCountKey, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -553,7 +553,7 @@ func (s *IncreaseNamespaceCounter) Name() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hanlde is executed when the event IncreaseNamespaceCounter listens on is fired
|
// Hanlde is executed when the event IncreaseNamespaceCounter listens on is fired
|
||||||
func (s *IncreaseNamespaceCounter) Handle(msg *message.Message) (err error) {
|
func (s *IncreaseNamespaceCounter) Handle(_ *message.Message) (err error) {
|
||||||
return keyvalue.IncrBy(metrics.NamespaceCountKey, 1)
|
return keyvalue.IncrBy(metrics.NamespaceCountKey, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -566,8 +566,8 @@ func (s *DecreaseNamespaceCounter) Name() string {
|
||||||
return "namespace.counter.decrease"
|
return "namespace.counter.decrease"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hanlde is executed when the event DecreaseNamespaceCounter listens on is fired
|
// Handle is executed when the event DecreaseNamespaceCounter listens on is fired
|
||||||
func (s *DecreaseNamespaceCounter) Handle(msg *message.Message) (err error) {
|
func (s *DecreaseNamespaceCounter) Handle(_ *message.Message) (err error) {
|
||||||
return keyvalue.DecrBy(metrics.NamespaceCountKey, 1)
|
return keyvalue.DecrBy(metrics.NamespaceCountKey, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -583,8 +583,8 @@ func (s *IncreaseTeamCounter) Name() string {
|
||||||
return "team.counter.increase"
|
return "team.counter.increase"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hanlde is executed when the event IncreaseTeamCounter listens on is fired
|
// Handle is executed when the event IncreaseTeamCounter listens on is fired
|
||||||
func (s *IncreaseTeamCounter) Handle(msg *message.Message) (err error) {
|
func (s *IncreaseTeamCounter) Handle(_ *message.Message) (err error) {
|
||||||
return keyvalue.IncrBy(metrics.TeamCountKey, 1)
|
return keyvalue.IncrBy(metrics.TeamCountKey, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -597,8 +597,8 @@ func (s *DecreaseTeamCounter) Name() string {
|
||||||
return "team.counter.decrease"
|
return "team.counter.decrease"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hanlde is executed when the event DecreaseTeamCounter listens on is fired
|
// Handle is executed when the event DecreaseTeamCounter listens on is fired
|
||||||
func (s *DecreaseTeamCounter) Handle(msg *message.Message) (err error) {
|
func (s *DecreaseTeamCounter) Handle(_ *message.Message) (err error) {
|
||||||
return keyvalue.DecrBy(metrics.TeamCountKey, 1)
|
return keyvalue.DecrBy(metrics.TeamCountKey, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ func (n *Namespace) CanDelete(s *xorm.Session, a web.Auth) (bool, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CanCreate checks if the user can create a new namespace
|
// CanCreate checks if the user can create a new namespace
|
||||||
func (n *Namespace) CanCreate(s *xorm.Session, a web.Auth) (bool, error) {
|
func (n *Namespace) CanCreate(_ *xorm.Session, a web.Auth) (bool, error) {
|
||||||
if _, is := a.(*LinkSharing); is {
|
if _, is := a.(*LinkSharing); is {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,7 +124,7 @@ func (tn *TeamNamespace) Create(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 404 {object} web.HTTPError "team or namespace does not exist."
|
// @Failure 404 {object} web.HTTPError "team or namespace does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /namespaces/{namespaceID}/teams/{teamID} [delete]
|
// @Router /namespaces/{namespaceID}/teams/{teamID} [delete]
|
||||||
func (tn *TeamNamespace) Delete(s *xorm.Session, a web.Auth) (err error) {
|
func (tn *TeamNamespace) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
|
|
||||||
// Check if the team exists
|
// Check if the team exists
|
||||||
_, err = GetTeamByID(s, tn.TeamID)
|
_, err = GetTeamByID(s, tn.TeamID)
|
||||||
|
@ -229,7 +229,7 @@ func (tn *TeamNamespace) ReadAll(s *xorm.Session, a web.Auth, search string, pag
|
||||||
// @Failure 404 {object} web.HTTPError "Team or namespace does not exist."
|
// @Failure 404 {object} web.HTTPError "Team or namespace does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /namespaces/{namespaceID}/teams/{teamID} [post]
|
// @Router /namespaces/{namespaceID}/teams/{teamID} [post]
|
||||||
func (tn *TeamNamespace) Update(s *xorm.Session, a web.Auth) (err error) {
|
func (tn *TeamNamespace) Update(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
|
|
||||||
// Check if the right is valid
|
// Check if the right is valid
|
||||||
if err := tn.Right.isValid(); err != nil {
|
if err := tn.Right.isValid(); err != nil {
|
||||||
|
|
|
@ -133,7 +133,7 @@ func (nu *NamespaceUser) Create(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 404 {object} web.HTTPError "user or namespace does not exist."
|
// @Failure 404 {object} web.HTTPError "user or namespace does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /namespaces/{namespaceID}/users/{userID} [delete]
|
// @Router /namespaces/{namespaceID}/users/{userID} [delete]
|
||||||
func (nu *NamespaceUser) Delete(s *xorm.Session, a web.Auth) (err error) {
|
func (nu *NamespaceUser) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
|
|
||||||
// Check if the user exists
|
// Check if the user exists
|
||||||
user, err := user2.GetUserByUsername(s, nu.Username)
|
user, err := user2.GetUserByUsername(s, nu.Username)
|
||||||
|
@ -229,7 +229,7 @@ func (nu *NamespaceUser) ReadAll(s *xorm.Session, a web.Auth, search string, pag
|
||||||
// @Failure 404 {object} web.HTTPError "User or namespace does not exist."
|
// @Failure 404 {object} web.HTTPError "User or namespace does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /namespaces/{namespaceID}/users/{userID} [post]
|
// @Router /namespaces/{namespaceID}/users/{userID} [post]
|
||||||
func (nu *NamespaceUser) Update(s *xorm.Session, a web.Auth) (err error) {
|
func (nu *NamespaceUser) Update(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
|
|
||||||
// Check if the right is valid
|
// Check if the right is valid
|
||||||
if err := nu.Right.isValid(); err != nil {
|
if err := nu.Right.isValid(); err != nil {
|
||||||
|
|
|
@ -47,7 +47,7 @@ type DatabaseNotifications struct {
|
||||||
// @Failure 403 {object} web.HTTPError "Link shares cannot have notifications."
|
// @Failure 403 {object} web.HTTPError "Link shares cannot have notifications."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /notifications [get]
|
// @Router /notifications [get]
|
||||||
func (d *DatabaseNotifications) ReadAll(s *xorm.Session, a web.Auth, search string, page int, perPage int) (ls interface{}, resultCount int, numberOfEntries int64, err error) {
|
func (d *DatabaseNotifications) ReadAll(s *xorm.Session, a web.Auth, _ string, page int, perPage int) (ls interface{}, resultCount int, numberOfEntries int64, err error) {
|
||||||
if _, is := a.(*LinkSharing); is {
|
if _, is := a.(*LinkSharing); is {
|
||||||
return nil, 0, 0, ErrGenericForbidden{}
|
return nil, 0, 0, ErrGenericForbidden{}
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,6 @@ func (d *DatabaseNotifications) CanUpdate(s *xorm.Session, a web.Auth) (bool, er
|
||||||
// @Failure 404 {object} web.HTTPError "The notification does not exist."
|
// @Failure 404 {object} web.HTTPError "The notification does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /notifications/{id} [post]
|
// @Router /notifications/{id} [post]
|
||||||
func (d *DatabaseNotifications) Update(s *xorm.Session, a web.Auth) (err error) {
|
func (d *DatabaseNotifications) Update(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
return notifications.MarkNotificationAsRead(s, &d.DatabaseNotification, d.Read)
|
return notifications.MarkNotificationAsRead(s, &d.DatabaseNotification, d.Read)
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,7 +135,7 @@ func (tl *TeamProject) Create(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 404 {object} web.HTTPError "Team or project does not exist."
|
// @Failure 404 {object} web.HTTPError "Team or project does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /projects/{projectID}/teams/{teamID} [delete]
|
// @Router /projects/{projectID}/teams/{teamID} [delete]
|
||||||
func (tl *TeamProject) Delete(s *xorm.Session, a web.Auth) (err error) {
|
func (tl *TeamProject) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
|
|
||||||
// Check if the team exists
|
// Check if the team exists
|
||||||
_, err = GetTeamByID(s, tl.TeamID)
|
_, err = GetTeamByID(s, tl.TeamID)
|
||||||
|
@ -247,7 +247,7 @@ func (tl *TeamProject) ReadAll(s *xorm.Session, a web.Auth, search string, page
|
||||||
// @Failure 404 {object} web.HTTPError "Team or project does not exist."
|
// @Failure 404 {object} web.HTTPError "Team or project does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /projects/{projectID}/teams/{teamID} [post]
|
// @Router /projects/{projectID}/teams/{teamID} [post]
|
||||||
func (tl *TeamProject) Update(s *xorm.Session, a web.Auth) (err error) {
|
func (tl *TeamProject) Update(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
|
|
||||||
// Check if the right is valid
|
// Check if the right is valid
|
||||||
if err := tl.Right.isValid(); err != nil {
|
if err := tl.Right.isValid(); err != nil {
|
||||||
|
|
|
@ -142,7 +142,7 @@ func (lu *ProjectUser) Create(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 404 {object} web.HTTPError "user or project does not exist."
|
// @Failure 404 {object} web.HTTPError "user or project does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /projects/{projectID}/users/{userID} [delete]
|
// @Router /projects/{projectID}/users/{userID} [delete]
|
||||||
func (lu *ProjectUser) Delete(s *xorm.Session, a web.Auth) (err error) {
|
func (lu *ProjectUser) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
|
|
||||||
// Check if the user exists
|
// Check if the user exists
|
||||||
u, err := user.GetUserByUsername(s, lu.Username)
|
u, err := user.GetUserByUsername(s, lu.Username)
|
||||||
|
@ -244,7 +244,7 @@ func (lu *ProjectUser) ReadAll(s *xorm.Session, a web.Auth, search string, page
|
||||||
// @Failure 404 {object} web.HTTPError "User or project does not exist."
|
// @Failure 404 {object} web.HTTPError "User or project does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /projects/{projectID}/users/{userID} [post]
|
// @Router /projects/{projectID}/users/{userID} [post]
|
||||||
func (lu *ProjectUser) Update(s *xorm.Session, a web.Auth) (err error) {
|
func (lu *ProjectUser) Update(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
|
|
||||||
// Check if the right is valid
|
// Check if the right is valid
|
||||||
if err := lu.Right.isValid(); err != nil {
|
if err := lu.Right.isValid(); err != nil {
|
||||||
|
|
|
@ -149,7 +149,7 @@ func getSavedFilterSimpleByID(s *xorm.Session, id int64) (sf *SavedFilter, err e
|
||||||
// @Failure 403 {object} web.HTTPError "The user does not have access to that saved filter."
|
// @Failure 403 {object} web.HTTPError "The user does not have access to that saved filter."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /filters/{id} [get]
|
// @Router /filters/{id} [get]
|
||||||
func (sf *SavedFilter) ReadOne(s *xorm.Session, a web.Auth) error {
|
func (sf *SavedFilter) ReadOne(s *xorm.Session, _ web.Auth) error {
|
||||||
// s already contains almost the full saved filter from the rights check, we only need to add the user
|
// s already contains almost the full saved filter from the rights check, we only need to add the user
|
||||||
u, err := user.GetUserByID(s, sf.OwnerID)
|
u, err := user.GetUserByID(s, sf.OwnerID)
|
||||||
sf.Owner = u
|
sf.Owner = u
|
||||||
|
@ -169,7 +169,7 @@ func (sf *SavedFilter) ReadOne(s *xorm.Session, a web.Auth) error {
|
||||||
// @Failure 404 {object} web.HTTPError "The saved filter does not exist."
|
// @Failure 404 {object} web.HTTPError "The saved filter does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /filters/{id} [post]
|
// @Router /filters/{id} [post]
|
||||||
func (sf *SavedFilter) Update(s *xorm.Session, a web.Auth) error {
|
func (sf *SavedFilter) Update(s *xorm.Session, _ web.Auth) error {
|
||||||
origFilter, err := getSavedFilterSimpleByID(s, sf.ID)
|
origFilter, err := getSavedFilterSimpleByID(s, sf.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -204,7 +204,7 @@ func (sf *SavedFilter) Update(s *xorm.Session, a web.Auth) error {
|
||||||
// @Failure 404 {object} web.HTTPError "The saved filter does not exist."
|
// @Failure 404 {object} web.HTTPError "The saved filter does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /filters/{id} [delete]
|
// @Router /filters/{id} [delete]
|
||||||
func (sf *SavedFilter) Delete(s *xorm.Session, a web.Auth) error {
|
func (sf *SavedFilter) Delete(s *xorm.Session, _ web.Auth) error {
|
||||||
_, err := s.
|
_, err := s.
|
||||||
Where("id = ?", sf.ID).
|
Where("id = ?", sf.ID).
|
||||||
Delete(sf)
|
Delete(sf)
|
||||||
|
|
|
@ -40,7 +40,7 @@ func (sf *SavedFilter) CanUpdate(s *xorm.Session, auth web.Auth) (bool, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CanCreate checks if a user has the right to update a saved filter
|
// CanCreate checks if a user has the right to update a saved filter
|
||||||
func (sf *SavedFilter) CanCreate(s *xorm.Session, auth web.Auth) (bool, error) {
|
func (sf *SavedFilter) CanCreate(_ *xorm.Session, auth web.Auth) (bool, error) {
|
||||||
if _, is := auth.(*LinkSharing); is {
|
if _, is := auth.(*LinkSharing); is {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,7 @@ func (ta *TaskAttachment) NewAttachment(s *xorm.Session, f io.ReadCloser, realna
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadOne returns a task attachment
|
// ReadOne returns a task attachment
|
||||||
func (ta *TaskAttachment) ReadOne(s *xorm.Session, a web.Auth) (err error) {
|
func (ta *TaskAttachment) ReadOne(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
exists, err := s.Where("id = ?", ta.ID).Get(ta)
|
exists, err := s.Where("id = ?", ta.ID).Get(ta)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
@ -127,7 +127,7 @@ func (ta *TaskAttachment) ReadOne(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 404 {object} models.Message "The task does not exist."
|
// @Failure 404 {object} models.Message "The task does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /tasks/{id}/attachments [get]
|
// @Router /tasks/{id}/attachments [get]
|
||||||
func (ta *TaskAttachment) ReadAll(s *xorm.Session, a web.Auth, search string, page int, perPage int) (result interface{}, resultCount int, numberOfTotalItems int64, err error) {
|
func (ta *TaskAttachment) ReadAll(s *xorm.Session, _ web.Auth, _ string, page int, perPage int) (result interface{}, resultCount int, numberOfTotalItems int64, err error) {
|
||||||
attachments := []*TaskAttachment{}
|
attachments := []*TaskAttachment{}
|
||||||
|
|
||||||
limit, start := getLimitFromPageIndex(page, perPage)
|
limit, start := getLimitFromPageIndex(page, perPage)
|
||||||
|
|
|
@ -101,7 +101,7 @@ func (tc *TaskComment) Create(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 404 {object} web.HTTPError "The task comment was not found."
|
// @Failure 404 {object} web.HTTPError "The task comment was not found."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /tasks/{taskID}/comments/{commentID} [delete]
|
// @Router /tasks/{taskID}/comments/{commentID} [delete]
|
||||||
func (tc *TaskComment) Delete(s *xorm.Session, a web.Auth) error {
|
func (tc *TaskComment) Delete(s *xorm.Session, _ web.Auth) error {
|
||||||
deleted, err := s.
|
deleted, err := s.
|
||||||
ID(tc.ID).
|
ID(tc.ID).
|
||||||
NoAutoCondition().
|
NoAutoCondition().
|
||||||
|
@ -135,7 +135,7 @@ func (tc *TaskComment) Delete(s *xorm.Session, a web.Auth) error {
|
||||||
// @Failure 404 {object} web.HTTPError "The task comment was not found."
|
// @Failure 404 {object} web.HTTPError "The task comment was not found."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /tasks/{taskID}/comments/{commentID} [post]
|
// @Router /tasks/{taskID}/comments/{commentID} [post]
|
||||||
func (tc *TaskComment) Update(s *xorm.Session, a web.Auth) error {
|
func (tc *TaskComment) Update(s *xorm.Session, _ web.Auth) error {
|
||||||
updated, err := s.
|
updated, err := s.
|
||||||
ID(tc.ID).
|
ID(tc.ID).
|
||||||
Cols("comment").
|
Cols("comment").
|
||||||
|
@ -192,7 +192,7 @@ func getTaskCommentSimple(s *xorm.Session, tc *TaskComment) error {
|
||||||
// @Failure 404 {object} web.HTTPError "The task comment was not found."
|
// @Failure 404 {object} web.HTTPError "The task comment was not found."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /tasks/{taskID}/comments/{commentID} [get]
|
// @Router /tasks/{taskID}/comments/{commentID} [get]
|
||||||
func (tc *TaskComment) ReadOne(s *xorm.Session, a web.Auth) (err error) {
|
func (tc *TaskComment) ReadOne(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
err = getTaskCommentSimple(s, tc)
|
err = getTaskCommentSimple(s, tc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -198,7 +198,7 @@ type taskOptions struct {
|
||||||
// @Success 200 {array} models.Task "The tasks"
|
// @Success 200 {array} models.Task "The tasks"
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /tasks/all [get]
|
// @Router /tasks/all [get]
|
||||||
func (t *Task) ReadAll(s *xorm.Session, a web.Auth, search string, page int, perPage int) (result interface{}, resultCount int, totalItems int64, err error) {
|
func (t *Task) ReadAll(_ *xorm.Session, _ web.Auth, _ string, _ int, _ int) (result interface{}, resultCount int, totalItems int64, err error) {
|
||||||
return nil, 0, 0, nil
|
return nil, 0, 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ func (tm *TeamMember) Create(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Success 200 {object} models.Message "The user was successfully removed from the team."
|
// @Success 200 {object} models.Message "The user was successfully removed from the team."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /teams/{id}/members/{userID} [delete]
|
// @Router /teams/{id}/members/{userID} [delete]
|
||||||
func (tm *TeamMember) Delete(s *xorm.Session, a web.Auth) (err error) {
|
func (tm *TeamMember) Delete(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
|
|
||||||
total, err := s.Where("team_id = ?", tm.TeamID).Count(&TeamMember{})
|
total, err := s.Where("team_id = ?", tm.TeamID).Count(&TeamMember{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -120,7 +120,7 @@ func (tm *TeamMember) Delete(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Success 200 {object} models.Message "The member right was successfully changed."
|
// @Success 200 {object} models.Message "The member right was successfully changed."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /teams/{id}/members/{userID}/admin [post]
|
// @Router /teams/{id}/members/{userID}/admin [post]
|
||||||
func (tm *TeamMember) Update(s *xorm.Session, a web.Auth) (err error) {
|
func (tm *TeamMember) Update(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
// Find the numeric user id
|
// Find the numeric user id
|
||||||
user, err := user2.GetUserByUsername(s, tm.Username)
|
user, err := user2.GetUserByUsername(s, tm.Username)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -184,7 +184,7 @@ func addMoreInfoToTeams(s *xorm.Session, teams []*Team) (err error) {
|
||||||
// @Failure 403 {object} web.HTTPError "The user does not have access to the team"
|
// @Failure 403 {object} web.HTTPError "The user does not have access to the team"
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /teams/{id} [get]
|
// @Router /teams/{id} [get]
|
||||||
func (t *Team) ReadOne(s *xorm.Session, a web.Auth) (err error) {
|
func (t *Team) ReadOne(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
team, err := GetTeamByID(s, t.ID)
|
team, err := GetTeamByID(s, t.ID)
|
||||||
if team != nil {
|
if team != nil {
|
||||||
*t = *team
|
*t = *team
|
||||||
|
@ -338,7 +338,7 @@ func (t *Team) Delete(s *xorm.Session, a web.Auth) (err error) {
|
||||||
// @Failure 400 {object} web.HTTPError "Invalid team object provided."
|
// @Failure 400 {object} web.HTTPError "Invalid team object provided."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /teams/{id} [post]
|
// @Router /teams/{id} [post]
|
||||||
func (t *Team) Update(s *xorm.Session, a web.Auth) (err error) {
|
func (t *Team) Update(s *xorm.Session, _ web.Auth) (err error) {
|
||||||
// Check if we have a name
|
// Check if we have a name
|
||||||
if t.Name == "" {
|
if t.Name == "" {
|
||||||
return ErrTeamNameCannotBeEmpty{}
|
return ErrTeamNameCannotBeEmpty{}
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// CanCreate checks if the user can create a new team
|
// CanCreate checks if the user can create a new team
|
||||||
func (t *Team) CanCreate(s *xorm.Session, a web.Auth) (bool, error) {
|
func (t *Team) CanCreate(_ *xorm.Session, a web.Auth) (bool, error) {
|
||||||
if _, is := a.(*LinkSharing); is {
|
if _, is := a.(*LinkSharing); is {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,6 @@ const defaultAvatar string = `<?xml version="1.0" encoding="UTF-8"?>
|
||||||
</svg>`
|
</svg>`
|
||||||
|
|
||||||
// GetAvatar implements getting the avatar method
|
// GetAvatar implements getting the avatar method
|
||||||
func (p *Provider) GetAvatar(user *user.User, size int64) (avatar []byte, mimeType string, err error) {
|
func (p *Provider) GetAvatar(_ *user.User, _ int64) (avatar []byte, mimeType string, err error) {
|
||||||
return []byte(defaultAvatar), "image/svg+xml", nil
|
return []byte(defaultAvatar), "image/svg+xml", nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,7 +151,7 @@ func getUnsplashPhotoInfoByID(photoID string) (photo *Photo, err error) {
|
||||||
// @Success 200 {array} background.Image "An array with photos"
|
// @Success 200 {array} background.Image "An array with photos"
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /backgrounds/unsplash/search [get]
|
// @Router /backgrounds/unsplash/search [get]
|
||||||
func (p *Provider) Search(s *xorm.Session, search string, page int64) (result []*background.Image, err error) {
|
func (p *Provider) Search(_ *xorm.Session, search string, page int64) (result []*background.Image, err error) {
|
||||||
|
|
||||||
// If we don't have a search query, return results from the unsplash featured collection
|
// If we don't have a search query, return results from the unsplash featured collection
|
||||||
if search == "" {
|
if search == "" {
|
||||||
|
|
|
@ -32,7 +32,7 @@ type Provider struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search is only used to implement the interface
|
// Search is only used to implement the interface
|
||||||
func (p *Provider) Search(s *xorm.Session, search string, page int64) (result []*background.Image, err error) {
|
func (p *Provider) Search(_ *xorm.Session, _ string, _ int64) (result []*background.Image, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ func (p *Provider) Search(s *xorm.Session, search string, page int64) (result []
|
||||||
// @Failure 404 {object} models.Message "The project does not exist."
|
// @Failure 404 {object} models.Message "The project does not exist."
|
||||||
// @Failure 500 {object} models.Message "Internal error"
|
// @Failure 500 {object} models.Message "Internal error"
|
||||||
// @Router /projects/{id}/backgrounds/upload [put]
|
// @Router /projects/{id}/backgrounds/upload [put]
|
||||||
func (p *Provider) Set(s *xorm.Session, img *background.Image, project *models.Project, auth web.Auth) (err error) {
|
func (p *Provider) Set(s *xorm.Session, img *background.Image, project *models.Project, _ web.Auth) (err error) {
|
||||||
// Remove the old background if one exists
|
// Remove the old background if one exists
|
||||||
err = project.DeleteBackgroundFileIfExists()
|
err = project.DeleteBackgroundFileIfExists()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -51,7 +51,7 @@ type VikunjaCaldavProjectStorage struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetResources returns either all projects, links to the principal, or only one project, depending on the request
|
// GetResources returns either all projects, links to the principal, or only one project, depending on the request
|
||||||
func (vcls *VikunjaCaldavProjectStorage) GetResources(rpath string, withChildren bool) ([]data.Resource, error) {
|
func (vcls *VikunjaCaldavProjectStorage) GetResources(rpath string, _ bool) ([]data.Resource, error) {
|
||||||
|
|
||||||
// It looks like we need to have the same handler for returning both the calendar home set and the user principal
|
// It looks like we need to have the same handler for returning both the calendar home set and the user principal
|
||||||
// Since the client seems to ignore the whatever is being returned in the first request and just makes a second one
|
// Since the client seems to ignore the whatever is being returned in the first request and just makes a second one
|
||||||
|
@ -166,7 +166,7 @@ func (vcls *VikunjaCaldavProjectStorage) GetResourcesByList(rpaths []string) ([]
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetResourcesByFilters fetches a project of resources with a filter
|
// GetResourcesByFilters fetches a project of resources with a filter
|
||||||
func (vcls *VikunjaCaldavProjectStorage) GetResourcesByFilters(rpath string, filters *data.ResourceFilter) ([]data.Resource, error) {
|
func (vcls *VikunjaCaldavProjectStorage) GetResourcesByFilters(rpath string, _ *data.ResourceFilter) ([]data.Resource, error) {
|
||||||
|
|
||||||
// If we already have a project saved, that means the user is making a REPORT request to find out if
|
// If we already have a project saved, that means the user is making a REPORT request to find out if
|
||||||
// anything changed, in that case we need to return all tasks.
|
// anything changed, in that case we need to return all tasks.
|
||||||
|
@ -359,7 +359,7 @@ func (vcls *VikunjaCaldavProjectStorage) UpdateResource(rpath, content string) (
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteResource deletes a resource
|
// DeleteResource deletes a resource
|
||||||
func (vcls *VikunjaCaldavProjectStorage) DeleteResource(rpath string) error {
|
func (vcls *VikunjaCaldavProjectStorage) DeleteResource(_ string) error {
|
||||||
if vcls.task != nil {
|
if vcls.task != nil {
|
||||||
s := db.NewSession()
|
s := db.NewSession()
|
||||||
defer s.Close()
|
defer s.Close()
|
||||||
|
@ -411,13 +411,13 @@ func persistLabels(s *xorm.Session, a web.Auth, task *models.Task, labels []*mod
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
labelMap := make(map[int64]*models.Label)
|
labelMap := make(map[string]*models.Label)
|
||||||
for _, l := range existingLabels {
|
for _, l := range existingLabels {
|
||||||
labelMap[l.ID] = &l.Label
|
labelMap[l.Title] = &l.Label
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, label := range labels {
|
for _, label := range labels {
|
||||||
if l, has := labelMap[label.ID]; has {
|
if l, has := labelMap[label.Title]; has {
|
||||||
*label = *l
|
*label = *l
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ func (s *IncreaseUserCounter) Name() string {
|
||||||
return "increase.user.counter"
|
return "increase.user.counter"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hanlde is executed when the event IncreaseUserCounter listens on is fired
|
// Handle is executed when the event IncreaseUserCounter listens on is fired
|
||||||
func (s *IncreaseUserCounter) Handle(msg *message.Message) (err error) {
|
func (s *IncreaseUserCounter) Handle(_ *message.Message) (err error) {
|
||||||
return keyvalue.IncrBy(metrics.UserCountKey, 1)
|
return keyvalue.IncrBy(metrics.UserCountKey, 1)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user