[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libeufin] 01/02: Activating withdrawals from the Sandbox.
From: |
gnunet |
Subject: |
[libeufin] 01/02: Activating withdrawals from the Sandbox. |
Date: |
Sat, 18 Sep 2021 09:13:06 +0200 |
This is an automated email from the git hooks/post-receive script.
ms pushed a commit to branch master
in repository libeufin.
commit 94740f4989096a12298e89c23c7253a157238da8
Author: ms <ms@taler.net>
AuthorDate: Sat Sep 18 07:51:38 2021 +0200
Activating withdrawals from the Sandbox.
At this point, the Sandbox offers a /taler endpoint that
creates a withdraw operation and returns (only) the corresponding
taler://-URI that should then be passed to the CLI wallet.
For simplicity, the Sandbox expects to have three canonical
bank accounts: exchange, customer, merchant, and refuses to
continue whenever one is not found.
Lastly, Sandbox now expects the hostname to be specified in
a environment variable; it should be noted that another way
to retrieve the hostname is already under development, but it
is not finished yet.
---
.../src/main/kotlin/tech/libeufin/sandbox/DB.kt | 10 ++++++
.../src/main/kotlin/tech/libeufin/sandbox/Main.kt | 40 +++++++++++++++++++++-
util/src/main/kotlin/Config.kt | 9 +++++
3 files changed, 58 insertions(+), 1 deletion(-)
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
index 9c0a279..fc7c9bd 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
@@ -407,6 +407,14 @@ class BankAccountStatementEntity(id: EntityID<Int>) :
IntEntity(id) {
var balanceClbd by BankAccountStatementsTable.balanceClbd
}
+object TalerWithdrawalsTable : LongIdTable() {
+ val wopid = uuid("wopid").autoGenerate()
+}
+class TalerWithdrawalEntity(id: EntityID<Long>) : LongEntity(id) {
+ companion object :
LongEntityClass<TalerWithdrawalEntity>(TalerWithdrawalsTable)
+ var wopid by TalerWithdrawalsTable.wopid
+}
+
object BankAccountReportsTable : IntIdTable() {
val reportId = text("reportId")
val creationTime = long("creationTime")
@@ -414,6 +422,8 @@ object BankAccountReportsTable : IntIdTable() {
val bankAccount = reference("bankAccount", BankAccountsTable)
}
+
+
fun dbDropTables(dbConnectionString: String) {
Database.connect(dbConnectionString)
transaction {
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
index 4a01d5f..f42b5bf 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
@@ -83,8 +83,9 @@ import java.util.*
import kotlin.random.Random
import kotlin.system.exitProcess
-const val SANDBOX_DB_ENV_VAR_NAME = "LIBEUFIN_SANDBOX_DB_CONNECTION"
private val logger: Logger = LoggerFactory.getLogger("tech.libeufin.sandbox")
+private val hostName: String? = getHostnameFromEnv("LIBEUFIN_SANDBOX_HOSTNAME")
+const val SANDBOX_DB_ENV_VAR_NAME = "LIBEUFIN_SANDBOX_DB_CONNECTION"
data class SandboxError(
val statusCode: HttpStatusCode,
@@ -994,6 +995,43 @@ fun serverMain(dbName: String, port: Int) {
}
}
+ /**
+ * Activates a withdraw operation of 1 currency unit with
+ * the default exchange, from a designated/constant customer.
+ */
+ get("/taler") {
+ requireSuperuser(call.request)
+ SandboxAssert(
+ hostName != null,
+ "Own hostname not found. Logs should have warned"
+ )
+ // check that the three canonical accounts exist
+ val wo = transaction {
+ val exchange = BankAccountEntity.find {
+ BankAccountsTable.label eq "sandbox-account-exchange"
+ }.firstOrNull()
+ val customer = BankAccountEntity.find {
+ BankAccountsTable.label eq "sandbox-account-customer"
+ }.firstOrNull()
+ val merchant = BankAccountEntity.find {
+ BankAccountsTable.label eq "sandbox-account-merchant"
+ }.firstOrNull()
+
+ SandboxAssert(exchange != null, "exchange has no bank
account")
+ SandboxAssert(customer != null, "customer has no bank
account")
+ SandboxAssert(merchant != null, "merchant has no bank
account")
+
+ // At this point, the three actors exist and a new
withdraw operation can be created.
+ TalerWithdrawalEntity.new {
+ // wopid is autogenerated, and momentarily the only
column
+ }
+ }
+ /**
+ * Future versions will include the QR code in this response.
+ */
+
call.respondText("taler://withdraw/${hostName}/api/${wo.wopid}")
+ return@get
+ }
}
}
logger.info("LibEuFin Sandbox running on port $port")
diff --git a/util/src/main/kotlin/Config.kt b/util/src/main/kotlin/Config.kt
index 800ae69..d7a1436 100644
--- a/util/src/main/kotlin/Config.kt
+++ b/util/src/main/kotlin/Config.kt
@@ -50,6 +50,15 @@ fun setLogLevel(logLevel: String?) {
}
}
+fun getHostnameFromEnv(varName: String): String? {
+ val hostName = System.getenv(varName)
+ if (hostName.isNullOrBlank() or hostName.isNullOrEmpty()) {
+ println("WARNING, the hostname wasn't found in env's $varName. Will
stay unknown")
+ return null
+ }
+ return hostName
+}
+
fun getDbConnFromEnv(varName: String): String {
val dbConnStr = System.getenv(varName)
if (dbConnStr.isNullOrBlank() or dbConnStr.isNullOrEmpty()) {
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.