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 0000000..baddb05 Binary files /dev/null and b/src/server/assets/libreeventLogo.png differ 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 @@

Plugins

Here you can manage installed plugins. If you want to install more plugins, please follow the guide here

-
+
+ + +

{{ plugin.pluginName }}

+

{{ plugin.pluginDescription }}

+

(Version V{{ plugin.version }}, maintained by {{ plugin.maintainer }})

+
+
@@ -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' ); }