/* ========================================================================
* 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);