From 6ea687fa4792c8ee2d6160d9be6531507c1b8473 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Wed, 30 Aug 2023 17:17:06 +0200 Subject: [PATCH] add plugin settings page --- src/server/admin/api/getHandler.js | 2 + src/server/admin/api/postHandler.js | 6 +- src/server/assets/libreeventLogo.png | Bin 0 -> 58653 bytes src/server/backend/plugins/README.md | 2 +- src/server/backend/plugins/manager.js | 28 +++----- .../plugins/others/newsletter/plugin.json | 3 +- .../backend/plugins/others/poll/plugin.json | 1 + src/server/backend/plugins/plugin.json | 1 + .../main/src/views/admin/PluginsView.vue | 63 ++++++++++++++++-- .../main/src/views/admin/SettingsView.vue | 32 ++++++++- 10 files changed, 111 insertions(+), 27 deletions(-) create mode 100644 src/server/assets/libreeventLogo.png diff --git a/src/server/admin/api/getHandler.js b/src/server/admin/api/getHandler.js index 951b6dc..b8d238b 100644 --- a/src/server/admin/api/getHandler.js +++ b/src/server/admin/api/getHandler.js @@ -100,6 +100,8 @@ class GETHandler { } ); } else if ( call === 'getSettings' ) { resolve( this.settings ); + } else if ( call === 'getAllPlugins' ) { + resolve( this.pluginManager.getPlugins() ); } else { reject( { 'code': 404, 'error': 'Route not found' } ); } diff --git a/src/server/admin/api/postHandler.js b/src/server/admin/api/postHandler.js index ba880fe..aabc602 100644 --- a/src/server/admin/api/postHandler.js +++ b/src/server/admin/api/postHandler.js @@ -144,7 +144,11 @@ class POSTHandler { } ); resolve( 'ok' ); } else if ( call === 'updatePaymentGatewaySettings' ) { - resolve( 'ok' ); + this.pluginManager.savePaymentGatewaySettings( data ).then( () => { + resolve( 'ok' ); + } ).catch( err => { + reject( { 'code': 500, 'message': err } ); + } ); } else { reject( { 'code': 404, 'error': 'Route not found' } ); } diff --git a/src/server/assets/libreeventLogo.png b/src/server/assets/libreeventLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..baddb0570e6212a06591893688158f0a516a63f2 GIT binary patch literal 58653 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%0A6@!Muo$Zbw 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 PEobm_^>bP0l+XkKv(G!2 literal 0 HcmV?d00001 diff --git a/src/server/backend/plugins/README.md b/src/server/backend/plugins/README.md index 143414c..63ecd61 100644 --- a/src/server/backend/plugins/README.md +++ b/src/server/backend/plugins/README.md @@ -2,4 +2,4 @@ If you want to create a new plugin for libreevent, please follow our guide and guidelines in the official documentation [here](https://libreevent.janishutz.com/docs/contributing/plugins) -Each plugin should have a plugin.json file that uses the layout of the plugin.json file in this directory. As future libreevent might change what is required by the plugin.json file, please follow this repository to get news when this is about to happen. To retain backwards compatibility, we will for as long as possible not remove anything from the plugin.json files as possible, which means you can already update your plugin.json file before the next version of libreevent is released. \ No newline at end of file +Each plugin should have a plugin.json file that uses the layout of the plugin.json file in this directory. As future libreevent might change what is required by the plugin.json file, please follow this repository to get news when this is about to happen. To retain backwards compatibility, we will for as long as possible not remove anything from the plugin.json files as possible, which means you can already update your plugin.json file before the next version of libreevent is released. The plugin.json file already contains a "mainPluginURL" parameter which currently is not in use. \ No newline at end of file diff --git a/src/server/backend/plugins/manager.js b/src/server/backend/plugins/manager.js index 8ead0c8..fbe4ffa 100644 --- a/src/server/backend/plugins/manager.js +++ b/src/server/backend/plugins/manager.js @@ -17,26 +17,17 @@ const path = require( 'path' ); class PluginManager { constructor ( settings ) { this.paymentGateway = settings.payments; - this.allPlugins = {}; + this.pluginDetails = {}; fs.readdir( path.join( __dirname + '/others' ), ( err, ls ) => { for ( let file in ls ) { - const pluginSettings = JSON.parse( fs.readFileSync( path.join( __dirname + '/others/' + ls[ file ] + '/plugin.json' ) ) ); - this.allPlugins[ ls[ file ] ] = pluginSettings; + const pluginDetail = JSON.parse( fs.readFileSync( path.join( __dirname + '/others/' + ls[ file ] + '/plugin.json' ) ) ); + this.pluginDetails[ ls[ file ] ] = pluginDetail; } } ); } getPlugins () { - - } - - getPluginDetails ( plugin ) { - return new Promise( ( resolve, reject ) => { - fs.readFile( path.join( __dirname + '/others/' + plugin + '/plugin.json' ), ( err, file ) => { - if ( err ) reject( err ); - resolve( file ); - } ); - } ); + return this.pluginDetails; } loadPaymentGatewaySettings () { @@ -63,15 +54,14 @@ class PluginManager { } ); } - savePaymentGatewaySettings () { + savePaymentGatewaySettings ( settings ) { return new Promise( ( resolve, reject ) => { - + fs.writeFile( path.join( __dirname + '/payments/' + this.paymentGateway + '/config.payments.json' ), JSON.stringify( settings ), {}, ( err ) => { + if ( err ) reject( err ); + resolve( 'ok' ); + } ); } ); } - - saveSettings ( plugin, settings ) { - - } } module.exports = PluginManager; \ No newline at end of file diff --git a/src/server/backend/plugins/others/newsletter/plugin.json b/src/server/backend/plugins/others/newsletter/plugin.json index 5924cba..6bd128f 100644 --- a/src/server/backend/plugins/others/newsletter/plugin.json +++ b/src/server/backend/plugins/others/newsletter/plugin.json @@ -6,7 +6,8 @@ "pluginWebsite": "https://libreevent.janishutz.com/plugins/newsletter", "pluginDocs": "https://libreevent.janishutz.com/docs/plugins/newsletter", "gitURL": "https://github.com/simplePCBuilding/libreevent/tree/master/src/server/backend/plugins/others/newsletter", - "settingsURL": "/admin/plugins/newsletter/settings", + "settingsURL": "/admin/plugins/newsletter", "mainPluginURL": "/admin/plugins/newsletter", + "logo": "", "version": "1.0.0" } \ No newline at end of file diff --git a/src/server/backend/plugins/others/poll/plugin.json b/src/server/backend/plugins/others/poll/plugin.json index a0f901e..d3d9ba5 100644 --- a/src/server/backend/plugins/others/poll/plugin.json +++ b/src/server/backend/plugins/others/poll/plugin.json @@ -8,5 +8,6 @@ "gitURL": "https://github.com/simplePCBuilding/libreevent/tree/master/src/server/backend/plugins/others/poll", "settingsURL": "/admin/plugins/polls/settings", "mainPluginURL": "/polls", + "logo": "", "version": "1.0.0" } \ No newline at end of file diff --git a/src/server/backend/plugins/plugin.json b/src/server/backend/plugins/plugin.json index ce47f9f..fb426e6 100644 --- a/src/server/backend/plugins/plugin.json +++ b/src/server/backend/plugins/plugin.json @@ -8,5 +8,6 @@ "gitURL": "", "settingsURL": "", "mainPluginURL": "", + "logo": "", "version": "" } \ No newline at end of file diff --git a/src/webapp/main/src/views/admin/PluginsView.vue b/src/webapp/main/src/views/admin/PluginsView.vue index d525352..0949f5b 100644 --- a/src/webapp/main/src/views/admin/PluginsView.vue +++ b/src/webapp/main/src/views/admin/PluginsView.vue @@ -11,7 +11,16 @@ @@ -20,13 +29,59 @@ export default { data () { return { - formData: {} + allPlugins: {} } }, methods: { - setup () { - + loadData () { + fetch( '/admin/getAPI/getAllPlugins' ).then( res => { + if ( res.status === 200 ) { + res.json().then( json => { + this.allPlugins = json; + } ).catch( err => { + console.error( err ); + } ); + } + } ); } + }, + created () { + this.loadData(); } }; + + \ No newline at end of file diff --git a/src/webapp/main/src/views/admin/SettingsView.vue b/src/webapp/main/src/views/admin/SettingsView.vue index 41c9acc..df37948 100644 --- a/src/webapp/main/src/views/admin/SettingsView.vue +++ b/src/webapp/main/src/views/admin/SettingsView.vue @@ -65,6 +65,7 @@ return { adminAccounts: { 'janis': { 'username': 'janis', 'email': 'info@janishutz.com', 'permissions': [ ] }, 'admin': { 'username': 'admin', 'email': 'development@janishutz.com', 'permissions': [ ] } }, currentlyOpenMenu: '', + currentPopup: '', settings: { '2fa': { 'display': 'Require Two-Factor-Authentication of user', @@ -148,6 +149,7 @@ }, methods: { showAccountSettings ( account ) { + this.currentPopup = 'account'; this.$refs.popup.openPopup( 'Edit user permissions for ' + this.adminAccounts[ account ][ 'username' ], { 'pagesSettings': { 'display': 'Modify pages', @@ -181,6 +183,7 @@ , 'settings' ); }, showPaymentSettings () { + this.currentPopup = 'payments'; fetch( '/admin/getAPI/getPaymentGatewaySettings' ).then( res => { if ( res.status === 200 ) { res.json().then( json => { @@ -192,6 +195,7 @@ } ) }, createAccount() { + this.currentPopup = 'createAccount'; this.$refs.popup.openPopup( 'Create new admin user', { 'role': { 'display': 'User role', @@ -245,7 +249,33 @@ console.log( 'user canceled' ); return; } else if ( data.status === 'settings' ) { - console.log( 'settings processing' ) + console.log( this.currentPopup ); + if ( this.currentPopup === 'account' ) { + console.log( 'settings processing' ) + } else if ( this.currentPopup === 'payments' ) { + for ( let setting in data.data ) { + if ( !data.data[ setting ] ) { + this.$refs.notification.createNotification( 'Settings for the payment gateway are missing!', 10, 'error', 'normal' ); + this.showPaymentSettings(); + return; + } + } + let fetchOptions = { + method: 'post', + body: JSON.stringify( data.data ), + headers: { + 'Content-Type': 'application/json', + 'charset': 'utf-8' + } + }; + fetch( '/admin/API/updatePaymentGatewaySettings', fetchOptions ).then( res => { + if ( res.status === 200 ) { + this.$refs.notification.createNotification( 'Payment gateway settings saved!', 5, 'ok', 'normal' ); + } + } ) + } else if ( this.currentPopup === 'createAccount' ) { + + } } else { console.log( 'hi' ); }