From 2e6c76bb050a4cc244735afd1bc7fc1f036b7174 Mon Sep 17 00:00:00 2001 From: Marcello Date: Sun, 5 Apr 2026 17:58:33 +0200 Subject: [PATCH] Implement `AuthzManager` to provide access tokens - Define `AuthzManager` interface for retrieving access tokens. - Implement `AuthzManagerImpl` using `SupabaseClient` to fetch the current access token from the Supabase auth session. - Update `AuthModule` to provide a singleton instance of `AuthzManager` via Hilt. --- .../eu/project/auth/authz/AuthzManager.kt | 11 ++++++++++ .../eu/project/auth/authz/AuthzManagerImpl.kt | 21 +++++++++++++++++++ .../java/eu/project/auth/module/AuthModule.kt | 9 ++++++++ 3 files changed, 41 insertions(+) create mode 100644 auth/src/main/java/eu/project/auth/authz/AuthzManager.kt create mode 100644 auth/src/main/java/eu/project/auth/authz/AuthzManagerImpl.kt diff --git a/auth/src/main/java/eu/project/auth/authz/AuthzManager.kt b/auth/src/main/java/eu/project/auth/authz/AuthzManager.kt new file mode 100644 index 0000000..00b12e7 --- /dev/null +++ b/auth/src/main/java/eu/project/auth/authz/AuthzManager.kt @@ -0,0 +1,11 @@ +package eu.project.auth.authz + +import eu.project.auth.token.AccessToken + +/** + * Provides access tokens. + */ +interface AuthzManager { + + fun getAccessToken(): AccessToken? +} \ No newline at end of file diff --git a/auth/src/main/java/eu/project/auth/authz/AuthzManagerImpl.kt b/auth/src/main/java/eu/project/auth/authz/AuthzManagerImpl.kt new file mode 100644 index 0000000..e70f895 --- /dev/null +++ b/auth/src/main/java/eu/project/auth/authz/AuthzManagerImpl.kt @@ -0,0 +1,21 @@ +package eu.project.auth.authz + +import eu.project.auth.client.SupabaseClient +import eu.project.auth.token.AccessToken +import io.github.jan.supabase.auth.auth +import javax.inject.Inject + +/** + * Implementation of `AuthzManager` that uses `SupabaseClient` to retrieve access token. + */ +internal class AuthzManagerImpl @Inject constructor(supabaseClient: SupabaseClient) : AuthzManager { + + private val client = supabaseClient.client + + override fun getAccessToken(): AccessToken? { + + // try to retrieve current access token, if it's null, return null + val rawAccessToken = client.auth.currentAccessTokenOrNull() ?: return null + return AccessToken(rawAccessToken) + } +} \ No newline at end of file diff --git a/auth/src/main/java/eu/project/auth/module/AuthModule.kt b/auth/src/main/java/eu/project/auth/module/AuthModule.kt index a8e19a9..a61bc9f 100644 --- a/auth/src/main/java/eu/project/auth/module/AuthModule.kt +++ b/auth/src/main/java/eu/project/auth/module/AuthModule.kt @@ -8,6 +8,8 @@ import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import eu.project.auth.authn.AuthnManager import eu.project.auth.authn.AuthnManagerImpl +import eu.project.auth.authz.AuthzManager +import eu.project.auth.authz.AuthzManagerImpl import eu.project.auth.client.SupabaseClient import eu.project.auth.credentialManager.GoogleCredentialManager import eu.project.auth.credentialManager.GoogleCredentialManagerImpl @@ -28,6 +30,13 @@ internal class AuthModule { googleCredentialManager = googleCredentialManager ) + @Provides + @Singleton + fun provideAuthzManager( + supabaseClient: SupabaseClient + ): AuthzManager = + AuthzManagerImpl(supabaseClient = supabaseClient) + @Provides @Singleton fun provideGoogleCredentialManager(