commit 9f230c0aeeccb3a766ece438929ad5ea6259c63f
parent 6e21df1b59a134409d43d251175792d06e0451c6
Author: Iván Ávalos <avalos@disroot.org>
Date: Wed, 29 May 2024 13:36:22 -0600
[pos] Initial working version of v15 /pos endpoint
bug 0008838
Diffstat:
3 files changed, 75 insertions(+), 39 deletions(-)
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigFragment.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigFragment.kt
@@ -61,13 +61,11 @@ class ConfigFragment : Fragment() {
})
ui.oldConfigButton.setOnClickListener {
- ui.oldConfigForm.visibility = VISIBLE
- ui.newConfigForm.visibility = GONE
+ showOldConfig()
}
ui.newConfigButton.setOnClickListener {
- ui.oldConfigForm.visibility = GONE
- ui.newConfigForm.visibility = VISIBLE
+ showNewConfig()
}
/*
@@ -150,37 +148,68 @@ class ConfigFragment : Fragment() {
}
private fun updateView(isInitialization: Boolean = false) {
+ if (isInitialization) {
+ ui.configUrlView.editText!!.setText(OLD_CONFIG_URL_DEMO)
+ ui.usernameView.editText!!.setText(OLD_CONFIG_USERNAME_DEMO)
+ ui.passwordView.editText!!.setText(OLD_CONFIG_PASSWORD_DEMO)
+
+ ui.merchantUrlView.editText!!.setText(NEW_CONFIG_URL_DEMO)
+ ui.tokenView.editText!!.setText(NEW_CONFIG_ACCESS_TOKEN_DEMO)
+
+ when (val config = configManager.config) {
+ is Config.Old -> {
+ if (config.configUrl.isNotBlank()) {
+ ui.configUrlView.editText!!.setText(config.configUrl)
+ }
+
+ if (config.username.isNotBlank()) {
+ ui.usernameView.editText!!.setText(config.username)
+ }
+
+ if (config.password.isNotBlank()) {
+ ui.passwordView.editText!!.setText(config.password)
+ }
+ }
+
+ is Config.New -> {
+ if (config.merchantUrl.isNotBlank()) {
+ ui.merchantUrlView.editText!!.setText(config.merchantUrl)
+ }
+
+ if (config.accessToken.isNotBlank()) {
+ ui.tokenView.editText!!.setText(config.accessToken)
+ }
+ }
+ }
+ }
+
when (val config = configManager.config) {
is Config.Old -> {
- ui.configUrlView.editText!!.setText(
- if (isInitialization && config.configUrl.isBlank()) CONFIG_URL_DEMO
- else config.configUrl
- )
- ui.usernameView.editText!!.setText(
- if (isInitialization && config.username.isBlank()) CONFIG_USERNAME_DEMO
- else config.username
- )
- ui.passwordView.editText!!.setText(
- if (isInitialization && config.password.isBlank()) CONFIG_PASSWORD_DEMO
- else config.password
- )
+ ui.configToggle.check(R.id.oldConfigButton)
+ showOldConfig()
+
ui.forgetPasswordButton.visibility = if (config.hasPassword()) VISIBLE else GONE
}
-
is Config.New -> {
- ui.merchantUrlView.editText!!.setText(
- if (isInitialization && config.merchantUrl.isBlank()) MERCHANT_URL_DEMO
- else config.merchantUrl
- )
- ui.tokenView.editText!!.setText(
- if (isInitialization && config.accessToken.isBlank()) MERCHANT_ACCESS_TOKEN_DEMO
- else config.accessToken
- )
+ ui.configToggle.check(R.id.newConfigButton)
+ showNewConfig()
+
+ ui.tokenView.visibility = if (config.hasPassword()) VISIBLE else GONE
}
}
}
+ private fun showOldConfig() {
+ ui.oldConfigForm.visibility = VISIBLE
+ ui.newConfigForm.visibility = GONE
+ }
+
+ private fun showNewConfig() {
+ ui.oldConfigForm.visibility = GONE
+ ui.newConfigForm.visibility = VISIBLE
+ }
+
private fun checkForUrlCredentials() {
val text = ui.configUrlView.editText!!.text.toString()
Uri.parse(text)?.userInfo?.let { userInfo ->
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/config/ConfigManager.kt
@@ -48,24 +48,26 @@ private const val SETTINGS_NAME = "taler-merchant-terminal"
private const val SETTINGS_CONFIG_VERSION = "configVersion"
+internal const val CONFIG_VERSION_OLD = 0
+internal const val CONFIG_VERSION_NEW = 1
+
+// Old JSON config + basic auth config
+
private const val SETTINGS_CONFIG_URL = "configUrl"
private const val SETTINGS_USERNAME = "username"
private const val SETTINGS_PASSWORD = "password"
-private const val SETTINGS_MERCHANT_URL = "merchantUrl"
-private const val SETTINGS_ACCESS_TOKEN = "accessToken"
-
-internal const val CONFIG_URL_DEMO = "https://docs.taler.net/_static/sample-pos-config.json"
-internal const val CONFIG_USERNAME_DEMO = ""
-internal const val CONFIG_PASSWORD_DEMO = ""
+internal const val OLD_CONFIG_URL_DEMO = "https://docs.taler.net/_static/sample-pos-config.json"
+internal const val OLD_CONFIG_USERNAME_DEMO = ""
+internal const val OLD_CONFIG_PASSWORD_DEMO = ""
-internal const val MERCHANT_URL_DEMO = "https://backend.demo.taler.net/instances/pos"
-internal const val MERCHANT_ACCESS_TOKEN_DEMO = "sandbox"
+// New merchant API + token config
-internal const val CONFIG_VERSION_OLD = 0
-internal const val CONFIG_VERSION_NEW = 1
+private const val SETTINGS_MERCHANT_URL = "merchantUrl"
+private const val SETTINGS_ACCESS_TOKEN = "accessToken"
-internal const val CONFIG_ACCESS_TOKEN_DEMO = ""
+internal const val NEW_CONFIG_URL_DEMO = "https://backend.demo.taler.net/instances/pos"
+internal const val NEW_CONFIG_ACCESS_TOKEN_DEMO = "sandbox"
private val VERSION = Version.parse(BuildConfig.BACKEND_API_VERSION)!!
@@ -90,7 +92,7 @@ class ConfigManager(
var config: Config = Config.New(
merchantUrl = prefs.getString(SETTINGS_MERCHANT_URL, "")!!,
- accessToken = prefs.getString(SETTINGS_ACCESS_TOKEN, CONFIG_ACCESS_TOKEN_DEMO)!!,
+ accessToken = prefs.getString(SETTINGS_ACCESS_TOKEN, NEW_CONFIG_ACCESS_TOKEN_DEMO)!!,
)
@Volatile
@@ -144,7 +146,12 @@ class ConfigManager(
}
}
}.body()
- val merchantConfig = posConfig.merchantConfig
+
+ val merchantConfig = when (val c = config) {
+ is Config.Old -> posConfig.merchantConfig!!
+ is Config.New -> MerchantConfig(c.merchantUrl, "secret-token:${c.accessToken}")
+ }
+
// get config from merchant backend API
api.getConfig(merchantConfig.baseUrl).handleSuspend(::onNetworkError) {
onMerchantConfigReceived(configToSave, posConfig, merchantConfig, it)
diff --git a/merchant-terminal/src/main/java/net/taler/merchantpos/config/PosConfig.kt b/merchant-terminal/src/main/java/net/taler/merchantpos/config/PosConfig.kt
@@ -57,7 +57,7 @@ sealed class Config {
@Serializable
data class PosConfig(
@SerialName("config")
- val merchantConfig: MerchantConfig,
+ val merchantConfig: MerchantConfig? = null ,
val categories: List<Category>,
val products: List<ConfigProduct>
)