From 1beba0131afd14fe074fa28751e932813c71f051 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sun, 13 Aug 2023 15:07:41 +0200 Subject: [PATCH] add plugin loader --- src/server/app.js | 7 +++--- src/server/backend/plugins/README.md | 5 ++++ .../plugins/newsletter/newsletterRoutes.js | 0 .../others/newsletter/newsletterRoutes.js | 10 ++++++++ .../plugins/others/newsletter/plugin.json | 12 ++++++++++ .../backend/plugins/others/poll/plugin.json | 12 ++++++++++ .../backend/plugins/others/poll/pollRoutes.js | 12 ++++++++++ src/server/backend/plugins/payments/README.md | 4 ---- src/server/backend/plugins/plugin.json | 12 ++++++++++ src/server/backend/plugins/pluginLoader.js | 23 +++++++++++++++++++ src/server/backend/plugins/poll/pollRoutes.js | 0 11 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 src/server/backend/plugins/README.md delete mode 100644 src/server/backend/plugins/newsletter/newsletterRoutes.js create mode 100644 src/server/backend/plugins/others/newsletter/newsletterRoutes.js create mode 100644 src/server/backend/plugins/others/newsletter/plugin.json create mode 100644 src/server/backend/plugins/others/poll/plugin.json create mode 100644 src/server/backend/plugins/others/poll/pollRoutes.js create mode 100644 src/server/backend/plugins/plugin.json create mode 100644 src/server/backend/plugins/pluginLoader.js delete mode 100644 src/server/backend/plugins/poll/pollRoutes.js diff --git a/src/server/app.js b/src/server/app.js index 74eb305..986b54d 100644 --- a/src/server/app.js +++ b/src/server/app.js @@ -84,16 +84,17 @@ if ( settings.init ) { require( './admin/adminAPIRoutes.js' )( app, settings ); // admin api routes require( './backend/userAPIRoutes.js' )( app, settings ); // admin api routes require( './backend/userRoutes.js' )( app, settings ); // user routes + require( './backend/payments/paymentRoutes.js' )( app, settings ); // payment routes + console.log( '[ Server ] loading plugins' ); + require( './backend/plugins/pluginLoader.js' )( app, settings ); } else { require( './setup/setupRoutes.js' )( app, settings ); // setup routes file = path.join( __dirname + '/webapp/setup/dist/index.html' ); } -console.log( '[ Server ] loading plugins' ); // TODO: load dynamically // require( './backend/plugins/payments/stripe/stripeRoutes.js' )( app, settings ); // stripe routes -require( './backend/plugins/payments/payrexx/payrexxRoutes.js' )( app, settings ); // payrexx routes -require( './backend/payments/paymentRoutes.js' )( app, settings ); // payment routes +// require( './backend/plugins/payments/payrexx/payrexxRoutes.js' )( app, settings ); // payrexx routes app.use( ( request, response ) => { response.sendFile( file ); diff --git a/src/server/backend/plugins/README.md b/src/server/backend/plugins/README.md new file mode 100644 index 0000000..143414c --- /dev/null +++ b/src/server/backend/plugins/README.md @@ -0,0 +1,5 @@ +# Plugins + +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 diff --git a/src/server/backend/plugins/newsletter/newsletterRoutes.js b/src/server/backend/plugins/newsletter/newsletterRoutes.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/server/backend/plugins/others/newsletter/newsletterRoutes.js b/src/server/backend/plugins/others/newsletter/newsletterRoutes.js new file mode 100644 index 0000000..80cb39b --- /dev/null +++ b/src/server/backend/plugins/others/newsletter/newsletterRoutes.js @@ -0,0 +1,10 @@ +/* +* libreevent - newsletterRoutes.js +* +* Created by Janis Hutz 08/13/2023, Licensed under the GPL V3 License +* https://janishutz.com, development@janishutz.com +* +* +*/ + +module.exports = ( app, settings ) => {}; \ 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 new file mode 100644 index 0000000..5924cba --- /dev/null +++ b/src/server/backend/plugins/others/newsletter/plugin.json @@ -0,0 +1,12 @@ +{ + "pluginName": "Newsletter", + "pluginDescription": "Send newsletters to your customers using a file editor", + "creator": "Janis Hutz", + "maintainer": "Janis Hutz", + "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", + "mainPluginURL": "/admin/plugins/newsletter", + "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 new file mode 100644 index 0000000..a0f901e --- /dev/null +++ b/src/server/backend/plugins/others/poll/plugin.json @@ -0,0 +1,12 @@ +{ + "pluginName": "Polls", + "pluginDescription": "Create polls to ask the customers questions about your event!", + "creator": "Janis Hutz", + "maintainer": "Janis Hutz", + "pluginWebsite": "https://libreevent.janishutz.com/plugins/polls", + "pluginDocs": "https://libreevent.janishutz.com/docs/plugins/polls", + "gitURL": "https://github.com/simplePCBuilding/libreevent/tree/master/src/server/backend/plugins/others/poll", + "settingsURL": "/admin/plugins/polls/settings", + "mainPluginURL": "/polls", + "version": "1.0.0" +} \ No newline at end of file diff --git a/src/server/backend/plugins/others/poll/pollRoutes.js b/src/server/backend/plugins/others/poll/pollRoutes.js new file mode 100644 index 0000000..d031565 --- /dev/null +++ b/src/server/backend/plugins/others/poll/pollRoutes.js @@ -0,0 +1,12 @@ +/* +* libreevent - pollRoutes.js +* +* Created by Janis Hutz 08/13/2023, Licensed under the GPL V3 License +* https://janishutz.com, development@janishutz.com +* +* +*/ + +module.exports = ( app, settings ) => { + +}; \ No newline at end of file diff --git a/src/server/backend/plugins/payments/README.md b/src/server/backend/plugins/payments/README.md index 9d80b44..390b8b1 100644 --- a/src/server/backend/plugins/payments/README.md +++ b/src/server/backend/plugins/payments/README.md @@ -13,10 +13,6 @@ The express.js routes it has to expose are the following: It can contain any number of (not interfering) routes. Please always use the /payments/ route as a base to avoid running into problems. - -## The plugin.json file -The plugin.json file should look as follows: - ## configOption.json This file contains the settings that should be available in the settings page of libreevent. It should contain the following fields, as required by the settings.vue module. diff --git a/src/server/backend/plugins/plugin.json b/src/server/backend/plugins/plugin.json new file mode 100644 index 0000000..ce47f9f --- /dev/null +++ b/src/server/backend/plugins/plugin.json @@ -0,0 +1,12 @@ +{ + "pluginName": "", + "pluginDescription": "", + "creator": "", + "maintainer": "", + "pluginWebsite": "", + "pluginDocs": "", + "gitURL": "", + "settingsURL": "", + "mainPluginURL": "", + "version": "" +} \ No newline at end of file diff --git a/src/server/backend/plugins/pluginLoader.js b/src/server/backend/plugins/pluginLoader.js new file mode 100644 index 0000000..04a29f5 --- /dev/null +++ b/src/server/backend/plugins/pluginLoader.js @@ -0,0 +1,23 @@ +/* +* libreevent - pluginLoader.js +* +* Created by Janis Hutz 08/13/2023, Licensed under the GPL V3 License +* https://janishutz.com, development@janishutz.com +* +* +*/ + +const fs = require( 'fs' ); +const path = require( 'path' ); + +module.exports = ( app, settings ) => { + let otherPlugins = fs.readdirSync( path.join( __dirname + '/others' ) ); + console.log( '\n\n' ); + for ( let plugin in otherPlugins ) { + console.log( '[ Plugin Loader ] Loaded plugin "' + otherPlugins[ plugin ] + '"' ); + require( './others/' + otherPlugins[ plugin ] + '/' + otherPlugins[ plugin ] + 'Routes.js' )( app, settings ); + } + + require( './payments/' + settings.payments + '/' + settings.payments + 'Routes.js' )( app, settings ); + console.log( '[ Plugin Loader ] Loaded ' + settings.payments + ' as payment gateway' ); +}; \ No newline at end of file diff --git a/src/server/backend/plugins/poll/pollRoutes.js b/src/server/backend/plugins/poll/pollRoutes.js deleted file mode 100644 index e69de29..0000000