From 095ccf114d9f331c450443eb4bf2952154bf0992 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?O=C4=9Fuzhan=20Koral?=
<45078678+oguzhankoral@users.noreply.github.com>
Date: Mon, 27 Oct 2025 15:31:56 +0300
Subject: [PATCH] feat: auth in dui (#71)
* feat: auth in dui
* feat: enable auth with registered app
* feat: handle exceptions
---
components/accounts/SignInFlow.vue | 21 +++-
components/home/NoAccountsPanel.vue | 8 +-
lib/authn/useAuthManager.ts | 22 +++++
lib/bindings/definitions/IAccountBinding.ts | 6 ++
pages/authn/callback.vue | 101 ++++++++++++++++++++
5 files changed, 156 insertions(+), 2 deletions(-)
create mode 100644 lib/authn/useAuthManager.ts
create mode 100644 pages/authn/callback.vue
diff --git a/components/accounts/SignInFlow.vue b/components/accounts/SignInFlow.vue
index f400420..3c158da 100644
--- a/components/accounts/SignInFlow.vue
+++ b/components/accounts/SignInFlow.vue
@@ -13,7 +13,8 @@
@clear="showCustomServerInput = false"
/>
- Sign In
+ Log in
+ Sign in
+ ($accountBinding as unknown as BaseBridge).availableMethodNames.includes(name)
+)
+
const accountCheckerIntervalFn = useIntervalFn(
async () => {
const previousAccountCount = accountStore.accounts.length
@@ -79,6 +87,17 @@ const accountCheckerIntervalFn = useIntervalFn(
{ immediate: false }
)
+const { generateChallenge } = useAuthManager()
+
+const logIn = () => {
+ const challenge = generateChallenge()
+ const serverUrl = customServerUrl.value
+ ? new URL(customServerUrl.value).origin
+ : 'https://app.speckle.systems'
+ const authUrl = `${serverUrl}/authn/verify/sdui/${challenge}`
+ window.location.href = authUrl
+}
+
const startAccountAddFlow = () => {
isAddingAccount.value = true
accountCheckerIntervalFn.resume()
diff --git a/components/home/NoAccountsPanel.vue b/components/home/NoAccountsPanel.vue
index 89ce3d1..9e70abf 100644
--- a/components/home/NoAccountsPanel.vue
+++ b/components/home/NoAccountsPanel.vue
@@ -5,7 +5,7 @@
>
Welcome to Speckle
-