diff options
Diffstat (limited to 'util/src/main/kotlin/Payto.kt')
-rw-r--r-- | util/src/main/kotlin/Payto.kt | 34 |
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 |