- {#if !$token}
-
- Who this?
- Log into your butler account, create one or do whatever you please.
-
- {:else if !$user?.id}
+ {#if !$token || !$user?.id}
Loading...
{:else}
My Preferences
diff --git a/apps/web/src/routes/(app)/profile/finalize/+page.svelte b/apps/web/src/routes/(app)/profile/finalize/+page.svelte
new file mode 100644
index 0000000000..03ac9eefa9
--- /dev/null
+++ b/apps/web/src/routes/(app)/profile/finalize/+page.svelte
@@ -0,0 +1,215 @@
+
+
+
+ GitButler | Login
+
+
+
+
+
diff --git a/apps/web/src/routes/(app)/signup/+page.svelte b/apps/web/src/routes/(app)/signup/+page.svelte
new file mode 100644
index 0000000000..d7ae5eb3ed
--- /dev/null
+++ b/apps/web/src/routes/(app)/signup/+page.svelte
@@ -0,0 +1,195 @@
+
+
+
+ GitButler | Sign Up
+
+
+
+
+
+
+
+
+
diff --git a/apps/web/src/routes/(app)/signup/resend-confirmation/+page.svelte b/apps/web/src/routes/(app)/signup/resend-confirmation/+page.svelte
new file mode 100644
index 0000000000..bed40afabb
--- /dev/null
+++ b/apps/web/src/routes/(app)/signup/resend-confirmation/+page.svelte
@@ -0,0 +1,175 @@
+
+
+
+ GitButler | Sign Up
+
+
+{#if banner}
+
+ {banner}
+
+{/if}
+
+
+
+ Resend Confirmation Email
+ {#if email}
+
+ We will send a confirmation email to {email}.
+
+ {:else}
+ Please provide your email address to resend the confirmation email.
+
+
+
+
+
+ {/if}
+
+
+
+ {#if error}
+
+
+ {error}
+
+
+ {/if}
+
+ {#if notice}
+
+
+ {notice}
+
+
+ {/if}
+
+
+
+
diff --git a/apps/web/src/routes/(home)/components/Header.svelte b/apps/web/src/routes/(home)/components/Header.svelte
index eaf8c07efc..5603bfae82 100644
--- a/apps/web/src/routes/(home)/components/Header.svelte
+++ b/apps/web/src/routes/(home)/components/Header.svelte
@@ -4,8 +4,8 @@
import * as jsonLinks from '$home/data/links.json';
import { AUTH_SERVICE } from '$lib/auth/authService.svelte';
import { inject } from '@gitbutler/shared/context';
+ import { WEB_ROUTES_SERVICE } from '@gitbutler/shared/routing/webRoutes.svelte';
import { fly } from 'svelte/transition';
- import { env } from '$env/dynamic/public';
let isMobileMenuOpen = $state(false);
@@ -14,6 +14,7 @@
}
const authService = inject(AUTH_SERVICE);
+ const routes = inject(WEB_ROUTES_SERVICE);
let token = $derived(authService.tokenReadable);
@@ -115,11 +116,7 @@
{#if $token}
{:else}
-
+
{/if}
@@ -171,11 +168,7 @@
{#if $token}
{:else}
-
+
{/if}
diff --git a/apps/web/src/routes/+layout.svelte b/apps/web/src/routes/+layout.svelte
index 9c38201fe9..73713963b9 100644
--- a/apps/web/src/routes/+layout.svelte
+++ b/apps/web/src/routes/+layout.svelte
@@ -15,7 +15,6 @@
import { provide } from '@gitbutler/shared/context';
import { WebRoutesService, WEB_ROUTES_SERVICE } from '@gitbutler/shared/routing/webRoutes.svelte';
import { type Snippet } from 'svelte';
- import { get } from 'svelte/store';
import '$lib/styles/global.css';
interface Props {
@@ -30,17 +29,17 @@
const authService = new AuthService();
provide(AUTH_SERVICE, authService);
- let token = $state
();
+ const persistedToken = authService.token;
$effect(() => {
- token = get(authService.tokenReadable) || page.url.searchParams.get('gb_access_token');
- if (token) {
- authService.setToken(token);
-
- if (page.url.searchParams.has('gb_access_token')) {
- page.url.searchParams.delete('gb_access_token');
- goto(`?${page.url.searchParams.toString()}`);
+ if (page.url.searchParams.has('gb_access_token')) {
+ const token = page.url.searchParams.get('gb_access_token');
+ if (token && token !== persistedToken.current) {
+ authService.setToken(token);
}
+
+ page.url.searchParams.delete('gb_access_token');
+ goto(`?${page.url.searchParams.toString()}`);
}
});
@@ -49,7 +48,7 @@
window.location.href = jsonLinks.legal.privacyPolicy.url;
}
- if (!token && page.route.id === '/(app)/home') {
+ if (!persistedToken.current && page.route.id === '/(app)/home') {
goto('/');
}
});
@@ -69,7 +68,7 @@
{/if}
-{#if (page.route.id === '/(app)' && !token) || page.route.id === '/(app)/home'}
+{#if (page.route.id === '/(app)' && !persistedToken.current) || page.route.id === '/(app)/home'}