define(["angular","lodash","cjt/util/locale","uiBootstrap","app/services/versionControlService","app/services/sshKeyVerification","cjt/services/alertService","cjt/directives/alert","cjt/directives/alertList","cjt/directives/actionButtonDirective","cjt/directives/toggleSwitchDirective","cjt/directives/toggleLabelInfoDirective","app/services/versionControlService","cjt/directives/validationContainerDirective","cjt/directives/validationItemDirective","cjt/validator/ascii-data-validators","cjt/validator/path-validators","app/services/directoryLookupService","app/directives/cloneURLValidator","cjt/filters/htmlFilter","cjt/decorators/uibTypeaheadDecorator"],(function(e,t,o){"use strict";var r=e.module("cpanel.versionControl");return r.value("PAGE",PAGE),r.controller("CreateRepositoriesController",["$scope","$location","versionControlService","sshKeyVerification","PAGE","alertService","directoryLookupService",function(e,t,r,a,s,n,i){var c=this;c.homeDirPath=s.homeDir+"/",c.displaySuccessSummary=!1,c.formData={repoName:"",repoPath:"",clone:!0,cloneURL:"",createAnother:!1},c.ssh={},c.pathExcludeList="[^'\":\\\\*?<>|@&=%#`$(){};\\[\\]\\s]+";var l=/[%*{}()=?`$@:|[\]'"<>&#;\s\\]+/g;function m(e,t){return e&&t&&e.hostname===t.hostname&&t.port==t.port}function h(e){return e.then((function(e){return c.ssh.status=e,u()}),(function(e){n.add({type:"danger",message:o.maketext("The system failed to add the fingerprints from “[_1]” to the [asis,known_hosts] file: [_2]",c.ssh.hostname,e),closeable:!0,replace:!0,group:"versionControl",id:"known-hosts-verification-failure"})})).finally((function(){c.ssh.modal.close(),delete c.ssh.modal}))}function u(){var e=c.homeDirPath+c.formData.repoPath;return r.createRepository(c.formData.repoName,e,c.formData.cloneURL).then((function(e){if(c.formData.cloneURL)n.add({type:"info",message:o.maketext("The system successfully initiated the clone process for the “[_1]” repository.",c.formData.repoName)+" "+o.maketext("The system may require more time to clone large remote repositories."),closeable:!0,replace:!1,group:"versionControl",id:e.cloneTaskID,counter:!1}),c.formData.createAnother?c.resetFormData({isCreateAnother:!0}):c.backToListView();else if(n.add({type:"success",message:o.maketext("The system successfully created the “[_1]” repository.",c.formData.repoName),closeable:!0,replace:!1,autoClose:1e4,group:"versionControl"}),c.formData.createAnother)c.resetFormData({isCreateAnother:!0});else{var t=e,r=t.cloneURL;if(void 0!==r&&r){c.displaySuccessSummary=!0,c.summary={},c.summary.remoteURL=r;var a=c.summary.remoteURL.split("/");a&&a.length>0?c.summary.directoryName=a[a.length-1]:c.summary.directoryName="",c.summary.readOnly=0===t.clone_urls.read_write.length}else c.backToListView()}}),(function(e){n.add({type:"danger",message:e,closeable:!0,replace:!1,group:"versionControl"})}))}c.checkKnownHosts=function(){var e=c.formData.cloneURL,t=e&&a.getHostnameAndPort(e);if(t){if(!m(c.ssh,t))return c.ssh.hostname=t.hostname,c.ssh.port=t.port,c.ssh.status="verifying",c.ssh.keys=[],c.ssh.promise=a.verify(t.hostname,t.port).then(o,o)}else c.ssh={};function o(e){if(m(c.ssh,t))return c.ssh.status=e.status,c.ssh.keys=e.keys,e.status}},c.backToListView=function(){t.path("/list")},c.resetFormData=function(e){c.formData={repoName:"",repoPath:"",clone:!e.isCreateAnother||c.formData.clone,cloneURL:"",createAnother:Boolean(e.isCreateAnother)},c.createRepoForm.$setPristine()},c.createRepository=function(){if(c.formData.repoName&&c.formData.repoPath)return n.clear(null,"versionControl"),c.formData.clone||(c.formData.cloneURL=null),!c.formData.cloneURL||"unrecognized-new"!==c.ssh.status&&"unrecognized-changed"!==c.ssh.status?c.formData.cloneURL&&c.ssh.promise?c.ssh.promise.then((function(e){return delete c.ssh.promise,c.createRepository()})):u():(n.clear(null,"versionControl"),c.ssh.modal=a.openModal({hostname:c.ssh.hostname,port:c.ssh.port,type:c.ssh.status,keys:c.ssh.keys,onAccept:h}),void c.ssh.modal.result.catch((function(){n.add({type:"danger",message:o.maketext("The system [output,strong,cannot] clone this repository if you do not trust the host key for “[output,strong,_1]”. To create your repository, select one of the following options:",c.ssh.hostname),list:[o.maketext("Enter a clone URL that uses the HTTPS or Git protocols instead of SSH."),o.maketext("Enter a clone URL for a different, previously-trusted host."),o.maketext("Click [output,em,Create] again and choose to trust the remote server.")],closeable:!0,replace:!0,group:"versionControl",id:"known-hosts-verification-cancelled"})})))},c.completeDirectory=function(e){var t=i.complete(e),o=[];return t.then((function(e){for(var t=0,r=e.length;t<r;t++){var a=e[t];-1===a.search(l)&&o.push(a)}return o}))},c.toggleStatus=function(){return c.formData.clone=!c.formData.clone,!0},c.autoFillPathAndName=function(){if(!c.formData.repoName&&!c.formData.repoPath&&c.createRepoForm.repoCloneURL.$valid&&c.formData.cloneURL){var e=c.formData.cloneURL,t=(e=e.replace(/\/+$/,"")).substr(e.lastIndexOf("/")+1).replace(".git",""),o="repositories/"+(t=t.replace(l,"_"));c.formData.repoPath=o,c.formData.repoName=t}}}])}));