Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ class InstanceConfigManager(
private val userPreferencesRepository: UserPreferencesRepository,
) : MultiUrlConfigProvider {
companion object {
private const val MAX_TENANT_ID_LENGTH = 64
private val VALID_TENANT_ID_REGEX = Regex("^[A-Za-z0-9_-]+$")

// Default main instance configuration
private val DEFAULT_MAIN_INSTANCE = ServerInstance(
endpoint = "mifos-bank-2.mifos.community",
Expand Down Expand Up @@ -68,7 +71,7 @@ class InstanceConfigManager(

fun getPath(): String = getCurrentInstance().path

fun getPlatformTenantId(): String = getCurrentInstance().platformTenantId
fun getPlatformTenantId(): String = sanitizeTenantId(getCurrentInstance().platformTenantId)

fun getUrl(): String = getCurrentInstance().fullUrl

Expand All @@ -90,4 +93,18 @@ class InstanceConfigManager(
getEndpoint(),
getCurrentInterbankInstance().endpoint,
)

private fun sanitizeTenantId(rawTenantId: String): String {
val normalized = rawTenantId
.trim()
.replace("\r", "")
.replace("\n", "")
.take(MAX_TENANT_ID_LENGTH)

return if (normalized.isNotEmpty() && VALID_TENANT_ID_REGEX.matches(normalized)) {
normalized
} else {
DEFAULT_MAIN_INSTANCE.platformTenantId
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@ class KtorInterceptor(
context.header(BaseURL.HEADER_TENANT, plugin.configManager.getPlatformTenantId())

plugin.getToken()?.let { token ->
if (token.isNotEmpty()) {
context.headers[BaseURL.HEADER_AUTHORIZATION] = "Basic $token"
val sanitizedToken = sanitizeHeaderValue(token)
if (sanitizedToken.isNotEmpty()) {
context.headers[BaseURL.HEADER_AUTHORIZATION] = "Basic $sanitizedToken"
}
}
}
Expand Down Expand Up @@ -78,8 +79,9 @@ class KtorInterceptorRe(
context.header(BaseURL.HEADER_TENANT, plugin.configManager.getPlatformTenantId())

token?.let { token ->
if (token.isNotEmpty()) {
context.headers[BaseURL.HEADER_AUTHORIZATION] = "Basic $token"
val sanitizedToken = sanitizeHeaderValue(token)
if (sanitizedToken.isNotEmpty()) {
context.headers[BaseURL.HEADER_AUTHORIZATION] = "Basic $sanitizedToken"
}
}
}
Expand All @@ -103,3 +105,10 @@ class ConfigRe {
lateinit var repository: UserPreferencesRepository
lateinit var configManager: InstanceConfigManager
}

private fun sanitizeHeaderValue(value: String): String {
return value
.trim()
.replace("\r", "")
.replace("\n", "")
}
Loading