|
@@ -1,11 +1,9 @@
|
|
|
package im.angry.openeuicc.ui.wizard
|
|
package im.angry.openeuicc.ui.wizard
|
|
|
|
|
|
|
|
import android.os.Bundle
|
|
import android.os.Bundle
|
|
|
-import android.util.Patterns
|
|
|
|
|
import android.view.LayoutInflater
|
|
import android.view.LayoutInflater
|
|
|
import android.view.View
|
|
import android.view.View
|
|
|
import android.view.ViewGroup
|
|
import android.view.ViewGroup
|
|
|
-import android.widget.Toast
|
|
|
|
|
import androidx.core.widget.addTextChangedListener
|
|
import androidx.core.widget.addTextChangedListener
|
|
|
import com.google.android.material.textfield.TextInputLayout
|
|
import com.google.android.material.textfield.TextInputLayout
|
|
|
import im.angry.openeuicc.common.R
|
|
import im.angry.openeuicc.common.R
|
|
@@ -86,10 +84,34 @@ class DownloadWizardDetailsFragment : DownloadWizardActivity.DownloadWizardStepF
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private fun updateInputCompleteness() {
|
|
private fun updateInputCompleteness() {
|
|
|
- inputComplete = Patterns.DOMAIN_NAME.matcher(smdp.editText!!.text).matches()
|
|
|
|
|
|
|
+ inputComplete = isValidAddress(smdp.editText!!.text)
|
|
|
if (state.confirmationCodeRequired) {
|
|
if (state.confirmationCodeRequired) {
|
|
|
inputComplete = inputComplete && confirmationCode.editText!!.text.isNotEmpty()
|
|
inputComplete = inputComplete && confirmationCode.editText!!.text.isNotEmpty()
|
|
|
}
|
|
}
|
|
|
refreshButtons()
|
|
refreshButtons()
|
|
|
}
|
|
}
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+private fun isValidAddress(input: CharSequence): Boolean {
|
|
|
|
|
+ if (!input.contains('.')) return false
|
|
|
|
|
+ var fqdn = input
|
|
|
|
|
+ var port = 443
|
|
|
|
|
+ if (input.contains(':')) {
|
|
|
|
|
+ val portIndex = input.lastIndexOf(':')
|
|
|
|
|
+ fqdn = input.substring(0, portIndex)
|
|
|
|
|
+ port = input.substring(portIndex + 1, input.length).toIntOrNull(10) ?: 0
|
|
|
|
|
+ }
|
|
|
|
|
+ // see https://en.wikipedia.org/wiki/Port_(computer_networking)
|
|
|
|
|
+ if (port < 1 || port > 0xffff) return false
|
|
|
|
|
+ // see https://en.wikipedia.org/wiki/Fully_qualified_domain_name
|
|
|
|
|
+ if (fqdn.isEmpty() || fqdn.length > 255) return false
|
|
|
|
|
+ for (part in fqdn.split('.')) {
|
|
|
|
|
+ if (part.isEmpty() || part.length > 64) return false
|
|
|
|
|
+ if (part.first() == '-' || part.last() == '-') return false
|
|
|
|
|
+ for (c in part) {
|
|
|
|
|
+ if (c.isLetterOrDigit() || c == '-') continue
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return true
|
|
|
}
|
|
}
|