@@ -22,11 +22,13 @@ package org.eclipse.apoapsis.ortserver.core.di
2222import com.typesafe.config.ConfigFactory
2323
2424import io.ktor.server.config.ApplicationConfig
25+ import io.ktor.server.config.tryGetString
2526
2627import kotlinx.serialization.json.Json
2728
2829import org.eclipse.apoapsis.ortserver.clients.keycloak.DefaultKeycloakClient
2930import org.eclipse.apoapsis.ortserver.clients.keycloak.KeycloakClient
31+ import org.eclipse.apoapsis.ortserver.components.authorization.keycloak.migration.RolesToDbMigration
3032import org.eclipse.apoapsis.ortserver.components.authorization.service.AuthorizationService
3133import org.eclipse.apoapsis.ortserver.components.authorization.service.DbAuthorizationService
3234import org.eclipse.apoapsis.ortserver.components.authorization.service.KeycloakUserService
@@ -210,4 +212,17 @@ fun ortServerModule(config: ApplicationConfig, db: Database?, authorizationServi
210212 singleOf(::PluginService )
211213 singleOf(::PluginTemplateEventStore )
212214 singleOf(::PluginTemplateService )
215+
216+ single { RolesToDbMigration (get(), get(), getKeycloakGroupPrefix(config), get()) }
213217}
218+
219+ /* *
220+ * Retrieve the prefix for Keycloak groups representing roles for hierarchy elements from the given [config]. This is
221+ * needed for the migration of roles managed by Keycloak to roles stored in the database. The prefix is obtained from
222+ * the configuration of the authorization component based on Keycloak. It is, however, possible to override it via a
223+ * special property for the migration. This is useful for instance, to test the migration on different ORT Server
224+ * deployments, e.g. a test environment.
225+ */
226+ private fun getKeycloakGroupPrefix (config : ApplicationConfig ): String =
227+ config.tryGetString(" keycloak.migrationGroupPrefix" )
228+ ? : config.tryGetString(" keycloak.groupPrefix" ).orEmpty()
0 commit comments