Help
RSS
API
Feed
Maltego
Contact
Domain > portal.arllabs.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-10-22
54.226.245.233
(
ClassC
)
2025-11-24
3.82.179.235
(
ClassC
)
Port 443
HTTP/1.1 200 OKAccess-Control-Allow-Headers: Content-Type, X-Auth-Token, OriginAccess-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETEAccess-Control-Allow-Origin: *Cache-Control: no-cache, privateContent-Type: text/html; charsetUTF-8Date: Mon, 24 Nov 2025 23:20:59 GMTSet-Cookie: AWSALBTGhIqanqWtusNUQ3rFtkxWxTo9aTY9f0iP0yu1VsPfo62rgCLsBPMIyDOZzUC13t536Jms6wSS13xBB8vhWnDw9RU0jQCQ5k4Mo5J3vim4PSxiFuXftA2KNpESBh8f8F+XcSpuH24CdV/2CtJ+ljDEWtNve7J9mg1yJE6R73v3PE8wAE2qgzU; ExpiresMon, 01 Dec 2025 23:20:59 GMT; Path/Set-Cookie: AWSALBTGCORShIqanqWtusNUQ3rFtkxWxTo9aTY9f0iP0yu1VsPfo62rgCLsBPMIyDOZzUC13t536Jms6wSS13xBB8vhWnDw9RU0jQCQ5k4Mo5J3vim4PSxiFuXftA2KNpESBh8f8F+XcSpuH24CdV/2CtJ+ljDEWtNve7J9mg1yJE6R73v3PE8wAE2qgzU; ExpiresMon, 01 Dec 2025 23:20:59 GMT; Path/; SameSiteNone; SecureSet-Cookie: XSRF-TOKENeyJpdiI6ImtoakFlNHo5bEIzeWdWNmxkRzlrZFE9PSIsInZhbHVlIjoiRW1ZaDJHRGpJNjliVU9kaHBtczh2RlBncWlsOUhwOUl6cVVadHUxb05ReVpmQnBMSFAxdjRqUVQyUkZvcUxEUiIsIm1hYyI6IjFkMTJhMDM5N2FjMGZjNjIxMmQzODU5YTkxMDY2YTk3YjQwMWMzZmZjMDY2YTViMzBjODE5NWE3MjFmY2QwOTUifQ%3D%3D; expiresTue, 25-Nov-2025 01:20:59 GMT; Max-Age7200; path/; secure; samesitelaxSet-Cookie: __Secure-sessioneyJpdiI6ImpGSWF4aHJ5ek1oSXNvbG9iTjRsYXc9PSIsInZhbHVlIjoiU0xCRnpLM1ZDS0RPMUF0eXZIcDViYnE2a1plTHVzblwvK09QWVVwbGtRWVhTeGwreGM2d1wvZndVYzhcLzdyeFBPUlBuaFBSMG9uUnJOMndwMnU3XC9lQWdJck5TaUR0NHpka1p1NGgxSEtEWHdDYXl6TzhEb3JmVDF1allXZ2tJNHYwIiwibWFjIjoiZmZiNWIyN2M5NTIwOGZiYTE5YTRmNzc5MDNjYThmMThmNTUyYWVhMzAyNjI5ZmQ4Mzk1YWVhZDc2ZjI2YjcxZCJ9; expiresTue, 25-Nov-2025 01:20:59 GMT; Max-Age7200; path/; secure; httponly; samesitelaxVary: Accept-EncodingX-Powered-By: Tadabase.ioX-Proxy-By: ssl1X-Tb-Server: SITES-CUSTOM-1-ATransfer-Encoding: chunked !DOCTYPE html>html langen data-ng-appapp>head> meta charsetutf-8 /> title >Portal - Home/title> meta http-equivX-UA-Compatible contentIEedge> meta contentwidthdevice-width, initial-scale1 nameviewport/> link hrefhttps://d10w0xb1xxwn2r.cloudfront.net/assets/app/vendor/vendor-1670221438914.css relstylesheet typetext/css /> link hrefhttps://d10w0xb1xxwn2r.cloudfront.net/assets/app/script/script-1758201929864.css relstylesheet typetext/css /> link hrefhttps://d10w0xb1xxwn2r.cloudfront.net/common/css/component-designs.css relstylesheet typetext/css /> link relstylesheet hrefhttps://d6by4xxhyiw7a.cloudfront.net/css/custom-progressbar-style.min.css/>link relstylesheet hrefhttps://bossanova.uk/jspreadsheet/v4/jexcel.css/>link relstylesheet hrefhttps://jsuites.net/v4/jsuites.css/>link relstylesheet hrefhttps://d6by4xxhyiw7a.cloudfront.net/css/tb-checkbox-effects.min.css/>link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/@loadingio/loading-bar@0.1.1/dist/loading-bar.min.css/>link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/pivottable/2.23.0/pivot.min.css/>link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/tom-select@2.4.1/dist/css/tom-select.css/>link relstylesheet hrefhttps://d10w0xb1xxwn2r.cloudfront.net/2ejlZ5BNo9/1724158036-tb-loaders-min.css/>script srchttps://cdn.ably.io/lib/ably.min-2.js>/script>script src//cdn.jsdelivr.net/npm/sweetalert2@11>/script> script> const ably new Ably.Realtime(YhQ_JQ.KQ2ggA:7VslJ8xb6r8seXRXEhs9C3OCwKhQX6UYsTZsZ-ZtUVM);/script>style>.table-hover>tbody>tr:hover { background-color: #ffff99;}/style>link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/pivottable/2.23.0/pivot.min.css integritysha512-BDStKWno6Ga+5cOFT9BUnl9erQFzfj+Qmr5MDnuGqTQ/QYDO1LPdonnF6V6lBO6JI13wg29/XmPsufxmCJ8TvQ crossoriginanonymous referrerpolicyno-referrer />style>#root-loading-icon div { width:120px; background-size: contain; -webkit-animation: pulse 1s infinite ease-in-out alternate; animation: pulse 1s infinite ease-in-out alternate; }@-webkit-keyframes #root-loading-icon div { from { transform: scale(0.8); } to { transform: scale(1.2); }}@keyframes #root-loading-icon div { from { transform: scale(0.8); } to { transform: scale(1.2); }}.navbar button.navbar-close { display:none;}/* @media (max-width: 844px) { .app { width: 100%; margin-left: 0 !important; } .x-menu-style-vertical { position: relative; margin-top: 0; width: 100%; height: 100%; } .x-menu-style-vertical .navbar { background-color: transparent; overflow: visible !important; } .navbar-toggle { display: block; position: absolute; top: -50px; right: 0; z-index: 1034; } .navbar-collapse.collapse { display: none !important; } .navbar-collapse.collapse { position: fixed!important; top: 0; left: auto!important; right: 0; z-index: 9999; transition: all 0.5s ease-in-out; } .navbar-collapse.collapse.in { display: block !important; overflow: auto !important; height: 95vh !important; background: #fff; display: block!important; flex-direction: column; overflow: scroll; width: 450px!important; padding-left: 20px!important; padding-right: 20px!important; height: 100vh!important; top: 0px!important; width: 100% !important; left: 0px !important; } .navbar button.navbar-close { position: absolute; top: 15px; right: 10px; border: 0; background: none; font-size: 30px; color: #00d3c9; display: block; }} *//style>script srchttps://cdn.jsdelivr.net/npm/@splidejs/splide@4.1.4/dist/js/splide.min.js>/script>link hrefhttps://cdn.jsdelivr.net/npm/@splidejs/splide@4.1.4/dist/css/splide.min.css relstylesheet>link hrefhttps://www.celestahealth.com/wp-content/plugins/celestahealth/assets/js/jquery.steps/jquery.steps.css relstylesheet>link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/css/bootstrap-datepicker.min.css>link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/css/bootstrap-select.min.css>script srchttps://unpkg.com/popper.js@1>/script>script srchttps://unpkg.com/tippy.js@5>/script>script srchttps://cdn.srv.whereby.com/embed/v1.js typemodule>/script>script> // Dynamically load the Material Icons library (function() { var link document.createElement(link); link.href https://fonts.googleapis.com/icon?familyMaterial+Icons; link.rel stylesheet; document.head.appendChild(link); })();/script>script srchttps://cdn.jsdelivr.net/npm/apexcharts>/script>script srchttps://cdn.jsdelivr.net/npm/moment>/script>script srchttps://cdn.jsdelivr.net/npm/moment@2.29.4/min/moment.min.js>/script> base hrefhttps://portal.arllabs.com/> script typetext/javascript>window.base_url https://portal.arllabs.com/;/script> /head>body ng-controllerAppAppCtrl> toaster-container toaster-options{position-class: toast-top-right, close-button:true}>/toaster-container> div idroot-custom-loading-icon classhide>div >/div>/div> div idroot-loading-icon ng-ifrootLoadingCounter > 0>div >/div>/div> div classcontainer-fluid class1container-fluid> div classapp idapp ui-view>/div> /div> script srchttps://upload-widget.cloudinary.com/global/all.js typetext/javascript>/script> script srchttps://maps.googleapis.com/maps/api/js?keyAIzaSyByjIXK2_OHN-r7sxlFcrUUMfxNIv7rSl0&librariesplaces async defer>/script> script typetext/javascript> if (typeof(window.location.hash.startsWith) function && window.location.hash.startsWith(#!)) { window.location.href +window.location.hash.replace(#!/, ); } /script> script typetext/javascript srchttps://d10w0xb1xxwn2r.cloudfront.net/common/tinymce/tinymce.min.js>/script> script typetext/javascript srchttps://d10w0xb1xxwn2r.cloudfront.net/common/sysend/sysend.js>/script> script srchttps://js.stripe.com/v3/>/script> script srchttps://js.stripe.com/terminal/v1/>/script> script typetext/javascript srchttps://d10w0xb1xxwn2r.cloudfront.net/assets/app/vendor/vendor-1670221438914.js>/script> script typetext/javascript srchttps://d10w0xb1xxwn2r.cloudfront.net/assets/app/script/script-1758201929864.js>/script> script typetext/javascript>var __apiId__ GDN19lRNeq;var __appName__ Celesta DataDrive LifeApp;var __appInfo__ {timezone:America\/New_York,dateFormat:MM\/dd\/yyyy,timeFormat:hh:mm a,url:https:\/\/portal.arllabs.com\/};angular.module(app).constant(CSRF_TOKEN, MhhUSMLHaXplDIby2ZyAsoeWD3ozsHlvsrEeuWdO);angular.module(app).constant(SITE_MAIN_URL, https://portal.arllabs.com);angular.module(app).constant(AppURL, (function (SITE_URL) {var resource https://portal.arllabs.com/;return {Main: ,domain: portal.arllabs.com,SITE: resource,URL: https://portal.arllabs.com/,SsoAuthURL: resource + app/GDN19lRNeq/sso/login/{provider},Upload: resource + app/uploads,PageURI: resource + app/app_id/pages/page_id.html,API: resource + webapi/v1/app/}})());angular.module(app).constant(APP_SETTING, {currency:{val:USD,symbol:$,text:United States Dollar (USD)},{val:CAD,symbol:$,text:Canadian Dollar (CAD)},{val:EUR,symbol:\u20ac,text:Euro (EUR)},{val:GBP,symbol:\u00a3,text:British Pound Sterling (GBP)},{val:JPY,symbol:\u00a5,text:Japanese Yen (JPY)},{val:CHF,symbol:Fr.,text:Swiss Franc (CHF)},{val:AUD,symbol:$,text:Australian Dollar (AUD)},{val:NZD,symbol:$,text:New Zealand Dollar (NZD)},{val:ZAR,symbol:R,text:South African Rand (ZAR)},{val:TRY,symbol:\u20ba,text:Turkish Lira (TRY)},{val:BGN,symbol:\u043b\u0432,text:Bulgarian Lev (BGN)},{val:PEN,symbol:S\/,text:Peruvian Sol (PEN)},phoneFormats:(999) 999-9999,999.999.9999,(99) 999 9999,(99) 999 99999,(999) 99999-999,+99 999 999 9999,+99 (0)999 999 9999,99 9999 9999,9999 999 999,(999) 9999-9999,99 99999 9999,homePageId:L5MjKxr0kq,variables:{value:null,unique_key:null}});/script> script srchttps://d10w0xb1xxwn2r.cloudfront.net/files/apps/GDN19lRNeq/app-data-1764015231292-9a5ad49e6bde9e779e63b3927024527f85da30e4.js>/script> script srchttps://cdn.jsdelivr.net/npm/sweetalert2@11 typetext/javascript>/script>script srchttps://bossanova.uk/jspreadsheet/v4/jexcel.js typetext/javascript>/script>script srchttps://jsuites.net/v4/jsuites.js typetext/javascript>/script>script srchttps://cdn.jsdelivr.net/npm/canvas-confetti@1.6.0/dist/confetti.browser.min.js typetext/javascript>/script>script srchttps://cdn.jsdelivr.net/npm/apexcharts typetext/javascript>/script>script srchttps://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js typetext/javascript>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/moment-range/4.0.1/moment-range.js typetext/javascript>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/jquery-circle-progress/1.2.2/circle-progress.min.js typetext/javascript>/script>script srchttps://d6by4xxhyiw7a.cloudfront.net/js/FormStepBlocks-v4.min.js typetext/javascript>/script>script srchttps://rawgit.com/kimmobrunfeldt/progressbar.js/1.0.0/dist/progressbar.js typetext/javascript>/script>script srchttps://cdn.jsdelivr.net/npm/@loadingio/loading-bar@0.1.1/dist/loading-bar.min.js typetext/javascript>/script>script srchttps://d3js.org/d3.v5.min.js typetext/javascript>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/pivottable/2.23.0/pivot.min.js typetext/javascript>/script>script srchttps://cdn.jsdelivr.net/npm/tom-select@2.4.1/dist/js/tom-select.complete.min.js typetext/javascript>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.9.3/html2pdf.bundle.min.js typetext/javascript>/script> script srchttps://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/pivottable/2.23.0/pivot.min.js integritysha512-XgJh9jgd6gAHu9PcRBBAp0Hda8Tg87zi09Q2639t0tQpFFQhGpeCgaiEFji36Ozijjx9agZxB0w53edOFGCQ0g crossoriginanonymous referrerpolicyno-referrer>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.9/xlsx.min.js integritysha512-Bkf3qaV86NxX+7MyZnLPWNt0ZI7/OloMlRo8z8KPIEUXssbVwB1E0bWVeCvYHjnSPwh4uuqDryUnRdcUw6FoTg crossoriginanonymous>/script>script srchttps://www.celestahealth.com/wp-content/plugins/celestahealth/assets/js/jquery.steps/jquery.steps.js>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/popper.js/1.0.4/popper.js>/script>script srchttps://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/js/bootstrap-select.min.js>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/jspdf/2.3.1/jspdf.umd.min.js>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.5.0-beta4/html2canvas.min.js>/script>script> jQuery(function($) { window.jsPDF window.jspdf.jsPDF; $.fn.videoRecorder function(options) { // Default settings const settings $.extend({ onVideoStart: null, onVideoStop: null }, options ); // Add a new method to stop the video recording stream // Add a new method to stop the video recording stream $.fn.stopVideoRecording function() { this.find(.stop).prop(disabled, true).trigger(click); }; $.fn.setVideoActive function(active) { this.toggleClass(active, active); }; return this.each(function() { const $container $(this); let mediaRecorder; let recordedBlobs ; let isRecordingStarted false; let isRecordingStopped false; const $startButton jQuery(.start, $container); const $pauseButton jQuery(.pause, $container); const $resumeButton jQuery(.resume, $container); const $stopButton jQuery(.stop, $container); const $videoElement jQuery(video, $container); $startButton.on(click, () > { console.log(start recording); $startButton.prop(disabled, true).hide(); //$startButton.prop(disabled, true).hide().find(span).text(Restart); $stopButton.prop(disabled, false).show(); $pauseButton.prop(disabled, false).show(); startRecording(); }); $pauseButton.on(click, () > { console.log(pause recording); $pauseButton.prop(disabled, true).hide(); $resumeButton.prop(disabled, false).show(); $stopButton.prop(disabled, false).show(); mediaRecorder.pause(); }); $resumeButton.on(click, () > { console.log(resume recording); $resumeButton.prop(disabled, true).hide(); $pauseButton.prop(disabled, false).show(); $stopButton.prop(disabled, false).show(); mediaRecorder.resume(); }); $stopButton.on(click, () > { console.log(stop recording); $stopButton.prop(disabled, true).hide(); //$startButton.prop(disabled, false).show(); $resumeButton.prop(disabled, true).hide(); $pauseButton.prop(disabled, true).hide(); mediaRecorder.stop(); }); async function startRecording() { if (isRecordingStarted) { return; } isRecordingStarted true; isRecordingStopped false; recordedBlobs ; let stream null; try { stream await navigator.mediaDevices.getUserMedia({ audio: true, video: { advanced: { width: { exact: 2560 } }, { width: { exact: 1920 } }, { width: { exact: 1280 } }, { width: { exact: 1024 } }, { width: { exact: 900 } }, { width: { exact: 800 } }, { width: { exact: 640 } }, { width: { exact: 320 } } } }); } catch (e) { console.error(navigator.getUserMedia error:, e); return; } console.log(stream, stream) $container.setVideoActive(true); $container.trigger(videoRecordingStart); if (typeof settings.onVideoStart function) { settings.onVideoStart($container); } $videoElement0.src ; $videoElement0.srcObject stream; mediaRecorder new MediaRecorder(stream); mediaRecorder.onstop (event) > { // console.log(Recorder stopped: , event); $videoElement0.srcObject null; const superBuffer new Blob(recordedBlobs, { type: video/webm }); $videoElement0.src window.URL.createObjectURL(superBuffer); $container.setVideoActive(false); if (typeof settings.onVideoStop function) { settings.onVideoStop($container, superBuffer); $container.trigger(videoRecordingStopped, superBuffer); isRecordingStopped true; } recordedBlobs ; if (stream) { stream.getTracks().forEach((track) > track.stop()); } mediaRecorder null; }; mediaRecorder.ondataavailable handleDataAvailable; mediaRecorder.start(1000); } function handleDataAvailable(event) { if (isRecordingStarted && event.data && event.data.size > 0) { console.log(event.data, event.data.size) recordedBlobs.push(event.data); } } // Add a custom event to signal video recording stopped $container.on(videoRecordingStopped, function(blob) { isRecordingStarted false; }); }); }; $.fn.mdToHtml function(str) { var tempStr str; while(tempStr.indexOf(**) ! -1) { var firstPos tempStr.indexOf(**); var nextPos tempStr.indexOf(**,firstPos + 2); if(nextPos ! -1) { var innerTxt tempStr.substring(firstPos + 2,nextPos); var strongified strong> + innerTxt + /strong>; tempStr tempStr.substring(0,firstPos) + strongified + tempStr.substring(nextPos + 2,tempStr.length); //get rid of unclosed ** } else { tempStr tempStr.replace(**,); } } while(tempStr.indexOf(*) ! -1) { var firstPos tempStr.indexOf(*); var nextPos tempStr.indexOf(*,firstPos + 1); if(nextPos ! -1) { var innerTxt tempStr.substring(firstPos + 1,nextPos); var italicized i> + innerTxt + /i>; tempStr tempStr.substring(0,firstPos) + italicized + tempStr.substring(nextPos + 2,tempStr.length); //get rid of unclosed * } else { tempStr tempStr.replace(*,); } } return tempStr; }; $.fn.hasAttr function(name) { return this.attr(name) ! undefined; }; $.fn.serializeObject function() { var o {}; var a this.serializeArray(); $.each(a, function() { if (othis.name) { if (!othis.name.push) { othis.name othis.name; } othis.name.push(this.value || ); } else { othis.name this.value || ; } }); return o; } $.queryParam function(url, param, paramVal) { return setQueryParameter(url, param, paramVal); }; $.getQueryParam function(url, param) { const urlParams new URLSearchParams(url); const val urlParams.get(param); if (val ! null) { return val; } return ; // Default to the first step if no valid step parameter is found } function setQueryParameter(url, param, paramVal) { var parts url.split(?); var baseUrl parts0; var oldQueryString parts1; var newParameters ; if (oldQueryString) { var oldParameters oldQueryString.split(&); for (var i 0; i oldParameters.length; i++) { if (oldParametersi.split()0 ! param) { newParameters.push(oldParametersi); } } } if (paramVal ! && paramVal ! null && typeof paramVal ! undefined) { newParameters.push(param + + encodeURI(paramVal)); } if (newParameters.length > 0) { return baseUrl + ? + newParameters.join(&); } else { return baseUrl; } }});/script>script typetext/javascript> // Function to refresh Tadabase user token function refreshToken() { let formData new FormData(); formData.append(action, tb_refresh_token); const ajaxRequest jQuery.ajax({ type: POST, url: https://www.celestahealth.com/wp-admin/admin-ajax.php, data: formData, processData: false, contentType: false, success: function(response) { if (response) { try { var json JSON.stringify(response); if (json && typeof json object) { localStorage.setItem(tb-apiToken_ + TB.getAppId(), json); } } catch (e) { } } }, error: function() { //localStorage.removeItem(tb-apiToken_ + TB.getAppId()); //localStorage.removeItem(tb-user_ + TB.getAppId()); }, }); } if (/^www\.celestahealth\.com$|^celestahealth\.com$/.test(window.location.hostname)) { refreshToken(); // Call the refresh function every 9 minutes (token lifespan is 10 minutes) setInterval(refreshToken, 9 * 60 * 1000); } /*** * Healper Functions ***/ function getAllFields(obj, k) { let fields ; function extractFields(data, keyName) { for (const key in data) { if (key keyName) { fields.push(...datakey); } else if (typeof datakey object && datakey ! null) { extractFields(datakey, keyName); } } } extractFields(obj, k); return fields; }; function filterRecord(item, fields) { let res {}; resid item.id; fields.forEach((field) > { const slug getNestedPath(field, slug); if (checkNested(item, slug)) { let key slug; let value itemkey; if (checkNested(item, key + _val)) { value itemkey + _val; } switch (getNestedPath(field, type)) { case Name: if (!value) { value {}; } const nameParts getNestedPath(value, title), getNestedPath(value, first_name), getNestedPath(value, middle_name), getNestedPath(value, last_name), ; value nameParts.filter(Boolean).join( ); break; case Address: if (!value) { value {}; } const addressParts getNestedPath(value, address), getNestedPath(value, address2), getNestedPath(value, city), getNestedPath(value, state), getNestedPath(value, zip), getNestedPath(value, country), getNestedPath(value, lat), getNestedPath(value, lng), ; value addressParts.filter(Boolean).join(,); break; case Date Range: if (!value) { value {}; } const dateParts getNestedPath(value, start), getNestedPath(value, end); value dateParts.filter(Boolean).join( - ); break; case Currency: if (value ! ) { currencySymbol _tb.currencySymbol( getNestedPath(field, options.currencyType, USD) ); currencyFormat getNestedPath(field, options.currencyFormat); value currencyFormatSuffix ? value+currencySymbol : currencySymbol+value; } break; case Image: value getNestedPath(value, src); break; case Files: if(Array.isArray(value)) { value $.map(value, function(item) { return getNestedPath(item, url); }).join(,); } break; case Multi-Select: case Checkbox: case Radio: case Select: case Connection: case Join: if (Array.isArray(value)) { value value.filter(Boolean).join(,); } if (typeof value object) { value Object.values(value).filter(Boolean).join(,); } break; default: break; } reskey value; } }); if (Object.keys(res).length ! 0) { return Object.keys(res).reduce((result, key) > { const val reskey; resultkey Array.isArray(val) ? JSON.stringify(val) : val; return result; }, {}); } return null; } function groupByItems(items, groupBy) { let returnObj {}; function processItems(items, groupBy, obj, index) { items.forEach(item > { let key itemgroupByindex; // Get the value for the current groupBy key objkey objkey || {}; if (index groupBy.length - 1) { // If at the last level, assign item directly objkeyObject.keys(objkey).length item; // Assigning the index } else { // Otherwise, recurse to the next level processItems(item, groupBy, objkey, index + 1); } }); } processItems(items, groupBy, returnObj, 0); return returnObj; } const getValue (data, path) > _tb.arrLastVal(Object.values(getNestedPath(data, path, {})))_value || 0; const countValues (data, k) > { if (!data || typeof data ! object) return 0; k (k ! undefined) ? k : _value; return Object.values(data).reduce((sum, entry) > sum + (entryk || 0), 0); }; //windowmoment-range.extendMoment(moment); function getLocalStorageItem(key) { return localStorage.getItem(key) || ; } /****** End Helper Functions *******/ /script>script>//Timezone ConversionTB.render(any, function(data) { setTimeout(function(){ const $injector angular.element(#app).injector(); const userId $injector.get(App)?.get(appUserLogin)?.id || ; if(userId ) return; if(!dataTable,detail.includes(data.type)) return; function getAllFields(obj, keys fields, columns) { let fields ; function extractFields(data, keyNames) { for (const key in data) { if (keyNames.includes(key)) { fields.push(...datakey); } else if (typeof datakey object && datakey ! null) { extractFields(datakey, keyNames); } } } extractFields(obj, keys); return fields; } const momentDateFormats { MM/dd/yyyy : MM/DD/YYYY, MMM dd, yyyy : MMM DD, YYYY, dd/MM/yyyy : DD/MM/YYYY, dd.MM.yyyy : DD.MM.YYYY, hh:mm a : hh:mm A, HH:mm : HH:mm }; const getTimeZone TB.getAppTimeZone(); const getDateFormat TB.getAppDateFormat(); const getTimeFormat TB.getAppTimeFormat(); const currentDateFormat momentDateFormatsgetDateFormat; const currentTimeFormat momentDateFormatsgetTimeFormat; const userTimeZone window.userTimezone || getTimeZone; const fields getAllFields(jQuery(data.ele).data(options)); // console.log(fields, userTimeZone) fields.map((f)>{ const hasCheckboxColumn jQuery(th.tb-select-row, data.ele).length > 0; const dataIndex fields.findIndex((field)> field.slug f.slug) + (hasCheckboxColumn ? 1 : 0); console.log({f, dataIndex}) switch(f.type) { case Date: jQuery(tbody tr, .t-list-row, .af-detail, data.ele).each(function () { const isListRow jQuery(this).hasClass(t-list-row) || jQuery(this).hasClass(af-detail); const selector isListRow ? `#field_block_${f.slug} af-data-table-field span` : td:eq( + dataIndex + ); const dateTd jQuery(selector, this); if (dateTd.text().trim() ) return; const parsedDate moment(dateTd.text(), currentDateFormat); const userTimezoneDate parsedDate.tz(userTimeZone).format(currentDateFormat); (userTimezoneDate ! Invalid date) && dateTd.text(userTimezoneDate); }); break; case Time: jQuery(tbody tr, .t-list-row, .af-detail, data.ele).each(function () { const isListRow jQuery(this).hasClass(t-list-row) || jQuery(this).hasClass(af-detail); const selector isListRow ? `#field_block_${f.slug} af-data-table-field span` : td:eq( + dataIndex + ); const timeTd jQuery(selector, this); if (timeTd.text().trim() ) return; const parsedDate moment(timeTd.text(), currentTimeFormat); const userTimezoneTime parsedDate.tz(userTimeZone).format(currentTimeFormat); (userTimezoneTime ! Invalid date) && timeTd.text(userTimezoneTime); }); break; case Date/Time: jQuery(tbody tr, .t-list-row, .af-detail, data.ele).each(function () { const isListRow jQuery(this).hasClass(t-list-row) || jQuery(this).hasClass(af-detail); const selector isListRow ? `#field_block_${f.slug} af-data-table-field span` : td:eq( + dataIndex + ); const dateTimeTd jQuery(selector, this); console.log({selector,dateTimeTd}) if (dateTimeTd.text().trim() ) return; const parsedDate moment(dateTimeTd.text(), currentDateFormat + + currentTimeFormat); const userTimezoneDateTime parsedDate.tz(userTimeZone).format(currentDateFormat + + currentTimeFormat); (userTimezoneDateTime ! Invalid date) && dateTimeTd.text(userTimezoneDateTime); }); break; case Calendar: jQuery(tbody tr, .t-list-row, .af-detail, data.ele).each(function () { const isListRow jQuery(this).hasClass(t-list-row) || jQuery(this).hasClass(af-detail); const selector isListRow ? `#field_block_${f.slug} af-data-table-field span` : td:eq( + dataIndex + ); const calendarTd jQuery(selector, this); if (calendarTd.text().trim() ) return; const startDateString, endDateString calendarTd.text().split( to ); const parsedStartDate moment(startDateString, currentDateFormat); const parsedEndDate moment(endDateString, currentDateFormat); const userTimezoneCalendarStartDate parsedStartDate.tz(userTimeZone).format(currentDateFormat); const userTimezoneCalendarEndDate parsedEndDate.tz(userTimeZone).format(currentDateFormat); (userTimezoneCalendarStartDate ! Invalid date && userTimezoneCalendarEndDate ! Invalid date) && calendarTd.text(userTimezoneCalendarStartDate + to + userTimezoneCalendarEndDate); }); break; default: break; } }); })}); /script>script>//Show Timzone Popup and Update TimezonejQuery(function($) { $.fn.showTimezonePopup function(userId) { if(!(localStorage.getItem(user-timezone-popup-shown) || false)) { localStorage.setItem(user-timezone-popup-shown, true); Swal.fire({ title: Do you want to set your timezone?, icon: question, showCancelButton: true, confirmButtonColor: #3085d6, cancelButtonColor: #d33, confirmButtonText: Yes }).then(async (result) > { if (result.isConfirmed) { TB.showLoading(); TB.triggerPipe(eyJpdiI6IjNqazg5TzVmcDdlYVwvYUIzOWJSd1RBPT0iLCJ2YWx1ZSI6IlRoYVd5NzNEMnZWck9lOXFaSHdhanRMaExzUHh3NlVkR0NDOUNtbGxwYzA9IiwibWFjIjoiYWIwYTljNzBjZjMxOGQ1OTJlOTVmZTk1YTZmMjM1NDgxMDk2OTY0ODRhZjJmNjRkZGEwNjk2MjljYTczNGQ1ZiJ9, { tableId: 5m9N0nbjzq // User Timezones }, function(type, response, xhrRespone) { TB.hideLoading(); console.log(pipe response, type, response, xhrRespone); items getNestedPath(response, items, ); var timezones items.reduce((acc, item) > { accitem.field_3057 item.field_3057; return acc; }, {}); Swal.fire({ title: Select Timezone, input: select, inputOptions: timezones, inputPlaceholder: Select timezone, showCancelButton: true, inputValidator: (timezone) > { $().setUserTimezone(userId, timezone); console.log({timezone}) } }); } ); } }); } } $.fn.setUserTimezone function(userId, timezone) { if(userId){ TB.triggerPipe(eyJpdiI6IkJMKytkdENTdldhcFErblwvNXhCTUNRPT0iLCJ2YWx1ZSI6IlwvZFV4ck5GdXNUMEZnckxMQ2FBbVM5cE1TNllPRzNib0YxZFBGS1o0Z3d3PSIsIm1hYyI6IjI3Yjk5ZjkzZDVlY2Y4ODcxZDRiOTNmZTQxZDkxNTZhYjk3YTQwOTI1YTgwN2M4ZWNmNjBiYzRkN2M3ZWQ4NDcifQ, { tableId: 4MXQJdrZ6v,// Table Users field_id: field_3059, // Field User TimeZone field_val: timezone, recordId: userId }, function(type, response, xhrRespone) { console.log(pipe response, type, response, xhrRespone); } ); }}});/script>!--script srchttps://www.celestahealth.com/wp-content/plugins/celestahealth/assets/js/testproctor.js>/script>--> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]