2020-09-17 13:51:40 +00:00
|
|
|
import React from "react";
|
2020-09-22 12:43:51 +00:00
|
|
|
import { useTranslation } from "react-i18next";
|
2021-04-26 11:48:09 +00:00
|
|
|
import { Controller, useFormContext } from "react-hook-form";
|
2020-08-31 18:26:25 +00:00
|
|
|
import {
|
|
|
|
FormGroup,
|
|
|
|
Switch,
|
|
|
|
Checkbox,
|
|
|
|
Grid,
|
|
|
|
GridItem,
|
2021-03-19 07:49:33 +00:00
|
|
|
InputGroup,
|
2020-08-31 18:26:25 +00:00
|
|
|
} from "@patternfly/react-core";
|
2021-04-26 11:48:09 +00:00
|
|
|
|
2020-10-28 18:17:15 +00:00
|
|
|
import { FormAccess } from "../../components/form-access/FormAccess";
|
2021-05-04 17:58:18 +00:00
|
|
|
import type { ClientForm } from "../ClientDetails";
|
2021-03-09 13:59:41 +00:00
|
|
|
import { HelpItem } from "../../components/help-enabler/HelpItem";
|
|
|
|
|
2021-04-26 11:48:09 +00:00
|
|
|
import "./capability-config.css";
|
|
|
|
|
2021-03-09 13:59:41 +00:00
|
|
|
type CapabilityConfigProps = {
|
|
|
|
unWrap?: boolean;
|
|
|
|
protocol?: string;
|
|
|
|
};
|
2020-10-28 18:17:15 +00:00
|
|
|
|
2021-03-09 13:59:41 +00:00
|
|
|
export const CapabilityConfig = ({
|
|
|
|
unWrap,
|
|
|
|
protocol: type,
|
|
|
|
}: CapabilityConfigProps) => {
|
2020-09-17 13:51:40 +00:00
|
|
|
const { t } = useTranslation("clients");
|
2021-03-19 07:49:33 +00:00
|
|
|
const { control, watch, setValue } = useFormContext<ClientForm>();
|
2021-03-09 13:59:41 +00:00
|
|
|
const protocol = type || watch("protocol");
|
2021-03-19 07:49:33 +00:00
|
|
|
const clientAuthentication = watch("publicClient");
|
2021-04-26 07:40:59 +00:00
|
|
|
const authorization = watch("authorizationServicesEnabled");
|
2021-03-09 13:59:41 +00:00
|
|
|
|
2020-09-17 13:51:40 +00:00
|
|
|
return (
|
2021-04-26 11:48:09 +00:00
|
|
|
<FormAccess
|
|
|
|
isHorizontal
|
|
|
|
role="manage-clients"
|
|
|
|
unWrap={unWrap}
|
|
|
|
className="keycloak__capability-config__form"
|
2021-10-06 11:05:27 +00:00
|
|
|
data-testid="capability-config-form"
|
2021-04-26 11:48:09 +00:00
|
|
|
>
|
2021-08-26 12:15:28 +00:00
|
|
|
{protocol === "openid-connect" && (
|
|
|
|
<>
|
|
|
|
<FormGroup
|
|
|
|
hasNoPaddingTop
|
|
|
|
label={t("clientAuthentication")}
|
|
|
|
fieldId="kc-authentication"
|
|
|
|
labelIcon={
|
|
|
|
<HelpItem
|
|
|
|
helpText="clients-help:authentication"
|
2021-12-14 14:56:36 +00:00
|
|
|
fieldLabelId="clients:authentication"
|
2021-03-09 13:59:41 +00:00
|
|
|
/>
|
2021-08-26 12:15:28 +00:00
|
|
|
}
|
|
|
|
>
|
|
|
|
<Controller
|
|
|
|
name="publicClient"
|
|
|
|
defaultValue={false}
|
|
|
|
control={control}
|
|
|
|
render={({ onChange, value }) => (
|
|
|
|
<Switch
|
|
|
|
data-testid="authentication"
|
|
|
|
id="kc-authentication-switch"
|
|
|
|
name="publicClient"
|
|
|
|
label={t("common:on")}
|
|
|
|
labelOff={t("common:off")}
|
|
|
|
isChecked={!value}
|
|
|
|
onChange={(value) => {
|
|
|
|
onChange(!value);
|
|
|
|
if (!value) {
|
|
|
|
setValue("authorizationServicesEnabled", false);
|
|
|
|
setValue("serviceAccountsEnabled", false);
|
|
|
|
}
|
|
|
|
}}
|
2021-04-13 00:05:00 +00:00
|
|
|
/>
|
2021-08-26 12:15:28 +00:00
|
|
|
)}
|
|
|
|
/>
|
|
|
|
</FormGroup>
|
|
|
|
<FormGroup
|
|
|
|
hasNoPaddingTop
|
|
|
|
label={t("clientAuthorization")}
|
|
|
|
fieldId="kc-authorization"
|
|
|
|
labelIcon={
|
|
|
|
<HelpItem
|
|
|
|
helpText="clients-help:authorization"
|
2021-12-14 14:56:36 +00:00
|
|
|
fieldLabelId="clients:authorization"
|
2021-03-09 13:59:41 +00:00
|
|
|
/>
|
2021-08-26 12:15:28 +00:00
|
|
|
}
|
|
|
|
>
|
|
|
|
<Controller
|
|
|
|
name="authorizationServicesEnabled"
|
|
|
|
defaultValue={false}
|
|
|
|
control={control}
|
|
|
|
render={({ onChange, value }) => (
|
|
|
|
<Switch
|
|
|
|
data-testid="authorization"
|
|
|
|
id="kc-authorization-switch"
|
|
|
|
name="authorizationServicesEnabled"
|
|
|
|
label={t("common:on")}
|
|
|
|
labelOff={t("common:off")}
|
|
|
|
isChecked={value && !clientAuthentication}
|
|
|
|
onChange={(value) => {
|
|
|
|
onChange(value);
|
|
|
|
if (value) {
|
|
|
|
setValue("serviceAccountsEnabled", true);
|
|
|
|
}
|
|
|
|
}}
|
|
|
|
isDisabled={clientAuthentication}
|
|
|
|
/>
|
|
|
|
)}
|
|
|
|
/>
|
|
|
|
</FormGroup>
|
|
|
|
<FormGroup
|
|
|
|
hasNoPaddingTop
|
|
|
|
label={t("authenticationFlow")}
|
|
|
|
fieldId="kc-flow"
|
|
|
|
>
|
|
|
|
<Grid>
|
|
|
|
<GridItem lg={4} sm={6}>
|
|
|
|
<Controller
|
|
|
|
name="standardFlowEnabled"
|
|
|
|
defaultValue={true}
|
|
|
|
control={control}
|
|
|
|
render={({ onChange, value }) => (
|
|
|
|
<InputGroup>
|
|
|
|
<Checkbox
|
|
|
|
data-testid="standard"
|
|
|
|
label={t("standardFlow")}
|
|
|
|
id="kc-flow-standard"
|
|
|
|
name="standardFlowEnabled"
|
|
|
|
isChecked={value}
|
|
|
|
onChange={onChange}
|
|
|
|
/>
|
|
|
|
<HelpItem
|
|
|
|
helpText="clients-help:standardFlow"
|
2021-12-14 14:56:36 +00:00
|
|
|
fieldLabelId="clients:standardFlow"
|
2021-08-26 12:15:28 +00:00
|
|
|
/>
|
|
|
|
</InputGroup>
|
|
|
|
)}
|
|
|
|
/>
|
|
|
|
</GridItem>
|
|
|
|
<GridItem lg={8} sm={6}>
|
|
|
|
<Controller
|
|
|
|
name="directAccessGrantsEnabled"
|
|
|
|
defaultValue={true}
|
|
|
|
control={control}
|
|
|
|
render={({ onChange, value }) => (
|
|
|
|
<InputGroup>
|
|
|
|
<Checkbox
|
|
|
|
data-testid="direct"
|
|
|
|
label={t("directAccess")}
|
|
|
|
id="kc-flow-direct"
|
|
|
|
name="directAccessGrantsEnabled"
|
|
|
|
isChecked={value}
|
|
|
|
onChange={onChange}
|
|
|
|
/>
|
|
|
|
<HelpItem
|
|
|
|
helpText="clients-help:directAccess"
|
2021-12-14 14:56:36 +00:00
|
|
|
fieldLabelId="clients:directAccess"
|
2021-08-26 12:15:28 +00:00
|
|
|
/>
|
|
|
|
</InputGroup>
|
|
|
|
)}
|
2020-09-17 13:51:40 +00:00
|
|
|
/>
|
2021-08-26 12:15:28 +00:00
|
|
|
</GridItem>
|
|
|
|
<GridItem lg={4} sm={6}>
|
|
|
|
<Controller
|
|
|
|
name="implicitFlowEnabled"
|
|
|
|
defaultValue={false}
|
|
|
|
control={control}
|
|
|
|
render={({ onChange, value }) => (
|
|
|
|
<InputGroup>
|
|
|
|
<Checkbox
|
|
|
|
data-testid="implicit"
|
|
|
|
label={t("implicitFlow")}
|
|
|
|
id="kc-flow-implicit"
|
|
|
|
name="implicitFlowEnabled"
|
|
|
|
isChecked={value}
|
|
|
|
onChange={onChange}
|
|
|
|
/>
|
|
|
|
<HelpItem
|
|
|
|
helpText="clients-help:implicitFlow"
|
2021-12-14 14:56:36 +00:00
|
|
|
fieldLabelId="clients:implicitFlow"
|
2021-08-26 12:15:28 +00:00
|
|
|
/>
|
|
|
|
</InputGroup>
|
|
|
|
)}
|
|
|
|
/>
|
|
|
|
</GridItem>
|
|
|
|
<GridItem lg={8} sm={6}>
|
|
|
|
<Controller
|
|
|
|
name="serviceAccountsEnabled"
|
|
|
|
defaultValue={false}
|
|
|
|
control={control}
|
|
|
|
render={({ onChange, value }) => (
|
|
|
|
<InputGroup>
|
|
|
|
<Checkbox
|
|
|
|
data-testid="service-account"
|
|
|
|
label={t("serviceAccount")}
|
|
|
|
id="kc-flow-service-account"
|
|
|
|
name="serviceAccountsEnabled"
|
|
|
|
isChecked={
|
|
|
|
value || (clientAuthentication && authorization)
|
|
|
|
}
|
|
|
|
onChange={onChange}
|
|
|
|
isDisabled={
|
|
|
|
(clientAuthentication && !authorization) ||
|
|
|
|
(!clientAuthentication && authorization)
|
|
|
|
}
|
|
|
|
/>
|
|
|
|
<HelpItem
|
|
|
|
helpText="clients-help:serviceAccount"
|
2021-12-14 14:56:36 +00:00
|
|
|
fieldLabelId="clients:serviceAccount"
|
2021-08-26 12:15:28 +00:00
|
|
|
/>
|
|
|
|
</InputGroup>
|
|
|
|
)}
|
|
|
|
/>
|
|
|
|
</GridItem>
|
|
|
|
</Grid>
|
|
|
|
</FormGroup>
|
|
|
|
</>
|
|
|
|
)}
|
|
|
|
{protocol === "saml" && (
|
|
|
|
<>
|
|
|
|
<FormGroup
|
|
|
|
labelIcon={
|
|
|
|
<HelpItem
|
|
|
|
helpText="clients-help:encryptAssertions"
|
2021-12-14 14:56:36 +00:00
|
|
|
fieldLabelId="clients:encryptAssertions"
|
2021-03-09 13:59:41 +00:00
|
|
|
/>
|
2021-08-26 12:15:28 +00:00
|
|
|
}
|
|
|
|
label={t("encryptAssertions")}
|
|
|
|
fieldId="kc-encrypt"
|
|
|
|
hasNoPaddingTop
|
|
|
|
>
|
|
|
|
<Controller
|
2021-12-08 15:08:42 +00:00
|
|
|
name="attributes.saml.encrypt"
|
2021-08-26 12:15:28 +00:00
|
|
|
control={control}
|
|
|
|
defaultValue="false"
|
|
|
|
render={({ onChange, value }) => (
|
|
|
|
<Switch
|
|
|
|
data-testid="encrypt"
|
|
|
|
id="kc-encrypt"
|
|
|
|
label={t("common:on")}
|
|
|
|
labelOff={t("common:off")}
|
|
|
|
isChecked={value === "true"}
|
|
|
|
onChange={(value) => onChange("" + value)}
|
2020-09-17 13:51:40 +00:00
|
|
|
/>
|
2021-08-26 12:15:28 +00:00
|
|
|
)}
|
|
|
|
/>
|
|
|
|
</FormGroup>
|
|
|
|
<FormGroup
|
|
|
|
labelIcon={
|
|
|
|
<HelpItem
|
|
|
|
helpText="clients-help:clientSignature"
|
2021-12-14 14:56:36 +00:00
|
|
|
fieldLabelId="clients:clientSignature"
|
2021-03-09 13:59:41 +00:00
|
|
|
/>
|
2021-08-26 12:15:28 +00:00
|
|
|
}
|
|
|
|
label={t("clientSignature")}
|
|
|
|
fieldId="kc-client-signature"
|
|
|
|
hasNoPaddingTop
|
|
|
|
>
|
|
|
|
<Controller
|
2021-12-08 15:08:42 +00:00
|
|
|
name="attributes.saml.client.signature"
|
2021-08-26 12:15:28 +00:00
|
|
|
control={control}
|
|
|
|
defaultValue="false"
|
|
|
|
render={({ onChange, value }) => (
|
|
|
|
<Switch
|
|
|
|
data-testid="client-signature"
|
|
|
|
id="kc-client-signature"
|
|
|
|
label={t("common:on")}
|
|
|
|
labelOff={t("common:off")}
|
|
|
|
isChecked={value === "true"}
|
|
|
|
onChange={(value) => onChange("" + value)}
|
|
|
|
/>
|
|
|
|
)}
|
|
|
|
/>
|
|
|
|
</FormGroup>
|
|
|
|
</>
|
|
|
|
)}
|
2020-10-28 18:17:15 +00:00
|
|
|
</FormAccess>
|
2020-09-17 13:51:40 +00:00
|
|
|
);
|
|
|
|
};
|