summaryrefslogtreecommitdiff
path: root/util/src/main/kotlin/Payto.kt
diff options
context:
space:
mode:
Diffstat (limited to 'util/src/main/kotlin/Payto.kt')
-rw-r--r--util/src/main/kotlin/Payto.kt34
1 files changed, 19 insertions, 15 deletions
diff --git a/util/src/main/kotlin/Payto.kt b/util/src/main/kotlin/Payto.kt
index 04fda1ac..ed52d1b1 100644
--- a/util/src/main/kotlin/Payto.kt
+++ b/util/src/main/kotlin/Payto.kt
@@ -6,7 +6,7 @@ import java.net.URI
* Helper data structures.
*/
data class Payto(
- val name: String,
+ val name: String?,
val iban: String,
val bic: String?
)
@@ -22,22 +22,26 @@ fun parsePayto(paytoLine: String): Payto {
if (javaParsedUri.scheme != "payto") {
throw InvalidPaytoError("'${paytoLine}' is not payto")
}
- val queryStringAsList = javaParsedUri.query.split("&")
- // admit only ONE parameter: receiver-name.
- if (queryStringAsList.size != 1) {
- throw InvalidPaytoError("'${paytoLine}' has unsupported query string")
- }
- val splitParameter = queryStringAsList.first().split("=")
- if (splitParameter.first() != "receiver-name" && splitParameter.first() != "sender-name") {
- throw InvalidPaytoError("'${paytoLine}' has unsupported query string")
- }
- val receiverName = splitParameter.last()
+
+ val accountOwner = if (javaParsedUri.query != null) {
+ val queryStringAsList = javaParsedUri.query.split("&")
+ // admit only ONE parameter: receiver-name.
+ if (queryStringAsList.size != 1) {
+ throw InvalidPaytoError("'${paytoLine}' has unsupported query string")
+ }
+ val splitParameter = queryStringAsList.first().split("=")
+ if (splitParameter.first() != "receiver-name" && splitParameter.first() != "sender-name") {
+ throw InvalidPaytoError("'${paytoLine}' has unsupported query string")
+ }
+ splitParameter.last()
+ } else null
+
val splitPath = javaParsedUri.path.split("/").filter { it.isNotEmpty() }
if (splitPath.size > 2) {
throw InvalidPaytoError("too many path segments in iban payto URI")
}
- if (splitPath.size < 2) {
- return Payto(iban = splitPath[0], name = receiverName, bic = null)
- }
- return Payto(iban = splitPath[1], bic = splitPath[0], name = receiverName)
+ val (iban, bic) = if (splitPath.size == 1) {
+ Pair(splitPath[0], null)
+ } else Pair(splitPath[1], splitPath[0])
+ return Payto(iban = iban, bic = bic, name = accountOwner)
} \ No newline at end of file