let base_domain = "streamlinedealer.com";let BuildRedirectUri = window.location.href; if(BuildRedirectUri.includes("#") ){ BuildRedirectUri = BuildRedirectUri.slice(0,BuildRedirectUri.indexOf('#')); } BuildRedirectUri = BuildRedirectUri + '#cachebuster'; var webAuth = new auth0.WebAuth({ domain: 'streamlinedealer.auth0.com', clientID: 'h1b0m9zKfB1WDSJ5inVns6ArHkXRU45P', responseType: 'token id_token', audience: 'https://streamlinedealer.auth0.com/userinfo', scope: 'openid profile', redirectUri: 'https://dashboard.' + base_domain + '/home/' }); function handleAuthentication() { webAuth.parseHash(function(err, authResult) { if (authResult && authResult.accessToken && authResult.idToken) { window.location.hash = ''; setSession(authResult); } else if (err) { console.log(err); alert( 'Error: ' + err.error + '. Check the console for further details.' ); } }); return true; } function setSession(authResult) { // Set the time that the Access Token will expire at var expiresAt = JSON.stringify( authResult.expiresIn * 1000 + new Date().getTime() ); localStorage.setItem('access_token', authResult.accessToken); localStorage.setItem('id_token', authResult.idToken); localStorage.setItem('expires_at', expiresAt); auth0_get_user(); } function logout() { // Remove tokens and expiry time from localStorage localStorage.removeItem('access_token'); localStorage.removeItem('id_token'); localStorage.removeItem('expires_at'); localStorage.removeItem('profile_id'); localStorage.removeItem('profile_email'); localStorage.removeItem('profile_fullname'); localStorage.removeItem('profile_picture'); localStorage.removeItem('user_settings'); } function isAuthenticated() { // Check whether the current time is past the // Access Token's expiry time var expiresAt = JSON.parse(localStorage.getItem('expires_at')); return new Date().getTime() < expiresAt; } function auth0_get_user(){ webAuth.client.userInfo(localStorage.getItem('access_token'), function(err, user) { let userId = user.sub.split('|')[1]; localStorage.setItem('profile_id', userId); localStorage.setItem('profile_email', user.email); localStorage.setItem('profile_fullname', user.name); localStorage.setItem('profile_picture', user.picture); auth0_checkin_user(); auth0_get_user_settings(); }); } function auth0_get_user_settings(){ let username = localStorage.getItem('profile_id'); let url = '//user.' + base_domain + '/profiles/'+username+'/'; fetch(url) .then((resp) => resp.json()) .then(function(data) { console.log(data); localStorage.setItem('user_settings', JSON.stringify(data)); }) .catch(function(error) { console.log(error); }); } function auth0_checkin_user(){ let username = localStorage.getItem('profile_id'); let url = 'https://user.' + base_domain + '/functions/checkin-user/?user='+username; fetch(url) .then((resp) => resp.json()) .then(function(data) { console.log('User Checkin: '+data.result); }) .catch(function(error) { console.log(error); }); }let verbose = false; let head = document.getElementsByTagName('head')[0]; let current_template = 'default.css'; let TemplateFilterCSS = createNode('link'); TemplateFilterCSS.rel = "stylesheet"; TemplateFilterCSS.title = 'FilterCSS'; TemplateFilterCSS.href = '#'; append(head,TemplateFilterCSS); var cntrlIsPressed = false; window.addEventListener('keydown',function(){ if(event.which=="17"){ cntrlIsPressed = true; if(verbose) console.log('Cntrl Key Pressed'); } }); window.addEventListener('keyup',function(){ if(event.which=="17"){ cntrlIsPressed = false; if(verbose) console.log('Cntrl Key Unpressed'); } }); function createNode(element) { return document.createElement(element); // Create the type of element you pass in the parameters } function createNodeNamed(element,className){ let out = document.createElement(element); out.className = className; if(verbose) console.log("Create <" + className + "+"); return out; // Create the type of element you pass in the parameters } function append(parent, el) { return parent.appendChild(el); // Append the second parameter(element) to the first one } function AttachLoginButton(){ var loginBtn = document.getElementById('nav-login'); loginBtn.addEventListener('click', function(e) { e.preventDefault(); webAuth.authorize(); }); } function AttachLogoutButton(){ var loginBtn = document.getElementById("nav-login"); if(loginBtn){ var logoutBtn = createNode('li'); let logoutLink = createNode('a'); logoutLink.textContent = "Logout"; logoutLink.href = "#"; append(logoutBtn,logoutLink); logoutBtn.addEventListener('click', function(e) { e.preventDefault(); logout(); let LogoutRedirectUri = 'https://dashboard.' + base_domain + '/login/' window.location.href = LogoutRedirectUri; }); loginBtn.parentNode.replaceChild(logoutBtn, loginBtn); } } function insert_request_access(insertSelector,displaySelector){ let h2 = createNode('h2'); h2.textContent = "Request Access"; let select = createNode('select'); select.addEventListener('change', display_group_request); select.setAttribute('data-display-selector',displaySelector) let DefaultOption = createNode('option'); DefaultOption.value = 'null'; DefaultOption.textContent = '-- Select A Dealer Group --'; append(select, DefaultOption); let url = '//groups.' + base_domain + '/functions/list-active-groups/'; fetch(url) .then((resp) => resp.json()) .then(function(data) { let profiles = data.groups; return profiles.map(function(profile) { let settings = profile.settings; let option = createNode('option'); option.value = profile.group; option.textContent = settings.name; append(select, option); }) }) .catch(function(error) { console.log(error); }); let el = document.querySelectorAll(insertSelector.trim()); for (i = 0; i < el.length; i++) { append(el[i],h2); append(el[i],select); } } function insert_grant_access(insertSelector){ let h2 = createNode('h2'); h2.textContent = "Grant Access"; let container = createNode('div'); let url = '//user.' + base_domain + '/functions/list-user-permissions/'; fetch(url) .then((resp) => resp.json()) .then(function(data) { let profiles = data.profiles; for (var i in profiles) { let profile = profiles[i]; let row = createNode('div'); let name = createNode('div'); name.textContent = profile.name; let access = createNode('div'); access.textContent = profile.name; append(row, name); append(row, access); append(container, row); } }) .catch(function(error) { console.log(error); }); let el = document.querySelectorAll(insertSelector.trim()); for (i = 0; i < el.length; i++) { append(el[i],h2); append(el[i],container); } } function display_group_request(){ let displaySelector = this.getAttribute('data-display-selector'); let display_group_request = createNode('div'); display_group_request.className = displaySelector; let h2 = createNode('h2'); h2.textContent = this.options[this.selectedIndex].text; if(this.value == 'null'){h2.textContent = "Need access to a dealership on the platform?";} let p = createNode('p'); p.textContent = "Click to request access, and we'll email you if approved."; if(this.value == 'null'){p.textContent = "Select a store from our community of dealers and request access.";} let button = createNode('button'); button.setAttribute('data-group',this.value); button.textContent = 'Request Access'; if(this.value !== 'null')button.addEventListener('click',group_request_access_event); if(this.value == 'null')button.setAttribute('disabled',true); let el = document.querySelectorAll(displaySelector); for (i = 0; i < el.length; i++) { el[i].innerHTML = ''; append(el[i],h2); append(el[i],p); append(el[i],button); } } function group_request_access_event(){ let group = this.getAttribute("data-group"); let url = 'https://user.' + base_domain + '/functions/user-request-access/?group=' + group + '&id=' + localStorage.getItem('profile_id'); fetch(url) .then((resp) => resp.json()) .then(function(data) { alert(data); }) .catch(function(error) { console.log(error); }); } function insert_scripts_grid(selector){ let hr = createNode('hr'); let headerRow = createNode('div'); //headerRow.innerHTML = "