From 512570cda35d818cac0f9563b3e11a97372af2fd Mon Sep 17 00:00:00 2001 From: xander Date: Thu, 11 Jul 2024 19:14:28 +0200 Subject: [PATCH] GH-2170 Allow custom authenticators to be registered (#2170) * Allow custom authenticators to be registered * fix test --- .../main/kotlin/com/reposilite/auth/AuthenticationFacade.kt | 6 +++++- .../reposilite/auth/application/AuthenticationComponents.kt | 6 +++--- .../auth/specification/AuthenticationSpecification.kt | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/reposilite-backend/src/main/kotlin/com/reposilite/auth/AuthenticationFacade.kt b/reposilite-backend/src/main/kotlin/com/reposilite/auth/AuthenticationFacade.kt index 242460c4a..6c98c1e8b 100644 --- a/reposilite-backend/src/main/kotlin/com/reposilite/auth/AuthenticationFacade.kt +++ b/reposilite-backend/src/main/kotlin/com/reposilite/auth/AuthenticationFacade.kt @@ -35,7 +35,7 @@ import java.util.concurrent.TimeUnit.MINUTES class AuthenticationFacade( private val journalist: Journalist, - private val authenticators: List, + private val authenticators: MutableList, private val accessTokenFacade: AccessTokenFacade ) : Journalist, Facade { @@ -44,6 +44,10 @@ class AuthenticationFacade( .expireAfterAccess(1, MINUTES) .build() + fun registerAuthenticator(authenticator: Authenticator) { + this.authenticators.add(authenticator) + } + fun authenticateByCredentials(credentials: Credentials): Result = authenticationCache.getIfPresent(credentials) ?.asSuccess() diff --git a/reposilite-backend/src/main/kotlin/com/reposilite/auth/application/AuthenticationComponents.kt b/reposilite-backend/src/main/kotlin/com/reposilite/auth/application/AuthenticationComponents.kt index 5ece1c8db..30fa5b05b 100644 --- a/reposilite-backend/src/main/kotlin/com/reposilite/auth/application/AuthenticationComponents.kt +++ b/reposilite-backend/src/main/kotlin/com/reposilite/auth/application/AuthenticationComponents.kt @@ -47,13 +47,13 @@ class AuthenticationComponents( disableUserPasswordAuthentication = disableUserPasswordAuthentication, ) - private fun authenticators(): List = - listOf( + private fun authenticators(): MutableList = + arrayListOf( basicAuthenticator(), ldapAuthenticator() ) - fun authenticationFacade(authenticators: List = authenticators()): AuthenticationFacade = + fun authenticationFacade(authenticators: MutableList = authenticators()): AuthenticationFacade = AuthenticationFacade( journalist = journalist, authenticators = authenticators, diff --git a/reposilite-backend/src/test/kotlin/com/reposilite/auth/specification/AuthenticationSpecification.kt b/reposilite-backend/src/test/kotlin/com/reposilite/auth/specification/AuthenticationSpecification.kt index 22cb6d4ae..9b074ce22 100644 --- a/reposilite-backend/src/test/kotlin/com/reposilite/auth/specification/AuthenticationSpecification.kt +++ b/reposilite-backend/src/test/kotlin/com/reposilite/auth/specification/AuthenticationSpecification.kt @@ -36,7 +36,7 @@ internal abstract class AuthenticationSpecification : AccessTokenSpecification() fun createAuthenticationFacade() { this.authenticationFacade = AuthenticationFacade( journalist = logger, - authenticators = listOf( + authenticators = mutableListOf( BasicAuthenticator(accessTokenFacade), LdapAuthenticator( journalist = logger,