[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