Perform OpenID authentication

This commit is contained in:
2024-05-02 22:14:20 +02:00
parent 46648db093
commit b6e15d2cbb
3 changed files with 82 additions and 1 deletions

View File

@ -0,0 +1,46 @@
import { AuthApi } from "../api/AuthApi";
import { AsyncWidget } from "../widgets/AsyncWidget";
export function AuthRouteWidget(): React.ReactElement {
const params = new URL(document.location.toString()).searchParams;
const code = params.get("code");
const state = params.get("state");
// Initiate OpenID login
if (!code || !state) return <InitOpenIDAuth />;
// Finish OpenID login
return <FinishOpenIDAuth code={code} state={state} />;
}
function InitOpenIDAuth() {
const load = async () => {
const res = await AuthApi.StartOpenIDLogin();
window.location.href = res.url;
};
return (
<AsyncWidget
loadingMessage="Preparing OpenID authentication"
errMsg="Failed to initiate OpenID authentication!"
load={load}
loadKey={1}
build={() => <>ready for auth</>}
/>
);
}
function FinishOpenIDAuth(p: { code: string; state: string }) {
const load = async () => {
await AuthApi.FinishOpenIDLogin(p.code, p.state);
};
return (
<AsyncWidget
loadingMessage="Finishing authentication..."
errMsg="Failed to finish OpenID authentication!"
loadKey={1}
load={load}
build={() => <>Auth successfully finished. App should restart now.</>}
/>
);
}