/* ======================================================================== * Author : Lith * Version : 1.3 * Date : 2023-06-18 * Email : serset@yeah.net * ======================================================================== */ /* AuthService.js */ ; ((window) => { window.authStore = new AuthStore(); window.authService = new AuthService(); function AuthStore() { // getQueryString('name') getQueryString("aaa.html?a=1&b=2",'name') this.getQueryString = function (key, src) { if (!src) src = location.search; var v = (src.match(new RegExp("(?:\\?|&)" + key + "=(.*?)(?=&|$)")) || ['', null])[1]; return v && decodeURIComponent(v); }; this.clearToken = function () { localStorage.removeItem('jwt_token'); localStorage.removeItem('jwt_token_expires_time'); }; this.cacheToken = function (accessToken) { localStorage.setItem('jwt_token', accessToken.access_token); let expires_time = parseInt(accessToken.expires_time); if (!expires_time && accessToken.expires_in) { let expires_in = accessToken.expires_in - 10; expires_time = accessToken.expires_time = new Date().getTime() + expires_in * 1000; } if (!expires_time || expires_time <= new Date().getTime()) { return null; } localStorage.setItem('jwt_token_expires_time', expires_time); return { access_token: localStorage.getItem('jwt_token'), expires_time: localStorage.getItem('jwt_token_expires_time') }; }; //{access_token:'xx',expires_time:'1686857267655'} this.getToken = function () { var expires_time = parseInt(localStorage.getItem('jwt_token_expires_time')); if (expires_time) { if (expires_time <= new Date().getTime()) { localStorage.removeItem('jwt_token'); localStorage.removeItem('jwt_token_expires_time'); } else { return { access_token: localStorage.getItem('jwt_token'), expires_time: localStorage.getItem('jwt_token_expires_time') }; } } return null; }; } function AuthService() { this.audience; this.loginUrl = '/login.html'; this.indexUrl = '/'; this.ssoBaseUrl = 'https://sso.lith.cloud'; this.onLoginSuccess = null; this.accessToken = null; let self = this; function jumpToSsoLogin() { //'https://sso.vit.com.cn/connect/authorize?client_id=Vit.SSO.Example&redirect_uri=http://localhost:5000&response_type=token&scope=openid profile email phone&state=123&nonce=456&audience=common'; let url = self.ssoBaseUrl + '/login.html?redirect_uri=' + encodeURIComponent(location.href); if (self.audience) url += '&audience=' + encodeURIComponent(self.audience); window.location.href = url; } function jumpToPrevUrl() { let redirect_uri = localStorage.getItem('jwt_redirect_uri'); if (redirect_uri) { localStorage.removeItem('jwt_redirect_uri'); window.location.href = redirect_uri; } else { window.location.href = self.indexUrl; } }; // authClient.login(); this.login = function () { let access_token = authStore.getQueryString('access_token'); if (access_token) { var expires_time = authStore.getQueryString('expires_time'); this.accessToken = authStore.cacheToken({ access_token, expires_time }); if (this.accessToken) { try { if (this.onLoginSuccess) this.onLoginSuccess(this.accessToken); } catch (e) { console.log(e); } jumpToPrevUrl(); return this.accessToken; } } this.accessToken = authStore.getToken(); if (this.accessToken) { jumpToPrevUrl(); return this.accessToken; } jumpToSsoLogin(); return false; }; this.logoff = function (redirect_uri) { this.accessToken = null; authStore.clearToken(); if (!redirect_uri) redirect_uri = new URL(this.indexUrl, location.origin).toString(); window.location.href = self.ssoBaseUrl + '/logoff.html?redirect_uri=' + encodeURIComponent(redirect_uri); }; // authService.makeSureLogin(); this.makeSureLogin = function () { this.accessToken = authStore.getToken(); if (this.accessToken) { return this.accessToken; } localStorage.setItem('jwt_redirect_uri', location.href); window.location.href = this.loginUrl; return false; }; } try { let config = (typeof (AuthService_Config) == 'object') ? AuthService_Config : {}; if (config.loginUrl) authService.loginUrl = config.loginUrl; if (config.indexUrl) authService.indexUrl = config.indexUrl; if (config.onLoginSuccess) authService.onLoginSuccess = config.onLoginSuccess; if (config.ssoBaseUrl) authService.ssoBaseUrl = config.ssoBaseUrl; if (config.audience) authService.audience = config.audience; if ('true' == document.currentScript.getAttribute('makeSureLogin')) { if (config.autoLogin !== false) authService.makeSureLogin(); } else if ('true' == document.currentScript.getAttribute('login')) { authService.login(); } } catch (e) { console.log(e); } })(window);