aboutsummaryrefslogtreecommitdiff
path: root/bank
diff options
context:
space:
mode:
authorAntoine A <>2024-02-19 17:08:08 +0100
committerAntoine A <>2024-02-19 17:08:08 +0100
commit22be66f8b688696df27b643081f76ded9d452127 (patch)
tree000944a0bd92efbb52a23c2f9e577d9a1e596f19 /bank
parentd648a98f511ac4ed1a8a83516c09f4fe66f164bf (diff)
downloadlibeufin-22be66f8b688696df27b643081f76ded9d452127.tar.gz
libeufin-22be66f8b688696df27b643081f76ded9d452127.tar.bz2
libeufin-22be66f8b688696df27b643081f76ded9d452127.zip
Environment variables for TAN script in libeufin-bank config
Diffstat (limited to 'bank')
-rw-r--r--bank/src/main/kotlin/tech/libeufin/bank/Config.kt10
-rw-r--r--bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt18
2 files changed, 23 insertions, 5 deletions
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/Config.kt b/bank/src/main/kotlin/tech/libeufin/bank/Config.kt
index 45c370d5..cba29656 100644
--- a/bank/src/main/kotlin/tech/libeufin/bank/Config.kt
+++ b/bank/src/main/kotlin/tech/libeufin/bank/Config.kt
@@ -44,7 +44,7 @@ data class BankConfig(
val fiatCurrency: String?,
val fiatCurrencySpec: CurrencySpecification?,
val spaPath: Path?,
- val tanChannels: Map<TanChannel, Path>,
+ val tanChannels: Map<TanChannel, Pair<Path, Map<String, String>>>,
val payto: BankPaytoCtx,
val wireMethod: WireMethod
)
@@ -97,7 +97,13 @@ fun TalerConfig.loadBankConfig(): BankConfig {
val tanChannels = buildMap {
for (channel in TanChannel.entries) {
lookupPath("libeufin-bank", "tan_$channel")?.let {
- put(channel, it)
+ val variables = lookupString("libeufin-bank", "tan_${channel}_env")?.let { env ->
+ env.split(' ').map { variable ->
+ variable.splitOnce("=") ?:
+ throw TalerConfigError.invalid("environment variables", "libeufin-bank", "tan_${channel}_env", "expected NAME=VALUE got '$variable'")
+ }.toMap()
+ } ?: mapOf()
+ put(channel, Pair(it, variables))
}
}
}
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt b/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt
index 11508407..dbb550ac 100644
--- a/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt
+++ b/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt
@@ -662,17 +662,29 @@ private fun Routing.coreBankTanApi(db: Database, ctx: BankConfig) {
)
is TanSendResult.Success -> {
res.tanCode?.run {
- val tanScript = ctx.tanChannels.get(res.tanChannel)
+ val (tanScript, tanEnv) = ctx.tanChannels.get(res.tanChannel)
?: throw unsupportedTanChannel(res.tanChannel)
val exitValue = withContext(Dispatchers.IO) {
- val process = ProcessBuilder(tanScript.toString(), res.tanInfo).start()
+ val builder = ProcessBuilder(tanScript.toString(), res.tanInfo)
+ builder.redirectErrorStream(true)
+ for ((name, value) in tanEnv) {
+ builder.environment()[name] = value
+ }
+ val process = builder.start()
try {
process.outputWriter().use { it.write(res.tanCode) }
process.onExit().await()
} catch (e: Exception) {
process.destroy()
}
- process.exitValue()
+ val exitValue = process.exitValue()
+ if (exitValue != 0) {
+ val out = process.getInputStream().reader().readText()
+ if (out.isNotEmpty()) {
+ logger.error("TAN ${res.tanChannel} - ${tanScript}: $out")
+ }
+ }
+ exitValue
}
if (exitValue != 0) {
throw libeufinError(