Update plugins to only be enabled when ALLOW_PLUGINS=1 env variable is set or AllowPlugins: true in dev.js

This commit is contained in:
advplyr 2024-12-22 15:27:12 -06:00
parent 50e84fc2d5
commit e7e0056288
6 changed files with 37 additions and 17 deletions

View File

@ -109,13 +109,16 @@ export default {
id: 'config-authentication', id: 'config-authentication',
title: this.$strings.HeaderAuthentication, title: this.$strings.HeaderAuthentication,
path: '/config/authentication' path: '/config/authentication'
}, }
{ ]
if (this.$store.state.pluginsEnabled) {
configRoutes.push({
id: 'config-plugins', id: 'config-plugins',
title: 'Plugins', title: 'Plugins',
path: '/config/plugins' path: '/config/plugins'
} })
] }
if (this.currentLibraryId) { if (this.currentLibraryId) {
configRoutes.push({ configRoutes.push({

View File

@ -170,7 +170,10 @@ export default {
this.$store.commit('setServerSettings', serverSettings) this.$store.commit('setServerSettings', serverSettings)
this.$store.commit('setSource', Source) this.$store.commit('setSource', Source)
this.$store.commit('libraries/setEReaderDevices', ereaderDevices) this.$store.commit('libraries/setEReaderDevices', ereaderDevices)
this.$store.commit('setPlugins', plugins) if (plugins !== undefined) {
this.$store.commit('setPlugins', plugins)
}
this.$setServerLanguageCode(serverSettings.language) this.$setServerLanguageCode(serverSettings.language)
if (serverSettings.chromecastEnabled) { if (serverSettings.chromecastEnabled) {

View File

@ -29,7 +29,8 @@ export const state = () => ({
innerModalOpen: false, innerModalOpen: false,
lastBookshelfScrollData: {}, lastBookshelfScrollData: {},
routerBasePath: '/', routerBasePath: '/',
plugins: [] plugins: [],
pluginsEnabled: false
}) })
export const getters = { export const getters = {
@ -64,6 +65,7 @@ export const getters = {
return state.serverSettings.homeBookshelfView return state.serverSettings.homeBookshelfView
}, },
getPluginExtensions: (state) => (target) => { getPluginExtensions: (state) => (target) => {
if (!state.pluginsEnabled) return []
return state.plugins return state.plugins
.map((pext) => { .map((pext) => {
const extensionsMatchingTarget = pext.extensions?.filter((ext) => ext.target === target) || [] const extensionsMatchingTarget = pext.extensions?.filter((ext) => ext.target === target) || []
@ -256,5 +258,6 @@ export const mutations = {
}, },
setPlugins(state, val) { setPlugins(state, val) {
state.plugins = val state.plugins = val
state.pluginsEnabled = true
} }
} }

View File

@ -13,6 +13,7 @@ if (isDev) {
if (devEnv.SkipBinariesCheck) process.env.SKIP_BINARIES_CHECK = '1' if (devEnv.SkipBinariesCheck) process.env.SKIP_BINARIES_CHECK = '1'
if (devEnv.AllowIframe) process.env.ALLOW_IFRAME = '1' if (devEnv.AllowIframe) process.env.ALLOW_IFRAME = '1'
if (devEnv.BackupPath) process.env.BACKUP_PATH = devEnv.BackupPath if (devEnv.BackupPath) process.env.BACKUP_PATH = devEnv.BackupPath
if (devEnv.AllowPlugins) process.env.ALLOW_PLUGINS = '1'
process.env.SOURCE = 'local' process.env.SOURCE = 'local'
process.env.ROUTER_BASE_PATH = devEnv.RouterBasePath || '' process.env.ROUTER_BASE_PATH = devEnv.RouterBasePath || ''
} }

View File

@ -935,14 +935,12 @@ class Auth {
*/ */
async getUserLoginResponsePayload(user) { async getUserLoginResponsePayload(user) {
const libraryIds = await Database.libraryModel.getAllLibraryIds() const libraryIds = await Database.libraryModel.getAllLibraryIds()
return {
user: user.toOldJSONForBrowser(), let plugins = undefined
userDefaultLibraryId: user.getDefaultLibraryId(libraryIds), if (process.env.ALLOW_PLUGINS === '1') {
serverSettings: Database.serverSettings.toJSONForBrowser(),
ereaderDevices: Database.emailSettings.getEReaderDevices(user),
// TODO: Should be better handled by the PluginManager // TODO: Should be better handled by the PluginManager
// restrict plugin extensions that are not allowed for the user type // restrict plugin extensions that are not allowed for the user type
plugins: this.pluginManifests.map((manifest) => { plugins = this.pluginManifests.map((manifest) => {
const manifestExtensions = (manifest.extensions || []).filter((ext) => { const manifestExtensions = (manifest.extensions || []).filter((ext) => {
if (ext.restrictToAccountTypes?.length) { if (ext.restrictToAccountTypes?.length) {
return ext.restrictToAccountTypes.includes(user.type) return ext.restrictToAccountTypes.includes(user.type)
@ -950,7 +948,15 @@ class Auth {
return true return true
}) })
return { ...manifest, extensions: manifestExtensions } return { ...manifest, extensions: manifestExtensions }
}), })
}
return {
user: user.toOldJSONForBrowser(),
userDefaultLibraryId: user.getDefaultLibraryId(libraryIds),
serverSettings: Database.serverSettings.toJSONForBrowser(),
ereaderDevices: Database.emailSettings.getEReaderDevices(user),
plugins,
Source: global.Source Source: global.Source
} }
} }

View File

@ -151,10 +151,14 @@ class Server {
}) })
} }
// Initialize plugins if (process.env.ALLOW_PLUGINS === '1') {
await PluginManager.init() Logger.info(`[Server] Experimental plugin support enabled`)
// TODO: Prevents circular dependency for SocketAuthority
this.auth.pluginManifests = PluginManager.pluginManifests // Initialize plugins
await PluginManager.init()
// TODO: Prevents circular dependency for SocketAuthority
this.auth.pluginManifests = PluginManager.pluginManifests
}
} }
/** /**