[pve-devel] [PATCH proxmox_login_manager v2 2/2] fix #6409: add `isDefaultRealm` check to pre-select realm in login form
Shan Shaji
s.shaji at proxmox.com
Tue Jun 3 12:31:40 CEST 2025
Thank you for catching that. Will create another patch.
On Tue Jun 3, 2025 at 11:48 AM CEST, Michael Köppl wrote:
> On 5/26/25 17:41, Shan Shaji wrote:
> > When the `default` property was selected inside the realm of the web
> > UI, the app's login page was not showing the default realm instead,
> > it was always showing PAM.
> >
> > This commit adds the `isDefaultRealm` boolean check to find the
> > default realm.
>
> nit: commit message should not say "This commit..."
>
> >
> > Signed-off-by: Shan Shaji <s.shaji at proxmox.com>
> > ---
> >
> > changes since v1:
> > * generated the patch again by comparing with master
> >
> > lib/proxmox_login_form.dart | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/lib/proxmox_login_form.dart b/lib/proxmox_login_form.dart
> > index 5916563..4ed495d 100644
> > --- a/lib/proxmox_login_form.dart
> > +++ b/lib/proxmox_login_form.dart
> > @@ -697,7 +697,7 @@ class _ProxmoxLoginPageState extends State<ProxmoxLoginPage> {
> > response?.sort((a, b) => a!.realm.compareTo(b!.realm));
> >
> > final selection = response?.singleWhere(
> > - (e) => e!.realm == widget.userModel?.realm,
> > + (e) => e!.realm == widget.userModel?.realm || e.isDefaultRealm,
>
> This change will make the singleWhere throw a StateError "too many
> elements" if the user was already signed in on an instance with a realm
> different from the default realm and tries to connect to their PVE host
> again. singleWhere expects a single element to fulfill the condition. If
> multiple do it, it causes an exception. In this case, one realm would
> match the user's selected realm and another would match the default realm.
>
> To make it more clear what I mean:
> - Sign into a PVE host using PAM
> - Change the default realm to "PVE" in the web UI
> - Sign out from the PVE host in the app (do not delete the site)
> - Try to sign in again. Progress spinner with "Connecting..." since the
> exception is uncaught.
>
> I think the logic for this would have to be more along the lines of:
>
> final selection = response?.singleWhere(
> (e) {
> if (widget.userModel?.realm != null) {
> return e!.realm == widget.userModel?.realm;
> } else {
> return e!.isDefaultRealm;
> }
> },
> orElse: () => response?.first,
> );
>
> This gives priority to the user's selection if there is one.
> > orElse: () => response?.first,
> > );
> >
More information about the pve-devel
mailing list