]> git.proxmox.com Git - flutter/proxmox_login_manager.git/commitdiff
login: fix login for saved ipv6 addresses
authorDominik Csapak <d.csapak@proxmox.com>
Thu, 1 Dec 2022 09:27:34 +0000 (10:27 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 5 Dec 2022 13:36:41 +0000 (14:36 +0100)
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@proxmox.com>
lib/proxmox_login_form.dart

index 706315f510e2e0deb6fb2a5b84319695fd252bf1..41bf68f45573490cb733731aaa14b802a5e1b988 100644 (file)
@@ -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, '');
+}