| Current Path : /proc/thread-self/root/snap/lxd/current/share/lxd-ui/assets/ |
| Current File : //proc/thread-self/root/snap/lxd/current/share/lxd-ui/assets/NetworkForwardForm-BYZKCf5K.js |
import{j as e,d as t,af as v,f as m,ag as P,h as n,ah as x,ai as i,a9 as I,aj as F,r as p,aa as f,p as N,a2 as y}from"./index-BFGypnt-.js";import{S as C}from"./ScrollableForm-D-7nf2YI.js";import{f as T}from"./FormFooterLayout-CMGxv4XX.js";import{C as $}from"./ClusterMemberSelector-Bokudnyt.js";import{u as L}from"./useClusterMembers-B29_ixY7.js";const w=({formik:s,targetAddressFamily:d,network:a})=>e.jsxs("table",{className:"u-no-margin--bottom forward-ports",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{className:"listen-port",children:e.jsx(t.Label,{required:!0,forId:"ports.0.listenPort",className:"u-no-margin--bottom",children:"Listen port"})}),e.jsx("th",{className:"protocol",children:e.jsx(t.Label,{required:!0,forId:"ports.0.protocol",className:"u-no-margin--bottom",children:"Protocol"})}),e.jsx("th",{className:"target-address",children:e.jsx(t.Label,{required:!0,forId:"ports.0.targetAddress",className:"u-no-margin--bottom",children:"Target address"})}),e.jsx("th",{className:"target-port",children:e.jsx(t.Label,{forId:"ports.0.targetPort",className:"u-no-margin--bottom",children:"Target port"})}),e.jsx("th",{className:"u-off-screen",children:"Actions"})]})}),e.jsx("tbody",{children:s.values.ports.map((u,r)=>{const l=s.errors.ports?.[r];return e.jsxs("tr",{children:[e.jsx("td",{className:"listen-port",children:e.jsx(t.Input,{...s.getFieldProps(`ports.${r}.listenPort`),id:`ports.${r}.listenPort`,type:"text","aria-label":`Port ${r} listen port`,placeholder:"Port number(s)",help:r===s.values.ports.length-1&&e.jsx(e.Fragment,{children:"e.g. 80,90-99."}),error:s.touched.ports?.[r]?.listenPort?l?.listenPort:void 0})}),e.jsx("td",{className:"protocol",children:e.jsx(t.Select,{...s.getFieldProps(`ports.${r}.protocol`),id:`ports.${r}.protocol`,options:[{label:"TCP",value:"tcp"},{label:"UDP",value:"udp"}],"aria-label":`Port ${r} protocol`})}),e.jsx("td",{className:"target-address",children:e.jsx(t.PrefixedIpInput,{id:`ports.${r}.targetAddress`,name:`ports.${r}.targetAddress`,cidr:v(d,a),ip:s.values.ports[r].targetAddress||"",onIpChange:o=>{s.setFieldValue(`ports.${r}.targetAddress`,o)},onBlur:()=>{s.setFieldTouched(`ports.${r}.targetAddress`,!0)},error:s.touched.ports?.[r]?.targetAddress?l?.targetAddress:void 0,help:r===s.values.ports.length-1&&e.jsxs(e.Fragment,{children:["Must be from the network ",e.jsx("b",{children:a?.name}),"."]}),"aria-label":`Port ${r} target address`})}),e.jsx("td",{className:"target-port",children:e.jsx(t.Input,{...s.getFieldProps(`ports.${r}.targetPort`),id:`ports.${r}.targetPort`,type:"text","aria-label":`Port ${r} target port`,placeholder:"Port number(s)",help:r===s.values.ports.length-1&&"Same as listen port if empty",error:s.touched.ports?.[r]?.targetPort?l?.targetPort:void 0})}),e.jsx("td",{children:e.jsx(t.Button,{onClick:async()=>s.setFieldValue("ports",[...s.values.ports.slice(0,r),...s.values.ports.slice(r+1)]),hasIcon:!0,className:"u-no-margin--bottom",type:"button","aria-label":`Delete port ${r}`,children:e.jsx(t.Icon,{name:"delete"})})})]},r)})})]}),M=s=>({listen_address:s.listenAddress,description:s.description,config:{target_address:s.defaultTargetAddress},ports:s.ports.map(d=>({listen_port:d.listenPort?.toString(),protocol:d.protocol,target_address:d.targetAddress?.toString(),target_port:d.targetPort?.toString()})),location:s.location}),z=m().shape({listenAddress:n().test("valid-ip","Invalid IP address",i).required("Listen address is required"),defaultTargetAddress:n().test("valid-ip","Invalid IP address",s=>!s||i(s)),ports:P().of(m().shape({listenPort:n().test("valid-port","Invalid port number",x).required("Listen port required"),protocol:n().required("Protocol is required"),targetAddress:n().test("valid-ip","Invalid IP address",i).required("Target address is required"),targetPort:n().nullable().test("valid-port","Invalid port number",x)}))}),E=({formik:s,isEdit:d,network:a})=>{const u=t.useNotify(),{data:r=[]}=L(),l=r.length>0&&a?.type===I,o=s.values.listenAddress&&i(s.values.listenAddress),h=o?F(s.values.listenAddress):null;p.useEffect(()=>{l&&!s.values.location&&s.setFieldValue("location",r[0].server_name)},[r]),p.useEffect(()=>{o||s.setFieldValue("defaultTargetAddress",void 0)},[o]);const g=()=>{y("form-contents","p-bottom-controls")};p.useEffect(g,[u.notification?.message]),t.useListener(window,g,"resize",!0);const A=()=>{s.setFieldValue("ports",[...s.values.ports,{protocol:"tcp"}]);const c=`ports.${s.values.ports.length}.listenPort`;T(c)},j=f(a),b=!j||!["0.0.0.0","::"].includes(s.values.listenAddress);return e.jsx(t.Form,{className:"form network-forwards-form",onSubmit:s.handleSubmit,children:e.jsx(t.Row,{className:"form-contents",children:e.jsx(t.Col,{size:12,children:e.jsxs(C,{children:[e.jsx(t.Input,{type:"submit",hidden:!0,value:"Hidden input"}),e.jsxs(t.Row,{className:"p-form__group p-form-validation",children:[e.jsx(N,{}),e.jsxs(t.Notification,{severity:"information",title:"Network information",titleElement:"h2",children:["Name: ",a?.name,e.jsx("br",{}),a?.config["ipv4.address"]&&e.jsxs(e.Fragment,{children:["IPv4: ",a?.config["ipv4.address"],e.jsx("br",{})]}),a?.config["ipv6.address"]&&e.jsxs(e.Fragment,{children:["IPv6: ",a?.config["ipv6.address"]]})]})]}),e.jsxs(t.Row,{children:[e.jsx(t.Col,{size:4,children:e.jsx(t.Label,{forId:"listenAddress",children:"Listen address"})}),e.jsxs(t.Col,{size:8,children:[j&&!d&&e.jsxs(e.Fragment,{children:[a?.config["ipv4.address"]!=="none"&&e.jsx(t.RadioInput,{label:"Auto-assign IPv4 address",checked:s.values.listenAddress==="0.0.0.0",onChange:()=>{s.setFieldValue("listenAddress","0.0.0.0")}}),a?.config["ipv6.address"]!=="none"&&e.jsx(t.RadioInput,{label:"Auto-assign IPv6 address",checked:s.values.listenAddress==="::",onChange:()=>{s.setFieldValue("listenAddress","::")}}),e.jsx(t.RadioInput,{label:"Manually enter address",checked:b,onChange:()=>{s.setFieldValue("listenAddress","")}})]}),e.jsx(t.Input,{...s.getFieldProps("listenAddress"),id:"listenAddress",type:"text",placeholder:"Enter IP address",autoFocus:!0,required:!0,disabled:d||!b,help:d?"Listen address cannot be changed after creation.":"Any address routed to LXD.",error:s.touched.listenAddress?s.errors.listenAddress:void 0})]})]}),e.jsxs(t.Row,{children:[e.jsx(t.Col,{size:4,children:e.jsx(t.Label,{forId:"defaultTargetAddress",children:"Default target address"})}),e.jsx(t.Col,{size:8,children:e.jsx(t.PrefixedIpInput,{id:"defaultTargetAddress",name:"defaultTargetAddress",cidr:v(h,a),ip:s.values.defaultTargetAddress||"",onIpChange:c=>{s.setFieldValue("defaultTargetAddress",c)},onBlur:()=>{s.setFieldTouched("defaultTargetAddress",!0)},error:s.touched.defaultTargetAddress?s.errors.defaultTargetAddress:void 0,disabled:!o,help:e.jsxs(e.Fragment,{children:["Fallback target for traffic that does not match a port specified below.",e.jsx("br",{}),"Must be from the network ",e.jsx("b",{children:a?.name}),"."]})})})]}),l&&e.jsx($,{...s.getFieldProps("location"),id:"location",label:"Location",help:d?"Location can't be changed after creation.":"Cluster member to create the forward on.",disabled:d||!o,stacked:!0}),e.jsx(t.Input,{...s.getFieldProps("description"),id:"description",type:"text",label:"Description",placeholder:"Enter description",stacked:!0,disabled:!o}),s.values.ports.length>0&&e.jsx(t.Row,{children:e.jsx(w,{formik:s,network:a,targetAddressFamily:h})}),e.jsx("div",{children:e.jsxs(t.Button,{hasIcon:!0,onClick:A,type:"button",disabled:!o,children:[e.jsx(t.Icon,{name:"plus"}),e.jsx("span",{children:"Add port"})]})})]})})})})};export{z as N,E as a,M as t};