mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2025-10-04 03:40:10 +00:00
146 lines
4.5 KiB
TypeScript
146 lines
4.5 KiB
TypeScript
import cn from "classnames";
|
|
import { Field, useFormikContext } from "formik";
|
|
import { DNSProviderFields, DomainNamesField } from "src/components";
|
|
import { intl } from "src/locale";
|
|
|
|
interface Props {
|
|
forHttp?: boolean; // the sslForced, http2Support, hstsEnabled, hstsSubdomains fields
|
|
forceDNSForNew?: boolean;
|
|
requireDomainNames?: boolean; // used for streams
|
|
color?: string;
|
|
}
|
|
export function SSLOptionsFields({ forHttp = true, forceDNSForNew, requireDomainNames, color = "bg-cyan" }: Props) {
|
|
const { values, setFieldValue } = useFormikContext();
|
|
const v: any = values || {};
|
|
|
|
const newCertificate = v?.certificateId === "new";
|
|
const hasCertificate = newCertificate || (v?.certificateId && v?.certificateId > 0);
|
|
const { sslForced, http2Support, hstsEnabled, hstsSubdomains, meta } = v;
|
|
const { dnsChallenge } = meta || {};
|
|
|
|
if (forceDNSForNew && newCertificate && !dnsChallenge) {
|
|
setFieldValue("meta.dnsChallenge", true);
|
|
}
|
|
|
|
const handleToggleChange = (e: any, fieldName: string) => {
|
|
setFieldValue(fieldName, e.target.checked);
|
|
if (fieldName === "meta.dnsChallenge" && !e.target.checked) {
|
|
setFieldValue("meta.dnsProvider", undefined);
|
|
setFieldValue("meta.dnsProviderCredentials", undefined);
|
|
setFieldValue("meta.propagationSeconds", undefined);
|
|
}
|
|
};
|
|
|
|
const toggleClasses = "form-check-input";
|
|
const toggleEnabled = cn(toggleClasses, color);
|
|
|
|
const getHttpOptions = () => (
|
|
<div>
|
|
<div className="row">
|
|
<div className="col-6">
|
|
<Field name="sslForced">
|
|
{({ field }: any) => (
|
|
<label className="form-check form-switch mt-1">
|
|
<input
|
|
className={sslForced ? toggleEnabled : toggleClasses}
|
|
type="checkbox"
|
|
checked={!!sslForced}
|
|
onChange={(e) => handleToggleChange(e, field.name)}
|
|
disabled={!hasCertificate}
|
|
/>
|
|
<span className="form-check-label">
|
|
{intl.formatMessage({ id: "domains.force-ssl" })}
|
|
</span>
|
|
</label>
|
|
)}
|
|
</Field>
|
|
</div>
|
|
<div className="col-6">
|
|
<Field name="http2Support">
|
|
{({ field }: any) => (
|
|
<label className="form-check form-switch mt-1">
|
|
<input
|
|
className={http2Support ? toggleEnabled : toggleClasses}
|
|
type="checkbox"
|
|
checked={!!http2Support}
|
|
onChange={(e) => handleToggleChange(e, field.name)}
|
|
disabled={!hasCertificate}
|
|
/>
|
|
<span className="form-check-label">
|
|
{intl.formatMessage({ id: "domains.http2-support" })}
|
|
</span>
|
|
</label>
|
|
)}
|
|
</Field>
|
|
</div>
|
|
</div>
|
|
<div className="row">
|
|
<div className="col-6">
|
|
<Field name="hstsEnabled">
|
|
{({ field }: any) => (
|
|
<label className="form-check form-switch mt-1">
|
|
<input
|
|
className={hstsEnabled ? toggleEnabled : toggleClasses}
|
|
type="checkbox"
|
|
checked={!!hstsEnabled}
|
|
onChange={(e) => handleToggleChange(e, field.name)}
|
|
disabled={!hasCertificate || !sslForced}
|
|
/>
|
|
<span className="form-check-label">
|
|
{intl.formatMessage({ id: "domains.hsts-enabled" })}
|
|
</span>
|
|
</label>
|
|
)}
|
|
</Field>
|
|
</div>
|
|
<div className="col-6">
|
|
<Field name="hstsSubdomains">
|
|
{({ field }: any) => (
|
|
<label className="form-check form-switch mt-1">
|
|
<input
|
|
className={hstsSubdomains ? toggleEnabled : toggleClasses}
|
|
type="checkbox"
|
|
checked={!!hstsSubdomains}
|
|
onChange={(e) => handleToggleChange(e, field.name)}
|
|
disabled={!hasCertificate || !hstsEnabled}
|
|
/>
|
|
<span className="form-check-label">
|
|
{intl.formatMessage({ id: "domains.hsts-subdomains" })}
|
|
</span>
|
|
</label>
|
|
)}
|
|
</Field>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
|
|
return (
|
|
<div>
|
|
{forHttp ? getHttpOptions() : null}
|
|
{newCertificate ? (
|
|
<>
|
|
<Field name="meta.dnsChallenge">
|
|
{({ field }: any) => (
|
|
<label className="form-check form-switch mt-1">
|
|
<input
|
|
className={dnsChallenge ? toggleEnabled : toggleClasses}
|
|
type="checkbox"
|
|
checked={forceDNSForNew ? true : !!dnsChallenge}
|
|
disabled={forceDNSForNew}
|
|
onChange={(e) => handleToggleChange(e, field.name)}
|
|
/>
|
|
<span className="form-check-label">
|
|
{intl.formatMessage({ id: "domains.use-dns" })}
|
|
</span>
|
|
</label>
|
|
)}
|
|
</Field>
|
|
{requireDomainNames ? <DomainNamesField /> : null}
|
|
{dnsChallenge ? <DNSProviderFields /> : null}
|
|
</>
|
|
) : null}
|
|
</div>
|
|
);
|
|
}
|