1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-08-09 13:47:13 +02:00

feat: GitHub auth

This commit is contained in:
Nuno Góis 2025-07-24 10:34:44 +01:00
parent 45e5b217aa
commit fc0eb06bf6
No known key found for this signature in database
GPG Key ID: 71ECC689F1091765
4 changed files with 41 additions and 124 deletions

View File

@ -1,100 +0,0 @@
<svg
version="1.1"
xmlns="http://www.w3.org/2000/svg"
width="46px"
height="46px"
viewBox="0 0 46 46"
>
<defs>
<filter
x="-50%"
y="-50%"
width="200%"
height="200%"
filterUnits="objectBoundingBox"
id="filter-1"
>
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1" />
<feGaussianBlur
stdDeviation="0.5"
in="shadowOffsetOuter1"
result="shadowBlurOuter1"
/>
<feColorMatrix
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.168 0"
in="shadowBlurOuter1"
type="matrix"
result="shadowMatrixOuter1"
/>
<feOffset dx="0" dy="0" in="SourceAlpha" result="shadowOffsetOuter2" />
<feGaussianBlur
stdDeviation="0.5"
in="shadowOffsetOuter2"
result="shadowBlurOuter2"
/>
<feColorMatrix
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.084 0"
in="shadowBlurOuter2"
type="matrix"
result="shadowMatrixOuter2"
/>
<feMerge>
<feMergeNode in="shadowMatrixOuter1" />
<feMergeNode in="shadowMatrixOuter2" />
<feMergeNode in="SourceGraphic" />
</feMerge>
</filter>
<rect id="path-2" x="0" y="0" width="40" height="40" rx="2" />
</defs>
<g
id="Google-Button"
stroke="none"
strokeWidth="1"
fill="none"
fillRule="evenodd"
>
<g id="9-PATCH" transform="translate(-608.000000, -160.000000)" />
<g
id="btn_google_light_normal"
transform="translate(-1.000000, -1.000000)"
>
<g
id="button"
transform="translate(4.000000, 4.000000)"
filter="url(#filter-1)"
>
<g id="button-bg">
<use fill="#FFFFFF" fillRule="evenodd" />
<use fill="none" />
<use fill="none" />
<use fill="none" />
</g>
</g>
<g id="logo_googleg_48dp" transform="translate(15.000000, 15.000000)">
<path
d="M17.64,9.20454545 C17.64,8.56636364 17.5827273,7.95272727 17.4763636,7.36363636 L9,7.36363636 L9,10.845 L13.8436364,10.845 C13.635,11.97 13.0009091,12.9231818 12.0477273,13.5613636 L12.0477273,15.8195455 L14.9563636,15.8195455 C16.6581818,14.2527273 17.64,11.9454545 17.64,9.20454545 L17.64,9.20454545 Z"
id="Shape"
fill="#000"
/>
<path
d="M9,18 C11.43,18 13.4672727,17.1940909 14.9563636,15.8195455 L12.0477273,13.5613636 C11.2418182,14.1013636 10.2109091,14.4204545 9,14.4204545 C6.65590909,14.4204545 4.67181818,12.8372727 3.96409091,10.71 L0.957272727,10.71 L0.957272727,13.0418182 C2.43818182,15.9831818 5.48181818,18 9,18 L9,18 Z"
id="Shape"
fill="#000"
/>
<path
d="M3.96409091,10.71 C3.78409091,10.17 3.68181818,9.59318182 3.68181818,9 C3.68181818,8.40681818 3.78409091,7.83 3.96409091,7.29 L3.96409091,4.95818182 L0.957272727,4.95818182 C0.347727273,6.17318182 0,7.54772727 0,9 C0,10.4522727 0.347727273,11.8268182 0.957272727,13.0418182 L3.96409091,10.71 L3.96409091,10.71 Z"
id="Shape"
fill="#000"
/>
<path
d="M9,3.57954545 C10.3213636,3.57954545 11.5077273,4.03363636 12.4404545,4.92545455 L15.0218182,2.34409091 C13.4631818,0.891818182 11.4259091,0 9,0 C5.48181818,0 2.43818182,2.01681818 0.957272727,4.95818182 L3.96409091,7.29 C4.67181818,5.16272727 6.65590909,3.57954545 9,3.57954545 L9,3.57954545 Z"
id="Shape"
fill="#000"
/>
<path d="M0,0 L18,0 L18,18 L0,18 L0,0 Z" id="Shape" />
</g>
<g id="handles_square" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -44,6 +44,7 @@ const AUTH_TYPE_LABEL: { [key: string]: string } = {
oidc: 'OIDC',
saml: 'SAML',
google: 'Google',
github: 'GitHub',
};
export const LoginHistoryTable = () => {

View File

@ -1,12 +1,12 @@
import { Button } from '@mui/material';
import classnames from 'classnames';
import { useThemeStyles } from 'themes/themeStyles';
import { ReactComponent as GoogleSvg } from 'assets/icons/google.svg';
import LockRounded from '@mui/icons-material/LockRounded';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
import type { IAuthOptions } from 'hooks/api/getters/useAuth/useAuthEndpoint';
import { SSO_LOGIN_BUTTON } from 'utils/testIds';
import useQueryParams from 'hooks/useQueryParams';
import GoogleIcon from '@mui/icons-material/Google';
import GitHubIcon from '@mui/icons-material/GitHub';
interface IAuthOptionProps {
options?: IAuthOptions[];
@ -19,6 +19,37 @@ function addOrOverwriteRedirect(path: string, redirectValue: string): string {
return `${basePath}?${params.toString()}`;
}
const renderStartIcon = ({ type }: IAuthOptions) => {
if (type === 'google') {
return (
<GoogleIcon
style={{
height: '20px',
width: '20px',
}}
/>
);
} else if (type === 'github') {
return (
<GitHubIcon
style={{
height: '20px',
width: '20px',
}}
/>
);
}
return (
<LockRounded
style={{
height: '20px',
width: '20px',
}}
/>
);
};
const AuthOptions = ({ options }: IAuthOptionProps) => {
const { classes: themeStyles } = useThemeStyles();
const query = useQueryParams();
@ -48,27 +79,7 @@ const AuthOptions = ({ options }: IAuthOptionProps) => {
style={{
height: '40px',
}}
startIcon={
<ConditionallyRender
condition={o.type === 'google'}
show={
<GoogleSvg
style={{
height: '35px',
width: '35px',
}}
/>
}
elseShow={
<LockRounded
style={{
height: '25px',
width: '25px',
}}
/>
}
/>
}
startIcon={renderStartIcon(o)}
>
{o.message}
</Button>

View File

@ -64,7 +64,8 @@ export type IFlagKey =
| 'eventGrouping'
| 'paygInstanceStatsEvents'
| 'timestampsInChangeRequestTimeline'
| 'lifecycleGraphs';
| 'lifecycleGraphs'
| 'githubAuth';
export type IFlags = Partial<{ [key in IFlagKey]: boolean | Variant }>;
@ -300,6 +301,10 @@ const flags: IFlags = {
process.env.UNLEASH_EXPERIMENTAL_LIFECYCLE_GRAPHS,
false,
),
githubAuth: parseEnvVarBoolean(
process.env.UNLEASH_EXPERIMENTAL_GITHUB_AUTH,
false,
),
};
export const defaultExperimentalOptions: IExperimentalOptions = {