From: Azharul Haque <haque@azharul.com>
To: pve-devel@lists.proxmox.com
Cc: haque@azharul.com
Subject: [PATCH 1/2] fix #4281: android: register OpenID Connect callback activity
Date: Mon, 10 Aug 2026 01:40:36 -0400 [thread overview]
Message-ID: <20260810054037.17184-2-haque@azharul.com> (raw)
In-Reply-To: <20260810054037.17184-1-haque@azharul.com>
proxmox_login_manager's OpenID login flow (see the corresponding
patch there) opens the provider's authorization URL via
flutter_web_auth_2 and expects the provider's redirect back to
pveauth://openid-callback to be captured by the app. On Android this
requires explicitly registering flutter_web_auth_2's CallbackActivity
for that scheme; add it, following the plugin's setup instructions.
Also set android:taskAffinity="" on both activities as recommended
for this flutter_web_auth_2 version, to avoid a stray task appearing
after the callback returns control to MainActivity.
No changes needed on iOS: ASWebAuthenticationSession handles the
custom-scheme redirect without any Info.plist registration.
linux/flutter/generated_plugin_registrant.cc, generated_plugins.cmake
and pubspec.lock are regenerated as a consequence of the new
transitive dependency on flutter_web_auth_2 (and, on Linux/Windows,
its desktop_webview_window fallback).
Signed-off-by: Azharul Haque <haque@azharul.com>
---
android/app/src/main/AndroidManifest.xml | 16 ++
linux/flutter/generated_plugin_registrant.cc | 8 +
linux/flutter/generated_plugins.cmake | 2 +
pubspec.lock | 184 +++++++++++--------
4 files changed, 138 insertions(+), 72 deletions(-)
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 66135eb..884fedd 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -12,6 +12,7 @@
android:name="com.proxmox.app.pve_flutter_frontend.MainActivity"
android:exported="true"
android:launchMode="singleTop"
+ android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
@@ -23,6 +24,21 @@
</intent-filter>
</activity>
+ <!-- Captures the OpenID Connect provider's redirect back into the app
+ for realms configured with an OAuth/OIDC login, see
+ flutter_web_auth_2 and ProxmoxLoginForm's OpenID login flow. -->
+ <activity
+ android:name="com.linusu.flutter_web_auth_2.CallbackActivity"
+ android:exported="true"
+ android:taskAffinity="">
+ <intent-filter android:label="flutter_web_auth_2">
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+ <data android:scheme="pveauth" />
+ </intent-filter>
+ </activity>
+
<!-- This is used by Flutter to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc
index e3392af..5d804a0 100644
--- a/linux/flutter/generated_plugin_registrant.cc
+++ b/linux/flutter/generated_plugin_registrant.cc
@@ -7,13 +7,21 @@
#include "generated_plugin_registrant.h"
#include <biometric_storage/biometric_storage_plugin.h>
+#include <desktop_webview_window/desktop_webview_window_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h>
+#include <window_to_front/window_to_front_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) biometric_storage_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "BiometricStoragePlugin");
biometric_storage_plugin_register_with_registrar(biometric_storage_registrar);
+ g_autoptr(FlPluginRegistrar) desktop_webview_window_registrar =
+ fl_plugin_registry_get_registrar_for_plugin(registry, "DesktopWebviewWindowPlugin");
+ desktop_webview_window_plugin_register_with_registrar(desktop_webview_window_registrar);
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
+ g_autoptr(FlPluginRegistrar) window_to_front_registrar =
+ fl_plugin_registry_get_registrar_for_plugin(registry, "WindowToFrontPlugin");
+ window_to_front_plugin_register_with_registrar(window_to_front_registrar);
}
diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake
index 5a42b12..cc58f44 100644
--- a/linux/flutter/generated_plugins.cmake
+++ b/linux/flutter/generated_plugins.cmake
@@ -4,7 +4,9 @@
list(APPEND FLUTTER_PLUGIN_LIST
biometric_storage
+ desktop_webview_window
url_launcher_linux
+ window_to_front
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST
diff --git a/pubspec.lock b/pubspec.lock
index def499d..0096409 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
- sha256: "8d7ff3948166b8ec5da0fbb5962000926b8e02f2ed9b3e51d1738905fbd4c98d"
+ sha256: cd6add6f846f35fb79f3c315296703c1a24f3cfd7f4739d91a74961c1c7e9f1b
url: "https://pub.dev"
source: hosted
- version: "93.0.0"
+ version: "100.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
- sha256: de7148ed2fcec579b19f122c1800933dfa028f6d9fd38a152b04b1516cec120b
+ sha256: "6ba98576948803398b69e3a444df24eacdbe12ed699c7014e120ea38552debbf"
url: "https://pub.dev"
source: hosted
- version: "10.0.1"
+ version: "13.0.0"
args:
dependency: transitive
description:
@@ -53,34 +53,34 @@ packages:
dependency: transitive
description:
name: build
- sha256: aadd943f4f8cc946882c954c187e6115a84c98c81ad1d9c6cbf0895a8c85da9c
+ sha256: "45d14a0fb23e018d8287c32fc98d726ce466b231928ed9b9200f29bd3ccd39ae"
url: "https://pub.dev"
source: hosted
- version: "4.0.5"
+ version: "4.0.7"
build_config:
dependency: transitive
description:
name: build_config
- sha256: "4070d2a59f8eec34c97c86ceb44403834899075f66e8a9d59706f8e7834f6f71"
+ sha256: "94eaf6708fe64408c632ef2689ca3777b112f9421306ccf4f8c84d7c5c9f83f8"
url: "https://pub.dev"
source: hosted
- version: "1.3.0"
+ version: "1.3.2"
build_daemon:
dependency: transitive
description:
name: build_daemon
- sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957
+ sha256: "79e05eaf15a48d7230b053a4363b8eaac0cc234bbd0134c3229455481f55cbc6"
url: "https://pub.dev"
source: hosted
- version: "4.1.1"
+ version: "4.1.5"
build_runner:
dependency: "direct dev"
description:
name: build_runner
- sha256: "521daf8d189deb79ba474e43a696b41c49fb3987818dbacf3308f1e03673a75e"
+ sha256: "5367e521935b102bdf1e735d2aab461e36b2edca6517662d088dd04cc39f8d16"
url: "https://pub.dev"
source: hosted
- version: "2.13.1"
+ version: "2.15.1"
built_collection:
dependency: "direct main"
description:
@@ -93,18 +93,18 @@ packages:
dependency: "direct main"
description:
name: built_value
- sha256: "0730c18c770d05636a8f945c32a4d7d81cb6e0f0148c8db4ad12e7748f7e49af"
+ sha256: "31b24be6615ec7fcf70b3aa5a7469fe35826485e639a16dd7eb83ba30e4cc6a8"
url: "https://pub.dev"
source: hosted
- version: "8.12.5"
+ version: "8.12.7"
built_value_generator:
dependency: "direct dev"
description:
name: built_value_generator
- sha256: ebdc4dbc63bcdb8c63eb39569bc1da8594d998862449b8dc0e064b7b999d7c96
+ sha256: "66091f1d4c07ed76b25a2834c49766b7baafb8843d5a1cfc1308059f898bf056"
url: "https://pub.dev"
source: hosted
- version: "8.12.5"
+ version: "8.12.7"
characters:
dependency: transitive
description:
@@ -133,18 +133,10 @@ packages:
dependency: transitive
description:
name: code_assets
- sha256: "83ccdaa064c980b5596c35dd64a8d3ecc68620174ab9b90b6343b753aa721687"
- url: "https://pub.dev"
- source: hosted
- version: "1.0.0"
- code_builder:
- dependency: transitive
- description:
- name: code_builder
- sha256: "6a6cab2ba4680d6423f34a9b972a4c9a94ebe1b62ecec4e1a1f2cba91fd1319d"
+ sha256: bf394f466ba9205f1812a0433b392d6af280f155f56651eda7c18cc32ed493b8
url: "https://pub.dev"
source: hosted
- version: "4.11.1"
+ version: "1.2.1"
collection:
dependency: "direct main"
description:
@@ -165,10 +157,10 @@ packages:
dependency: transitive
description:
name: cronet_http
- sha256: "8e77bc6f203e0bc9126e6a9092508a3435dbcb04da3b53ed1a358909385c5e0e"
+ sha256: "9da9860b409d71e4b8259e3dee631176d499dee23e7cd45a3024ebd5181997d8"
url: "https://pub.dev"
source: hosted
- version: "1.8.0"
+ version: "1.9.0"
crypto:
dependency: "direct main"
description:
@@ -197,10 +189,18 @@ packages:
dependency: transitive
description:
name: dart_style
- sha256: "29f7ecc274a86d32920b1d9cfc7502fa87220da41ec60b55f329559d5732e2b2"
+ sha256: "59d53ef8eaed9d288ed9767618e2b31c4fa0383a127db59d5eb2e737a7638a60"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.9"
+ desktop_webview_window:
+ dependency: transitive
+ description:
+ name: desktop_webview_window
+ sha256: b6fdae2cbf9571879b1761c12f27facaf82e22d0bdc74d049907c2a09a432957
url: "https://pub.dev"
source: hosted
- version: "3.1.7"
+ version: "0.3.0"
fake_async:
dependency: transitive
description:
@@ -315,6 +315,22 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
+ flutter_web_auth_2:
+ dependency: transitive
+ description:
+ name: flutter_web_auth_2
+ sha256: "8f9303471dcd96670878c9b7c0c4e14c37595b2add67465f6a868f17a5872dfc"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.0.3"
+ flutter_web_auth_2_platform_interface:
+ dependency: transitive
+ description:
+ name: flutter_web_auth_2_platform_interface
+ sha256: ba0fbba55bffb47242025f96852ad1ffba34bc451568f56ef36e613612baffab
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
@@ -348,10 +364,10 @@ packages:
dependency: transitive
description:
name: hooks
- sha256: e79ed1e8e1929bc6ecb6ec85f0cb519c887aa5b423705ded0d0f2d9226def388
+ sha256: "9a62a50b50b769a737bc0a8ff381f333529df3ab746b2f6b02e83760231455ba"
url: "https://pub.dev"
source: hosted
- version: "1.0.2"
+ version: "2.0.2"
http:
dependency: transitive
description:
@@ -388,10 +404,10 @@ packages:
dependency: "direct main"
description:
name: intl
- sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
+ sha256: "1ca20c894b1717686a2319b8548763d812bc0aabdac580420a44c5178c57a867"
url: "https://pub.dev"
source: hosted
- version: "0.20.2"
+ version: "0.20.3"
io:
dependency: transitive
description:
@@ -404,18 +420,34 @@ packages:
dependency: transitive
description:
name: jni
- sha256: "8706a77e94c76fe9ec9315e18949cc9479cc03af97085ca9c1077b61323ea12d"
+ sha256: f038e58b4dc2c9037f50e233175086337e0b305e356d28211bf55f21c504cbd3
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.3"
+ jni_flutter:
+ dependency: transitive
+ description:
+ name: jni_flutter
+ sha256: "7b717011ea40d04fd47c2731d3d1d36eb99eba3435c2753d62489e8c3c9991d5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.2"
+ jni_util:
+ dependency: transitive
+ description:
+ name: jni_util
+ sha256: "1ba86da04a5f2bf18fde2edb235587e70c5b0fc5bd4ba955f46b00942c3fc35f"
url: "https://pub.dev"
source: hosted
- version: "0.15.2"
+ version: "1.0.0"
json_annotation:
dependency: transitive
description:
name: json_annotation
- sha256: cb09e7dac6210041fad964ed7fbee004f14258b4eca4040f72d1234062ace4c8
+ sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80"
url: "https://pub.dev"
source: hosted
- version: "4.11.0"
+ version: "4.12.0"
leak_tracker:
dependency: transitive
description:
@@ -476,10 +508,10 @@ packages:
dependency: "direct main"
description:
name: meta
- sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349"
url: "https://pub.dev"
source: hosted
- version: "1.17.0"
+ version: "1.18.0"
mime:
dependency: transitive
description:
@@ -488,14 +520,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.0"
- native_toolchain_c:
- dependency: transitive
- description:
- name: native_toolchain_c
- sha256: "6ba77bb18063eebe9de401f5e6437e95e1438af0a87a3a39084fbd37c90df572"
- url: "https://pub.dev"
- source: hosted
- version: "0.17.6"
nested:
dependency: transitive
description:
@@ -508,10 +532,10 @@ packages:
dependency: transitive
description:
name: objective_c
- sha256: "100a1c87616ab6ed41ec263b083c0ef3261ee6cd1dc3b0f35f8ddfa4f996fe52"
+ sha256: b7fb95a6d9a4f009edd63dc5ac69f07420b23a16161c6dd8660290b59c602e8e
url: "https://pub.dev"
source: hosted
- version: "9.3.0"
+ version: "9.5.0"
package_config:
dependency: transitive
description:
@@ -532,18 +556,18 @@ packages:
dependency: "direct main"
description:
name: path_provider
- sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
+ sha256: a7f4874f987173da295a61c181b8ee71dab59b332a486b391babf26a1b884825
url: "https://pub.dev"
source: hosted
- version: "2.1.5"
+ version: "2.1.6"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
- sha256: "149441ca6e4f38193b2e004c0ca6376a3d11f51fa5a77552d8bd4d2b0c0912ba"
+ sha256: "69cbd515a62b94d32a7944f086b2f82b4ac40a1d45bebfc00813a430ab2dabcd"
url: "https://pub.dev"
source: hosted
- version: "2.2.23"
+ version: "2.3.1"
path_provider_foundation:
dependency: transitive
description:
@@ -556,18 +580,18 @@ packages:
dependency: transitive
description:
name: path_provider_linux
- sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
+ sha256: "58c2005f147315b11e9b4a7bc889cd5203e250cba8e3f012dae259b4972b5c16"
url: "https://pub.dev"
source: hosted
- version: "2.2.1"
+ version: "2.2.2"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
- sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
+ sha256: "484838772624c3a4b94f1e44a3e19897fee738f2d5c4ce448443b0417f7c9dda"
url: "https://pub.dev"
source: hosted
- version: "2.1.2"
+ version: "2.1.3"
path_provider_windows:
dependency: transitive
description:
@@ -638,6 +662,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.5.0"
+ record_use:
+ dependency: transitive
+ description:
+ name: record_use
+ sha256: "2551bd8eecfe95d14ae75f6021ad0248be5c27f138c2ec12fcb52b500b3ba1ed"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.6.0"
retry:
dependency: transitive
description:
@@ -666,10 +698,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_android
- sha256: e8d4762b1e2e8578fc4d0fd548cebf24afd24f49719c08974df92834565e2c53
+ sha256: "0634e64bd719f89c012f392938e173521f535d3ecaf66558fa94a056d22b5cc7"
url: "https://pub.dev"
source: hosted
- version: "2.4.23"
+ version: "2.4.27"
shared_preferences_foundation:
dependency: transitive
description:
@@ -735,10 +767,10 @@ packages:
dependency: transitive
description:
name: source_gen
- sha256: "732792cfd197d2161a65bb029606a46e0a18ff30ef9e141a7a82172b05ea8ecd"
+ sha256: a603f1fb984a7391ae5978d1b92bfaaa08b350dca5c825256f925818f7943bf5
url: "https://pub.dev"
source: hosted
- version: "4.2.2"
+ version: "4.2.4"
source_span:
dependency: transitive
description:
@@ -791,10 +823,10 @@ packages:
dependency: transitive
description:
name: test_api
- sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a"
+ sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e"
url: "https://pub.dev"
source: hosted
- version: "0.7.10"
+ version: "0.7.11"
typed_data:
dependency: transitive
description:
@@ -815,10 +847,10 @@ packages:
dependency: transitive
description:
name: url_launcher_android
- sha256: "3bb000251e55d4a209aa0e2e563309dc9bb2befea2295fd0cec1f51760aac572"
+ sha256: b413d49b73867ac08dd2f9890efd3cc11f2a0e577618d50843440a1fb3776c32
url: "https://pub.dev"
source: hosted
- version: "6.3.29"
+ version: "6.3.32"
url_launcher_ios:
dependency: transitive
description:
@@ -855,10 +887,10 @@ packages:
dependency: transitive
description:
name: url_launcher_web
- sha256: d0412fcf4c6b31ecfdb7762359b7206ffba3bbffd396c6d9f9c4616ece476c1f
+ sha256: "85c81589622fbc87c1c683aaea164d3604a7777495a79d91e39ffcdec39ddb34"
url: "https://pub.dev"
source: hosted
- version: "2.4.2"
+ version: "2.4.3"
url_launcher_windows:
dependency: transitive
description:
@@ -879,10 +911,10 @@ packages:
dependency: transitive
description:
name: vm_service
- sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60"
+ sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360"
url: "https://pub.dev"
source: hosted
- version: "15.0.2"
+ version: "15.2.0"
watcher:
dependency: transitive
description:
@@ -923,6 +955,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "5.15.0"
+ window_to_front:
+ dependency: transitive
+ description:
+ name: window_to_front
+ sha256: "14fad8984db4415e2eeb30b04bb77140b180e260d6cb66b26de126a8657a9241"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.0.4"
xdg_directories:
dependency: transitive
description:
@@ -940,5 +980,5 @@ packages:
source: hosted
version: "3.1.3"
sdks:
- dart: ">=3.10.3 <4.0.0"
- flutter: ">=3.38.4"
+ dart: ">=3.12.0 <4.0.0"
+ flutter: ">=3.44.0"
--
2.50.1 (Apple Git-155)
next prev parent reply other threads:[~2026-08-10 12:37 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-10 5:40 [PATCH 0/2] android: register OpenID Connect callback activity for #4281 Azharul Haque
2026-08-10 5:40 ` Azharul Haque [this message]
2026-08-10 5:40 ` [PATCH 2/2] fix #4281: android: match renamed OpenID callback scheme Azharul Haque
2026-08-10 13:59 ` [PATCH 0/2] android: register OpenID Connect callback activity for #4281 Shan Shaji
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260810054037.17184-2-haque@azharul.com \
--to=haque@azharul.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox