CINXE.COM

A Hindustan Times Group Website - One Network. One Account - java

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="icon" href="https://images.livemint.com/sso/ico/ht_favi.ico"/> <title>A Hindustan Times Group Website - One Network. One Account - java</title> <!-- page styles --> <link href="/css/mobile/v2_login/login_journey_v1.css?v0.2" rel="stylesheet"> <link href="/css/mobile/v2_login/accountDelete.css" rel="stylesheet"> <script src="/js/mobile/common.js?v=1.28"></script> <script src="https://images.livemint.com/sso/staging/lm/login-method.js"></script> <script src="https://accounts.google.com/gsi/client"></script> <script src="/js/mobile/utility.js?v1.30"></script> <script src="/js/mobile/renderer.js?v0.5"></script> <script src="/js/mobile/jquery_lib.js?0.1"></script> <script src="https://images.livemint.com/subscription/failure/failureSuccessCallLogs.js"></script> <script> <!-- For login loop --> const REFERER = 'ht'; let redirectUrl = 'https://www.hindustantimes.com'; const CAPTCHA_SITE_KEY = '6Le2EZshAAAAAOEk9CbFbxI8bVNjyBhHq2vOrKu-'; const SSO_URL = 'https://accounts.hindustantimes.com'; const webAppleID = 'com.ht.htiphoneenglishapp.service'; const linkReffCode = 'HT'; const mainDomainReffCode = 'ht'; const urlParams = new URLSearchParams(window.location.search); function scriptInjector(scriptSource){ const scriptElement = document.createElement('script'); scriptElement.src = scriptSource; document.head.appendChild(scriptElement); } function asyncScriptInjector(scriptSource, callback, delay = 100) { function injectScript(){ const scriptElement = document.createElement('script'); scriptElement.type = 'text/javascript'; if(scriptElement.readyState){ scriptElement.onreadystatechange = function () { if (scriptElement.readyState === 'loaded' || scriptElement.readyState === 'complete') { scriptElement.onreadystatechange = null; if (callback) callback(); } }; }else{ scriptElement.onload = function () { if (callback) callback(); }; } scriptElement.src = scriptSource; scriptElement.defer = true; document.head.appendChild(scriptElement); } if(!delay){ injectScript(); }else{ setTimeout(() => { injectScript(); }, delay); } } scriptInjector("/js/plugin/googleInlineLogin.js?v=1.0"); asyncScriptInjector("https://edge-auth.microsoft.com/js/ms_auth_client.min.js"); asyncScriptInjector("/js/microsoft-login.js?v1.1"); window.addEventListener('load', function(){ asyncScriptInjector("/js/mobile/headerV1.js?v0.4"); asyncScriptInjector("/js/mobile/login.js?v0.8"); asyncScriptInjector("/js/mobile/deleteAccount.js"); asyncScriptInjector(`https://www.google.com/recaptcha/api.js?render=6Le2EZshAAAAAOEk9CbFbxI8bVNjyBhHq2vOrKu-`); asyncScriptInjector("/js/mobile/validation.js?v0.7"); asyncScriptInjector("/js/mobile/otpScreen.js?v0.7"); asyncScriptInjector(`/js/domains/domains-prod.js?v1.0.5`); asyncScriptInjector("/js/analytics.js?v0.2"); asyncScriptInjector("/js/mobile/custom.js?v1.43"); asyncScriptInjector(`https://images.livemint.com/sso/loginDomains.js?1,742,130,013,759`); }); </script> <link href="/css/mobile/commonstyle.css?v=1.0.3" rel="stylesheet"> <link href="/css/mobile/style_ht.css?v=0.1" rel="stylesheet"> </head> <body> <header class="header"> <div class="container"> <div class="logo"> <a class="logo" alt="" title=""><img src="https://images.livemint.com/sso/prod/logo/ht.svg" alt="ht"></a> </div> </div> </header> <!-- Snowplow Script --> <script type="text/javascript" async> var ht_fp_cookie = ""; var snowplowCollectorUrl = "dap.hindustantimes.com"; var configObject = { "appId": "sso", "collectorHost":snowplowCollectorUrl , "pageViewRequired": true, "pagePingRequired": false, "syncRequired": true, "userIdCookie": "_ht_clientid", "pltRequired": false, "existingImpressionCapture": true, "existingLinkClickCapture": true, "webEngageTokenRequired": true }; try{ (function(p, l, o, w, i, k, n, g) { if (!p[i]) { p.GlobalSnowplowNamespace = p.GlobalSnowplowNamespace || []; p.GlobalSnowplowNamespace.push(i); p[i] = function() { (p[i].q = p[i].q || []).push(arguments); }; p[i].q = p[i].q || []; n = l.createElement(o); g = l.getElementsByTagName(o)[0]; n.async = 1; n.src = w; g.parentNode.insertBefore(n, g); n.onload = function() { window.dapTracker = new window.dapDataTracker(); dapTracker.init(k); }}}(window, document, 'script', "https://analytics.htmedia.in/analytics-js/tracker.js", 'snowplow', configObject)); }catch(e){ failureCall("DAP","script_not_loaded","script not loaded",e.message,"","",""); } var snowplowCollectorUrl = "dap.hindustantimes.com"; setTimeout(()=>{ ht_fp_cookie = getCookieSSO('_ht_fp')? getCookieSSO('_ht_fp'):""; },2000); </script> <!-- Moengage Script --> <!-- Moengage Script END --> <script> const urlSearchParams = new URLSearchParams(window.location.search); const params = Object.fromEntries(urlSearchParams.entries()); setTimeout(() =>{ if(params.client_id){ verifyPartner(); }else if(params.renderHelp_Support){ renderHelpSupport(); }else if(params.type == "deleteAccount" && (params.mode == '' || params.mode == undefined)){ renderDeleteReasonPage(); }else if(params.type == "deleteAccount" && (params.mode == 'email' || params.mode == 'mobile')){ appleDeleteAccount(); }else{ renderPartnerLoginPage(); } },500) /* * Verify the Partner */ function verifyPartner() { $('.loading').show(); let clientId = params.client_id; let apiKey = params.client_secret; let url = '/partner/validate'; fetch(url, { method: 'GET', headers: { 'Content-Type': 'application/json', 'clientId': clientId, 'apiKey': apiKey } }) .then(response => response.json()) .then(response => { if(response.success){ var token = getCookieSSO("token") setCookie('domainReffUrl', response.data.partner_id, 10); if(token){ partnerRedirect(token); } else{ renderPartnerLoginPage(); } } else { // Partner not verified console.log("failed to verify partner"); document.querySelector('.mainArea').style.display = 'none'; document.querySelector('.errorPage').style.display = 'block'; } $('.loading').hide(); }) .catch(error => { //TODO : need to check hide and show console.log("error in partner verification", error); document.querySelector('.mainArea').style.display = 'none'; document.querySelector('.errorPage').style.display = 'block'; $('.loading').hide(); }); } /* * Generate the Partner Oauth token change */ function partnerRedirect(token) { let clientId = params.client_id; let apiKey = params.client_secret; let redirectUrl = params.redirect_uri; let state = params.state; let url = '/partner/oAuth/login'+"?redirectUrl="+redirectUrl+"&clientId="+clientId+"&apiKey="+apiKey+"&Authorization="+token+"&state="+state; window.location.href=url; } </script><section class="pagebg"> <div class="content-wrap"> <div class="container"> <!-- Main Area div srarts here --> <div class="errorPage" style = "display:none;"> <h2 class="heading"><br/></h2> <div class="white-box"> <div class="white-box-in help ctus"> <div class="flex-type"> <div id="error"> <span class="Acces-blocked-Authorization-Error"> Acces blocked <br/> Authorization Error </span> <span class="error-message-2"> The OAuth client was not found. <br/> Error 401 : invalid_client </span> </div> </div> </div> </div> </div> <div class="mainArea clearfix"> <div id="password" class="rightArea"> <div class="da_wrapper" id="deleteAccount" style="display:none"> <h2 class="da_head">Delete Account</h2> <div class="da_whiteBox"> <span class="da_infoIcon"> <img src="/images/mobile/info.png" class="img-fluid" alt=""> </span> <p class="da_heading">Deleting account will do the following.</p> <ul class="da_deleteOptions"> <li><span class="da_remove"><img src="/images/mobile/remove.png" class="img-fluid" alt=""></span> Account will do the following.</li> <li><span class="da_remove"><img src="/images/mobile/remove.png" class="img-fluid" alt=""></span>Delete your account information</li> </ul> <p><strong>Please read this carefully before you proceed</strong></p> <p>Hi Reader, We're sorry to see you go! Deleting your account will erase all your saved information and will no longer have access to your account. </p> <p>You will also miss out on the personalized news updates from us and can鈥檛 access our below properties as well.</p> <ul class="da_websiteList"> <li> <span class="da_logoWrap"> <img src="/images/mobile/htLogo.png" class="img-fluid" alt=""> </span> Hindustan Times </li> <li> <span class="da_logoWrap"> <img src="/images/mobile/liveHT.png" class="img-fluid" alt=""> </span> Live Hindustan </li> <li> <span class="da_logoWrap"> <img src="/images/mobile/HTHealthShot.png" class="img-fluid" alt=""> </span> Healthshots </li> <li> <span class="da_logoWrap"> <img src="/images/mobile/HTShot.png" class="img-fluid" alt=""> </span> HT Smartcast </li> <li> <span class="da_logoWrap"> <img src="/images/mobile/brandStudio.png" class="img-fluid" alt=""> </span> HT Brandstudio </li> <li> <span class="da_logoWrap"> <img src="/images/mobile/mintGenie.png" class="img-fluid" alt=""> </span> Mint Genie </li> <li> <span class="da_logoWrap"> <img src="/images/mobile/ottPlay.png" class="img-fluid" alt=""> </span> OTTPlay </li> <li> <span class="da_logoWrap"> <img src="/images/mobile/slurrp.png" class="img-fluid" alt=""> </span> Slurrp </li> </ul> <p class="da_pleaseNote">Please note : Account deletion will not cancel your subscription, in order to cancel your subscription, please go to Manage subscription tab under Account section.</p> <p class="da_areYou">Are you sure you want to delete your account?</p> <p class="da_error" style="display:none">Please select checkbox to proceed</p> <div class="da_formGroup"> <input type="checkbox" id="da_checkbox"> <label for="da_checkbox">Yes, I want to permanently delete the Livemint account and all associated data.</label> </div> <div class="da_btnWrap"> <button class="da_btn continue-btn" onclick="cancelOrContinueBtn()">Cancel</button> <button class="da_btn continue-btn" id="continue-btn-white" onclick="confirmDeleteAccount()">Continue</button> </div> </div> </div> </div><div class="da_container"> <div class="da_wrapper" id="deleteReason" style="display:none"> <h2 class="da_head">Delete Account</h2> <div class="da_whiteBox"> <p class="da_heading">We鈥檙e sorry to see you go! Kindly confirm the reason for deletion.</p> <form action="#"> <ul class="da_confirmAccout"> <li> <input class="da_radio" type="radio" id="da_reason1" name="radio-group" onclick="hideOtherField();" checked > <label for="da_reason1">I don't like the content anymore</label> </li> <li> <input class="da_radio" type="radio" id="da_reason2" name="radio-group" onclick="hideOtherField();"> <label for="da_reason2">I am facing technical issues</label> </li> <li> <input class="da_radio" type="radio" id="da_reason3" name="radio-group" onclick="hideOtherField();"> <label for="da_reason3">I am not using it anymore</label> </li> <li> <input class="da_radio" type="radio" id="da_reason4" name="radio-group" onclick="hideOtherField();"> <label for="da_reason4">Poor value for money</label> </li> <li> <input class="da_radio" type="radio" id="da_reason5" name="radio-group" onclick="hideOtherField();"> <label for="da_reason5">Need more feature benefits</label> </li> <li> <input class="da_radio" type="radio" id="da_reason6" name="radio-group" onclick="hideOtherField();"> <label for="da_reason6">I want to switch to another plan</label> </li> <li> <input class="da_radio" type="radio" id="da_reason7" name="radio-group" onclick="hideOtherField();" > <label for="da_reason7"> I am opting for a different subscription</label> </li> <li> <input class="da_radio" type="radio" id="da_reason8" name="radio-group" onclick="showOtherField();" > <label for="da_reason8"> Others</label> <div class="da_otherField da_hide" id="da_otherField"> <textarea></textarea> <span class="da_maxChar">Max 80 characters</span> </div> </li> </ul> </form> <div class="da_btnWrap"> <button class="da_btn continue-btn" onclick="cancelOrContinueBtn()">Cancel</button> <button class="da_btn continue-btn" id="continue-btn-white" onclick="sendReasonToNextPage()">Continue</button> </div> </div> </div> </div><div id="daPopup" class="daPopupMain" style="display:none"> <div class="da_popup"> <span class="da_tickIcon"> <img src="/images/mobile/check-mark.png" class="img-fluid" alt=""> </span> <h3>Your Account is deleted</h3> <p>Thanks for using Mint. We look forward to seeing you again.</p> <div class="da_btnWrap"> <button class="da_btn continue-btn" onclick="cancelOrContinueBtn()">Continue</button> </div> </div> </div><div id = "signInSignUp" style="display:none"> <h2 class="heading">Log in or sign up</h2> <div class="white-box"> <div class="white-box-in"> <div class="flex-type"> <div id="mainLoginMethods"></div> <div class="seperator"><span>OR</span></div> <div id="primaryLoginMethods"></div> <div class="other-login" id="otherLoginIcon" style="opacity:0;"></div> <div class="center-align"> <span class="for-toggle" onclick="toggleOtherLoginOption()">See more login options</span> </div> <span class="last-elem"> Trouble login in? <a href="#" onclick="renderHelpSupport();">Get help</a> </span> </div> </div> </div> </div> <script> let userId; // Equivalent to clientId let isSignUp; let refDomain = ""; let emailAdrr; var ssoReason; let ssoReasonMoe; ssoReason= ""; if(ssoReason){ ssoReasonMoe = ssoReason.charAt(0).toUpperCase()+ssoReason.slice(1); } function maintainUserLoginSession(token, clientId, name) { var date = new Date(); date.setTime(date.getTime() + (89 * 24 * 60 * 60 * 1000)); var expires = "; expires=" + date.toGMTString(); var domain = "; domain=.hindustantimes.com;path=/"; document.cookie = "token=" + token + expires + domain+ "; SameSite=None; Secure;"; document.cookie = "_ht_clientid=" + userId + expires + domain+ "; SameSite=None; Secure;"; document.cookie = "name=" + name + expires + domain+ "; SameSite=None; Secure;"; } function registerUserToSsoAndLogin(data) { let url = '/one-page/lm/social-login'; if(ht_fp_cookie == ""){ ht_fp_cookie = getCookieSSO("_ht_fp"); } $.ajax({ url : url, method: "POST", contentType: "application/json", headers: {'X-Client' : getCookieSSO("xclientID"),'_ht_fp' : ht_fp_cookie , 'url_params' : getCookieSSO("url_params")}, data: JSON.stringify(data), success: function(response, tokenText, responseHeader){ let authenticationToken = responseHeader.getResponseHeader("Authorization"); let userName = response.data.name; userId = response.data.clientId; isSignUp = response.data.signUp; emailAdrr=response.data.email; maintainUserLoginSession(authenticationToken, userId, userName); // Login loop let ssoMode = ""; if(data.source == 'G' || googleLoginMethod == 'G'){ ssoMode = "google"; }else if(data.source == "O" || googleLoginMethod == 'O' ){ ssoMode = "google_popup"; } let loginType = isSignUp ? "signup" : "login"; if(isSignUp){ sendEventCdp("SSOSignUpSuccess", "signup", ssoMode, userId); }else{ sendEventCdp("SSOSignInSuccess", "login", ssoMode, userId); } sendGa4Event("sso_signin_signup_success", ssoMode, loginType, userId); let subscriptions = [{"siteId": ''}]; doSingleSignOnSignUpWithConfig(authenticationToken, userName, userId, subscriptions, 'false',mainDomainReffCode); }, error: function(response) { alert('Something went wrong!'); } }); } function registerGoogleUserToSsoAndLogin(data) { showLoader(); let url = '/v3/secured/social/login'; if(ht_fp_cookie == ""){ ht_fp_cookie = getCookieSSO("_ht_fp"); } getHtFpId(); $.ajax({ url : url, method: "POST", contentType: "application/json", headers: {'X-Client' : getCookieSSO("xclientID"),'_ht_fp' : ht_fp_cookie , 'url_params' : getCookieSSO("url_params"), 'isDeleteAccountRequest': isDeleteAccountRequest || false}, data: JSON.stringify(data), success: function(response, tokenText, responseHeader){ let authenticationToken = responseHeader.getResponseHeader("Authorization"); let userName = response.data.name; userId = response.data.clientId; isSignUp = response.data.signUp; emailAdrr = response.data.email; if(isDeleteAccountRequest){ deleteToken = authenticationToken; verifyOtpDeleteSocialAccount(emailAdrr); return; } maintainUserLoginSession(authenticationToken, userId, userName); // Login loop if(getCookieSSO('_lm_ref') != null && getCookieSSO('_lm_ref').includes('epbeta')){ refDomain = "ELM"; }else{ refDomain = "LM"; } let ssoReason = getCookieSSO('funnel_entry') ? getCookieSSO('funnel_entry') : 'campaign'; let loginType = isSignUp ? "signup" : "login"; if(isSignUp){ sendEventCdp("SSOSignUpSuccess", "signup", "google", userId); }else{ sendEventCdp("SSOSignInSuccess", "login", "google", userId); } sendGa4Event("sso_signin_signup_success", "google_popup", loginType, userId); let subscriptions = [{"siteId": ''}]; hideLoader(); doSingleSignOnSignUpWithConfig(authenticationToken, userName, userId, subscriptions, 'false',mainDomainReffCode); }, error: function(response) { alert('Something went wrong!'); } }); } function sendCdpEvent(refDomain , ssoReason , ssoMode , authorization , userID , isSignUp){ var eventObj = {}; eventObj.refDomain = refDomain; eventObj.ssoReason = ssoReason; eventObj.ssoMode = ssoMode; eventObj.authorization = authorization; eventObj.userID = userID; if(isSignUp == true){ failure_type = "ssoSignUpSuccess"; }else { failure_type = "ssoSignInSuccess"; } if(ht_fp_cookie == ""){ ht_fp_cookie = getCookieSSO("_ht_fp"); } try{ if(ht_fp_cookie != ""){ if(isSignUp == true){ eventObj.loginType = 'SignUp'; failure_type = "ssoSignUpSuccess"; dapTracker.track("ssoSignUpSuccess", eventObj, "user"); //successCall("ssoSignUpSuccess","Event fired successfully",ht_fp_cookie,eventObj.refDomain); }else{ eventObj.loginType = "SignIn"; failure_type = "ssoSignInSuccess"; //dapTracker.track("ssoSignInSuccess", eventObj, "user"); //successCall("ssoSignInSuccess","Event fired successfully",ht_fp_cookie,refDomain); } }else{ // failureCall("DAP",failure_type,"event_push_failed",e.message,userID,ht_fp_cookie,refDomain); } }catch(e){ //failureCall("DAP",failure_type,"event_push_failed",e.message,userID,ht_fp_cookie,refDomain); console.log("exception occurred while sending cdp success event"); } } function getDomain(){ if(getCookieSSO('_lm_ref') != null && getCookieSSO('_lm_ref').includes('epbeta')){ refDomain = "ELM"; }else{ refDomain = "LM"; } } // <==== Google Login ===> function clickGoogle() { sendEventCdp("SSOLoginInitiate", "", "google", ""); if(getCookie("sso_reason")){ let sso_reason_moe = getCookie("sso_reason").charAt(0).toUpperCase()+getCookie("sso_reason").slice(1); } }// <=== True Caller Login ===> var desktop = isDeviceEnabled("large"); var isMobile=false;var isTablet=false;var isDesktop=false; var isLargeDesktop=false; var WFClientTypeDef = {"large":"(min-width: 1024px)","small":"(max-width: 767px)","medium":"(min-width: 768px) and (max-width: 1023px)"}; for ( var type in WFClientTypeDef) { if (window.matchMedia(WFClientTypeDef[type]).matches) { switch (type) { case "large": isDesktop=true; break; case "medium": isTablet=true; break; case "small": isMobile=true; break;} break; }} function isDeviceEnabled(skipOnDeviceValue) {if(skipOnDeviceValue=="large" && isDesktop) {return true;} if(skipOnDeviceValue=="medium" && isTablet){return true;} if(skipOnDeviceValue=="small" && isMobile){return true;} return false; } var isIos = navigator.vendor && navigator.vendor.indexOf('Apple') > -1; var continueClicked = false; var tcAppKey = ""; var tcAppName = ""; var isStage = false; //set it true for staging env if(isStage){ tcAppKey = "Oygjh7596412bcdac4b4094b93bd078292501"; tcAppName = "HTDSSTG"; }else{ tcAppKey = "Nher399e83bdce7634bbbb26a2a5c7c2b7758"; tcAppName = "HTDS"; } function customTcLogin(){ $.when( $.ajax({ type: "GET", url: "/truecaller/req_id/lm", contentType: "application/json" })) .done( function(res, resText, resHeaders ){ if(res){ var reqId = res; hitTruecallerSdk(reqId); // hit truecaller sdk and user can approve setTimeout(function() { if(document.hasFocus()){ //alert("Truecaller not installed"); return; } else{ try{ sendGa4Event("sso_truecaller_popup_viewed", "truecaller", "",""); sendEventCdp("SSOTruecallerPopUpViewed", "", "TruecallerPopup", ""); }catch(e){ console.log("truecaller popup event exception:",e); } try{ poll(4000, 6, reqId); }catch(e){ console.log(e); } } }, 600); } else{ alert("Something went wrong, please try again."); } }) .fail(function callFail(errStatus){ console.log(errStatus); if(errStatus.status == 403 || errStatus.status == 401 || errStatus.status == 402){ alert("Something went wrong, please try again."); }; } ); } function hitTruecallerSdk(requestId){ var UNIQUE_REQUEST_ID = requestId; var YOUR_APP_KEY = tcAppKey; var YOUR_APP_NAME = tcAppName; var LANGUAGE_LOCALE = "en"; var TITLE_STRING_OPTION = 'logIn'; var FOOTER_CTA_STRING = "skip"; window.location = "truecallersdk://truesdk/web_verify?requestNonce=" + UNIQUE_REQUEST_ID + "&partnerKey=" + YOUR_APP_KEY + "&partnerName=" + YOUR_APP_NAME + "&lang="+ LANGUAGE_LOCALE + "&title=" + TITLE_STRING_OPTION+ "&skipOption=" + FOOTER_CTA_STRING; } function hitBackendApi(reqId) { var ssoTokenUrl = "/v3/truecaller/login/" + reqId; return $.ajax({ type: "GET", url: ssoTokenUrl, contentType: "application/json", headers:{"X-Client": "1001", "_ht_fp": getCookieSSO("_ht_fp") ? getCookieSSO("_ht_fp") : "", "url_params": getCookieSSO("url_params") ? getCookieSSO("url_params") : ""}, }) } function validateUserData(data) { if(data != undefined && data != null && data != ""){ if(data["success"] == true && data["data"]!=null && typeof data["data"]!= "undefined" && data["data"]!= "" && data["token"]!=null && typeof data["token"]!= "undefined" && data["token"]!= "") { return true; } return false; } return false; } function poll(interval, maxAttempts, reqId) { var attempt=0; var data; executePoll = () => {$.when(hitBackendApi(reqId)) .done(function (response, resText, requestHeaders){ dataRes = response; let token1 = requestHeaders.getResponseHeader("Authorization"); dataRes['token']=requestHeaders.getResponseHeader("Authorization"); attempt++; if(response != null && typeof response != "undefined" && response != "" && validateUserData(dataRes)){ try{ sendEventCdp("SSOLoginInitiate","", "Truecaller", ""); sendGa4Event("sso_signin_signup_initiate", "truecaller", "",""); }catch(e){ console.log(e); } continueClicked = true; signIn(dataRes); } else if (response != null && typeof response != "undefined" && response.success != null && typeof response.success != "undefined" && response.success == false ) { continueClicked = false; return new Error('User rejected tc login'); } else if (maxAttempts && attempt === maxAttempts) { continueClicked = false; showErrorToast("Something went wrong, please try again."); return new Error('Exceeded max attempts'); } else { continueClicked = false; setTimeout(executePoll, interval); } }) .fail(function callFail(errStatus){ if(errStatus.status == 403 || errStatus.status == 401 || errStatus.status == 402){ continueClicked = false; showErrorToast("Something went wrong, please try again."); }; attempt++; }); } executePoll(); } function signIn(truecallerApiRes) { let authToken = truecallerApiRes.token; let ssoType; let clientId; let isSignUp; maintainUserLoginSession(truecallerApiRes.token, truecallerApiRes.data.clientId, truecallerApiRes.data.name); if(truecallerApiRes){ clientId = truecallerApiRes.data.clientId; isSignUp= truecallerApiRes.data.signUp; } if(isSignUp == true ){ ssoType = "signup"; sendEventCdp("SSOSignUpSuccess", "signup", "truecaller", clientId); }else{ ssoType = "login"; sendEventCdp("SSOSignInSuccess", "login", "truecaller", clientId); } sendGa4Event("sso_signin_signup_success", "truecaller", ssoType, clientId); let subscriptions = [{"siteId": ''}]; doSingleSignOnSignUpWithConfig(authToken, truecallerApiRes.data.name, truecallerApiRes.data.clientId, subscriptions, 'false',mainDomainReffCode); } </script><script> scriptInjector("/js/mobile/socialLogin.js?v=1.1"); </script><div id="helpSupport" class="content-wrap" style="display:none"> <h2 class="heading">Help & Support</h2> <div class="white-box"> <div class="white-box-in help"> <div class="flex-type"> <div class="headingh3">Let us know your problem and we will try it solve it in the best possible way. </div> <ul class="list-for-help"> <li onclick="goToContactUs(this);" reason="a">I used to enter password for signing in. What happens to it?</li> <li onclick="goToContactUs(this);" reason="a">I can't login to my email and retrieve OTP</li> <li onclick="goToContactUs(this);" reason="a">I didn't get an OTP</li> <li onclick="goToContactUs(this);" reason="na">My concern is not listed here.</li> </ul> </div> </div> </div> </div> <script> let text; let reason; function goToContactUs(elm) { text = $(elm).text(); reason = $(elm).attr('reason'); let phoneOrEmail = $('#phoneNum .inplogin').val(); if(reason != 'na') $('#textInpArea').val(text); if(phoneRegex.test(phoneOrEmail)) $('#userPhone').val(phoneOrEmail); if(emailRegex.test(phoneOrEmail)) $('#userEmail').val(phoneOrEmail); renderContactUs(); } </script> <div id="contactUs" style="display:none"> <h2 class="heading">Contact us</h2> <div class="white-box"> <div class="white-box-in help ctus"> <div class="flex-type"> <h3 class="headingh3 otpTxt">Share your details and we will reach out to you!</h3> <div class="inpSec text-box-wrap error1" id="mailArea"> <div class="icon email-icon ac-icon" id="emailIcon"></div> <div class="inpHolder textbox"> <input class="inp inplogin tbp" placeholder="Email address*" name="phone" id="userEmail" type="text" value="" required="" onclick="activeEmail()" oninput="removeEmailError();" /> </div> </div> <p class="error-msg" id="mailError" style="display:none;">Email is required.</p> <div class="inpSec text-box-wrap error1" id="phoneArea"> <div class="icon ph-icon" id="phoneIcon"></div> <div class="inpHolder textbox"> <input class="inp inplogin tbp" placeholder="Phone number*" id="userPhone" name="phone" type="text" value="" required="" onclick="activePhone()" oninput="removeMobileError();" onKeyPress="return event.charCode >= 48 && event.charCode <= 57" minLength=10 maxLength=10 /> </div> </div> <p class="error-msg" id="phoneError" style="display:none;">Phone number is required.</p> <div class="inpSec textBoxError" id="textArea"><!-- add "error" class to vie errorbox--> <textarea class="textarea inp" placeholder="Please share us your concern." id="textInpArea" onclick="activeMessage()" oninput="removeTextAreaError();"></textarea> </div> <button class="continue-btn btnBox" onclick="sendCustomerIssue();">Submit</button> <div class="alternate"> Alternatively, you can also reach us on our email <a href="mailto:support@livemint.com">support@livemint.com</a> </div> </div> </div> </div> </div> <script> function activeEmail(){ $('.ac-icon').addClass('isEmailActive'); $('.ph-icon').removeClass('isMobileActive'); $('#mailArea').addClass('red'); $('#phoneArea').removeClass('red'); } function activePhone(){ $('.ph-icon').addClass('isMobileActive'); $('.ac-icon').removeClass('isEmailActive'); $('#phoneArea').addClass('red'); $('#mailArea').removeClass('red'); } function activeMessage(){ $('#phoneArea').removeClass('red'); $('#mailArea').removeClass('red'); $('.email-icon').removeClass('isEmailActive'); $('.ph-icon').removeClass('isMobileActive'); } function addEmailError() { $('#mailArea').addClass('error'); $('#mailError').show(); $('.ph-icon').removeClass('isMobileActive'); } function removeEmailError() { $('#mailArea').removeClass('error'); $('#mailError').hide(); } function addMobileError() { $('#phoneArea').addClass('error'); $('#phoneError').show(); $('.email-icon').removeClass('isEmailActive'); } function addMobileLengthError(){ $('#phoneArea').addClass('error'); } function removeMobileError() { $('#phoneArea').removeClass('error'); $('#phoneError').hide(); } function addTextAreaError() { $('#textInpArea').addClass('error'); } function removeTextAreaError() { $('#textInpArea').removeClass('error'); } function sendCustomerIssue() { let url = '/v2/query'; let email = $('#userEmail').val(); if(email == undefined || email == '' || !emailRegex.test(email)) addEmailError(); let mobile = $('#userPhone').val(); if(mobile == undefined || mobile == '' || !phoneRegex.test(mobile)) addMobileError(); if(mobile.length < 10 ) addMobileLengthError() if(reason == 'na') { text = $('#textInpArea').val(); } if(text == undefined || text == '') addTextAreaError(); if(email == '' || mobile == '' || text == '' || !emailRegex.test(email) || !phoneRegex.test(mobile)) { console.log('Mandatory fields are empty or invalid.'); return; } let customerIssueData = { email : email, cellNumber : '91'+mobile, referrer : REFERER, text : text, }; $.ajax({ url : url, method: 'POST', contentType: 'application/json', headers: {'X-Client' : '1001'}, data: JSON.stringify(customerIssueData), success:(response) => { if(response.success == true && response.data.success == true) { sendIssueRaisedEvent(); console.log('Query reported to customer support'); showConfirmation(redirectUrl); } else { console.log('Something went wrong while sending customer issue : '+ getStringObject(response)); let message = response.data.message ? response.data.message : ''; if(message.code == 'AC_001') alert(message.text); } hideLoader(); }, error: (response) => { console.log('Error occurred :'+ response); hideLoader(); } }); } function sendIssueRaisedEvent(){ try{ dataLayer.push({ event: "sso_issue_raised", domain_name: reffCode1, sso_origin: getCookieSSO("funnel_entry") ? getCookieSSO("funnel_entry") : "other", cohort_ID: cohortId, benefit_ID: benefitId, current_url: getCookieSSO("domainReffUrl"), user_login_status: getCookieSSO("token") ? "LoggedIn" : "Non-LoggedIn", user_ID: getCookieSSO("_ht_clientid") || "", intervention_type:"sso", page_type: "yet_to_be_send_by_LM", issue_text: text }); }catch(e){ console.log("GA4 event: sso_issue_raised-exception: ", e); } var gaDataSso = {'dimension22': reffCode1,'dimension51':text }; gaTrackingEvent1("sso","issue_raised",'', gaDataSso); sendGa4Event("sso_issue_raised", "", "", ""); try{ Moengage.track_event("Issue Raised", { "Domain":domainName_lm, "SSO Reason": sso_reason_moe, "Credential Type": credential_type_moe? credential_type_moe:"", "Issue Text":text, }); } catch(e){ console.log(e); } } // show confirmation and if verified login function showConfirmation(redirectUrl) { $('#confirmation_text').show(); $('#confirmation_text').delay(10000).fadeOut(); if(token != undefined && token != '') { doSingleSignOnSignUpWithConfig(token, name, clientId, subscriptions, 'false',mainDomainReffCode); } else { setTimeout(() => {console.log('paused execution')},10000); window.location.href = redirectUrl; } } </script> <div id = "otpScreen" style="display:none;"> <h2 class="heading" id="otpHeading">Verify phone number</h2> <div class="white-box"> <div class="white-box-in verifyphone"> <div class="otpTxt helptext"><span></span> <a href="javascript:void(0);" class="edit-number" onclick="editDetail();">Edit phone number</a> </div> <div class="check" style="display:none"> <label class="container"> <input type="checkbox" class="checkbox" id="promoVal" checked name="promoVal"> I wish to receive news and promotions from Mint on<br /> email. <span class="checkmark" id="promoInp"></span> </label> </div> <div class="flex-type"> <div id="otpTextScreen"> </div> <span class="error-msg big"></span> <div class="reset-timer timer"> <a href="javascript:void(0);" id="resent_otp" style="text-decoration:underline">Resend OTP</a><br> <span>00:00</span> </div> </div> <span class="last-elem"> Trouble login in? <a href="#" onclick="renderHelpSupport();">Get help</a> </span> </div> </div> </div> </div> <div class="alignC" style="visibility:hidden;"> <input type="button" id="submitOtp" class="btnBox" disabled value="Verify OTP"> </div> <script> autoReadSMS(); function autoReadSMS() { const signal = new AbortController(); setTimeout(() => { signal.abort(); }, 1 * 60 * 1000); function main() { if ('OTPCredential' in window) { window.addEventListener('DOMContentLoaded', e => { const ac = new AbortController(); navigator.credentials.get({ otp: { transport:['sms'] }, signal: ac.signal }).then(otp => { for(let i = 0; i < otp.code.length; i++) { $("#otp"+(i+1)).val( otp.code[i]); } otpEmptyCheck(); e.preventDefault(); }).catch(err => { console.log(err.message); }); }); } } main(); } function isChromeBrowser() { let userAgent = navigator.userAgent; let chromeOtp= ` <div class="inpHolder otp-enter-box-wrap byemail error1"" id="otpfield"> <input type="tel" id = "otp1" oninput="iosAutoRead();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" pattern="^[0-9]$;" class="inp otp otp-no"> <input type="tel" id = "otp2" oninput="removeError();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" pattern="^[0-9]$;" class="inp otp otp-no"> <input type="tel" id = "otp3" oninput="removeError();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" pattern="^[0-9]$;" class="inp otp otp-no"> <input type="tel" id = "otp4" oninput="removeError();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" pattern="^[0-9]$;" class="inp otp otp-no"> <input type="tel" id = "otp5" oninput="removeError();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" pattern="^[0-9]$;" class="inp otp otp-no"> <input type="tel" id = "otp6" oninput="removeError();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" pattern="^[0-9]$;" class="inp otp otp-no"> </div>`; let safariOtp = `<div class="inpHolder otp-enter-box-wrap byemail error1"" id="otpfield"> <input type="number" id = "otp1" maxlength="1" oninput="removeError();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" class="inp otp otp-no"> <input type="number" id = "otp2" maxlength="1" oninput="removeError();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" class="inp otp otp-no"> <input type="number" id = "otp3" maxlength="1" oninput="removeError();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" class="inp otp otp-no"> <input type="number" id = "otp4" maxlength="1" oninput="removeError();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" class="inp otp otp-no"> <input type="number" id = "otp5" maxlength="1" oninput="removeError();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" class="inp otp otp-no"> <input type="number" id = "otp6" maxlength="1" oninput="removeError();" onkeyup="otpEmptyCheck(); moveCursor(this, event);" class="inp otp otp-no"> </div>` if (userAgent.match(/chrome|chromium|CriOS/i)) { document.getElementById('otpTextScreen').innerHTML = chromeOtp; } else{ document.getElementById('otpTextScreen').innerHTML = safariOtp; } /*keypad auto popup*/ setTimeout(function() { $("#otp1").focus(); },200); } function iosAutoRead(){ const val = document.querySelector('#otp1').value; const pastedData = val.substring(0, 6); for(let i = 0; i < pastedData.length; i++) { $("#otp"+(i+1)).val(pastedData[i]); } otpEmptyCheck(); } </script> </div> </div> </div> <!-- Main Area div ends here --> <!-- ***loader*** --> <div class="loading" style="display:none"> <img class="rotate" src="https://images.livemint.com/dev/loader.svg" alt="loader"> Please Wait... </div> </div> <!-- right box ends here --> </div> </section> <div class="badge" id = "confirmation_text" style = "display:none">Your concern has been shared with our team!</div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10