Merge branch 'release/0.0.3'
This commit is contained in:
@@ -7,4 +7,5 @@ REACT_APP_MAGNA_GROUP_ID=68273225-9da4-4fa7-aea5-38e16ec471fe
|
||||
REACT_APP_OTA_SERVICE_URL=https://gw.cec-euprd.fiskerinc.com/ota_update
|
||||
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
|
||||
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
|
||||
REACT_APP_STATIC_DASHBOARDS_URL=https://assets.fiskerdps.com/dashboards
|
||||
REACT_APP_SUPERSET_URL=https://superset.cec-euprd.fiskerinc.com
|
||||
|
||||
@@ -7,4 +7,5 @@ REACT_APP_MAGNA_GROUP_ID=68273225-9da4-4fa7-aea5-38e16ec471fe
|
||||
REACT_APP_OTA_SERVICE_URL=https://gw.cec-prd.fiskerinc.com/ota_update
|
||||
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
|
||||
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
|
||||
REACT_APP_STATIC_DASHBOARDS_URL=https://assets.fiskerdps.com/dashboards
|
||||
REACT_APP_SUPERSET_URL=https://superset.cec-prd.fiskerinc.com
|
||||
|
||||
5
.env.dev
5
.env.dev
@@ -2,9 +2,10 @@ REACT_APP_AUTH_CALLBACK_URL=https://dev-ota-admin.cloud.fiskerinc.com
|
||||
REACT_APP_AUTH_SERVICE_URL=https://dev-gw.cloud.fiskerinc.com/compute_auth
|
||||
REACT_APP_CERT_SERVICE_URL=https://dev-gw.cloud.fiskerinc.com/certificate
|
||||
REACT_APP_ENV=dev
|
||||
REACT_APP_MAGNA_PROVIDER=Fisker-QA
|
||||
REACT_APP_MAGNA_GROUP_ID=efcc3025-e2d8-4212-8227-805c7be39d2c
|
||||
REACT_APP_MAGNA_PROVIDER=Magna
|
||||
REACT_APP_MAGNA_GROUP_ID=68273225-9da4-4fa7-aea5-38e16ec471fe
|
||||
REACT_APP_OTA_SERVICE_URL=https://dev-gw.cloud.fiskerinc.com/ota_update
|
||||
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
|
||||
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
|
||||
REACT_APP_STATIC_DASHBOARDS_URL=https://assets.fiskerdps.com/dashboards
|
||||
REACT_APP_SUPERSET_URL=https://dev-superset-new.cloud.fiskerinc.com
|
||||
|
||||
@@ -2,9 +2,11 @@ REACT_APP_AUTH_CALLBACK_URL=http://localhost:3000
|
||||
REACT_APP_AUTH_SERVICE_URL=http://localhost/compute_auth
|
||||
REACT_APP_CERT_SERVICE_URL=http://localhost/certificate
|
||||
REACT_APP_ENV=local
|
||||
REACT_APP_MAGNA_PROVIDER=Fisker-QA
|
||||
REACT_APP_MAGNA_GROUP_ID=efcc3025-e2d8-4212-8227-805c7be39d2c
|
||||
REACT_APP_MAGNA_PROVIDER=Magna
|
||||
REACT_APP_MAGNA_GROUP_ID=68273225-9da4-4fa7-aea5-38e16ec471fe
|
||||
REACT_APP_OTA_SERVICE_URL=http://localhost/ota_update
|
||||
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
|
||||
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
|
||||
REACT_APP_STATIC_DASHBOARDS_URL=https://assets.fiskerdps.com/dashboards
|
||||
REACT_APP_SUPERSET_URL=https://dev-superset-new.cloud.fiskerinc.com
|
||||
|
||||
|
||||
1
.env.prd
1
.env.prd
@@ -7,4 +7,5 @@ REACT_APP_MAGNA_GROUP_ID=68273225-9da4-4fa7-aea5-38e16ec471fe
|
||||
REACT_APP_OTA_SERVICE_URL=https://gw.cloud.fiskerinc.com/ota_update
|
||||
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
|
||||
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
|
||||
REACT_APP_STATIC_DASHBOARDS_URL=https://assets.fiskerdps.com/dashboards
|
||||
REACT_APP_SUPERSET_URL=https://superset.cloud.fiskerinc.com
|
||||
|
||||
1
.env.stg
1
.env.stg
@@ -7,4 +7,5 @@ REACT_APP_MAGNA_GROUP_ID=68273225-9da4-4fa7-aea5-38e16ec471fe
|
||||
REACT_APP_OTA_SERVICE_URL=https://stg-gw.cloud.fiskerinc.com/ota_update
|
||||
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
|
||||
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
|
||||
REACT_APP_STATIC_DASHBOARDS_URL=https://assets.fiskerdps.com/dashboards
|
||||
REACT_APP_SUPERSET_URL=https://stg-superset.cloud.fiskerinc.com
|
||||
|
||||
@@ -2,8 +2,8 @@ REACT_APP_AUTH_CALLBACK_URL=http://localhost:3000
|
||||
REACT_APP_AUTH_SERVICE_URL=http://localhost/compute_auth
|
||||
REACT_APP_CERT_SERVICE_URL=http://localhost/certificate
|
||||
REACT_APP_ENV=local
|
||||
REACT_APP_MAGNA_PROVIDER=Magna
|
||||
REACT_APP_MAGNA_GROUP_ID=68273225-9da4-4fa7-aea5-38e16ec471fe
|
||||
REACT_APP_MAGNA_PROVIDER=DISABLED
|
||||
REACT_APP_MAGNA_GROUP_ID=DISABLED
|
||||
REACT_APP_OTA_SERVICE_URL=http://localhost/ota_update
|
||||
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
|
||||
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
|
||||
|
||||
@@ -126,6 +126,10 @@ describe("App", () => {
|
||||
await check("/tools/security-dll", "span.MuiButton-label", "Sign In");
|
||||
});
|
||||
|
||||
it("Route /dashboards/0 unauthenticated", async () => {
|
||||
await check("/dashboards/0", "span.MuiButton-label", "Sign In");
|
||||
});
|
||||
|
||||
it("Route /page-not-found unauthenticated", async () => {
|
||||
await check("/page-not-found", "h1", "Page Not Found");
|
||||
});
|
||||
@@ -200,4 +204,9 @@ describe("App", () => {
|
||||
setToken(TEST_AUTH_OBJECT_MAGNA);
|
||||
await sleepAndCheck("/tools/security-dll", "h6", "Security.dll Download");
|
||||
});
|
||||
|
||||
it("Route /dashboards/0 authenticated", async () => {
|
||||
setToken(TEST_AUTH_OBJECT_FISKER);
|
||||
await check("/dashboards/0", "h6", "Datascope");
|
||||
});
|
||||
});
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -22,7 +22,7 @@ const getCertTypeLabel = (certtype) => {
|
||||
|
||||
const getCertsTypes = (providers) => {
|
||||
if (providers.length === 0) return [];
|
||||
if (providers[0] === Providers.MAGNA) {
|
||||
if ((providers[0] === Providers.MAGNA) || (providers[0] === Providers.FISKER_QA)) {
|
||||
return CertTypeData.filter((item) => {
|
||||
return (item.label === CertTypes.TBOX || item.label === CertTypes.ICC);
|
||||
})
|
||||
@@ -32,7 +32,7 @@ const getCertsTypes = (providers) => {
|
||||
|
||||
const CreateForm = ({ onCreate, busy }) => {
|
||||
const classes = useStyles();
|
||||
const {providers} = useUserContext();
|
||||
const { providers } = useUserContext();
|
||||
const [commonName, setCommonName] = useState("");
|
||||
const [certType, setCertType] = useState(CertTypes.TBOX);
|
||||
const onVINChange = getVINOnChangeHandler(setCommonName);
|
||||
|
||||
28
src/components/DashboardStatic/index.jsx
Normal file
28
src/components/DashboardStatic/index.jsx
Normal file
@@ -0,0 +1,28 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useParams } from "react-router-dom";
|
||||
|
||||
import { getStaticDashboard } from "../../services/staticDashboards";
|
||||
import { useStatusContext } from "../Contexts/StatusContext";
|
||||
import useStyles from "../useStyles";
|
||||
|
||||
const StaticDashboard = () => {
|
||||
const classes = useStyles();
|
||||
const [dashboard, setDashboard] = useState(null);
|
||||
const { setTitle, setSitePath } = useStatusContext();
|
||||
const { index } = useParams();
|
||||
|
||||
useEffect(() => {
|
||||
const result = getStaticDashboard(parseInt(index));
|
||||
setDashboard(result);
|
||||
setTitle("Datascope");
|
||||
setSitePath([{ label: result.label}]);
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [index]);
|
||||
|
||||
if (!dashboard) return <div>Loading...</div>;
|
||||
if (dashboard.error) return <span className="error">{dashboard.error}</span>;
|
||||
return <iframe className={classes.iframe} src={dashboard.url} title={dashboard.label}/>;
|
||||
|
||||
};
|
||||
|
||||
export default StaticDashboard;
|
||||
@@ -1,19 +1,19 @@
|
||||
import { List } from "@material-ui/core";
|
||||
import AssessmentIcon from "@material-ui/icons/Assessment";
|
||||
import BugReportIcon from "@material-ui/icons/BugReport";
|
||||
import BuildIcon from "@material-ui/icons/Build";
|
||||
import CloudDownloadIcon from "@material-ui/icons/CloudDownload";
|
||||
import CommuteIcon from "@material-ui/icons/Commute";
|
||||
import DirectionsCarIcon from "@material-ui/icons/DirectionsCar";
|
||||
import BugReportIcon from "@material-ui/icons/BugReport";
|
||||
import HomeIcon from "@material-ui/icons/Home";
|
||||
import SettingsInputCompositeIcon from "@material-ui/icons/SettingsInputComposite";
|
||||
import { default as React, useEffect, useState } from "react";
|
||||
|
||||
import { getStaticDashboardSubmenu } from "../../services/staticDashboards";
|
||||
import { hasRole, Permissions } from "../../utils/roles";
|
||||
import { useUserContext } from "../Contexts/UserContext";
|
||||
import SupersetDashboardList from "../SupersetDashboardList/SupersetDashboardList";
|
||||
import { ExpandableSideMenuItem, MenuItem } from "./MenuItem";
|
||||
|
||||
const menuData = [
|
||||
{
|
||||
label: "Home",
|
||||
@@ -49,8 +49,9 @@ const menuData = [
|
||||
label: "Datascope",
|
||||
to: null,
|
||||
icon: <AssessmentIcon />,
|
||||
rolesPerProvider: Permissions.FiskerRead,
|
||||
rolesPerProvider: Permissions.FiskerMagnaRead,
|
||||
component: SupersetDashboardList,
|
||||
submenus: getStaticDashboardSubmenu(Permissions.FiskerMagnaRead),
|
||||
},
|
||||
{
|
||||
label: "Suppliers",
|
||||
|
||||
@@ -188,67 +188,95 @@ exports[`SideMenu Authenticated 1`] = `
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<div
|
||||
aria-disabled="false"
|
||||
class="MuiButtonBase-root MuiListItem-root MuiListItem-gutters MuiListItem-button"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<span>
|
||||
<li>
|
||||
<div
|
||||
class="MuiListItemIcon-root"
|
||||
aria-disabled="false"
|
||||
class="MuiButtonBase-root MuiListItem-root MuiListItem-gutters MuiListItem-button"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class="MuiSvgIcon-root"
|
||||
focusable="false"
|
||||
viewBox="0 0 24 24"
|
||||
<div
|
||||
class="MuiListItemIcon-root"
|
||||
>
|
||||
<path
|
||||
d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<div
|
||||
class="MuiListItemText-root"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiListItemText-primary MuiTypography-body1 MuiTypography-displayBlock"
|
||||
>
|
||||
Datascope
|
||||
</span>
|
||||
</div>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</div>
|
||||
<ul
|
||||
style="margin-left: 50px;"
|
||||
>
|
||||
<li>
|
||||
<a
|
||||
aria-disabled="false"
|
||||
class="MuiButtonBase-root MuiListItem-root MuiListItem-gutters MuiListItem-button"
|
||||
href="/datascope/00000000-0000-0000-0000-000000000000"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<div
|
||||
class="MuiListItemText-root"
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class="MuiSvgIcon-root"
|
||||
focusable="false"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiListItemText-primary MuiTypography-body1 MuiTypography-displayBlock"
|
||||
>
|
||||
test title
|
||||
</span>
|
||||
</div>
|
||||
<path
|
||||
d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<div
|
||||
class="MuiListItemText-root"
|
||||
>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
class="MuiTypography-root MuiListItemText-primary MuiTypography-body1 MuiTypography-displayBlock"
|
||||
>
|
||||
Datascope
|
||||
</span>
|
||||
</div>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</div>
|
||||
<ul
|
||||
style="margin-left: 50px;"
|
||||
>
|
||||
<li>
|
||||
<a
|
||||
aria-disabled="false"
|
||||
class="MuiButtonBase-root MuiListItem-root MuiListItem-gutters MuiListItem-button"
|
||||
href="/datascope/00000000-0000-0000-0000-000000000000"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<div
|
||||
class="MuiListItemText-root"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiListItemText-primary MuiTypography-body1 MuiTypography-displayBlock"
|
||||
>
|
||||
test title
|
||||
</span>
|
||||
</div>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</span>
|
||||
<ul
|
||||
style="margin-left: 50px;"
|
||||
>
|
||||
<li>
|
||||
<a
|
||||
aria-disabled="false"
|
||||
class="MuiButtonBase-root MuiListItem-root MuiListItem-gutters MuiListItem-button"
|
||||
href="/dashboards/0"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<div
|
||||
class="MuiListItemText-root"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiListItemText-primary MuiTypography-body1 MuiTypography-displayBlock"
|
||||
>
|
||||
Vehicle Paths
|
||||
</span>
|
||||
</div>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<li>
|
||||
<a
|
||||
aria-disabled="false"
|
||||
@@ -492,6 +520,95 @@ exports[`SideMenu Magna Authenticated 1`] = `
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
<span>
|
||||
<li>
|
||||
<div
|
||||
aria-disabled="false"
|
||||
class="MuiButtonBase-root MuiListItem-root MuiListItem-gutters MuiListItem-button"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<div
|
||||
class="MuiListItemIcon-root"
|
||||
>
|
||||
<svg
|
||||
aria-hidden="true"
|
||||
class="MuiSvgIcon-root"
|
||||
focusable="false"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<div
|
||||
class="MuiListItemText-root"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiListItemText-primary MuiTypography-body1 MuiTypography-displayBlock"
|
||||
>
|
||||
Datascope
|
||||
</span>
|
||||
</div>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</div>
|
||||
<ul
|
||||
style="margin-left: 50px;"
|
||||
>
|
||||
<li>
|
||||
<a
|
||||
aria-disabled="false"
|
||||
class="MuiButtonBase-root MuiListItem-root MuiListItem-gutters MuiListItem-button"
|
||||
href="/datascope/00000000-0000-0000-0000-000000000000"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<div
|
||||
class="MuiListItemText-root"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiListItemText-primary MuiTypography-body1 MuiTypography-displayBlock"
|
||||
>
|
||||
test title
|
||||
</span>
|
||||
</div>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</span>
|
||||
<ul
|
||||
style="margin-left: 50px;"
|
||||
>
|
||||
<li>
|
||||
<a
|
||||
aria-disabled="false"
|
||||
class="MuiButtonBase-root MuiListItem-root MuiListItem-gutters MuiListItem-button"
|
||||
href="/dashboards/0"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
>
|
||||
<div
|
||||
class="MuiListItemText-root"
|
||||
>
|
||||
<span
|
||||
class="MuiTypography-root MuiListItemText-primary MuiTypography-body1 MuiTypography-displayBlock"
|
||||
>
|
||||
Vehicle Paths
|
||||
</span>
|
||||
</div>
|
||||
<span
|
||||
class="MuiTouchRipple-root"
|
||||
/>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<span>
|
||||
<li>
|
||||
<a
|
||||
|
||||
@@ -31,6 +31,7 @@ import {
|
||||
import { useStatusContext } from "../../Contexts/StatusContext";
|
||||
import { useUserContext } from "../../Contexts/UserContext";
|
||||
import ECUList from "../../Controls/ECUList";
|
||||
import { RoleWrap } from "../../Controls/RoleWrap";
|
||||
import SearchField from "../../Controls/SearchField";
|
||||
import DeleteConfirmation from "../../DeleteConfirmation";
|
||||
import TableHeaderSortable from "../../Table/HeaderSortable";
|
||||
@@ -136,7 +137,7 @@ const MainForm = () => {
|
||||
order: `${orderBy} ${order}`,
|
||||
manifest_type: TYPE_MANIFEST_SOFTWARE,
|
||||
search,
|
||||
active: active,
|
||||
active,
|
||||
},
|
||||
token
|
||||
);
|
||||
@@ -246,15 +247,21 @@ const MainForm = () => {
|
||||
<Grid item md={4} className={classes.textJustifyAlign}></Grid>
|
||||
<Grid item md={4} className={classes.textCenterAlign}>
|
||||
<SearchField classes={classes} onSearch={handleSearch} />
|
||||
<ToggleButtonGroup
|
||||
value={active}
|
||||
exclusive
|
||||
aria-label="Active"
|
||||
onChange={handleActiveChange}
|
||||
<RoleWrap
|
||||
groups={groups}
|
||||
providers={providers}
|
||||
rolesPerProvider={Permissions.FiskerCreate}
|
||||
>
|
||||
<ToggleButton value={true}>Active</ToggleButton>
|
||||
<ToggleButton value={false}>Archived</ToggleButton>
|
||||
</ToggleButtonGroup>
|
||||
<ToggleButtonGroup
|
||||
value={active}
|
||||
exclusive
|
||||
aria-label="Active"
|
||||
onChange={handleActiveChange}
|
||||
>
|
||||
<ToggleButton value={true}>Active</ToggleButton>
|
||||
<ToggleButton value={false}>Archived</ToggleButton>
|
||||
</ToggleButtonGroup>
|
||||
</RoleWrap>
|
||||
</Grid>
|
||||
<Grid item md={4} className={classes.textRightAlign}></Grid>
|
||||
</Grid>
|
||||
|
||||
@@ -41,6 +41,8 @@ const SMSSend = React.lazy(() => import("../SMS/Send"));
|
||||
const SuppliersList = React.lazy(() => import("../Suppliers/List"));
|
||||
const SupplierDetails = React.lazy(() => import("../Suppliers/Details"));
|
||||
const Datascope = React.lazy(() => import("../Dashboard"));
|
||||
const StaticDashboard = React.lazy(() => import("../DashboardStatic"));
|
||||
|
||||
const SiteRoutes = () => {
|
||||
const { token, groups, providers } = useUserContext();
|
||||
return (
|
||||
@@ -54,6 +56,15 @@ const SiteRoutes = () => {
|
||||
type={TYPES.GUEST}
|
||||
token={token}
|
||||
/>
|
||||
<AuthRoute
|
||||
path="/dashboards/:index"
|
||||
render={() => <StaticDashboard />}
|
||||
type={TYPES.PROTECTED}
|
||||
token={token}
|
||||
groups={groups}
|
||||
rolesPerGroup={Permissions.FiskerMagnaRead}
|
||||
providers={providers}
|
||||
/>
|
||||
<AuthRoute
|
||||
path="/filter-add"
|
||||
render={() => <CANFilterCreate />}
|
||||
@@ -291,7 +302,7 @@ const SiteRoutes = () => {
|
||||
type={TYPES.PROTECTED}
|
||||
token={token}
|
||||
groups={groups}
|
||||
rolesPerGroup={Permissions.FiskerRead}
|
||||
rolesPerGroup={Permissions.FiskerMagnaRead}
|
||||
providers={providers}
|
||||
/>
|
||||
<PageNotFound />
|
||||
|
||||
26
src/services/staticDashboards.js
Normal file
26
src/services/staticDashboards.js
Normal file
@@ -0,0 +1,26 @@
|
||||
const STATIC_DASHBOARDS_URL = process.env.REACT_APP_STATIC_DASHBOARDS_URL;
|
||||
|
||||
const INVALID_DASHBOARD = {
|
||||
label: "Invalid Dashboard",
|
||||
error: "Invalid Dashboard"
|
||||
}
|
||||
|
||||
export const StaticDashboardList = [
|
||||
{
|
||||
label: "Vehicle Paths",
|
||||
url: `${STATIC_DASHBOARDS_URL}/paths.html`
|
||||
}
|
||||
];
|
||||
|
||||
export const getStaticDashboard = (index) => {
|
||||
if (index < 0 || index >= StaticDashboardList.length) return INVALID_DASHBOARD;
|
||||
return StaticDashboardList[index];
|
||||
};
|
||||
|
||||
export const getStaticDashboardSubmenu = (role) => {
|
||||
return StaticDashboardList.map((item, index) => ({
|
||||
label: item.label,
|
||||
to: `/dashboards/${index}`,
|
||||
rolesPerProvider: role,
|
||||
}));
|
||||
}
|
||||
@@ -6,11 +6,13 @@ export const Roles = {
|
||||
DELETE: "8f78dce7-f5f9-4033-a10c-c9c7408bfcfe",
|
||||
CERTIFICATES: "746f34b0-9ba0-4b5d-8d84-0256a9c8e390",
|
||||
APPROVESUPPLIERS: "a6c9805e-80b2-42b2-bfbb-9df52e5504d8",
|
||||
MANUFACTURE: "3412e11a-a2d1-4355-be3e-ef9aa5065b69",
|
||||
MAGNAGROUP: process.env.REACT_APP_MAGNA_GROUP_ID,
|
||||
};
|
||||
|
||||
export const Providers = {
|
||||
FISKER: "Fisker",
|
||||
FISKER_QA: "Fisker-QA",
|
||||
MAGNA: process.env.REACT_APP_MAGNA_PROVIDER,
|
||||
};
|
||||
|
||||
@@ -54,26 +56,42 @@ export const hasRole = (userGroups, rolesPerProvider, userProviders) => {
|
||||
return false;
|
||||
};
|
||||
|
||||
|
||||
export const Permissions = {
|
||||
FiskerRead: { [Providers.FISKER]: [Roles.CREATE, Roles.READ] },
|
||||
FiskerCreate: { [Providers.FISKER]: [Roles.CREATE] },
|
||||
FiskerDelete: { [Providers.FISKER]: [Roles.DELETE] },
|
||||
FiskerSupplierAdmin: { [Providers.FISKER]: [Roles.APPROVESUPPLIERS] },
|
||||
FiskerRead: {
|
||||
[Providers.FISKER]: [Roles.CREATE, Roles.READ],
|
||||
},
|
||||
FiskerCreate: {
|
||||
[Providers.FISKER]: [Roles.CREATE],
|
||||
},
|
||||
FiskerDelete: {
|
||||
[Providers.FISKER]: [Roles.DELETE],
|
||||
},
|
||||
FiskerSupplierAdmin: {
|
||||
[Providers.FISKER]: [Roles.APPROVESUPPLIERS],
|
||||
},
|
||||
FiskerMagnaCertificate: {
|
||||
[Providers.FISKER]: [Roles.CERTIFICATES],
|
||||
[Providers.FISKER_QA]: [Roles.MANUFACTURE],
|
||||
[Providers.MAGNA]: [Roles.MAGNAGROUP],
|
||||
},
|
||||
FiskerTools: {
|
||||
[Providers.FISKER]: [Roles.APPROVESUPPLIERS, Roles.CERTIFICATES],
|
||||
[Providers.FISKER_QA]: [Roles.MANUFACTURE],
|
||||
[Providers.MAGNA]: [Roles.MAGNAGROUP],
|
||||
},
|
||||
Magna: {
|
||||
[Providers.FISKER_QA]: [Roles.MANUFACTURE],
|
||||
[Providers.MAGNA]: [Roles.MAGNAGROUP],
|
||||
},
|
||||
Magna: { [Providers.MAGNA]: [Roles.MAGNAGROUP] },
|
||||
FiskerMagnaRead: {
|
||||
[Providers.FISKER]: [Roles.CREATE, Roles.READ],
|
||||
[Providers.FISKER_QA]: [Roles.MANUFACTURE],
|
||||
[Providers.MAGNA]: [Roles.MAGNAGROUP],
|
||||
},
|
||||
FiskerMagnaCreate: {
|
||||
[Providers.FISKER]: [Roles.CREATE],
|
||||
[Providers.FISKER_QA]: [Roles.MANUFACTURE],
|
||||
[Providers.MAGNA]: [Roles.MAGNAGROUP],
|
||||
},
|
||||
};
|
||||
|
||||
@@ -3,13 +3,24 @@ import {
|
||||
getProviders,
|
||||
hasRole,
|
||||
Permissions,
|
||||
Providers,
|
||||
Roles,
|
||||
Providers, Roles
|
||||
} from "./roles";
|
||||
import { TEST_EXPECTED_GROUPS, TEST_TOKEN } from "./testing";
|
||||
|
||||
describe("Roles Helper", () => {
|
||||
it("Check roles", () => {
|
||||
Roles.MAGNAGROUP = "68273225-9da4-4fa7-aea5-38e16ec471fe"
|
||||
Providers.MAGNA = "Magna"
|
||||
|
||||
it("Check FiskerRead permission", () => {
|
||||
expect(
|
||||
hasRole([Roles.CREATE], Permissions.FiskerRead, [Providers.FISKER])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.READ], Permissions.FiskerRead, [Providers.FISKER])
|
||||
).toEqual(true);
|
||||
});
|
||||
|
||||
it("Check FiskerCreate permission", () => {
|
||||
expect(
|
||||
hasRole([Roles.CREATE], Permissions.FiskerCreate, [Providers.FISKER])
|
||||
).toEqual(true);
|
||||
@@ -18,6 +29,81 @@ describe("Roles Helper", () => {
|
||||
).toEqual(false);
|
||||
});
|
||||
|
||||
it("Check FiskerDelete permission", () => {
|
||||
expect(
|
||||
hasRole([Roles.DELETE], Permissions.FiskerDelete, [Providers.FISKER])
|
||||
).toEqual(true);
|
||||
});
|
||||
|
||||
it("Check FiskerSupplierAdmin permission", () => {
|
||||
expect(
|
||||
hasRole([Roles.APPROVESUPPLIERS], Permissions.FiskerSupplierAdmin, [Providers.FISKER])
|
||||
).toEqual(true);
|
||||
});
|
||||
|
||||
it("Check FiskerMagnaCertificate permission", () => {
|
||||
expect(
|
||||
hasRole([Roles.CERTIFICATES], Permissions.FiskerMagnaCertificate, [Providers.FISKER])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.MAGNAGROUP], Permissions.FiskerMagnaCertificate, [Providers.MAGNA])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.MANUFACTURE], Permissions.FiskerMagnaCertificate, [Providers.FISKER_QA])
|
||||
).toEqual(true);
|
||||
});
|
||||
|
||||
it("Check FiskerTools permission", () => {
|
||||
expect(
|
||||
hasRole([Roles.APPROVESUPPLIERS], Permissions.FiskerTools, [Providers.FISKER])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.CERTIFICATES], Permissions.FiskerTools, [Providers.FISKER])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.MAGNAGROUP], Permissions.FiskerTools, [Providers.MAGNA])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.MANUFACTURE], Permissions.FiskerTools, [Providers.FISKER_QA])
|
||||
).toEqual(true);
|
||||
});
|
||||
|
||||
it("Check Magna permission", () => {
|
||||
expect(
|
||||
hasRole([Roles.MAGNAGROUP], Permissions.Magna, [Providers.MAGNA])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.MANUFACTURE], Permissions.Magna, [Providers.FISKER_QA])
|
||||
).toEqual(true);
|
||||
});
|
||||
|
||||
it("Check FiskerMagnaRead permission", () => {
|
||||
expect(
|
||||
hasRole([Roles.CREATE], Permissions.FiskerMagnaRead, [Providers.FISKER])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.READ], Permissions.FiskerMagnaRead, [Providers.FISKER])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.MAGNAGROUP], Permissions.FiskerMagnaRead, [Providers.MAGNA])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.MANUFACTURE], Permissions.FiskerMagnaRead, [Providers.FISKER_QA])
|
||||
).toEqual(true);
|
||||
});
|
||||
|
||||
it("Check FiskerMagnaCreate permission", () => {
|
||||
expect(
|
||||
hasRole([Roles.CREATE], Permissions.FiskerMagnaCreate, [Providers.FISKER])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.MAGNAGROUP], Permissions.FiskerMagnaCreate, [Providers.MAGNA])
|
||||
).toEqual(true);
|
||||
expect(
|
||||
hasRole([Roles.MANUFACTURE], Permissions.FiskerMagnaCreate, [Providers.FISKER_QA])
|
||||
).toEqual(true);
|
||||
});
|
||||
|
||||
it("Get groups", () => {
|
||||
expect(getGroups(TEST_TOKEN)).toEqual(TEST_EXPECTED_GROUPS);
|
||||
});
|
||||
|
||||
@@ -15,7 +15,7 @@ export const TEST_AUTH_OBJECT_FISKER = {
|
||||
}
|
||||
export const TEST_EXPECTED_GROUPS =
|
||||
"[2914e67f-fb85-4b78-b79d-656f4f37faa1, 8d8278a5-9c0e-4c7f-918a-811fd1d236e4, 746f34b0-9ba0-4b5d-8d84-0256a9c8e390, 6c3cf98d-0ada-48c6-ae94-b171cfa275fc, acbd72c9-9ff3-46a8-83ba-c6fa5df3f264, 5e59a619-c890-4472-91c2-d5eae5d8fa18, 56ef4bec-d739-4ddf-a003-ecc813085b8d, 929b0470-f7eb-4e18-9f97-22ac2c591a10, 131e6257-fdb7-426a-9825-1cd918802fba, 1ac794cc-76ac-47f6-bee6-d6666998f0fd, 87770aea-9162-409e-aa70-10d0d1de5902, 5dea6c32-6575-4527-9254-e50d27ae5e92, bafc17a7-ec64-49d9-a2a7-dafc28dcb037, 2449c066-9146-44a7-b4e6-4828031d958d, efcc3025-e2d8-4212-8227-805c7be39d2c, 8f78dce7-f5f9-4033-a10c-c9c7408bfcfe, cf653183-c829-4eed-a6ce-453fa1017cd9, 783c5979-f5e7-4cb6-b14e-c3553dde956a, 5515a98f-4668-4121-8e8d-fee2825699cf, 86956a2f-8d46-47ff-9b29-f99079ae3c1d, c4d4361c-8882-47b4-8641-fd3ab68ae722, 972ad095-16b7-40ad-a464-f5dbf417a8cd, 7bcdcdb2-3279-44bf-a998-771bab4b33e1]";
|
||||
export const TEST_TOKEN_MAGNA = "eyJraWQiOiJlUTNuZFJLaUVcL084VUZ5RHFsYjN0S1RzWG00SzVPMlc4NXd3VWkzT2tNZz0iLCJhbGciOiJSUzI1NiJ9.eyJhdF9oYXNoIjoiSG10dVRGVmdLaS1FbXhTWTNldFdVUSIsInN1YiI6ImMyZWRjYTk5LTdiZDQtNDkzNS1hZDM3LTFhMjJhN2VmMWY0NiIsImNvZ25pdG86Z3JvdXBzIjpbInVzLXdlc3QtMl9BV3dqTFh5bTJfRmlza2VyLVFBIl0sImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tXC91cy13ZXN0LTJfQVd3akxYeW0yIiwiY29nbml0bzp1c2VybmFtZSI6ImZpc2tlci1xYV9qd3VAZmlza2VyaW5jLmNvbSIsImN1c3RvbTpncm91cHMiOiJbMjczYzdjMGQtNTFkMy00YTMxLTk0NDMtYzQzNjc1NzJlZTRmLCA1ZTU5YTYxOS1jODkwLTQ0NzItOTFjMi1kNWVhZTVkOGZhMTgsIGM0ZDQzNjFjLTg4ODItNDdiNC04NjQxLWZkM2FiNjhhZTcyMiwgZWZjYzMwMjUtZTJkOC00MjEyLTgyMjctODA1YzdiZTM5ZDJjLCA4Njk1NmEyZi04ZDQ2LTQ3ZmYtOWIyOS1mOTkwNzlhZTNjMWQsIGY2M2I2NDMwLTEyODgtNDBhOC1hYTQ5LTg0Mzg1MTUwZDZhOCwgNWRlYTZjMzItNjU3NS00NTI3LTkyNTQtZTUwZDI3YWU1ZTkyLCAxMzFlNjI1Ny1mZGI3LTQyNmEtOTgyNS0xY2Q5MTg4MDJmYmEsIGE2Yzk4MDVlLTgwYjItNDJiMi1iZmJiLTlkZjUyZTU1MDRkOCwgNjZjYWQ4NjAtM2Q4MC00YTU4LTlkOTgtNTQwOTE3NzMzZWY2LCAyNDQ5YzA2Ni05MTQ2LTQ0YTctYjRlNi00ODI4MDMxZDk1OGQsIDkyOWIwNDcwLWY3ZWItNGUxOC05Zjk3LTIyYWMyYzU5MWExMCwgM2JlZjYzNzctZWRkZS00YWUwLTkzMWUtMzg4Nzk5OTM5NjUyLCA3ODNjNTk3OS1mNWU3LTRjYjYtYjE0ZS1jMzU1M2RkZTk1NmEsIDI5MTRlNjdmLWZiODUtNGI3OC1iNzlkLTY1NmY0ZjM3ZmFhMSwgYjBlODJlODMtMmM5NC00YjI0LWI5YzctZTc3ODE2ZjI1OTdkLCBjZjY1MzE4My1jODI5LTRlZWQtYTZjZS00NTNmYTEwMTdjZDksIDZjM2NmOThkLTBhZGEtNDhjNi1hZTk0LWIxNzFjZmEyNzVmYywgNTUxNWE5OGYtNDY2OC00MTIxLThlOGQtZmVlMjgyNTY5OWNmLCA5NzJhZDA5NS0xNmI3LTQwYWQtYTQ2NC1mNWRiZjQxN2E4Y2QsIDczN2U0NDljLTIzMDktNDY5ZS1hYTQ4LTQ2ZTY4OTE5ODNjMCwgOGQ4Mjc4YTUtOWMwZS00YzdmLTkxOGEtODExZmQxZDIzNmU0LCBiYWZjMTdhNy1lYzY0LTQ5ZDktYTJhNy1kYWZjMjhkY2IwMzcsIDc0NmYzNGIwLTliYTAtNGI1ZC04ZDg0LTAyNTZhOWM4ZTM5MCwgN2JjZGNkYjItMzI3OS00NGJmLWE5OTgtNzcxYmFiNGIzM2UxLCBhY2JkNzJjOS05ZmYzLTQ2YTgtODNiYS1jNmZhNWRmM2YyNjQsIDFhYzc5NGNjLTc2YWMtNDdmNi1iZWU2LWQ2NjY2OTk4ZjBmZCwgOGY3OGRjZTctZjVmOS00MDMzLWExMGMtYzljNzQwOGJmY2ZlLCA4Nzc3MGFlYS05MTYyLTQwOWUtYWE3MC0xMGQwZDFkZTU5MDIsIDU2ZWY0YmVjLWQ3MzktNGRkZi1hMDAzLWVjYzgxMzA4NWI4ZF0iLCJhdWQiOiI3Y2sydGZvcWF2YzcyYzQ1aGg3dGdlNDJrZCIsImlkZW50aXRpZXMiOlt7InVzZXJJZCI6Imp3dUBmaXNrZXJpbmMuY29tIiwicHJvdmlkZXJOYW1lIjoiRmlza2VyLVFBIiwicHJvdmlkZXJUeXBlIjoiU0FNTCIsImlzc3VlciI6Imh0dHBzOlwvXC9zdHMud2luZG93cy5uZXRcLzVhYTRiNjQwLWM5ZmMtNGE5Yi1iM2EzLWQ0YTdkMDA4ZmI1ZVwvIiwicHJpbWFyeSI6InRydWUiLCJkYXRlQ3JlYXRlZCI6IjE2Njg2MjQ4NTM3NDEifV0sInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNjcwNjI4NDU3LCJleHAiOjE2NzA2MzU1OTgsImlhdCI6MTY3MDYzMTk5OCwiZW1haWwiOiJqd3VAZmlza2VyaW5jLmNvbSJ9.dqSyarRMi8i5C51waGAgCu54z8BozGmS_B9bQELAq-puHfWBSsVzBVBipSY50e_NdTyg7UcU5CA4kijSIQLWz5jsy09Mfq_rh7NNOeWcX_X631bkLsQda9Qs53j4AlrPZFgAV_EtmoqLCK-z1kYv4gjZvtyWw7LKQ1VcsuFaNGPko1QAC1zpIc2OngRvamtLOxhuQjd8bDdQFQh56P4q02rkTssCEPyxr-D3loBC1s7GkJ3OZm1wuljjJfXCLogirIyrgDS4k2e0CPWofXCwGqM0lvVs73DmRt_s7-TNbYFg9A105d3UhoP6NNfKCNTqEVWKLPaGQNkhcL9xJwYX-A";
|
||||
export const TEST_TOKEN_MAGNA = "eyJraWQiOiJlUTNuZFJLaUVcL084VUZ5RHFsYjN0S1RzWG00SzVPMlc4NXd3VWkzT2tNZz0iLCJhbGciOiJSUzI1NiJ9.eyJhdF9oYXNoIjoiWEZWSjl6N2I4aThNSlFvYkMzZzgxUSIsInN1YiI6IjliZmNlZTZiLWExNTYtNGY2ZS04NjlmLWExYzlkZGFiZmZmNCIsImNvZ25pdG86Z3JvdXBzIjpbInVzLXdlc3QtMl9BV3dqTFh5bTJfRmlza2VyLVFBIl0sImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tXC91cy13ZXN0LTJfQVd3akxYeW0yIiwiY29nbml0bzp1c2VybmFtZSI6ImZpc2tlci1xYV9wYWRhbXNlbkBmaXNrZXJpbmMuY29tIiwibm9uY2UiOiJ5WXJjRXg5Z1h2R3RXcUxjMzNqZTI2c09SVjl0WENnQ1lNUXJNbTc0dnlDUG9ZY3dzd0Jja29uMTNEa3Zmem1MUzNoNklHV0E1emRMSjAzenNfRTRrSWZVUlJFSndhYmN3UDA4OF9uYkxsZzlmZ3ZXXzFGeUlrUjc3UzgwY2tXcWtUZHlITXREc0tfRWk2TU1FRFVCNkl6Q0JwOTN6SjktUEdYQl9zclR3STAiLCJjdXN0b206Z3JvdXBzIjoiWzI3M2M3YzBkLTUxZDMtNGEzMS05NDQzLWM0MzY3NTcyZWU0ZiwgMzQxMmUxMWEtYTJkMS00MzU1LWJlM2UtZWY5YWE1MDY1YjY5LCBjNGQ0MzYxYy04ODgyLTQ3YjQtODY0MS1mZDNhYjY4YWU3MjIsIGVmY2MzMDI1LWUyZDgtNDIxMi04MjI3LTgwNWM3YmUzOWQyYywgODY5NTZhMmYtOGQ0Ni00N2ZmLTliMjktZjk5MDc5YWUzYzFkLCAzYmVmNjM3Ny1lZGRlLTRhZTAtOTMxZS0zODg3OTk5Mzk2NTIsIDZjM2NmOThkLTBhZGEtNDhjNi1hZTk0LWIxNzFjZmEyNzVmYywgNTUxNWE5OGYtNDY2OC00MTIxLThlOGQtZmVlMjgyNTY5OWNmLCA5NzJhZDA5NS0xNmI3LTQwYWQtYTQ2NC1mNWRiZjQxN2E4Y2QsIDE2NzNiODllLTJkOWQtNDFmMi1iZjU1LWRhZjU3Yjc5ZmQ2OSwgOGQ4Mjc4YTUtOWMwZS00YzdmLTkxOGEtODExZmQxZDIzNmU0LCBiYWZjMTdhNy1lYzY0LTQ5ZDktYTJhNy1kYWZjMjhkY2IwMzcsIDc0NmYzNGIwLTliYTAtNGI1ZC04ZDg0LTAyNTZhOWM4ZTM5MCwgN2JjZGNkYjItMzI3OS00NGJmLWE5OTgtNzcxYmFiNGIzM2UxLCAzNzk0ZmZiNS02YzUyLTQ3MjUtOTFhMC05MGZlZmRmZDgwMzcsIDYwNzFlYWJhLWQ2NjYtNGMwMy04MTdiLWMyODJhOTUxYjk2NiwgYWNiZDcyYzktOWZmMy00NmE4LTgzYmEtYzZmYTVkZjNmMjY0LCA4Nzc3MGFlYS05MTYyLTQwOWUtYWE3MC0xMGQwZDFkZTU5MDIsIDU2ZWY0YmVjLWQ3MzktNGRkZi1hMDAzLWVjYzgxMzA4NWI4ZF0iLCJhdWQiOiI3Y2sydGZvcWF2YzcyYzQ1aGg3dGdlNDJrZCIsImlkZW50aXRpZXMiOlt7InVzZXJJZCI6InBhZGFtc2VuQGZpc2tlcmluYy5jb20iLCJwcm92aWRlck5hbWUiOiJGaXNrZXItUUEiLCJwcm92aWRlclR5cGUiOiJTQU1MIiwiaXNzdWVyIjoiaHR0cHM6XC9cL3N0cy53aW5kb3dzLm5ldFwvNWFhNGI2NDAtYzlmYy00YTliLWIzYTMtZDRhN2QwMDhmYjVlXC8iLCJwcmltYXJ5IjoidHJ1ZSIsImRhdGVDcmVhdGVkIjoiMTY3OTQyMjI2NTA4OSJ9XSwidG9rZW5fdXNlIjoiaWQiLCJhdXRoX3RpbWUiOjE2Nzk1OTU3NjAsImV4cCI6MTY3OTU5OTM2MCwiaWF0IjoxNjc5NTk1NzYwLCJlbWFpbCI6InBhZGFtc2VuQGZpc2tlcmluYy5jb20ifQ.ZPu4lFEzkBt75myO0iuhi2wkaOiZx1I_MsgRh6ytg3ViNl2PnpbP65d5_sb0glTrFTRraL9SxI85TNZt6Llj7cgdZh-hs36jOwo1Wd8ZvhPB9W4SO2GTYBI1ad_KEMLbYGRbjUz-6PKxcp6_brVBEUzgKMjTUmVrxlBiBUwnX_MjNBFs5i76PM30XAbq0EOwEyrq_TXqCI495z7tu5alSZBY39HLdwSUQz3d21I1jG4fPyoSFOAIjIeHSRa0OrTOA-lnoM71Q5pEM_1mq_bL3l7eQIOtuZTBkrekiwwiap36JWX9En9JFMLK2egyMhJSr0UTajWOS9U4Q09u0lTc7Q";
|
||||
export const TEST_AUTH_OBJECT_MAGNA = {
|
||||
idToken: {
|
||||
jwtToken: TEST_TOKEN_MAGNA
|
||||
|
||||
Reference in New Issue
Block a user