gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-cashless2ecash] branch master updated: fix: app basic auth and se


From: gnunet
Subject: [taler-cashless2ecash] branch master updated: fix: app basic auth and serialization
Date: Wed, 08 May 2024 07:58:00 +0200

This is an automated email from the git hooks/post-receive script.

joel-haeberli pushed a commit to branch master
in repository cashless2ecash.

The following commit(s) were added to refs/heads/master by this push:
     new 24a60ce  fix: app basic auth and serialization
24a60ce is described below

commit 24a60ce054930f9070f757413b1b06cec5bc5636
Author: Joel-Haeberli <haebu@rubigen.ch>
AuthorDate: Wed May 8 07:57:48 2024 +0200

    fix: app basic auth and serialization
---
 .../client/taler/TerminalClientImplementation.kt   | 16 +++++--
 .../wallee_c2ec/client/taler/TerminalClientMock.kt | 20 ++++----
 .../client/taler/model/TerminalsApiModel.kt        | 56 ++++++++++++----------
 .../withdrawal/ExchangeSelectionScreen.kt          | 12 ++---
 .../wallee_c2ec/withdrawal/WithdrawalViewModel.kt  | 43 ++++++++++-------
 5 files changed, 85 insertions(+), 62 deletions(-)

diff --git 
a/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/TerminalClientImplementation.kt
 
b/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/TerminalClientImplementation.kt
index 0c5f2b2..168bbd3 100644
--- 
a/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/TerminalClientImplementation.kt
+++ 
b/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/TerminalClientImplementation.kt
@@ -8,6 +8,7 @@ import 
ch.bfh.habej2.wallee_c2ec.client.taler.model.TerminalWithdrawalSetup
 import 
ch.bfh.habej2.wallee_c2ec.client.taler.model.TerminalWithdrawalSetupResponse
 import ch.bfh.habej2.wallee_c2ec.client.taler.model.WithdrawalOperationStatus
 import com.squareup.moshi.Moshi
+import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import kotlinx.coroutines.asCoroutineDispatcher
 import okhttp3.HttpUrl.Companion.toHttpUrl
 import okhttp3.Interceptor
