{"version":3,"sources":["../../../Assets/Scripts/App/Controllers/FeatureRequestController.js","../../../Assets/Scripts/App/Controllers/Modals/createCompanyController.js","../../../Assets/Scripts/App/Controllers/Modals/selectWorkbooksOrganisationController.js","../../../Assets/Scripts/App/Controllers/Modals/thirdPartyCredentialsController.js","../../../Assets/Scripts/App/Controllers/Modals/thirdPartyCredentialsRemovalConfirmationController.js","../../../Assets/Scripts/App/Controllers/accountsController.js","../../../Assets/Scripts/App/Controllers/activateAccountController.js","../../../Assets/Scripts/App/Controllers/appController.js","../../../Assets/Scripts/App/Controllers/attachAccountController.js","../../../Assets/Scripts/App/Controllers/authenticatorController.js","../../../Assets/Scripts/App/Controllers/changePasswordController.js","../../../Assets/Scripts/App/Controllers/companiesController.js","../../../Assets/Scripts/App/Controllers/createAccountController.js","../../../Assets/Scripts/App/Controllers/dashboardController.js","../../../Assets/Scripts/App/Controllers/deleteAccountsController.js","../../../Assets/Scripts/App/Controllers/detachAccountsController.js","../../../Assets/Scripts/App/Controllers/editAccountController.js","../../../Assets/Scripts/App/Controllers/editCompanyController.js","../../../Assets/Scripts/App/Controllers/errorController.js","../../../Assets/Scripts/App/Controllers/exportAccountsController.js","../../../Assets/Scripts/App/Controllers/forceSSOController.js","../../../Assets/Scripts/App/Controllers/forensicsController.js","../../../Assets/Scripts/App/Controllers/impersonateController.js","../../../Assets/Scripts/App/Controllers/ipAuthenticationController.js","../../../Assets/Scripts/App/Controllers/loginController.js","../../../Assets/Scripts/App/Controllers/marketingFrameController.js","../../../Assets/Scripts/App/Controllers/newSocialWizardController.js","../../../Assets/Scripts/App/Controllers/oAuthPermissionsController.js","../../../Assets/Scripts/App/Controllers/registerController.js","../../../Assets/Scripts/App/Controllers/registrationController.js","../../../Assets/Scripts/App/Controllers/registrationsController.js","../../../Assets/Scripts/App/Controllers/requestPasswordController.js","../../../Assets/Scripts/App/Controllers/resetAuthenticatorController.js","../../../Assets/Scripts/App/Controllers/resetPasswordController.js","../../../Assets/Scripts/App/Controllers/updateIntegrationCredentialsController.js","../../../Assets/Scripts/App/Controllers/wizard2Controller.js"],"names":["featureRequestController","$scope","$sce","$location","$uibModal","$cookies","accountsService","vm","this","hello","account","loader","acceptedTC","alert","hasGrantedThirdParty","getAuthenticatedAccount","then","data","beginCanny","accountId","getAccount","accountDetails","showFeatureRequest","url","cannyId","$","modal","show","backdrop","keyboard","loadCanny","nope","accepted","checked","runCannySetup","createCannyUser","id","getCannySsoToken","Canny","boardToken","basePath","ssoToken","angular","module","controller","createCompanyController","$uibModalInstance","$routeParams","companyService","model","loading","working","success","createCompany","cancel","dismiss","navigateToCompany","companyId","submit","submitted","$valid","company","Name","companyName","PartnerCode","partnerCode","EmailDomain","emailDomain","Address1","address1","Address2","address2","Address3","address3","PostCode","postCode","IsCrmIntegrated","isCrmIntegrated","CrmName","crmName","complete","response","error","isAdmin","accountType","AccountType","Admin","SuperAdmin","isPartnerAdmin","Partner","PartnerSuperAdmin","isPartnerSuperAdmin","isSuperAdmin","isCompanyAdmin","Company","authenticatedAccountId","selectWorkbooksOrganisationController","workbooksService","filter","name","page","take","searchWorkbooksOrganisations","searchOrganisations","organisations","pageChanged","selectOrganisation","organisation","close","thirdPartyCredentialsController","thirdPartyCredentialsService","args","setup","getThirdParties","x","thirdParties","isCreate","credentials","i","length","type","thirdPartyType","selectedThirdParty","providerSelected","providerProperties","infoText","trustAsHtml","toLowerCase","properties","camelize","parseInt","str","replace","word","index","toUpperCase","crmCredentialsForm","createRequest","create","errorMessage","message","updateRequest","credentialsId","update","getValidProperties","property","condition","value","sourceProperty","operator","trim","split","includes","push","thirdPartyCredentialsRemovalConfirmationController","confirm","accountsController","stateService","pagerButton","text","enabled","current","firstRun","put","pager","count","total","pageSize","totalPages","currentPage","canPrev","canNext","buttons","totalButtons","pageSkip","startButton","Math","floor","endButton","prevPage","nextPage","impersonate","userId","window","location","getAccounts","accounts","filterApplied","start","waiting","pageValue","get","map","item","friendlyType","editAccount","clearFilter","exportNewAccounts","open","templateUrl","size","deleteAccount","email","resolve","emailToDelete","accountIdToDelete","result","delete","reloadAccounts","filterValue","undefined","authenticatedAccountRole","isImpersonating","activateAccountController","activate","t","redirectToLogin","ct","encodeURIComponent","appController","$rootScope","$timeout","angularLoad","loginService","wowTrackingService","loadAuthenticatedAccount","next","loaded","warnAboutAuthenticator","isGoogleAuthenticatorEnabled","trackPage","firstName","lastName","title","absUrl","e","scriptLoaded","script","loadScript","showLogo","gatorAppsPlugin","init","catch","isAuthenticated","$on","event","logOut","attachAccountController","dashboardService","clientToAttach","Loading","client","navigate","formattedName","submitAttach","ErrorMessage","attachAccount","attachUsername","attachPassword","attachClientDetailsId","httpResponse","statusCode","authenticatorController","changePasswordController","continue","changePasswordForm","changePassword","currentPassword","password","errors","companiesController","searchValue","filterCompanies","getCompanies","companies","showCreateCompanyModal","createAccountController","vcRecaptchaService","key","widgetId","setResponse","console","info","setWidgetId","cbExpiration","reload","createAccountForm","ipAuthentication","jobTitle","recapture","createAccount","log","dashboardController","_","showError","Working","DidYouKnow","DidYouKnowMessages","AttachMultipleAccounts","SuccessMultiAccounts","forEach","Selected","JSON","parse","Message","ClientId","UniqueId","DisplayName","loginId","loadClientUsers","href","SelectItem","sender","NavigateClientRedirectUrl","linkId","GetClientRedirectUrl","storeLogin","getCookie","cname","decodedCookie","decodeURIComponent","document","cookie","ca","c","charAt","substring","indexOf","getLogin","obj","setCookie","cvalue","exdays","d","Date","setTime","getTime","expires","toUTCString","clientAccount","currentClientUserArray","stringify","removeClientUser","clientId","collection","itemIndex","emailAddress","removeClientUsers","accountToRemove","splice","accountsForRemoval","detachAccountsModal","defaultClientUser","isDefault","updateClientAccounts","attachAccountModal","clientsToDetach","GatorLeadsAccounts","newArray","getTemplate","product","loadClients","GetClients","Clients","GatorApps","GatorClients","isHidden","clientDetails","gatorClients","Express","ClientAccounts","GatorExpressAccounts","Mail","GatorMailAccounts","Social","GatorSocialAccounts","Leads","Workflow","GatorWorkflowAccounts","Docs","GatorDocsAccounts","Survey","GatorSurveyAccounts","SendForensics","GatorForensicsAccounts","SEO","GatorSEOAccounts","Popup","GatorPopupAccounts","Report","GatorReportAccounts","SignOn","isThirdParty","getAuthorizedAccount","GatorCreatorAccounts","search","clientUsers","ssoClientUsers","linkedAccount","ssoClientId","canAddAccount","isUserAddable","clientsAllowed","details","endPointsEnum","availableEndPoints","apiUrl","ssoEndPoints","CreateAccount","AttachClientUser","AttachClientUsers","deleteAccountsController","ok","confirming","detachAccountsController","Collection","AccountsForRemoval","RemoveMultipleAccounts","tmpArray","editAccountController","$ngBootbox","clientService","permissionsService","loadOAuthClientsForAccount","GetAllClientsforAccount","apps","toString","selectedAuthenticationMode","getPendingRequests","googleAuthenticatorBarcodeUrl","googleAuthenticatorSecretKey","googleAuthenticatorVerificationError","IpAuthentication","IpAddress","pendingRequests","SecurityQuestions","getSecurityQuestions","SecurityQuestionId","getGoogleAuthenticatorBarcode","barcodeUrl","secretKey","unlockAccount","isAccountLockedOut","verifyGoogleAuthenticator","SecurityQuestionAnswer","googleAuthenticatorCode","encryptedAccountId","isValid","authenticationModeChange","editAccountForm","searchNumber","topbarMode","hideTopBar","defaultDashboard","defaultProduct","updateAccount","adminChangePassword","convertToInt","AddIpAddress","getClients","hasEnviroment","availableClients","environments","localEnv","ssoClient","where","uniqueId","environment","enviroment","addEnvironment","errorTxt","join","deactivateAccount","deactivate","deactivated","reactivateAccount","reactivate","RemoveApp","app","DeleteClientforAccount","connectiondId","FormatDate","date","month","getMonth","day","getDate","year","getFullYear","hour","getHours","minutes","getMinutes","editCompanyController","pagerService","$filter","getCompany","getCompanyById","processCompany","getCompanyApiClients","getCompanyThirdPartyCredentials","GetAllClientsforCompany","clientResponse","apiCredList","getAll","thirdPartyCredentials","thirdPartyCredentialsRequireAttention","some","valid","setUserPage","userPager","GetPager","usersFiltered","userPageSize","users","slice","startIndex","endIndex","setEnvironmentPage","environmentPager","environmentPageSize","displayedEnvironments","setIpAddressPage","ipAddressPager","allowedIpAddresses","ipAddressPageSize","allowedIpAddressesPaged","setEmailPage","emailPager","emailDomains","emailPageSize","removeIpAddress","ipAddressId","reject","ipAddress","removedAllowedIpAddresses","currentAllowedIpAddresses","saveForm","saveCompanyDetails","dynamicsId","workbooksOrganisationId","workbooksOrganisationName","deactivateUser","user","findWhere","activated","sendActivateEmail","sendActivationEmail","canCreateUser","isAccountClientEnabled","find","allowAccess","setAccountClient","accountClient","setAllAccountClient","unsetAllAccountClient","adduserValid","passwordPass","emailPass","firstNamePass","lastNamePass","addAccount","checkDomain","accountCreationStep2","$setPristine","resetCreateUser","isAdminClass","clients","originalEmailDomains","currentEmailDomains","originalEnvironments","currentEnvironments","hiddenProducts","originalHiddenProducts","currentHiddenProducts","originalAllowedIpAddresses","ssoClientTypes","unrestrictedClient","restricted","isUndefined","enviroments","shortName","visible","available","displayName","hiddenId","hiddenProduct","applyUserFilter","userFilter","clearUserFilter","regex","RegExp","match","firstNameRegex","lastNameRegex","userFilterApplied","showProduct","hideProduct","showUpdateCredentialModal","showSelectWorkbooksOrganisationModal","showAddThirdPartyCredentialsModal","controllerAs","showThirdPartyCredentialsSavedMessage","editThirdPartyCredentials","removeThirdPartyCredentials","showThirdPartyCredentialsDeletedMessage","showCrmCredentialsTab","activeTab","removedEmailDomains","createApiCredentialModel","newApiCreds","eId","thirdPartyUse","createApiFailed","isFailed","userPasswordShowSecretFailed","editViewApiCreds","ssoClientType","domain","checking","add","addEmailDomain","remove","removeEmailDomain","sucess","createEnvironment","dir","apiPasswordUpdated","ShowSecretPassword","newApiCredsRulespassed","editApiCredsRulespassed","createApiCredentials","nid","clientSecret","createApiCredBtn","CreateCompanyClient","responce","ViewEditApiCredentials","apiCred","RemoveApiCredentials","ConfrimRemoveApiCredentials","DeleteCompanyClient","UpdateClientPassword","setTimeout","ShowSecret","ConfrimShowSecret","ShowClientSecret","attr","addIpAddress","emailRegex","disableImpersonation","allowImpersonation","deactivateCompany","reactivateCompany","errorController","currentError","exportAccountsController","exportAccountsService","getDayClass","mode","dayToCheck","setHours","events","currentDay","status","setMonth","startDate","endDate","submitExport","exportAccounts","filename","fileName","showDownload","today","dt","clear","inlineOptions","customClass","minDate","showWeeks","dateOptions","format","maxDate","startingDay","toggleMin","open1","popup1","opened","open2","popup2","setDate","tomorrow","afterTomorrow","forceSsoModalController","$close","forceSSOController","forceSSOService","clientToken","run","loginUrl","showModal","ariaLabelledBy","ariaDescribedBy","acknowledged","$inject","forensicsController","thirdPartyService","baseUrl","token","uid","linkid","getForensicsToken","path","getForensicsParams","trustAsResourceUrl","impersonateController","impersonateService","base","bases","getElementsByTagName","origin","ipAuthenticationController","authenticateIpAddress","loginController","showLostAuthenticator","redirectUrl","scope","showEmailWarning","loginForm","login","SecretQuestionAnswer","AuthenticatorRememberMe","googleAuthenticator","SecretQuestion","secretQuestion","setGaFocus","googleAuthenticatorNotSetup","googleAuthenticatorReset","invalidCredentials","redirect","errorTitle","lostAuthenticator","forgottenPassword","marketingFrameController","hideframe","src","newSocialWizardController","PagerButton","Pager","companyAdmin","selectedUsers","getUsers","button","ceil","hasSocial","admins","isSelected","en","selectUser","findIndex","on","css","processing","beginProcessing","addSocialEnvironment","dissmiss","oAuthPermissionsController","permissions","appicationName","stopAllow","checkAllow","changeCheck","getAccountClinets","GetClientDetails","oAuthClientName","clientItem","checkedPermmissions","permission","PostTokenRefresh","access_token","expires_in","refresh_token","denyAccess","registerController","registerService","NavigateToApproval","register","postcode","phoneNumber","website","addRegistration","registrationController","getRegistration","registrationId","processRegistration","getDynamicCompanies","dynamicsFilterApplied","dynamicsPaged","dynamicsFilterValue","dynamicswaiting","dynamicsLookup","dynamicsResponse","dynamicCompanies","dynamicsCompany","dynamicsPager","totalItems","pageDynamicsCompanies","setDynamicsCompany","dynamics","productAccount","startPage","endPage","registration","contactNumber","sendEmail","products","gatorLeads","registerUpsell","trackingQueue","activateRegistration","registerAccountForm","registrationsController","filterRegistrations","getRegistrations","registrations","requestPasswordController","requestPasswordForm","requestPassword","resetAuthenticatorController","resetAuthenticator","resetPasswordController","accountMessage","resetPasswordForm","adminResetPassword","resetPassword","updateIntegrationCredentialsController","Close","SaveCredentials","updateIntegrationCredentials","username","wizardController","wizardService","attach"],"mappings":"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","file":"controllers.min.js","sourcesContent":["(function() {\n\n 'use strict';\n angular.module('app')\n .controller('featureRequestController',\n [\n '$scope',\n '$sce',\n '$location',\n '$uibModal',\n '$cookies',\n 'accountsService',\n featureRequestController\n ]\n );\n\n function featureRequestController($scope, $sce, $location, $uibModal, $cookies, accountsService) {\n \n var vm = this;\n vm.hello = 'Hello World';\n vm.account = null;\n vm.loader = true;\n vm.acceptedTC = false;\n vm.alert = false;\n vm.hasGrantedThirdParty = false;\n\n accountsService.getAuthenticatedAccount().then(function (data) {\n vm.account = data;\n vm.beginCanny(vm.account.accountId);\n });\n\n vm.beginCanny = function (accountId) {\n accountsService.getAccount(accountId).then(function(data) {\n vm.accountDetails = data;\n if (!vm.accountDetails.showFeatureRequest)\n $location.url('/dashboard');\n\n if (vm.accountDetails.cannyId === null || vm.accountDetails.cannyId === '')\n $('#tAndC').modal({ 'show': true, \"backdrop\": 'static', \"keyboard\": false });\n else\n vm.loadCanny(accountId);\n });\n };\n\n vm.nope = function () {\n $('#tAndC').modal('hide');\n $location.url('/dashboard');\n }\n\n vm.accepted = function () {\n if ($('#acceptedTC')[0].checked) {\n vm.hasGrantedThirdParty = true;\n $('#tAndC').modal('hide');\n vm.runCannySetup(vm.account.accountId);\n } else {\n vm.alert = true;\n }\n }\n\n vm.runCannySetup = function(accountId) { \n if (vm.hasGrantedThirdParty) {\n accountsService.createCannyUser(accountId).then(function(data) {\n vm.accountDetails.cannyId = data.id;\n vm.loadCanny(accountId);\n });\n }\n };\n \n vm.loadCanny = function (accountId) {\n accountsService.getCannySsoToken(accountId).then(function(data) {\n Canny('render', {\n boardToken: 'ebcc4af0-e24c-51ea-871a-c60e48b2c3c9',\n basePath: '/FeatureRequest',\n ssoToken: data, \n });\n vm.loader = false;\n });\n };\n }\n})();","(function () {\n\n 'use strict';\n angular.module('app').controller('createCompanyController', ['$scope', '$uibModalInstance', '$location', '$routeParams', 'companyService','accountsService', createCompanyController]);\n\n function createCompanyController($scope, $uibModalInstance, $location, $routeParams, companyService, accountsService) {\n\n \n $scope.model = {};\n $scope.model.loading = true;\n $scope.model.working = false;\n $scope.model.success = false;\n\n $scope.createCompany = {};\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n }\n $scope.navigateToCompany = function() {\n $location.url('/company/' + $scope.model.companyId);\n $scope.cancel();\n }\n $scope.submit = function () {\n $scope.model.submitted = true;\n if (!$scope.createCompany.$valid) {\n return;\n }\n\n $scope.model.working = true;\n\n\n var company = {\n Name: $scope.model.companyName,\n PartnerCode: $scope.model.partnerCode,\n EmailDomain: $scope.model.emailDomain,\n Address1: $scope.model.address1,\n Address2: $scope.model.address2,\n Address3: $scope.model.address3,\n PostCode: $scope.model.postCode,\n IsCrmIntegrated: $scope.model.isCrmIntegrated,\n CrmName: $scope.model.crmName\n };\n\n \n\n $scope.model.complete = false;\n\n companyService.createCompany(company).then(function (response) {\n $scope.model.working = false;\n\n $scope.model.complete = true;\n $scope.model.success = true;\n\n $scope.model.companyId = response.id;\n\n\n },\n function (response) {\n $scope.model.working = false;\n\n $scope.model.error = response;\n $scope.model.complete = true;\n $scope.model.success = false;\n });\n }\n $scope.getAuthenticatedAccount = function () {\n\n accountsService.getAuthenticatedAccount().then(function(response) {\n\n $scope.model.isAdmin = (response.accountType === AccountType.Admin || response.accountType === AccountType.SuperAdmin);\n $scope.model.isPartnerAdmin = response.accountType === AccountType.Partner || response.accountType === AccountType.PartnerSuperAdmin;\n $scope.model.isPartnerSuperAdmin = response.accountType === AccountType.PartnerSuperAdmin;\n $scope.model.isSuperAdmin = (response.accountType === AccountType.SuperAdmin);\n $scope.model.isCompanyAdmin = response.accountType === AccountType.Company;\n $scope.model.authenticatedAccountId = response.accountId;\n\n if ($scope.model.isPartnerAdmin)\n $scope.model.partnerCode = response.partnerCode;\n\n $scope.model.loading = false;\n });\n }\n $scope.getAuthenticatedAccount();\n }\n})();","(function () {\n\n 'use strict';\n angular.module('app').controller('selectWorkbooksOrganisationController', ['$scope', '$uibModalInstance', 'workbooksService', selectWorkbooksOrganisationController]);\n\n function selectWorkbooksOrganisationController($scope, $uibModalInstance, workbooksService) {\n\n $scope.model = {};\n $scope.model.working = false;\n $scope.model.filter = {\n name: '',\n page: 0,\n take: 10\n };\n\n $scope.searchWorkbooksOrganisations = function () {\n $scope.model.working = true;\n\n workbooksService.searchOrganisations($scope.model.filter).then(function (organisations) {\n $scope.model.working = false;\n $scope.model.organisations = organisations;\n });\n }\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n }\n\n $scope.pageChanged = function() {\n $scope.searchWorkbooksOrganisations();\n };\n\n $scope.selectOrganisation = function (organisation) {\n $uibModalInstance.close(organisation);\n };\n }\n})();","(function () {\n\n 'use strict';\n angular.module('app').controller('thirdPartyCredentialsController', ['$uibModalInstance', '$sce', 'thirdPartyCredentialsService', 'args', thirdPartyCredentialsController]);\n\n function thirdPartyCredentialsController($uibModalInstance, $sce, thirdPartyCredentialsService, args) {\n\n var vm = this;\n vm.providerProperties = [];\n vm.properties = {};\n vm.submitted = false;\n vm.isCreate = args.isCreate;\n vm.selectedThirdParty = null;\n vm.crmCredentialsForm = null;\n vm.working = false;\n\n vm.providerSelected = providerSelected;\n vm.submit = submit;\n vm.cancel = cancel;\n vm.getValidProperties = getValidProperties;\n\n function setup() {\n thirdPartyCredentialsService.getThirdParties().then(function (x) {\n vm.thirdParties = x;\n\n if (!vm.isCreate) {\n vm.name = args.credentials.name;\n\n var i;\n for (i = 0; i < vm.thirdParties.length; i++) {\n if (vm.thirdParties[i].type === args.credentials.thirdPartyType) {\n vm.selectedThirdParty = vm.thirdParties[i];\n providerSelected();\n }\n }\n\n for (i = 0; i < vm.providerProperties.length; i++) {\n if (vm.providerProperties[i].infoText) {\n vm.providerProperties[i].infoText = $sce.trustAsHtml(vm.providerProperties[i].infoText + '');\n }\n\n if (vm.providerProperties[i].type.toLowerCase() === 'boolean') {\n vm.properties[vm.providerProperties[i].name] =\n args.credentials.properties[camelize(vm.providerProperties[i].name)].toLowerCase() === 'true';\n } else if (vm.providerProperties[i].type.toLowerCase() === 'integer') {\n parseInt(vm.properties[vm.providerProperties[i].name] =\n parseInt(args.credentials.properties[camelize(vm.providerProperties[i].name)]));\n }\n else {\n vm.properties[vm.providerProperties[i].name] =\n args.credentials.properties[camelize(vm.providerProperties[i].name)];\n }\n }\n }\n });\n }\n \n\n function camelize(str) {\n return str.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (word, index) {\n return index === 0 ? word.toLowerCase() : word.toUpperCase();\n }).replace(/\\s+/g, '');\n }\n\n function providerSelected() {\n vm.submitted = false;\n vm.providerProperties = vm.selectedThirdParty.properties;\n\n for (var i = 0; i < vm.providerProperties.length; i++) {\n if (vm.providerProperties[i].type.toLowerCase() === 'boolean') {\n vm.properties[vm.providerProperties[i].name] = false;\n }\n }\n }\n\n function submit() {\n vm.submitted = true;\n vm.working = true;\n\n if (!vm.crmCredentialsForm.$valid) {\n vm.working = false;\n return;\n }\n\n if (vm.isCreate) {\n var createRequest = {\n companyId: args.companyId,\n name: vm.name,\n thirdPartyType: vm.selectedThirdParty.type,\n properties: vm.properties\n };\n\n thirdPartyCredentialsService.create(createRequest).then(\n function () {\n $uibModalInstance.close();\n },\n function (error) {\n vm.working = false;\n vm.errorMessage = error.message;\n }\n );\n } else {\n var updateRequest = {\n id: args.credentials.credentialsId,\n name: vm.name,\n thirdPartyType: args.credentials.thirdPartyType,\n properties: vm.properties\n };\n\n thirdPartyCredentialsService.update(updateRequest).then(\n function () {\n $uibModalInstance.close();\n },\n function (error) {\n vm.working = false;\n vm.errorMessage = error.message;\n }\n );\n }\n }\n\n function cancel() {\n $uibModalInstance.dismiss('cancel');\n }\n\n function getValidProperties() {\n var properties = [];\n\n for (var i = 0; i < vm.providerProperties.length; i++) {\n var property = vm.providerProperties[i];\n\n if (!property.condition) {\n properties.push(property);\n } else {\n var value = vm.properties[property.condition.sourceProperty];\n if (value) {\n switch (property.condition.operator) {\n case 0: //In\n var values = property.condition.value.toLowerCase().trim().split(/\\s*,\\s*/);\n if (values.includes(value.toLowerCase())) {\n properties.push(property);\n }\n break;\n }\n }\n }\n }\n\n return properties;\n }\n\n setup();\n }\n})();","(function () {\n 'use strict';\n angular.module('app').controller('thirdPartyCredentialsRemovalConfirmationController', ['$uibModalInstance', 'args', thirdPartyCredentialsRemovalConfirmationController]);\n\n function thirdPartyCredentialsRemovalConfirmationController($uibModalInstance, args) {\n\n var vm = this;\n vm.name = args.credentials.name;\n vm.confirm = confirm;\n vm.cancel = cancel;\n\n function confirm() {\n $uibModalInstance.close();\n }\n\n function cancel() {\n $uibModalInstance.dismiss('cancel');\n }\n }\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app').controller('accountsController',['$scope', '$sce', '$location', '$uibModal', '$cookies', 'stateService', 'accountsService',accountsController]);\r\n\r\n function accountsController($scope, $sce, $location, $uibModal, $cookies, stateService, accountsService) {\r\n //$scope.model = stateService.model;\r\n $scope.model = {};\r\n $scope.firstRun = true;\r\n function pagerButton(text, page, enabled, current) {\r\n this.text = $sce.trustAsHtml(text + '');\r\n this.page = page;\r\n this.enabled = enabled;\r\n this.current = current;\r\n if(!$scope.firstRun)\r\n $cookies.put(\"SsoAccountsPage\", page);\r\n }\r\n\r\n function pager(response) {\r\n\r\n this.count = response.count;\r\n this.total = response.total;\r\n this.pageSize = response.count;\r\n\r\n this.totalPages = response.totalPages;\r\n this.currentPage = response.currentPage;\r\n this.canPrev = this.currentPage > 1;\r\n this.canNext = this.currentPage < this.totalPages;\r\n\r\n this.buttons = [];\r\n\r\n var totalButtons = 7; // ensure this is odd\r\n var pageSkip = 10;\r\n var startButton = 1;\r\n if (this\r\n .currentPage >\r\n Math.floor(totalButtons / 2)) startButton = this.currentPage - Math.floor(totalButtons / 2);\r\n\r\n var endButton = startButton + totalButtons - 1;\r\n if (endButton >= this.totalPages) endButton = this.totalPages;\r\n if (this.totalPages > totalButtons &&\r\n (endButton - startButton + 1) < totalButtons) {\r\n startButton = endButton - totalButtons + 1;\r\n }\r\n\r\n var prevPage = this.currentPage - pageSkip;\r\n if (prevPage < 1) prevPage = 1;\r\n\r\n var nextPage = this.currentPage + pageSkip;\r\n if (nextPage > this.totalPages) nextPage = this.totalPages;\r\n\r\n this.buttons.push(new pagerButton('<<', 1, this.currentPage != 1));\r\n this.buttons.push(new pagerButton('<', prevPage, this.currentPage != 1));\r\n\r\n for (var i = startButton; i <= endButton; i++) {\r\n this.buttons.push(new pagerButton(i, i, true, i === this.currentPage));\r\n }\r\n\r\n this.buttons.push(new pagerButton('>',\r\n nextPage,\r\n endButton <= this.totalPages && this.currentPage !== this.totalPages));\r\n this.buttons.push(new pagerButton('>>',\r\n this.totalPages,\r\n endButton <= this.totalPages && this.currentPage !== this.totalPages));\r\n }\r\n\r\n function impersonate(userId) {\r\n window.location = 'impersonate/' + userId;\r\n }\r\n\r\n $scope.impersonate = impersonate;\r\n\r\n $scope.getAccounts = function (filter, page) {\r\n if (filter) {\r\n $scope.model.filterApplied = true;\r\n } else {\r\n $scope.model.accounts = [];\r\n $scope.firstRun = false;\r\n return;\r\n }\r\n\r\n var count = 10;\r\n var start = page;\r\n\r\n $scope.model.waiting = true;\r\n $scope.model.pager = null;\r\n $scope.model.accounts = [];\r\n\r\n $cookies.put(\"SsoAccountsSearch\", filter);\r\n\r\n if ($scope.firstRun) {\r\n var pageValue = $cookies.get(\"SsoAccountsPage\");\r\n\r\n if (pageValue)\r\n start = pageValue;\r\n\r\n $scope.firstRun = false;\r\n }\r\n accountsService.getAccounts(filter, start, count).then(function (response) {\r\n\r\n \r\n $scope.model.accounts = response.accounts.map(function(item) {\r\n switch (item.type) {\r\n case 0:\r\n item.friendlyType = \"User\";\r\n break;\r\n case 1:\r\n item.friendlyType = \"Company Admin\";\r\n break;\r\n case 2:\r\n item.friendlyType = \"Partner Admin\";\r\n break;\r\n case 3:\r\n item.friendlyType = \"Partner Super Admin\";\r\n break;\r\n case 4:\r\n item.friendlyType = \"Admin\";\r\n break;\r\n case 5:\r\n item.friendlyType = \"Super Admin\";\r\n break;\r\n }\r\n\r\n return item;\r\n });\r\n\r\n if (response.accounts && response.accounts.length) {\r\n $scope.model.pager = new pager(response);\r\n }\r\n\r\n $scope.model.waiting = false;\r\n });\r\n };\r\n\r\n $scope.editAccount = function (accountId) {\r\n $location.url('/account/' + accountId);\r\n };\r\n\r\n $scope.clearFilter = function () {\r\n $scope.model.filter = '';\r\n $scope.model.filterApplied = false;\r\n $cookies.put(\"SsoAccountsSearch\", '');\r\n $scope.getAccounts($scope.model.filter, 1);\r\n };\r\n $scope.exportNewAccounts = function () {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: './assets/templates/modals/export_accounts.html',\r\n controller: 'exportAccountsController',\r\n size: 'md'\r\n\r\n });\r\n };\r\n\r\n $scope.deleteAccount = function (accountId, email) {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: 'assets/templates/modals/confirmation_dialog.html',\r\n controller: 'deleteAccountsController',\r\n size: 'md',\r\n resolve: {\r\n emailToDelete: function () {\r\n return email;\r\n },\r\n accountIdToDelete: function () {\r\n return accountId;\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(function (response) {\r\n if (response.delete) {\r\n accountsService.deleteAccount(response.accountId)\r\n .then(function () {\r\n $scope.reloadAccounts();\r\n });\r\n }\r\n });\r\n };\r\n\r\n $scope.reloadAccounts = function () {\r\n\r\n var filterValue = $cookies.get(\"SsoAccountsSearch\");\r\n \r\n\r\n if (filterValue)\r\n $scope.model.filter = filterValue;\r\n\r\n if ($scope.model.filter != undefined && $scope.model.filter != '') {\r\n var currentPage = 1;\r\n\r\n if ($scope.model.pager)\r\n currentPage = $scope.model.pager.currentPage;\r\n\r\n $scope.getAccounts($scope.model.filter, currentPage);\r\n } else {\r\n $scope.getAccounts('', 1);\r\n }\r\n\r\n \r\n };\r\n\r\n accountsService.getAuthenticatedAccount().then(function (response) {\r\n $scope.model.isAdmin = (response.accountType === AccountType.Admin || response.accountType === AccountType.SuperAdmin);\r\n $scope.model.isPartnerAdmin = response.accountType === AccountType.Partner || response.accountType === AccountType.PartnerSuperAdmin;\r\n $scope.model.isPartnerSuperAdmin = response.accountType === AccountType.PartnerSuperAdmin;\r\n $scope.model.isSuperAdmin = (response.accountType === AccountType.SuperAdmin);\r\n $scope.model.isCompanyAdmin = response.accountType === AccountType.Company;\r\n $scope.model.authenticatedAccountId = response.accountId;\r\n $scope.model.companyId = response.companyId;\r\n\r\n $scope.model.authenticatedAccountRole = response.accountType;\r\n $scope.model.isImpersonating = response.isImpersonating;\r\n });\r\n\r\n $scope.reloadAccounts();\r\n }\r\n})();","(function() {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('activateAccountController', ['$scope', '$routeParams', '$location', 'accountsService', activateAccountController]\r\n );\r\n\r\n function activateAccountController($scope, $routeParams, $location, accountsService) {\r\n $scope.model = {};\r\n\r\n accountsService.activate($routeParams.t)\r\n .then(function() {\r\n $scope.model.complete = true;\r\n });\r\n\r\n $scope.redirectToLogin = function() {\r\n if ($routeParams.ct != undefined) {\r\n $location.url('/login?ct=' + window.encodeURIComponent($routeParams.ct));\r\n } else {\r\n $location.url('/login');\r\n }\r\n };\r\n }\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('appController', ['$scope', '$rootScope', '$location', '$timeout', 'angularLoad', 'accountsService', 'loginService', 'wowTrackingService', appController]\r\n );\r\n\r\n function appController($scope, $rootScope, $location, $timeout, angularLoad, accountsService, loginService, wowTrackingService) {\r\n $scope.scriptLoaded = false;\r\n $rootScope.loaded = false;\r\n $scope.model = {};\r\n $scope.model.isAuthenticated = false;\r\n $rootScope.warnAboutAuthenticator = false;\r\n \r\n\r\n $rootScope.$on('$routeChangeStart',\r\n function (event, next, current) {\r\n\r\n //if (current != undefined) {\r\n // $rootScope.$broadcast('saveState', current.controller);\r\n //}\r\n\r\n //$rootScope.$broadcast('restoreState', next.controller);\r\n\r\n\r\n loadAuthenticatedAccount(next);\r\n\r\n\r\n });\r\n\r\n\r\n $scope.logOut = function () {\r\n loginService.logOut();\r\n\r\n $timeout(function () {\r\n $location.url('/');\r\n },\r\n 501);\r\n };\r\n\r\n function loadAuthenticatedAccount(next) {\r\n\r\n\r\n accountsService.getAuthenticatedAccount().then(function (response) {\r\n $rootScope.loaded = true;\r\n $scope.model = response;\r\n $scope.model.isAdmin = (response.accountType === AccountType.Admin || response.accountType === AccountType.SuperAdmin);\r\n $scope.model.isCompanyAdmin = response.accountType === AccountType.Company;\r\n $scope.model.companyId = response.companyId;\r\n\r\n $rootScope.warnAboutAuthenticator = (response.accountType === AccountType.Admin ||\r\n response.accountType === AccountType.SuperAdmin ||\r\n response.accountType === AccountType.Partner ||\r\n response.accountType === AccountType.PartnerSuperAdmin) && !$scope.model.isGoogleAuthenticatorEnabled;\r\n\r\n try {\r\n wowTrackingService.trackPage($scope.model.email,\r\n $scope.model.firstName,\r\n $scope.model.lastName,\r\n next.data.title,\r\n $location.absUrl());\r\n } catch (e) {\r\n\r\n }\r\n\r\n if (!$scope.scriptLoaded && ($location.url().toLowerCase() !== '/logout' && $location.url().toLowerCase() !== '/ssologout')) {\r\n \r\n var script = 'Plugin/scripts/gator_apps_plugin.js?accountId=' + $scope.model.accountId;\r\n angularLoad.loadScript(script).then(function() {\r\n $scope.scriptLoaded = true;\r\n $scope.showLogo = false;\r\n gatorAppsPlugin.init($, 'Gator.SignOn');\r\n }).catch(function() {\r\n // There was some error loading the script. Meh\r\n });\r\n }\r\n\r\n if ($location.url() === '/') {\r\n if (response.isAuthenticated) {\r\n\r\n $location.url('/dashboard');\r\n\r\n } else {\r\n $rootScope.showLogo = true;\r\n $location.url('/login');\r\n \r\n }\r\n }\r\n\r\n\r\n });\r\n }\r\n }\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('attachAccountController', ['$scope', '$uibModalInstance', '$location', 'dashboardService', 'clientToAttach', attachAccountController]\r\n );\r\n\r\n function attachAccountController($scope, $uibModalInstance, $location, dashboardService, clientToAttach) {\r\n\r\n $scope.model = {};\r\n $scope.model.Loading = false;\r\n $scope.model.client = clientToAttach;\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n $scope.navigate = function () {\r\n //ng-href=\"/signup/{{model.client.name}}\r\n $uibModalInstance.dismiss('cancel');\r\n $location.url('/SignUp/' + $scope.model.client.formattedName);\r\n }\r\n $scope.submitAttach = function (client) {\r\n $scope.model.ErrorMessage = '';\r\n $scope.model.Loading = true;\r\n dashboardService.attachAccount(client.attachUsername,\r\n client.attachPassword,\r\n client.id,\r\n client.attachClientDetailsId)\r\n .then(function (response) {\r\n\r\n\r\n var item = response;\r\n if (item.httpResponse.statusCode === 200) {\r\n $scope.model.Loading = false;\r\n $uibModalInstance.close(true);\r\n } else if (item.httpResponse.statusCode === 401) {\r\n // invalid\r\n $scope.model.ErrorMessage = 'Your credentials are invalid. Please try again.';\r\n $scope.model.Loading = false;\r\n } else if (item.httpResponse.statusCode === 204) {\r\n\r\n $scope.model\r\n .ErrorMessage =\r\n 'Unfortunately your instance does not have access to this feature. Please contact your account manager for more information.';\r\n\r\n $scope.model.Loading = false;\r\n } else if (item.httpResponse.statusCode === 409) {\r\n\r\n if (client.id === 6 || client.id === 4) // if VCAB \r\n $scope.model\r\n .ErrorMessage = 'This account has already been attached to an SSO Account.';\r\n else // ELSE its gator\r\n $scope.model\r\n .ErrorMessage =\r\n 'Unfortunately your account is currently locked out due to too many failed login attempts';\r\n\r\n $scope.model.Loading = false;\r\n } else {\r\n // error\r\n $scope.model.ErrorMessage = 'An unknown error has occured.';\r\n $scope.model.Loading = false;\r\n }\r\n\r\n },\r\n function () {\r\n $scope.model.ErrorMessage = 'An unknown error has occured.';\r\n $scope.model.Loading = false;\r\n });\r\n\r\n };\r\n }\r\n})();","(function() {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller(\"authenticatorController\", ['$scope', '$location', '$routeParams', 'accountsService', authenticatorController]\r\n );\r\n\r\n function authenticatorController($scope, $location, $routeParams, accountsService) {\r\n\r\n }\r\n})();","(function() {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('changePasswordController', ['$scope', '$location', '$routeParams', 'accountsService',changePasswordController]\r\n );\r\n\r\n function changePasswordController($scope, $location, $routeParams, accountsService) {\r\n $scope.model = {};\r\n\r\n $scope.continue = function() {\r\n $location.url('/dashboard');\r\n };\r\n\r\n $scope.submit = function() {\r\n $scope.model.submitted = true;\r\n if (!$scope.changePasswordForm.$valid) {\r\n return;\r\n }\r\n\r\n $scope.model.working = true;\r\n\r\n accountsService.changePassword($scope.model.currentPassword, $scope.model.password)\r\n .then(function(response) {\r\n if (response.errors.length > 0) {\r\n $scope.model.error = response.errors[0].message;\r\n } else {\r\n $scope.model.success = true;\r\n }\r\n $scope.model.complete = true;\r\n\r\n\r\n },\r\n function(response) {\r\n $scope.model.working = false;\r\n\r\n $scope.model.error = response.errors[0].message;\r\n $scope.model.complete = true;\r\n $scope.model.success = false;\r\n });\r\n };\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .controller('companiesController', ['$cookies','$uibModal','accountsService', 'companyService', companiesController]);\r\n\r\n\r\n function companiesController($cookies,$uibModal,accountsService, companyService) {\r\n /* jshint validthis:true */\r\n var vm = this;\r\n vm.model = {}\r\n\r\n vm.waiting = false;\r\n vm.filterApplied = false;\r\n\r\n vm.filter = {\r\n name: '',\r\n page: 1,\r\n take: 20\r\n };\r\n\r\n activate();\r\n\r\n vm.getCompanies = getCompanies;\r\n vm.clearFilter = clearFilter;\r\n vm.pageChanged = pageChanged;\r\n vm.filterCompanies = filterCompanies;\r\n vm.showCreateCompanyModal = showCreateCompanyModal;\r\n\r\n function activate() {\r\n \r\n vm.model = accountsService.getAuthenticatedAccount().then(function (response) {\r\n\r\n vm.model.isAdmin = (response.accountType === AccountType.Admin || response.accountType === AccountType.SuperAdmin);\r\n vm.model.isPartnerAdmin = response.accountType === AccountType.Partner || response.accountType === AccountType.PartnerSuperAdmin;\r\n vm.model.isPartnerSuperAdmin = response.accountType === AccountType.PartnerSuperAdmin;\r\n vm.model.isSuperAdmin = (response.accountType === AccountType.SuperAdmin);\r\n vm.model.isCompanyAdmin = response.accountType === AccountType.Company;\r\n vm.model.authenticatedAccountId = response.accountId;\r\n vm.model.partnerCode = response.partnerCode;\r\n });\r\n\r\n \r\n\r\n var searchValue = $cookies.get(\"SsoCompanySearch\");\r\n vm.filter.name = searchValue;\r\n pageChanged();\r\n \r\n }\r\n\r\n function filterCompanies() {\r\n vm.filterApplied = true;\r\n vm.filter.page = 1;\r\n pageChanged();\r\n }\r\n\r\n function getCompanies(name, page, take) {\r\n vm.waiting = true;\r\n\r\n $cookies.put(\"SsoCompanySearch\", name);\r\n\r\n companyService.getCompanies(name, page, take)\r\n .then(function(response) {\r\n vm.companies = response;\r\n });\r\n\r\n vm.waiting = false;\r\n }\r\n\r\n function pageChanged() {\r\n getCompanies(vm.filter.name, vm.filter.page, vm.filter.take);\r\n }\r\n\r\n function clearFilter() {\r\n vm.filter = {\r\n name: '',\r\n page: 1,\r\n take: 20\r\n };\r\n $cookies.put(\"SsoCompanySearch\", '');\r\n vm.filterApplied = false;\r\n pageChanged();\r\n }\r\n\r\n function showCreateCompanyModal() {\r\n $uibModal.open({\r\n templateUrl: 'assets/templates/modals/create_company.html',\r\n controller: 'createCompanyController',\r\n size: 'lg'\r\n });\r\n }\r\n\r\n }\r\n})();\r\n","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('createAccountController', ['$location', '$routeParams', 'accountsService', 'stateService', 'vcRecaptchaService', createAccountController]\r\n );\r\n\r\n function createAccountController($location, $routeParams, accountsService, stateService, vcRecaptchaService) {\r\n //$scope.model = stateService.model;\r\n var vm = this;\r\n vm.model = {};\r\n vm.model.key = '6LfM3P4SAAAAAKkiWK7WwVGRo4d4sJPcD2qdnxsR';\r\n vm.widgetId = null;\r\n vm.response = null;\r\n\r\n if (vm.model.type == undefined)\r\n vm.model.type = 0; //User\r\n\r\n accountsService.getAuthenticatedAccount()\r\n .then(function (response) {\r\n vm.model.isAdmin = (response.accountType === AccountType.Admin ||\r\n response.accountType === AccountType.SuperAdmin);\r\n vm.model.isSuperAdmin = (response.accountType === AccountType.SuperAdmin);\r\n \r\n });\r\n\r\n vm.setResponse = function (response) {\r\n console.info('Response available');\r\n vm.response = response;\r\n };\r\n\r\n vm.setWidgetId = function (widgetId) {\r\n console.info('Created widget ID: %s', widgetId);\r\n vm.widgetId = widgetId;\r\n };\r\n\r\n vm.cbExpiration = function () {\r\n console.info('Captcha expired. Resetting response object');\r\n vcRecaptchaService.reload(vm.widgetId);\r\n vm.response = null;\r\n };\r\n\r\n vm.submit = function () {\r\n \r\n vm.model.submitted = true;\r\n \r\n if (!vm.createAccountForm.$valid) {\r\n return;\r\n }\r\n\r\n vm.model.working = true;\r\n\r\n var account = {\r\n firstName: vm.model.firstName,\r\n lastName: vm.model.lastName,\r\n email: vm.model.email,\r\n companyName: vm.model.companyName,\r\n type: vm.model.type,\r\n ipAuthentication: true,\r\n password: vm.model.password,\r\n jobTitle: vm.modal.jobTitle\r\n };\r\n\r\n vm.model.complete = false;\r\n var recapture = {\r\n response: vm.response\r\n };\r\n try {\r\n accountsService.createAccount(account, $routeParams.ct, recapture)\r\n .then(function () {\r\n vm.model.complete = true;\r\n vm.model.success = true;\r\n },\r\n function (response) {\r\n vm.model.working = false;\r\n\r\n vm.model.error = response.errors[0].message;\r\n vm.model.complete = true;\r\n vm.model.success = false;\r\n\r\n vcRecaptchaService.reload(vm.widgetId);\r\n });\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n };\r\n\r\n }\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('dashboardController', ['$scope', '$location', '$routeParams', '$uibModal', 'dashboardService', '_', 'accountsService', dashboardController]\r\n );\r\n\r\n function dashboardController($scope, $location, $routeParams, $uibModal, dashboardService, _, accountsService) {\r\n $scope.model = {};\r\n $scope.model.Loading = false;\r\n $scope.model.showError = false;\r\n $scope.model.Working = false;\r\n $scope.model.DidYouKnow = '';\r\n $scope.model.DidYouKnowMessages = [\r\n 'GatorExpress and GatorWorkflow use the exact same credentials as GatorMail? feel free to add your GatorMail account for each of these...',\r\n 'You should only link your own accounts. Linking shared or another persons account could cause problems with passwords changing.',\r\n 'To get your GatorSocial credentials. Log in to GatorSocial from GatorMail and you will be able to create your own account to link in GatorSignOn.',\r\n 'The GatorSignOn menu will follow you everywhere until you sign out of GatorSignOn. This forces logout of all linked accounts, then you can navigate and log into any product urls like normal.',\r\n 'You can double click the icons on the dashboard to Default, Rename or Remove an account from GatorSignOn.',\r\n 'The 3 person icon, that appears on right of the GatorSignOn bar, will bring you back to this dashboard.',\r\n 'You can make your account even more secure by enabling 2-Factor Google authentication under your account settings.'\r\n ];\r\n\r\n\r\n\r\n $scope.AttachMultipleAccounts = function () {\r\n $scope.model.SuccessMultiAccounts.forEach(function (account) {\r\n if (account.Selected) {\r\n\r\n var message = JSON.parse(account.Message);\r\n var attachResponse = dashboardService\r\n .attachAccount(account\r\n .ClientId,\r\n message.UniqueId,\r\n message.DisplayName,\r\n account.loginId);\r\n\r\n // add multiple accounts\r\n attachResponse.then(function (result) {\r\n $('#multiAccountModal').modal('hide');\r\n $scope.loadClientUsers();\r\n location.href = location.href;\r\n });\r\n\r\n\r\n }\r\n });\r\n\r\n };\r\n $scope.SelectItem = function (sender, account) {\r\n\r\n account.Selected = !account.Selected;\r\n return false;\r\n //var allVal = new Array();\r\n //$('.llstMulti li.active').each(function () {\r\n // allVal.push($(this).attr('opt'));\r\n //});\r\n\r\n //$('#myselect').val(allVal);\r\n\r\n };\r\n $scope.NavigateClientRedirectUrl = function (client, linkId) {\r\n\r\n if (!$scope.model.Working) {\r\n $scope.model.Working = true;\r\n dashboardService.GetClientRedirectUrl(client.id, linkId)\r\n .then(function (response) {\r\n\r\n $scope.storeLogin(client);\r\n // success\r\n window.location = response;\r\n },\r\n function (response) {\r\n $scope.model.Working = false;\r\n // error\r\n // alert(response.error);\r\n });\r\n }\r\n };\r\n var getCookie = function (cname) {\r\n var name = cname + '=';\r\n var decodedCookie = decodeURIComponent(document.cookie);\r\n var ca = decodedCookie.split(';');\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) == 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return '';\r\n };\r\n var getLogin = function () {\r\n var obj = getCookie('SsoLoggedIn');\r\n\r\n if (obj != null && obj.length > 0)\r\n return obj;\r\n else\r\n return '';\r\n };\r\n var setCookie = function (cname, cvalue, exdays) {\r\n var d = new Date();\r\n d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\r\n var expires = 'expires=' + d.toUTCString();\r\n document.cookie = cname + '=' + cvalue + ';' + expires + ';domain=' + '.communigator.co.uk' + ';path=/';\r\n };\r\n var checkAndGenerateArray = function (array, clientId) {\r\n if (array == null)\r\n array = [];\r\n\r\n if (array.length < clientId)\r\n for (var i = array.length; i <= clientId; i++)\r\n array.push({}); \r\n\r\n return array;\r\n };\r\n\r\n $scope.storeLogin = function (clientAccount) {\r\n\r\n $scope.model.currentClientUserArray = getLogin();\r\n setCookie('SsoLoggedIn', JSON.stringify($scope.model.currentClientUserArray), 7);\r\n };\r\n\r\n \r\n\r\n $scope.removeClientUser = function (clientId, collection, itemIndex, emailAddress) {\r\n if (!$scope.model.Working) {\r\n $scope.model.Working = true;\r\n\r\n if (clientId === 3) {\r\n $scope.model.Working = false;\r\n // GatorLeads\r\n $scope.removeClientUsers(collection, emailAddress);\r\n return;\r\n }\r\n\r\n var accountToRemove = collection[itemIndex];\r\n\r\n dashboardService.removeClientUser(accountToRemove.id)\r\n .then(function () {\r\n $scope.model.Working = false;\r\n collection.splice(itemIndex, 1);\r\n\r\n //$scope.loadClientUsers();\r\n location.href = location.href;\r\n },\r\n function (response) {\r\n $scope.model.Working = false;\r\n // error\r\n // alert(response.error);\r\n });\r\n }\r\n };\r\n\r\n $scope.removeClientUsers = function (collection, emailAddress) {\r\n\r\n // Make sure the array is empty\r\n var accountsForRemoval = [];\r\n\r\n\r\n collection.forEach(function (account) {\r\n if (account.emailAddress === emailAddress) {\r\n accountsForRemoval.push(account);\r\n }\r\n });\r\n\r\n $scope.detachAccountsModal(accountsForRemoval);\r\n\r\n };\r\n\r\n\r\n $scope.defaultClientUser = function (accounts, item) {\r\n\r\n accounts.forEach(function (account) {\r\n account.isDefault = false;\r\n });\r\n item.isDefault = true;\r\n\r\n };\r\n\r\n $scope.update = function (accounts) {\r\n\r\n\r\n dashboardService.updateClientAccounts(accounts)\r\n .then(function () {\r\n //$scope.loadClientUsers();\r\n location.href = location.href;\r\n },\r\n function (response) {\r\n // error\r\n // alert(response.error);\r\n });\r\n\r\n };\r\n $scope.attachAccountModal = function (client) {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: './assets/templates/modals/attach_account.html',\r\n controller: 'attachAccountController',\r\n size: 'md',\r\n resolve: {\r\n clientToAttach: function () {\r\n return client;\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(function (response) {\r\n if (response)\r\n $scope.loadClientUsers();\r\n });\r\n };\r\n\r\n $scope.detachAccountsModal = function (accountsForRemoval) {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: './assets/templates/modals/detach_accounts.html',\r\n controller: 'detachAccountsController',\r\n size: 'sm',\r\n resolve: {\r\n clientsToDetach: function () {\r\n return accountsForRemoval;\r\n },\r\n collection: function () {\r\n return $scope.model.GatorLeadsAccounts;\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(function (response, newArray) {\r\n\r\n if (response.success)\r\n $scope.loadClientUsers();\r\n });\r\n };\r\n\r\n $scope.getTemplate = function (product) {\r\n return 'Assets/Templates/SignUp/' + product + '.html';\r\n }\r\n\r\n $scope.loadClients = function () {\r\n\r\n\r\n dashboardService.GetClients()\r\n .then(function (response) {\r\n $scope.model.Clients = [];\r\n $scope.model.GatorApps = [];\r\n $scope.model.GatorClients = [];\r\n\r\n response.forEach(function (client) {\r\n\r\n if (!client.isHidden) {\r\n if (client.clientDetails.length > 0) {\r\n client.attachClientDetailsId = client.clientDetails[0].id;\r\n client.attachUsername = '';\r\n client.attachPassword = '';\r\n }\r\n\r\n if (client.id === gatorClients.Express) {\r\n client.ClientAccounts = $scope.model.GatorExpressAccounts;\r\n\r\n } else if (client.id === gatorClients.Mail) {\r\n client.ClientAccounts = $scope.model.GatorMailAccounts;\r\n\r\n } else if (client.id === gatorClients.Social) {\r\n client.ClientAccounts = $scope.model.GatorSocialAccounts;\r\n\r\n } else if (client.id === gatorClients.Leads) {\r\n client.ClientAccounts = $scope.model.GatorLeadsAccounts;\r\n\r\n } else if (client.id === gatorClients.Workflow) {\r\n client.ClientAccounts = $scope.model.GatorWorkflowAccounts;\r\n\r\n } else if (client.id === gatorClients.Docs) {\r\n client.ClientAccounts = $scope.model.GatorDocsAccounts;\r\n }\r\n else if (client.id === gatorClients.Survey) {\r\n client.ClientAccounts = $scope.model.GatorSurveyAccounts;\r\n }\r\n else if (client.id === gatorClients.SendForensics) {\r\n client.ClientAccounts = $scope.model.GatorForensicsAccounts;\r\n }\r\n else if (client.id === gatorClients.SEO) {\r\n client.ClientAccounts = $scope.model.GatorSEOAccounts;\r\n }\r\n else if (client.id === gatorClients.Popup) {\r\n client.ClientAccounts = $scope.model.GatorPopupAccounts;\r\n }\r\n else if (client.id === gatorClients.Report) {\r\n client.ClientAccounts = $scope.model.GatorReportAccounts;\r\n }\r\n\r\n\r\n if (client.id !== gatorClients.SignOn) {\r\n $scope.model.Clients.push(client);\r\n if (client.isThirdParty) {\r\n $scope.model.GatorApps.push(client);\r\n } else {\r\n $scope.model.GatorClients.push(client);\r\n }\r\n }\r\n }\r\n });\r\n\r\n });\r\n };\r\n\r\n $scope.loadClientUsers = function () {\r\n accountsService.getAuthorizedAccount()\r\n .then(function (response) {\r\n $scope.model.account = response;\r\n $scope.model.GatorExpressAccounts = [];\r\n $scope.model.GatorMailAccounts = [];\r\n $scope.model.GatorSocialAccounts = [];\r\n $scope.model.GatorLeadsAccounts = [];\r\n $scope.model.GatorWorkflowAccounts = [];\r\n $scope.model.GatorDocsAccounts = [];\r\n $scope.model.GatorCreatorAccounts = [];\r\n $scope.model.GatorSurveyAccounts = [];\r\n $scope.model.GatorForensicsAccounts = [];\r\n $scope.model.GatorSEOAccounts = [];\r\n $scope.model.GatorPopupAccounts = [];\r\n $scope.model.GatorReportAccounts = [];\r\n\r\n $scope.model.showError = $location.search()['warn'] === 'true';\r\n\r\n var clientUsers = response.ssoClientUsers;\r\n\r\n if (clientUsers) {\r\n for (var i = 0; i < clientUsers.length; i++) {\r\n var linkedAccount = clientUsers[i];\r\n\r\n if (linkedAccount.ssoClientId === gatorClients.Express) {\r\n $scope.model.GatorExpressAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Mail) {\r\n $scope.model.GatorMailAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Social) {\r\n $scope.model.GatorSocialAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Leads) {\r\n $scope.model.GatorLeadsAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Workflow) {\r\n $scope.model.GatorWorkflowAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Docs) {\r\n $scope.model.GatorDocsAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Survey) {\r\n $scope.model.GatorSurveyAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.SendForensics) {\r\n $scope.model.GatorForensicsAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.SEO) {\r\n $scope.model.GatorSEOAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Popup) {\r\n $scope.model.GatorPopupAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Report) {\r\n $scope.model.GatorReportAccounts.push(linkedAccount);\r\n }\r\n }\r\n $scope.loadClients();\r\n }\r\n $scope.model.waiting = false;\r\n });\r\n };\r\n\r\n $scope.loadClientUsers();\r\n\r\n $scope.canAddAccount = function (client) {\r\n\r\n if (!client.isUserAddable) {\r\n return false;\r\n }\r\n\r\n if (client.type === 14) {\r\n return false;\r\n }\r\n\r\n\r\n var clientsAllowed = [];\r\n\r\n angular.forEach(client.clientDetails,\r\n function (details) {\r\n var endPointsEnum = details.availableEndPoints;\r\n\r\n if (details.apiUrl !== null &&\r\n ((endPointsEnum & ssoEndPoints.CreateAccount) === ssoEndPoints.CreateAccount) ||\r\n ((endPointsEnum & ssoEndPoints.AttachClientUser) === ssoEndPoints.AttachClientUser) ||\r\n ((endPointsEnum & ssoEndPoints.AttachClientUsers) === ssoEndPoints.AttachClientUsers)\r\n ) {\r\n clientsAllowed.push(details);\r\n };\r\n },\r\n clientsAllowed);\r\n\r\n return clientsAllowed.length > 0;\r\n\r\n };\r\n\r\n }\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('deleteAccountsController', ['$scope', '$uibModalInstance', 'emailToDelete', 'accountIdToDelete', deleteAccountsController]\r\n );\r\n\r\n function deleteAccountsController($scope, $uibModalInstance, emailToDelete, accountIdToDelete) {\r\n $scope.model = {};\r\n $scope.model.email = emailToDelete;\r\n $scope.model.accountId = accountIdToDelete;\r\n\r\n $scope.ok = function () {\r\n $scope.model.confirming = true;\r\n };\r\n\r\n $scope.confirm = function () {\r\n $uibModalInstance.close({ delete: true, accountId: $scope.model.accountId });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.close({ delete: false });\r\n };\r\n }\r\n\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('detachAccountsController', ['$scope', '$uibModalInstance', '$location', 'dashboardService', 'clientsToDetach', 'collection', detachAccountsController]\r\n );\r\n\r\n function detachAccountsController($scope, $uibModalInstance, $location, dashboardService, clientsToDetach, collection) {\r\n\r\n $scope.model = {};\r\n\r\n $scope.model.Collection = collection;\r\n $scope.model.AccountsForRemoval = clientsToDetach;\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n $scope.RemoveMultipleAccounts = function () {\r\n\r\n dashboardService.removeClientUser($scope.model.AccountsForRemoval[0].id)\r\n .then(function () {\r\n\r\n var tmpArray = [];\r\n var emailAddress = $scope.model.AccountsForRemoval[0].emailAddress;\r\n\r\n $scope.model.Collection.forEach(function (account) {\r\n\r\n if (account.emailAddress !== emailAddress)\r\n tmpArray.push(account);\r\n\r\n });\r\n $uibModalInstance.close({ success: true, accounts: tmpArray });\r\n },\r\n function (response) {\r\n // error\r\n alert(response.error);\r\n });\r\n\r\n\r\n };\r\n\r\n }\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('editAccountController', ['$scope', '$rootScope', '$location', '$routeParams', '$ngBootbox', 'accountsService', 'clientService', 'permissionsService', '_', editAccountController]\r\n );\r\n\r\n function editAccountController($scope, $rootScope, $location, $routeParams, $ngBootbox, accountsService, clientService, permissionsService, _) {\r\n\r\n\r\n $scope.model = {};\r\n $scope.model.googleAuthenticatorBarcodeUrl = '';\r\n $scope.model.googleAuthenticatorSecretKey = '';\r\n $scope.model.googleAuthenticatorVerificationError = '';\r\n $scope.model.IpAuthentication = {};\r\n $scope.model.IpAuthentication.IpAddress = '';\r\n $scope.model.pendingRequests = [];\r\n $scope.model.SecurityQuestions = [];\r\n $scope.model.apps = [];\r\n\r\n $scope.getSecurityQuestions = function () {\r\n accountsService.getSecurityQuestions(false)\r\n .then(function (response) {\r\n\r\n $scope.model.SecurityQuestions = response;\r\n if (!$scope.model.SecurityQuestionId || $scope.model.SecurityQuestionId === 0)\r\n $scope.model.SecurityQuestionId = $scope.model.SecurityQuestions[0].id;\r\n });\r\n };\r\n $scope.getGoogleAuthenticatorBarcode = function () {\r\n // Load Security Questions also\r\n $scope.getSecurityQuestions();\r\n\r\n accountsService.getGoogleAuthenticatorBarcode()\r\n .then(function (response) {\r\n $scope.model.googleAuthenticatorBarcodeUrl = response.barcodeUrl;\r\n $scope.model.googleAuthenticatorSecretKey = response.secretKey;\r\n });\r\n };\r\n\r\n function impersonate(userId) {\r\n\r\n $location.url('/impersonate/' + userId);\r\n }\r\n\r\n function loadOAuthClientsForAccount() {\r\n permissionsService.GetAllClientsforAccount($scope.model.id)\r\n .then(function(response) {\r\n $scope.model.apps = response;\r\n });\r\n }\r\n\r\n $scope.impersonate = impersonate;\r\n\r\n $scope.unlockAccount = function () {\r\n accountsService.unlockAccount($scope.model.id).then(function () {\r\n $scope.model.isAccountLockedOut = false;\r\n });\r\n };\r\n\r\n $scope.verifyGoogleAuthenticator = function () {\r\n\r\n if ($scope.model.SecurityQuestionAnswer && $scope.model.SecurityQuestionAnswer.length > 1) {\r\n if ($scope.model.googleAuthenticatorCode && $scope.model.googleAuthenticatorCode.length > 5) {\r\n \r\n accountsService\r\n .verifyGoogleAuthenticator($scope.model.googleAuthenticatorCode,\r\n $scope.model.googleAuthenticatorSecretKey,\r\n $scope.model.SecurityQuestionId,\r\n $scope.model.SecurityQuestionAnswer,\r\n $scope.model.encryptedAccountId)\r\n .then(function (response) {\r\n if (response.isValid) {\r\n $scope.model.isGoogleAuthenticatorEnabled = true;\r\n $scope.submit();\r\n } else\r\n $scope.model\r\n .googleAuthenticatorVerificationError =\r\n 'Unfortunately the code you entered is not valid. Please try again.';\r\n });\r\n } else {\r\n $scope.model\r\n .googleAuthenticatorVerificationError =\r\n 'Please enter a valid two-factor authenticator code.';\r\n }\r\n\r\n } else {\r\n $scope.model\r\n .googleAuthenticatorVerificationError =\r\n 'Please select a Security Question and enter an answer.';\r\n }\r\n };\r\n $scope.authenticationModeChange = function () {\r\n if ($scope.model.selectedAuthenticationMode === 1) {\r\n $scope.model.ipAuthentication = false;\r\n\r\n // Load the barcode if they have previously authenticated it\r\n if (!$scope.model.isGoogleAuthenticatorEnabled)\r\n $scope.getGoogleAuthenticatorBarcode();\r\n } else {\r\n $scope.model.isGoogleAuthenticatorEnabled = false;\r\n\r\n $scope.model.ipAuthentication = true;\r\n }\r\n\r\n };\r\n $scope.navigateToCompany = function (companyId) {\r\n $location.url('/company/' + companyId);\r\n };\r\n $scope.submit = function () {\r\n\r\n $scope.model.submitted = true;\r\n if (!$scope.editAccountForm.$valid) {\r\n return;\r\n }\r\n\r\n $scope.model.working = true;\r\n\r\n\r\n var account = {\r\n id: $scope.model.id,\r\n firstName: $scope.model.firstName,\r\n lastName: $scope.model.lastName,\r\n email: $scope.model.email,\r\n companyName: $scope.model.companyName,\r\n searchNumber: $scope.model.searchNumber,\r\n jobTitle: $scope.model.jobTitle,\r\n topbarMode: $scope.model.topbarMode,\r\n type: $scope.model.type,\r\n ipAuthentication: $scope.model.ipAuthentication,\r\n hideTopBar: $scope.model.hideTopBar,\r\n defaultDashboard: $scope.model.defaultDashboard,\r\n defaultProduct: $scope.model.defaultProduct.type,\r\n isGoogleAuthenticatorEnabled: $scope.model.isGoogleAuthenticatorEnabled\r\n\r\n };\r\n\r\n // SecurityQuestionId: $scope.model.SecurityQuestionId,\r\n // SecurityQuestionAnswer: \r\n\r\n $scope.model.complete = false;\r\n\r\n accountsService.updateAccount(account)\r\n .then(function () {\r\n $scope.model.working = false;\r\n\r\n $scope.model.complete = true;\r\n $scope.model.success = true;\r\n\r\n if ($scope.model.authenticatedAccountId === account.id) {\r\n\r\n $rootScope.warnAboutAuthenticator = (account.type == AccountType.Admin ||\r\n account.type == AccountType.SuperAdmin ||\r\n account.type == AccountType.Partner ||\r\n account.type == AccountType.PartnerSuperAdmin) &&\r\n !account.isGoogleAuthenticatorEnabled;\r\n\r\n\r\n }\r\n },\r\n function (response) {\r\n $scope.model.working = false;\r\n\r\n $scope.model.error = response.errors[0].message;\r\n $scope.model.complete = true;\r\n $scope.model.success = false;\r\n });\r\n };\r\n\r\n $scope.changePassword = function () {\r\n $location.url('/account/password/change');\r\n };\r\n $scope.adminChangePassword = function () {\r\n $location.url('/account/password/reset/' + $scope.model.id);\r\n };\r\n $scope.convertToInt = function (id) {\r\n return parseInt(id, 10);\r\n };\r\n\r\n $scope.getPendingRequests = function () {\r\n\r\n if ($scope.model.isAdmin) {\r\n accountsService.getPendingRequests($scope.model.id)\r\n .then(function (response) {\r\n $scope.model.pendingRequests = response;\r\n });\r\n }\r\n\r\n\r\n };\r\n $scope.AddIpAddress = function () {\r\n $scope.model.working = true;\r\n\r\n if ($scope.model.IpAuthentication && $scope.model.IpAuthentication.IpAddress) {\r\n accountsService.AddIpAddress($scope.model.IpAuthentication.IpAddress, $scope.model.id)\r\n .then(function (response) {\r\n $scope.model.IpAuthentication.IpAddress = ''; \r\n });\r\n }\r\n\r\n $scope.model.working = false;\r\n };\r\n\r\n $scope.loadClients = function () {\r\n\r\n\r\n clientService.getClients()\r\n .then(function (response) {\r\n $scope.model.Clients = [];\r\n\r\n response.forEach(function (client) {\r\n\r\n if (client.clientDetails.length > 0) {\r\n client.attachClientDetailsId = client.clientDetails[0].id;\r\n client.attachUsername = '';\r\n client.attachPassword = '';\r\n }\r\n\r\n // Setup Default product drop down\r\n if (client.type === $scope.model.defaultProduct)\r\n $scope.model.defaultProduct = client;\r\n\r\n if (client.id === gatorClients.Express) {\r\n client.ClientAccounts = $scope.model.GatorExpressAccounts;\r\n\r\n } else if (client.id === gatorClients.Mail) {\r\n client.ClientAccounts = $scope.model.GatorMailAccounts;\r\n\r\n } else if (client.id === gatorClients.Social) {\r\n client.ClientAccounts = $scope.model.GatorSocialAccounts;\r\n\r\n } else if (client.id === gatorClients.Leads) {\r\n client.ClientAccounts = $scope.model.GatorLeadsAccounts;\r\n\r\n } else if (client.id === gatorClients.Workflow) {\r\n client.ClientAccounts = $scope.model.GatorWorkflowAccounts;\r\n\r\n } else if (client.id === gatorClients.Docs) {\r\n client.ClientAccounts = $scope.model.GatorDocsAccounts;\r\n }\r\n else if (client.id === gatorClients.Survey) {\r\n client.ClientAccounts = $scope.model.GatorSurveyAccounts;\r\n }\r\n else if (client.id === gatorClients.SendForensics) {\r\n client.ClientAccounts = $scope.model.GatorForensicsAccounts;\r\n }\r\n\r\n // does the client have a company enviroment\r\n client.hasEnviroment = false;\r\n client.availableClients = [];\r\n\r\n for (var i = 0; i < $scope.model.company.environments.length; i++) {\r\n var localEnv = $scope.model.company.environments[i];\r\n\r\n if (localEnv.ssoClient.type === client.type) {\r\n\r\n client.hasEnviroment = true;\r\n\r\n var enviroments = _.where(client.ClientAccounts, { uniqueId: localEnv.environment });\r\n\r\n // the user is not already registered to this account \r\n // enable adding\r\n if (enviroments.length === 0) {\r\n client.availableClients.push(localEnv);\r\n }\r\n\r\n }\r\n }\r\n\r\n if (client.id !== gatorClients.SignOn && !client.isHidden)\r\n $scope.model.Clients.push(client);\r\n });\r\n\r\n });\r\n };\r\n\r\n $scope.createAccount = function (enviroment, isAdmin) {\r\n\r\n accountsService.addEnvironment($scope.model.id, enviroment, isAdmin)\r\n .then(function (response) {\r\n if (response.errors.length > 0) {\r\n var errors = [];\r\n\r\n // an error occured alert the user\r\n angular.forEach(response.errors,\r\n function (value) {\r\n this.push(value.message);\r\n },\r\n errors);\r\n\r\n var errorTxt = errors.join('
');\r\n\r\n $ngBootbox.alert(errorTxt)\r\n .then(function () {\r\n console.log('Alert closed');\r\n });\r\n\r\n } else {\r\n // we need to reload the user\r\n activate();\r\n }\r\n });\r\n\r\n };\r\n\r\n activate();\r\n\r\n $scope.deactivateAccount = function () {\r\n accountsService.deactivate($routeParams.accountId).then(function () {\r\n $scope.model.deactivated = true;\r\n });\r\n }\r\n\r\n $scope.reactivateAccount = function () {\r\n accountsService.reactivate($routeParams.accountId).then(function () {\r\n $scope.model.deactivated = false;\r\n });\r\n }\r\n\r\n $scope.RemoveApp = function(app) {\r\n permissionsService.DeleteClientforAccount(app.connectiondId)\r\n .then(function (response) {\r\n if (response === true) {\r\n loadOAuthClientsForAccount();\r\n }\r\n });\r\n }\r\n\r\n \r\n\r\n $scope.FormatDate = function(date) {\r\n var d = new Date(date);\r\n var month = '' + (d.getMonth() + 1);\r\n var day = '' + d.getDate();\r\n var year = d.getFullYear();\r\n var hour = d.getHours();\r\n var minutes = d.getMinutes();\r\n\r\n if (month.length < 2) month = '0' + month;\r\n if (day.length < 2) day = '0' + day;\r\n if (hour.length < 2) hour = '0' + hour;\r\n if (minutes.length < 2) minutes = '0' + minutes;\r\n\r\n return [[year, month, day].join('-'),[hour, minutes].join(':')].join(\" \");\r\n }\r\n\r\n function activate() {\r\n accountsService.getAccount($routeParams.accountId)\r\n .then(function (response) {\r\n $scope.model = response;\r\n $scope.model.type = $scope.model.type.toString();\r\n\r\n if ($scope.model.isGoogleAuthenticatorEnabled)\r\n $scope.model.selectedAuthenticationMode = 1;\r\n else\r\n $scope.model.selectedAuthenticationMode = 0;\r\n\r\n\r\n $scope.model.GatorExpressAccounts = [];\r\n $scope.model.GatorMailAccounts = [];\r\n $scope.model.GatorSocialAccounts = [];\r\n $scope.model.GatorLeadsAccounts = [];\r\n $scope.model.GatorWorkflowAccounts = [];\r\n $scope.model.GatorDocsAccounts = [];\r\n $scope.model.GatorSurveyAccounts = [];\r\n $scope.model.GatorForensicsAccounts = [];\r\n\r\n\r\n var clientUsers = response.ssoClientUsers;\r\n\r\n if (clientUsers) {\r\n for (var i = 0; i < clientUsers.length; i++) {\r\n var linkedAccount = clientUsers[i];\r\n\r\n if (linkedAccount.ssoClientId === gatorClients.Express) {\r\n $scope.model.GatorExpressAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Mail) {\r\n $scope.model.GatorMailAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Social) {\r\n $scope.model.GatorSocialAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Leads) {\r\n $scope.model.GatorLeadsAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Workflow) {\r\n $scope.model.GatorWorkflowAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Docs) {\r\n $scope.model.GatorDocsAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.Survey) {\r\n $scope.model.GatorSurveyAccounts.push(linkedAccount);\r\n } else if (linkedAccount.ssoClientId === gatorClients.SendForensics) {\r\n $scope.model.GatorForensicsAccounts.push(linkedAccount);\r\n }\r\n\r\n }\r\n $scope.loadClients();\r\n $scope.getPendingRequests();\r\n }\r\n\r\n accountsService.getAuthenticatedAccount()\r\n .then(function (response) {\r\n $scope.model.isAdmin = (response.accountType === AccountType.Admin || response.accountType === AccountType.SuperAdmin);\r\n $scope.model.isPartnerAdmin = (response.accountType === AccountType.Partner || response.accountType === AccountType.PartnerSuperAdmin) && $scope.model.company.partnerCode === response.partnerCode;\r\n $scope.model.isPartnerSuperAdmin = response.accountType === AccountType.PartnerSuperAdmin && $scope.model.company.partnerCode === response.partnerCode;\r\n $scope.model.isSuperAdmin = (response.accountType === AccountType.SuperAdmin);\r\n $scope.model.isCompanyAdmin = response.accountType === AccountType.Company && $scope.model.company.id === response.companyId;\r\n $scope.model.authenticatedAccountId = response.accountId;\r\n $scope.model.companyId = response.companyId;\r\n $scope.model.authenticatedAccountRole = response.accountType;\r\n $scope.model.isImpersonating = response.isImpersonating;\r\n });\r\n\r\n loadOAuthClientsForAccount();\r\n\r\n });\r\n };\r\n }\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .controller('editCompanyController',\r\n [\r\n '$routeParams',\r\n '$timeout',\r\n 'accountsService',\r\n 'companyService',\r\n 'pagerService',\r\n 'clientService',\r\n '_',\r\n '$uibModal',\r\n '$filter',\r\n '$location',\r\n 'permissionsService',\r\n 'thirdPartyCredentialsService',\r\n editCompanyController\r\n ]);\r\n\r\n\r\n function editCompanyController($routeParams,\r\n $timeout,\r\n accountsService,\r\n companyService,\r\n pagerService,\r\n clientService,\r\n _,\r\n $uibModal,\r\n $filter,\r\n $location,\r\n permissionsService,\r\n thirdPartyCredentialsService) {\r\n /* jshint validthis:true */\r\n var vm = this;\r\n vm.model = {}\r\n vm.companyId = $routeParams.companyId;\r\n vm.company = {};\r\n vm.users = {};\r\n vm.usersFiltered = {};\r\n vm.userFilterApplied = false;\r\n vm.applyUserFilter = applyUserFilter;\r\n vm.clearUserFilter = clearUserFilter;\r\n vm.emailDomains = {};\r\n vm.originalEmailDomains = 0;\r\n vm.currentEmailDomains = 0;\r\n vm.removedEmailDomains = [];\r\n vm.createApiCredentialModel = {};\r\n vm.activeTab = 0;\r\n vm.newApiCreds = {\r\n eId: \"\",\r\n thirdPartyUse: true,\r\n name: \"\",\r\n password: \"\"\r\n }\r\n vm.createApiFailed = {\r\n isFailed: false,\r\n message: \"\"\r\n };\r\n vm.userPasswordShowSecretFailed = {\r\n isFailed: false,\r\n message: \"\"\r\n };\r\n\r\n vm.apiCredList = [];\r\n vm.editViewApiCreds = {};\r\n\r\n vm.allowedIpAddresses = {};\r\n vm.allowedIpAddressesPaged = [];\r\n vm.originalAllowedIpAddresses = 0;\r\n vm.currentAllowedIpAddresses = 0;\r\n vm.removedAllowedIpAddresses = [];\r\n\r\n \r\n vm.originalEnvironments = 0;\r\n vm.currentEnvironments = 0;\r\n vm.displayedEnvironments = [];\r\n vm.environmentPageSize = 10;\r\n vm.environmentPager = {};\r\n vm.setEnvironmentPage = setEnvironmentPage;\r\n \r\n vm.showUpdateCredentialModal = showUpdateCredentialModal;\r\n vm.showSelectWorkbooksOrganisationModal = showSelectWorkbooksOrganisationModal;\r\n vm.showAddThirdPartyCredentialsModal = showAddThirdPartyCredentialsModal;\r\n vm.removeThirdPartyCredentials = removeThirdPartyCredentials;\r\n vm.editThirdPartyCredentials = editThirdPartyCredentials;\r\n vm.showCrmCredentialsTab = showCrmCredentialsTab;\r\n\r\n vm.hiddenProducts = [];\r\n vm.hideProduct = hideProduct;\r\n vm.showProduct = showProduct;\r\n\r\n vm.environments = [];\r\n vm.environment = {\r\n environment: '',\r\n displayName: '',\r\n errors: [],\r\n working: false,\r\n success: false,\r\n isValid: function(isCreate) {\r\n\r\n if (isCreate) {\r\n if (vm.environment.length > 0)\r\n return false;\r\n\r\n if (!vm.environment.displayName.length > 0)\r\n return false;\r\n\r\n if (!(vm.environment.ssoClientType.id === 9 || vm.environment.ssoClientType.id === 4 || vm.environment.ssoClientType.id === 14))\r\n return false;\r\n\r\n return true;\r\n } else\r\n return !vm.environment.environment || !vm.environment.displayName;\r\n }\r\n };\r\n\r\n vm.account = {\r\n user: {\r\n firstName: '',\r\n lastName: '',\r\n password: '',\r\n email: '',\r\n isAdmin: false,\r\n ssoClientUsers: [],\r\n company: {\r\n id: $routeParams.companyId\r\n },\r\n },\r\n working: false,\r\n success: false,\r\n errors: []\r\n };\r\n\r\n vm.ssoClientTypes = [];\r\n vm.waiting = false;\r\n vm.deactivateUser = deactivateUser;\r\n vm.userPager = {};\r\n vm.setUserPage = setUserPage;\r\n vm.userPageSize = 10;\r\n vm.sendActivateEmail = sendActivateEmail;\r\n\r\n vm.emailPager = {};\r\n vm.setEmailPage = setEmailPage;\r\n vm.emailPageSize = 10;\r\n\r\n vm.ipAddressPager = {};\r\n vm.setIpAddressPage = setIpAddressPage;\r\n vm.ipAddressPageSize = 10;\r\n\r\n vm.clients = [];\r\n vm.isAdminClass = isAdminClass;\r\n\r\n vm.emailDomain = {};\r\n vm.emailDomain.domain = '';\r\n vm.emailDomain.errors = [];\r\n vm.emailDomain.checking = false;\r\n vm.emailDomain.regex = '\\\\b((?=[a-z0-9-]{1,63}\\\\.)[a-z0-9]+(-[a-z0-9]+)*\\\\.)+[a-z]{2,63}\\\\b';\r\n\r\n vm.emailDomain.add = function() {\r\n\r\n companyService.addEmailDomain(vm.company.id, vm.emailDomain.domain).then(function(response) {\r\n\r\n\r\n if (response.data.length > 0)\r\n vm.emailDomain.errors = response.data.errors;\r\n\r\n if (!vm.emailDomain.errors || vm.emailDomain.errors.length === 0) {\r\n vm.emailDomains.push({ id: response.data.id, domain: vm.emailDomain.domain });\r\n vm.emailDomain.domain = '';\r\n\r\n }\r\n\r\n\r\n });\r\n };\r\n\r\n vm.emailDomain.remove = function (index, emailDomain) {\r\n\r\n companyService.removeEmailDomain(vm.company.id, emailDomain).then(function(response) {\r\n vm.emailDomains.splice(index, 1);\r\n });\r\n\r\n };\r\n\r\n vm.environment.add = function () {\r\n vm.environment.errors = [];\r\n\r\n companyService.addEnvironment(vm.company.id, vm.environment.displayName, vm.environment.environment, vm.environment.ssoClientType.id).then(function (response) {\r\n\r\n if (response.data.errors)\r\n if (response.data.errors.length > 0)\r\n vm.environment.errors = response.data.errors;\r\n\r\n if (!vm.environment.errors || vm.environment.errors.length === 0) {\r\n vm.environments.push({\r\n id: response.data.id,\r\n displayName: vm.environment.displayName,\r\n environment: vm.environment.environment,\r\n ssoClient: vm.environment.ssoClientType\r\n });\r\n\r\n vm.environment.displayName = '';\r\n vm.environment.environment = '';\r\n\r\n }\r\n\r\n\r\n });\r\n };\r\n\r\n vm.environment.create = function () {\r\n vm.environment.working = true;\r\n vm.environment.sucess = false;\r\n companyService.createEnvironment(vm.company.id, vm.environment.ssoClientType.id, vm.environment.displayName).then(\r\n function (environment) {\r\n\r\n if (environment.success) {\r\n vm.environments.push({\r\n id: environment.id,\r\n displayName: environment.displayName,\r\n environment: environment.environment,\r\n ssoClient: environment.ssoClient\r\n });\r\n\r\n vm.environment.displayName = '';\r\n vm.environment.environment = '';\r\n\r\n\r\n\r\n vm.environment.sucess = true;\r\n } else {\r\n vm.environment.errors.push(environment.error);\r\n vm.environment.sucess = false;\r\n\r\n }\r\n vm.environment.working = false;\r\n\r\n },\r\n function (error) {\r\n console.dir(error);\r\n });\r\n\r\n\r\n };\r\n vm.apiPasswordUpdated = false;\r\n vm.ShowSecretPassword = \"\";\r\n vm.newApiCredsRulespassed = null;\r\n vm.editApiCredsRulespassed = null;\r\n vm.createApiCredentials = function (environment) {\r\n vm.createApiFailed = {\r\n isFailed: false,\r\n message: \"\"\r\n };\r\n vm.newApiCreds = {\r\n eId: \"\",\r\n enviroment: environment,\r\n thirdPartyUse: false,\r\n password: \"\",\r\n nid: \"\",\r\n clientId: \"\",\r\n name: \"\",\r\n clientSecret: \"\",\r\n companyId: vm.model.companyId\r\n };\r\n $(\"#createCompanyClientCred\").modal(\"show\");\r\n }\r\n vm.createApiCredBtn = function () {\r\n\r\n if (vm.newApiCreds.name === \"\") {\r\n vm.createApiFailed.isFailed = true;\r\n vm.createApiFailed.message = \"Name Not set\";\r\n return;\r\n }\r\n\r\n if (vm.newApiCredsRulespassed() !== 5) {\r\n vm.createApiFailed.isFailed = true;\r\n vm.createApiFailed.message = \"Password strength not met\";\r\n return;\r\n }\r\n\r\n permissionsService.CreateCompanyClient(vm.newApiCreds.companyId, vm.newApiCreds.enviroment.id, vm.newApiCreds.name, vm.newApiCreds.password).then(\r\n function (response) {\r\n getCompanyApiClients();\r\n $(\"#createCompanyClientCred\").modal(\"hide\");\r\n }, function (responce) {\r\n vm.createApiFailed.isFailed = true;\r\n vm.createApiFailed.message = \"Could Not Create the requested Api credentials. please contact support for assistance.\";\r\n });\r\n }\r\n vm.ViewEditApiCredentials = function (apiCred) {\r\n vm.createApiFailed = {\r\n isFailed: false,\r\n message: \"\"\r\n };\r\n vm.apiPasswordUpdated = false;\r\n vm.editViewApiCreds = apiCred;\r\n $(\"#editViewCompanyClientCred\").modal(\"show\");\r\n }\r\n vm.RemoveApiCredentials = function (apiCred) {\r\n $(\"#editViewCompanyClientCred\").modal(\"hide\");\r\n vm.createApiFailed = {\r\n isFailed: false,\r\n message: \"\"\r\n };\r\n vm.editViewApiCreds = apiCred;\r\n $(\"#removeCompanyClientCred\").modal(\"show\");\r\n }\r\n vm.ConfrimRemoveApiCredentials = function () {\r\n $(\"#removeCompanyClientCred\").modal(\"hide\");\r\n permissionsService.DeleteCompanyClient(vm.editViewApiCreds.id).then(\r\n function(responce) {\r\n getCompanyApiClients();\r\n });\r\n vm.editViewApiCreds = {};\r\n }\r\n vm.UpdateClientPassword = function () {\r\n\r\n vm.apiPasswordUpdated = false;\r\n if (vm.editApiCredsRulespassed() !== 5) {\r\n vm.createApiFailed = {\r\n isFailed: true,\r\n message: \"Password strength not met\"\r\n };\r\n return;\r\n }\r\n \r\n permissionsService.UpdateClientPassword(vm.editViewApiCreds.id, vm.editViewApiCreds.password).then(\r\n function() {\r\n vm.apiPasswordUpdated = true;\r\n setTimeout(function() {\r\n vm.apiPasswordUpdated = false;\r\n },\r\n 5000);\r\n });\r\n }\r\n \r\n vm.ShowSecret = function() {\r\n vm.ShowSecretPassword = \"\";\r\n vm.userPasswordShowSecretFailed = {\r\n isFailed: false,\r\n message: \"\"\r\n };\r\n $('#userPasswordShowSecret').modal(\"show\");\r\n }\r\n\r\n vm.ConfrimShowSecret = function() {\r\n\r\n if (vm.ShowSecretPassword === \"\") {\r\n vm.userPasswordShowSecretFailed = {\r\n isFailed: true,\r\n message: \"Please enter you SSO password\"\r\n };\r\n return;\r\n }\r\n\r\n permissionsService.ShowClientSecret(vm.model.companyId, vm.ShowSecretPassword).then(\r\n function (responce) {\r\n vm.editViewApiCreds.clientSecret = responce;\r\n $(\"#clientSecret\").attr(\"type\", \"text\");\r\n $('#userPasswordShowSecret').modal(\"hide\");\r\n },\r\n function(responce) {\r\n vm.userPasswordShowSecretFailed = {\r\n isFailed: true,\r\n message: \"Invalid password or user permissions\"\r\n };\r\n });\r\n\r\n }\r\n\r\n vm.ipAddress = {};\r\n vm.ipAddress.ipAddress = '';\r\n vm.ipAddress.errors = [];\r\n vm.ipAddress.checking = false;\r\n\r\n vm.ipAddress.add = function() {\r\n\r\n companyService.addIpAddress(vm.company.id, vm.ipAddress.ipAddress).then(function(response) {\r\n\r\n\r\n if (response.data.length > 0)\r\n vm.ipAddress.errors = response.data.errors;\r\n\r\n if (!vm.ipAddress.errors || vm.ipAddress.errors.length === 0) {\r\n vm.allowedIpAddresses.push({ id: response.data.id, ipAddress: vm.ipAddress.ipAddress });\r\n vm.ipAddress.ipAddress = '';\r\n\r\n }\r\n\r\n\r\n });\r\n };\r\n\r\n vm.ipAddress.remove = function (index, ipAddress) {\r\n\r\n companyService.removeIpAddress(vm.company.id, ipAddress).then(function (response) {\r\n vm.allowedIpAddressesPaged.splice(index, 1);\r\n });\r\n\r\n };\r\n\r\n vm.emailRegex = '[aA-zZ0-9!#$%&\\'*+/=?^_`{|}~-]+(?:\\\\.[aA-zZ0-9!#$%&\\'*+/=?^_`{|}~-]+)*@(?:[aA-zZ0-9](?:[aA-zZ0-9-]*[aA-zZ0-9])?.)+[aA-zZ0-9](?:[aA-zZ0-9-]*[aA-zZ0-9])?';\r\n\r\n vm.saveForm = saveForm;\r\n\r\n vm.getCompany = getCompany;\r\n\r\n vm.isAccountClientEnabled = isAccountClientEnabled;\r\n\r\n vm.setAccountClient = setAccountClient;\r\n vm.setAllAccountClient = setAllAccountClient;\r\n vm.unsetAllAccountClient = unsetAllAccountClient;\r\n\r\n vm.adduserValid = adduserValid;\r\n\r\n vm.addAccount = addAccount;\r\n\r\n vm.resetCreateUser = resetCreateUser;\r\n\r\n vm.removeIpAddress = removeIpAddress;\r\n\r\n vm.impersonate = impersonate;\r\n\r\n getCompany();\r\n\r\n\r\n vm.disableImpersonation = function() {\r\n\r\n companyService.disableImpersonation(vm.company.id).then(function(response) {\r\n vm.company.allowImpersonation = false;\r\n });\r\n };\r\n vm.deactivate = function() {\r\n\r\n companyService.deactivateCompany(vm.company.id).then(function(response) {\r\n vm.company.deactivated = true;\r\n });\r\n };\r\n vm.reactivate = function() {\r\n\r\n companyService.reactivateCompany(vm.company.id).then(function(response) {\r\n vm.company.deactivated = false;\r\n });\r\n };\r\n\r\n function activate() {\r\n\r\n accountsService.getAuthenticatedAccount().then(function (response) {\r\n vm.model.isAdmin = (response.accountType === AccountType.Admin || response.accountType === AccountType.SuperAdmin);\r\n vm.model.isPartnerAdmin = (response.accountType === AccountType.Partner || response.accountType === AccountType.PartnerSuperAdmin) && vm.company.partnerCode === response.partnerCode;\r\n\r\n \r\n\r\n \r\n vm.model.isSuperAdmin = (response.accountType === AccountType.SuperAdmin);\r\n vm.model.isCompanyAdmin = response.accountType === AccountType.Company && vm.companyId === response.companyId;\r\n vm.model.authenticatedAccountId = response.accountId;\r\n vm.model.ssoClientUsers = response.ssoClientUsers;\r\n \r\n vm.model.companyId = response.companyId;\r\n\r\n vm.model.authenticatedAccountRole = response.accountType;\r\n vm.model.isImpersonating = response.isImpersonating;\r\n\r\n });\r\n }\r\n\r\n function getCompany() {\r\n companyService.getCompanyById(vm.companyId)\r\n .then(function (response) {\r\n processCompany(response);\r\n getCompanyApiClients();\r\n getCompanyThirdPartyCredentials();\r\n });\r\n }\r\n\r\n function getCompanyApiClients() {\r\n permissionsService.GetAllClientsforCompany(vm.company.id).then(function (clientResponse) {\r\n vm.apiCredList = clientResponse;\r\n });\r\n }\r\n\r\n function getCompanyThirdPartyCredentials() {\r\n thirdPartyCredentialsService.getAll(vm.company.id).then(function(credentials) {\r\n vm.thirdPartyCredentials = credentials;\r\n\r\n vm.thirdPartyCredentialsRequireAttention = credentials.some(function(c) {\r\n return !c.valid;\r\n });\r\n });\r\n }\r\n\r\n function setUserPage(page) {\r\n // get pager object from service\r\n vm.userPager = pagerService.GetPager(vm.usersFiltered.length, page, vm.userPageSize);\r\n\r\n // get current page of items\r\n vm.users = vm.usersFiltered.slice(vm.userPager.startIndex, vm.userPager.endIndex);\r\n }\r\n\r\n function setEnvironmentPage(page) {\r\n if (page < 1 || page > vm.environmentPager.totalPages) {\r\n return;\r\n }\r\n\r\n // get pager object from service\r\n vm.environmentPager = pagerService.GetPager(vm.environments.length, page, vm.environmentPageSize);\r\n\r\n // get current page of items\r\n vm.displayedEnvironments = vm.environments.slice(vm.environmentPager.startIndex, vm.environmentPager.endIndex);\r\n }\r\n\r\n\r\n function setIpAddressPage(page) {\r\n if (page < 1 || page > vm.ipAddressPager.totalPages) {\r\n return;\r\n }\r\n\r\n // get pager object from service\r\n vm.ipAddressPager = pagerService.GetPager(vm.company.allowedIpAddresses.length, page, vm.ipAddressPageSize);\r\n\r\n vm.allowedIpAddresses = vm.company.allowedIpAddresses.slice();\r\n\r\n // get current page of items\r\n vm.allowedIpAddressesPaged = vm.company.allowedIpAddresses.slice(); \r\n vm.allowedIpAddressesPaged = vm.allowedIpAddressesPaged.slice(vm.ipAddressPager.startIndex, vm.ipAddressPager.endIndex);\r\n }\r\n\r\n function setEmailPage(page) {\r\n if (page < 1 || page > vm.emailPager.totalPages) {\r\n return;\r\n }\r\n\r\n // get pager object from service\r\n vm.emailPager = pagerService.GetPager(vm.company.emailDomains.length, page, vm.emailPageSize);\r\n\r\n // get current page of items\r\n vm.emailDomains = vm.company.emailDomains.slice(vm.emailPager.startIndex, vm.emailPager.endIndex);\r\n }\r\n \r\n function removeIpAddress(ipAddressId) {\r\n vm.company.allowedIpAddresses = _.reject(vm.company.allowedIpAddresses, function (ipAddress) {\r\n if (ipAddress.id === ipAddressId) {\r\n vm.removedAllowedIpAddresses.push(ipAddressId);\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n vm.setIpAddressPage(1);\r\n vm.currentAllowedIpAddresses--;\r\n }\r\n \r\n function saveForm() {\r\n vm.waiting = true;\r\n vm.model.complete = false;\r\n vm.model.success = false;\r\n\r\n companyService.saveCompanyDetails(vm.company.id, vm.company.name, vm.company.dynamicsId, vm.company.workbooksOrganisationId, vm.company.workbooksOrganisationName, vm.company.partnerCode).then(\r\n function(response) {\r\n vm.waiting = false;\r\n vm.model.complete = true;\r\n vm.model.success = true;\r\n },\r\n function() {\r\n vm.waiting = false;\r\n vm.model.complete = true;\r\n vm.model.success = false;\r\n });\r\n }\r\n\r\n function deactivateUser(userId) {\r\n\r\n // find the user\r\n var user = _.findWhere(vm.company.users, { id: userId });\r\n\r\n if (user !== null && user !== void (0)) {\r\n vm.waiting = true;\r\n accountsService.deactivate(user.id).then(function () {\r\n user.activated = false;\r\n vm.waiting = false;\r\n },\r\n function () {\r\n vm.waiting = false;\r\n });\r\n\r\n }\r\n }\r\n\r\n function sendActivateEmail(userId) {\r\n\r\n // find the user\r\n var user = _.findWhere(vm.company.users, { id: userId });\r\n\r\n if (user !== null && user !== void (0)) {\r\n vm.waiting = true;\r\n accountsService.sendActivationEmail(user.id)\r\n .then(function () {\r\n user.activated = false;\r\n vm.waiting = false;\r\n },\r\n function () {\r\n vm.waiting = false;\r\n });\r\n\r\n }\r\n }\r\n\r\n function impersonate(userId) {\r\n $location.url('/impersonate/' + userId);\r\n }\r\n\r\n function canCreateUser(endPointsEnum) {\r\n return ((endPointsEnum & ssoEndPoints.CreateAccount) === ssoEndPoints.CreateAccount);\r\n }\r\n\r\n function isAccountClientEnabled(environment) {\r\n var accountClient = _.find(vm.account.user.ssoClientUsers,\r\n function (client) {\r\n return client.type === environment.ssoClient.type && client.uniqueId === environment.environment;\r\n });\r\n\r\n return accountClient.allowAccess ? 'fa-check-circle' : 'fa-times-circle';\r\n }\r\n\r\n function setAccountClient(environment) {\r\n var accountClient = _.find(vm.account.user.ssoClientUsers, function (client) {\r\n return client.type === environment.ssoClient.type && client.uniqueId === environment.environment;\r\n });\r\n\r\n accountClient.allowAccess = !accountClient.allowAccess;\r\n }\r\n\r\n function setAllAccountClient() {\r\n vm.account.user.ssoClientUsers.forEach(function (client) {\r\n \r\n client.allowAccess = true;\r\n });\r\n }\r\n\r\n function unsetAllAccountClient() {\r\n vm.account.user.ssoClientUsers.forEach(function (client) {\r\n\r\n client.allowAccess = false;\r\n });\r\n }\r\n\r\n function adduserValid() {\r\n var passwordPass = (!(vm.account.user.password === void (0)) && vm.account.user.password.length > 5);\r\n\r\n var emailPass = (!(vm.account.user.email === void (0)) && vm.account.user.email.length > 4);\r\n\r\n var jobTitle = (!(vm.account.user.jobTitle === void(0)) && vm.account.user.jobTitle.length > 0);\r\n\r\n var firstNamePass = (!(vm.account.user.firstName === void (0)) && vm.account.user.firstName.length > 0);\r\n\r\n var lastNamePass = (!(vm.account.user.lastName === void (0)) && vm.account.user.lastName.length > 0);\r\n\r\n return passwordPass && emailPass && firstNamePass && lastNamePass && jobTitle;\r\n\r\n }\r\n\r\n function addAccount() {\r\n\r\n vm.account.waiting = true;\r\n // check the domain is correct\r\n companyService.checkDomain(vm.account.user.email)\r\n .then(function (response) {\r\n\r\n vm.account.errors = response;\r\n\r\n vm.account.waiting = false;\r\n\r\n if (!vm.account.errors || vm.account.errors.length === 0) {\r\n vm.account.waiting = true;\r\n accountsService.createAccount(vm.account.user)\r\n .then(function(response) {\r\n // Account Created reset the form and inform the user\r\n vm.account.waiting = false;\r\n vm.createAccountForm.$setPristine(true);\r\n\r\n vm.account.waiting = false;\r\n vm.account.errors = [];\r\n\r\n angular.forEach(response.errors,\r\n function(value) {\r\n this.push(value.message);\r\n },\r\n vm.account.errors);\r\n\r\n vm.account.success = true;\r\n vm.accountCreationStep2 = false;\r\n vm.account.user.ssoClientUsers = [];\r\n \r\n vm.getCompany();\r\n },\r\n function(response) {\r\n vm.account.waiting = false;\r\n vm.account.errors = [];\r\n\r\n\r\n angular.forEach(response.errors,\r\n function(value) {\r\n this.push(value.message);\r\n },\r\n vm.account.errors);\r\n vm.accountCreationStep2 = false;\r\n });\r\n } else {\r\n vm.accountCreationStep2 = false;\r\n vm.account.success = false;\r\n vm.account.waiting = false;\r\n }\r\n },\r\n function (response) {\r\n vm.account.waiting = false;\r\n vm.account.errors = response.errors;\r\n vm.accountCreationStep2 = false;\r\n });\r\n\r\n }\r\n\r\n function resetCreateUser() {\r\n vm.account.user.firstName = '';\r\n vm.account.user.lastName = '';\r\n vm.account.user.password = '';\r\n vm.account.user.email = '';\r\n vm.account.user.isAdmin = false;\r\n vm.account.user.jobTitle = '';\r\n vm.account.working = false;\r\n vm.account.success = false;\r\n vm.account.errors = [];\r\n\r\n vm.accountCreationStep2 = false;\r\n\r\n angular.forEach(vm.account.user.ssoClientUsers,\r\n function (value) {\r\n value.allowAccess = true;\r\n });\r\n\r\n\r\n }\r\n\r\n function isAdminClass() {\r\n\r\n if (!vm.account.user.isAdmin) {\r\n return 'fa-times-circle';\r\n } else {\r\n return 'fa-check-circle';\r\n }\r\n }\r\n\r\n function processCompany(company) {\r\n\r\n vm.clients = [];\r\n vm.company = company;\r\n activate();\r\n vm.usersFiltered = company.users.map(function (item) {\r\n switch (item.type) {\r\n case 0:\r\n item.friendlyType = \"User\";\r\n break;\r\n case 1:\r\n item.friendlyType = \"Company Admin\";\r\n break;\r\n case 2:\r\n item.friendlyType = \"Partner Admin\";\r\n break;\r\n case 3:\r\n item.friendlyType = \"Partner Super Admin\";\r\n break;\r\n case 4:\r\n item.friendlyType = \"Admin\";\r\n break;\r\n case 5:\r\n item.friendlyType = \"Super Admin\";\r\n break;\r\n }\r\n\r\n return item;\r\n });\r\n\r\n\r\n vm.setUserPage(1);\r\n vm.setEmailPage(1);\r\n \r\n \r\n vm.setIpAddressPage(1);\r\n if (vm.company.emailDomains) {\r\n vm.originalEmailDomains = vm.company.emailDomains.length;\r\n vm.currentEmailDomains = vm.company.emailDomains.length;\r\n }\r\n\r\n if (vm.company.environments) {\r\n vm.environments = vm.company.environments;\r\n vm.displayedEnvironments = vm.company.environments;\r\n vm.originalEnvironments = vm.company.environments.length;\r\n vm.currentEnvironments = vm.company.environments.length;\r\n }\r\n\r\n vm.setEnvironmentPage(1);\r\n\r\n if (vm.company.hiddenProducts) {\r\n vm.originalHiddenProducts = vm.company.hiddenProducts.length;\r\n vm.currentHiddenProducts = vm.company.hiddenProducts.length;\r\n }\r\n\r\n if (vm.company.allowedIpAddresses) {\r\n vm.originalAllowedIpAddresses = vm.company.allowedIpAddresses.length;\r\n vm.currentAllowedIpAddresses = vm.company.allowedIpAddresses.length;\r\n }\r\n\r\n \r\n \r\n\r\n\r\n clientService.getClients().then(function (response) {\r\n\r\n vm.ssoClientTypes = _.filter(response, function(ssoClient) {\r\n return ssoClient.type !== 7;\r\n });\r\n\r\n\r\n angular.forEach(vm.ssoClientTypes,\r\n function(client) {\r\n\r\n var unrestrictedClient = _.findWhere(client.clientDetails, { restricted: false });\r\n\r\n if (_.isUndefined(unrestrictedClient) ||\r\n !canCreateUser(unrestrictedClient.availableEndPoints))\r\n return;\r\n\r\n if (client.type !== 7) {\r\n\r\n var enviroments = _.filter(vm.company.environments,\r\n function(enviroment) {\r\n return enviroment.ssoClient.type === client.type;\r\n });\r\n\r\n if (enviroments.length === 0) {\r\n return;\r\n }\r\n\r\n this.push({\r\n id: client.id,\r\n type: client.type,\r\n name: client.name,\r\n shortName: client.shortName,\r\n formattedName: client.formattedName,\r\n visible: false,\r\n available: enviroments\r\n });\r\n\r\n angular.forEach(enviroments,\r\n function(enviroment) {\r\n vm.account.user.ssoClientUsers.push({\r\n ssoClientId: client.id,\r\n type: client.type,\r\n uniqueId: enviroment.environment,\r\n displayName: enviroment.displayName,\r\n endPointsEnum: unrestrictedClient.availableEndPoints,\r\n allowAccess: true\r\n\r\n });\r\n });\r\n\r\n }\r\n\r\n },\r\n vm.clients);\r\n vm.hiddenProducts = [];\r\n angular.forEach(vm.ssoClientTypes,\r\n function(client) {\r\n\r\n var hiddenId = null;\r\n\r\n if (client.type !== 7 && !client.isHidden) {\r\n\r\n var hiddenProduct = _.find(vm.company.hiddenProducts,\r\n function(item) {\r\n return item.ssoClient.type === client.type;\r\n });\r\n\r\n if (!_.isUndefined(hiddenProduct)) {\r\n hiddenId = hiddenProduct.id;\r\n }\r\n\r\n vm.hiddenProducts.push({\r\n id: hiddenId,\r\n ssoClientId: client.id,\r\n type: client.type,\r\n name: client.name,\r\n shortName: client.shortName,\r\n formattedName: client.formattedName\r\n });\r\n\r\n }\r\n }\r\n );\r\n\r\n\r\n });\r\n }\r\n\r\n function applyUserFilter() {\r\n\r\n if (vm.userFilter === '') {\r\n vm.usersFiltered = vm.company.users;\r\n clearUserFilter();\r\n return;\r\n }\r\n //company.users\r\n vm.usersFiltered = _.filter(vm.company.users, function (user) {\r\n var regex = new RegExp(vm.userFilter, 'i');\r\n\r\n var match = user.email.match(regex);\r\n if (match != null) {\r\n return true;\r\n }\r\n\r\n match = user.firstName.match(regex);\r\n if (match != null) {\r\n return true;\r\n }\r\n\r\n match = user.lastName.match(regex);\r\n if (match != null) {\r\n return true;\r\n }\r\n\r\n if (vm.userFilter.indexOf(' ') !== -1) {\r\n var firstNameRegex = new RegExp(vm.userFilter.split(' ')[0], 'i');\r\n var lastNameRegex = new RegExp(vm.userFilter.split(' ')[1], 'i');\r\n\r\n if (user.firstName.match(firstNameRegex) != null && user.lastName.match(lastNameRegex) != null) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n\r\n vm.userFilterApplied = true;\r\n vm.setUserPage(1);\r\n }\r\n\r\n function clearUserFilter() {\r\n vm.usersFiltered = vm.company.users;\r\n vm.userFilterApplied = false;\r\n vm.userFilter = '';\r\n vm.setUserPage(1);\r\n\r\n }\r\n\r\n function showProduct(clientId) {\r\n companyService.showProduct(vm.company.id, clientId).then(function(response) {\r\n var hiddenProduct = _.find(vm.hiddenProducts,\r\n function (item) {\r\n return item.type === response.ssoClient.type;\r\n });\r\n\r\n hiddenProduct.id = null;\r\n });\r\n }\r\n\r\n function hideProduct(clientId) {\r\n companyService.hideProduct(vm.company.id, clientId).then(function(response) {\r\n var hiddenProduct = _.find(vm.hiddenProducts,\r\n function (item) {\r\n return item.type === response.ssoClient.type;\r\n });\r\n\r\n hiddenProduct.id = response.id;\r\n });\r\n }\r\n\r\n function showUpdateCredentialModal(environment) {\r\n $uibModal.open({\r\n templateUrl: 'assets/templates/modals/update_integration_credentials.html',\r\n controller: 'updateIntegrationCredentialsController',\r\n size: 'lg',\r\n resolve: {\r\n environment: function () {\r\n return environment;\r\n }\r\n }\r\n });\r\n };\r\n\r\n function showSelectWorkbooksOrganisationModal() {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: 'assets/templates/modals/select_workbooks_organisation.html',\r\n controller: 'selectWorkbooksOrganisationController',\r\n size: 'lg'\r\n });\r\n\r\n modalInstance.result.then(function (response) {\r\n vm.company.workbooksOrganisationId = response.id;\r\n vm.company.workbooksOrganisationName = response.name;\r\n },function() {\r\n\r\n });\r\n };\r\n\r\n function showAddThirdPartyCredentialsModal() {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: 'assets/templates/modals/third_party_credentials.html',\r\n controller: 'thirdPartyCredentialsController',\r\n controllerAs: 'vm',\r\n size: 'lg',\r\n resolve: {\r\n args: {\r\n isCreate: true,\r\n companyId: vm.company.id\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(function (response) {\r\n getCompanyThirdPartyCredentials();\r\n showThirdPartyCredentialsSavedMessage();\r\n }, function () { });\r\n }\r\n\r\n function editThirdPartyCredentials(credentials) {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: 'assets/templates/modals/third_party_credentials.html',\r\n controller: 'thirdPartyCredentialsController',\r\n controllerAs: 'vm',\r\n size: 'lg',\r\n resolve: {\r\n args: {\r\n isCreate: false,\r\n credentials: credentials,\r\n companyId: vm.company.id\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(function (response) {\r\n getCompanyThirdPartyCredentials();\r\n showThirdPartyCredentialsSavedMessage();\r\n }, function() {});\r\n }\r\n\r\n function showThirdPartyCredentialsSavedMessage() {\r\n vm.showThirdPartyCredentialsSavedMessage = true;\r\n $timeout(function () {\r\n vm.showThirdPartyCredentialsSavedMessage = false;\r\n }, 2000);\r\n }\r\n\r\n function removeThirdPartyCredentials(credentials) {\r\n var modalInstance = $uibModal.open({\r\n templateUrl: 'assets/templates/modals/third_party_credentials_removal_confirmation.html',\r\n controller: 'thirdPartyCredentialsRemovalConfirmationController',\r\n controllerAs: 'vm',\r\n size: 'lg',\r\n resolve: {\r\n args: {\r\n credentials: credentials\r\n }\r\n }\r\n });\r\n\r\n modalInstance.result.then(function (response) {\r\n thirdPartyCredentialsService.delete(credentials.credentialsId).then(function () {\r\n getCompanyThirdPartyCredentials();\r\n\r\n vm.showThirdPartyCredentialsDeletedMessage = true;\r\n $timeout(function () {\r\n vm.showThirdPartyCredentialsDeletedMessage = false;\r\n }, 2000);\r\n });\r\n }, function () { });\r\n }\r\n\r\n function showCrmCredentialsTab() {\r\n vm.activeTab = 6;\r\n }\r\n }\r\n})();\r\n","(function() {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('errorController', ['$scope', '$rootScope', errorController]\r\n );\r\n\r\n function errorController($scope, $rootScope) {\r\n $scope.model = {};\r\n\r\n $scope.model.errors = $rootScope.currentError.errors;\r\n }\r\n\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('exportAccountsController', ['$scope', '$uibModalInstance', '$location', 'exportAccountsService', exportAccountsController]\r\n );\r\n\r\n function exportAccountsController($scope, $uibModalInstance, $location, exportAccountsService) {\r\n $scope.model = [];\r\n var date = new Date();\r\n date.setMonth(date.getMonth() - 1);\r\n $scope.model.startDate = date;\r\n\r\n $scope.model.endDate = new Date();\r\n\r\n\r\n $scope.submitExport = function () {\r\n if ($scope.model.startDate && $scope.model.endDate) {\r\n $scope.model.Loading = true;\r\n exportAccountsService.exportAccounts($scope.model.startDate, $scope.model.endDate)\r\n .then(function (response) {\r\n $scope.model.url = response.url;\r\n $scope.model.filename = response.fileName;\r\n $scope.model.showDownload = true;\r\n $scope.model.Loading = false;\r\n });\r\n }\r\n };\r\n $scope.today = function () {\r\n $scope.dt = new Date();\r\n\r\n };\r\n $scope.today();\r\n\r\n $scope.clear = function () {\r\n $scope.dt = null;\r\n };\r\n\r\n $scope.inlineOptions = {\r\n customClass: getDayClass,\r\n minDate: new Date(),\r\n showWeeks: true\r\n };\r\n\r\n $scope.dateOptions = {\r\n format: 'dd/MM/yyyy',\r\n maxDate: new Date(2020, 5, 22),\r\n minDate: new Date(),\r\n startingDay: 1\r\n };\r\n\r\n\r\n $scope.toggleMin = function () {\r\n $scope.inlineOptions.minDate = $scope.inlineOptions.minDate ? null : new Date();\r\n $scope.dateOptions.minDate = $scope.inlineOptions.minDate;\r\n };\r\n\r\n $scope.toggleMin();\r\n\r\n $scope.open1 = function () {\r\n $scope.popup1.opened = true;\r\n };\r\n\r\n $scope.open2 = function () {\r\n $scope.popup2.opened = true;\r\n };\r\n\r\n $scope.setDate = function (year, month, day) {\r\n $scope.dt = new Date(year, month, day);\r\n };\r\n\r\n\r\n $scope.format = 'dd/MM/yyyy';\r\n\r\n\r\n $scope.popup1 = {\r\n opened: false\r\n };\r\n\r\n $scope.popup2 = {\r\n opened: false\r\n };\r\n\r\n var tomorrow = new Date();\r\n tomorrow.setDate(tomorrow.getDate() + 1);\r\n var afterTomorrow = new Date();\r\n afterTomorrow.setDate(tomorrow.getDate() + 1);\r\n $scope.events = [\r\n {\r\n date: tomorrow,\r\n status: 'full'\r\n },\r\n {\r\n date: afterTomorrow,\r\n status: 'partially'\r\n }\r\n ];\r\n\r\n function getDayClass(data) {\r\n var date = data.date,\r\n mode = data.mode;\r\n if (mode === 'day') {\r\n var dayToCheck = new Date(date).setHours(0, 0, 0, 0);\r\n\r\n for (var i = 0; i < $scope.events.length; i++) {\r\n var currentDay = new Date($scope.events[i].date).setHours(0, 0, 0, 0);\r\n\r\n if (dayToCheck === currentDay) {\r\n return $scope.events[i].status;\r\n }\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n\r\n }\r\n})();","\n(function () {\n\n 'use strict';\n angular.module('app').controller('forceSsoModalController', forceSsoModalController);\n\n forceSsoModalController.$inject = ['$scope'];\n\n function forceSsoModalController($scope) {\n\n $scope.ok = function () {\n $scope.$close();\n };\n\n }\n\n angular.module('app')\n .controller('forceSSOController',\n [\n '$location',\n '$routeParams',\n '$timeout',\n '$rootScope',\n '$uibModal',\n 'forceSSOService',\n forceSSOController\n ]\n );\n\n function forceSSOController($location, $routeParams, $timeout, $rootScope, $uibModal, forceSSOService) {\n \n $rootScope.showLogo = true;\n var vm = this;\n vm.clientToken = $routeParams.ct;\n vm.waiting = true;\n vm.run = function() {\n\n\n forceSSOService.create(vm.clientToken).then(\n function(response) {\n if (!response) {\n vm.error = true;\n\n vm.waiting = false;\n\n } else {\n vm.response = response;\n vm.response.loginUrl += \"&firstRun=1\";\n\n vm.waiting = false;\n }\n },\n function(response) {\n vm.error = true;\n\n vm.waiting = false;\n\n }\n );\n };\n vm.showModal = function () {\n\n var modalInstance = $uibModal.open({\n ariaLabelledBy: 'modal-title-bottom',\n ariaDescribedBy: 'modal-body-bottom',\n templateUrl: './assets/templates/modals/ForcedSsoModal.html',\n size: 'md',\n controller: forceSsoModalController\n });\n\n modalInstance.result.then(function () {\n vm.acknowledged = true;\n vm.run();\n }, function() {\n vm.showModal();\n }\n );\n };\n vm.showModal();\n }\n})();","// forensicsController\r\n(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('forensicsController',\r\n [\r\n '$sce', '$location', '$routeParams', 'thirdPartyService', '_',\r\n forensicsController\r\n ]\r\n );\r\n\r\n function forensicsController($sce, $location, $routeParams, thirdPartyService, _) {\r\n var vm = this;\r\n\r\n vm.baseUrl = 'https://www.sendforensics.com/partners/communigator/processing?';\r\n\r\n // uid=lz&linkid=2096\r\n\r\n vm.token = $routeParams.t;\r\n vm.uid = $routeParams.uid;\r\n vm.linkId = $routeParams.linkid;\r\n\r\n if (!_.isUndefined(vm.token)) {\r\n thirdPartyService.getForensicsParams(vm.token).then(function(response) {\r\n vm.url = $sce.trustAsResourceUrl(vm.baseUrl + response);\r\n });\r\n } else {\r\n // need to get the actual link\r\n thirdPartyService.getForensicsToken(vm.linkId).then(function(response) {\r\n //vm.url = $sce.trustAsResourceUrl(vm.baseUrl + response);\r\n var path = '/thirdparty/forensics?t=' + response;\r\n $location.url(path).replace();\r\n });\r\n }\r\n\r\n }\r\n})();","// forensicsController\r\n(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('impersonateController',\r\n [\r\n '$routeParams', '$location', 'impersonateService', '_',\r\n impersonateController\r\n ]\r\n );\r\n\r\n function impersonateController($routeParams, $location, impersonateService, _) {\r\n var vm = this;\r\n var base;\r\n vm.accountId = $routeParams.accountId;\r\n\r\n var bases = document.getElementsByTagName('base');\r\n var baseHref = null;\r\n\r\n if (bases.length > 0) {\r\n base = bases[0].href;\r\n }\r\n else {\r\n base = location.origin;\r\n }\r\n\r\n if (!_.isUndefined(vm.accountId) && vm.accountId === 'reset') {\r\n \r\n location.href = base + '/api/impersonate/reset';\r\n //$location.url('/api/impersonate/reset');\r\n } else if (!_.isUndefined(vm.accountId)) {\r\n location.href = base + '/api/impersonate/account?accountId=' + vm.accountId;\r\n //$location.url('/api/impersonate/account?accountId=' + vm.accountId);\r\n }\r\n }\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('ipAuthenticationController', ['$scope', '$routeParams', '$location', 'accountsService', ipAuthenticationController]\r\n );\r\n\r\n function ipAuthenticationController($scope, $routeParams, $location, accountsService) {\r\n $scope.model = {};\r\n\r\n accountsService.authenticateIpAddress($routeParams.t)\r\n .then(function () {\r\n $scope.model.complete = true;\r\n });\r\n\r\n $scope.redirectToLogin = function () {\r\n if ($routeParams.ct != undefined) {\r\n $location.url('/login?ct=' + window.encodeURIComponent($routeParams.ct));\r\n } else {\r\n $location.url('/login');\r\n }\r\n };\r\n }\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('loginController', ['$scope', '$location', '$routeParams', '$timeout', '$rootScope', 'loginService', 'stateService', 'accountsService', loginController]\r\n );\r\n\r\n function loginController($scope, $location, $routeParams, $timeout, $rootScope, loginService, stateService, accountsService) {\r\n //$scope.model = stateService.model;\r\n \r\n $rootScope.showLogo = true;\r\n $scope.model = {};\r\n $scope.model.clientToken = $routeParams.ct;\r\n $scope.model.isGoogleAuthenticatorEnabled = false;\r\n $scope.model.showLostAuthenticator = false;\r\n $scope.model.clientId = $routeParams.clientId;\r\n $scope.model.redirectUrl = $routeParams.redirectUrl;\r\n $scope.model.scope = $routeParams.scope;\r\n \r\n $scope.model.showEmailWarning = false;\r\n\r\n if ($location.search().firstRun) {\r\n $scope.model.showEmailWarning = true;\r\n }\r\n $scope.submit = function () {\r\n \r\n $scope.model.submitted = true;\r\n if (!$scope.loginForm.$valid) {\r\n return;\r\n }\r\n\r\n $scope.model.working = true;\r\n\r\n loginService.login($scope.model.clientToken, $scope.model.email, $scope.model.password, $scope.model.googleAuthenticatorCode, $scope.model.SecretQuestionAnswer, $scope.model.AuthenticatorRememberMe, $scope.model.clientId, $scope.model.redirectUrl, $scope.model.scope)\r\n .then(function (response) {\r\n \r\n if (response.googleAuthenticator) {\r\n $scope.model.SecretQuestion = response.secretQuestion;\r\n $scope.model.isGoogleAuthenticatorEnabled = true;\r\n $scope.model.setGaFocus = true;\r\n $scope.model.working = false;\r\n } else if (response.googleAuthenticatorNotSetup) {\r\n \r\n $scope.getGoogleAuthenticatorBarcode(response.encryptedAccountId);\r\n $scope.model.googleAuthenticatorNotSetup = response.googleAuthenticatorNotSetup;\r\n $scope.model.accountId = response.encryptedAccountId;\r\n } else if (response.googleAuthenticatorReset) {\r\n $scope.model.googleAuthenticatorReset = true;\r\n $scope.model.invalidCredentials = false;\r\n } else {\r\n if (response.redirect) {\r\n location.href = response.redirectUrl;\r\n } else {\r\n $location.url('/home');\r\n }\r\n }\r\n\r\n }, function (response) {\r\n\r\n $scope.model.working = false;\r\n\r\n if (response.errors.length > 0) {\r\n if (response.errors[0].title)\r\n $scope.model.errorTitle = response.errors[0].title;\r\n else\r\n $scope.model.errorTitle = \"Login Failed\";\r\n\r\n $scope.model.error = response.errors[0].message;\r\n } else {\r\n $scope.model.error = null;\r\n $scope.model.errorTitle = \"Login Failed\";\r\n }\r\n\r\n $scope.model.invalidCredentials = true;\r\n });\r\n };\r\n $scope.getSecurityQuestions = function () {\r\n accountsService.getSecurityQuestions(false)\r\n .then(function (response) {\r\n\r\n $scope.model.SecurityQuestions = response;\r\n if (!$scope.model.SecurityQuestionId || $scope.model.SecurityQuestionId === 0)\r\n $scope.model.SecurityQuestionId = $scope.model.SecurityQuestions[0].id;\r\n });\r\n };\r\n $scope.getGoogleAuthenticatorBarcode = function (accountId) {\r\n // Load Security Questions also\r\n $scope.getSecurityQuestions();\r\n\r\n accountsService.getGoogleAuthenticatorBarcode(encodeURIComponent(accountId))\r\n .then(function (response) {\r\n $scope.model.googleAuthenticatorBarcodeUrl = response.barcodeUrl;\r\n $scope.model.googleAuthenticatorSecretKey = response.secretKey;\r\n });\r\n };\r\n\r\n $scope.lostAuthenticator = function () {\r\n // Show the lost Secret Question screen and hide the authenticator screen\r\n $scope.model.showLostAuthenticator = true;\r\n $scope.model.isGoogleAuthenticatorEnabled = false;\r\n\r\n };\r\n\r\n $scope.verifyGoogleAuthenticator = function () {\r\n accountsService.verifyGoogleAuthenticator($scope.model.googleAuthenticatorCode, $scope.model.googleAuthenticatorSecretKey, $scope.model.SecurityQuestionId, $scope.model.SecurityQuestionAnswer, $scope.model.accountId)\r\n .then(function (response) {\r\n if (response.isValid) {\r\n $scope.submit();\r\n } else {\r\n $scope.model\r\n .googleAuthenticatorVerificationError =\r\n 'Unfortunately the code you entered is not valid. Please try again.';\r\n }\r\n });\r\n }\r\n\r\n $scope.forgottenPassword = function () {\r\n if ($scope.model.clientToken != undefined) {\r\n $location.url('/account/password/request?ct=' +\r\n window.encodeURIComponent($scope.model.clientToken));\r\n } else {\r\n $location.url('/account/password/request');\r\n }\r\n };\r\n\r\n $scope.createAccount = function () {\r\n if ($scope.model.clientToken != undefined) {\r\n $location.url('/account?ct=' + window.encodeURIComponent($scope.model.clientToken));\r\n } else {\r\n $location.url('/account');\r\n }\r\n };\r\n\r\n $scope.logOut = function () {\r\n loginService.logOut();\r\n\r\n };\r\n }\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('marketingFrameController', ['$scope', '$location', '$routeParams', '$sce', marketingFrameController]\r\n );\r\n\r\n function marketingFrameController($scope, $location, $routeParams, $sce) {\r\n $scope.model = {};\r\n $scope.model.hideframe = false;\r\n switch ($location.url().toLowerCase()) {\r\n case '/home'.toLowerCase():\r\n $scope.model.src = $sce\r\n .trustAsResourceUrl('https://www.communigator.co.uk/customer-portal/');\r\n break;\r\n case '/SignUp/GatorMail'.toLowerCase():\r\n $scope.model.src = $sce\r\n .trustAsResourceUrl('https://tools.spotler.co.uk/GatorMail');\r\n break;\r\n case '/SignUp/GatorExpress'.toLowerCase():\r\n $scope.model.src = $sce\r\n .trustAsResourceUrl('https://www.communigator.co.uk/GatorExpress/GatorExpress.html');\r\n break;\r\n case '/SignUp/GatorWorkflow'.toLowerCase():\r\n $scope.model.src = $sce\r\n .trustAsResourceUrl('https://tools.spotler.co.uk/GatorWorkflow');\r\n break;\r\n case '/SignUp/GatorLeads'.toLowerCase():\r\n $scope.model.src = $sce\r\n .trustAsResourceUrl('https://tools.spotler.co.uk/GatorLeads');\r\n break;\r\n case '/SignUp/GatorDocs'.toLowerCase():\r\n $scope.model.src = $sce\r\n .trustAsResourceUrl('https://www.communigator.co.uk/GatorDocs/GatorDocs.html');\r\n break;\r\n case '/SignUp/GatorSocial'.toLowerCase():\r\n $scope.model.src = '';\r\n window.location = '/SocialWizard';\r\n break;\r\n case '/SignUp/GatorSurvey'.toLowerCase():\r\n $scope.model.src = $sce\r\n .trustAsResourceUrl('https://tools.spotler.co.uk/GatorSurvey');\r\n break;\r\n case '/SignUp/GatorSendforensics'.toLowerCase():\r\n $scope.model.src = $sce\r\n .trustAsResourceUrl('https://www.communigator.co.uk/SendForensics/SendForensics.html');\r\n break;\r\n case '/SignUp/GatorPopup'.toLowerCase():\r\n $scope.model.src = $sce\r\n .trustAsResourceUrl('https://tools.spotler.co.uk/GatorPopup');\r\n case '/SignUp/GatorReport'.toLowerCase():\r\n $scope.model.src = $sce\r\n .trustAsResourceUrl('https://www.communigator.co.uk/GatorPopup/GatorPopup.html');\r\n \r\n break; \r\n\r\n }\r\n }\r\n})();\n\n","(function () {\n\n 'use strict';\n angular.module('app')\n .controller('newSocialWizardController',\n [\n '$location',\n '$routeParams',\n '$timeout',\n '$rootScope',\n '$sce',\n '$cookies',\n 'companyService',\n 'accountsService',\n newSocialWizardController \n ]\n );\n\n function newSocialWizardController($location, $routeParams, $timeout, $rootScope, $sce, $cookies, companyService, accountsService) {\n \n \n var vm = this;\n vm.clientToken = $routeParams.ct;\n vm.waiting = true;\n vm.account = null;\n vm.companyAdmin = null;\n vm.users = [];\n vm.company = null; \n vm.pager = null;\n vm.selectedUsers = [];\n\n function PagerButton(text, page, enabled, current) {\n this.text = $sce.trustAsHtml(text + '');\n this.page = page;\n this.enabled = enabled;\n this.current = current;\n }\n\n function Pager(response) {\n\n this.count = response.count;\n this.total = response.total;\n this.pageSize = response.count;\n\n this.totalPages = response.totalPages;\n this.currentPage = response.currentPage;\n this.canPrev = this.currentPage > 1;\n this.canNext = this.currentPage < this.totalPages;\n\n this.buttons = [];\n\n var totalButtons = 7; // ensure this is odd\n var pageSkip = 10;\n var startButton = 1;\n if (this\n .currentPage >\n Math.floor(totalButtons / 2)) startButton = this.currentPage - Math.floor(totalButtons / 2);\n\n var endButton = startButton + totalButtons - 1;\n if (endButton >= this.totalPages) endButton = this.totalPages;\n if (this.totalPages > totalButtons &&\n (endButton - startButton + 1) < totalButtons) {\n startButton = endButton - totalButtons + 1;\n }\n\n var prevPage = this.currentPage - pageSkip;\n if (prevPage < 1) prevPage = 1;\n\n var nextPage = this.currentPage + pageSkip;\n if (nextPage > this.totalPages) nextPage = this.totalPages;\n\n this.buttons.push(new PagerButton('<<', 1, this.currentPage != 1));\n this.buttons.push(new PagerButton('<', prevPage, this.currentPage != 1));\n\n for (var i = startButton; i <= endButton; i++) {\n this.buttons.push(new PagerButton(i, i, true, i === this.currentPage));\n }\n\n this.buttons.push(new PagerButton('>',\n nextPage,\n endButton <= this.totalPages && this.currentPage !== this.totalPages));\n this.buttons.push(new PagerButton('>>',\n this.totalPages,\n endButton <= this.totalPages && this.currentPage !== this.totalPages));\n }\n\n vm.getUsers = function (button) {\n\n vm.pager = null;\n\n const response = {};\n response.pageSize = 10;\n\n vm.users = vm.company.users.slice((button - 1) * response.pageSize, (button - 1) * response.pageSize + response.pageSize);\n \n response.count = vm.company.users.length > response.pageSize ? response.pageSize : vm.company.users.length;\n response.total = vm.company.users.length;\n \n response.totalPages = Math.ceil(vm.company.users.length / response.pageSize);\n response.currentPage = button;\n vm.pager = new Pager(response);\n }\n vm.hasSocial = false;\n accountsService.getAuthenticatedAccount().then(function(data) {\n vm.account = data;\n if (vm.account.accountType === 1 || vm.account.accountType === 5)\n companyService.getCompanyById(vm.account.companyId).then(function (data) {\n vm.company = data;\n vm.getUsers(1);\n var admins = [];\n\n vm.company.users.forEach(function(user) {\n user.isSelected = false;\n if (user.id === vm.account.accountId) {\n user.isSelected = true;\n vm.selectedUsers.push({ name: user.firstName + ' ' + user.lastName, id: user.id });\n }\n if (user.type === 1) {\n admins.push(user);\n }\n });\n vm.companyAdmin = admins;\n vm.hasSocial =\n vm.company.environments.filter(function(en) { if (en.ssoClient.type == 14) return en }).length > 0;\n\n });\n });\n\n vm.selectUser = function (user) {\n\n if (user.id === vm.account.accountId)\n return;\n\n user.isSelected = !user.isSelected;\n if (user.isSelected) {\n if (vm.selectedUsers.filter(function (x) { if (x.id === user.id) return x; else return false;}).length !== -1) {\n vm.selectedUsers.push({ name: user.firstName + ' ' + user.lastName, id: user.id });\n }\n }\n else {\n if (vm.selectedUsers.filter(function (x) { if (x.id === user.id) return x; else return false;}).length > 0) {\n const index = vm.selectedUsers.findIndex(function (x) { if (x.id === user.id) return x; else return false;});\n if (index !== -1) {\n vm.selectedUsers.splice(index, 1);\n }\n }\n }\n }\n\n $('#ConfirmSelection').on('hide.bs.modal', function() {\n $('#ConfirmSelection .modal-content').css('display', 'none');\n });\n\n vm.next = function() {\n $('#ConfirmSelection').modal('show');\n $('#ConfirmSelection .modal-content').css('display','flex');\n }\n\n vm.processing = false;\n vm.working = true;\n\n vm.beginProcessing = function() {\n vm.processing = true;\n vm.working = true;\n $('#ConfirmSelection').modal('hide');\n const createEnvironment = {\n account: vm.account.accountId,\n users :[]\n };\n\n vm.selectedUsers.forEach(function(user) {\n createEnvironment.users.push(user.id);\n });\n \n accountsService.addSocialEnvironment(createEnvironment).then(function() {\n vm.working = false;\n });\n \n };\n\n vm.dissmiss = function() {\n $('#ConfirmSelection').modal('hide');\n };\n\n vm.complete = function() {\n window.location = '/dashboard';\n } \n\n }\n})();\n\n","(function () {\n\n 'use strict';\n angular.module('app')\n .controller('oAuthPermissionsController',\n [\n '$scope', '$sce', '$location', '$routeParams', '$uibModal', '$cookies', 'stateService', 'accountsService', \"dashboardService\", \"permissionsService\",\n oAuthPermissionsController\n ]\n );\n\n function oAuthPermissionsController($scope, $sce, $location, $routeParams ,$uibModal,\n $cookies, stateService, accountsService, dashboardService, permissionsService) {\n\n $scope.modal = {\n clientId: $routeParams.clientId,\n redirectUrl: $routeParams.redirectUrl,\n scope: $routeParams.scope.split(\" \"),\n permissions: [],\n appicationName: \"\",\n stopAllow: true\n };\n\n $scope.checkAllow = function () {\n $scope.modal.stopAllow = $scope.modal.permissions.filter(function (item) {\n return item.checked;\n }).length === 0;\n };\n\n $scope.changeCheck = function (accountClient) {\n var client = $scope.modal.permissions.find(function (item) {\n return item.id === accountClient.id;\n });\n client.checked = !client.checked;\n $scope.checkAllow();\n };\n\n $scope.getAccountClinets = function (type) {\n return $scope.modal.permissions.filter(function (item) {\n return item.type === type;\n });\n };\n\n permissionsService.GetClientDetails($scope.modal.clientId).then(function (response) {\n console.log(response);\n $scope.modal.appicationName = response.oAuthClientName;\n });\n\n accountsService.getAuthorizedAccount().then(function (response) {\n $scope.modal.GatorClients = [];\n $scope.modal.account = {};\n $scope.modal.account = response;\n dashboardService.GetClients().then(function (data) {\n $scope.model.GatorClients = [];\n angular.forEach(data, function (client) {\n if ($scope.modal.scope.includes(client.name.replace(\".\", \"\") + \"Api\")) {\n $scope.modal.GatorClients.push(client);\n angular.forEach($scope.modal.account.ssoClientUsers, function (accountClient) {\n if (accountClient.ssoClientId === client.type) {\n var item = {\n \"id\": accountClient.id,\n \"displayName\": accountClient.displayName,\n \"checked\": true,\n \"type\": client.type\n };\n if ($scope.modal.permissions.findIndex(function (clientItem) {\n return clientItem.id === item.id;\n }) === -1) {\n $scope.modal.permissions.push(item);\n }\n }\n });\n }\n });\n $scope.checkAllow();\n });\n });\n\n $scope.allowAccess = function () {\n var checkedPermmissions = $scope.modal.permissions.filter(function (x) {\n return x.checked && x.type === 1;\n });\n var permissions = [];\n for (var i = 0; i < checkedPermmissions.length; i++) {\n var permission = checkedPermmissions[i];\n permissions.push({\n \"ssoClient\": \"GatorMailApi\",\n \"value\": permission.id\n });\n }\n\n if ($scope.modal.permissions.find(function (x) {\n return x.type === 3 && x.checked;\n }) != null) permissions.push({\n \"ssoClient\": \"GatorLeadsApi\",\n \"value\": \"true\"\n });\n\n if ($scope.modal.permissions.find(function (x) {\n return x.type === 9 && x.checked;\n }) != null) permissions.push({\n \"ssoClient\": \"GatorSurveyApi\",\n \"value\": \"true\"\n });\n\n permissionsService.PostTokenRefresh($scope.modal.clientId, $scope.modal.scope.join(\",\"), permissions).then(function (data) {\n var location = $scope.modal.redirectUrl + ($scope.modal.redirectUrl.indexOf(\"?\") > -1 ? \"&\" : \"?\") + \"access_token=\" + data.access_token + \"&Expires=\" + data.expires_in + \"&refresh_token=\" + data.refresh_token;\n window.location = location;\n });\n };\n\n $scope.denyAccess = function () {\n var url = $scope.modal.redirectUrl + ($scope.modal.redirectUrl.indexOf(\"?\") > -1 ? \"&\" : \"?\") + \"error=User Denied Access\";\n window.location = url;\n };\n };\n})();","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .controller('registerController',\r\n ['registerService', 'accountsService', 'vcRecaptchaService', '$location', registerController]);\r\n\r\n function registerController(registerService, accountsService, vcRecaptchaService, $location) {\r\n /* jshint validthis:true */\r\n var vm = this;\r\n vm.model = {};\r\n vm.model.key = '6LcNI_USAAAAAKsNxQy87SYgrZFAmiJuuQyvHcpV';\r\n\r\n accountsService.getAuthenticatedAccount()\r\n .then(function (response) {\r\n vm.model.isAdmin = (response.accountType === AccountType.Admin ||\r\n response.accountType === AccountType.SuperAdmin);\r\n vm.model.isSuperAdmin = (response.accountType === AccountType.SuperAdmin);\r\n\r\n if(!vm.model.isAdmin && !vm.model.isSuperAdmin)\r\n $location.url('/dashboard');\r\n\r\n });\r\n vm.NavigateToApproval = function() {\r\n $location.url('/registrations');\r\n };\r\n vm.submit = function () {\r\n\r\n vm.submitted = true;\r\n if (!vm.createAccountForm.$valid) {\r\n\r\n vm.model.working = false;\r\n\r\n vm.model.error = \"Please check all fields are filled in correctly.\";\r\n vm.model.complete = true;\r\n vm.model.success = false;\r\n\r\n return;\r\n }\r\n\r\n vm.model.working = true;\r\n\r\n var register = {\r\n firstName: vm.model.firstName,\r\n lastName: vm.model.lastName,\r\n email: vm.model.email,\r\n companyName: vm.model.companyName,\r\n address1: vm.model.address1,\r\n address2: vm.model.address2,\r\n address3: vm.model.address3,\r\n postcode: vm.model.postcode,\r\n phoneNumber: vm.model.phoneNumber,\r\n website: vm.model.website,\r\n isCrmIntegrated: vm.model.isCrmIntegrated,\r\n crmName: vm.model.crmName\r\n\r\n };\r\n\r\n vm.model.complete = false;\r\n\r\n registerService.addRegistration(register)\r\n .then(function() {\r\n vm.model.complete = true;\r\n vm.model.success = true;\r\n },\r\n function(response) {\r\n vm.model.working = false;\r\n\r\n vm.model.error = response.errors[0].message;\r\n vm.model.complete = true;\r\n vm.model.success = false;\r\n\r\n vcRecaptchaService.reload();\r\n });\r\n };\r\n\r\n \r\n }\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .controller('registrationController',\r\n ['$routeParams', 'accountsService', 'registerService', '_', registrationController]);\r\n\r\n\r\n function registrationController($routeParams, accountsService, registerService, _) {\r\n /* jshint validthis:true */\r\n var vm = this;\r\n vm.registrationId = $routeParams.id;\r\n\r\n vm.registration = {};\r\n \r\n vm.success = false;\r\n vm.getRegistration = getRegistration;\r\n vm.activateRegistration = activateRegistration;\r\n vm.dynamicsCompany = {};\r\n vm.dynamicsPager = {\r\n totalItems: 0,\r\n currentPage: 1\r\n };\r\n vm.dynamicsPaged = [];\r\n vm.dynamicsFilterValue = '';\r\n vm.dynamicsFilterApplied = false;\r\n vm.dynamicswaiting = false;\r\n vm.pageDynamicsCompanies = pageDynamicsCompanies;\r\n vm.getDynamicCompanies = getDynamicCompanies;\r\n vm.setDynamicsCompany = setDynamicsCompany;\r\n\r\n activate();\r\n\r\n\r\n function activate() {\r\n\r\n vm.model = accountsService.getAuthenticatedAccount()\r\n .then(function (response) {\r\n vm.model.isAdmin = (response.accountType === AccountType.Admin ||\r\n response.accountType === AccountType.SuperAdmin);\r\n vm.model.isCompanyAdmin = response.accountType === AccountType.Company;\r\n vm.model.isSuperAdmin = (response.accountType === AccountType.SuperAdmin);\r\n vm.model.authenticatedAccountId = response.accountId;\r\n });\r\n\r\n vm.getRegistration();\r\n\r\n }\r\n\r\n function getRegistration() {\r\n registerService.getRegistration(vm.registrationId)\r\n .then(function (response) {\r\n processRegistration(response);\r\n\r\n getDynamicCompanies(response.companyName);\r\n });\r\n\r\n }\r\n\r\n function getDynamicCompanies(companyName) {\r\n\r\n if (companyName) {\r\n vm.dynamicsFilterApplied = true;\r\n }\r\n \r\n vm.dynamicsPaged = [];\r\n vm.dynamicsFilterValue = companyName;\r\n vm.dynamicswaiting = true;\r\n\r\n registerService.dynamicsLookup(companyName)\r\n .then(function (dynamicsResponse) {\r\n vm.dynamicCompanies = dynamicsResponse;\r\n\r\n if (vm.company !== null && vm.company.dynamicsId !== null) {\r\n // see if we can find the Dynamics company\r\n var company = _.findWhere(vm.dynamicCompanies, { id: vm.company.dynamicsId });\r\n\r\n if (_.isUndefined(company)) {\r\n vm.dynamicsCompany = null;\r\n } else {\r\n vm.dynamicsCompany = company;\r\n }\r\n }\r\n\r\n vm.dynamicsPager.totalItems = vm.dynamicCompanies.length;\r\n vm.dynamicswaiting = false;\r\n pageDynamicsCompanies();\r\n });\r\n }\r\n\r\n function setDynamicsCompany(dynamics) {\r\n\r\n vm.company.name = dynamics.name;\r\n vm.company.dynamicsId = dynamics.id;\r\n vm.productAccount.dynamicsId = dynamics.id;\r\n\r\n var company = _.findWhere(vm.dynamicCompanies, { id: dynamics.id });\r\n\r\n if (_.isUndefined(company)) {\r\n vm.dynamicsCompany = null;\r\n } else {\r\n vm.dynamicsCompany = company;\r\n }\r\n }\r\n\r\n function pageDynamicsCompanies() {\r\n vm.dynamicsPaged = [];\r\n var startPage = ((vm.dynamicsPager.currentPage - 1) * 10);\r\n var endPage = (vm.dynamicsPager.currentPage * 10);\r\n \r\n // build the page\r\n for (var i = startPage; i < endPage; i++) {\r\n\r\n if (i > vm.dynamicCompanies.length - 1) break;\r\n\r\n // add the item\r\n vm.dynamicsPaged.push(vm.dynamicCompanies[i]);\r\n }\r\n \r\n }\r\n\r\n\r\n\r\n function processRegistration(registration) {\r\n\r\n vm.productAccount = {\r\n id: registration.id,\r\n firstName: registration.firstName,\r\n lastName: registration.lastName,\r\n contactNumber: registration.phoneNumber,\r\n email: registration.email,\r\n companyName: registration.companyName,\r\n address1: registration.address1,\r\n address2: registration.address2,\r\n address3: registration.address3,\r\n postCode: registration.postCode,\r\n website: registration.website,\r\n isCrmIntegrated: registration.isCrmIntegrated,\r\n crmName: registration.crmName,\r\n sendEmail: false,\r\n activate: true,\r\n products: {\r\n gatorLeads: {\r\n domain: registration.website,\r\n registerUpsell: {\r\n trackingQueue: false\r\n }\r\n }\r\n }\r\n };\r\n\r\n vm.company = registration.company;\r\n\r\n }\r\n\r\n function activateRegistration() {\r\n\r\n vm.submitted = true;\r\n if (!vm.registerAccountForm.$valid) {\r\n\r\n vm.model.working = false;\r\n\r\n vm.model.error = \"Please check all fields are filled in correctly.\";\r\n vm.model.complete = true;\r\n vm.model.success = false;\r\n\r\n return;\r\n }\r\n\r\n \r\n\r\n\r\n\r\n registerService.activateRegistration(vm.productAccount, vm.registrationId)\r\n .then(function (response) {\r\n vm.response = response;\r\n vm.model.complete = true;\r\n vm.model.success = true;\r\n },\r\n function (response) {\r\n vm.response = response;\r\n vm.model.complete = true;\r\n vm.model.success = false;\r\n });\r\n }\r\n\r\n\r\n }\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .controller('registrationsController', ['accountsService', 'registerService', registrationsController]);\r\n\r\n\r\n function registrationsController(accountsService, registerService) {\r\n /* jshint validthis:true */\r\n var vm = this;\r\n vm.model = {};\r\n\r\n vm.waiting = false;\r\n vm.filterApplied = false;\r\n\r\n activate();\r\n\r\n vm.getRegistrations = getRegistrations;\r\n vm.clearFilter = clearFilter;\r\n vm.pageChanged = pageChanged;\r\n vm.filterRegistrations = filterRegistrations;\r\n\r\n function activate() {\r\n \r\n vm.model = accountsService.getAuthenticatedAccount()\r\n .then(function(response) {\r\n vm.model.isAdmin = (response.accountType === AccountType.Admin ||\r\n response.accountType === AccountType.SuperAdmin);\r\n vm.model.isCompanyAdmin = response.accountType === AccountType.Company;\r\n vm.model.isSuperAdmin = (response.accountType === AccountType.SuperAdmin);\r\n vm.model.authenticatedAccountId = response.accountId;\r\n });\r\n\r\n clearFilter();\r\n \r\n }\r\n\r\n function filterRegistrations() {\r\n vm.filterApplied = true;\r\n vm.filter.page = 1;\r\n pageChanged();\r\n }\r\n\r\n function getRegistrations(name, page, take) {\r\n vm.waiting = true;\r\n\r\n registerService.getRegistrations(name, page, take)\r\n .then(function(response) {\r\n vm.registrations = response;\r\n });\r\n\r\n vm.waiting = false;\r\n }\r\n\r\n function pageChanged() {\r\n getRegistrations(vm.filter.name, vm.filter.page, vm.filter.take);\r\n }\r\n\r\n function clearFilter() {\r\n vm.filter = {\r\n name: '',\r\n page: 1,\r\n take: 20\r\n };\r\n vm.filterApplied = false;\r\n pageChanged();\r\n }\r\n\r\n }\r\n})();\r\n","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('requestPasswordController', ['$scope', '$location', '$routeParams', 'loginService', 'stateService', requestPasswordController]\r\n );\r\n\r\n function requestPasswordController($scope, $location, $routeParams, loginService, stateService) {\r\n //$scope.model = stateService.model;\r\n $scope.model = {};\r\n\r\n $scope.submit = function () {\r\n $scope.model.submitted = true;\r\n if (!$scope.requestPasswordForm.$valid) {\r\n return;\r\n }\r\n\r\n $scope.model.working = true;\r\n\r\n loginService.requestPassword($scope.model.email, $routeParams.ct)\r\n .then(function () {\r\n $scope.model.complete = true;\r\n $scope.model.success = true;\r\n },\r\n function () {\r\n $scope.model.working = false;\r\n $scope.model.complete = true;\r\n $scope.model.success = false;\r\n });\r\n };\r\n }\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('resetAuthenticatorController', ['$scope', '$location', '$routeParams', 'accountsService', resetAuthenticatorController]\r\n );\r\n\r\n function resetAuthenticatorController($scope, $location, $routeParams, accountsService) {\r\n $scope.model = {};\r\n\r\n $scope.init = function () {\r\n\r\n accountsService.resetAuthenticator($routeParams.t)\r\n .then(function () {\r\n $scope.model.complete = true;\r\n $scope.model.success = true;\r\n },\r\n function (response) {\r\n $scope.model.working = false;\r\n $scope.model.error = response.errors[0].message;\r\n $scope.model.complete = true;\r\n $scope.model.success = false;\r\n });\r\n\r\n };\r\n\r\n $scope.redirectToLogin = function () {\r\n if ($routeParams.ct != undefined) {\r\n $location.url('/login?ct=' + window.encodeURIComponent($routeParams.ct));\r\n } else {\r\n $location.url('/login');\r\n }\r\n };\r\n }\r\n})();","(function () {\r\n\r\n 'use strict';\r\n angular.module('app')\r\n .controller('resetPasswordController', ['$scope', '$location', '$routeParams', 'accountsService', resetPasswordController]\r\n );\r\n\r\n function resetPasswordController($scope, $location, $routeParams, accountsService) {\r\n $scope.model = {};\r\n if ($routeParams.accountId)\r\n $scope.model.accountMessage = '- ' + $routeParams.accountId;\r\n else\r\n $scope.model.accountMessage = '';\r\n\r\n $scope.submit = function () {\r\n $scope.model.submitted = true;\r\n if (!$scope.resetPasswordForm.$valid) {\r\n return;\r\n }\r\n\r\n $scope.model.working = true;\r\n var accountId = $routeParams.accountId;\r\n\r\n if (accountId) {\r\n accountsService.adminResetPassword(accountId, $scope.model.password)\r\n .then(function () {\r\n $scope.model.complete = true;\r\n $scope.model.success = true;\r\n },\r\n function (response) {\r\n $scope.model.working = false;\r\n $scope.model.error = response.errors[0].message;\r\n $scope.model.complete = true;\r\n $scope.model.success = false;\r\n });\r\n } else {\r\n accountsService.resetPassword($routeParams.t, $scope.model.password)\r\n .then(function () {\r\n $scope.model.complete = true;\r\n $scope.model.success = true;\r\n },\r\n function (response) {\r\n $scope.model.working = false;\r\n $scope.model.error = response.errors[0].message;\r\n $scope.model.complete = true;\r\n $scope.model.success = false;\r\n });\r\n }\r\n };\r\n\r\n $scope.redirectToLogin = function () {\r\n if ($routeParams.ct != undefined) {\r\n $location.url('/login?ct=' + window.encodeURIComponent($routeParams.ct));\r\n } else {\r\n $location.url('/login');\r\n }\r\n };\r\n }\r\n})();","(function() {\n\n 'use strict';\n angular.module('app')\n .controller('updateIntegrationCredentialsController', ['$scope', '$uibModalInstance', '$location', 'companyService','environment', updateIntegrationCredentialsController]);\n\n function updateIntegrationCredentialsController($scope, $uibModalInstance, $location, companyService, environment) {\n\n $scope.model = {};\n $scope.environment = environment;\n\n $scope.Close = function() {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.SaveCredentials = function() {\n\n companyService.updateIntegrationCredentials($scope.environment.id, $scope.model.username, $scope.model.password).then(function(response) {\n $uibModalInstance.close(true);\n });\n\n\n \n };\n }\n\n})();\n","(function () {\n\n 'use strict';\n angular.module('app')\n .controller('wizardController',\n [\n '$location',\n '$routeParams',\n '$timeout',\n '$rootScope',\n 'wizardService',\n wizardController\n ]\n );\n\n function wizardController($location, $routeParams, $timeout, $rootScope, wizardService) {\n \n $rootScope.showLogo = true;\n var vm = this;\n vm.clientToken = $routeParams.ct;\n vm.waiting = true;\n $rootScope.showLogo = true;\n\n /*\n vm.response = {\n \"products\": [{ \"product\": \"GatorLeads\", \"shortName\": \"Leads\", \"uniqueId\": \"sample@leasoftware.net\" }],\n \"client\": \"Gator.Leads\",\n \"clientDetails\": 0,\n \"uniqueId\": \"\",\n \"requestedUrl\": null,\n \"loginUrl\":\n \"http://local-signon.communigator.co.uk/login?ct=1HjkARTWrO6wWuE4H0YC%2fHnD87Z7BKLUTjF8T9AfllIimnK3HkCf3WBIYr7%2fgmMM76ff6PX2P6YHWhqCSqAKdulUci6tMTqQXODLHTR1N94%3d\"\n };\n \n //vm.waiting = false;\n\n return;\n */\n\n wizardService.attach().then(function(response) {\n vm.response = response;\n vm.waiting = false;\n },\n function(response) {\n\n }\n );\n\n\n }\n})();"]}