in web/src/hooks/authenticator.ts [23:85]
function useAuthenticator(): Authenticator {
const [user, setUser] = useRecoilState(loggedInUserState);
const { showErrorNotification } = useNotifications();
useEffect(() => {
Hub.listen('auth', ({ payload: { event, data } }) => {
switch (event) {
case 'signIn':
case 'cognitoHostedUI':
getUser().then(userData => {
const u = userData ? userData.userEmail as UserType : undefined;
const lu : LoggedInUserState = { user: u };
setUser(lu);
});
break;
case 'signOut':
setUser(undefined);
break;
case 'signIn_failure':
case 'cognitoHostedUI_failure':
showErrorNotification({
header: i18n.signInFailureTitle,
content: `${i18n.signInFailureText} ${data}`
});
break;
}
});
getUser().then(userData => {
const u = userData ? userData.userEmail as UserType : undefined;
const lu : LoggedInUserState = { user: u };
setUser(lu);
});
}, []);
return {
user,
initiateAuth: () => inititateAuth(),
initiateSignOut: () => initiateSignOut(),
};
function getUser() {
return Auth.currentSession()
.then(data => {
const idToken = data.getIdToken();
return {
userEmail: idToken.payload.email
};
})
.catch((err: Error) => showErrorNotification({
header: i18n.signInFailureTitle,
content: `${i18n.signInFailureText} ${err?.message}`
}));
}
function inititateAuth() {
return Auth.federatedSignIn();
}
function initiateSignOut() {
return Auth.signOut();
}
}