diff --git a/admin-ui/app/routes/Dashboards/DashboardPage.js b/admin-ui/app/routes/Dashboards/DashboardPage.js
index 0ce05a2f8a..37dcc33172 100644
--- a/admin-ui/app/routes/Dashboards/DashboardPage.js
+++ b/admin-ui/app/routes/Dashboards/DashboardPage.js
@@ -1,93 +1,93 @@
-import React, { useState, useEffect, useMemo } from "react";
-import Grid from "@mui/material/Grid";
-import Paper from "@mui/material/Paper";
-import { useMediaQuery } from "react-responsive";
-import GluuLoader from "Routes/Apps/Gluu/GluuLoader";
-import GluuViewWrapper from "Routes/Apps/Gluu/GluuViewWrapper";
-import { getClients } from "Redux/features/initSlice";
+import React, { useState, useEffect, useMemo } from 'react'
+import Grid from '@mui/material/Grid'
+import Paper from '@mui/material/Paper'
+import { useMediaQuery } from 'react-responsive'
+import GluuLoader from 'Routes/Apps/Gluu/GluuLoader'
+import GluuViewWrapper from 'Routes/Apps/Gluu/GluuViewWrapper'
+import { getClients } from 'Redux/features/initSlice'
import {
hasBoth,
buildPayload,
STAT_READ,
- STAT_JANS_READ,
-} from "Utils/PermChecker";
-import { useTranslation } from "react-i18next";
-import { useDispatch, useSelector } from "react-redux";
-import { getLicenseDetails } from "Redux/features/licenseDetailsSlice";
-import { getHealthStatus } from "Redux/features/healthSlice";
-import DashboardChart from "./Chart/DashboardChart";
-import DateRange from "./DateRange";
-import CheckIcon from "../../images/svg/check.svg";
-import CrossIcon from "../../images/svg/cross.svg";
-import SetTitle from "Utils/SetTitle";
-import styles from "./styles";
-import { formatDate } from "Utils/Util";
-import UsersIcon from "Components/SVG/menu/Users";
-import Administrator from "Components/SVG/menu/Administrator";
-import OAuthIcon from "Components/SVG/menu/OAuth";
-import JansLockUsers from "Components/SVG/menu/JansLockUsers";
-import JansLockClients from "Components/SVG/menu/JansLockClients";
-import { getHealthServerStatus } from "../../redux/features/healthSlice";
-import GluuPermissionModal from "Routes/Apps/Gluu/GluuPermissionModal";
-import { auditLogoutLogs } from "../../../plugins/user-management/redux/features/userSlice";
-import { useNavigate } from "react-router";
-import { getLockStatus } from "Redux/features/lockSlice";
-import moment from "moment";
+ STAT_JANS_READ
+} from 'Utils/PermChecker'
+import { useTranslation } from 'react-i18next'
+import { useDispatch, useSelector } from 'react-redux'
+import { getLicenseDetails } from 'Redux/features/licenseDetailsSlice'
+import { getHealthStatus } from 'Redux/features/healthSlice'
+import DashboardChart from './Chart/DashboardChart'
+import DateRange from './DateRange'
+import CheckIcon from '../../images/svg/check.svg'
+import CrossIcon from '../../images/svg/cross.svg'
+import SetTitle from 'Utils/SetTitle'
+import styles from './styles'
+import { formatDate } from 'Utils/Util'
+import UsersIcon from 'Components/SVG/menu/Users'
+import Administrator from 'Components/SVG/menu/Administrator'
+import OAuthIcon from 'Components/SVG/menu/OAuth'
+import JansLockUsers from 'Components/SVG/menu/JansLockUsers'
+import JansLockClients from 'Components/SVG/menu/JansLockClients'
+import { getHealthServerStatus } from '../../redux/features/healthSlice'
+import GluuPermissionModal from 'Routes/Apps/Gluu/GluuPermissionModal'
+import { auditLogoutLogs } from '../../../plugins/user-management/redux/features/userSlice'
+import { useNavigate } from 'react-router'
+import { getLockStatus } from 'Redux/features/lockSlice'
+import moment from 'moment'
function DashboardPage() {
- const { t } = useTranslation();
- const navigate = useNavigate();
- const isTabletOrMobile = useMediaQuery({ query: "(max-width: 1224px)" });
- const breakDashboardCard = useMediaQuery({ query: "(max-width: 1424px)" });
- const isMobile = useMediaQuery({ maxWidth: 767 });
- const userAction = {};
- const options = {};
- const { classes } = styles();
- const FETCHING_LICENSE_DETAILS = "Fetch license details";
- const [mauCount, setMauCount] = useState(null);
- const [tokenCount, setTokenCount] = useState(null);
-
- const statData = useSelector((state) => state.mauReducer.stat);
- const loading = useSelector((state) => state.mauReducer.loading);
- const clients = useSelector((state) => state.initReducer.clients);
- const lock = useSelector((state) => state.lockReducer.lockDetail);
+ const { t } = useTranslation()
+ const navigate = useNavigate()
+ const isTabletOrMobile = useMediaQuery({ query: '(max-width: 1224px)' })
+ const breakDashboardCard = useMediaQuery({ query: '(max-width: 1424px)' })
+ const isMobile = useMediaQuery({ maxWidth: 767 })
+ const userAction = {}
+ const options = {}
+ const { classes } = styles()
+ const FETCHING_LICENSE_DETAILS = 'Fetch license details'
+ const [mauCount, setMauCount] = useState(null)
+ const [tokenCount, setTokenCount] = useState(null)
+
+ const statData = useSelector(state => state.mauReducer.stat)
+ const loading = useSelector(state => state.mauReducer.loading)
+ const clients = useSelector(state => state.initReducer.clients)
+ const lock = useSelector(state => state.lockReducer.lockDetail)
const totalClientsEntries = useSelector(
- (state) => state.initReducer.totalClientsEntries
- );
- const license = useSelector((state) => state.licenseDetailsReducer.item);
- const serverStatus = useSelector((state) => state.healthReducer.serverStatus);
- const serverHealth = useSelector((state) => state.healthReducer.health);
- const dbStatus = useSelector((state) => state.healthReducer.dbStatus);
+ state => state.initReducer.totalClientsEntries
+ )
+ const license = useSelector(state => state.licenseDetailsReducer.item)
+ const serverStatus = useSelector(state => state.healthReducer.serverStatus)
+ const serverHealth = useSelector(state => state.healthReducer.health)
+ const dbStatus = useSelector(state => state.healthReducer.dbStatus)
const access_token = useSelector(
- (state) => state.authReducer.token?.access_token
- );
- const permissions = useSelector((state) => state.authReducer.permissions);
- const dispatch = useDispatch();
+ state => state.authReducer.token?.access_token
+ )
+ const permissions = useSelector(state => state.authReducer.permissions)
+ const dispatch = useDispatch()
- SetTitle(t("menus.dashboard"));
+ SetTitle(t('menus.dashboard'))
useEffect(() => {
- const date = new Date();
- const currentYear = date.getFullYear();
- const currentMonth = date.getMonth() + 1;
- const formattedMonth = currentMonth > 9 ? currentMonth : `0${currentMonth}`;
- const yearMonth = `${currentYear}${formattedMonth}`;
+ const date = new Date()
+ const currentYear = date.getFullYear()
+ const currentMonth = date.getMonth() + 1
+ const formattedMonth = currentMonth > 9 ? currentMonth : `0${currentMonth}`
+ const yearMonth = `${currentYear}${formattedMonth}`
const currentMonthData = statData.find(
({ month }) => month.toString() === yearMonth
- );
+ )
- const mau = currentMonthData?.mau;
+ const mau = currentMonthData?.mau
const token =
currentMonthData?.authz_code_access_token_count +
- currentMonthData?.client_credentials_access_token_count;
+ currentMonthData?.client_credentials_access_token_count
if (mau) {
- setMauCount(mau);
+ setMauCount(mau)
}
if (token) {
- setTokenCount(token);
+ setTokenCount(token)
}
- }, [statData]);
+ }, [statData])
useEffect(() => {
if (
@@ -95,9 +95,9 @@ function DashboardPage() {
access_token &&
hasBoth(permissions, STAT_READ, STAT_JANS_READ)
) {
- getLicense();
+ getLicense()
}
- }, [access_token, license]);
+ }, [access_token, license])
useEffect(() => {
if (
@@ -105,191 +105,186 @@ function DashboardPage() {
access_token &&
hasBoth(permissions, STAT_READ, STAT_JANS_READ)
) {
- buildPayload(userAction, "Fetch openid connect clients", {});
- dispatch(getClients({ action: userAction }));
+ buildPayload(userAction, 'Fetch openid connect clients', {})
+ dispatch(getClients({ action: userAction }))
}
- }, [access_token, clients]);
+ }, [access_token, clients])
useEffect(() => {
if (access_token && hasBoth(permissions, STAT_READ, STAT_JANS_READ)) {
- getServerStatus();
- getJansLockDetails();
- buildPayload(userAction, "GET Health Status", { service: "all" });
- dispatch(getHealthServerStatus({ action: userAction }));
+ getServerStatus()
+ getJansLockDetails()
+ buildPayload(userAction, 'GET Health Status', { service: 'all' })
+ dispatch(getHealthServerStatus({ action: userAction }))
}
- }, [access_token]);
+ }, [access_token])
function getLicense() {
- buildPayload(userAction, FETCHING_LICENSE_DETAILS, options);
- dispatch(getLicenseDetails({}));
+ buildPayload(userAction, FETCHING_LICENSE_DETAILS, options)
+ dispatch(getLicenseDetails({}))
}
function isUp(status) {
if (status) {
return (
- status.toUpperCase() === "ONLINE".toUpperCase() ||
- status.toUpperCase() === "RUNNING".toUpperCase()
- );
+ status.toUpperCase() === 'ONLINE'.toUpperCase() ||
+ status.toUpperCase() === 'RUNNING'.toUpperCase()
+ )
}
- return false;
+ return false
}
function getServerStatus() {
- buildPayload(userAction, "GET Health Status", options);
- dispatch(getHealthStatus({ action: userAction }));
+ buildPayload(userAction, 'GET Health Status', options)
+ dispatch(getHealthStatus({ action: userAction }))
}
function getJansLockDetails() {
- const months = [];
+ const months = []
for (let i = 0; i < 12; i++) {
- months.push(moment().subtract(i, "months").format("YYYYMM"));
+ months.push(moment().subtract(i, 'months').format('YYYYMM'))
}
- const startMonth = months[months.length - 1];
- const endMonth = months[0];
+ const startMonth = months[months.length - 1]
+ const endMonth = months[0]
dispatch(
getLockStatus({
startMonth,
- endMonth,
+ endMonth
})
- );
+ )
}
let summaryData = [
{
- text: t("dashboard.oidc_clients_count"),
+ text: t('dashboard.oidc_clients_count'),
value: totalClientsEntries,
icon: (
-
- ),
+
+ )
},
{
- text: t("dashboard.active_users_count"),
+ text: t('dashboard.active_users_count'),
value: mauCount ?? 0,
- icon: (
-
- ),
+ icon:
},
{
- text: t("dashboard.token_issued_count"),
+ text: t('dashboard.token_issued_count'),
value: tokenCount ?? 0,
- icon: (
-
- ),
- },
- ];
+ icon:
+ }
+ ]
if (lock && lock.length > 0) {
summaryData.push(
{
- text: t("dashboard.mau_users"),
+ text: t('dashboard.mau_users'),
value: lock[0]?.monthly_active_users ?? 0,
icon: (
- ),
+ )
},
{
- text: t("dashboard.mau_clients"),
+ text: t('dashboard.mau_clients'),
value: lock[0]?.monthly_active_clients ?? 0,
icon: (
- ),
+ )
}
- );
+ )
}
const userInfo = [
{
- text: t("dashboard.product_name"),
- value: license?.productName,
+ text: t('dashboard.product_name'),
+ value: license?.productName
},
{
- text: t("dashboard.license_type"),
- value: license?.licenseType,
+ text: t('dashboard.license_type'),
+ value: license?.licenseType
},
{
- text: t("dashboard.customer_email"),
- value: license?.customerEmail,
+ text: t('dashboard.customer_email'),
+ value: license?.customerEmail
},
{
- text: t("dashboard.customer_name"),
- value: `${license?.customerFirstName || ""} ${
- license?.customerLastName || ""
- }`,
+ text: t('dashboard.customer_name'),
+ value: `${license?.customerFirstName || ''} ${
+ license?.customerLastName || ''
+ }`
},
{
- text: t("fields.validityPeriod"),
+ text: t('fields.validityPeriod'),
value: formatDate(license.validityPeriod),
- key: "License Validity Period",
+ key: 'License Validity Period'
},
{
- text: t("dashboard.license_status"),
- value: license?.licenseActive ? "active" : "inactive",
- key: "License Status",
- },
- ];
+ text: t('dashboard.license_status'),
+ value: license?.licenseActive ? 'active' : 'inactive',
+ key: 'License Status'
+ }
+ ]
const statusDetails = [
- { label: "dashboard.database_status", status: dbStatus, key: "db_status" },
+ { label: 'dashboard.database_status', status: dbStatus, key: 'db_status' },
{
- label: "dashboard.server_status",
+ label: 'dashboard.server_status',
status: serverStatus,
- key: "status",
+ key: 'status'
},
{
- label: "dashboard.oauth_server_status",
+ label: 'dashboard.oauth_server_status',
status: serverStatus,
- key: "jans-auth",
+ key: 'jans-auth'
},
{
- label: "dashboard.config_api",
+ label: 'dashboard.config_api',
status: serverStatus,
- key: "jans-config-api",
+ key: 'jans-config-api'
},
- { label: "FIDO", status: serverStatus, key: "jans-fido2" },
- { label: "CASA", status: serverStatus, key: "jans-casa" },
- { label: "dashboard.key_cloak", status: serverStatus, key: "keycloak" },
- { label: "SCIM", status: false, key: "jans-scim" },
- { label: "dashboard.jans_lock", status: serverStatus, key: "jans-lock" },
- { label: "dashboard.jans_link", status: false, key: "jans-link" },
- ];
+ { label: 'FIDO', status: serverStatus, key: 'jans-fido2' },
+ { label: 'CASA', status: serverStatus, key: 'jans-casa' },
+ { label: 'dashboard.key_cloak', status: serverStatus, key: 'keycloak' },
+ { label: 'SCIM', status: false, key: 'jans-scim' },
+ { label: 'dashboard.jans_lock', status: serverStatus, key: 'jans-lock' }
+ ]
// Helper function to get the status value
- const getStatusValue = (key) => {
- if (key !== "db_status" && key !== "status") {
- return serverHealth[key];
- } else if (key === "db_status") {
- return dbStatus;
+ const getStatusValue = key => {
+ if (key !== 'db_status' && key !== 'status') {
+ return serverHealth[key]
+ } else if (key === 'db_status') {
+ return dbStatus
} else {
- return serverStatus;
+ return serverStatus
}
- };
+ }
// Helper function to determine the class name
- const getClassName = (key) => {
- const value = getStatusValue(key);
- return isUp(value) ? classes.checkText : classes.crossText;
- };
+ const getClassName = key => {
+ const value = getStatusValue(key)
+ return isUp(value) ? classes.checkText : classes.crossText
+ }
// Helper function to get the status text
- const getStatusText = (key) => {
- const value = getStatusValue(key);
- return isUp(value) ? "Running" : "Down";
- };
+ const getStatusText = key => {
+ const value = getStatusValue(key)
+ return isUp(value) ? 'Running' : 'Down'
+ }
// Helper function to get the icon
- const getStatusIcon = (key) => {
- const value = getStatusValue(key);
- return isUp(value) ? CheckIcon : CrossIcon;
- };
+ const getStatusIcon = key => {
+ const value = getStatusValue(key)
+ return isUp(value) ? CheckIcon : CrossIcon
+ }
// Refactored StatusCard component
const StatusCard = useMemo(() => {
@@ -299,41 +294,41 @@ function DashboardPage() {
- {t("dashboard.system_status")}
+ {t('dashboard.system_status')}
{statusDetails.map(({ label, key }) => (
-
+
{t(label)}
{getStatusText(key)}
-
+
- );
- }, [serverStatus, serverHealth, dbStatus, t, statusDetails, classes]);
+ )
+ }, [serverStatus, serverHealth, dbStatus, t, statusDetails, classes])
const handleLogout = () => {
if (access_token) {
dispatch(
auditLogoutLogs({
message:
- "Logging out due to insufficient permissions for Admin UI access.",
+ 'Logging out due to insufficient permissions for Admin UI access.'
})
- );
- } else navigate("/logout");
- };
+ )
+ } else navigate('/logout')
+ }
return (
{
- handleLogout();
+ handleLogout()
}}
isOpen={
!access_token || !hasBoth(permissions, STAT_READ, STAT_JANS_READ)
@@ -379,17 +374,17 @@ function DashboardPage() {
- {t("dashboard.summary_title")}
+ {t('dashboard.summary_title')}
{summaryData.map((data, key) => (
@@ -400,7 +395,7 @@ function DashboardPage() {
{data.icon}
@@ -421,36 +416,36 @@ function DashboardPage() {
spacing={2}
>
-
+
- {t("dashboard.user_info")}
+ {t('dashboard.user_info')}
{userInfo.map((info, key) => (
- {info.text}:{" "}
+ {info.text}:{' '}
- {info?.key === "License Status" ? (
+ {info?.key === 'License Status' ? (
-
+
- {t("dashboard.access_tokens_graph")}
+ {t('dashboard.access_tokens_graph')}
{isTabletOrMobile ? (
@@ -486,7 +481,7 @@ function DashboardPage() {
: { marginLeft: 40, marginBottom: 40 }
}
>
- {t("dashboard.select_date_range")}
+ {t('dashboard.select_date_range')}
@@ -507,8 +502,8 @@ function DashboardPage() {
-
- {t("dashboard.select_date_range")}
+
+ {t('dashboard.select_date_range')}
@@ -526,17 +521,17 @@ function DashboardPage() {
>
-
- {t("dashboard.client_credentials_access_token")}
+ {t('dashboard.client_credentials_access_token')}
-
- {t("dashboard.authorization_code_access_token")}
+ {t('dashboard.authorization_code_access_token')}
-
- {t("dashboard.authorization_code_id_token")}
+ {t('dashboard.authorization_code_id_token')}
@@ -545,7 +540,7 @@ function DashboardPage() {
- );
+ )
}
-export default DashboardPage;
+export default DashboardPage
diff --git a/admin-ui/app/utils/PermChecker.js b/admin-ui/app/utils/PermChecker.js
index 22a54d1ad2..494a463627 100644
--- a/admin-ui/app/utils/PermChecker.js
+++ b/admin-ui/app/utils/PermChecker.js
@@ -81,15 +81,9 @@ export const FIDO_READ = BASE_URL + '/config/fido2.readonly'
export const FIDO_WRITE = BASE_URL + '/config/fido2.write'
export const FIDO_DELETE = BASE_URL + '/config/fido2.delete'
-export const JANS_LINK_READ = BASE_URL + '/config/jans-link.readonly'
-export const JANS_LINK_WRITE = BASE_URL + '/config/jans-link.write'
-
export const JANS_LOCK_READ = BASE_URL + '/lock-config.readonly'
export const JANS_LOCK_WRITE = BASE_URL + '/lock-config.write'
-export const JANS_KC_LINK_READ = BASE_URL + '/kc-link-config.readonly'
-export const JANS_KC_LINK_WRITE = BASE_URL + '/kc-link-config.write'
-
export const CACHE_READ = BASE_URL + '/config/cache.readonly'
export const CACHE_WRITE = BASE_URL + '/config/cache.write'
export const CACHE_DELETE = BASE_URL + '/config/cache.delete'
@@ -128,9 +122,12 @@ export const SCIM_CONFIG_WRITE = 'https://jans.io/scim/config.write'
export const MESSAGE_READ = BASE_URL + '/config/message.readonly'
export const MESSAGE_WRITE = BASE_URL + '/config/message.write'
-export const WEBHOOK_READ = BASE_URL + '/jans-auth-server/config/adminui/webhook.readonly'
-export const WEBHOOK_WRITE = BASE_URL + '/jans-auth-server/config/adminui/webhook.write'
-export const WEBHOOK_DELETE = BASE_URL + '/jans-auth-server/config/adminui/webhook.delete'
+export const WEBHOOK_READ =
+ BASE_URL + '/jans-auth-server/config/adminui/webhook.readonly'
+export const WEBHOOK_WRITE =
+ BASE_URL + '/jans-auth-server/config/adminui/webhook.write'
+export const WEBHOOK_DELETE =
+ BASE_URL + '/jans-auth-server/config/adminui/webhook.delete'
export const ASSETS_READ = BASE_URL + '/config/jans_asset-read'
export const ASSETS_WRITE = BASE_URL + '/config/jans_asset-write'
export const ASSETS_DELETE = BASE_URL + '/config/jans_asset-delete'
@@ -141,8 +138,8 @@ export const API_CONFIG_WRITE = BASE_URL + '/config/properties.write'
export const hasPermission = (scopes, scope) => {
let available = false
if (scopes) {
- for(const i in scopes){
- if(scopes[i] === scope){
+ for (const i in scopes) {
+ if (scopes[i] === scope) {
available = true
}
}
diff --git a/admin-ui/plugins.config.json b/admin-ui/plugins.config.json
index ff1ba0e1b1..00b08ce0da 100644
--- a/admin-ui/plugins.config.json
+++ b/admin-ui/plugins.config.json
@@ -31,14 +31,7 @@
"key": "jans-lock",
"metadataFile": "./jans-lock/plugin-metadata"
},
- {
- "key": "jans-link",
- "metadataFile": "./jans-link/plugin-metadata"
- },
- {
- "key": "jans-kc-link",
- "metadataFile": "./jans-kc-link/plugin-metadata"
- },
+
{
"key": "scim",
"metadataFile": "./scim/plugin-metadata"
diff --git a/admin-ui/plugins/jans-kc-link/components/ConfigurationForm.js b/admin-ui/plugins/jans-kc-link/components/ConfigurationForm.js
deleted file mode 100644
index 4afc6d7c2d..0000000000
--- a/admin-ui/plugins/jans-kc-link/components/ConfigurationForm.js
+++ /dev/null
@@ -1,257 +0,0 @@
-import React, { useState } from 'react'
-import { isEmpty } from 'lodash'
-import { useFormik } from 'formik'
-import { Row, Col, Form, FormGroup } from 'Components'
-import GluuCommitDialog from 'Routes/Apps/Gluu/GluuCommitDialog'
-import GluuCommitFooter from 'Routes/Apps/Gluu/GluuCommitFooter'
-import GluuToogleRow from 'Routes/Apps/Gluu/GluuToogleRow'
-import GluuInputRow from 'Routes/Apps/Gluu/GluuInputRow'
-import GluuLabel from 'Routes/Apps/Gluu/GluuLabel'
-import GluuProperties from 'Routes/Apps/Gluu/GluuProperties'
-import PropTypes from 'prop-types'
-import { useLocation } from 'react-router'
-import { useSelector } from 'react-redux'
-import { hasPermission, JANS_KC_LINK_WRITE } from 'Utils/PermChecker'
-import { adminUiFeatures } from 'Plugins/admin/helper/utils'
-
-const ConfigurationForm = ({
- initialValues,
- validationSchema,
- handleFormSubmission,
-}) => {
- const permissions = useSelector((state) => state.authReducer.permissions)
- const disabled = !hasPermission(permissions, JANS_KC_LINK_WRITE)
- const viewOnly = useLocation().state?.viewOnly || false
-
- const userAction = {}
- const [modal, setModal] = useState(false)
- const toggle = () => {
- setModal(!modal)
- }
- const formik = useFormik({
- initialValues,
- validationSchema,
- onSubmit: () => {
- if (isEmpty(formik.errors)) {
- toggle()
- }
- },
- })
-
- const submitForm = (userMessage) => {
- toggle()
- handleFormSubmission({ userMessage, userAction, values: formik.values })
- }
-
- return (
-
- )
-}
-
-export default ConfigurationForm
-ConfigurationForm.propTypes = {
- validationSchema: PropTypes.object.isRequired,
- initialValues: PropTypes.object.isRequired,
- handleFormSubmission: PropTypes.func.isRequired,
-}
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/components/JansKcLinkPage.js b/admin-ui/plugins/jans-kc-link/components/JansKcLinkPage.js
deleted file mode 100644
index 4a57975e24..0000000000
--- a/admin-ui/plugins/jans-kc-link/components/JansKcLinkPage.js
+++ /dev/null
@@ -1,81 +0,0 @@
-import React, { useEffect } from 'react'
-import SetTitle from 'Utils/SetTitle'
-import GluuLoader from 'Routes/Apps/Gluu/GluuLoader'
-import { Card, CardBody } from 'Components'
-import GluuTabs from 'Routes/Apps/Gluu/GluuTabs'
-import applicationStyle from 'Routes/Apps/Gluu/styles/applicationstyle'
-import { useDispatch, useSelector } from 'react-redux'
-import { getConfiguration } from 'Plugins/jans-kc-link/redux/features/JansKcLinkSlice'
-import { useTranslation } from 'react-i18next'
-import BasicConfiguration from './Tabs/BasicConfiguration'
-import InumConfiguration from './Tabs/InumConfiguration'
-import Sources from './Tabs/Sources'
-import TargetConfiguration from './Tabs/TargetConfiguration'
-import KeycloackConfiguration from './Tabs/KeycloackConfiguration'
-
-const JansKcLinkPage = () => {
- const { t } = useTranslation()
- const dispatch = useDispatch()
- const isLoading = useSelector((state) => state.jansKcLinkReducer.loading)
- SetTitle(t('titles.jans_kc_ink'))
-
- useEffect(() => {
- dispatch(getConfiguration())
- }, [])
-
- const tabNames = [
- {
- name: t('menus.basic_configuration'),
- path: '/jans-kc-link/basic-configuration',
- },
- {
- name: t('menus.inum_configuration'),
- path: '/jans-kc-link/inum-configuration',
- },
- {
- name: t('menus.sources'),
- path: '/jans-kc-link/sources',
- },
- {
- name: t('menus.target_configuration'),
- path: '/jans-kc-link/target-configuration',
- },
- {
- name: t('menus.keycloack_configuration'),
- path: '/jans-kc-link/keycloack-configuration',
- },
- ]
-
- const tabToShow = (tabName) => {
- switch (tabName) {
- case t('menus.basic_configuration'):
- return
- case t('menus.inum_configuration'):
- return
- case t('menus.sources'):
- return
- case t('menus.target_configuration'):
- return
- case t('menus.keycloack_configuration'):
- return
- }
- }
-
- return (
-
-
-
- {!isLoading && (
-
- )}
-
-
-
- )
-}
-
-export default JansKcLinkPage
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/components/JansKcSourceForm.js b/admin-ui/plugins/jans-kc-link/components/JansKcSourceForm.js
deleted file mode 100644
index b9cdd5cbf1..0000000000
--- a/admin-ui/plugins/jans-kc-link/components/JansKcSourceForm.js
+++ /dev/null
@@ -1,105 +0,0 @@
-import React, { useEffect } from 'react'
-import { useDispatch, useSelector } from 'react-redux'
-import { useLocation, useNavigate } from 'react-router'
-import {
- convertToStringArray,
- isStringsArray,
-} from 'Plugins/jans-link/components/SourceBackendServers/SourceBackendServerForm'
-import { buildPayload } from 'Utils/PermChecker'
-import { putConfiguration, toggleSavedFormFlag } from 'Plugins/jans-kc-link/redux/features/JansKcLinkSlice'
-import ConfigurationForm from './ConfigurationForm'
-import { useTranslation } from 'react-i18next'
-import applicationStyle from 'Routes/Apps/Gluu/styles/applicationstyle'
-import GluuLoader from 'Routes/Apps/Gluu/GluuLoader'
-import { Card, CardBody } from 'Components'
-import { getInitalValues, getValidationSchema } from 'Plugins/jans-kc-link/helper/index'
-import SetTitle from 'Utils/SetTitle'
-
-const JansKcSourceForm = () => {
- const navigate = useNavigate()
- const { t } = useTranslation()
- const dispatch = useDispatch()
- const sourceConfig = useLocation().state?.sourceConfig || {}
- const configuration = useSelector(
- (state) => state.jansKcLinkReducer.configuration
- )
- const savedForm = useSelector((state) => state.jansKcLinkReducer.savedForm)
- const loading = useSelector((state) => state.jansKcLinkReducer.loading)
- const viewOnly = useLocation().state?.viewOnly || false
-
- if (viewOnly) {
- SetTitle(t('menus.view_source'))
- } else if (sourceConfig?.configId) {
- SetTitle(t('menus.edit_source'))
- } else {
- SetTitle(t('menus.add_source'))
- }
-
- const handleSubmit = ({ userAction, userMessage, values }) => {
- const baseDNs = isStringsArray(values?.baseDNs || [])
- ? values.baseDNs
- : convertToStringArray(values?.baseDNs || [])
- const servers = isStringsArray(values?.servers || [])
- ? values?.servers
- : convertToStringArray(values?.servers || [])
-
- let payload
-
- if (!sourceConfig?.configId) {
- const sourceConfigs = [...(configuration?.sourceConfigs || [])]
- payload = [
- ...sourceConfigs,
- {
- ...values,
- baseDNs: baseDNs,
- servers: servers,
- },
- ]
- } else {
- payload = configuration.sourceConfigs?.map((config) => {
- return config.configId === sourceConfig.configId
- ? {
- ...config,
- ...values,
- baseDNs: baseDNs,
- servers: servers,
- }
- : config
- })
- }
- buildPayload(userAction, userMessage, {
- appConfiguration4: {
- ...configuration,
- sourceConfigs: payload,
- },
- })
-
- dispatch(putConfiguration({ action: userAction }))
- }
-
- useEffect(() => {
- if (savedForm) {
- navigate('/jans-kc-link/sources')
- }
-
- return () => {
- dispatch(toggleSavedFormFlag(false))
- }
- }, [savedForm])
-
- return (
-
-
-
-
-
-
-
- )
-}
-
-export default JansKcSourceForm
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/components/SharedFooter.js b/admin-ui/plugins/jans-kc-link/components/SharedFooter.js
deleted file mode 100644
index 014492b5f2..0000000000
--- a/admin-ui/plugins/jans-kc-link/components/SharedFooter.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import React from 'react'
-import { Row, Col } from 'Components'
-import GluuCommitFooter from 'Routes/Apps/Gluu/GluuCommitFooter'
-import GluuCommitDialog from 'Routes/Apps/Gluu/GluuCommitDialog'
-import PropTypes from 'prop-types'
-
-const SharedFooter = ({ disabled, toggle, modal, submitForm, formik, feature }) => {
- return (
- <>
- {!disabled && (
-
-
-
-
-
- )}
-
- >
- )
-}
-
-export default SharedFooter
-SharedFooter.propTypes = {
- disabled: PropTypes.bool.isRequired,
- toggle: PropTypes.func.isRequired,
- modal: PropTypes.bool.isRequired,
- submitForm: PropTypes.func.isRequired,
- formik: PropTypes.object.isRequired,
- feature: PropTypes.string
-}
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/components/Tabs/BasicConfiguration.js b/admin-ui/plugins/jans-kc-link/components/Tabs/BasicConfiguration.js
deleted file mode 100644
index 82441c9c07..0000000000
--- a/admin-ui/plugins/jans-kc-link/components/Tabs/BasicConfiguration.js
+++ /dev/null
@@ -1,497 +0,0 @@
-import React, { useState } from 'react'
-import { useTranslation } from 'react-i18next'
-import { useDispatch, useSelector } from 'react-redux'
-import * as Yup from 'yup'
-import { buildPayload, hasPermission, JANS_KC_LINK_WRITE } from 'Utils/PermChecker'
-import { isEmpty } from 'lodash'
-import { putConfiguration } from 'Plugins/jans-kc-link/redux/features/JansKcLinkSlice'
-import { useFormik } from 'formik'
-import { Row, Col, Form, FormGroup } from 'Components'
-import GluuToogleRow from 'Routes/Apps/Gluu/GluuToogleRow'
-import GluuInputRow from 'Routes/Apps/Gluu/GluuInputRow'
-import GluuLabel from 'Routes/Apps/Gluu/GluuLabel'
-import GluuProperties from 'Routes/Apps/Gluu/GluuProperties'
-import GluuSelectRow from 'Routes/Apps/Gluu/GluuSelectRow'
-import moment from 'moment/moment'
-import {
- convertToStringArray,
- isStringsArray,
-} from 'Plugins/jans-link/components/SourceBackendServers/SourceBackendServerForm'
-import SharedFooter from '../SharedFooter'
-import { adminUiFeatures } from 'Plugins/admin/helper/utils'
-
-const BasicConfiguration = () => {
- const { t } = useTranslation()
- const dispatch = useDispatch()
- const configuration = useSelector(
- (state) => state.jansKcLinkReducer.configuration
- )
- const permissions = useSelector((state) => state.authReducer.permissions)
- const disabled = !hasPermission(permissions, JANS_KC_LINK_WRITE)
- const userAction = {}
- const [modal, setModal] = useState(false)
- const toggle = () => {
- setModal(!modal)
- }
-
- const {
- keycloakLinkEnabled = false,
- ldapSearchSizeLimit = 25,
- customLdapFilter = '',
- keyAttributes = [],
- sourceAttributes = [],
- snapshotFolder = '',
- defaultInumServer = false,
- keepExternalPerson = false,
- useSearchLimit = false,
- allowPersonModification = false,
- metricReporterInterval = 0,
- metricReporterKeepDataDays = 0,
- cleanServiceInterval = 0,
- disableJdkLogger = false,
- useLocalCache = false,
- loggingLevel = '',
- keycloakLinkServerIpAddress = '',
- keycloakLinkPollingInterval = 0,
- keycloakLinkLastUpdate,
- keycloakLinkLastUpdateCount,
- keycloakLinkProblemCount,
- updateMethod = '',
- attributeMapping = []
- } = useSelector((state) => state.jansKcLinkReducer.configuration)
-
- const initialValues = {
- keycloakLinkEnabled,
- ldapSearchSizeLimit,
- customLdapFilter,
- keyAttributes,
- sourceAttributes,
- snapshotFolder,
- defaultInumServer,
- keepExternalPerson,
- useSearchLimit,
- allowPersonModification,
- metricReporterInterval,
- metricReporterKeepDataDays,
- cleanServiceInterval,
- disableJdkLogger,
- useLocalCache,
- loggingLevel,
- keycloakLinkServerIpAddress,
- keycloakLinkPollingInterval,
- keycloakLinkLastUpdate,
- keycloakLinkLastUpdateCount,
- keycloakLinkProblemCount,
- updateMethod,
- attributeMapping
- }
-
- const formik = useFormik({
- initialValues: initialValues,
- enableReinitialize: true,
- validationSchema: Yup.object({
- snapshotFolder: Yup.string().required(
- `${t('fields.snapshot_folder')} ${t('messages.is_required')}`
- ),
- }),
- onSubmit: () => {
- if (isEmpty(formik.errors)) {
- toggle()
- }
- },
- })
-
- const submitForm = (userMessage) => {
- toggle()
-
- buildPayload(userAction, userMessage, {
- appConfiguration4: {
- ...configuration,
- ...formik.values,
- sourceAttributes: isStringsArray(formik.values?.sourceAttributes || [])
- ? formik.values.sourceAttributes
- : convertToStringArray(formik.values?.sourceAttributes || []),
- keyAttributes: isStringsArray(formik.values.keyAttributes || [])
- ? formik.values.keyAttributes
- : convertToStringArray(formik.values?.keyAttributes || []),
- attributeMapping: formik.values.attributeMapping?.length
- ? formik.values.attributeMapping.map((attribute) => {
- return {
- source: attribute.source,
- destination: attribute.destination,
- }
- })
- : [],
- },
- })
-
- dispatch(putConfiguration({ action: userAction }))
- }
-
- return (
-
- )
-}
-
-export default BasicConfiguration
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/components/Tabs/InumConfiguration.js b/admin-ui/plugins/jans-kc-link/components/Tabs/InumConfiguration.js
deleted file mode 100644
index 1b901d9498..0000000000
--- a/admin-ui/plugins/jans-kc-link/components/Tabs/InumConfiguration.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import React from 'react'
-import ConfigurationForm from '../ConfigurationForm'
-import { buildPayload } from 'Utils/PermChecker'
-import { useDispatch, useSelector } from 'react-redux'
-import {
- convertToStringArray,
- isStringsArray,
-} from 'Plugins/jans-link/components/SourceBackendServers/SourceBackendServerForm'
-import { putConfiguration } from 'Plugins/jans-kc-link/redux/features/JansKcLinkSlice'
-import { useTranslation } from 'react-i18next'
-import { getInitalValues, getValidationSchema } from 'Plugins/jans-kc-link/helper/index'
-
-const InumConfiguration = () => {
- const { t } = useTranslation()
- const dispatch = useDispatch()
- const configuration = useSelector(
- (state) => state.jansKcLinkReducer.configuration
- )
- const { inumConfig = {} } = configuration
- const handleFormSubmission = ({ userAction, userMessage, values }) => {
- const baseDNs = isStringsArray(values?.baseDNs || [])
- ? values.baseDNs
- : convertToStringArray(values?.baseDNs || [])
- const servers = isStringsArray(values?.servers || [])
- ? values?.servers
- : convertToStringArray(values?.servers || [])
-
- buildPayload(userAction, userMessage, {
- appConfiguration4: {
- ...configuration,
- inumConfig: {
- ...values,
- servers: servers,
- baseDNs: baseDNs,
- },
- },
- })
-
- dispatch(putConfiguration({ action: userAction }))
- }
-
- return (
-
- )
-}
-
-export default InumConfiguration
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/components/Tabs/KeycloackConfiguration.js b/admin-ui/plugins/jans-kc-link/components/Tabs/KeycloackConfiguration.js
deleted file mode 100644
index e379223c12..0000000000
--- a/admin-ui/plugins/jans-kc-link/components/Tabs/KeycloackConfiguration.js
+++ /dev/null
@@ -1,166 +0,0 @@
-import { useFormik } from 'formik'
-import React, { useState } from 'react'
-import { useDispatch, useSelector } from 'react-redux'
-import { buildPayload, hasPermission, JANS_KC_LINK_WRITE } from 'Utils/PermChecker'
-import { putConfiguration } from 'Plugins/jans-kc-link/redux/features/JansKcLinkSlice'
-import { Col, Form, FormGroup } from 'Components'
-import GluuInputRow from 'Routes/Apps/Gluu/GluuInputRow'
-import SharedFooter from '../SharedFooter'
-import { adminUiFeatures } from 'Plugins/admin/helper/utils'
-
-const KeycloackConfiguration = () => {
- const dispatch = useDispatch()
- const configuration = useSelector(
- (state) => state.jansKcLinkReducer.configuration
- )
- const permissions = useSelector((state) => state.authReducer.permissions)
- const disabled = !hasPermission(permissions, JANS_KC_LINK_WRITE)
-
- const userAction = {}
- const [modal, setModal] = useState(false)
- const toggle = () => {
- setModal(!modal)
- }
-
- const { keycloakConfiguration = {} } = useSelector(
- (state) => state.jansKcLinkReducer.configuration
- )
-
- const {
- serverUrl = '',
- realm = '',
- clientId = '',
- clientSecret = '',
- grantType = '',
- username = '',
- password = '',
- } = keycloakConfiguration
-
- const initialValues = {
- keycloakConfiguration: {
- serverUrl,
- realm,
- clientId,
- clientSecret,
- grantType,
- username,
- password,
- },
- }
-
- const formik = useFormik({
- initialValues: initialValues,
- onSubmit: () => {
- toggle()
- },
- })
-
- const submitForm = (userMessage) => {
- toggle()
-
- buildPayload(userAction, userMessage, {
- appConfiguration4: {
- ...configuration,
- ...formik.values,
- },
- })
-
- dispatch(putConfiguration({ action: userAction }))
- }
-
- return (
-
- )
-}
-
-export default KeycloackConfiguration
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/components/Tabs/Sources.js b/admin-ui/plugins/jans-kc-link/components/Tabs/Sources.js
deleted file mode 100644
index 5d43a80b27..0000000000
--- a/admin-ui/plugins/jans-kc-link/components/Tabs/Sources.js
+++ /dev/null
@@ -1,154 +0,0 @@
-import React, { useCallback, useContext, useState } from 'react'
-import { ThemeContext } from 'Context/theme/themeContext'
-import { useDispatch, useSelector } from 'react-redux'
-import applicationStyle from 'Routes/Apps/Gluu/styles/applicationstyle'
-import MaterialTable from '@material-table/core'
-import { Paper } from '@mui/material'
-import { DeleteOutlined } from '@mui/icons-material'
-import { useNavigate } from 'react-router'
-import getThemeColor from 'Context/theme/config'
-import { useTranslation } from 'react-i18next'
-import GluuViewWrapper from 'Routes/Apps/Gluu/GluuViewWrapper'
-import GluuDialog from 'Routes/Apps/Gluu/GluuDialog'
-import { putConfiguration } from 'Plugins/jans-kc-link/redux/features/JansKcLinkSlice'
-import { buildPayload, hasPermission, JANS_KC_LINK_WRITE, JANS_KC_LINK_READ } from 'Utils/PermChecker'
-import { adminUiFeatures } from 'Plugins/admin/helper/utils'
-
-const Sources = () => {
- const { t } = useTranslation()
- const theme = useContext(ThemeContext)
- const permissions = useSelector((state) => state.authReducer.permissions)
- const navigate = useNavigate()
- const selectedTheme = theme.state.theme
- const themeColors = getThemeColor(selectedTheme)
- const bgThemeColor = { background: themeColors.background }
- let actions = []
- const dispatch = useDispatch()
- const configuration = useSelector(
- (state) => state.jansKcLinkReducer.configuration
- )
- const userAction = {}
- const [item, setItem] = useState({})
- const [modal, setModal] = useState(false)
- const toggle = () => setModal(!modal)
- const { sourceConfigs = [] } = useSelector(
- (state) => state.jansKcLinkReducer.configuration
- )
- const loading = useSelector((state) => state.ldapReducer.loading)
-
- const columns = [
- { field: 'configId', title: `${t('fields.name')}` },
- { field: 'enabled', title: `${t('fields.enabled')}` },
- ]
-
- const navigateToEdit = (rowData) => {
- delete rowData?.tableData
- navigate('/jans-kc-link/sources/edit', {
- state: { sourceConfig: rowData },
- })
- }
-
- const deleteConfig = (data) => {
- setItem(data)
- toggle()
- }
-
- const navigateToAdd = () => navigate('/jans-kc-link/sources/add')
-
- const navigateToView = (rowData) => navigate('/jans-kc-link/sources/view', { state: { sourceConfig: rowData, viewOnly: true } })
-
- actions.push((rowData) => ({
- icon: 'edit',
- iconProps: {
- id: 'editClient' + rowData.configId,
- },
- tooltip: `${t('messages.edit_configuration')}`,
- onClick: (event, rowData) => navigateToEdit(rowData),
- disabled: !hasPermission(permissions, JANS_KC_LINK_WRITE),
- }))
-
- actions.push((rowData) => ({
- icon: DeleteIcon,
- iconProps: {
- color: 'secondary',
- id: 'deleteClient' + rowData.configId,
- },
- tooltip: `${t('messages.delete_configuration')}`,
- onClick: (event, rowData) => deleteConfig(rowData),
- disabled: !hasPermission(permissions, JANS_KC_LINK_WRITE),
- }))
-
- actions.push({
- icon: 'add',
- tooltip: `${t('messages.add_configuration')}`,
- iconProps: { color: 'primary' },
- isFreeAction: true,
- onClick: () => navigateToAdd(),
- disabled: !hasPermission(permissions, JANS_KC_LINK_WRITE),
- })
-
- actions.push({
- icon: 'visibility',
- tooltip: `${t('messages.view_configuration')}`,
- onClick: (event, rowData) => navigateToView(rowData),
- disabled: !hasPermission(permissions, JANS_KC_LINK_READ),
- })
-
- const PaperContainer = useCallback(
- (props) => ,
- []
- )
-
- const DeleteIcon = useCallback((props) => , [])
-
- function onDeletionConfirmed(message) {
- const sourceConfigs = configuration.sourceConfigs?.filter(
- (config) => config.configId !== item.configId
- )
- buildPayload(userAction, message, {
- appConfiguration4: {
- ...configuration,
- sourceConfigs: sourceConfigs,
- },
- })
- dispatch(putConfiguration({ action: userAction }))
- toggle()
- }
-
- return (
- <>
-
-
-
-
- >
- )
-}
-
-export default Sources
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/components/Tabs/TargetConfiguration.js b/admin-ui/plugins/jans-kc-link/components/Tabs/TargetConfiguration.js
deleted file mode 100644
index 2ab361faee..0000000000
--- a/admin-ui/plugins/jans-kc-link/components/Tabs/TargetConfiguration.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import React from 'react'
-import ConfigurationForm from '../ConfigurationForm'
-import { buildPayload } from 'Utils/PermChecker'
-import { useDispatch, useSelector } from 'react-redux'
-import {
- convertToStringArray,
- isStringsArray,
-} from 'Plugins/jans-link/components/SourceBackendServers/SourceBackendServerForm'
-import { putConfiguration } from 'Plugins/jans-kc-link/redux/features/JansKcLinkSlice'
-import { useTranslation } from 'react-i18next'
-import { getInitalValues, getValidationSchema } from 'Plugins/jans-kc-link/helper/index'
-
-const TargetConfiguration = () => {
- const { t } = useTranslation()
- const dispatch = useDispatch()
- const configuration = useSelector(
- (state) => state.jansKcLinkReducer.configuration
- )
- const handleFormSubmission = ({ userAction, userMessage, values }) => {
- const baseDNs = isStringsArray(values?.baseDNs || [])
- ? values.baseDNs
- : convertToStringArray(values?.baseDNs || [])
- const servers = isStringsArray(values?.servers || [])
- ? values?.servers
- : convertToStringArray(values?.servers || [])
-
- buildPayload(userAction, userMessage, {
- appConfiguration4: {
- ...configuration,
- targetConfig: {
- ...values,
- servers: servers,
- baseDNs: baseDNs,
- },
- },
- })
-
- dispatch(putConfiguration({ action: userAction }))
- }
-
- const { targetConfig = {} } = configuration
-
- return (
-
- )
-}
-
-export default TargetConfiguration
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/helper/index.js b/admin-ui/plugins/jans-kc-link/helper/index.js
deleted file mode 100644
index fbce28a0ba..0000000000
--- a/admin-ui/plugins/jans-kc-link/helper/index.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import * as Yup from 'yup'
-
-export const getInitalValues = (values) => {
- const {
- bindDN = '',
- configId = '',
- bindPassword,
- maxConnections = 0,
- baseDNs = [],
- servers = [],
- useAnonymousBind = false,
- useSSL = false,
- enabled = false,
- localPrimaryKey = '',
- primaryKey = '',
- } = values
-
- return {
- bindDN,
- configId,
- bindPassword,
- maxConnections,
- baseDNs,
- servers,
- useAnonymousBind,
- useSSL,
- enabled,
- localPrimaryKey,
- primaryKey,
- }
-}
-
-export const getValidationSchema = (t) => {
- return Yup.object({
- configId: Yup.string()
- .min(2, 'Mininum 2 characters')
- .required(`${t('fields.name')} ${t('messages.is_required')}`),
- bindDN: Yup.string()
- .min(2, 'Mininum 2 characters')
- .required(`${t('fields.bind_dn')} ${t('messages.is_required')}`),
- maxConnections: Yup.string().required(
- `${t('fields.max_connections')} ${t('messages.is_required')}`
- ),
- bindPassword: Yup.string().required(
- `${t('fields.bind_password')} ${t('messages.is_required')}`
- ),
- servers: Yup.array().min(
- 1,
- `${t('fields.server_port')} ${t('messages.is_required')}`
- ),
- baseDNs: Yup.array().min(
- 1,
- `${t('fields.base_dns')} ${t('messages.is_required')}`
- ),
- })
-}
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/plugin-metadata.js b/admin-ui/plugins/jans-kc-link/plugin-metadata.js
deleted file mode 100644
index 4e8c8e656a..0000000000
--- a/admin-ui/plugins/jans-kc-link/plugin-metadata.js
+++ /dev/null
@@ -1,69 +0,0 @@
-import { JANS_KC_LINK_READ, JANS_KC_LINK_WRITE } from 'Utils/PermChecker'
-import JansKcLinkPage from './components/JansKcLinkPage'
-import jansKcLinkSaga from './redux/sagas/JansKcLinkSaga'
-import jansKcLinkReducer from './redux/features/JansKcLinkSlice'
-import JansKcSourceForm from './components/JansKcSourceForm'
-
-const PLUGIN_BASE_PATH = '/jans-kc-link'
-
-const pluginMetadata = {
- menus: [
- {
- title: 'menus.jans_kc_link',
- icon: 'jans_kc_link',
- path: PLUGIN_BASE_PATH,
- permission: JANS_KC_LINK_READ,
- },
- ],
- routes: [
- {
- component: JansKcLinkPage,
- path: PLUGIN_BASE_PATH,
- permission: JANS_KC_LINK_READ,
- },
- {
- component: JansKcLinkPage,
- path: PLUGIN_BASE_PATH + '/basic-configuration',
- permission: JANS_KC_LINK_READ,
- },
- {
- component: JansKcLinkPage,
- path: PLUGIN_BASE_PATH + '/inum-configuration',
- permission: JANS_KC_LINK_READ,
- },
- {
- component: JansKcLinkPage,
- path: PLUGIN_BASE_PATH + '/sources',
- permission: JANS_KC_LINK_READ,
- },
- {
- component: JansKcSourceForm,
- path: PLUGIN_BASE_PATH + '/sources/add',
- permission: JANS_KC_LINK_WRITE,
- },
- {
- component: JansKcSourceForm,
- path: PLUGIN_BASE_PATH + '/sources/edit',
- permission: JANS_KC_LINK_WRITE,
- },
- {
- component: JansKcSourceForm,
- path: PLUGIN_BASE_PATH + '/sources/view',
- permission: JANS_KC_LINK_READ,
- },
- {
- component: JansKcLinkPage,
- path: PLUGIN_BASE_PATH + '/target-configuration',
- permission: JANS_KC_LINK_READ,
- },
- {
- component: JansKcLinkPage,
- path: PLUGIN_BASE_PATH + '/keycloack-configuration',
- permission: JANS_KC_LINK_READ,
- },
- ],
- reducers: [{ name: 'jansKcLinkReducer', reducer: jansKcLinkReducer }],
- sagas: [jansKcLinkSaga()],
-}
-
-export default pluginMetadata
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/redux/api/JansKcLinkApi.js b/admin-ui/plugins/jans-kc-link/redux/api/JansKcLinkApi.js
deleted file mode 100644
index bd59f03f6a..0000000000
--- a/admin-ui/plugins/jans-kc-link/redux/api/JansKcLinkApi.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { handleResponse } from 'Utils/ApiUtils'
-
-export default class JansKcLinkApi {
- constructor(api) {
- this.api = api
- }
-
- getKcLinkProperties = () => {
- return new Promise((resolve, reject) => {
- this.api.getKcLinkProperties((error, data) => {
- handleResponse(error, reject, resolve, data)
- })
- })
- }
-
- updateKcLinkConfig = (input) => {
- return new Promise((resolve, reject) => {
- this.api.putKcLinkProperties(input, (error, data) => {
- handleResponse(error, reject, resolve, data)
- })
- })
- }
-}
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/redux/features/JansKcLinkSlice.js b/admin-ui/plugins/jans-kc-link/redux/features/JansKcLinkSlice.js
deleted file mode 100644
index 877b392521..0000000000
--- a/admin-ui/plugins/jans-kc-link/redux/features/JansKcLinkSlice.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import reducerRegistry from 'Redux/reducers/ReducerRegistry'
-import { createSlice } from '@reduxjs/toolkit'
-
-const initialState = {
- configuration: {},
- loading: true,
- savedForm: false,
-}
-
-const jansKcLink = createSlice({
- name: 'jansKcLink',
- initialState: initialState,
- reducers: {
- getConfiguration: (state) => {
- state.loading = true
- },
- getConfigurationResponse: (state, action) => {
- state.configuration = action.payload ? action.payload : {}
- state.loading = false
- },
- putConfiguration: (state) => {
- state.loading = true
- },
- setLoading: (state, action) => {
- state.loading = action.payload
- },
- toggleSavedFormFlag: (state, action) => {
- state.savedForm = action.payload || false
- },
- },
-})
-
-export const {
- getConfiguration,
- getConfigurationResponse,
- putConfiguration,
- toggleSavedFormFlag,
- setLoading,
-} = jansKcLink.actions
-
-export default jansKcLink.reducer
-
-reducerRegistry.register('jansKcLinkReducer', jansKcLink.reducer)
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-kc-link/redux/sagas/JansKcLinkSaga.js b/admin-ui/plugins/jans-kc-link/redux/sagas/JansKcLinkSaga.js
deleted file mode 100644
index e212463c47..0000000000
--- a/admin-ui/plugins/jans-kc-link/redux/sagas/JansKcLinkSaga.js
+++ /dev/null
@@ -1,96 +0,0 @@
-import { initAudit } from 'Redux/sagas/SagaUtils'
-import { getClient } from 'Redux/api/base'
-import { isFourZeroOneError, addAdditionalData } from 'Utils/TokenController'
-import {
- call,
- all,
- put,
- fork,
- takeLatest,
- select,
- takeEvery,
-} from 'redux-saga/effects'
-import { postUserAction } from 'Redux/api/backend-api'
-import { updateToast } from 'Redux/features/toastSlice'
-import JansKcLinkApi from '../api/JansKcLinkApi'
-import {
- getConfigurationResponse,
- toggleSavedFormFlag,
- setLoading
-} from '../features/JansKcLinkSlice'
-import { getAPIAccessToken } from 'Redux/features/authSlice'
-import { UPDATE, FETCH } from '../../../../app/audit/UserActionType'
-import { triggerWebhook } from 'Plugins/admin/redux/sagas/WebhookSaga'
-
-const JansConfigApi = require('jans_config_api')
-
-export const JANS_KC_LINK = 'jans-kc-link'
-
-function* newFunction() {
- const token = yield select((state) => state.authReducer.token.access_token)
- const issuer = yield select((state) => state.authReducer.issuer)
- const api = new JansConfigApi.KCLinkConfigurationApi(
- getClient(JansConfigApi, token, issuer)
- )
- return new JansKcLinkApi(api)
-}
-
-export function* getKcConfiguration() {
- const audit = yield* initAudit()
- try {
- addAdditionalData(audit, FETCH, JANS_KC_LINK, {})
- const jansKcApi = yield* newFunction()
- const data = yield call(jansKcApi.getKcLinkProperties)
- yield put(getConfigurationResponse(data))
- yield call(postUserAction, audit)
- yield put(toggleSavedFormFlag(false))
- return data
- } catch (e) {
- yield put(getConfigurationResponse(null))
- yield put(toggleSavedFormFlag(false))
- if (isFourZeroOneError(e)) {
- const jwt = yield select((state) => state.authReducer.userinfo_jwt)
- yield put(getAPIAccessToken(jwt))
- }
- return e
- }
-}
-
-export function* editJansKcLinkConfig({ payload }) {
- const audit = yield* initAudit()
- addAdditionalData(audit, UPDATE, JANS_KC_LINK, payload)
- try {
- const jansKcApi = yield* newFunction()
- const data = yield call(
- jansKcApi.updateKcLinkConfig,
- payload.action.action_data
- )
- yield put(updateToast(true, 'success'))
- yield put(getConfigurationResponse(data))
- yield put(toggleSavedFormFlag(true))
- yield call(postUserAction, audit)
- yield* triggerWebhook({ payload: { createdFeatureValue: data } })
- return data
- } catch (e) {
- yield put(setLoading(false))
- yield put(toggleSavedFormFlag(false))
- yield put(updateToast(true, 'error'))
- if (isFourZeroOneError(e)) {
- const jwt = yield select((state) => state.authReducer.userinfo_jwt)
- yield put(getAPIAccessToken(jwt))
- }
- return e
- }
-}
-
-export function* watchGetJansKcConfig() {
- yield takeEvery('jansKcLink/getConfiguration', getKcConfiguration)
-}
-
-export function* watchPutJansKcConfig() {
- yield takeLatest('jansKcLink/putConfiguration', editJansKcLinkConfig)
-}
-
-export default function* rootSaga() {
- yield all([fork(watchGetJansKcConfig), fork(watchPutJansKcConfig)])
-}
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-link/__tests__/api/JansLink.test.js b/admin-ui/plugins/jans-link/__tests__/api/JansLink.test.js
deleted file mode 100644
index ea6047e145..0000000000
--- a/admin-ui/plugins/jans-link/__tests__/api/JansLink.test.js
+++ /dev/null
@@ -1,100 +0,0 @@
-import { combineReducers } from '@reduxjs/toolkit'
-import {
- authReducerInit,
- beforeAllAsync,
-} from 'Plugins/jans-link/__tests__/api/setup.test'
-import {
- getCacheRefreshSaga,
- editCacheConfig,
-} from 'Plugins/jans-link/redux/sagas/CacheRefreshSaga'
-import cacheRefreshReducer from 'Plugins/jans-link/redux/features/CacheRefreshSlice'
-import { expectSaga } from 'redux-saga-test-plan'
-import authReducer from 'Redux/features/authSlice'
-import { log } from 'console'
-
-let initialState
-
-const formInitState = (token, issuer) => {
- initialState = {
- authReducer: authReducerInit(token, issuer),
- cacheRefreshReducer: { configuration: {} },
- }
-}
-
-beforeAll(async () => {
- try {
- await beforeAllAsync(formInitState)
- } catch (error) {
- log(error.message)
- }
-})
-
-const rootReducer = combineReducers({
- authReducer,
- cacheRefreshReducer,
-})
-
-describe('fetch & update jans-link configuration', () => {
- let configurations
- it('should GET current jans-link configuration', async () => {
- const result = await expectSaga(getCacheRefreshSaga)
- .withReducer(rootReducer, initialState)
- .run(false)
-
- expect(result.returnValue instanceof Error).toBe(false)
- if (!(result.returnValue instanceof Error)) {
- configurations = result.returnValue
- expect(result.returnValue).toEqual(result.storeState.cacheRefreshReducer.configuration)
- }
- })
-
- it('should Update Polling interval & Search size limit value in Dynaminc Config', async () => {
- // pollingInterval
- // ldapSearchSizeLimit
- if (configurations) {
- const result = await expectSaga(editCacheConfig, {
- payload: {
- action: {
- action_data: {
- appConfiguration2: {
- ...configurations,
- pollingInterval: 100,
- ldapSearchSizeLimit: 80,
- },
- },
- },
- },
- })
- .withReducer(rootReducer, initialState)
- .run(false)
-
- expect(result.returnValue instanceof Error).toBe(false)
- } else {
- throw new Error('skipping tests, no configurations found from GET!')
- }
- })
-
- it('should Update with original value', async () => {
- if (configurations) {
- const result = await expectSaga(editCacheConfig, {
- payload: {
- action: {
- action_data: {
- appConfiguration2: {
- ...configurations,
- pollingInterval: configurations.pollingInterval,
- ldapSearchSizeLimit: configurations.ldapSearchSizeLimit,
- },
- },
- },
- },
- })
- .withReducer(rootReducer, initialState)
- .run(false)
-
- expect(result.returnValue instanceof Error).toBe(false)
- } else {
- throw new Error('skipping tests, no configurations found from GET!')
- }
- })
-})
diff --git a/admin-ui/plugins/jans-link/__tests__/api/setup.test.js b/admin-ui/plugins/jans-link/__tests__/api/setup.test.js
deleted file mode 100644
index bbe4aa19f3..0000000000
--- a/admin-ui/plugins/jans-link/__tests__/api/setup.test.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import {
- authReducerInit,
- beforeAllAsync,
-} from 'Plugins/auth-server/__tests__/api/setup.test'
-
-export { authReducerInit, beforeAllAsync }
diff --git a/admin-ui/plugins/jans-link/components/CacheRefresh/BindPasswordModal.js b/admin-ui/plugins/jans-link/components/CacheRefresh/BindPasswordModal.js
deleted file mode 100644
index 0f7540a17b..0000000000
--- a/admin-ui/plugins/jans-link/components/CacheRefresh/BindPasswordModal.js
+++ /dev/null
@@ -1,109 +0,0 @@
-import React, { useContext } from "react";
-import { useTranslation } from "react-i18next";
-import {
- Button,
- Modal,
- ModalHeader,
- ModalBody,
- ModalFooter,
- Row,
-} from "reactstrap";
-import applicationstyle from "Routes/Apps/Gluu/styles/applicationstyle";
-import { ThemeContext } from "Context/theme/themeContext";
-import GluuInputRow from "Routes/Apps/Gluu/GluuInputRow";
-import { FormGroup } from "Components";
-import { useFormik } from "formik";
-
-const BindPasswordModal = ({ handler, isOpen, handleChangePassword }) => {
- const { t } = useTranslation();
- const theme = useContext(ThemeContext);
- const selectedTheme = theme.state.theme;
- const formik = useFormik({
- initialValues: {
- new_password: "",
- confirm_new_password: "",
- isValid: true,
- errorMessage: "",
- },
- setFieldValue: (field) => {
- delete values[field];
- },
- });
-
- const handleSetNewPassword = () => {
- if (formik.values.new_password !== formik.values.confirm_new_password) {
- formik.setFieldValue(
- "errorMessage",
- `${t("messages.both_password_should_match")}.`
- );
- formik.setFieldValue("isValid", false);
- return;
- }
- handler();
- handleChangePassword(formik.values.new_password);
- };
-
- return (
-
-
-
- {t("titles.change_backend_bind_password")}
-
-
-
-
-
-
-
-
-
-
- {!formik.values.isValid && (
- {formik.values.errorMessage}
- )}
-
-
-
-
-
-
-
- );
-};
-
-export default BindPasswordModal;
diff --git a/admin-ui/plugins/jans-link/components/CacheRefresh/JansLinkPage.js b/admin-ui/plugins/jans-link/components/CacheRefresh/JansLinkPage.js
deleted file mode 100644
index 4a40dcc713..0000000000
--- a/admin-ui/plugins/jans-link/components/CacheRefresh/JansLinkPage.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import React, { useEffect } from "react";
-import SetTitle from "Utils/SetTitle";
-import GluuLoader from "Routes/Apps/Gluu/GluuLoader";
-import { Card, CardBody } from "Components";
-import GluuTabs from "Routes/Apps/Gluu/GluuTabs";
-import ConfigurationTab from "../Tabs/ConfigurationTab";
-import CustomerBackendKeyTab from "../Tabs/CustomerBackendKeyTab";
-import SourceBackendServersTab from "../Tabs/SourceBackendServersTab";
-import InumDBServerTab from "../Tabs/InumDBServerTab";
-import applicationStyle from "Routes/Apps/Gluu/styles/applicationstyle";
-import { useDispatch, useSelector } from "react-redux";
-import { getCacheRefreshConfiguration } from "Plugins/jans-link/redux/features/CacheRefreshSlice";
-import { useTranslation } from "react-i18next";
-
-const JansLinkPage = () => {
- const { t } = useTranslation();
- const dispatch = useDispatch();
- const isLoading = useSelector((state) => state.cacheRefreshReducer.loading);
- SetTitle(t("titles.jans_ink"));
-
- useEffect(() => {
- dispatch(getCacheRefreshConfiguration());
- }, []);
-
- const tabNames = [
- { name: t("menus.configuration"), path: '/jans-link/configuration' },
- { name: t("menus.customer_backend_key_attributes"), path: '/jans-link/customer-backend-key-attributes' },
- { name: t("menus.source_backend_ldap_servers"), path: '/jans-link/source-backend-ldap-servers' },
- { name: t("menus.inum_db_server"), path: '/jans-link/inum-db-server' },
- ];
-
- const tabToShow = (tabName) => {
- switch (tabName) {
- case t("menus.configuration"):
- return ;
- case t("menus.customer_backend_key_attributes"):
- return ;
- case t("menus.source_backend_ldap_servers"):
- return ;
- case t("menus.inum_db_server"):
- return ;
- }
- };
-
- return (
-
-
-
-
- {!isLoading && (
-
- )}
-
-
-
-
- );
-};
-
-export default JansLinkPage;
diff --git a/admin-ui/plugins/jans-link/components/CacheRefresh/JansLinkPage.test.js b/admin-ui/plugins/jans-link/components/CacheRefresh/JansLinkPage.test.js
deleted file mode 100644
index 090e22860d..0000000000
--- a/admin-ui/plugins/jans-link/components/CacheRefresh/JansLinkPage.test.js
+++ /dev/null
@@ -1,110 +0,0 @@
-import React from "react";
-import {
- render,
- screen,
- waitFor,
-} from "@testing-library/react";
-import AppTestWrapper from "Routes/Apps/Gluu/Tests/Components/AppTestWrapper.test";
-import JansLinkPage from "./JansLinkPage";
-import { t } from "i18next";
-import { Provider } from "react-redux";
-import { combineReducers, createStore } from "redux";
-import userEvent from "@testing-library/user-event";
-
-const cachRefreshState = {
- loading: false,
- configuration: {
- updateMethod: null,
- snapshotFolder: null,
- snapshotMaxCount: null,
- ldapSearchSizeLimit: null,
- keepExternalPerson: null,
- serverIpAddress: null,
- pollingInterval: null,
- linkEnabled: null,
- attributeMapping: [],
- problemCount: null,
- lastUpdateCount: null,
- },
-};
-
-const ldapReducer = {
- loading: false
-}
-
-const store = createStore(
- combineReducers({
- noReducer: (state = {}) => state,
- cacheRefreshReducer: (state = cachRefreshState) => state,
- ldapReducer: (state = ldapReducer) => state
- })
-);
-
-const Wrapper = ({ children }) => (
-
- {children}
-
-);
-
-const pageRenderSetup = () => {
- render(, {
- wrapper: Wrapper,
- });
-};
-
-it("Should render cache refresh management page properly", () => {
- render(, {
- wrapper: Wrapper,
- });
-
- const cacheRefreshLink = screen.getByText(`${t("menus.configuration")}`);
- expect(cacheRefreshLink).toBeInTheDocument();
-
- const customerBackendKeyAttributesLink = screen.getByText(
- `${t("menus.customer_backend_key_attributes")}`
- );
- expect(customerBackendKeyAttributesLink).toBeInTheDocument();
-
- const inumDbServerLink = screen.getByText(`${t("menus.inum_db_server")}`);
- expect(inumDbServerLink).toBeInTheDocument();
-
- const sourceBackendLdapServersLink = screen.getByText(
- `${t("menus.source_backend_ldap_servers")}`
- );
- expect(sourceBackendLdapServersLink).toBeInTheDocument();
-});
-
-it("Should display change password modal", async () => {
- render(, {
- wrapper: Wrapper,
- });
-
- const sourceBackendLdapServersLink = screen.getByText(
- `${t("menus.source_backend_ldap_servers")}`
- );
- expect(sourceBackendLdapServersLink).toBeInTheDocument();
- userEvent.click(sourceBackendLdapServersLink);
-
- await waitFor(async () => {
- const addSourceServerBtn = screen.getByText("Add source LDAP server", {
- exact: false,
- });
- expect(addSourceServerBtn).toBeInTheDocument();
- userEvent.click(addSourceServerBtn);
-
- await waitFor(async () => {
- const changePasswordBtn = screen.getByText("Change Bind Password", {
- exact: false,
- });
- expect(changePasswordBtn).toBeInTheDocument();
- userEvent.click(changePasswordBtn);
- await waitFor(async () => {
- expect(
- screen.getByTestId("Change Backend Bind Password", {
- exact: false,
- })
- ).toBeInTheDocument();
- });
- });
- });
-});
diff --git a/admin-ui/plugins/jans-link/components/SourceBackendServers/SourceBackendServerForm.js b/admin-ui/plugins/jans-link/components/SourceBackendServers/SourceBackendServerForm.js
deleted file mode 100644
index b010dc39fc..0000000000
--- a/admin-ui/plugins/jans-link/components/SourceBackendServers/SourceBackendServerForm.js
+++ /dev/null
@@ -1,407 +0,0 @@
-import React, { useContext, useEffect, useState } from 'react'
-import { buildPayload } from 'Utils/PermChecker'
-import {
- testLdap,
- resetTestLdap,
-} from 'Plugins/services/redux/features/ldapSlice'
-import { updateToast } from 'Redux/features/toastSlice'
-import { ThemeContext } from 'Context/theme/themeContext'
-import { useDispatch, useSelector } from 'react-redux'
-import { useFormik } from 'formik'
-import { Row, Col, Form, FormGroup, Button, Card, CardBody } from 'Components'
-import GluuProperties from 'Routes/Apps/Gluu/GluuProperties'
-import GluuLabel from 'Routes/Apps/Gluu/GluuLabel'
-import GluuInputRow from 'Routes/Apps/Gluu/GluuInputRow'
-import { Box } from '@mui/material'
-import BindPasswordModal from '../CacheRefresh/BindPasswordModal'
-import GluuToogleRow from 'Routes/Apps/Gluu/GluuToogleRow'
-import * as Yup from 'yup'
-import GluuCommitFooter from 'Routes/Apps/Gluu/GluuCommitFooter'
-import { isEmpty } from 'lodash'
-import {
- putCacheRefreshConfiguration,
- toggleSavedFormFlag,
-} from 'Plugins/jans-link/redux/features/CacheRefreshSlice'
-import { useTranslation } from 'react-i18next'
-import { useLocation, useNavigate } from 'react-router'
-import GluuCommitDialog from 'Routes/Apps/Gluu/GluuCommitDialog'
-import applicationStyle from 'Routes/Apps/Gluu/styles/applicationstyle'
-import GluuLoader from 'Routes/Apps/Gluu/GluuLoader'
-
-export const isStringsArray = (arr) => arr.every((i) => typeof i === 'string')
-export const convertToStringArray = (arr) => {
- return arr.map((item) => item.value)
-}
-
-const SourceBackendServerForm = () => {
- const sourceConfig = useLocation().state?.sourceConfig
- const navigate = useNavigate()
- const { t } = useTranslation()
- const theme = useContext(ThemeContext)
- const selectedTheme = theme.state.theme
- const cacheRefreshConfiguration = useSelector(
- (state) => state.cacheRefreshReducer.configuration
- )
- const loading = useSelector((state) => state.cacheRefreshReducer.loading)
- const loadingTest = useSelector((state) => state.ldapReducer.loading)
- const savedForm = useSelector((state) => state.cacheRefreshReducer.savedForm)
- const [password, setPassword] = useState(sourceConfig?.bindPassword || null)
- const userAction = {}
- const { testStatus } = useSelector((state) => state.ldapReducer)
- const [testRunning, setTestRunning] = useState(false)
- const dispatch = useDispatch()
- const [modal, setModal] = useState(false)
- const toggle = () => {
- setModal(!modal)
- }
-
- const [auditModal, setAuditModal] = useState(false)
- const toggleAudit = () => {
- setAuditModal(!auditModal)
- }
-
- const initialValues = {
- sourceConfigs: {
- ...sourceConfig,
- servers: sourceConfig?.servers || [],
- baseDNs: sourceConfig?.baseDNs || [],
- bindPassword: sourceConfig?.bindPassword || null,
- configId: sourceConfig?.configId || '',
- bindDN: sourceConfig?.bindDN || '',
- maxConnections: sourceConfig?.maxConnections || null,
- enabled: sourceConfig?.enabled || false,
- },
- }
-
- const validationSchema = Yup.object({
- sourceConfigs: Yup.object().shape({
- configId: Yup.string()
- .min(2, 'Mininum 2 characters')
- .required(`${t('fields.name')} ${t('messages.is_required')}`),
- bindDN: Yup.string()
- .min(2, 'Mininum 2 characters')
- .required(`${t('fields.bind_dn')} ${t('messages.is_required')}`),
- maxConnections: Yup.string().required(
- `${t('fields.max_connections')} ${t('messages.is_required')}`
- ),
- servers: Yup.array().min(
- 1,
- `${t('fields.server_port')} ${t('messages.is_required')}`
- ),
- baseDNs: Yup.array().min(
- 1,
- `${t('fields.base_dns')} ${t('messages.is_required')}`
- ),
- }),
- })
-
- const handleChangePassword = (updatedPassword) => {
- setPassword(updatedPassword)
- }
-
- function checkLdapConnection() {
- const testPromise = new Promise(function (resolve, reject) {
- dispatch(resetTestLdap())
- resolve()
- })
-
- testPromise.then(() => {
- setTestRunning(true)
- dispatch(testLdap({ data: formik.values.sourceConfigs }))
- })
- }
-
- useEffect(() => {
- if (testStatus === null || !testRunning) {
- return
- }
- if (testStatus) {
- dispatch(
- updateToast(true, 'success', `${t('messages.ldap_connection_success')}`)
- )
- } else {
- dispatch(
- updateToast(true, 'error', `${t('messages.ldap_connection_error')}`)
- )
- }
- }, [testStatus])
-
- const submitForm = (userMessage) => {
- toggleAudit()
- const baseDNs = isStringsArray(formik.values.sourceConfigs.baseDNs || [])
- ? formik.values.sourceConfigs.baseDNs
- : convertToStringArray(formik.values?.sourceConfigs.baseDNs || [])
- const servers = isStringsArray(formik.values.sourceConfigs.servers || [])
- ? formik.values.sourceConfigs.servers
- : convertToStringArray(formik.values?.sourceConfigs.servers || [])
-
- let payload
-
- if (!sourceConfig?.configId) {
- const sourceConfigs = [...(cacheRefreshConfiguration.sourceConfigs || [])]
- payload = [
- ...sourceConfigs,
- {
- ...formik.values.sourceConfigs,
- baseDNs: baseDNs,
- servers: servers,
- bindPassword: password,
- },
- ]
- } else {
- payload = cacheRefreshConfiguration.sourceConfigs?.map((config) => {
- return config.configId === sourceConfig.configId
- ? {
- ...config,
- ...formik.values.sourceConfigs,
- baseDNs: baseDNs,
- servers: servers,
- bindPassword: password,
- }
- : config
- })
- }
-
- buildPayload(userAction, userMessage, {
- appConfiguration2: {
- ...cacheRefreshConfiguration,
- sourceConfigs: payload,
- },
- })
-
- dispatch(putCacheRefreshConfiguration({ action: userAction }))
- toggleAudit()
- }
-
- const formik = useFormik({
- initialValues: initialValues,
- validationSchema: validationSchema,
- onSubmit: (data) => {
- if (isEmpty(formik.errors)) {
- toggleAudit()
- }
- },
- })
-
- useEffect(() => {
- if (savedForm) {
- navigate('/jans-link/source-backend-ldap-servers')
- }
-
- return () => {
- dispatch(toggleSavedFormFlag(false))
- }
- }, [savedForm])
-
- return (
- <>
-
-
-
-
-
-
-
-
- >
- )
-}
-
-export default SourceBackendServerForm
diff --git a/admin-ui/plugins/jans-link/components/Tabs/ConfigurationTab.js b/admin-ui/plugins/jans-link/components/Tabs/ConfigurationTab.js
deleted file mode 100644
index 25aa85c012..0000000000
--- a/admin-ui/plugins/jans-link/components/Tabs/ConfigurationTab.js
+++ /dev/null
@@ -1,314 +0,0 @@
-import React, { useState } from 'react'
-import { useDispatch, useSelector } from 'react-redux'
-import { useFormik } from 'formik'
-import { Row, Col, Form, FormGroup } from 'Components'
-import GluuProperties from 'Routes/Apps/Gluu/GluuProperties'
-import GluuLabel from 'Routes/Apps/Gluu/GluuLabel'
-import GluuInputRow from 'Routes/Apps/Gluu/GluuInputRow'
-import GluuSelectRow from 'Routes/Apps/Gluu/GluuSelectRow'
-import GluuToogleRow from 'Routes/Apps/Gluu/GluuToogleRow'
-import * as Yup from 'yup'
-import GluuCommitFooter from 'Routes/Apps/Gluu/GluuCommitFooter'
-import { isEmpty } from 'lodash'
-import { putCacheRefreshConfiguration } from 'Plugins/jans-link/redux/features/CacheRefreshSlice'
-import GluuCommitDialog from 'Routes/Apps/Gluu/GluuCommitDialog'
-import { useTranslation } from 'react-i18next'
-import { buildPayload } from 'Utils/PermChecker'
-import moment from 'moment/moment'
-import { adminUiFeatures } from 'Plugins/admin/helper/utils'
-
-const ConfigurationTab = () => {
- const { t } = useTranslation()
- const dispatch = useDispatch()
- const cacheRefreshConfiguration = useSelector(
- (state) => state.cacheRefreshReducer.configuration
- )
- const userAction = {}
- const [modal, setModal] = useState(false)
- const toggle = () => {
- setModal(!modal)
- }
-
- const {
- updateMethod = null,
- snapshotFolder = null,
- snapshotMaxCount = null,
- ldapSearchSizeLimit = null,
- keepExternalPerson = null,
- serverIpAddress = null,
- pollingInterval = null,
- linkEnabled = null,
- attributeMapping = [],
- problemCount = null,
- lastUpdateCount = null,
- lastUpdate = null,
- loggingLevel = '',
- useSearchLimit = false
- } = useSelector((state) => state.cacheRefreshReducer.configuration)
-
- const initialValues = {
- updateMethod,
- snapshotFolder,
- snapshotMaxCount,
- ldapSearchSizeLimit,
- keepExternalPerson,
- serverIpAddress,
- pollingInterval,
- linkEnabled,
- attributeMapping,
- problemCount,
- lastUpdateCount,
- lastUpdate,
- loggingLevel,
- useSearchLimit
- }
-
- const formik = useFormik({
- initialValues: initialValues,
- enableReinitialize: true,
- validationSchema: Yup.object({
- snapshotMaxCount: Yup.mixed().required(
- `${t('fields.snapshots_count')} ${t('messages.is_required')}`
- ),
- snapshotFolder: Yup.string().required(
- `${t('fields.snapshot_folder')} ${t('messages.is_required')}`
- ),
- updateMethod: Yup.string().required(
- `${t('fields.refresh_method')} ${t('messages.is_required')}`
- ),
- attributeMapping: Yup.array().min(
- 1,
- `${t('fields.mandatory_fields_required')}`
- ),
- }),
- onSubmit: () => {
- if (isEmpty(formik.errors)) {
- toggle()
- }
- },
- })
-
- const submitForm = (userMessage) => {
- toggle()
-
- buildPayload(userAction, userMessage, {
- appConfiguration2: {
- ...cacheRefreshConfiguration,
- ...formik.values,
- attributeMapping: formik.values.attributeMapping?.length
- ? formik.values.attributeMapping.map((attribute) => {
- return {
- source: attribute.source,
- destination: attribute.destination,
- }
- })
- : [],
- },
- })
-
- dispatch(
- putCacheRefreshConfiguration({ action: userAction })
- )
- }
-
- return (
- <>
-
- >
- )
-}
-
-export default ConfigurationTab
diff --git a/admin-ui/plugins/jans-link/components/Tabs/CustomerBackendKeyTab.js b/admin-ui/plugins/jans-link/components/Tabs/CustomerBackendKeyTab.js
deleted file mode 100644
index aef5fb39ec..0000000000
--- a/admin-ui/plugins/jans-link/components/Tabs/CustomerBackendKeyTab.js
+++ /dev/null
@@ -1,214 +0,0 @@
-import React, { useState } from 'react'
-import { useDispatch, useSelector } from 'react-redux'
-import { useFormik } from 'formik'
-import { Row, Col, Form, FormGroup } from 'Components'
-import GluuProperties from 'Routes/Apps/Gluu/GluuProperties'
-import GluuLabel from 'Routes/Apps/Gluu/GluuLabel'
-import GluuInputRow from 'Routes/Apps/Gluu/GluuInputRow'
-import GluuCommitFooter from 'Routes/Apps/Gluu/GluuCommitFooter'
-import * as Yup from 'yup'
-import { t } from 'i18next'
-import { isEmpty } from 'lodash'
-import { putCacheRefreshConfiguration } from 'Plugins/jans-link/redux/features/CacheRefreshSlice'
-import GluuCommitDialog from 'Routes/Apps/Gluu/GluuCommitDialog'
-import { buildPayload } from 'Utils/PermChecker'
-import { adminUiFeatures } from 'Plugins/admin/helper/utils'
-
-const isStringsArray = (arr) => arr.every((i) => typeof i === 'string')
-const convertToStringArray = (arr) => {
- return arr.map((item) => item.value)
-}
-
-const CustomerBackendKeyTab = () => {
- const dispatch = useDispatch()
- const cacheRefreshConfiguration = useSelector(
- (state) => state.cacheRefreshReducer.configuration
- )
- const [modal, setModal] = useState(false)
- const toggle = () => {
- setModal(!modal)
- }
-
- const {
- keyAttributes = [],
- keyObjectClasses = [],
- sourceAttributes = [],
- customLdapFilter = '',
- } = useSelector((state) => state.cacheRefreshReducer.configuration)
- const initialValues = {
- keyAttributes,
- keyObjectClasses,
- sourceAttributes,
- customLdapFilter,
- }
- const userAction = {}
- const formik = useFormik({
- initialValues: initialValues,
- setFieldValue: (field) => {
- delete values[field]
- },
- validationSchema: Yup.object({
- keyAttributes: Yup.array().min(
- 1,
- `${t('fields.key_attribute')} ${t('messages.is_required')}`
- ),
- keyObjectClasses: Yup.array().min(
- 1,
- `${t('fields.object_class')} ${t('messages.is_required')}`
- ),
- sourceAttributes: Yup.array().min(
- 1,
- `${t('fields.source_attribute')} ${t('messages.is_required')}`
- ),
- }),
- onSubmit: (data) => {
- if (isEmpty(formik.errors)) {
- toggle()
- }
- },
- })
-
- const submitForm = (userMessage) => {
- toggle()
-
- buildPayload(userAction, userMessage, {
- appConfiguration2: {
- ...cacheRefreshConfiguration,
- ...formik.values,
- sourceAttributes: isStringsArray(formik.values?.sourceAttributes || [])
- ? formik.values.sourceAttributes
- : convertToStringArray(formik.values?.sourceAttributes || []),
- keyObjectClasses: isStringsArray(formik.values.keyObjectClasses || [])
- ? formik.values.keyObjectClasses
- : convertToStringArray(formik.values?.keyObjectClasses || []),
- keyAttributes: isStringsArray(formik.values.keyAttributes || [])
- ? formik.values.keyAttributes
- : convertToStringArray(formik.values?.keyAttributes || []),
- },
- })
- dispatch(
- putCacheRefreshConfiguration({ action: userAction })
- )
- }
-
- return (
-
- )
-}
-
-export default CustomerBackendKeyTab
diff --git a/admin-ui/plugins/jans-link/components/Tabs/InumDBServerTab.js b/admin-ui/plugins/jans-link/components/Tabs/InumDBServerTab.js
deleted file mode 100644
index 339e093148..0000000000
--- a/admin-ui/plugins/jans-link/components/Tabs/InumDBServerTab.js
+++ /dev/null
@@ -1,337 +0,0 @@
-import { useFormik } from 'formik'
-import React, { useContext, useState } from 'react'
-import { Row, Col, Form, FormGroup, Button } from 'Components'
-import GluuInputRow from 'Routes/Apps/Gluu/GluuInputRow'
-import GluuToogleRow from 'Routes/Apps/Gluu/GluuToogleRow'
-import { useDispatch, useSelector } from 'react-redux'
-import GluuProperties from 'Routes/Apps/Gluu/GluuProperties'
-import GluuLabel from 'Routes/Apps/Gluu/GluuLabel'
-import { t } from 'i18next'
-import { ThemeContext } from 'Context/theme/themeContext'
-import BindPasswordModal from '../CacheRefresh/BindPasswordModal'
-import * as Yup from 'yup'
-import GluuCommitFooter from 'Routes/Apps/Gluu/GluuCommitFooter'
-import { isEmpty } from 'lodash'
-import { putCacheRefreshConfiguration } from 'Plugins/jans-link/redux/features/CacheRefreshSlice'
-import GluuCommitDialog from 'Routes/Apps/Gluu/GluuCommitDialog'
-import { buildPayload } from 'Utils/PermChecker'
-import { adminUiFeatures } from 'Plugins/admin/helper/utils'
-
-const isStringsArray = (arr) => arr.every((i) => typeof i === 'string')
-const convertToStringArray = (arr) => {
- return arr.map((item) => item.value)
-}
-
-const InumDBServerTab = () => {
- const theme = useContext(ThemeContext)
- const selectedTheme = theme.state.theme
- const dispatch = useDispatch()
- const cacheRefreshConfiguration = useSelector(
- (state) => state.cacheRefreshReducer.configuration
- )
- const { defaultInumServer, targetConfig } = useSelector(
- (state) => state.cacheRefreshReducer.configuration
- )
- const userAction = {}
- const initialValues = {
- defaultInumServer: defaultInumServer || false,
- targetConfig: {
- ...targetConfig,
- servers: targetConfig?.servers || [],
- baseDNs: targetConfig?.baseDNs || [],
- bindPassword: targetConfig?.bindPassword || null,
- configId: targetConfig?.configId || null,
- bindDN: targetConfig?.bindDN || null
- },
- }
-
- const [modal, setModal] = useState(false)
- const toggle = () => {
- setModal(!modal)
- }
-
- const [auditModal, setAuditModal] = useState(false)
- const toggleAudit = () => {
- setAuditModal(!auditModal)
- }
-
- const formik = useFormik({
- initialValues: initialValues,
- validationSchema: Yup.object({
- defaultInumServer: Yup.boolean(),
- targetConfig: Yup.object()
- .shape()
- .when('defaultInumServer', {
- is: false,
- then: () =>
- Yup.object({
- configId: Yup.string().min(2, 'Mininum 2 characters').required(
- `${t('fields.name')} ${t('messages.is_required')}`
- ),
- bindDN: Yup.string().min(2, 'Mininum 2 characters').required(
- `${t('fields.bind_dn')} ${t('messages.is_required')}`
- ),
- maxConnections: Yup.string().required(
- `${t('fields.max_connections')} ${t('messages.is_required')}`
- ),
- servers: Yup.array().min(
- 1,
- `${t('fields.server_port')} ${t('messages.is_required')}`
- ),
- baseDNs: Yup.array().min(
- 1,
- `${t('fields.base_dns')} ${t('messages.is_required')}`
- ),
- }),
- }),
- }),
- setFieldValue: (field) => {
- delete values[field]
- },
- onSubmit: (data) => {
- if (isEmpty(formik.errors)) {
- toggleAudit()
- }
- },
- })
-
- const submitForm = (userMessage) => {
- toggleAudit()
-
- buildPayload(userAction, userMessage, {
- appConfiguration2: {
- ...cacheRefreshConfiguration,
- targetConfig: {
- ...formik.values.targetConfig,
- baseDNs: isStringsArray(formik.values?.targetConfig?.baseDNs || [])
- ? formik.values.targetConfig.baseDNs
- : convertToStringArray(formik.values?.targetConfig.baseDNs || []),
- servers: isStringsArray(formik.values?.targetConfig?.servers || [])
- ? formik.values.targetConfig.servers
- : convertToStringArray(formik.values?.targetConfig?.servers || []),
- },
- defaultInumServer: formik.values.defaultInumServer,
- },
- })
-
- dispatch(
- putCacheRefreshConfiguration({ action: userAction })
- )
- }
-
- const handleChangePassword = (updatedPassword) => {
- buildPayload(userAction, 'CHANGE INUMDB BIND PASSWORD', {
- appConfiguration2: {
- ...cacheRefreshConfiguration,
- targetConfig: {
- ...formik.values.targetConfig,
- baseDNs: isStringsArray(formik.values?.targetConfig?.baseDNs || [])
- ? formik.values.targetConfig.baseDNs
- : convertToStringArray(formik.values?.targetConfig?.baseDNs || []),
- servers: isStringsArray(formik.values?.targetConfig?.servers || [])
- ? formik.values.targetConfig.servers
- : convertToStringArray(formik.values?.targetConfig?.servers || []),
- bindPassword: updatedPassword,
- },
- },
- })
-
- dispatch(
- putCacheRefreshConfiguration({ action: userAction })
- )
- }
-
- return (
-
- )
-}
-
-export default InumDBServerTab
diff --git a/admin-ui/plugins/jans-link/components/Tabs/SourceBackendServersTab.js b/admin-ui/plugins/jans-link/components/Tabs/SourceBackendServersTab.js
deleted file mode 100644
index dd687a3e58..0000000000
--- a/admin-ui/plugins/jans-link/components/Tabs/SourceBackendServersTab.js
+++ /dev/null
@@ -1,144 +0,0 @@
-import React, { useCallback, useContext, useEffect, useState } from 'react'
-import { ThemeContext } from 'Context/theme/themeContext'
-import { useDispatch, useSelector } from 'react-redux'
-import applicationStyle from 'Routes/Apps/Gluu/styles/applicationstyle'
-import MaterialTable from '@material-table/core'
-import { Paper } from '@mui/material'
-import { DeleteOutlined } from '@mui/icons-material'
-import { useNavigate } from 'react-router'
-import getThemeColor from 'Context/theme/config'
-import { useTranslation } from 'react-i18next'
-import GluuViewWrapper from 'Routes/Apps/Gluu/GluuViewWrapper'
-import GluuDialog from 'Routes/Apps/Gluu/GluuDialog'
-import { putCacheRefreshConfiguration } from 'Plugins/jans-link/redux/features/CacheRefreshSlice'
-import { buildPayload } from 'Utils/PermChecker'
-import { adminUiFeatures } from 'Plugins/admin/helper/utils'
-
-const SourceBackendServersTab = () => {
- const { t } = useTranslation()
- const theme = useContext(ThemeContext)
- const navigate = useNavigate()
- const selectedTheme = theme.state.theme
- const themeColors = getThemeColor(selectedTheme)
- const bgThemeColor = { background: themeColors.background }
- let actions = []
- const dispatch = useDispatch()
- const cacheRefreshConfiguration = useSelector(
- (state) => state.cacheRefreshReducer.configuration
- )
- const userAction = {}
- const [item, setItem] = useState({})
- const [modal, setModal] = useState(false)
- const toggle = () => setModal(!modal)
- const { sourceConfigs } = useSelector(
- (state) => state.cacheRefreshReducer.configuration
- )
- const loading = useSelector((state) => state.ldapReducer.loading)
-
- const tableColumns = [
- { field: 'configId', title: `${t('fields.name')}` },
- { field: 'enabled', title: `${t('fields.enabled')}` },
- ]
-
- const navigateToEdit = (rowData) => {
- delete rowData?.tableData
- navigate('/jans-link/source-backend-ldap-servers/edit', { state: { sourceConfig: rowData } })
- }
-
- const deleteConfig = (data) => {
- setItem(data)
- toggle()
- }
-
- const navigateToAdd = () => {
- navigate('/jans-link/source-backend-ldap-servers/add')
- }
-
- actions.push((rowData) => ({
- icon: 'edit',
- iconProps: {
- id: 'editClient' + rowData.configId,
- },
- tooltip: `${t('messages.edit_configuration')}`,
- onClick: (event, rowData) => navigateToEdit(rowData),
- disabled: false,
- }))
-
- actions.push((rowData) => ({
- icon: DeleteIcon,
- iconProps: {
- color: 'secondary',
- id: 'deleteClient' + rowData.configId,
- },
- tooltip: `${t('messages.delete_configuration')}`,
- onClick: (event, rowData) => deleteConfig(rowData),
- disabled: false,
- }))
-
- actions.push({
- icon: 'add',
- tooltip: `${t('messages.add_configuration')}`,
- iconProps: { color: 'primary' },
- isFreeAction: true,
- onClick: () => navigateToAdd(),
- })
-
- const PaperContainer = useCallback(
- (props) => ,
- []
- )
-
- const DeleteIcon = useCallback(
- (props) => ,
- []
- )
-
- function onDeletionConfirmed(message) {
- const sourceConfigs = cacheRefreshConfiguration?.sourceConfigs?.filter((config) => config.configId !== item.configId)
- buildPayload(userAction, message, {
- appConfiguration2: {
- ...cacheRefreshConfiguration,
- sourceConfigs: sourceConfigs,
- },
- })
- dispatch(putCacheRefreshConfiguration({ action: userAction }))
- toggle()
- }
-
- return (
- <>
-
-
-
-
- >
- )
-}
-
-export default SourceBackendServersTab
diff --git a/admin-ui/plugins/jans-link/plugin-metadata.js b/admin-ui/plugins/jans-link/plugin-metadata.js
deleted file mode 100644
index d161c1f670..0000000000
--- a/admin-ui/plugins/jans-link/plugin-metadata.js
+++ /dev/null
@@ -1,59 +0,0 @@
-import { JANS_LINK_READ, JANS_LINK_WRITE } from "Utils/PermChecker";
-import JansLinkPage from "./components/CacheRefresh/JansLinkPage";
-import cacheRefreshReducer from "./redux/features/CacheRefreshSlice";
-import cacheRefreshSaga from "./redux/sagas/CacheRefreshSaga";
-import SourceBackendServerForm from "./components/SourceBackendServers/SourceBackendServerForm";
-
-const PLUGIN_BASE_PATH = "/jans-link";
-
-const pluginMetadata = {
- menus: [
- {
- title: "menus.jans_link",
- icon: "jans_link",
- path: PLUGIN_BASE_PATH,
- permission: JANS_LINK_READ,
- },
- ],
- routes: [
- {
- component: JansLinkPage,
- path: PLUGIN_BASE_PATH,
- permission: JANS_LINK_WRITE,
- },
- {
- component: SourceBackendServerForm,
- path: `${PLUGIN_BASE_PATH}/source-backend-ldap-servers/edit`,
- permission: JANS_LINK_WRITE,
- },
- {
- component: SourceBackendServerForm,
- path: `${PLUGIN_BASE_PATH}/source-backend-ldap-servers/add`,
- permission: JANS_LINK_WRITE,
- },
- {
- component: JansLinkPage,
- path: `${PLUGIN_BASE_PATH}/configuration`,
- permission: JANS_LINK_WRITE,
- },
- {
- component: JansLinkPage,
- path: `${PLUGIN_BASE_PATH}/customer-backend-key-attributes`,
- permission: JANS_LINK_WRITE,
- },
- {
- component: JansLinkPage,
- path: `${PLUGIN_BASE_PATH}/source-backend-ldap-servers`,
- permission: JANS_LINK_WRITE,
- },
- {
- component: JansLinkPage,
- path: `${PLUGIN_BASE_PATH}/inum-db-server`,
- permission: JANS_LINK_WRITE,
- },
- ],
- reducers: [{ name: 'cacheRefreshReducer', reducer: cacheRefreshReducer }],
- sagas: [cacheRefreshSaga()],
-};
-
-export default pluginMetadata;
diff --git a/admin-ui/plugins/jans-link/redux/api/CacheRefreshApi.js b/admin-ui/plugins/jans-link/redux/api/CacheRefreshApi.js
deleted file mode 100644
index 5cfd34527d..0000000000
--- a/admin-ui/plugins/jans-link/redux/api/CacheRefreshApi.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { handleResponse } from 'Utils/ApiUtils'
-
-export default class CacheRefreshApi {
- constructor(api) {
- this.api = api
- }
-
- getPropertiesCacheRefresh = () => {
- return new Promise((resolve, reject) => {
- this.api.getJansLinkProperties((error, data) => {
- handleResponse(error, reject, resolve, data)
- })
- })
- }
-
- updateCacheRefreshConfig = (input) => {
- return new Promise((resolve, reject) => {
- this.api.putJansLinkProperties(input, (error, data) => {
- handleResponse(error, reject, resolve, data)
- })
- })
- }
-}
\ No newline at end of file
diff --git a/admin-ui/plugins/jans-link/redux/features/CacheRefreshSlice.js b/admin-ui/plugins/jans-link/redux/features/CacheRefreshSlice.js
deleted file mode 100644
index 90836e8d34..0000000000
--- a/admin-ui/plugins/jans-link/redux/features/CacheRefreshSlice.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import reducerRegistry from 'Redux/reducers/ReducerRegistry'
-import { createSlice } from '@reduxjs/toolkit'
-
-const initialState = {
- configuration: {},
- loading: true,
- savedForm: false,
-}
-
-const cacheRefreshSlice = createSlice({
- name: 'cacheRefresh',
- initialState: initialState,
- reducers: {
- getCacheRefreshConfiguration: (state) => {
- state.loading = true
- },
- getCacheRefreshConfigurationResponse: (state, action) => {
- state.configuration = action.payload ? action.payload : {}
- state.loading = false
- },
- putCacheRefreshConfiguration: (state) => {
- state.loading = true
- },
- toggleSavedFormFlag: (state, action) => {
- state.savedForm = action.payload || false
- }
- }
-})
-
-export const {
- getCacheRefreshConfiguration,
- getCacheRefreshConfigurationResponse,
- putCacheRefreshConfiguration,
- toggleSavedFormFlag
-} = cacheRefreshSlice.actions
-
-export default cacheRefreshSlice.reducer
-
-reducerRegistry.register('cacheRefreshReducer', cacheRefreshSlice.reducer);
diff --git a/admin-ui/plugins/jans-link/redux/sagas/CacheRefreshSaga.js b/admin-ui/plugins/jans-link/redux/sagas/CacheRefreshSaga.js
deleted file mode 100644
index d1a9ef9fd7..0000000000
--- a/admin-ui/plugins/jans-link/redux/sagas/CacheRefreshSaga.js
+++ /dev/null
@@ -1,91 +0,0 @@
-import { initAudit } from "Redux/sagas/SagaUtils";
-import { getClient } from "Redux/api/base";
-import { isFourZeroOneError, addAdditionalData } from "Utils/TokenController";
-import {
- call,
- all,
- put,
- fork,
- takeLatest,
- select,
- takeEvery,
-} from "redux-saga/effects";
-import { postUserAction } from "Redux/api/backend-api";
-import { updateToast } from 'Redux/features/toastSlice'
-import CacheRefreshApi from "../api/CacheRefreshApi"
-import {
- getCacheRefreshConfiguration,
- getCacheRefreshConfigurationResponse,
- toggleSavedFormFlag,
-} from "../features/CacheRefreshSlice";
-import { getAPIAccessToken } from "Redux/features/authSlice";
-import { UPDATE } from "../../../../app/audit/UserActionType";
-import { triggerWebhook } from 'Plugins/admin/redux/sagas/WebhookSaga'
-
-const JansConfigApi = require("jans_config_api");
-
-export const JANS_LINK = 'jans-link'
-
-function* newFunction() {
- const token = yield select((state) => state.authReducer.token.access_token);
- const issuer = yield select((state) => state.authReducer.issuer);
- const api = new JansConfigApi.JansLinkConfigurationApi(
- getClient(JansConfigApi, token, issuer)
- );
- return new CacheRefreshApi(api);
-}
-
-export function* getCacheRefreshSaga() {
- const audit = yield* initAudit();
- try {
- const cacheRefreshApi = yield* newFunction();
- const data = yield call(cacheRefreshApi.getPropertiesCacheRefresh);
- yield put(getCacheRefreshConfigurationResponse(data));
- yield call(postUserAction, audit);
- yield put(toggleSavedFormFlag(false))
- return data
- } catch (e) {
- yield put(getCacheRefreshConfigurationResponse(null));
- yield put(toggleSavedFormFlag(false))
- if (isFourZeroOneError(e)) {
- const jwt = yield select((state) => state.authReducer.userinfo_jwt);
- yield put(getAPIAccessToken(jwt));
- }
- return e
- }
-}
-
-export function* editCacheConfig({ payload }) {
- const audit = yield* initAudit();
- addAdditionalData(audit, UPDATE, JANS_LINK, payload)
- try {
- const cacheRefreshApi = yield* newFunction();
- const data = yield call(cacheRefreshApi.updateCacheRefreshConfig, payload.action.action_data);
- yield put(updateToast(true, "success"));
- yield put(getCacheRefreshConfiguration());
- yield put(toggleSavedFormFlag(true))
- yield call(postUserAction, audit);
- yield* triggerWebhook({ payload: { createdFeatureValue: data } })
- return data
- } catch (e) {
- yield put(toggleSavedFormFlag(false))
- yield put(updateToast(true, "error"));
- if (isFourZeroOneError(e)) {
- const jwt = yield select((state) => state.authReducer.userinfo_jwt);
- yield put(getAPIAccessToken(jwt));
- }
- return e
- }
-}
-
-export function* watchGetCacheRefresh() {
- yield takeEvery('cacheRefresh/getCacheRefreshConfiguration', getCacheRefreshSaga);
-}
-
-export function* watchPutCacheRefreshConfig() {
- yield takeLatest('cacheRefresh/putCacheRefreshConfiguration', editCacheConfig);
-}
-
-export default function* rootSaga() {
- yield all([fork(watchGetCacheRefresh), fork(watchPutCacheRefreshConfig)]);
-}