Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Verified Commit 800ead1c authored by Romain Hunault's avatar Romain Hunault 🚴🏻
Browse files

feat(workspace): wire OIDC discovery into account setup to persist issuer

After a Murena Workspace account is created or re-authenticated, run
MurenaOidcDiscovery.discover() and, on success, persist the resolved
oidcIssuer via AccountSettings.persistWorkspaceDescriptor().

Discovery is non-blocking: NotConfigured and Failed outcomes are logged
but do not abort account setup. The oidcIssuer field remains null until
a successful discovery round completes.
parent 41540485
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -51,8 +51,10 @@ import at.bitfire.davdroid.settings.SettingsManager
import at.bitfire.davdroid.syncadapter.AccountUtils
import at.bitfire.davdroid.syncadapter.SyncAllAccountWorker
import at.bitfire.davdroid.syncadapter.SyncWorker
import at.bitfire.davdroid.network.HttpClient
import at.bitfire.davdroid.util.AuthStatePrefUtils
import at.bitfire.davdroid.util.MurenaServerConfig
import at.bitfire.davdroid.workspace.MurenaOidcDiscovery
import at.bitfire.vcard4android.GroupMethod
import com.google.android.material.snackbar.Snackbar
import com.nextcloud.android.utils.AccountManagerUtils
@@ -657,6 +659,23 @@ class AccountDetailsFragment : Fragment() {
                        ContentResolver.setIsSyncable(account, CalendarContract.AUTHORITY, 0)
                    }

                    // Discover and persist OIDC issuer for Murena Workspace accounts.
                    // Non-blocking: NotConfigured and Failed outcomes are logged but do not fail setup.
                    if (workspaceDescriptor != null) {
                        HttpClient.Builder(context).build().use { client ->
                            when (val discovery = MurenaOidcDiscovery.discover(workspaceDescriptor, client.okHttpClient)) {
                                is MurenaOidcDiscovery.Result.Discovered -> {
                                    accountSettings.persistWorkspaceDescriptor(discovery.descriptor)
                                    Logger.log.info("OIDC issuer persisted for ${workspaceDescriptor.workspaceDomain}: ${discovery.descriptor.oidcIssuer}")
                                }
                                is MurenaOidcDiscovery.Result.NotConfigured ->
                                    Logger.log.info("OIDC not configured for ${workspaceDescriptor.workspaceDomain}")
                                is MurenaOidcDiscovery.Result.Failed ->
                                    Logger.log.warning("OIDC discovery failed for ${workspaceDescriptor.workspaceDomain}: ${discovery.cause}")
                            }
                        }
                    }

                } catch(e: InvalidAccountException) {
                    Logger.log.log(Level.SEVERE, "Couldn't access account settings", e)
                    result.postValue(false)