@@ -46,7 +47,10 @@ class TerminalClientImplementation  (
         .addPathSegment(encodedWopid)
         .build()
 
-    private fun <T> serializer(clazz: Class<T>) = 
Moshi.Builder().build().adapter(clazz)
+    private fun <T> serializer(clazz: Class<T>) = Moshi.Builder()
+        .add(KotlinJsonAdapterFactory())
+        .build()
+        .adapter(clazz)
 
     private fun withdrawalsConfirm(encodedWopid: String) = 
withdrawalsByWopid(encodedWopid)
         .newBuilder()
@@ -66,6 +70,7 @@ class TerminalClientImplementation  (
             .url(terminalsConfigUrl())
             .build()
         val response = client.newCall(req).execute()
+        println("terminal config response status: ${response.code}")
         callback(parseOrEmpty(response))
     }
 
@@ -165,13 +170,14 @@ class TerminalClientImplementation  (
         override fun intercept(chain: Interceptor.Chain): Response {
 
             val base64EncodedCredentials = java.util.Base64
-                .getUrlEncoder()
-                
.encode("${config.username}:${config.accessToken}".toByteArray())
-                .toString()
+                .getEncoder()
+                
.encodeToString("${config.username}:${config.accessToken}".toByteArray())
 
+            val authorizationHeaderValue = "Basic $base64EncodedCredentials"
+            println("auth header: $authorizationHeaderValue")
             return chain.proceed(
                 chain.request().newBuilder()
-                    .header("Authorization", base64EncodedCredentials)
+                    .header("Authorization", authorizationHeaderValue)
                     .build()
             )
         }
diff --git 
a/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/TerminalClientMock.kt
 
b/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/TerminalClientMock.kt
index ae0b769..24501a8 100644
--- 
a/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/TerminalClientMock.kt
+++ 
b/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/TerminalClientMock.kt
@@ -49,19 +49,19 @@ class TerminalClientMock: TerminalClient {
                 BankWithdrawalOperationStatus(
                     WithdrawalOperationStatus.SELECTED,
                     Amount(10,0),
-                    Amount(10,0),
-                    Amount(0,0),
-                    Amount(0,0),
+//                    Amount(10,0),
+//                    Amount(0,0),
+//                    Amount(0,0),
                     "wallee-transaction",
-                    "http://mock.com/api";,
-                    "http://mock.com/api";,
-                    "",
+//                    "http://mock.com/api";,
+//                    "http://mock.com/api";,
+//                    "",
                     Array(0) {""},
                     mockWopidOrReservePubKey(),
-                    "payto://IBAN/CH1111111111111",
-                    aborted = false,
-                    selectionDone = true,
-                    transferDone = false
+//                    "payto://IBAN/CH1111111111111",
+//                    aborted = false,
+//                    selectionDone = true,
+//                    transferDone = false
                 )
             )
         )
diff --git 
a/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/model/TerminalsApiModel.kt
 
b/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/model/TerminalsApiModel.kt
index c3997ad..7f376a4 100644
--- 
a/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/model/TerminalsApiModel.kt
+++ 
b/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/client/taler/model/TerminalsApiModel.kt
@@ -1,27 +1,33 @@
 package ch.bfh.habej2.wallee_c2ec.client.taler.model
 
 import ch.bfh.habej2.wallee_c2ec.withdrawal.Amount
+import com.squareup.moshi.Json
 
 data class TerminalApiConfig(
-    val name: String,
-    val version: String,
-    val providerName: String,
-    val currency: String,
-    val wireType: String
+    @Json(name = "name") val name: String,
+    @Json(name = "version") val version: String,
+    @Json(name = "provider_name") val providerName: String,
+    @Json(name = "currency") val currency: String,
+    @Json(name = "wire_type") val wireType: String
 )
 
 data class TerminalWithdrawalSetup(
-    val requestUid: String,
-    val amount: Amount
+    @Json(name = "request_uid") val requestUid: String,
+    @Json(name = "amount") val amount: Amount,
+    @Json(name = "suggested_amount") val suggestedAmount: Amount = Amount(0,0, 
""),
+    @Json(name = "provider_transaction_id") val providerTransactionId: String 
= "",
+    @Json(name = "terminal_fees") val terminalFees: Amount = Amount(0,0, ""),
+    @Json(name = "user_uuid") val userUuid: String = "",
+    @Json(name = "lock") val lock: String = ""
 )
 
 data class TerminalWithdrawalSetupResponse(
-    val withdrawalId: String
+    @Json(name = "withdrawal_id") val withdrawalId: String
 )
 
 data class TerminalWithdrawalConfirmationRequest(
-    val providerTransactionId: String,
-    val terminalFees: Amount
+    @Json(name = "provider_transaction_id") val providerTransactionId: String,
+    @Json(name = "terminal_fees") val terminalFees: Amount
 )
 
 enum class WithdrawalOperationStatus(val value: String) {
@@ -33,19 +39,19 @@ enum class WithdrawalOperationStatus(val value: String) {
 }
 
 data class BankWithdrawalOperationStatus(
-    val status: WithdrawalOperationStatus,
-    val amount: Amount,
-    val suggestedAmount: Amount,
-    val maxAmount: Amount,
-    val cardFees: Amount,
-    val senderWire: String,
-    val suggestedExchange: String,
-    val requiredExchange: String,
-    val confirmTransferUrl: String,
-    val wireTypes: Array<String>,
-    val selectedReservePub: String,
-    val selectedExchangeAccount: String,
-    val aborted: Boolean,
-    val selectionDone: Boolean,
-    val transferDone: Boolean
+    @Json(name = "status") val status: WithdrawalOperationStatus,
+    @Json(name = "amount") val amount: Amount,
+//    @Json(name = "suggested_amount") val suggestedAmount: Amount,
+//    @Json(name = "max_amount") val maxAmount: Amount,
+//    @Json(name = "card_fees") val cardFees: Amount,
+    @Json(name = "sender_wire") val senderWire: String,
+//    @Json(name = "suggested_exchange") val suggestedExchange: String,
+//    @Json(name = "required_exchange") val requiredExchange: String,
+//    @Json(name = "confirm_transfer_url") val confirmTransferUrl: String,
+    @Json(name = "wire_types") val wireTypes: Array<String>,
+    @Json(name = "selected_reserve_pub") val selectedReservePub: String,
+//    @Json(name = "selected_exchange_acount") val selectedExchangeAccount: 
String,
+//    @Json(name = "aborted") val aborted: Boolean,
+//    @Json(name = "selection_done") val selectionDone: Boolean,
+//    @Json(name = "transfer_done") val transferDone: Boolean
 )
diff --git 
a/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/withdrawal/ExchangeSelectionScreen.kt
 
b/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/withdrawal/ExchangeSelectionScreen.kt
index b7c8527..24d0df9 100644
--- 
a/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/withdrawal/ExchangeSelectionScreen.kt
+++ 
b/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/withdrawal/ExchangeSelectionScreen.kt
@@ -21,22 +21,22 @@ val exchanges = listOf(
     TalerTerminalConfig(
         "KUDOS Exchange (BFH)",
         "http://taler-c2ec.ti.bfh.ch";,
-        "",
-        ""
+        "Wallee-2",
+        "1A92pgloFR8WIgr0LDA+s9hbkO4EgyJlHj+3dQ9IJ9U="
     ),
 
     TalerTerminalConfig(
         "CHF Exchange (PostFinance)",
         "https://taler-c2ec.ti.bfh.ch";,
-        "",
-        ""
+        "Wallee-2",
+        "1A92pgloFR8WIgr0LDA+s9hbkO4EgyJlHj+3dQ9IJ9U="
     ),
 
     TalerTerminalConfig(
         "EUR Exchange (UBS)",
         "http://taler-c2ec.ti.bfh.ch";,
-        "",
-        ""
+        "Wallee-2",
+        "1A92pgloFR8WIgr0LDA+s9hbkO4EgyJlHj+3dQ9IJ9U="
     )
 )
 
diff --git 
a/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/withdrawal/WithdrawalViewModel.kt
 
b/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/withdrawal/WithdrawalViewModel.kt
index 102cc35..6f10eeb 100644
--- 
a/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/withdrawal/WithdrawalViewModel.kt
+++ 
b/wallee-c2ec/app/src/main/java/ch/bfh/habej2/wallee_c2ec/withdrawal/WithdrawalViewModel.kt
@@ -10,14 +10,11 @@ import androidx.lifecycle.ViewModel
 import androidx.lifecycle.viewModelScope
 import ch.bfh.habej2.wallee_c2ec.client.taler.TerminalClient
 import ch.bfh.habej2.wallee_c2ec.client.taler.TerminalClientImplementation
-import ch.bfh.habej2.wallee_c2ec.client.taler.TerminalClientMock
 import ch.bfh.habej2.wallee_c2ec.client.taler.config.TalerTerminalConfig
 import 
ch.bfh.habej2.wallee_c2ec.client.taler.model.TerminalWithdrawalConfirmationRequest
 import ch.bfh.habej2.wallee_c2ec.client.taler.model.TerminalWithdrawalSetup
-import com.wallee.android.till.sdk.data.LineItem
-import com.wallee.android.till.sdk.data.ResultCode
+import com.squareup.moshi.Json
 import com.wallee.android.till.sdk.data.State
-import com.wallee.android.till.sdk.data.Transaction
 import com.wallee.android.till.sdk.data.TransactionCompletionResponse
 import com.wallee.android.till.sdk.data.TransactionResponse
 import kotlinx.coroutines.flow.MutableStateFlow
@@ -28,7 +25,11 @@ import java.math.BigDecimal
 import java.util.Optional
 import java.util.UUID
 
-data class Amount(val value: Int, val frac: Int) {
+data class Amount(
+    @Json(name = "value") val value: Int,
+    @Json(name = "fraction") val frac: Int,
+    @Json(name = "currency") val curr: String = ""
+) {
 
     fun toBigDecimal(): BigDecimal = BigDecimal("$value.$frac")
 
@@ -76,6 +77,8 @@ class WithdrawalViewModel(
     vararg closeables: Closeable
 ) : ViewModel(*closeables) {
 
+    private val retries = 3
+
     private var exchangeSelected = false
     private var terminalClient: TerminalClient? = null
     private val _uiState = MutableStateFlow(MutableWithdrawalOperationState())
@@ -93,11 +96,14 @@ class WithdrawalViewModel(
         _uiState.value = MutableWithdrawalOperationState() // reset withdrawal 
operation
 
         terminalClient!!.terminalsConfig {
+            println("terminal config request result present: ${it.isPresent}")
             if (!it.isPresent) {
                 activity.finish()
+            } else {
+                _uiState.value.exchangeBankIntegrationApiUrl =
+                    
"${cfg.terminalApiBaseUrl}${TalerConstants.TALER_INTEGRATION}"
+                this@WithdrawalViewModel.updateCurrency(it.get().currency)
             }
-            _uiState.value.exchangeBankIntegrationApiUrl = 
"${cfg.terminalApiBaseUrl}${TalerConstants.TALER_INTEGRATION}"
-            this@WithdrawalViewModel.updateCurrency(it.get().currency)
         }
         exchangeSelected = true
     }
@@ -161,16 +167,21 @@ class WithdrawalViewModel(
         onSuccess: () -> Unit,
         onFailure: () -> Unit
     ) {
-
+        var retries = 0
+        var success = false
         viewModelScope.launch {
-            
terminalClient!!.retrieveWithdrawalStatus(uiState.value.encodedWopid, 30000) {
-                if (it.isPresent) {
-                    onSuccess()
-                } else {
-                    withdrawalOperationFailed()
-                    onFailure()
+            while (retries < this@WithdrawalViewModel.retries) {
+                
terminalClient!!.retrieveWithdrawalStatus(uiState.value.encodedWopid, 10000) {
+                    if (it.isPresent) {
+                        onSuccess()
+                        success = true
+                        retries = this@WithdrawalViewModel.retries + 1
+                    }
                 }
             }
+            if (!success) {withdrawalOperationFailed()
+                onFailure()
+            }
         }
     }
 
@@ -215,7 +226,7 @@ class WithdrawalViewModel(
                 if (fracStr.isNotEmpty()) {
                     frac = fracStr.toInt()
                 }
-                Optional.of(Amount(value, frac))
+                Optional.of(Amount(value, frac, uiState.value.currency))
             } catch (ex: NumberFormatException) {
                 println(ex.message)
                 Optional.empty()
@@ -224,7 +235,7 @@ class WithdrawalViewModel(
 
         return try {
             val value = inp.toInt()
-            Optional.of(Amount(value, 0))
+            Optional.of(Amount(value, 0, uiState.value.currency))
         } catch (ex: NumberFormatException) {
             println(ex.message)
             Optional.empty()

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]