general event settings done

This commit is contained in:
2023-08-12 14:49:36 +02:00
parent e634ac5381
commit 029181329a
11 changed files with 101 additions and 82 deletions

View File

@@ -9,13 +9,14 @@
const posth = require( './api/postHandler.js' );
const geth = require( './api/getHandler.js' );
const postHandler = new posth();
const path = require( 'path' );
const bodyParser = require( 'body-parser' );
const mlt = require( 'multer' );
const multer = mlt();
const fs = require( 'fs' );
const getHandler = new geth( JSON.parse( fs.readFileSync( path.join( __dirname + '/../config/settings.config.json' ) ) ) );
const settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/../config/settings.config.json' ) ) );
const getHandler = new geth( settings );
const postHandler = new posth( settings );
// settings is missing in arguments which shouldn't pose any problem
@@ -39,6 +40,7 @@ module.exports = ( app ) => {
postHandler.handleCall( req.params.call, req.body, req.query.lang ).then( data => {
res.send( data );
} ).catch( error => {
console.error( error );
res.status( error.code ).send( error.error );
} );
} else {

View File

@@ -8,10 +8,12 @@
*/
const db = require( '../../backend/db/db.js' );
const fs = require( 'fs' );
const path = require( 'path' );
class POSTHandler {
constructor () {
constructor ( settings ) {
this.settings = settings;
}
handleCall ( call, data, lang ) {
@@ -113,8 +115,12 @@ class POSTHandler {
} else if ( call === 'deleteAdminAccount' ) {
// TODO: Finish
} else if ( call === 'updateSettings' ) {
// TODO: Finish
this.settings[ 'twoFA' ] = data.twoFA;
this.settings[ 'currency' ] = data.currency;
this.settings[ 'payments' ] = data.payments;
fs.writeFileSync( path.join( __dirname + '/../../config/settings.config.json' ), JSON.stringify( this.settings ) );
// TODO: Parse all events and update currency
resolve( 'ok' );
} else {
reject( { 'code': 404, 'error': 'Route not found' } );
}

View File

@@ -0,0 +1,4 @@
{
"APISecret": "",
"instance": ""
}

View File

@@ -13,7 +13,7 @@ const qs = require( 'qs' );
const axios = require( 'axios' );
const Base64 = require( 'crypto-js/enc-base64' );
const hmacSHA256 = require( 'crypto-js/hmac-sha256' );
const payrexxConfig = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../../../config/payments.config.secret.json' ) ) )[ 'payrexx' ];
const payrexxConfig = JSON.parse( fs.readFileSync( path.join( __dirname + '/config.payments.secret.json' ) ) );
const baseUrl = 'https://api.payrexx.com/v1.0/';
const instance = payrexxConfig.instance;

View File

@@ -7,10 +7,11 @@
*
*/
const fs = require( 'fs' );
const path = require( 'path' );
const db = require( '../../../db/db.js' );
const payrexxConfig = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../../../config/payments.config.secret.json' ) ) )[ 'payrexx' ];
// const fs = require( 'fs' );
// const path = require( 'path' );
// const payrexxConfig = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../../../config/payments.config.secret.json' ) ) )[ 'payrexx' ];
// TODO: Verify that it works with temporary site on webhosting account
const bodyParser = require( 'body-parser' );
const ticket = require( '../../../tickets/ticketGenerator.js' );
const payrexxModule = require( './module.payrexx.js' );
@@ -32,7 +33,6 @@ module.exports = ( app, settings ) => {
'failedRedirectUrl': settings.yourDomain + '/payments/failed',
'currency': settings.currency,
'basket': [],
'pm': payrexxConfig.paymentMethods,
'amount': 0,
};

View File

@@ -0,0 +1,4 @@
{
"APIKey": "",
"endpointSecret": ""
}

View File

@@ -10,7 +10,8 @@
const fs = require( 'fs' );
const path = require( 'path' );
const db = require( '../../../db/db.js' );
const stripeConfig = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../../../config/payments.config.secret.json' ) ) )[ 'stripe' ];
// TODO: update config files to non-secret version for final version
const stripeConfig = JSON.parse( fs.readFileSync( path.join( __dirname + '/config.payments.secret.json' ) ) );
const stripe = require( 'stripe' )( stripeConfig[ 'APIKey' ] );
const bodyParser = require( 'body-parser' );
const ticket = require( '../../../tickets/ticketGenerator.js' );

View File

@@ -1,11 +0,0 @@
{
"stripe": {
"APIKey": "",
"endpointSecret": ""
},
"payrexx": {
"APISecret": "",
"instance": "",
"pm": []
}
}

View File

@@ -1,13 +1 @@
{
"init": true,
"twoFA": "allow",
"setupKey": "hello world",
"twoFAMode": "enhanced",
"db": "mysql",
"payments": "payrexx",
"name": "libreevent",
"yourDomain": "http://localhost:8080",
"mailSender": "libreevent <info@libreevent.janishutz.com>",
"maxTickets": 10,
"currency": "CHF"
}
{"init":true,"twoFA":"enforce","setupKey":"hello world","twoFAMode":"enhanced","db":"mysql","payments":"stripe","name":"libreevent","yourDomain":"http://localhost:8080","mailSender":"libreevent <info@libreevent.janishutz.com>","maxTickets":10,"currency":"CHF"}

View File

@@ -26,6 +26,7 @@
</td>
</tr>
</table>
<button @click="save()">Save</button>
<p>Detailed explanation of payment gateways can be found <a href="https://libreevent.janishutz.com/docs/payments" target="_blank">here</a>. You may install more payment gateway integrations in the plugins section. Only one may be used at any given time.</p>
<div class="admin-settings">
@@ -42,6 +43,7 @@
</div>
<rightClickMenu ref="rclk" @command="( command ) => { executeCommand( command ) }"></rightClickMenu>
<popups ref="popup" size="big" @data="( data ) => { handlePopupReturns( data ); }"></popups>
<notifications ref="notification" location="topright" size="bigger"></notifications>
</div>
</template>
@@ -49,6 +51,7 @@
import settings from '@/components/settings/settings.vue';
import popups from '@/components/notifications/popups.vue';
import rightClickMenu from '@/components/settings/rightClickMenu.vue';
import notifications from '@/components/notifications/notifications.vue';
export default {
name: 'adminSettingsView',
@@ -56,6 +59,7 @@
settings,
popups,
rightClickMenu,
notifications,
},
data () {
return {
@@ -66,44 +70,44 @@
'display': 'Require Two-Factor-Authentication of user',
'id': '2fa',
'tooltip':'Control whether or not users are required to use Two-Factor-Authentication. Defaults to "User can decide", which is recommended',
'value': 'always',
'value': 'enforce',
'type': 'select',
'restrictions': {
'always': {
'enforce': {
'displayName':'Always require',
'value': 'always'
'value': 'enforce'
},
'userDecided': {
'allow': {
'displayName':'User can decide',
'value': 'userDecided'
'value': 'allow'
},
'never': {
'disable': {
'displayName':'Disable',
'value': 'never'
'value': 'disable'
},
}
},
'addressRequired': {
'display': 'Require user to provide address?',
'id': 'addressRequired',
'tooltip':'With this toggle you may specify whether or not a user has to provide their address when purchasing something. (Keep GDPR in mind when processing data!)',
'value': false,
'type': 'toggle',
},
'phoneNumberRequired': {
'display': 'Require user to provide phone number?',
'id': 'phoneNumberRequired',
'tooltip':'With this toggle you may specify whether or not a user has to provide their phone number when purchasing something. (Keep GDPR in mind when processing data!)',
'value': false,
'type': 'toggle',
},
'dobRequired': {
'display': 'Require user to provide their birth date?',
'id': 'dobRequired',
'tooltip':'With this toggle you may specify whether or not a user has to provide their date of birth when purchasing something. (Keep GDPR in mind when processing data!)',
'value': false,
'type': 'toggle',
},
// 'addressRequired': {
// 'display': 'Require user to provide address?',
// 'id': 'addressRequired',
// 'tooltip':'With this toggle you may specify whether or not a user has to provide their address when purchasing something. (Keep GDPR in mind when processing data!)',
// 'value': false,
// 'type': 'toggle',
// },
// 'phoneNumberRequired': {
// 'display': 'Require user to provide phone number?',
// 'id': 'phoneNumberRequired',
// 'tooltip':'With this toggle you may specify whether or not a user has to provide their phone number when purchasing something. (Keep GDPR in mind when processing data!)',
// 'value': false,
// 'type': 'toggle',
// },
// 'dobRequired': {
// 'display': 'Require user to provide their birth date?',
// 'id': 'dobRequired',
// 'tooltip':'With this toggle you may specify whether or not a user has to provide their date of birth when purchasing something. (Keep GDPR in mind when processing data!)',
// 'value': false,
// 'type': 'toggle',
// },
'currency': {
'display': 'Currency',
'id': 'currency',
@@ -118,14 +122,14 @@
'value': 'stripe',
'type': 'select',
'restrictions': {
'payrexx': {
'displayName':'Payrexx',
'value': 'payrexx'
},
'stripe': {
'displayName':'Stripe',
'value': 'stripe'
},
'adyen': {
'displayName':'Payrexx',
'value': 'payrexx'
},
}
},
}
@@ -162,21 +166,12 @@
'value': false,
'type': 'toggle',
},
'entryControl': {
'display': 'Entry control',
'id': 'entryControl',
'tooltip':'Change this setting to allow or disallow the selected user to execute entry control at the entrance to your event location.',
'value': true,
'type': 'toggle',
},
}
, 'settings' );
},
showPaymentSettings () {
this.$refs.popup.openPopup( 'Payment gateway settings', {
'link': '/payments/settings',
}
, 'iframe' );
// TODO: Load payment gateway settings from server
this.$refs.popup.openPopup( 'Payment gateway settings', {}, 'string' );
},
createAccount() {
this.$refs.popup.openPopup( 'Create new admin user', {
@@ -240,7 +235,37 @@
openRightClickMenu( id, event ) {
this.$refs.rclk.openRightClickMenu( event, { 'edit': { 'command': 'openPermissions', 'symbol': 'edit', 'display': 'Edit permissions' }, 'delete': { 'command': 'deleteUser', 'symbol': 'delete', 'display': 'Delete User' } } )
this.currentlyOpenMenu = id;
},
loadData() {
fetch( '/admin/getAPI/getSettings' ).then( res => {
if ( res.status === 200 ) {
res.json().then( json => {
this.settings[ '2fa' ].value = json.twoFA;
this.settings.currency.value = json.currency;
this.settings.paymentGateway.value = json.payments;
} );
}
} );
},
save() {
let fetchOptions = {
method: 'post',
body: JSON.stringify( { 'twoFA': this.settings[ '2fa' ].value, 'currency': this.settings.currency.value, 'payments': this.settings.paymentGateway.value } ),
headers: {
'Content-Type': 'application/json',
'charset': 'utf-8'
}
};
fetch( localStorage.getItem( 'url' ) + '/admin/API/updateSettings', fetchOptions ).then( res => {
if ( res.status === 200 ) {
this.$refs.notification.createNotification( 'Saved settings successfully. Restart libreevent to apply changes', 20, 'ok', 'normal' );
this.loadData();
}
} );
}
},
created () {
this.loadData();
}
};
// TODO: Load gateways and settings in general from server.