/* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ import React, { ComponentType, ComponentPropsWithRef, FunctionComponent } from "react"; import { Auth, appendToCognitoUserAgent } from "@aws-amplify/auth"; import { AmplifyContainer, AmplifyAuthenticator, AmplifySignIn, AmplifyFederatedButtons, AmplifyButton, } from "@aws-amplify/ui-react"; import { onAuthUIStateChange, AuthState } from "@aws-amplify/ui-components"; import { Logger } from "@aws-amplify/core"; import { samlConfig } from "../amplify-config"; import EnvConfig from "../services/EnvConfig"; import { useTranslation } from "react-i18next"; const logger = new Logger("withAuthenticator"); export function withSAMLAuthenticator( Component: ComponentType, authenticatorProps?: ComponentPropsWithRef, ) { const AppWithSAMLAuthenticator: FunctionComponent = (props) => { const [signedIn, setSignedIn] = React.useState(false); const { t } = useTranslation(); React.useEffect(() => { appendToCognitoUserAgent("withAuthenticator"); // checkUser returns an "unsubscribe" function to stop side-effects return checkUser(); }, []); function checkUser() { setUser(); return onAuthUIStateChange((authState) => { if (authState === AuthState.SignedIn) { setSignedIn(true); } else if (authState === AuthState.SignedOut) { setSignedIn(false); } }); } async function setUser() { try { const user = await Auth.currentAuthenticatedUser(); if (user) setSignedIn(true); } catch (err) { logger.debug(err); } } function signInWithSAML(event: any) { event.preventDefault(); if (EnvConfig.samlProvider) { Auth.federatedSignIn({ customProvider: EnvConfig.samlProvider, }); } else { Auth.federatedSignIn(); } } if (!signedIn) { return ( {EnvConfig.samlProvider ? (
signInWithSAML(event)} > {EnvConfig.enterpriseLoginLabel ? EnvConfig.enterpriseLoginLabel : t("EnterpriseSignIn")}
) : ( )}
); } return ; }; return AppWithSAMLAuthenticator; } export default withSAMLAuthenticator;