Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 1x | import { onMounted, ref } from "vue";
import AuthorizationEventDetails from "@/types/AuthorizationEventDetails";
/**
* Event from the Login-Webcomponent which notifies when the
* oauth2-token changes.
*/
const AUTH_REFRESH_EVENT_NAME = "authorization-event";
/**
* Plugin to use for webcomponents which rely on the `dbs-login`-Webcomponent
* This Plugin registers necessary event-handlers to get notified of authentication-changes
* and checks predefined cookies of the active domain for access tokens to use.
*
* It exposes two properties to be used by the parent component:
*
* @param loginCallback Callback-Method which is called after the user is successfully signed in.
* @param logoutCallback Callback-Method which is called after the user is logged out.
*
* @return loading By default true, until authentication fails. Should be set to false after successfull loading of data.
* @return loggedIn default false, turns true after a successfull authentification.
*/
export function useDBSLoginWebcomponentPlugin(
loginCallback: (accessToken: AuthorizationEventDetails) => void = () => {},
logoutCallback: () => void = () => {}
) {
const loading = ref(true);
const loggedIn = ref(false);
let prevAuthDetails: AuthorizationEventDetails | undefined = undefined;
onMounted(() => {
document.addEventListener(AUTH_REFRESH_EVENT_NAME, (ev: any) => {
loading.value = true;
console.debug(
"Event-Handler " + AUTH_REFRESH_EVENT_NAME + " triggered.",
ev
);
authChanged(ev.detail);
});
});
function authChanged(newAuthDetails: AuthorizationEventDetails | undefined) {
loading.value = false;
if (newAuthDetails) {
loggedIn.value = true;
if (JSON.stringify(newAuthDetails) !== JSON.stringify(prevAuthDetails)) {
console.debug("#authChanged calling loginCallback");
loginCallback(newAuthDetails);
prevAuthDetails = newAuthDetails;
} else {
// details unchanged, do nothing.
}
} else {
loggedIn.value = false;
console.debug("#authChanged calling logoutCallback");
logoutCallback();
}
}
// expose managed state as return value
return { loading, loggedIn };
}
|