import Keycloak from 'keycloak-js' import Vue from 'vue' import 'element-ui/lib/theme-chalk/index.css' import './scss/index.scss' import Element from 'element-ui' import App from './App' import store from './store' import router from './router' import './icons' import './permission' import { Role, Access } from './constant' import Wrapper from './components/Wrapper' import Permission from './components/Permission' import StatusWrapper from './components/StatusWrapper' import Pagination from './components/Pagination' import CTable from './components/CTable' import AutoText from './components/AutoText' import EditInput from './components/EditInput' import SearchInput from './components/SearchInput' import { showLoading, closeLoading } from './utils/pop' function startApp () { document.body.setAttribute('version', __VERSION__) Vue.use(Element) Vue.component('Wrapper', Wrapper) Vue.component('Permission', Permission) Vue.component('StatusWrapper', StatusWrapper) Vue.component('Pagination', Pagination) Vue.component('CTable', CTable) Vue.component('AutoText', AutoText) Vue.component('EditInput', EditInput) Vue.component('SearchInput', SearchInput) Vue.prototype.$keycloak = keycloak Vue.prototype.$showLoading = showLoading Vue.prototype.$closeLoading = closeLoading Vue.prototype.Access = Access Vue.prototype.__PLACEHOLDER__ = __PLACEHOLDER__ Vue.prototype.__SENSOR_ELK__ = __SENSOR_ELK__ Vue.config.productionTip = false Vue.config.errorHandler = err => { closeLoading() throw err } store.dispatch('user/login', keycloak) store.dispatch('permission/generateRoutes', store.getters.roles) router.addRoutes(store.getters.permissionRoutes) Vue.prototype.hasEditPermission = !store.getters.roles.has(Role.VISITOR) new Vue({ router, store, render: h => h(App) }).$mount('#app') } const initOptions = { url: process.env.VUE_APP_KEYCLOAK_OPTIONS_URL, realm: process.env.VUE_APP_KEYCLOAK_OPTIONS_REALM, clientId: process.env.VUE_APP_KEYCLOAK_OPTIONS_CLIENTID, onLoad: process.env.VUE_APP_KEYCLOAK_OPTIONS_ONLOAD } const keycloak = Keycloak(initOptions) keycloak .init({ onLoad: initOptions.onLoad }) .then(auth => { if (!auth) { console.error('Authenticated Failed[403]') return } console.log(keycloak) // Token Refresh setInterval(() => { keycloak.updateToken(70).then(refreshed => { if (refreshed) { console.info('Token refreshed', keycloak) store.commit('user/SET_TOKEN', keycloak.token) } else { console.warn(`Token not refreshed, valid for ${Math.round(keycloak.tokenParsed.exp + keycloak.timeSkew - new Date().getTime() / 1000)} seconds`) } }).catch(() => console.error('Failed to refresh token')) }, 6000) }) .catch(() => console.error('Authenticated Failed')) .finally(startApp)