445 lines
19 KiB
Plaintext
445 lines
19 KiB
Plaintext
|
|
<!DOCTYPE html>
|
||
|
|
<!--[if lt IE 7 ]>
|
||
|
|
<html lang="en" class="no-js ie6" ng-app="cloudpass">
|
||
|
|
<![endif]-->
|
||
|
|
<!--[if IE 7 ]>
|
||
|
|
<html lang="en" class="no-js ie7" ng-app="cloudpass">
|
||
|
|
<![endif]-->
|
||
|
|
<!--[if IE 8 ]>
|
||
|
|
<html lang="en" class="no-js ie8" ng-app="cloudpass">
|
||
|
|
<![endif]-->
|
||
|
|
<!--[if IE 9 ]>
|
||
|
|
<html lang="en" class="no-js ie9" ng-app="cloudpass">
|
||
|
|
<![endif]-->
|
||
|
|
<!--[if (gt IE 9)|!(IE)]><!-->
|
||
|
|
<html lang="en" class="no-js" ng-app="cloudpass">
|
||
|
|
<!--<![endif]-->
|
||
|
|
<head>
|
||
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
|
|
<title>
|
||
|
|
|
||
|
|
Zendesk TOTVS
|
||
|
|
Login
|
||
|
|
|
||
|
|
</title>
|
||
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
|
|
||
|
|
|
||
|
|
<!-- Pingdom - Performance Monitoring Tools -->
|
||
|
|
|
||
|
|
<!--[if lt IE 9]>
|
||
|
|
<script src="/cloudpass/js/html5shiv.js"></script>
|
||
|
|
<![endif]-->
|
||
|
|
<link rel="shortcut icon" href="/cloudpass/static/images/favicon.ico" type="image/x-icon">
|
||
|
|
<link rel="stylesheet" href="/cloudpass/static/css/font-awesome/css/font-awesome.min.css">
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
<script src="/cloudpass/static/plugins/jquery-1.11.1/js/jquery/jquery-1.11.1.min.js" type="text/javascript" ></script>
|
||
|
|
<script src="/cloudpass/static/js/nicEdit.js" type="text/javascript" ></script>
|
||
|
|
<script src="/cloudpass/static/bundle-ng_head.js" type="text/javascript" ></script>
|
||
|
|
<script src="/cloudpass/static/bundle-uiRouter_head.js" type="text/javascript" ></script>
|
||
|
|
<script src="/cloudpass/static/bundle-cookies_head.js" type="text/javascript" ></script>
|
||
|
|
<link href="/cloudpass/static/bower_components/perfect-scrollbar/perfect-scrollbar.css" type="text/css" media="screen, projection" rel="stylesheet" />
|
||
|
|
<link href="/cloudpass/static/css/fluig.less.css" type="text/css" media="screen, projection" rel="stylesheet" />
|
||
|
|
|
||
|
|
|
||
|
|
<script type="text/javascript" src="/cloudpass/static/bundle-idmLibs_head.js"></script>
|
||
|
|
|
||
|
|
<meta name="layout" content="emptyheader"/>
|
||
|
|
<link rel="stylesheet" href="/cloudpass/static/css/login/samllogin.css" type="text/css">
|
||
|
|
<link rel="stylesheet" href="/cloudpass/static/css/forms.css" type="text/css">
|
||
|
|
|
||
|
|
|
||
|
|
<script type="text/javascript">
|
||
|
|
window['_companyId'] = '';
|
||
|
|
window['_userId'] = '';
|
||
|
|
window['_serverName'] = 'totvs.fluigidentity.com';
|
||
|
|
</script>
|
||
|
|
</head>
|
||
|
|
<body>
|
||
|
|
|
||
|
|
<div class ="content-container">
|
||
|
|
<div class="center-container">
|
||
|
|
<div class="center-container-helper">
|
||
|
|
<div ng-show="showCaptcha" id="captchaDiv" class="captcha-card" style="display: none;">
|
||
|
|
<div class="captcha-card-body" id="captcha-container"></div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div id="ng-app" ng-app ng-controller="LoginCtrl" class="cp-applogin" ng-cloak>
|
||
|
|
<div class='cp-img-div'>
|
||
|
|
<img ng-src="https://static.fluigidentity.com/cloudpass/assets/image/application/medium/0w68h87llm8e2rp41463690860303.png" onerror='this.src="data:image/png;base64,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
|
||
|
|
<h4 class="app-name">Zendesk TOTVS</h4>
|
||
|
|
</div>
|
||
|
|
<form action="/cloudpass/?forward=%2Flaunchpad%2FlaunchApp%2F0w68h87llm8e2rp41463690860303%2Fzf0y84vo717g8hjx%3FRelayState%3Dhttps%253A%252F%252Ftotvssuporte.zendesk.com%252Fattachments%252Ftoken%252FP1ItdxVLOYXWPjPhtcnpCNH3I%253Fname%253Dimage.png%26brand_id%3D753138%26SAMLRequest%3DfZHNTsMwEITvfQrLdydOSNrKalJFrZAiFYRa4MDNdTZqhH%252BC1ymFp0cNIJVD%250Aue7Op5mdXSxPRpMjeOycLWgScbosJwuURveiGsLBbuFtAAzkZLRFMS4KOngr%250AnMQOhZUGUAQldtXdRqQRF713wSmn6QXyPyERwYfOWUrqdUHPgGczlWRZJves%250AyW%252FmLOPTGZtPk5S1s5S3CmC%252Bb1NKasQBaotB2lDQlKdTxnPGp488EzwXefJC%250AyfPvdWnEKal%252BzVbO4mDA78AfOwVP201BDyH0KOI4uHBEHHrnA0SfYBvA10g5%250AE0ulADE%252BR6TlWJMYI%252FjyGrKIL1U%252Fzd5LA%252FX6welOfZBKa%252Fe%252B8iADFDT4ASi5%250Add7IcL21JErGSdewdpQKMLLTVdN4QKRx%252Be3694Xl5As%253D%250A&id=login_form" method="post" class="cp-applogin" name="login_form" autocomplete="off" id="login_form" >
|
||
|
|
|
||
|
|
<div class="password-div control-group">
|
||
|
|
<div class="f-field-container">
|
||
|
|
<p class="input-title">
|
||
|
|
Email
|
||
|
|
</p>
|
||
|
|
<input
|
||
|
|
type="text"
|
||
|
|
class="form-control cp-input"
|
||
|
|
ng-model="emailAddress"
|
||
|
|
ng-change="hideError('emailAddress')"
|
||
|
|
name="emailAddress"
|
||
|
|
id="emailAddress"
|
||
|
|
ng-class="{ error: validationObj['emailAddress'].isError }"
|
||
|
|
autofocus
|
||
|
|
/>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div ng-init="hidden_eye=true" class="control-group">
|
||
|
|
<div class="f-field-container-icon">
|
||
|
|
<p class="input-title password">
|
||
|
|
Password
|
||
|
|
</p>
|
||
|
|
<input
|
||
|
|
ng-class="{ error: validationObj['password'].isError }"
|
||
|
|
type="password"
|
||
|
|
class="form-control cp-input"
|
||
|
|
ng-model="password"
|
||
|
|
ng-change="validate('password')"
|
||
|
|
name="password"
|
||
|
|
id="password"
|
||
|
|
/>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
<small id="pwd-icon" tooltip-placement="left" tooltip="Forgot Password?">
|
||
|
|
<a href="/ui/forgotPassword">
|
||
|
|
Forgot your password?
|
||
|
|
</a>
|
||
|
|
</small>
|
||
|
|
|
||
|
|
<img class="cp-eye" ng-show="hidden_eye" ng-click="hidden_eye=false; togglePassword(true)" src="/cloudpass/static/images/view.svg">
|
||
|
|
<img class="cp-eye" ng-show="!hidden_eye" ng-click="hidden_eye=true; togglePassword(false)" src="/cloudpass/static/images/view-slash.svg">
|
||
|
|
<button ng-click="setLoginAnimation()" type="submit" class="btn btn-block login-button" id="login_btn">
|
||
|
|
<p class="login-label" ng-show="!login_animation">
|
||
|
|
Log In
|
||
|
|
</p>
|
||
|
|
<img class="login-animation" ng-show="login_animation" src="/cloudpass/static/images/loading-button.svg">
|
||
|
|
</button>
|
||
|
|
</form>
|
||
|
|
</div>
|
||
|
|
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
</div>
|
||
|
|
<div class="reserved-rights">
|
||
|
|
<p class="copyright">All rights reserved ©</p>
|
||
|
|
<p id="totvs_identity"></p>
|
||
|
|
</div>
|
||
|
|
<script type="text/javascript">
|
||
|
|
'use strict';
|
||
|
|
|
||
|
|
window.onload = function() {
|
||
|
|
companyNeedCaptcha();
|
||
|
|
loadWafScript();
|
||
|
|
};
|
||
|
|
|
||
|
|
var captchaNeeded = false;
|
||
|
|
var captchaEnabled = false;
|
||
|
|
var allCaptchaErrors = false;
|
||
|
|
var showCaptcha = false;
|
||
|
|
var captchaResponse = '';
|
||
|
|
var API_KEY = '';
|
||
|
|
var wafScript;
|
||
|
|
|
||
|
|
var LoginCtrl = ['$scope', '$http', function($scope, $http) {
|
||
|
|
$scope.emailAddress = '';
|
||
|
|
$scope.password = '';
|
||
|
|
|
||
|
|
triggerCaptchaOnErrors();
|
||
|
|
|
||
|
|
|
||
|
|
$scope.errorCls = "";
|
||
|
|
$scope.showError = false;
|
||
|
|
|
||
|
|
|
||
|
|
if (document.getElementsByClassName("cp-error-message").length) {
|
||
|
|
var content_container = document.getElementsByClassName("content-container")[0]
|
||
|
|
content_container.style["min-height"] = '660px'
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
localStorage.setItem('loggedIn', '');
|
||
|
|
} catch(err) {}
|
||
|
|
|
||
|
|
$scope.hideError = function(item) {
|
||
|
|
$scope.validationObj[item].isError = false
|
||
|
|
};
|
||
|
|
$scope.validationObj = {
|
||
|
|
emailAddress: {
|
||
|
|
errorCls: '',
|
||
|
|
isError: false,
|
||
|
|
validFn: function() {
|
||
|
|
if (!angular.element("#emailAddress")[0].value)
|
||
|
|
return false
|
||
|
|
return true
|
||
|
|
}
|
||
|
|
},
|
||
|
|
password: {
|
||
|
|
errorCls: '',
|
||
|
|
isError: false,
|
||
|
|
validFn: function() {
|
||
|
|
|
||
|
|
if (!$scope.password) return false
|
||
|
|
return (/^.+$/.test($scope.password));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
$scope.togglePassword = function(password_visible) {
|
||
|
|
var input = document.getElementById("password");
|
||
|
|
if (password_visible) input.type = "text";
|
||
|
|
else input.type = "password";
|
||
|
|
};
|
||
|
|
|
||
|
|
$scope.setLoginAnimation = function() {
|
||
|
|
if ($scope.emailAddress && $scope.password)
|
||
|
|
$scope.login_animation = true;
|
||
|
|
};
|
||
|
|
|
||
|
|
$scope.validate = function(item) {
|
||
|
|
var valid = true;
|
||
|
|
|
||
|
|
if(item) {
|
||
|
|
$scope.validationObj[item].isError = !$scope.validationObj[item].validFn();
|
||
|
|
$scope.validationObj[item].errorCls = $scope.validationObj[item].isError ? "error" : "";
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
for(var i in $scope.validationObj) {
|
||
|
|
$scope.validationObj[i].isError = !$scope.validationObj[i].validFn() || $scope[i] == null;
|
||
|
|
$scope.validationObj[i].errorCls = $scope.validationObj[i].isError ? "error" : "";
|
||
|
|
if($scope.validationObj[i].isError) {
|
||
|
|
valid = false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return valid;
|
||
|
|
};
|
||
|
|
}];
|
||
|
|
|
||
|
|
const companyNeedCaptcha = async() => {
|
||
|
|
const {host} = location
|
||
|
|
const url = 'https://' + host + '/api/core/v1/companies/' + host +'/limited'
|
||
|
|
const response = await fetch(url);
|
||
|
|
try {
|
||
|
|
const data = await response.json();
|
||
|
|
|
||
|
|
captchaEnabled = data?.captchaEnabled ? data.captchaEnabled : false;
|
||
|
|
API_KEY = data.wafApiKey;
|
||
|
|
} catch (error) {
|
||
|
|
console.log('[LIMITED] ', error?.message ? error.message : 'limited fetch error')
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
const dynamicReservedRights = () =>{
|
||
|
|
const currentYear = new Date().getFullYear().toString();
|
||
|
|
const displayReservedRights = document.getElementById("totvs_identity");
|
||
|
|
displayReservedRights.innerHTML = "<strong>TOTVS IDENTITY " + currentYear + "</strong>";
|
||
|
|
}
|
||
|
|
dynamicReservedRights();
|
||
|
|
|
||
|
|
function handleCaptchaResponse(){
|
||
|
|
const loginBtn = document.getElementById("login_btn");
|
||
|
|
loginBtn.disabled = false;
|
||
|
|
loginBtn.outerHTML = "<button ng-click=\"setLoginAnimation()\" type=\"submit\" class=\"btn btn-block login-button\" id=\"login_btn\">\n<p class=\"login-label\">\nEntrar\n</p> \n</button>"
|
||
|
|
}
|
||
|
|
|
||
|
|
function triggerCaptchaOnErrors(){
|
||
|
|
const errors = readCookie('loginErrorCount');
|
||
|
|
writeCookie('loginErrorCount', 1 + parseInt('' + errors));
|
||
|
|
|
||
|
|
if(errors > 5 ){
|
||
|
|
captchaNeeded = true;
|
||
|
|
showCaptcha = true;
|
||
|
|
mountCaptcha();
|
||
|
|
}
|
||
|
|
|
||
|
|
return errors > 5;
|
||
|
|
}
|
||
|
|
|
||
|
|
function writeCookie(name, value, ttlMinutes = 5) {
|
||
|
|
const ttl = new Date();
|
||
|
|
ttl.setMinutes(ttl.getMinutes() + ttlMinutes);
|
||
|
|
document.cookie = name + '=' + value + ';' + ttl.toUTCString() + '; path=/';
|
||
|
|
}
|
||
|
|
|
||
|
|
function readCookie(cookieName) {
|
||
|
|
const allCookies = document.cookie.split(';');
|
||
|
|
for (const cookie of allCookies) {
|
||
|
|
if (getPropertyName(cookie) === cookieName) {
|
||
|
|
return parseInt(getPropetyValue(cookie));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
|
||
|
|
function getPropertyName(line) {
|
||
|
|
return line.split('=')[0].trim();
|
||
|
|
}
|
||
|
|
|
||
|
|
function getPropetyValue(line) {
|
||
|
|
return line.split('=')[1];
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
function mountCaptcha(){
|
||
|
|
const captchaDiv = document.getElementById('captcha-container');
|
||
|
|
|
||
|
|
if (captchaDiv) {
|
||
|
|
captchaDiv.style.display = 'block';
|
||
|
|
|
||
|
|
const recaptchaScript = document.createElement('script');
|
||
|
|
recaptchaScript.src = wafScript;
|
||
|
|
recaptchaScript.async = true;
|
||
|
|
recaptchaScript.defer = true;
|
||
|
|
|
||
|
|
recaptchaScript.onload = function () {
|
||
|
|
AwsWafCaptcha.renderCaptcha('captcha-container', {
|
||
|
|
apiKey: API_KEY,
|
||
|
|
onSuccess: handleCaptchaResponse,
|
||
|
|
});
|
||
|
|
};
|
||
|
|
|
||
|
|
document.body.appendChild(recaptchaScript);
|
||
|
|
} else {
|
||
|
|
console.error('Captcha div not found!');
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
function loadWafScript() {
|
||
|
|
const split = window.location.host.split('.')
|
||
|
|
const host = split[1] + "." + split[2]
|
||
|
|
var src = "https://1394b5c5dc92.edge.captcha-sdk.awswaf.com/1394b5c5dc92/jsapi.js";
|
||
|
|
if (host === "customerfi.com") {
|
||
|
|
src = "https://594a22d4d361.edge.captcha-sdk.awswaf.com/594a22d4d361/jsapi.js";
|
||
|
|
} else if (host === "fluigidentity.net") {
|
||
|
|
src = "https://f62789f8968fqa.edge.captcha-sdk.awswaf.com/f62789f8968f/jsapi.js";
|
||
|
|
}
|
||
|
|
var script = document.createElement('script');
|
||
|
|
script.type = "text/javascript";
|
||
|
|
script.src = src;
|
||
|
|
script.defer = true;
|
||
|
|
wafScript = src;
|
||
|
|
document.head.appendChild(script);
|
||
|
|
}
|
||
|
|
|
||
|
|
$('#login_form').submit(function() {
|
||
|
|
triggerCaptchaOnErrors();
|
||
|
|
|
||
|
|
var email = $("#emailAddress").val();
|
||
|
|
var isValid;
|
||
|
|
localStorage.setItem('mfaUser', JSON.stringify({username: email, domain: location.hostname}));
|
||
|
|
|
||
|
|
if(!isMobile()) {
|
||
|
|
try {
|
||
|
|
isValid = angular.element('[ng-controller=LoginCtrl]').scope().$apply(function(me) { return me.validate(); });
|
||
|
|
} catch(e) {
|
||
|
|
isValid = false;
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
if(email && email.length) {
|
||
|
|
isValid = true;
|
||
|
|
} else {
|
||
|
|
isValid = false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return isValid; //continue submit
|
||
|
|
});
|
||
|
|
|
||
|
|
$('#emailAddress').blur(function() {
|
||
|
|
angular.element('[ng-controller=LoginCtrl]').scope().$apply(function(scope) {
|
||
|
|
scope.validate('emailAddress');
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
function isMobile() {
|
||
|
|
var i = 0, isMobile = false, iDevice = ['iPad', 'iPhone', 'iPod', 'Android', 'webOS', 'BlackBerry', 'IEMobile', 'Opera Mini'];
|
||
|
|
|
||
|
|
for (; i < iDevice.length; i++) {
|
||
|
|
if (navigator.platform.toLowerCase().indexOf(iDevice[i].toLowerCase()) > -1) {
|
||
|
|
isMobile = true;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
if (navigator.userAgent.toLowerCase().indexOf(iDevice[i].toLowerCase()) > -1) {
|
||
|
|
isMobile = true;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return isMobile;
|
||
|
|
}
|
||
|
|
</script>
|
||
|
|
|
||
|
|
</div>
|
||
|
|
<div id="spinner" class="spinner" style="display:none;">
|
||
|
|
Loading ...
|
||
|
|
</div>
|
||
|
|
<script src="/cloudpass/static/bundle-bundle_angular_defer.js" type="text/javascript" ></script>
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
<script src="/cloudpass/static/bower_components/zeroclipboard/dist/ZeroClipboard.min.js" type="text/javascript" ></script>
|
||
|
|
<script src="/cloudpass/static/js/ui.bootstrap.overrides.js" type="text/javascript" ></script>
|
||
|
|
<script src="/cloudpass/static/bundle-bundle_perfectScrollbar_defer.js" type="text/javascript" ></script>
|
||
|
|
<script src="/cloudpass/static/bundle-bundle_tParty_defer.js" type="text/javascript" ></script>
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
<script src="/cloudpass/static/bundle-bundle_fluigApp_defer.js" type="text/javascript" ></script>
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
</body>
|
||
|
|
</html>
|