* refactor(searchStore): reformat filterMap function parameters (#3166) - Reformat the parameters of the filterMap function for better readability. - Comment out the fetchSessions call in clearSearch method to avoid unnecessary session fetch. * Increment frontend chart version (#3167) Co-authored-by: GitHub Action <action@github.com> * refactor(chalice): cleaned code fix(chalice): fixed session-search-pg sortKey issue fix(chalice): fixed CH-query-formatter to handle special chars fix(chalice): fixed /ids response * feat(auth): implement withCaptcha HOC for consistent reCAPTCHA This commit refactors the reCAPTCHA implementation across the application by introducing a Higher Order Component (withCaptcha) that encapsulates captcha verification logic. The changes: - Create a reusable withCaptcha HOC in withRecaptcha.tsx - Refactor Login, ResetPasswordRequest, and CreatePassword components - Extract SSOLogin into a separate component - Improve error handling and user feedback - Standardize loading and verification states across forms - Make captcha implementation more maintainable and consistent --------- Co-authored-by: Mehdi Osman <estradino@users.noreply.github.com> Co-authored-by: GitHub Action <action@github.com> Co-authored-by: Taha Yassine Kraiem <tahayk2@gmail.com>
75 lines
2 KiB
TypeScript
75 lines
2 KiB
TypeScript
import React from 'react';
|
|
import cn from 'classnames';
|
|
import { Button, Tooltip } from 'antd';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { ENTERPRISE_REQUEIRED } from 'App/constants';
|
|
import stl from './login.module.css';
|
|
|
|
interface SSOLoginProps {
|
|
authDetails: any;
|
|
enforceSSO?: boolean;
|
|
}
|
|
|
|
const SSOLogin = ({ authDetails, enforceSSO = false }: SSOLoginProps) => {
|
|
const { t } = useTranslation();
|
|
|
|
const getSSOLink = () =>
|
|
window !== window.top
|
|
? `${window.location.origin}/api/sso/saml2?iFrame=true`
|
|
: `${window.location.origin}/api/sso/saml2`;
|
|
|
|
const ssoLink = getSSOLink();
|
|
const ssoButtonText = `${t('Login with SSO')} ${authDetails.ssoProvider ? `(${authDetails.ssoProvider})` : ''
|
|
}`;
|
|
|
|
if (enforceSSO) {
|
|
return (
|
|
<div className={cn('flex items-center w-96 justify-center my-8')}>
|
|
<a href={ssoLink} rel="noopener noreferrer">
|
|
<Button type="primary">{ssoButtonText}</Button>
|
|
</a>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<div className={cn(stl.sso, 'py-2 flex flex-col items-center')}>
|
|
{authDetails.sso ? (
|
|
<a href={ssoLink} rel="noopener noreferrer">
|
|
<Button type="text" htmlType="submit">
|
|
{ssoButtonText}
|
|
</Button>
|
|
</a>
|
|
) : (
|
|
<Tooltip
|
|
title={
|
|
<div className="text-center">
|
|
{authDetails.edition === 'ee' ? (
|
|
<span>
|
|
{t('SSO has not been configured.')}
|
|
<br />
|
|
{t('Please reach out to your admin.')}
|
|
</span>
|
|
) : (
|
|
ENTERPRISE_REQUEIRED(t)
|
|
)}
|
|
</div>
|
|
}
|
|
placement="top"
|
|
>
|
|
<span className="cursor-not-allowed">
|
|
<Button
|
|
type="text"
|
|
htmlType="submit"
|
|
disabled={true}
|
|
>
|
|
{ssoButtonText}
|
|
</Button>
|
|
</span>
|
|
</Tooltip>
|
|
)}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default SSOLogin;
|