re-implemented login via OIDC

This commit is contained in:
2025-07-03 15:26:42 +02:00
parent b9bff9733d
commit 41c3ffa351
11 changed files with 250 additions and 45 deletions

View File

@@ -3,6 +3,7 @@
import { loadTranslation } from './translations.svelte.js';
import { user } from './user.svelte.js';
import { Router, Route } from 'svelte-tiny-router';
import Callback from "./routes/user/OidcCallback.svelte";
import EditService from "./routes/user/EditService.svelte";
import Footer from "./Components/Footer.svelte";
import Login from "./Components/Login.svelte";
@@ -26,9 +27,9 @@
</script>
{#if translations_ready }
<Router>
{#if user.name }
<!-- https://github.com/notnotsamuel/svelte-tiny-router -->
<Router>
<Menu />
<Route path="/user" component={User} />
<Route path="/user/:user_id/edit" component={UserEdit} />
@@ -36,10 +37,11 @@
<Route>
<p>Page not found</p>
</Route>
</Router>
{:else}
<Login />
<Route path="/oidc_callback" component={Callback} />
{/if}
</Router>
<Footer />
{:else}
<p>Loading translations...</p>

View File

@@ -33,7 +33,7 @@
<tbody>
{#each connections as connection,i}
<tr>
<td>{connection.service}</td>
<td>{connection.service_id}</td>
<td>{connection.foreign_id}</td>
<td>
<button>{t('user.unlink')}</button>

View File

@@ -0,0 +1,33 @@
<script>
import { onMount } from 'svelte';
import { t } from '../../translations.svelte.js';
import { useTinyRouter } from 'svelte-tiny-router';
import { checkUser } from '../../user.svelte.js';
const router = useTinyRouter();
let message = $state(t('user.processing_code'));
onMount(async () => {
let params = new URLSearchParams(location.search);
if (params.get('code')){
const url = `${location.protocol}//${location.host.replace('5173','8080')}/api/user/oidc/token`;
const resp = await fetch(url,{
method : 'POST',
body: JSON.stringify(Object.fromEntries(params)),
credentials: 'include'
});
if (resp.ok){
let json = await resp.json();
const redirect = json.redirect ? json.redirect : '/user';
checkUser();
router.navigate(redirect);
} else {
message = await resp.text();
if (!message) message = t(resp);
}
}
});
</script>
{message}