const loginRequest = { scopes:["User.Read"] }; var accessToken = ""; var username = ""; var useremail = ""; var userfirst = ""; var usersurname = ""; var userid = ""; var tenantid = ""; const msalConfig = { auth: { clientId: '4495a663-a88e-4547-abbb-38665170ce89', redirectUri: 'https://italferr.esproweb.it/login.php' } }; const msalInstance = new msal.PublicClientApplication(msalConfig); function callEndpoint(endpoint, token, callback) { const headers = new Headers(); const bearer = `Bearer ${token}`; headers.append("Authorization", bearer); const options = { method: "GET", headers: headers }; fetch(endpoint, options) .then(response => response.json()) .then(response => callback(response, endpoint)) .catch(error => App.alert({ container: '#login_alerts', type: 'danger', message: 'Errore: '+error, icon: 'warning' })); } function getTokenPopup(request) { request.account = msalInstance.getAccountByUsername(username); return msalInstance.acquireTokenSilent(request).catch(error => { console.warn("silent token acquisition fails. acquiring token using popup"); if (error instanceof msal.InteractionRequiredAuthError) { return msalInstance.acquireTokenPopup(request).then(tokenResponse => { return tokenResponse; }).catch(error => { App.alert({ container: '#login_alerts', type: 'danger', message: 'Errore: '+error, icon: 'warning' }); }); } else { App.alert({ container: '#login_alerts', type: 'danger', message: 'Errore: '+error, icon: 'warning' }); } }); } function getADUser(data, endpoint) { userfirst=data.givenName; usersurname=data.surname; userid=data.id; loadTenant(); } function getADTenant(data, endpoint) { tenantid=data.value[0].id; loadGroups(); } function getADGroups(data, endpoint) { var groupsid=''; data.value.forEach(function(item) { if (groupsid!='') { groupsid += '|'; } groupsid += item.id; }); var myData = []; myData.push({ name: 'tid', value: tenantid }); myData.push({ name: 'iid', value: $('#iid').val() }); myData.push({ name: 'cid', value: userid }); myData.push({ name: 'username', value: username }); myData.push({ name: 'useremail', value: useremail }); myData.push({ name: 'userfirst', value: userfirst }); myData.push({ name: 'usersurname', value: usersurname }); myData.push({ name: 'gid', value: groupsid }); $.ajax({ type: "POST", url: "verificaAD.php", data: myData, dataType: "json", success: function(esito) { if (esito.CodiceErrore=="0") { document.loginform.submit(); } else { App.alert({ container: '#login_alerts', type: 'danger', message: 'Errore: '+esito.DescrizioneErrore, icon: 'warning' }); } } }); } function loadProfile() { getTokenPopup(loginRequest).then(response => { accessToken=response.accessToken; callEndpoint('https://graph.microsoft.com/v1.0/me', accessToken, getADUser); }).catch(error => { App.alert({ container: '#login_alerts', type: 'danger', message: 'Errore: '+error, icon: 'warning' }); }); } function loadTenant() { getTokenPopup(loginRequest).then(response => { accessToken=response.accessToken; callEndpoint('https://graph.microsoft.com/v1.0/organization', accessToken, getADTenant); }).catch(error => { App.alert({ container: '#login_alerts', type: 'danger', message: 'Errore: '+error, icon: 'warning' }); }); } function loadGroups() { getTokenPopup(loginRequest).then(response => { accessToken=response.accessToken; callEndpoint('https://graph.microsoft.com/v1.0/users/'+userid+'/memberOf', accessToken, getADGroups); }).catch(error => { App.alert({ container: '#login_alerts', type: 'danger', message: 'Errore: '+error, icon: 'warning' }); }); } function selectAccount() { const currentAccounts = msalInstance.getAllAccounts(); if (currentAccounts.length === 0) { App.alert({ container: '#login_alerts', type: 'danger', message: 'Nessun Account Azure AD valido', icon: 'warning' }); } else if (currentAccounts.length > 1) { App.alert({ container: '#login_alerts', type: 'danger', message: 'Account multipli in Azure AD. Impossibile proseguire', icon: 'warning' }); } else if (currentAccounts.length === 1) { username = currentAccounts[0].username; loadProfile(); } } function signOut() { const logoutRequest = { account: msalInstance.getAccountByUsername(username), postLogoutRedirectUri: 'https://italferr.esproweb.it/index.php', mainWindowRedirectUri: 'https://italferr.esproweb.it/index.php' }; msalInstance.logoutPopup(logoutRequest); } function signInAd() { msalInstance.loginPopup({}).then(function handleResponse(response) { if (response !== null) { selectAccount(); } else { App.alert({ container: '#login_alerts', type: 'danger', message: 'Impossibile contattare Azure AD', icon: 'warning' }); } }).catch(err => { App.alert({ container: '#login_alerts', type: 'danger', message: 'Impossibile contattare Azure AD', icon: 'warning' }); }); }