libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit 135d258eb3c2eac6925cfeb85d36a1f1c43d75fc
parent 12138ed7f9cb90d273221838274a071cf7061a8a
Author: ms <ms@taler.net>
Date:   Thu, 19 May 2022 07:10:34 +0200

set/show config values.  CLI: account deletion

Diffstat:
Mcli/bin/libeufin-cli | 20++++++++++++++++++++
Msandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt | 79+++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
Mutil/src/main/kotlin/HTTP.kt | 3+++
3 files changed, 72 insertions(+), 30 deletions(-)

diff --git a/cli/bin/libeufin-cli b/cli/bin/libeufin-cli @@ -1262,6 +1262,26 @@ def sandbox_demobank_info(obj, bank_account): exit(1) tell_user(resp, withsuccess=True) +@sandbox_demobank.command("delete", + help="""delete the bank account pointed by LIBEUFIN_SANDBOX_{USERNAME, PASSWORD}.""" +) +@click.pass_obj +def sandbox_demobank_register(obj, public, name): + url = obj.access_api_url ("/testing/unregister") + req = dict(username=obj.username, password=obj.password, isPublic=public) + if name != "": + req.update(name=name) + try: + resp = post( + url, + json=req, + ) + except Exception as e: + print(e) + print("Could not reach sandbox at " + url) + exit(1) + check_response_status(resp) + @sandbox_demobank.command("register", help="""register a new bank account. Credentials will be taken from the LIBEUFIN_SANDBOX_{USERNAME, PASSWORD} env variables. Note diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt @@ -64,6 +64,7 @@ import io.ktor.util.* import io.ktor.util.date.* import kotlinx.coroutines.newSingleThreadContext import org.jetbrains.exposed.sql.* +import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq import org.jetbrains.exposed.sql.statements.api.ExposedBlob import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction import org.jetbrains.exposed.sql.transactions.transaction @@ -134,13 +135,12 @@ class Config : CliktCommand( } private val nameArgument by argument( - "NAME", help = "Name of this configuration" + "NAME", help = "Name of this configuration. Currently, only 'default' is admitted." ) - private val overrideOption by option( - "--override", - help = "Override an existing --with/--without -registrations policy." + - " It has NO effect on other options" - ).flag("--no-override", default = false) + private val showOption by option( + "--show", + help = "Only show values, other options will be ignored." + ).flag("--no-show", default = false) private val currencyOption by option("--currency").default("EUR") private val bankDebtLimitOption by option("--bank-debt-limit").int().default(1000000) private val usersDebtLimitOption by option("--users-debt-limit").int().default(1000) @@ -155,37 +155,56 @@ class Config : CliktCommand( override fun run() { val dbConnString = getDbConnFromEnv(SANDBOX_DB_ENV_VAR_NAME) + if (nameArgument != "default") { + println("This version admits only the 'default' name") + exitProcess(1) + } execThrowableOrTerminate { dbCreateTables(dbConnString) transaction { - val maybeDemobank = DemobankConfigEntity.find { - DemobankConfigsTable.name eq nameArgument - }.firstOrNull() - if (maybeDemobank != null) { - if (overrideOption) { - println("Overriding the registration policy to: " - + allowRegistrationsOption) - maybeDemobank.allowRegistrations = allowRegistrationsOption + val maybeDemobank = BankAccountEntity.find(BankAccountsTable.label eq "bank").firstOrNull() + if (showOption) { + if (maybeDemobank != null) { + println( + object { + val currency = maybeDemobank.demoBank.currency + val bankDebtLimit = maybeDemobank.demoBank.bankDebtLimit + val usersDebtLimit = maybeDemobank.demoBank.usersDebtLimit + val allowRegistrations = maybeDemobank.demoBank.allowRegistrations + val name = maybeDemobank.demoBank.name // always 'default' + val withSignupBonus = maybeDemobank.demoBank.withSignupBonus + } + ) return@transaction } - println("Error, demobank ${nameArgument} exists already, not overriding it.") - exitProcess(1) + println("Nothing to show") + return@transaction } - val demoBank = DemobankConfigEntity.new { - currency = currencyOption - bankDebtLimit = bankDebtLimitOption - usersDebtLimit = usersDebtLimitOption - allowRegistrations = allowRegistrationsOption - name = nameArgument - this.withSignupBonus = withSignupBonusOption - } - BankAccountEntity.new { - iban = getIban() - label = "bank" // used by the wire helper - owner = "bank" // used by the person name finder - // For now, the model assumes always one demobank - this.demoBank = demoBank + if (maybeDemobank == null) { + val demoBank = DemobankConfigEntity.new { + currency = currencyOption + bankDebtLimit = bankDebtLimitOption + usersDebtLimit = usersDebtLimitOption + allowRegistrations = allowRegistrationsOption + name = nameArgument + this.withSignupBonus = withSignupBonusOption + } + BankAccountEntity.new { + iban = getIban() + label = "bank" // used by the wire helper + owner = "bank" // used by the person name finder + // For now, the model assumes always one demobank + this.demoBank = demoBank + } + return@transaction } + println("Overriding existing values") + maybeDemobank.demoBank.currency = currencyOption + maybeDemobank.demoBank.bankDebtLimit = bankDebtLimitOption + maybeDemobank.demoBank.usersDebtLimit = usersDebtLimitOption + maybeDemobank.demoBank.allowRegistrations = allowRegistrationsOption + maybeDemobank.demoBank.withSignupBonus = withSignupBonusOption + maybeDemobank.demoBank.name = nameArgument } } } diff --git a/util/src/main/kotlin/HTTP.kt b/util/src/main/kotlin/HTTP.kt @@ -83,6 +83,9 @@ fun conflict(msg: String): UtilError { fun ApplicationRequest.getBaseUrl(): String { return if (this.headers.contains("X-Forwarded-Host")) { logger.info("Building X-Forwarded- base URL") + /** + * FIXME: should tolerate a missing X-Forwarded-Prefix. + */ var prefix: String = this.headers.get("X-Forwarded-Prefix") ?: throw internalServerError("Reverse proxy did not define X-Forwarded-Prefix") if (!prefix.endsWith("/"))