Skip to content

config lib

Boriss Melikjan edited this page Sep 9, 2025 · 1 revision

Central configuration for RIA DigiDoc

Fetch and package default configuration

To fetch and package default configuration, run command:

./gradlew clean fetchAndPackageDefaultConfiguration app:assemble

The default configuration setup is: Configuration downloaded from: https://id.eesti.ee/ Configuration update interval: 7 (days)

The central configuration options can be overridden with command (replace --args with custom values):

./gradlew clean fetchAndPackageDefaultConfiguration --args='https://example.com 5' app:assemble

The first argument (URL) is where the configuration is downloaded from. The second argument is interval, where every given number of days, the configuration is updated.

  • The URL argument must contain only the base URL. For example if the specified URL is https://id.eesti.ee/, then the configuration will be downloaded from https://id.eesti.ee/config.json (public key from /config.pub and signature from /config.rsa)

The build will be stopped if configuration validation fails.

Configuration

Get configuration updats

val configurationLoader = ConfigurationLoaderImpl(
    Gson(),
    CentralConfigurationRepositoryImpl(
        CentralConfigurationServiceImpl("Tests", ConfigurationProperty()),
    ),
    ConfigurationProperty(),
    ConfigurationPropertiesImpl(),
    ConfigurationSignatureVerifierImpl(),
)
val configurationRepository = ConfigurationRepositoryImpl(context, configurationLoader)
val configurationProvider = configurationRepository.getConfiguration()

Subscribe to configuration updats

@HiltViewModel
class SharedSettingsViewModel
    @Inject
    constructor(
        private val configurationRepository: ConfigurationRepository,
    ) : ViewModel() {
        private val _updatedConfiguration = MutableLiveData<ConfigurationProvider?>()
        val updatedConfiguration: LiveData<ConfigurationProvider?> = _updatedConfiguration

        init {
            CoroutineScope(Main).launch {
                configurationRepository.observeConfigurationUpdates { newConfig ->
                    _updatedConfiguration.value = newConfig
                }
            }
        }
    }

Load central configuration

val configurationLoader = ConfigurationLoaderImpl(
    Gson(),
    CentralConfigurationRepositoryImpl(
        CentralConfigurationServiceImpl("Tests", ConfigurationProperty()),
    ),
    ConfigurationProperty(),
    ConfigurationPropertiesImpl(),
    ConfigurationSignatureVerifierImpl(),
)
val configurationRepository = ConfigurationRepositoryImpl(context, configurationLoader)
val proxySetting = ProxySetting.NO_PROXY
val manualProxy = ManualProxy("", 80, "", "")
val configurationProvider = runBlocking {
    configurationRepository.getCentralConfiguration(proxySetting, manualProxy)
}

Configuration properties

File: configuration.properties

Get configuration version serial

val configurationProperties = ConfigurationPropertiesImpl()
val versionSerial = configurationProperties.getConfigurationProperties(context).versionSerial

Cached configuration handler

Used to cache and get configuration data

Get cached configuration file

val cachedSignature =
    ConfigurationCache.getCachedFile(context, CACHED_CONFIG_RSA)

val currentSignature = cachedSignature.readBytes()

Get cached configuration last update check date

val configurationProvider = configurationRepository.getConfiguration()
configurationProvider?.configurationLastUpdateCheckDate

Get cached configuration update date

val configurationProvider = configurationRepository.getConfiguration()
configurationProvider?.configurationUpdateDate

Clone this wiki locally