From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 332B91FF0C1 for ; Tue, 25 Aug 2026 10:09:24 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 5631D21673; Tue, 25 Aug 2026 10:08:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=azharul.com; s=t28hkp5; t=1787283732; x=1787888532; darn=lists.proxmox.com; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=tNpQpPLvvtD/9maqrh3VGSQreJ/oJAD6Xj89EnR9h3o=; b=IJVOr4QOrunoBDZXrhGjF+3yOZ42cZi/PwzUhS4AhHxYSq5Enli3xpiD9bT97c/it1 jwc7zmbUQLkUoZjWqoynAriwJBJn7857GHbGrN/CuBHDU9tOUTpivgGFqaeX99eYyi7Y 9LMW32W1mhh37huFmvhlam0Kedf4oQx92dycsV1+5HKn6kpoL2XRi0ZNNxiQLhwtym6q EAlT7egISvbYbMsKZFcjcDWqlNOIJ4gDO/MSTKhNL6vbh0I05HZFvfOOBrYMKZf4gvlx z/CIs707RL4ilt02d8GZm7Lc0meqV3m/vyc590G46EfjuNYpMXlUkNAegetEPsQgNno1 mMDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787283732; x=1787888532; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=tNpQpPLvvtD/9maqrh3VGSQreJ/oJAD6Xj89EnR9h3o=; b=l9hIjHnrXtmX7GoOk4sUc1/3w1UzEjOL46aeVA+h1FC5AnYM60/XYsHX56z9ngPopG nBzsrba6pM1ZCkZZJ0oUnG/Mm3myOfiDjes1hYUDxGUbpJzv97vN5zgywaj0yaVVaUcN MCvxDYB7F56so1lNAZt0TqT3WVPL4iYlalky+XtNGH+JhF6uGlQ/NzsNpy4bvELlTikD ySfiBiJd8c0g4+bqjWWQeqSOgv7amOGIa7xm4U76vT8us1z4L8tf/dc8SOe/s/fG3lnA x0QjWMvYan/qNHSSOro3ULyywiOCz/7JQCQuFfigYzhXb5JhbPDUdXLL3uLNKSs5MAqq +JuQ== X-Gm-Message-State: AOJu0YzTqhRRPKiyTPtf5l84YdZD4KI70ybXdwPTch0e+vsoX+gUcL71 7S35wVF9kBuVmRk0qZU/SoiZhDVrDalk9GF9qfJKkMYClqN9mHzlBpaKOdLLAPGzdFy/0hlVc/c ei+lGgA== X-Gm-Gg: AR+sD10rq29bqVX359kmGZjlFvmaTtOG022ImrjT+bgL9HO9wdfWpEplg2zT5Ox6Dun rr2Wi31KxQnlnY/TRRmox7+Dkdy6U5XnK4+CzICw8TUPGJHTA2vnl1aKODzEN9Z+d8f4c3UYB1l D2M3Ybd/ajvqrDbzrpEIIV3ir+d5qg0E3p+VsyPT+59reFyk+sjYJUOP6ffmOCGgC7fHvGMffzf CecnFL0evLIbXeGtgv3uODmjfNhKjc0N7t7mT+JEQ8DtoQbIih0pS/y7cS921TPPSupjiHlB3Sa oqPeGDmlZAqpx7WK2hYGkXH3Y6B/hdT9Ij/oUnNiR6P5i0zWZ+IOYBYEGTaaFwMPlnWIjcSTJ4/ 7ThDXDDPV9m1NpY7SHYhAKJPROjjYrGDXzRgsrCWxaB0Gy0alVH4hAS447OnRNWDk5Sn5loMhIZ Cy8ZA0RCl2aUAo6vS4jDyV5NaACs37YUZyX2xCPVqGOZYenG3bRwSivHBThByzSa+rb0w7/dGfv 7CrDl+z1IO5ziTXluVhsuIiACiB2xALr5pzVYipxLhZ7mfVWt+TfW/KOqtgnJ46u6TWIA0YrEBl ZOVR/8o7RMksGb6wV6H8p8q+oZEBPTHDCgZPjhI1bbIBbeh/XnDT X-Received: by 2002:a05:620a:3194:b0:936:e374:9ea with SMTP id af79cd13be357-9372849f778mr1117296285a.14.1787283732455; Thu, 20 Aug 2026 20:42:12 -0700 (PDT) From: Azharul Haque To: pve-devel@lists.proxmox.com Subject: [PATCH dart-api-client v3 1/2] fix #4281: access: add `type` property to `PveAccessDomainModel` Date: Thu, 20 Aug 2026 23:41:38 -0400 Message-ID: <20260821034147.30194-2-haque@azharul.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260821034147.30194-1-haque@azharul.com> References: <20260810144713.75806-1-haque@azharul.com> <20260821034147.30194-1-haque@azharul.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 1 DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain DMARC_PASS -0.1 DMARC pass policy ENA_SUBJ_ODD_CASE 1.2 Subject has odd case POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes RCVD_IN_DNSWL_NONE -0.0001 Sender listed at https://www.dnswl.org/, no trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record X-MailFrom: haque@azharul.com X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation Message-ID-Hash: ZSXSJKBRVTA735CT5VVK5ZXYJG3WCKSX X-Message-ID-Hash: ZSXSJKBRVTA735CT5VVK5ZXYJG3WCKSX X-Mailman-Approved-At: Tue, 25 Aug 2026 10:08:31 +0200 CC: haque@azharul.com X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: The realm/domain list returned by /access/domains always includes a `type` field (pam, pve, ldap, ad, openid), but the model never captured it. Without it, callers have no way to tell an OpenID Connect realm apart from a password-based one, which is why the login form falls back to showing username/password fields even for realms that require a browser-based OpenID login. Model the field as a built_value EnumClass (`PveAccessDomainType`) rather than a plain string, since PVE's realm types are a fixed set; this gives compile-time checking and avoids stringly-typed comparisons. The enum is named following this package's existing `Pve*Type` convention (`PveNodesDiskListType`, `PveTaskLogStatusType`, ...) and covers all five realm types PVE supports. Note that unlike the previous plain string, deserializing a realm list containing an unknown type now throws; that is the standard built_value EnumClass behavior and acceptable since the set of realm types is fixed. Also add an `isOpenIdRealm` convenience getter, used by the login form in the following commits. Suggested-by: Shan Shaji Signed-off-by: Azharul Haque --- lib/src/models/pve_access_domain_model.dart | 18 ++++++++++++++++++ lib/src/models/serializers.dart | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/src/models/pve_access_domain_model.dart b/lib/src/models/pve_access_domain_model.dart index 6298bbe..39e00b9 100644 --- a/lib/src/models/pve_access_domain_model.dart +++ b/lib/src/models/pve_access_domain_model.dart @@ -1,3 +1,4 @@ +import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; @@ -7,12 +8,14 @@ abstract class PveAccessDomainModel implements Built { // Fields String get realm; + PveAccessDomainType get type; String? get comment; String? get tfa; @BuiltValueField(wireName: 'default') int? get defaultValue; bool get isDefaultRealm => defaultValue == 1; + bool get isOpenIdRealm => type == PveAccessDomainType.openid; PveAccessDomainModel._(); @@ -23,3 +26,18 @@ abstract class PveAccessDomainModel static Serializer get serializer => _$pveAccessDomainModelSerializer; } + +class PveAccessDomainType extends EnumClass { + static const PveAccessDomainType ad = _$ad; + static const PveAccessDomainType ldap = _$ldap; + static const PveAccessDomainType openid = _$openid; + static const PveAccessDomainType pam = _$pam; + static const PveAccessDomainType pve = _$pve; + + const PveAccessDomainType._(super.name); + + static BuiltSet get values => _$values; + static PveAccessDomainType valueOf(String name) => _$valueOf(name); + static Serializer get serializer => + _$pveAccessDomainTypeSerializer; +} diff --git a/lib/src/models/serializers.dart b/lib/src/models/serializers.dart index 0be80fc..458d105 100644 --- a/lib/src/models/serializers.dart +++ b/lib/src/models/serializers.dart @@ -39,7 +39,8 @@ part 'serializers.g.dart'; PveAccessUserModel, PveAccessGroupModel, PveAccessRoleModel, - PveAccessDomainModel + PveAccessDomainModel, + PveAccessDomainType ]) final Serializers serializers = (_$serializers.toBuilder() ..addPlugin(StandardJsonPlugin()) -- 2.50.1 (Apple Git-155)