diff --git a/changelog/unreleased/accounts-cache-password-validation.md b/changelog/unreleased/accounts-cache-password-validation.md new file mode 100644 index 0000000000..4e3363b9c4 --- /dev/null +++ b/changelog/unreleased/accounts-cache-password-validation.md @@ -0,0 +1,8 @@ +Change: Cache password validation + +Tags: accounts + +The password validity check for requests like `login eq '%s' and password eq '%s'` is now cached for 10 minutes. +This improves the performance for basic auth requests. + +https://github.com/owncloud/ocis/pull/958 \ No newline at end of file diff --git a/proxy/pkg/middleware/basic_auth.go b/proxy/pkg/middleware/basic_auth.go index 22c894a41f..f06879b012 100644 --- a/proxy/pkg/middleware/basic_auth.go +++ b/proxy/pkg/middleware/basic_auth.go @@ -2,13 +2,11 @@ package middleware import ( "fmt" - "net/http" - "strings" - "sync" - accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" "github.com/owncloud/ocis/ocis-pkg/log" "github.com/owncloud/ocis/ocis-pkg/oidc" + "net/http" + "strings" ) const publicFilesEndpoint = "/remote.php/dav/public-files/" @@ -59,22 +57,21 @@ type basicAuth struct { logger log.Logger enabled bool accountsClient accounts.AccountsService - m sync.Mutex } -func (m *basicAuth) isPublicLink(req *http.Request) bool { +func (m basicAuth) isPublicLink(req *http.Request) bool { login, _, ok := req.BasicAuth() return ok && login == "public" && strings.HasPrefix(req.URL.Path, publicFilesEndpoint) } -func (m *basicAuth) isBasicAuth(req *http.Request) bool { +func (m basicAuth) isBasicAuth(req *http.Request) bool { login, password, ok := req.BasicAuth() return m.enabled && ok && login != "" && password != "" } -func (m *basicAuth) getAccount(req *http.Request) (*accounts.Account, bool) { +func (m basicAuth) getAccount(req *http.Request) (*accounts.Account, bool) { login, password, _ := req.BasicAuth() account, status := getAccount( diff --git a/tests/k6/src/test-issue-162.ts b/tests/k6/src/test-issue-162.ts index 11bd862635..c2e57cf5c3 100644 --- a/tests/k6/src/test-issue-162.ts +++ b/tests/k6/src/test-issue-162.ts @@ -1,6 +1,6 @@ import {sleep, check} from 'k6'; import {Options} from "k6/options"; -import {defaults, api, utils} from "./lib"; +import {defaults, api} from "./lib"; const files = { 'kb_50.jpg': open('./_files/kb_50.jpg', 'b'), @@ -13,7 +13,7 @@ export let options: Options = { }; export default () => { - const res = api.uploadFile(defaults.accounts.einstein, files['kb_50.jpg'], `kb_50-${utils.randomString()}.jpg`) + const res = api.uploadFile(defaults.accounts.einstein, files['kb_50.jpg'], `kb_50-${__VU}-${__ITER}.jpg`) check(res, { 'status is 201': () => res.status === 201,