/home/ivoiecob/email.hirewise-va.com/modules/AdminPanelWebclient/vue/src/settings.js
import { Quasar } from 'quasar'
import { i18n, loadLanguageAsync } from 'boot/i18n'
import axios from 'axios'
import VueCookies from 'vue-cookies'
import store from 'src/store'
import enums from 'src/enums'
import _ from 'lodash'
import notification from 'src/utils/notification'
import typesUtils from 'src/utils/types'
import urlUtils from 'src/utils/url'
class AdminPanelSettings {
constructor(appData, settings) {
const coreData = typesUtils.pObject(appData.Core)
this.enableMultiTenant = typesUtils.pBool(coreData.EnableMultiTenant)
this.authTokenCookieExpireTime = typesUtils.pInt(coreData.AuthTokenCookieExpireTime, 30)
this.autodetectLanguage = typesUtils.pBool(coreData.AutodetectLanguage)
this.isSystemConfigured = typesUtils.pBool(coreData.IsSystemConfigured)
this.language = typesUtils.pString(coreData.CommonLanguage, 'English')
this.shortLanguage = this._getShortLanguage(coreData)
this.setSiteName(coreData.SiteName)
this.storeAuthTokenInDB = typesUtils.pBool(coreData.StoreAuthTokenInDB)
this.timeFormat = typesUtils.pString(coreData.TimeFormat) // 0 - 24, 1 - 12
this.cookiePath = typesUtils.pString(coreData.CookiePath)
if (this.cookiePath === '') {
this.cookiePath = urlUtils.getAdminAppPath()
}
if (process.env.DEV) {
this.cookiePath = '/'
}
this.cookieSecure = typesUtils.pBool(coreData.CookieSecure)
this.version = typesUtils.pString(coreData.Version)
this.productName = typesUtils.pString(coreData.ProductName)
this.enableLogging = typesUtils.pBool(coreData.EnableLogging)
this.enableEventLogging = typesUtils.pBool(coreData.EnableEventLogging)
this.loggingLevel = typesUtils.pInt(coreData.LoggingLevel, 100)
// only for admin
this.allowGroups = typesUtils.pBool(coreData.AllowGroups)
this.adminHasPassword = typesUtils.pBool(coreData.AdminHasPassword)
this.adminLanguage = typesUtils.pString(coreData.AdminLanguage)
this.adminLogin = typesUtils.pString(coreData.AdminLogin)
this.dbHost = typesUtils.pString(coreData.DBHost)
this.dbLogin = typesUtils.pString(coreData.DBLogin)
this.dbName = typesUtils.pString(coreData.DBName)
this.encryptionKeyNotEmpty = typesUtils.pBool(coreData.EncryptionKeyNotEmpty)
const coreWebclientData = typesUtils.pObject(appData.CoreWebclient)
this.baseUrl = typesUtils.pString(coreWebclientData.BaseUrl)
this.languageList = typesUtils.pArray(coreWebclientData.LanguageListWithNames, { name: 'English', text: 'English' })
this.theme = typesUtils.pString(coreWebclientData.Theme, 'Default')
this.themeList = typesUtils.pArray(coreWebclientData.ThemeList, ['Default'])
const adminPanelWebclientData = typesUtils.pObject(appData.AdminPanelWebclient)
this.entitiesOrder = typesUtils.pArray(adminPanelWebclientData.EntitiesOrder)
this.entitiesPerPage = typesUtils.pInt(adminPanelWebclientData.EntitiesPerPage, 10)
this.tabsOrder = typesUtils.pArray(adminPanelWebclientData.TabsOrder)
const coreMobileWebclient = typesUtils.pObject(appData.CoreMobileWebclient)
this.mobileTheme = typesUtils.pString(coreMobileWebclient.Theme, 'Default')
this.mobileThemeList = typesUtils.pArray(coreMobileWebclient.ThemeList, ['Default'])
const appDataSectionLogsViewerWebclient = typesUtils.pObject(appData.LogsViewerWebclient)
this.viewLastLogSize = typesUtils.pInt(appDataSectionLogsViewerWebclient.ViewLastLogSize)
}
showErrorsIfSystemNotConfigured() {
if (this.isSystemConfigured === false) {
notification.showError(i18n.global.tc('COREWEBCLIENT.ERROR_SYSTEM_NOT_CONFIGURED'), 0)
}
if (store.getters['user/isUserSuperAdmin']) {
this.showErrorIfConfigIsAccessible()
if (!this.adminHasPassword) {
this.dismissPasswordError = notification.showError(
i18n.global.tc('ADMINPANELWEBCLIENT.ERROR_ADMIN_EMPTY_PASSWORD'),
0
)
}
if (!this.encryptionKeyNotEmpty) {
notification.showError(i18n.global.tc('ADMINPANELWEBCLIENT.ERROR_ENCRYPTION_KEY_EMPTY'), 0)
}
if (this.dbLogin === '' || this.dbHost === '' || this.dbName === '') {
this.dismissDbError = notification.showError(i18n.global.tc('ADMINPANELWEBCLIENT.ERROR_DB_ACCESS'), 0)
}
}
}
getBaseUrl() {
let baseUrl = this.baseUrl
if (_.isEmpty(baseUrl)) {
baseUrl = urlUtils.getAdminAppPath()
}
return baseUrl
}
showErrorIfConfigIsAccessible() {
axios({
method: 'get',
url: this.getBaseUrl() + 'data/settings/config.json',
})
.then((response) => {
const isOkResponse = !!response && response.status === 200 && !!response.data
if (isOkResponse) {
notification.showError(i18n.global.tc('ADMINPANELWEBCLIENT.ERROR_DATA_FOLDER_ACCESSIBLE_FROM_WEB'), 0)
}
})
.catch((/* error */) => {
// Do nothing. It is good that config file is not available
})
}
saveAdminAccountData({ login, hasPassword, language }) {
this.adminLogin = login
this.adminHasPassword = hasPassword
if (this.adminHasPassword && _.isFunction(this.dismissPasswordError)) {
this.dismissPasswordError()
this.dismissPasswordError = null
}
if (this.adminLanguage !== language) {
this.adminLanguage = language
window.location.reload()
}
}
saveLoggingData({ enableLogging, enableEventLogging, loggingLevel }) {
this.enableLogging = enableLogging
this.enableEventLogging = enableEventLogging
this.loggingLevel = loggingLevel
}
saveCommonSettingData({ siteName, theme, mobileTheme, language, timeFormat, autodetectLanguage }) {
this.setSiteName(siteName)
this.theme = theme
this.mobileTheme = mobileTheme
this.language = language
this.timeFormat = timeFormat
this.autodetectLanguage = autodetectLanguage
}
setSiteName(siteName) {
this.siteName = typesUtils.pString(siteName)
store.commit('main/setSiteName', this.siteName)
}
saveDatabaseSetting({ dbName, dbLogin, dbHost }) {
this.dbName = dbName
this.dbLogin = dbLogin
this.dbHost = dbHost
if (
!_.isEmpty(this.dbLogin) &&
!_.isEmpty(this.dbHost) &&
!_.isEmpty(this.dbName) &&
_.isFunction(this.dismissDbError)
) {
this.dismissDbError()
this.dismissDbError = null
}
}
_getShortLanguage(coreData) {
let shortLanguage = typesUtils.pString(coreData.ShortLanguage, 'en')
if (_.isEmpty(shortLanguage) || i18n.global.availableLocales.indexOf(shortLanguage) === -1) {
if (i18n.global.availableLocales.indexOf('en') !== -1) {
shortLanguage = 'en'
} else if (!_.isEmpty(i18n.availableLocales)) {
shortLanguage = i18n.availableLocales[0]
}
}
return shortLanguage
}
}
let settings = null
export default {
async initQuasarLang(shortLanguage) {
try {
const quasarLangs = {
// ar: 'ar',
// bg: 'bg',
// 'zh-tw': 'zh-hant',
// 'zh-cn': 'zh-hans',
// cs: 'cs',
// da: 'da',
// nl: 'nl',
en: 'en-US',
// et: 'et',
// fi: 'fi',
// fr: 'fr',
// de: 'de',
// el: 'el',
// he: 'he',
// hu: 'hu',
// it: 'it',
// ja: 'ja',
// ko: 'ko-kr',
// lv: 'lv',
// // lt: 'lt',
// nb: 'nb-no',
// fa: 'fa',
// pl: 'pl',
// 'pt-br': 'pt-br',
// pt: 'pt',
// ro: 'ro',
// ru: 'ru',
// sr: 'sr',
// sl: 'sl',
// es: 'es',
// sv: 'sv',
// th: 'th',
// tr: 'tr',
// uk: 'uk',
// vi: 'vi'
}
const quasarLang = quasarLangs[shortLanguage]
if (quasarLang) {
await import(
/* webpackInclude: /(de|en-US)\.js$/ */
'quasar/lang/' + quasarLang
).then((lang) => {
Quasar.lang.set(lang.default)
})
}
} catch (err) {
// Requested Quasar Language Pack does not exist,
// let's not break the app, so catching error
}
},
async init(appData) {
settings = new AdminPanelSettings(appData)
settings.showErrorsIfSystemNotConfigured()
if (!_.isEmpty(settings.shortLanguage) && i18n.global.availableLocales.indexOf(settings.shortLanguage) !== -1) {
loadLanguageAsync(settings.shortLanguage)
this.initQuasarLang(settings.shortLanguage)
}
VueCookies.config('', settings.cookiePath, '', settings.cookieSecure)
},
getEnableMultiTenant() {
return settings.enableMultiTenant
},
getAllowGroups() {
return settings.allowGroups
},
getTabsOrder() {
return settings?.tabsOrder || []
},
getTabsBarOrder(userRole) {
const UserRoles = enums.getUserRoles()
let order = []
if (userRole === UserRoles.SuperAdmin) {
order = settings.entitiesOrder.map((entityName) => {
switch (entityName) {
case 'Tenant':
return 'tenants'
case 'User':
return 'users'
case 'Group':
return 'groups'
case 'Domain':
return 'domains'
default:
return entityName
}
})
order.unshift('system')
} else if (userRole === UserRoles.TenantAdmin) {
order = ['tenants', 'users']
}
return order
},
getEntitiesPerPage() {
return settings.entitiesPerPage
},
getAboutSettings() {
return {
version: settings?.version || '',
productName: settings?.productName || '',
}
},
getLanguageList() {
return settings?.languageList || []
},
getThemeList() {
return settings?.themeList || []
},
getMobileThemeList() {
return settings?.mobileThemeList || []
},
getCookieSettings() {
if (!settings) {
VueCookies.config('', window.location.pathname, '', true)
return {
authTokenCookieExpireTime: 0,
cookieSecure: true,
cookiePath: window.location.pathname,
cookieBasePath: window.location.pathname.replace('/adminpanel', ''),
}
}
const pathParts = settings.cookiePath.split('/')
let lastPart = pathParts[pathParts.length - 1]
if (_.isEmpty(lastPart) && pathParts.length > 2) {
lastPart = pathParts[pathParts.length - 2]
}
const cookieBasePath = settings.cookiePath.replace(lastPart, '').replace('//', '/')
return {
authTokenCookieExpireTime: settings.authTokenCookieExpireTime,
cookieSecure: settings.cookieSecure,
cookiePath: settings.cookiePath,
cookieBasePath,
}
},
getAdminAccountData() {
return {
adminLogin: settings?.adminLogin || '',
adminHasPassword: settings?.adminHasPassword || false,
adminLanguage: settings?.adminLanguage || '',
}
},
getCommonSettingData() {
return {
siteName: settings.siteName,
theme: settings.theme,
mobileTheme: settings.mobileTheme,
language: settings.language,
timeFormat: settings.timeFormat,
autodetectLanguage: settings.autodetectLanguage,
}
},
getDatabaseSettingsData() {
return {
dbName: settings.dbName,
dbLogin: settings.dbLogin,
dbHost: settings.dbHost,
}
},
getStoreAuthTokenInDB() {
return settings.storeAuthTokenInDB
},
getLoggingData() {
return {
enableEventLogging: settings.enableEventLogging,
enableLogging: settings.enableLogging,
loggingLevel: settings.loggingLevel,
viewLastLogSize: settings.viewLastLogSize,
}
},
getBaseUrl() {
return settings.getBaseUrl()
},
saveAdminAccountData(data) {
settings.saveAdminAccountData(data)
},
saveCommonSettingData(data) {
settings.saveCommonSettingData(data)
},
saveDatabaseSetting(data) {
settings.saveDatabaseSetting(data)
},
saveLoggingData(data) {
settings.saveLoggingData(data)
},
}