Allow escaped characters in SIP URI user part and authentication username

This commit is contained in:
Juha Heinanen
2021-05-12 14:04:17 +03:00
parent e69e5b1dda
commit 20b137e218
2 changed files with 8 additions and 9 deletions

View File

@ -206,13 +206,10 @@ class Account(val accp: String) {
fun checkAuthUser(au: String): Boolean {
if (au == "") return true
val ud = au.split("@")
val userIDRegex = Regex("^([* .!%_`'~]|[+]|[-a-zA-Z0-9]){1,64}\$")
val telnoRegex = Regex("^[+]?[0-9]{1,16}\$")
if (ud.size == 1) {
return userIDRegex.matches(ud[0]) || telnoRegex.matches(ud[0])
} else {
return (userIDRegex.matches(ud[0]) || telnoRegex.matches(ud[0])) &&
Utils.checkDomain(ud[1])
return when (ud.size) {
1 -> Utils.checkUriUser(au)
2 -> Utils.checkUriUser(ud[0]) && Utils.checkDomain(ud[1])
else -> false
}
}

View File

@ -161,8 +161,10 @@ object Utils {
checkIpV6(bracketedIp.substring(1, bracketedIp.length - 2))
}
private fun checkUriUser(user: String): Boolean {
user.forEach { if (!(it.isLetterOrDigit() || "-_.!~*\'()&=+\$,;?/".contains(it))) return false }
fun checkUriUser(user: String): Boolean {
val escaped = """%(\d|A|B|C|D|E|F|a|b|c|d|e|f){2}""".toRegex()
escaped.replace(user, "").forEach {
if (!(it.isLetterOrDigit() || "-_.!~*\'()&=+\$,;?/".contains(it))) return false }
return user.isNotEmpty() && !checkIpV4(user) && !checkIpV6(user)
}