[pve-devel] [PATCH proxmox-login-manager] login: fix login for saved ipv6 addresses
Dominik Csapak
d.csapak at proxmox.com
Thu Dec 1 10:27:34 CET 2022
Since we only string concatenated the host + port, ipv6 addresses were
invalid because their missing [] around the ip. To fix that, use
'Uri's 'toString' method but strip the 'https://' prefix when creating
an Uri object again
This now also allows to enter the 'https://' prefix manually
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
lib/proxmox_login_form.dart | 26 +++++++++++++++++---------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/lib/proxmox_login_form.dart b/lib/proxmox_login_form.dart
index 706315f..41bf68f 100644
--- a/lib/proxmox_login_form.dart
+++ b/lib/proxmox_login_form.dart
@@ -197,8 +197,7 @@ class _ProxmoxLoginPageState extends State<ProxmoxLoginPage> {
_progressModel
..inProgress = true
..message = 'Connection test...';
- _originController.text =
- '${userModel.origin?.host}:${userModel.origin?.port}';
+ _originController.text = userModel.origin?.toString() ?? '';
_accessDomains = _getAccessDomains();
_usernameController.text = userModel.username!;
if (widget.ticket!.isNotEmpty && userModel.activeSession) {
@@ -279,15 +278,13 @@ class _ProxmoxLoginPageState extends State<ProxmoxLoginPage> {
if (value == null || value.isEmpty) {
return 'Please enter origin';
}
- if (value.startsWith('https://') ||
- value.startsWith('http://')) {
- return 'Do not prefix with scheme';
- }
try {
- Uri.https(value, '');
+ normalizeUrl(value);
return null;
} on FormatException catch (_) {
return 'Invalid URI';
+ } on Exception catch (e) {
+ return 'Invalid URI: $e';
}
},
usernameController: _usernameController,
@@ -412,7 +409,7 @@ class _ProxmoxLoginPageState extends State<ProxmoxLoginPage> {
final settings = await ProxmoxGeneralSettingsModel.fromLocalStorage();
//cleaned form fields
- final origin = Uri.https(_originController.text.trim(), '');
+ final origin = normalizeUrl(_originController.text.trim());
final username = _usernameController.text.trim();
final password =
ticket.isNotEmpty ? ticket : _passwordController.text.trim();
@@ -502,7 +499,7 @@ class _ProxmoxLoginPageState extends State<ProxmoxLoginPage> {
..message = 'Connection test...';
});
var host = _originController.text.trim();
- var apiBaseUrl = Uri.https(host, '');
+ var apiBaseUrl = normalizeUrl(host);
RegExp portRE = new RegExp(r":\d{1,5}$");
@@ -667,3 +664,14 @@ class ProxmoxCertificateErrorDialog extends StatelessWidget {
);
}
}
+
+Uri normalizeUrl(String urlText) {
+ if (urlText.startsWith('https://')) {
+ urlText = urlText.substring('https://'.length);
+ }
+ if (urlText.startsWith('http://')) {
+ throw new Exception("HTTP without TLS is not supported");
+ }
+
+ return Uri.https(urlText, '');
+}
--
2.30.2
More information about the pve-devel
mailing list