Acceder - Caja los andes - DGO
Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing: ==> proveedor.modal [in template "20101#20128#231579" at line 95, column 68] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${proveedor.modal.modalTitle.getData()} [in template "20101#20128#231579" at line 95, column 66] ----
1<#function substituirCaminhoCDN(caminho)>
2 <#assign indice = caminho?last_index_of("/documents") + 1>
3 <#assign novoCaminho = caminho?substring(indice)>
4
5 <#return themeDisplay.getCDNBaseURL() + "/" + novoCaminho>
6</#function>
7
8<style>
9 #modalProveedor .modal-content .modal-body .modal-body-content {
10 max-width: 460px;
11 margin-left: auto;
12 margin-right: auto;
13 }
14 #modalProveedor .modal-content {
15 max-width: 33.5rem;
16 background-color: #000;
17 }
18 #modalProveedor .modal-content .modal-header {
19 border: none;
20 height: 6rem;
21 }
22 #modalProveedor .modal-content .modal-header .modal-title {
23 font-size: 16px;
24 max-width: 59%;
25 white-space: normal;
26 margin-top: 15px;
27 }
28 #modalProveedor .modal-content .nomeProveedor {
29 color: #A3A3A3;
30 text-align: center;
31 margin-top: 4px;
32 }
33 #modalProveedor .modal-content .modal-body .modal-body-content .content_channels {
34 gap: 4rem;
35 }
36 #extraChannelsSection a {
37 width: 125px;
38 }
39 #modalProveedor .channel_list_circle {
40 margin: auto;
41 max-width: 100%;
42 width: 5rem;
43 height: 5rem;
44 }
45 #modalProveedor .modal-content .modal-body {
46 overflow-y: auto;
47 max-height: 325px;
48 }
49 #modalProveedor .modal-content .modal-body::-webkit-scrollbar-track {
50 -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
51 border-radius: 10px;
52 background-color: #3e3e3e;
53 margin: 24px 0;
54 }
55 #modalProveedor .modal-content .modal-body::-webkit-scrollbar {
56 width: 6px;
57 background-color: transparent;
58 margin: 24px 5px;
59 }
60 #modalProveedor .modal-content .modal-body::-webkit-scrollbar-thumb {
61 border-radius: 10px;
62 -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
63 background-color: #00ACEC;
64 margin: 24px 0;
65 }
66 @media (max-width:471px){
67 #modalProveedor .modal-content .modal-header .modal-title {
68 max-width: 194px;
69 }
70 #modalProveedor .modal-content .modal-header {
71 height: 8rem;
72 }
73 #modalProveedor .modal-content .modal-body {
74 max-height: 285px;
75 }
76 #modalProveedor .modal-content .modal-body .modal-body-content {
77 max-width: 337px;
78 }
79 #modalProveedor .modal-content .modal-header .close {
80 align-self: stretch;
81 margin-top: 27px;
82 }
83 }
84 </style>
85
86 <div class="gtmObjLogin hide" data-gtm-obj="{pageView:'p-010.012.000.000.000.000',forgotPassword:'e-010.012.001.000.000.119',signIn:'e-010.012.001.000.000.120',loginProvider:'e-010.012.001.000.000.121'}"></div>
87
88 <div class="modal modal-dtvgo fade modal-dtvgo--scrollable" id="modalProveedor" tabindex="-1" role="dialog"
89 aria-labelledby="modalProveedorLabel" aria-hidden="true"
90 style="display:none;">
91
92 <div class="modal-dialog modal-dialog-centered" role="document">
93 <div class="modal-content">
94 <div class="modal-header text-color-white">
95 <h5 class="modal-title" id="modalProveedorLabel">${proveedor.modal.modalTitle.getData()}</h5>
96 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
97 <span aria-hidden="true">×</span>
98 </button>
99 </div>
100 <div class="modal-body">
101 <div class="modal-body-content">
102 <div id="extraChannelsSection" class="content_channels">
103 <#if proveedor.modal.operatorLink.getSiblings()?has_content>
104 <#list proveedor.modal.operatorLink.getSiblings() as cur_proveedor_modal_operatorLink>
105 <#if cur_proveedor_modal_operatorLink.operatorText123.getData()?? && cur_proveedor_modal_operatorLink.operatorText123.getData() != "">
106 <a href="${cur_proveedor_modal_operatorLink.getData()}">
107 <div class="channel_list_circle">
108 <#if (cur_proveedor_modal_operatorLink.operatorImage.getData())?? && cur_proveedor_modal_operatorLink.operatorImage.getData() != "">
109 <img alt="${cur_proveedor_modal_operatorLink.operatorImage.getAttribute("alt")}" data-fileentryid="${cur_proveedor_modal_operatorLink.operatorImage.getAttribute("fileEntryId")}" src="${substituirCaminhoCDN(cur_proveedor_modal_operatorLink.operatorImage.getData())}" />
110 </#if>
111 </div>
112 <div class="nomeProveedor">
113 ${cur_proveedor_modal_operatorLink.operatorText123.getData()}
114 </div>
115 </a>
116 </#if>
117 </#list>
118 </#if>
119 </div>
120 </div>
121 </div>
122 </div>
123 </div>
124 </div>
125 <div class="login">
126 <form class="login__form" method="POST">
127 <div class="login__form-div">
128 <div class="login__form-div-pass">
129 <label <#if getterUtil.getBoolean(configureInputs.removeInputsTexts.getData())>
130 style="display: none"
131 <#else>
132 </#if> for="email" class="login__label">${configureInputs.inputEmail.emailText.getData()}</label>
133 <input class="login__input" type="text" id="email" name="email" required maxlength="60" size='65'>
134 <p class="error_message" style="text-align: ${errorMessage.specificErrorMessages.AlignmentError.getData()};
135 font-size: ${errorMessage.specificErrorMessages.sizeError.getData()};">${errorMessage.specificErrorMessages.errorMessageEmail.getData()}</p>
136 <p class="alert_message" style="text-align: ${errorMessage.specificErrorMessages.AlignmentError.getData()};
137 font-size: ${errorMessage.specificErrorMessages.sizeError.getData()};">${errorMessage.specificErrorMessages.messageRequiredField.getData()}</p>
138 </div>
139 </div>
140 <div class="login__form-div">
141 <div class="login__form-div-pass">
142 <label <#if getterUtil.getBoolean(configureInputs.removeInputsTexts.getData())>
143 style="display: none"
144 <#else>
145 </#if> for="password" class="login__label">${configureInputs.inputPassword.passwordText.getData()}</label>
146 <input class="login__input" type="password" id="password" name="password" required size='8'>
147 <div class="pass-view">
148 <#if (configureInputs.inputPassword.IconBlockedView.getData())?? && configureInputs.inputPassword.IconBlockedView.getData() != "">
149 <img id="iconBlockedView" alt="${configureInputs.inputPassword.IconBlockedView.getAttribute("alt")}" data-fileentryid="${configureInputs.inputPassword.IconBlockedView.getAttribute("fileEntryId")}" src="${substituirCaminhoCDN(configureInputs.inputPassword.IconBlockedView.getData())}" />
150</#if>
151 </div>
152 <p class="error_message" style="
153 text-align: ${errorMessage.alignment.getData()};
154 font-size: ${errorMessage.Size.getData()};
155 ">${errorMessage.genericErrorMessage.getData()}</p>
156 <p class="alert_message" style="text-align: ${errorMessage.specificErrorMessages.AlignmentError.getData()};
157 font-size: ${errorMessage.specificErrorMessages.sizeError.getData()};">${errorMessage.specificErrorMessages.messageRequiredField.getData()}</p>
158 </div>
159 </div>
160 <div class="forgot_password">
161 ${forgotYourPassword.linkToForgotPassword.getData()}
162 </div>
163 <div>
164 <button <#if getterUtil.getBoolean(configureButton.buttonText.removeElementFromScreen.getData())>
165 style="display: none"
166 <#else>
167 style=" color: ${configureButton.buttonText.buttonClassColorText.getData()};
168 margin: ${configureButton.buttonText.buttonAlignment.getData()};"
169 </#if> class="button ${configureButton.buttonText.buttonClassBackgroundColor.getData()} button__gray_link ${configureButton.buttonText.borderClass.getData()}" type="submit" id="validation" >${configureButton.buttonText.getData()}
170 </button>
171 </div>
172 ${makeYourRegistration.textMakeRegistration.getData()}
173 </form>
174 </div>
175
176 <style>
177 .plans{
178 display: none;
179 }
180 </style>
181
182 <script>
183 var infPlan;
184var infCombo;
185var freeDayPlan;
186var typePlan;
187var payment_text;
188var errorLogin;
189var onHold
190
191$("#iconBlockedView").attr(
192 "src",
193 BASE_IMG +
194 "/documents/91224/96178/icon-blocked-view.svg/91eefe05-711c-818a-2b9e-49abd806b314?t=1628100125049&version=1.0&imagePreview=1"
195);
196
197function handleCart(data) {
198 if (!data || data.errors) {
199 throw "Error while handling shopping cart";
200 }
201
202 var hasExtra = false;
203
204 if (data && data.data && data.data.customerCart) {
205 var APIproductsList = [];
206 var displayableProducts = [];
207 var type = "";
208
209 data.data.customerCart.items.forEach((item) => {
210 APIproductsList.push({
211 id: item.id,
212 uid: item.uid,
213 product: {
214 name: item.product.name,
215 sku: item.product.sku,
216 },
217 quantity: 1,
218 });
219
220 if (item.product.categories.length > 0) {
221 item.product.categories.forEach((category) => {
222 if (category.name) {
223 if (
224 category.name.toLowerCase().includes("extra") ||
225 category.name.toLowerCase().includes("combo") ||
226 category.name.toLowerCase().includes("plan")
227 ) {
228 category.name.toLowerCase().includes("plan")
229 ? (type = "plan")
230 : (type = category.name.substring(
231 0,
232 category.name.length - 1
233 ));
234 }
235 }
236 });
237 }
238
239 if (type == "plan") {
240 sessionStorage.setItem(
241 "dataPlan",
242 JSON.stringify({
243 dataProduct: item.product.name,
244 })
245 );
246 }
247
248 JSON.parse(
249 sessionStorage.getItem("displayableExtras")
250 )?.planItems.forEach((product) => {
251 product.plans.forEach((plan) => {
252 if (
253 JSON.parse(sessionStorage.getItem("dataPlan")).dataProduct ==
254 plan.name
255 ) {
256 freeDayPlan = plan.freeTrialValue;
257 freeTrialPeriodPlan = plan.freeTrialPeriod;
258 typePlan = plan.typeCharge;
259 payment_text = plan.payment_text;
260
261 if (item.product.name.toLowerCase().includes("combo")) {
262 plan.combos.some((dado) => {
263 if (
264 item.product.name.replace(/ /g, "") ==
265 dado.name.replace(/ /g, "")
266 ) {
267 infCombo = dado;
268 return infCombo;
269 }
270 });
271 } else {
272 plan.items.some((dado) => {
273 dado.options.forEach((option) => {
274 if (item.product.name == option.label) {
275 infPlan = null;
276 infPlan = option;
277 return infPlan;
278 }
279 });
280 });
281 }
282 }
283 });
284 });
285
286 displayableProducts.push({
287 id: item.id,
288 name: item.product.name,
289 sku: item.product.sku,
290 type: type,
291 price: item.prices.price.value,
292 image: item.product.thumbnail.url,
293 inf: type == "Combo" ? infCombo : infPlan,
294 freeDay: type == "plan" ? freeDayPlan : "",
295 freeTrialPeriod: type == "plan" ? freeTrialPeriodPlan : "",
296 typePlan: type == "plan" ? typePlan : "",
297 payment_text: type == "plan" ? payment_text : "",
298 });
299
300 if (
301 type &&
302 (type.toLowerCase().includes("extra") ||
303 type.toLowerCase().includes("combo"))
304 ) {
305 hasExtra = true;
306 }
307 });
308
309 sessionStorage.setItem(
310 "cart",
311 JSON.stringify({
312 cart: data.data.customerCart.id,
313 APIproductsList: APIproductsList,
314 displayableProducts: displayableProducts,
315 })
316 );
317
318 return {
319 customerCart: data.data.customerCart,
320 hasExtra: hasExtra,
321 isEmptyCart: APIproductsList.length == 0,
322 };
323 }
324
325 return {
326 customerCart: null,
327 hasExtra: null,
328 isEmptyCart: null,
329 };
330}
331
332function getCart(token) {
333 var queryGetCart =
334 "{ customerCart { id items { id uid product { name sku categories { id name } thumbnail { url label } short_description { html } description { html } } prices { discounts { label amount { value } } price { value } } ... on BundleCartItem { bundle_options { values { id uid label price } } } quantity } applied_coupons { code } }}";
335
336 return $.ajax({
337 method: "POST",
338 url: API_ENDPOINT,
339 headers: {
340 Authorization: "Bearer " + token,
341 "Content-Type": "application/json",
342 "Store": store,
343 },
344 data: JSON.stringify({ query: queryGetCart }),
345 success: async function (data) {
346 if (data.errors) {
347 const cartId = data.data.customerCart.id;
348 await clearCart(cartId, token);
349 location.href = pageSelectPlan;
350 }
351
352 return data;
353 },
354 error: function (error) {
355 clearCart();
356 return error;
357 },
358 });
359}
360
361function successPlan(data) {
362 let planItems = [];
363 if (data.data.products.items.length > 0) {
364 data.data.products.items.forEach((item) => {
365 var productNamePlan = item.name;
366 var typeCharge = item.customAttributes.includes("ano") ? "ano" : "mês";
367 var freeTrialValue = parseInt(
368 JSON.parse(item.customAttributes).free_trial
369 );
370 var freeTrialPeriod = JSON.parse(item.customAttributes).free_trial_period !== false ? JSON.parse(item.customAttributes).free_trial_period.toLowerCase() : " ";
371 var paymentText = JSON.parse(item.customAttributes).payment_text;
372 var termsConditions = JSON.parse(
373 item.customAttributes
374 ).terms_and_conditions;
375
376 planItems.push({
377 plans: [
378 {
379 name: productNamePlan,
380 items: item.items,
381 combos: item.related_products,
382 freeTrialValue: freeTrialValue,
383 freeTrialPeriod: freeTrialPeriod,
384 typeCharge: typeCharge,
385 termsConditions: termsConditions,
386 payment_text: paymentText,
387 },
388 ],
389 });
390 });
391 sessionStorage.setItem(
392 "displayableExtras",
393 JSON.stringify({ planItems })
394 );
395 } else {
396 toggleLoader(false);
397 }
398}
399
400function getForgeRockData(email, password) {
401 let deviceId = (+new Date() + Math.random() * 100).toString(32);
402 localStorage.setItem('deviceId', deviceId)
403 return $.ajax({
404 url: FORGE_ROCK_URL,
405 type: "POST",
406 headers: {
407 "Content-Type": "application/x-www-form-urlencoded",
408 Authorization: authorization_forgot_password,
409 "Accept-API-Version": "resource=2.1",
410 "auth_chain": "ldapService"
411 },
412 data: {
413 claims: '{ "id_token": { "deviceId": { "value": ' + deviceId + '}}}',
414 grant_type: "password",
415 username: email,
416 password: password,
417 scope: "openid profile entitlements vrio device",
418 },
419 success: function (data) {
420 localStorage.setItem('renewEntitlements', JSON.stringify(data))
421 return data;
422 },
423 error: function (error) {
424 errorLogin = error;
425 return error;
426 },
427 });
428}
429
430function getEntitlementStatus(accessToken) {
431 return $.ajax({
432 url: API_AUTHORIZATION_STATUS_LOGIN,
433 method: "POST",
434 headers: {
435 "Content-Type": "application/json",
436 "x-api-key": API_KEY_ENTITLEMENT_STATUS,
437 },
438 data: JSON.stringify({
439 accessToken: accessToken,
440 provider: "forgerock",
441 deviceID: "HCM_NO_DEVICE",
442 country: userLanguage,
443 }),
444 success: function (data) {
445 return data;
446 },
447 error: function (error) {
448 return error;
449 },
450 });
451}
452
453function handleForgeRockCookie(forgerockId, customerToken, access_token) {
454 let expires = new Date(Date.now() + 3600 * 1000).toUTCString();
455 localStorage.setItem('customerToken', customerToken)
456 document.cookie =
457 "token=" + customerToken + "; expires=" + expires + "; path=/";
458 document.cookie =
459 "forgerock_id=" + forgerockId + "; expires=" + expires + "; path=/";
460 document.cookie =
461 "forgerock_accessToken=" +
462 access_token +
463 "; expires=" +
464 expires +
465 "; path=/";
466}
467
468function parseJwt(token) {
469 var base64Url = token.split(".")[1];
470 var base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
471 var jsonPayload = decodeURIComponent(
472 atob(base64)
473 .split("")
474 .map(function (c) {
475 return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
476 })
477 .join("")
478 );
479
480 return JSON.parse(jsonPayload);
481}
482
483function doItBeforeRedirect() {
484 let planSelect;
485 let redirectShop = false;
486
487 //handleCheckoutGTM([], 1, 'create_account')
488
489 if (sessionStorage.getItem("cart")) {
490 JSON.parse(sessionStorage.getItem("cart")).displayableProducts.forEach(
491 (product) => {
492 if (product.type == "plan") {
493 planSelect = product.name;
494 }
495 }
496 );
497 }
498
499 if (sessionStorage.getItem("dataProduct")) {
500 if (
501 planSelect !=
502 JSON.parse(sessionStorage.getItem("dataProduct")).dataProduct
503 ) {
504 redirectShop = true;
505 sessionStorage.setItem(
506 "dataPlan",
507 JSON.stringify({
508 dataProduct: JSON.parse(sessionStorage.getItem("dataProduct"))
509 .dataProduct,
510 })
511 );
512 } else {
513 redirectShop = false;
514 sessionStorage.removeItem("dataProduct");
515 sessionStorage.removeItem("dataOptions");
516 sessionStorage.removeItem("dataSku");
517 sessionStorage.removeItem("dataPricePlan");
518 }
519 }
520 return redirectShop;
521}
522
523function buildRedirectObject() {
524 return {
525 0: function (argsCart) {
526 const redirectShop = doItBeforeRedirect();
527 if (
528 redirectShop ||
529 argsCart.isEmptyCart == true ||
530 argsCart.isEmptyCart == null
531 ) {
532 location.href = pageSelectPlan;
533 } else if (!argsCart.isEmptyCart && !argsCart.hasExtra) {
534 location.href = pageShoppingCart;
535 } else if (!argsCart.isEmptyCart && argsCart.hasExtra) {
536 location.href = pageCheckout;
537 } else {
538 throw "Error while redirecting with no subscription flow";
539 }
540 },
541 1: function () {
542 doItBeforeRedirect();
543 location.href = INACTIVE_PRODUCT_URL;
544 },
545 2: function () {
546 doItBeforeRedirect();
547 location.href = ACTIVE_PRODUCT_URL;
548 },
549 };
550}
551function isOnHold(token) {
552 const setisOnHold =
553 '{ ' +
554 ' customer {' +
555 ' orders{' +
556 ' items {' +
557 ' status' +
558 ' }' +
559 ' }' +
560 ' }' +
561 '}';
562
563 $.ajax({
564 type: "GET",
565 url: API_ENDPOINT,
566 headers: {
567 Authorization: "Bearer " + token,
568 "Content-Type": "application/json",
569 Store: store,
570 },
571 data: { query: setisOnHold },
572 success: function (data) {
573 onHold = successIsOnHold(data)
574 },
575 error: function (data) {
576 displayModalGenericError()
577 }
578 });
579}
580
581function successIsOnHold(data) {
582 statusOrder = data.data.customer.orders.items;
583 let status = statusOrder.slice(-1);
584
585 if (status.status.toUpperCase() == "ON HOLD") {
586 return true
587 } else {
588 return false
589 }
590}
591function getPlans() {
592 var queryPlano =
593 '{ products( filter: { category_id: { eq: "' +
594 id_catPlanos +
595 '"} }, sort: { sort_order: DESC }) { items { name sku promotional_text button_text customAttributes (fields: ["free_trial","free_trial_period","usage_period", "terms_and_conditions", "payment_text"]) short_description { html } description { html } price_range { minimum_price { regular_price { value currency } final_price { value currency } discount { amount_off percent_off } } } small_image { position disabled url label } thumbnail { position disabled url label } ... on BundleProduct { items { uid title required type position options { uid price id position is_default label product { id name promotional_text sku sort_order customAttributes(fields: ["free_trial","free_trial_period", "usage_period", "terms_and_conditions"]) small_image { position disabled url label } thumbnail { position disabled url label } short_description { html } description { html } price_range { minimum_price { regular_price { currency value } regular_price { currency value } discount { amount_off percent_off __typename } } } __typename } } } } related_products { uid name promotional_text sku customAttributes(fields: ["free_trial","free_trial_period", "usage_period", "terms_and_conditions"]) button_text short_description { html } description { html } price_range { minimum_price { regular_price { value currency } final_price { value currency } discount { amount_off percent_off } } } thumbnail { position disabled url label } } } }}';
596
597 $.ajax({
598 url: API_ENDPOINT,
599 type: "get",
600 headers: {
601 "Content-Type": "application/json",
602 "Store": store,
603 },
604 data: { query: queryPlano },
605 success: function (data) {
606 if (!data.errors) {
607 successPlan(data);
608 }
609 },
610 error: function (error) {
611 toggleLoader(false);
612 },
613 });
614}
615
616function setDataToAccessFronchPort(
617 sessionToken,
618 expireDate,
619 refreshToken,
620 forgerockId
621) {
622 const userFromOrbis = parseJwt(sessionToken);
623 let type, tve
624 if (userFromOrbis.businessUnit.toLowerCase().includes('br')) {
625 type = 'ott'
626 tve = false
627 } else if (userFromOrbis.businessUnit.toLowerCase().includes('ssla')) {
628 type = 'latam-ott'
629 tve = false
630 } else {
631 type = 'tve'
632 tve = true
633 }
634
635 const userObj = {
636 allowedCountry: true,
637 country: userFromOrbis.iso2Code,
638 isTVE: tve,
639 iso2Code: userFromOrbis.iso2Code,
640 profile: {
641 iso2country: userFromOrbis.iso2Code,
642 email: userFromOrbis.sub,
643 },
644 uid: userFromOrbis.customerId,
645 userType: type
646 }
647 localStorage.setItem("user", JSON.stringify(userObj));
648 localStorage.setItem(
649 "renewEntitlements",
650 JSON.stringify({
651 expireDate: expireDate,
652 refresh_token: refreshToken,
653 })
654 );
655 localStorage.setItem("sessionToken", forgerockId);
656}
657
658async function handleRedirectUser(
659 idToken,
660 refreshToken,
661 expiresIn,
662 access_token
663) {
664 try {
665 const {
666 status,
667 customerToken,
668 sessionToken,
669 forgerock_id,
670 firstname,
671 lastname,
672 } = await getEntitlementStatus(idToken);
673 const selectRedirect = buildRedirectObject();
674 let runRedirect;
675 localStorage.setItem("customerToken", customerToken);
676 isOnHold(customerToken)
677
678 if (parseInt(status) === 0 && forgerock_id) {
679 handleForgeRockCookie(forgerock_id, customerToken, access_token);
680
681 sessionStorage.setItem(
682 "user",
683 JSON.stringify({
684 firstname,
685 lastname,
686 })
687 );
688
689 setDataToAccessFronchPort(
690 sessionToken,
691 expiresIn,
692 refreshToken,
693 idToken
694 );
695
696 const dataCart = await getCart(customerToken);
697 const argsCart = handleCart(dataCart);
698
699 runRedirect = selectRedirect[parseInt(status)];
700 if(onHold){
701 $('#errorWarningModal').modal('show');
702 }else{
703 runRedirect(argsCart);
704 }
705
706 toggleLoader(false);
707 } else if (parseInt(status) === 1 || 2) {
708 setDataToAccessFronchPort(
709 sessionToken,
710 expiresIn,
711 refreshToken,
712 idToken
713 );
714
715 runRedirect = selectRedirect[parseInt(status)];
716 runRedirect();
717
718 toggleLoader(false);
719 } else {
720 throw "Fail to login ";
721 }
722 } catch (e) {
723 clearCredentials();
724 toggleLoader(false);
725 }
726}
727
728async function login(user, password) {
729 try {
730 getPlans();
731 toggleLoader(true);
732 const { id_token, refresh_token, expires_in, access_token } =
733 await getForgeRockData(user, password);
734 localStorage.setItem('frToken', access_token)
735 handleRedirectUser(id_token, refresh_token, expires_in, access_token);
736 } catch (error) {
737 if (errorLogin) {
738 displayErrorLogin();
739 toggleLoader(false);
740 return false;
741 }
742 clearCredentials();
743 toggleLoader(false);
744 displayModalGenericError();
745 return;
746 }
747}
748
749function displayModalGenericError() {
750 jQuery.noConflict();
751 var jQueryRef = $ && typeof $.fn.modal == "function" ? $ : jQuery;
752 jQueryRef("#errorHandlingPlansModal").modal("show");
753}
754
755function clearCredentials() {
756 document.cookie = "token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
757 document.cookie =
758 "forgerock_id=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
759}
760
761function displayErrorLogin(data) {
762 $("#password, #email").addClass("input_error");
763 $("#password").siblings(".error_message").addClass("active_error-message");
764 $("#password, #email")
765 .siblings(".alert_message")
766 .removeClass("active_error-message");
767 $("#validation").addClass("button__gray_link");
768 $("#validation").addClass("cursor");
769}
770
771$("input").on("input", function () {
772 var input = $(this);
773
774 if (input.val().length) {
775 input.addClass("active");
776 input.siblings().addClass("labelactive");
777 if (!!document.querySelector(".active_error-message")) {
778 input.removeClass("input_error");
779 input.siblings(".error_message").removeClass("active_error-message");
780 $(this).siblings(".alert_message").removeClass("active_error-message");
781 }
782 } else {
783 input.removeClass("active");
784 input.siblings().removeClass("labelactive");
785 }
786});
787
788function blurVerificaEmail() {
789 var email = $("#email").val();
790 if (email == "") {
791 $(this).addClass("input_error");
792 $(this).siblings(".error_message").removeClass("active_error-message");
793 $(this).siblings(".alert_message").addClass("active_error-message");
794 return false;
795 } else {
796 $(this).removeClass("input_error");
797 $(this).siblings(".error_message").removeClass("active_error-message");
798 $(this).siblings(".alert_message").removeClass("active_error-message");
799 return true;
800 }
801}
802$("#email").blur(blurVerificaEmail);
803
804function blurVerificaPassword() {
805 var password = $("#password").val();
806 if (password == "") {
807 $(this).addClass("input_error");
808 $(this).siblings(".error_message").removeClass("active_error-message");
809 $(this).siblings(".alert_message").addClass("active_error-message");
810 return false;
811 } else {
812 return true;
813 }
814}
815$("#password").blur(blurVerificaPassword);
816
817$("input").keyup(function () {
818 if (blurVerificaEmail() && blurVerificaPassword()) {
819 $("#validation.button__gray_link").removeClass("button__gray_link");
820 $("#validation").removeClass("cursor");
821 } else if (!document.querySelector("#validation.button__gray_link")) {
822 $("#validation").addClass("button__gray_link");
823 $("#validation").addClass("cursor");
824 }
825});
826
827$(".pass-view").on("click", function () {
828 var passView = $(this).children("img"),
829 passViewOpen =
830 BASE_IMG +
831 "/documents/91224/96178/icon-unlocked-view.svg/d9eba4cf-3908-3561-6a54-45b87a9c0e50?t=1628100125445&version=1.0&imagePreview=1",
832 passViewClosed =
833 BASE_IMG +
834 "/documents/91224/96178/icon-blocked-view.svg/91eefe05-711c-818a-2b9e-49abd806b314?t=1628100125049&version=1.0&imagePreview=1",
835 pass = $(this).siblings("#password");
836
837 if (passView.attr("src") == passViewClosed) {
838 $(passView).attr("src", passViewOpen);
839 pass.attr("type", "text");
840 } else {
841 $(passView).attr("src", passViewClosed);
842 pass.attr("type", "password");
843 }
844});
845
846function validation() {
847 var email = $("#email").val();
848 var password = $("#password").val();
849 if (password !== "") {
850 login(email, password);
851 } else {
852 $("#password").addClass("input_error");
853 $("#password")
854 .siblings(".alert_message")
855 .addClass("active_error-message");
856 }
857 if (email == "" && password == "") {
858 $("#password, #email").addClass("input_error");
859 $("#password, #email")
860 .siblings(".alert_message")
861 .addClass("active_error-message");
862 } else if (email == "") {
863 $("#email").addClass("input_error");
864 $("#email").siblings(".alert_message").addClass("active_error-message");
865 } else {
866 $("#password, #email").addClass("input_error");
867 $("#password, #email")
868 .siblings(".error_message")
869 .addClass("active_error-message");
870 }
871 return false;
872}
873
874$("#validation").on("click", validation);
875
876function isLoggedIn() {
877 if (getCookie("token")) {
878 return true;
879 } else {
880 return false;
881 }
882}
883
884function clearCart(cartId, customerToken) {
885 const cleanCartMutation =
886 'mutation { clearCustomerCart( cartUid: "' + cartId + '") { status } }';
887
888 return $.ajax({
889 method: "POST",
890 url: API_ENDPOINT,
891 headers: {
892 Authorization: "Bearer " + customerToken,
893 "Content-Type": "application/json",
894 "Store": store,
895 },
896 dataType: "json",
897 data: JSON.stringify({
898 query: cleanCartMutation,
899 }),
900 success: function (data) {
901 return data;
902 },
903 error: function (error) {
904 return error;
905 },
906 });
907}
908
909function getCookie(cname) {
910 let name = cname + "=";
911 let decodedCookie = decodeURIComponent(document.cookie);
912 let ca = decodedCookie.split(";");
913
914 for (let i = 0; i < ca.length; i++) {
915 let c = ca[i];
916 while (c.charAt(0) == " ") {
917 c = c.substring(1);
918 }
919 if (c.indexOf(name) == 0) {
920 return c.substring(name.length, c.length);
921 }
922 }
923 return "";
924}
925
926$(function () {
927 const isFrToken = localStorage.getItem("sessionToken");
928
929 if (isFrToken) {
930 try {
931 const { refresh_token, expireDate, access_token } = JSON.parse(
932 localStorage.getItem("renewEntitlements")
933 );
934 getPlans()
935 handleRedirectUser(isFrToken, refresh_token, expireDate);
936 } catch (error) {
937 clearCredentials();
938 toggleLoader(false);
939 }
940 }
941});
942
943function toggleLoader(show, message = '') {
944 var jQueryRef = $ ? $ : jQuery;
945
946 if (show) {
947 jQueryRef("#loader-dtvgo").addClass("show");
948 jQueryRef('.loader-text').html(message);
949 jQueryRef('body').css("overflow", "hidden");
950 } else {
951 jQueryRef("#loader-dtvgo").removeClass("show");
952 jQueryRef('body').css("overflow", "auto");
953 }
954}
955 </script>