diff options
Diffstat (limited to 'cashier/src')
9 files changed, 120 insertions, 27 deletions
diff --git a/cashier/src/main/java/net/taler/cashier/HttpHelper.kt b/cashier/src/main/java/net/taler/cashier/HttpHelper.kt index fd48b2d..69cc46f 100644 --- a/cashier/src/main/java/net/taler/cashier/HttpHelper.kt +++ b/cashier/src/main/java/net/taler/cashier/HttpHelper.kt @@ -50,11 +50,13 @@ object HttpHelper { Log.e(TAG, "Error retrieving $url", e) return HttpJsonResult.Error(0) } - return if (response.code == 200 && response.body != null) { + return if (response.code == 204) { + HttpJsonResult.Success(JSONObject()) + } else if (response.code in 200..299 && response.body != null) { val jsonObject = JSONObject(response.body!!.string()) HttpJsonResult.Success(jsonObject) } else { - Log.e(TAG, "Received status ${response.code} from $url expected 200") + Log.e(TAG, "Received status ${response.code} from $url expected 2xx") HttpJsonResult.Error(response.code, getErrorBody(response)) } } @@ -76,11 +78,13 @@ object HttpHelper { Log.e(TAG, "Error retrieving $url", e) return HttpJsonResult.Error(0) } - return if (response.code == 200 && response.body != null) { + return if (response.code == 204) { + HttpJsonResult.Success(JSONObject()) + } else if (response.code in 200..299 && response.body != null) { val jsonObject = JSONObject(response.body!!.string()) HttpJsonResult.Success(jsonObject) } else { - Log.e(TAG, "Received status ${response.code} from $url expected 200") + Log.e(TAG, "Received status ${response.code} from $url expected 2xx") HttpJsonResult.Error(response.code, getErrorBody(response)) } } diff --git a/cashier/src/main/java/net/taler/cashier/MainViewModel.kt b/cashier/src/main/java/net/taler/cashier/MainViewModel.kt index 21d0209..2196e78 100644 --- a/cashier/src/main/java/net/taler/cashier/MainViewModel.kt +++ b/cashier/src/main/java/net/taler/cashier/MainViewModel.kt @@ -64,7 +64,7 @@ class MainViewModel(private val app: Application) : AndroidViewModel(app) { fun getBalance() = viewModelScope.launch(Dispatchers.IO) { check(configManager.hasConfig()) { "No config to get balance" } val config = configManager.config - val url = "${config.bankUrl}/access-api/accounts/${config.username}" + val url = "${config.bankUrl}/accounts/${config.username}" Log.d(TAG, "Checking balance at $url") val result = when (val response = makeJsonGetRequest(url, config)) { is HttpJsonResult.Success -> { diff --git a/cashier/src/main/java/net/taler/cashier/SignedAmount.kt b/cashier/src/main/java/net/taler/cashier/SignedAmount.kt index 4f624ae..45bc3af 100644 --- a/cashier/src/main/java/net/taler/cashier/SignedAmount.kt +++ b/cashier/src/main/java/net/taler/cashier/SignedAmount.kt @@ -23,8 +23,10 @@ data class SignedAmount( val amount: Amount ) { - override fun toString(): String { - return if (positive) "$amount" else "-$amount" - } + override fun toString() = toString(showSymbol = true) + fun toString(showSymbol: Boolean) = amount.toString( + showSymbol = showSymbol, + negative = !positive, + ) } diff --git a/cashier/src/main/java/net/taler/cashier/config/ConfigFragment.kt b/cashier/src/main/java/net/taler/cashier/config/ConfigFragment.kt index 6e8a3db..3085bef 100644 --- a/cashier/src/main/java/net/taler/cashier/config/ConfigFragment.kt +++ b/cashier/src/main/java/net/taler/cashier/config/ConfigFragment.kt @@ -39,7 +39,7 @@ import net.taler.cashier.databinding.FragmentConfigBinding import net.taler.common.exhaustive import net.taler.common.showError -private const val URL_BANK_TEST = "https://bank.demo.taler.net/demobanks/default" +private const val URL_BANK_TEST = "https://bank.demo.taler.net" private const val URL_BANK_TEST_REGISTER = "https://bank.demo.taler.net/webui/#/register" class ConfigFragment : Fragment() { diff --git a/cashier/src/main/java/net/taler/cashier/config/ConfigManager.kt b/cashier/src/main/java/net/taler/cashier/config/ConfigManager.kt index c79fd12..50b1faf 100644 --- a/cashier/src/main/java/net/taler/cashier/config/ConfigManager.kt +++ b/cashier/src/main/java/net/taler/cashier/config/ConfigManager.kt @@ -38,12 +38,13 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import net.taler.cashier.BuildConfig import net.taler.cashier.Response import net.taler.cashier.Response.Companion.response import net.taler.common.Version import net.taler.common.getIncompatibleStringOrNull -val VERSION_BANK = Version(0, 0, 0) +val VERSION_BANK = Version.parse(BuildConfig.BACKEND_API_VERSION)!! private const val PREF_NAME = "net.taler.cashier.prefs" private const val PREF_KEY_BANK_URL = "bankUrl" private const val PREF_KEY_USERNAME = "username" @@ -114,7 +115,7 @@ class ConfigManager( } private suspend fun checkConfig(config: Config) = withContext(Dispatchers.IO) { - val url = "${config.bankUrl}/integration-api/config" + val url = "${config.bankUrl}/config" Log.d(TAG, "Checking config: $url") val configResponse = response { httpClient.get(url).body<ConfigResponse>() @@ -125,7 +126,7 @@ class ConfigManager( // we need to check an endpoint that requires authentication as well // to see if the credentials are valid val balanceResponse = response { - val authUrl = "${config.bankUrl}/access-api/accounts/${config.username}" + val authUrl = "${config.bankUrl}/accounts/${config.username}" Log.d(TAG, "Checking auth: $authUrl") httpClient.get(authUrl) { header(Authorization, config.basicAuth) diff --git a/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt b/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt index c6c39d0..487475d 100644 --- a/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt +++ b/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt @@ -94,7 +94,7 @@ class WithdrawManager( mWithdrawResult.value = null mWithdrawAmount.value = amount scope.launch(Dispatchers.IO) { - val url = "${config.bankUrl}/access-api/accounts/${config.username}/withdrawals" + val url = "${config.bankUrl}/accounts/${config.username}/withdrawals" Log.d(TAG, "Starting withdrawal at $url") val map = mapOf("amount" to amount.toJSONString()) val body = JSONObject(map) @@ -154,31 +154,31 @@ class WithdrawManager( private fun checkWithdrawStatus(withdrawalId: String) = scope.launch(Dispatchers.IO) { val url = - "${config.bankUrl}/access-api/accounts/${config.username}/withdrawals/${withdrawalId}" + "${config.bankUrl}/withdrawals/${withdrawalId}" Log.d(TAG, "Checking withdraw status at $url") val response = makeJsonGetRequest(url, config) if (response !is Success) return@launch // ignore errors and continue trying val oldStatus = mWithdrawStatus.value try { - when { - response.json.getBoolean("aborted") -> { + when(response.json.getString("status")) { + "selected" -> { + // only update status, if there's none, yet + // so we don't re-notify or overwrite newer status info + if (oldStatus == null) { + mWithdrawStatus.postValue(WithdrawStatus.SelectionDone(withdrawalId)) + } + } + "aborted" -> { cancelWithdrawStatusCheck() mWithdrawStatus.postValue(WithdrawStatus.Aborted) } - response.json.getBoolean("confirmation_done") -> { + "confirmed" -> { if (oldStatus !is WithdrawStatus.Success) { cancelWithdrawStatusCheck() mWithdrawStatus.postValue(WithdrawStatus.Success) viewModel.getBalance() } } - response.json.getBoolean("selection_done") -> { - // only update status, if there's none, yet - // so we don't re-notify or overwrite newer status info - if (oldStatus == null) { - mWithdrawStatus.postValue(WithdrawStatus.SelectionDone(withdrawalId)) - } - } } } catch (e: Exception) { mWithdrawStatus.postValue(WithdrawStatus.Error(e.toString())) @@ -206,7 +206,7 @@ class WithdrawManager( private fun abort(withdrawalId: String) = scope.launch(Dispatchers.IO) { val url = - "${config.bankUrl}/access-api/accounts/${config.username}/withdrawals/${withdrawalId}/abort" + "${config.bankUrl}/accounts/${config.username}/withdrawals/${withdrawalId}/abort" Log.d(TAG, "Aborting withdrawal at $url") makeJsonPostRequest(url, JSONObject(), config) } @@ -216,7 +216,7 @@ class WithdrawManager( mWithdrawStatus.value = WithdrawStatus.Confirming scope.launch(Dispatchers.IO) { val url = - "${config.bankUrl}/access-api/accounts/${config.username}/withdrawals/${withdrawalId}/confirm" + "${config.bankUrl}/accounts/${config.username}/withdrawals/${withdrawalId}/confirm" Log.d(TAG, "Confirming withdrawal at $url") when (val response = makeJsonPostRequest(url, JSONObject(), config)) { is Success -> { diff --git a/cashier/src/main/res/values-de/strings.xml b/cashier/src/main/res/values-de/strings.xml index 4b254d4..626d909 100644 --- a/cashier/src/main/res/values-de/strings.xml +++ b/cashier/src/main/res/values-de/strings.xml @@ -33,7 +33,7 @@ <string name="config_username">Benutzername</string> <string name="withdraw_error_timeout">Bitte lassen Sie ein Wallet die Abhebung auslösen.</string> <string name="action_about">Info</string> - <string name="ok">OK</string> + <string name="ok">Bestätigen</string> <string name="about_title">GNU Taler Kassierer</string> <string name="about_license">Lizenz: %s</string> <string name="about_version">Version: %s</string> diff --git a/cashier/src/main/res/values-fi/strings.xml b/cashier/src/main/res/values-fi/strings.xml new file mode 100644 index 0000000..030008f --- /dev/null +++ b/cashier/src/main/res/values-fi/strings.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="config_bank_url">Pankin API-osoite</string> + <string name="config_username">Käyttäjänimi</string> + <string name="config_password">Salasana</string> + <string name="config_bank_url_error">Osoite on virheellinen.</string> + <string name="config_username_error">Anna käyttäjätunnuksesi!</string> + <string name="app_name">Taler kassa</string> + <string name="config_button_save">Tallenna</string> + <string name="config_error">Virhe noudettaessa määritystä</string> + <string name="config_error_auth">Virheellinen käyttäjätunnus tai salasana!</string> + <string name="balance_current_label">Nykyinen saldo</string> + <string name="balance_error">ERROR: %s</string> + <string name="balance_offline">Offline-tilassa. Muodosta yhteys Internetiin.</string> + <string name="ok">OK</string> + <string name="action_reconfigure">Määritä uudelleen</string> + <string name="action_lock">Lukitse</string> + <string name="action_about">Noin</string> + <string name="withdraw_input_amount">Summa</string> + <string name="withdraw_into">Kuinka paljon sähköistä käteistä pitäisi nostaa?</string> + <string name="withdraw_error_zero">Anna positiivinen summa!</string> + <string name="withdraw_error_currency_mismatch">Virhe: Pankki ilmoitti toisen valuutan</string> + <string name="withdraw_error_fetch">Virhe kommunikoitaessa pankin kanssa: %s</string> + <string name="withdraw_error_timeout">Mikään lompakko ei yrittänyt nostaa. Yritä uudelleen.</string> + <string name="withdraw_button_confirm">Nosta</string> + <string name="transaction_intro">Skannaa koodi Taler-lompakkosovelluksella nostaaksesi:</string> + <string name="transaction_intro_nfc">Skannaa koodi tai käytä NFC:tä Taler-lompakkosovelluksen kanssa nostaaksesi:</string> + <string name="transaction_intro_scanned">Vahvista tapahtuma!</string> + <string name="transaction_confirm">Vahvista</string> + <string name="transaction_abort">Keskeytä</string> + <string name="transaction_aborted">Toiminta keskeytetty</string> + <string name="transaction_button_back">Takaisin</string> + <string name="transaction_last_success">Viimeisin tapahtuma: %s nostettu</string> + <string name="transaction_last_aborted">Viimeisin tapahtuma: Keskeytetty</string> + <string name="transaction_last_error">Viimeisin tapahtuma: epäonnistui</string> + <string name="about_title">GNU Taler Kassa</string> + <string name="about_version">Versio: %s</string> + <string name="about_license">Lisenssi: %s</string> + <string name="about_copyright">Tekijänoikeus: %s</string> + <string name="about_supported_bank_api">Pankin API-versio: %s</string> + <string name="config_demo_hint">Testausta varten voit <a href=%s>luoda testitilin demopankkiin</a>.</string> + <string name="withdraw_error_insufficient_balance">Riittämätön saldo</string> +</resources>
\ No newline at end of file diff --git a/cashier/src/main/res/values-ru/strings.xml b/cashier/src/main/res/values-ru/strings.xml new file mode 100644 index 0000000..8d6fff9 --- /dev/null +++ b/cashier/src/main/res/values-ru/strings.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="app_name">Taler Кассир</string> + <string name="config_bank_url">API адрес банка</string> + <string name="config_username">Имя пользователя</string> + <string name="config_password">Пароль</string> + <string name="config_button_save">Сохранить</string> + <string name="config_error_auth">Неправильное имя пользователя или пароль!</string> + <string name="config_demo_hint">Для тестирования, вы можете <a href=%s>создать тестовую учётную запист в демонстрационном банке</a>.</string> + <string name="balance_current_label">Теущий баланс</string> + <string name="balance_error">ОШИБКА: %s</string> + <string name="balance_offline">Нет связи. Пожалуйста подключитесь к интернету.</string> + <string name="action_reconfigure">Переконфигурировать</string> + <string name="action_lock">Заблокировать</string> + <string name="action_about">О программе</string> + <string name="withdraw_input_amount">Количество</string> + <string name="ok">OK</string> + <string name="config_bank_url_error">Адрес неправильный.</string> + <string name="config_username_error">Пожалуйста введите ваше имя пользователя!</string> + <string name="config_error">Ошибка при получении конфигурации</string> + <string name="withdraw_into">Сколько e-cash должно быть списано?</string> + <string name="withdraw_error_zero">Введите позитивное количество!</string> + <string name="withdraw_error_insufficient_balance">Недостаточный баланс</string> + <string name="withdraw_error_currency_mismatch">Ошибка: Банк использует другую валюту</string> + <string name="withdraw_error_fetch">Ошибка при связи с банком: %s</string> + <string name="withdraw_error_timeout">Никакой кошелёк не попробоавл списать. Пожалуйста попробуйте ещё раз.</string> + <string name="withdraw_button_confirm">Списание</string> + <string name="transaction_intro">Отсканируйте код приложением Кошелька Taler чтобы списать:</string> + <string name="transaction_intro_nfc">Отсканируйте код или используйте NFC в приложении Кошелька Taler чтобы списать:</string> + <string name="transaction_intro_scanned">Пожалуйста подтвердите транзакцию!</string> + <string name="transaction_confirm">Подтвердить</string> + <string name="transaction_abort">Подробности</string> + <string name="transaction_aborted">Транзакция прервана</string> + <string name="transaction_button_back">Перейти назад</string> + <string name="transaction_last_success">Последняя Транзакция: %s списано</string> + <string name="transaction_last_aborted">Последняя Транзакция: Прервана</string> + <string name="transaction_last_error">Последняя Транзакция: Неуспешна</string> + <string name="about_title">Кассир GNU Taler</string> + <string name="about_version">Версия: %s</string> + <string name="about_license">Лицензия: %s</string> + <string name="about_copyright">Авторские права: %s</string> + <string name="about_supported_bank_api">Версия API банка: %s</string> +</resources>
\ No newline at end of file |