(("undefined"!==typeof self?self:this)["webpackChunknutanix_1_0_2"]=("undefined"!==typeof self?self:this)["webpackChunknutanix_1_0_2"]||[]).push([[916],{1210:function(e,t,a){"use strict";a.d(t,{Y:function(){return l}});var s=a(5250),i=a(4364);function n(e,t,a){return(t=o(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e){var t=r(e,"string");return"symbol"==typeof t?t:t+""}function r(e,t){if("object"!=typeof e||!e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var s=a.call(e,t||"default");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}class l{constructor(e,t){n(this,"endpoint",""),n(this,"username",""),n(this,"password",""),n(this,"port",""),n(this,"insecure",!1),n(this,"clusterReferenceId",""),n(this,"credentialID",""),n(this,"endpoints",void 0),n(this,"$dispatch",void 0),t.nutanixcredentialConfig?(Object.keys(t.nutanixcredentialConfig).forEach((e=>{this[e]=t.nutanixcredentialConfig[e]})),this.credentialID=t.id):Object.keys(t).forEach((e=>{this[e]=t[e]})),this.$dispatch=e.dispatch}async testConnection(){const e=`/meta/proxy/${this.endpoint}:${this.port}`,t=`${e}/api/clustermgmt/v4.0/config/clusters`,a={Accept:"application/json","X-API-Auth-Header":"Basic "+btoa(this.username+":"+this.password)};try{const e=await this.$dispatch("management/request",{url:t,headers:a,method:"GET",redirectUnauthorized:!1},{root:!0});return 502===e._status?{error:"Could not proxy request - URL may not be in Rancher's allow list"}:e}catch(s){return i.error(s),{error:s}}}async getClusterList(e,t){return await this.getOptions({value:e,api:"/api/clustermgmt/v4.0/config/clusters",field:"data",filter:e=>e.config.hypervisorTypes.includes("AHV"),initial:t})}async getImages(e,t){return await this.getOptions({value:e,api:"/api/vmm/v4.0/content/images",field:"data",initial:t})}async getNetwork(e,t){return await this.getOptions({value:e,api:"/api/networking/v4.0/config/subnets",field:"data",mapper:async e=>{const t="OVERLAY"===e.subnetType?(await this.getVpc(e.vpcReference)).data:void 0;return{...e,baseName:e.name,name:"OVERLAY"===e.subnetType?`${e.name} (${t.name})`:e.name}},filter:e=>("OVERLAY"==e.subnetType||e.clusterReference==this.clusterReferenceId)&&!e.isExternal,initial:t})}async getVpc(e){return await this.makeComputeRequest(`/api/networking/v4.0/config/vpcs/${e}`)}async getStorageContainer(e,t){return await this.getOptions({value:e,api:"/api/clustermgmt/v4.0/config/storage-containers",field:"data",filter:e=>e.clusterExtId==this.clusterReferenceId,initial:t})}async getCategories(e,t){return await this.getOptions({value:e,api:"/api/prism/v4.0/config/categories",field:"data",mapper:e=>({...e,name:`${e.key}=${e.value}`}),filter:e=>"Project"!==e.key,initial:t})}async getProjectsName(e,t){return await this.getOptions({value:e,api:"/api/nutanix/v3/projects/list",field:"entities",mapper:e=>({...e,name:`${e.spec.name}`}),initial:t})}async constructTotalResponse(e,t,a){const s=Math.ceil(a/t),i=[];for(let n=1;nn(e)))),i&&(e=await Promise.all(e.map((async e=>await i(e))))),t.options.forEach((t=>{e.push(t)})),t.options=this.convertToOptions(e),t.busy=!1,t.options.lengtha!==e.findIndex((e=>t.name===e.name))));t.duplicates=a}if(o){const e=t.options.find((e=>e.value.name===o));e&&(t.selected=e.value)}}else t.options=[],t.selected=(0,s.isArray)(t.selected)?[]:null,t.busy=!1,t.enabled=!1}async makeComputeRequest(e,t="GET"){const a=`/meta/proxy/${this.endpoint}:${this.port}`,s=`${a}${e}`,n={Accept:"application/json","Content-Type":"application/json","X-API-Auth-Header":"Basic "+btoa(this.username+":"+this.password)};try{const e=await this.$dispatch("management/request",{url:s,headers:n,method:t,data:JSON.stringify({}),redirectUnauthorized:!1},{root:!0});return e}catch(o){i.error(o)}}convertToOptions(e){const t=e.filter(((t,a)=>a===e.findIndex((e=>t.name===e.name)))),a=(t||[]).sort(((e,t)=>e.name.localeCompare(t.name)));return a.map((e=>({label:e.name,value:e})))}}},3162:function(e,t,a){var s=a(5370);s.__esModule&&(s=s.default),"string"===typeof s&&(s=[[e.id,s,""]]),s.locals&&(e.exports=s.locals);var i=a(4825).A;i("e9daccc8",s,!0,{sourceMap:!1,shadowMode:!1})},3750:function(e,t,a){"use strict";a.r(t),a.d(t,{default:function(){return E}});var s=a(9274);const i=e=>((0,s.pushScopeId)("data-v-77bf4674"),e=e(),(0,s.popScopeId)(),e),n={class:"row"},o={class:"col span-6"},r={class:"col span-6"},l={class:"row"},d={class:"col span-6"},c={class:"col span-6"},u={class:"row"},p={class:"col span-6"},h=["disabled","loading"],m={key:0,class:"icon icon-lg icon-spinner icon-spin"},v={key:1,class:"icon-spacer"},f=i((()=>(0,s.createElementVNode)("span",{class:"icon-spacer"},null,-1))),y=["disabled"];function w(e,t,a,i,w,g){const b=(0,s.resolveComponent)("LabeledInput"),k=(0,s.resolveComponent)("Checkbox"),x=(0,s.resolveComponent)("Banner");return(0,s.openBlock)(),(0,s.createElementBlock)(s.Fragment,null,[(0,s.createElementVNode)("div",n,[(0,s.createElementVNode)("div",o,[(0,s.createVNode)(b,{value:a.value.decodedData.endpoint,disabled:1!==w.step,"label-key":"driver.nutanix.auth.fields.endpoint","placeholder-key":"driver.nutanix.auth.placeholders.endpoint",type:"text",mode:a.mode,"onUpdate:value":t[0]||(t[0]=e=>{a.value.setData("endpoint",e)})},null,8,["value","disabled","mode"])]),(0,s.createElementVNode)("div",r,[(0,s.createVNode)(b,{value:a.value.decodedData.port,disabled:1!==w.step,"label-key":"driver.nutanix.auth.fields.port","placeholder-key":"driver.nutanix.auth.placeholders.port",type:"text",mode:a.mode,"onUpdate:value":t[1]||(t[1]=e=>{a.value.setData("port",e)})},null,8,["value","disabled","mode"])])]),(0,s.createElementVNode)("div",l,[(0,s.createElementVNode)("div",d,[(0,s.createVNode)(b,{value:a.value.decodedData.username,disabled:1!==w.step,class:"mt-20","label-key":"driver.nutanix.auth.fields.username","placeholder-key":"driver.nutanix.auth.placeholders.username",type:"text",mode:a.mode,"onUpdate:value":t[2]||(t[2]=e=>{a.value.setData("username",e)})},null,8,["value","disabled","mode"])]),(0,s.createElementVNode)("div",c,[(0,s.createVNode)(b,{value:a.value.decodedData.password,disabled:1!==w.step,class:"mt-20","label-key":"driver.nutanix.auth.fields.password","placeholder-key":"driver.nutanix.auth.placeholders.password",type:"password",mode:a.mode,"onUpdate:value":t[3]||(t[3]=e=>{a.value.setData("password",e)})},null,8,["value","disabled","mode"])])]),(0,s.createElementVNode)("div",u,[(0,s.createElementVNode)("div",p,[(0,s.createVNode)(k,{class:"mt-20",value:a.value.decodedData.insecure,valueWhenTrue:!0,"label-key":"driver.nutanix.auth.fields.insecure","onUpdate:value":t[4]||(t[4]=e=>{a.value.setData("insecure",e)}),disabled:!0},null,8,["value"])])]),(0,s.createElementVNode)("button",{ref:"connect",class:"btn role-primary mt-20 align-start",disabled:1!==w.step||!g.canAuthenticate,loading:1!==w.step||!g.canAuthenticate,onClick:t[5]||(t[5]=e=>g.connect(e))},[w.busy?((0,s.openBlock)(),(0,s.createElementBlock)("i",m)):((0,s.openBlock)(),(0,s.createElementBlock)("span",v)),(0,s.createElementVNode)("span",null,(0,s.toDisplayString)(e.t("driver.nutanix.auth.actions.authenticate")),1),f],8,h),w.success?((0,s.openBlock)(),(0,s.createBlock)(x,{key:0,color:"success",closable:!1},{default:(0,s.withCtx)((()=>[(0,s.createTextVNode)((0,s.toDisplayString)(w.success),1)])),_:1})):(0,s.createCommentVNode)("",!0),w.error?((0,s.openBlock)(),(0,s.createBlock)(x,{key:1,class:"mt-20",color:"error"},{default:(0,s.withCtx)((()=>[(0,s.createTextVNode)((0,s.toDisplayString)(w.error),1)])),_:1})):(0,s.createCommentVNode)("",!0),w.errorAllowHost?((0,s.openBlock)(),(0,s.createBlock)(x,{key:2,color:"error",class:"allow-list-error"},{default:(0,s.withCtx)((()=>[(0,s.createElementVNode)("div",null,(0,s.toDisplayString)(e.t("driver.nutanix.auth.errors.notAllowed",{hostname:g.hostname})),1),(0,s.createElementVNode)("button",{disabled:w.allowBusy,class:"btn ml-10 role-primary",onClick:t[6]||(t[6]=(...e)=>g.addHostToAllowList&&g.addHostToAllowList(...e))},(0,s.toDisplayString)(e.t("driver.nutanix.auth.actions.addToAllowList")),9,y)])),_:1})):(0,s.createCommentVNode)("",!0)],64)}var g=a(667),b=a(1210),k=a(2339),x=a(4962),D=a(7093),C=a(5953),A=a(4364),V={components:{Banner:k.A,LabeledInput:x.o,LabeledSelect:D.A,Checkbox:C.A},props:{mode:{type:String,required:!0},value:{type:Object,required:!0}},async fetch(){this.driver=await this.$store.dispatch("rancher/find",{type:"nodedriver",id:"nutanix"})},data(){return{step:1,busy:!1,errorAllowHost:!1,allowBusy:!1,driver:{},error:"",success:""}},computed:{hostname(){const e=(0,g.qg)(this.value.decodedData.endpoint);return e?.host||""},canAuthenticate(){return!!this.value?.decodedData?.endpoint&&!!this.value?.decodedData?.username&&!!this.value?.decodedData?.password}},emits:["validationChanged"],methods:{test(){return!0},hostInAllowList(){if(!this.driver?.whitelistDomains)return!1;const e=(0,g.qg)(this.value.decodedData.endpoint);return!e.host||(this.driver?.whitelistDomains||[]).includes(e.host)},async addHostToAllowList(){this["allowBusy"]=!0;const e=(0,g.qg)(this.value.decodedData.endpoint);this.driver.whitelistDomains=this.driver.whitelistDomains||[],this.hostInAllowList()||this.driver.whitelistDomains.push(e.host);try{await this.driver.save(),this["error"]="",this.connect()}catch(t){A.error("Could not update driver",t),this["allowBusy"]=!1}},async connect(){if(this.disabled)return;this["error"]="",this["success"]="",this["errorAllowHost"]=!1;let e=!1;if(!this.value.decodedData.endpoint)return void(this["busy"]=!1);this.value.decodedData.port||this.value.setData("port",9440);const t=new b.Y(this.$store,{endpoint:this.value.decodedData.endpoint,username:this.value.decodedData.username,password:this.value.decodedData.password,port:this.value.decodedData.port,insecure:this.value.decodedData.insecure});this["allowBusy"]=!1,this["busy"]=!0;const a=await t.testConnection();a.error?(e=!1,502!==a.error._status||this.hostInAllowList()?401===a.error._status?this["error"]="Authentication Failed":404===a.error._status?this["error"]="API method not found. PC version 2024.3 or higher is required":this["error"]=a.error.message?a.error.message:"Something went wrong":this["errorAllowHost"]=!0):(e=!0,this["success"]=`Welcome ${this.value.decodedData.username}, connected to ${this.value.decodedData.endpoint}`),this["busy"]=!1,this.$emit("validationChanged",e)}}},N=(a(3162),a(7433));const $=(0,N.A)(V,[["render",w],["__scopeId","data-v-77bf4674"]]);var E=$},5370:function(e,t,a){"use strict";a.r(t);var s=a(429),i=a.n(s),n=a(1214),o=a.n(n),r=o()(i());r.push([e.id,".allow-list-error[data-v-77bf4674]{display:flex}.allow-list-error[data-v-77bf4674]>:first-child{flex:1}.icon-spacer[data-v-77bf4674]{width:24px}.align-start[data-v-77bf4674]{align-self:flex-start}",""]),t["default"]=r}}]); //# sourceMappingURL=nutanix-1.0.2.umd.min.cloud-credential.js.map