From cef133031e501f8f73c66a379de38b1041287743 Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Tue, 14 Jun 2022 14:29:47 -0500 Subject: Add base auth & ucan request flow (web only) --- src/api/auth.ts | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/api/auth.ts (limited to 'src/api/auth.ts') diff --git a/src/api/auth.ts b/src/api/auth.ts new file mode 100644 index 000000000..2da8f2cc7 --- /dev/null +++ b/src/api/auth.ts @@ -0,0 +1,48 @@ +import * as auth from '@adxp/auth' +import {isWeb} from '../platform/detection' +import * as env from '../env' + +const SCOPE = auth.writeCap( + 'did:key:z6MkfRiFMLzCxxnw6VMrHK8pPFt4QAHS3jX3XM87y9rta6kP', + 'did:example:microblog', +) + +export async function isAuthed(authStore: auth.BrowserStore) { + return await authStore.hasUcan(SCOPE) +} + +export async function logout(authStore: auth.BrowserStore) { + await authStore.reset() +} + +export async function parseUrlForUcan() { + // @ts-ignore window is defined -prf + const fragment = window.location.hash + if (fragment.length < 1) { + return undefined + } + try { + const ucan = await auth.parseLobbyResponseHashFragment(fragment) + // @ts-ignore window is defined -prf + window.location.hash = '' + return ucan + } catch (err) { + return undefined + } +} + +export async function requestAppUcan(authStore: auth.BrowserStore) { + const did = await authStore.getDid() + if (isWeb) { + // @ts-ignore window is defined -prf + const redirectTo = window.location.origin + const fragment = auth.requestAppUcanHashFragment(did, SCOPE, redirectTo) + // @ts-ignore window is defined -prf + window.location.href = `${env.AUTH_LOBBY}#${fragment}` + return false + } else { + // TODO + console.log('TODO') + } + return false +} -- cgit 1.4.1