43 Commits

Author SHA1 Message Date
19782f0bc3 Finish version bump 2025-07-22 10:22:42 +02:00
0460c25e75 Version bump 2025-07-22 10:21:48 +02:00
b04bb8cd98 Update deps 2025-07-22 10:20:24 +02:00
Janis Hutz
503b376e1c Merge pull request #41 from janishutz/dependabot/npm_and_yarn/src/server/form-data-4.0.4
Bump form-data from 4.0.2 to 4.0.4 in /src/server
2025-07-22 08:17:29 +00:00
Janis Hutz
1d1b6376de Merge pull request #40 from janishutz/dependabot/npm_and_yarn/src/server/multi-0acb442647
Bump on-headers and express-session in /src/server
2025-07-22 08:17:20 +00:00
Janis Hutz
7a9ee5f34d Merge pull request #39 from janishutz/dependabot/npm_and_yarn/src/server/multer-2.0.2
Bump multer from 2.0.1 to 2.0.2 in /src/server
2025-07-22 08:17:09 +00:00
dependabot[bot]
c86fd9283f Bump form-data from 4.0.2 to 4.0.4 in /src/server
---
updated-dependencies:
- dependency-name: form-data
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-22 05:08:45 +00:00
dependabot[bot]
be89d84dfd Bump on-headers and express-session in /src/server
---
updated-dependencies:
- dependency-name: on-headers
  dependency-version: 1.1.0
  dependency-type: indirect
- dependency-name: express-session
  dependency-version: 1.18.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-18 05:32:23 +00:00
dependabot[bot]
80b2210b57 Bump multer from 2.0.1 to 2.0.2 in /src/server
Bumps [multer](https://github.com/expressjs/multer) from 2.0.1 to 2.0.2.
- [Release notes](https://github.com/expressjs/multer/releases)
- [Changelog](https://github.com/expressjs/multer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/expressjs/multer/compare/v2.0.1...v2.0.2)

---
updated-dependencies:
- dependency-name: multer
  dependency-version: 2.0.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-18 01:21:08 +00:00
208c657bf4 V1.1.12 Version Bump (high severity security fix for express) 2025-06-05 10:16:03 +02:00
Janis Hutz
4bac130bb4 Merge pull request #38 from janishutz/dependabot/npm_and_yarn/src/server/multer-2.0.1 2025-06-05 05:51:26 +00:00
dependabot[bot]
218fa641b5 Bump multer from 2.0.0 to 2.0.1 in /src/server
Bumps [multer](https://github.com/expressjs/multer) from 2.0.0 to 2.0.1.
- [Release notes](https://github.com/expressjs/multer/releases)
- [Changelog](https://github.com/expressjs/multer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/expressjs/multer/compare/v2.0.0...v2.0.1)

---
updated-dependencies:
- dependency-name: multer
  dependency-version: 2.0.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-05 05:09:29 +00:00
Janis Hutz
7426d6ac31 Merge pull request #37 from janishutz/dependabot/npm_and_yarn/src/server/multer-2.0.0
Bump multer from 1.4.5-lts.2 to 2.0.0 in /src/server
2025-06-04 07:02:00 +00:00
dependabot[bot]
706b3b7cc4 Bump multer from 1.4.5-lts.2 to 2.0.0 in /src/server
Bumps [multer](https://github.com/expressjs/multer) from 1.4.5-lts.2 to 2.0.0.
- [Release notes](https://github.com/expressjs/multer/releases)
- [Changelog](https://github.com/expressjs/multer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/expressjs/multer/compare/v1.4.5-lts.2...v2.0.0)

---
updated-dependencies:
- dependency-name: multer
  dependency-version: 2.0.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-04 06:58:37 +00:00
f4cb2cd4e7 V1.1.11 Version bump (security fix) 2025-06-04 08:57:41 +02:00
b4a7e3a6f0 V1.1.10 Version bump done 2025-04-19 11:41:02 +02:00
02c297a310 Fully fix npm issues 2025-04-19 11:38:53 +02:00
50978d248c Address npm issues 2025-04-19 10:17:58 +02:00
a51997ac0c V1.1.9 Version bump, fix npm issues 2025-04-18 13:54:14 +02:00
c82c0c70ef Update Android app 2025-04-18 13:36:48 +02:00
ef90b9f089 Finish version bump 2025-03-18 11:22:43 +01:00
e1980c21d3 Address security vulnerabilities in dependencies 2025-03-18 11:20:46 +01:00
27cf7b04d8 Move favicons 2025-02-24 11:48:02 +01:00
Janis Hutz
2c7a476321 Update SECURITY.md 2025-02-18 11:47:59 +00:00
57feeb0f50 Address security vulnerabilities in dependencies, Version bump 2025-02-10 07:23:20 +01:00
b71f8e42f8 version bump 2024-10-11 14:16:11 +02:00
Janis Hutz
c99fe308ec Merge pull request #25 from janishutz/dependabot/npm_and_yarn/src/server/multi-b9178efa7f 2024-10-11 08:17:17 +00:00
dependabot[bot]
8aba1aff3c Bump cookie, cookie-parser, express and express-session in /src/server
Bumps [cookie](https://github.com/jshttp/cookie) to 0.7.2 and updates ancestor dependencies [cookie](https://github.com/jshttp/cookie), [cookie-parser](https://github.com/expressjs/cookie-parser), [express](https://github.com/expressjs/express) and [express-session](https://github.com/expressjs/session). These dependencies need to be updated together.


Updates `cookie` from 0.4.1 to 0.7.2
- [Release notes](https://github.com/jshttp/cookie/releases)
- [Commits](https://github.com/jshttp/cookie/compare/v0.4.1...v0.7.2)

Updates `cookie-parser` from 1.4.6 to 1.4.7
- [Release notes](https://github.com/expressjs/cookie-parser/releases)
- [Changelog](https://github.com/expressjs/cookie-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/cookie-parser/compare/1.4.6...1.4.7)

Updates `express` from 4.21.0 to 4.21.1
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.21.0...4.21.1)

Updates `express-session` from 1.17.3 to 1.18.1
- [Release notes](https://github.com/expressjs/session/releases)
- [Changelog](https://github.com/expressjs/session/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/session/compare/v1.17.3...v1.18.1)

---
updated-dependencies:
- dependency-name: cookie
  dependency-type: indirect
- dependency-name: cookie-parser
  dependency-type: direct:production
- dependency-name: express
  dependency-type: direct:production
- dependency-name: express-session
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-10 13:45:26 +00:00
2258aff2b7 complete version update 2024-10-02 18:39:56 +02:00
d0589dfbd7 address security vulnerability in rollup.js - Update coming soon 2024-10-02 14:49:38 +02:00
76bbdff176 fix readme 2024-09-20 09:36:18 +02:00
950431aaea update README.md 2024-09-20 09:34:37 +02:00
340728c838 address security vulnerabilities in dependencies 2024-09-20 09:31:34 +02:00
7ebd61f612 bump to V1.1.3 2024-08-27 15:48:58 +02:00
c074d6c025 prepare for a simpler installation method. Still missing config adjustments (i.e. adjusting how the config is loaded) 2024-08-26 11:45:15 +02:00
a68e42c4bb Revert "Restructuring for new way of installing libreevent"
This reverts commit 688b0616cc.
2024-08-26 11:21:52 +02:00
688b0616cc Restructuring for new way of installing libreevent 2024-08-26 11:16:28 +02:00
4d0b8eb1cb perform version bump && address vulnerability in dependency 2024-08-20 14:22:11 +02:00
80ddf3fac9 update Android App to new Target API (mostly done) 2024-08-20 14:18:49 +02:00
f281289435 finish version bump 2024-08-01 08:23:02 +02:00
0bc9a4e83c bump to v1.0.6, addresses vulnerability in dependency 2024-08-01 08:22:16 +02:00
0175e9120d update docs 2024-06-05 14:06:17 +02:00
Janis Hutz
5cff69fac7 Merge pull request #21 from simplePCBuilding/simplePCBuilding-patch-1
Update README.md
2024-06-05 12:00:26 +00:00
47 changed files with 6826 additions and 4190 deletions

4
.gitignore vendored
View File

@@ -24,5 +24,9 @@ node_modules
*.synctex.gz *.synctex.gz
*.fdb_latexmk *.fdb_latexmk
._wordcount_selection.tex ._wordcount_selection.tex
/*.zip
AppMarketing AppMarketing
yarn.lock
package-lock.json

View File

@@ -47,10 +47,15 @@ Alternatively, you may download the project directly from GitHub (by cloning it
There are a few features planned for libreevent. Please discuss other ideas in the issue I opened specifically for this. (see #12) There are a few features planned for libreevent. Please discuss other ideas in the issue I opened specifically for this. (see #12)
# Contributing # Contributing
If you want to contribute to this project, please read more [here](https://libreevent.janishutz.com/docs/contributing). Until the end of October 2023, no contributions can be accepted into master. If you want to contribute to this project, please read more [here](https://libreevent.janishutz.com/docs/contributing).
# Supporting the project # Supporting the project
If you like this project and it helped you save money, please consider donating to help fund the continuous development. If you are a company, please contact me [here](https://libreevent.janishutz.com/docs/sponsoring) if you want to sponsor the project and become an official partner. If you like this project and it helped you save money, please consider donating to help fund the continuous development. If you are a company, please contact me [here](https://libreevent.janishutz.com/docs/sponsoring) if you want to sponsor the project and become an official partner.
<div id="donate" align="center">
<a href="https://store.janishutz.com/donate">
<img src="https://store-cdn.janishutz.com/static/support-me.jpg" width="150px">
</a>
</div>
# Repository structure # Repository structure
- [assets/](/assets/): contains the logo (as png and GIMP file), also iOS and Android marketing materials, just global assets (images / videos) - [assets/](/assets/): contains the logo (as png and GIMP file), also iOS and Android marketing materials, just global assets (images / videos)
@@ -72,5 +77,7 @@ You may notice some additional folders appearing after running
This is to shrink the repository size. Distribution ready files can be found in the releases or on our [website](https://libreevent.janishutz.com/download). This is to shrink the repository size. Distribution ready files can be found in the releases or on our [website](https://libreevent.janishutz.com/download).
<div id="donate" align="center"> <div id="donate" align="center">
<img src="https://store-cdn.janishutz.com/static/support-me.jpg" width="150px"> <a href="https://store.janishutz.com/donate">
<img src="https://store-cdn.janishutz.com/static/support-me.jpg" width="150px">
</a>
</div> </div>

View File

@@ -6,7 +6,7 @@ libreevent gets security updates as part of regular software updates. Since ther
| Version | Supported | | Version | Supported |
| ------- | ------------------ | | ------- | ------------------ |
| 1.0.x | :white_check_mark: | | 1.x.x | :white_check_mark: |
| 0.x.x | :x: | | 0.x.x | :x: |
## Reporting a Vulnerability ## Reporting a Vulnerability

13
package-lock.json generated
View File

@@ -1,13 +0,0 @@
{
"name": "libreevent",
"version": "1.0.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "libreevent",
"version": "1.0.1",
"license": "GPL-3.0-or-later"
}
}
}

View File

@@ -1,6 +1,6 @@
{ {
"name": "libreevent", "name": "libreevent",
"version": "1.0.5", "version": "1.1.13",
"description": "A free and open source event management solution", "description": "A free and open source event management solution",
"main": "/dist/app.js", "main": "/dist/app.js",
"scripts": { "scripts": {

View File

@@ -6,7 +6,7 @@
# #
# #
v="V1.0.5" v="V1.1.13"
echo " echo "
_ _ _ _ _ _ _ _
@@ -36,7 +36,7 @@ sleep 0.5
cd src/webapp/setup cd src/webapp/setup
npm i npm i
npm audit fix npm audit fix --force
sleep 1 sleep 1
@@ -54,7 +54,7 @@ cd ../main
npm i npm i
npm audit fix npm audit fix --force
sleep 1 sleep 1
@@ -115,11 +115,11 @@ echo "
sleep 1 sleep 1
cd .. cd ..
zip -9r libreevent-$v-prebuilt.zip dist zip -9r libreevent-$v-custom.zip dist
echo " echo "
==> Created prebuilt archive <== ==> Created custom archive <==
==> Creating archive for node_modules <== ==> Creating archive for node_modules <==
" "
@@ -129,7 +129,7 @@ sleep 1
cd src/server cd src/server
npm i npm i
npm audit fix npm audit fix --force
sleep 1 sleep 1
@@ -154,8 +154,22 @@ zip -9r libreevent-$v-full-icu.zip src/server/package.json src/server/package-lo
cd src/server cd src/server
npm uninstall full-icu npm uninstall full-icu
cd ../../ echo "
rm -rf dist
==> Archived full-icu config <==
==> Creating archive for prebuilt install <==
"
cd ../../dist
cp ../README.md .
cd ..
rm -rf ./simple/node_modules
rm ./simple/package-lock.json
rm ./simple/yarn.lock
zip -9r libreevent-$v-prebuilt.zip simple
echo " echo "
@@ -177,5 +191,7 @@ echo "
Next steps: Next steps:
- Check that everything was packaged correctly - Check that everything was packaged correctly
- Create a release on GitHub - Create a release on GitHub
- Run 'cd dist && npm publish'
- Delete all newly spawned files
" "

16
simple/app.js Normal file
View File

@@ -0,0 +1,16 @@
/*
* libreevent - index.js
*
* Created by Janis Hutz 08/26/2024, Licensed under the GPL V3 License
* https://janishutz.com, development@janishutz.com
*
*
*/
/*
This file is a wrapper for the npm package
*/
const libreevent = require( 'libreevent' );
libreevent.run( __dirname );

View File

@@ -0,0 +1,7 @@
{
"host": "",
"database": "",
"user": "",
"password": "",
"port": 3306
}

View File

@@ -0,0 +1,12 @@
{
"host":"",
"port": 587,
"secure": false,
"auth": {
"user":"",
"pass":""
},
"tls": {
"servername": ""
}
}

View File

@@ -0,0 +1,17 @@
{
"init":false,
"setupDone":false,
"twoFA":"allow",
"twoFAMode":"simple",
"db":"mysql",
"payments":"stripe",
"name":"libreevent",
"yourDomain":"",
"mailSender":"",
"maxTickets":10,
"currency":"USD",
"gcInterval":300,
"ticketTimeout":900,
"startPage":"default",
"version":"1.0.1"
}

26
simple/package.json Normal file
View File

@@ -0,0 +1,26 @@
{
"name": "libreevent-simple",
"version": "1.0.0",
"description": "Simplify libreevent's install using the npm package",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/janishutz/libreevent.git"
},
"keywords": [
"libreevent",
"simple"
],
"author": "Janis Hutz",
"license": "GPL-3.0-or-later",
"bugs": {
"url": "https://github.com/janishutz/libreevent/issues"
},
"homepage": "https://libreevent.janishutz.com",
"dependencies": {
"libreevent": "^1.1.3"
}
}

1
simple/setupkey.txt Normal file
View File

@@ -0,0 +1 @@
awe0g9pü02w 3tvaä9p4'efgt$ä'4fgtaäaw34ftg$a3qwf4t'p93wft3waqäü

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CompilerConfiguration"> <component name="CompilerConfiguration">
<bytecodeTargetLevel target="17" /> <bytecodeTargetLevel target="21" />
</component> </component>
</project> </project>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2025-04-18T11:32:08.036063878Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="LocalEmulator" identifier="path=/home/janis/.android/avd/Pixel_9_Pro_XL.avd" />
</handle>
</Target>
</DropdownSelection>
<DialogSelection />
</SelectionState>
</selectionStates>
</component>
</project>

View File

@@ -4,10 +4,9 @@
<component name="GradleSettings"> <component name="GradleSettings">
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<GradleProjectSettings> <GradleProjectSettings>
<option name="testRunner" value="GRADLE" /> <option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" /> <option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="jbr-17" /> <option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules"> <option name="modules">
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />

10
src/apps/Android/.idea/migrations.xml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>

View File

@@ -5,14 +5,14 @@ plugins {
android { android {
namespace = "com.janishutz.libreevent" namespace = "com.janishutz.libreevent"
compileSdk = 33 compileSdk = 35
defaultConfig { defaultConfig {
applicationId = "com.janishutz.libreevent" applicationId = "com.janishutz.libreevent"
minSdk = 24 minSdk = 24
targetSdk = 33 targetSdk = 35
versionCode = 2 versionCode = 5
versionName = "1.0" versionName = "1.0.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }

View File

@@ -1,5 +1,5 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins { plugins {
id("com.android.application") version "8.1.1" apply false id("com.android.application") version "8.9.1" apply false
id("org.jetbrains.kotlin.android") version "1.9.0" apply false id("org.jetbrains.kotlin.android") version "1.9.0" apply false
} }

View File

@@ -1,6 +1,6 @@
#Sun Sep 03 11:15:46 CEST 2023 #Sun Sep 03 11:15:46 CEST 2023
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@@ -15,7 +15,7 @@ const mlt = require( 'multer' );
const pngToIco = require( 'png-to-ico' ); const pngToIco = require( 'png-to-ico' );
const multer = mlt(); const multer = mlt();
const fs = require( 'fs' ); const fs = require( 'fs' );
const settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/../config/settings.config.json' ) ) ); const settings = JSON.parse( fs.readFileSync( path.join( __starterDir + '/config/settings.config.json' ) ) );
const getHandler = new geth( settings ); const getHandler = new geth( settings );
const postHandler = new posth( settings ); const postHandler = new posth( settings );

View File

@@ -1,114 +1,3 @@
/* const libreevent = require( './index.js' );
* libreevent - app.js
*
* Created by Janis Hutz 02/26/2023, Licensed under the GPL V3 License
* https://janishutz.com, development@janishutz.com
*
*
*/
const express = require( 'express' ); libreevent.run( __dirname );
let app = express();
const path = require( 'path' );
const expressSession = require( 'express-session' );
const cookieParser = require( 'cookie-parser' );
const http = require( 'http' );
const fs = require( 'fs' );
const token = require( './backend/token.js' );
console.log( `
_ _ _ _
| (_) | | |
| |_| |__ _ __ ___ _____ _____ _ __ | |_
| | | '_ \\| '__/ _ \\/ _ \\ \\ / / _ \\ '_ \\| __|
| | | |_) | | | __/ __/\\ V / __/ | | | |_
|_|_|_.__/|_| \\___|\\___| \\_/ \\___|_| |_|\\__|
-------------------------------
==> Welcome to libreevent!
==> You are running Version V1.0.0
Below you can see all important things that happen during operation.
libreevent logs all errors in the console such that they appear in the
log files when running it with an output pipe (which you should definitely do)
To do this run the following command when starting libreevent:
'node app.js > libreevent_log.txt'
` );
console.log( '[ Server ] loading settings' );
const settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/config/settings.config.json' ) ) );
// Route for static html file for start page (page is compiled using
// Vue SSR and gets its support files (e.g. CSS and JS files) from
// the /home/supportFiles/:file route plus its assets from the /otherAssets/:file
// route).
if ( settings.setupDone ) {
app.get( '/', ( req, res ) => {
res.sendFile( path.join( __dirname + '/ui/home/active/en/index.html' ) );
} );
}
// Set up static routes for static file serving (performance wise not
// that good, but way easier to set up)
console.log( '[ Server ] Setting up static routes' );
if ( settings.setupDone ) {
app.use( express.static( 'webapp/main/dist' ) );
} else {
app.use( express.static( 'webapp/setup/dist' ) );
}
// initialise express with middlewares
console.log( '[ Server ] loading and initializing middlewares' );
app.use( expressSession( {
secret: token.generateToken( 60 ),
resave: false,
saveUninitialized: true,
cookie: {
sameSite: 'none',
httpOnly: true,
secure: false,
}
} ) );
app.use( cookieParser() );
let file = path.join( __dirname + '/webapp/main/dist/index.html' );
if ( settings.setupDone ) {
console.log( '[ Server ] loading backend components' );
require( './backend/helperRoutes.js' )( app, settings ); // Helper routes
require( './admin/adminRoutes.js' )( app, settings ); // admin routes
require( './admin/adminAPIRoutes.js' )( app, settings ); // admin api routes
require( './admin/appApiRoutes.js' )( app, settings ); // app api routes
require( './backend/userAPIRoutes.js' )( app, settings ); // user api routes
require( './backend/userRoutes.js' )( app, settings ); // user routes
require( './backend/payments/paymentRoutes.js' )( app, settings ); // payment routes
require( './backend/plugins/pluginLoader.js' )( app, settings ); // plugin loader
} else {
console.log( '[ Setup ] Loading setup routes' );
require( './setup/setupRoutes.js' )( app, settings ); // setup routes
file = path.join( __dirname + '/webapp/setup/dist/index.html' );
}
// handling of any unknown route. Returns the SPA index.html file which
// initiates loading of the SPA
app.use( ( request, response ) => {
response.sendFile( file );
} );
console.log( '\n\n[ Server ] loading complete!\n\n' );
const PORT = process.env.PORT || 8080;
console.log( '[ Server ] listening on port ' + PORT );
http.createServer( app ).listen( PORT );

View File

@@ -20,7 +20,7 @@ class POSTHandler {
this.temporarilySelectedTotals = {}; this.temporarilySelectedTotals = {};
this.temporaryTotals = {}; this.temporaryTotals = {};
this.freeSeats = {}; this.freeSeats = {};
this.settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../config/settings.config.json' ) ) ); this.settings = JSON.parse( fs.readFileSync( path.join( __starterDir + '/config/settings.config.json' ) ) );
/* /*
Here, GC-Duty is scheduled to run every so often (defined in settings.config.json file, no GUI setting available. Here, GC-Duty is scheduled to run every so often (defined in settings.config.json file, no GUI setting available.

View File

@@ -23,7 +23,7 @@ const token = require( '../token.js' );
let createSSRApp = require( 'vue' ).createSSRApp; let createSSRApp = require( 'vue' ).createSSRApp;
let renderToString = require( 'vue/server-renderer' ).renderToString; let renderToString = require( 'vue/server-renderer' ).renderToString;
const settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../config/settings.config.json' ) ) ); const settings = JSON.parse( fs.readFileSync( path.join( __starterDir + '/config/settings.config.json' ) ) );
module.exports.checkpassword = function checkpassword ( email, password ) { module.exports.checkpassword = function checkpassword ( email, password ) {
return new Promise( resolve => { return new Promise( resolve => {

View File

@@ -10,7 +10,7 @@
const path = require( 'path' ); const path = require( 'path' );
const fs = require( 'fs' ); const fs = require( 'fs' );
const settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../config/settings.config.json' ) ) ); const settings = JSON.parse( fs.readFileSync( path.join( __starterDir + '/config/settings.config.json' ) ) );
const dbRef = { const dbRef = {
'user': 'libreevent_users', 'user': 'libreevent_users',
@@ -230,5 +230,5 @@ module.exports.saveSettings = ( settings ) => {
settingsToSave += settingsString[ letter ]; settingsToSave += settingsString[ letter ];
} }
} }
fs.writeFileSync( path.join( __dirname + '/../../config/settings.config.json' ), settingsToSave ); fs.writeFileSync( path.join( __starterDir + '/config/settings.config.json' ), settingsToSave );
}; };

View File

@@ -16,7 +16,7 @@ const path = require( 'path' );
class SQLDB { class SQLDB {
constructor ( ) { constructor ( ) {
this.sqlConnection = mysql.createConnection( JSON.parse( fs.readFileSync( path.join( __dirname + '/../../config/db.config.json' ) ) ) ); this.sqlConnection = mysql.createConnection( JSON.parse( fs.readFileSync( path.join( __starterDir + '/config/db.config.json' ) ) ) );
} }
connect ( ) { connect ( ) {

View File

@@ -12,7 +12,7 @@ const html2text = require( 'html-to-text' );
const db = require( '../db/db.js' ); const db = require( '../db/db.js' );
let transporter = mailer.createTransport( db.getJSONDataSync( '/config/mail.config.json' ) ); let transporter = mailer.createTransport( db.getJSONDataSync( __starterDir + '/config/mail.config.json' ) );
class MailManager { class MailManager {

View File

@@ -32,7 +32,7 @@ class PluginManager {
loadPaymentGatewaySettings () { loadPaymentGatewaySettings () {
return new Promise( ( resolve, reject ) => { return new Promise( ( resolve, reject ) => {
this.paymentGateway = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../config/settings.config.json' ) ) ).payments; this.paymentGateway = JSON.parse( fs.readFileSync( path.join( __starterDir + '/config/settings.config.json' ) ) ).payments;
fs.readFile( path.join( __dirname + '/payments/' + this.paymentGateway + '/configOptions.json' ), ( err, optionsBuffer ) => { fs.readFile( path.join( __dirname + '/payments/' + this.paymentGateway + '/configOptions.json' ), ( err, optionsBuffer ) => {
if ( err ) reject( err ); if ( err ) reject( err );
fs.readFile( path.join( __dirname + '/payments/' + this.paymentGateway + '/config.payments.json' ), ( err, configBuffer ) => { fs.readFile( path.join( __dirname + '/payments/' + this.paymentGateway + '/config.payments.json' ), ( err, configBuffer ) => {

View File

@@ -18,7 +18,7 @@ const mailManager = new mm();
let createSSRApp = require( 'vue' ).createSSRApp; let createSSRApp = require( 'vue' ).createSSRApp;
let renderToString = require( 'vue/server-renderer' ).renderToString; let renderToString = require( 'vue/server-renderer' ).renderToString;
const settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../config/settings.config.json' ) ) ); const settings = JSON.parse( fs.readFileSync( path.join( __starterDir + '/config/settings.config.json' ) ) );
class TicketGenerator { class TicketGenerator {
constructor () { constructor () {

115
src/server/index.js Normal file
View File

@@ -0,0 +1,115 @@
/*
* libreevent - app.js
*
* Created by Janis Hutz 02/26/2023, Licensed under the GPL V3 License
* https://janishutz.com, development@janishutz.com
*
*
*/
const express = require( 'express' );
let app = express();
const path = require( 'path' );
const expressSession = require( 'express-session' );
const http = require( 'http' );
const fs = require( 'fs' );
const token = require( './backend/token.js' );
module.exports.run = ( rootDir ) => {
global.__starterDir = rootDir ?? __dirname;
console.log( `
_ _ _ _
| (_) | | |
| |_| |__ _ __ ___ _____ _____ _ __ | |_
| | | '_ \\| '__/ _ \\/ _ \\ \\ / / _ \\ '_ \\| __|
| | | |_) | | | __/ __/\\ V / __/ | | | |_
|_|_|_.__/|_| \\___|\\___| \\_/ \\___|_| |_|\\__|
-------------------------------
==> Welcome to libreevent!
==> You are running Version V1.0.0
Below you can see all important things that happen during operation.
libreevent logs all errors in the console such that they appear in the
log files when running it with an output pipe (which you should definitely do)
To do this run the following command when starting libreevent:
'node app.js > libreevent_log.txt'
` );
console.log( '[ Server ] loading settings' );
const settings = JSON.parse( fs.readFileSync( path.join( __starterDir + '/config/settings.config.json' ) ) );
// Route for static html file for start page (page is compiled using
// Vue SSR and gets its support files (e.g. CSS and JS files) from
// the /home/supportFiles/:file route plus its assets from the /otherAssets/:file
// route).
if ( settings.setupDone ) {
app.get( '/', ( req, res ) => {
res.sendFile( path.join( __dirname + '/ui/home/active/en/index.html' ) );
} );
}
// Set up static routes for static file serving (performance wise not
// that good, but way easier to set up)
console.log( '[ Server ] Setting up static routes' );
if ( settings.setupDone ) {
app.use( express.static( __dirname + '/webapp/main/dist' ) );
} else {
console.log( '[ Server ] Booting into setup' );
app.use( express.static( __dirname + '/webapp/setup/dist' ) );
}
// initialise express with middlewares
console.log( '[ Server ] loading and initializing middlewares' );
app.use( expressSession( {
secret: token.generateToken( 60 ),
resave: false,
saveUninitialized: true,
cookie: {
sameSite: 'none',
httpOnly: true,
secure: false,
}
} ) );
let file = path.join( __dirname + '/webapp/main/dist/index.html' );
if ( settings.setupDone ) {
console.log( '[ Server ] loading backend components' );
require( './backend/helperRoutes.js' )( app, settings ); // Helper routes
require( './admin/adminRoutes.js' )( app, settings ); // admin routes
require( './admin/adminAPIRoutes.js' )( app, settings ); // admin api routes
require( './admin/appApiRoutes.js' )( app, settings ); // app api routes
require( './backend/userAPIRoutes.js' )( app, settings ); // user api routes
require( './backend/userRoutes.js' )( app, settings ); // user routes
require( './backend/payments/paymentRoutes.js' )( app, settings ); // payment routes
require( './backend/plugins/pluginLoader.js' )( app, settings ); // plugin loader
} else {
console.log( '[ Setup ] Loading setup routes' );
require( './setup/setupRoutes.js' )( app, settings ); // setup routes
file = path.join( __dirname + '/webapp/setup/dist/index.html' );
}
// handling of any unknown route. Returns the SPA index.html file which
// initiates loading of the SPA
app.use( ( request, response ) => {
response.sendFile( file );
} );
console.log( '\n\n[ Server ] loading complete!\n\n' );
const PORT = process.env.PORT || 8080;
console.log( '[ Server ] listening on port ' + PORT );
http.createServer( app ).listen( PORT );
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,84 +1,45 @@
{ {
"name": "libreevent", "name": "libreevent",
"version": "1.0.5", "version": "1.1.13",
"description": "Free & Open source event management solution", "description": "Free & Open source event management solution",
"main": "app.js", "main": "index.js",
"directories": { "directories": {
"doc": "docs" "doc": "docs"
}, },
"devDependencies": { "dependencies": {
"acorn": "^8.8.2", "@pdfme/generator": "^5.3.15",
"buffer-from": "^1.1.2", "axios": "^1.8.4",
"camel-case": "^4.1.2", "bcrypt": "^5.1.1",
"clean-css": "^5.3.2", "body-parser": "^1.20.3",
"commander": "^9.5.0", "crypto-js": "^4.2.0",
"css-b64-images": "^0.2.5", "express": "^4.21.2",
"debug": "^4.3.4", "express-session": "^1.18.1",
"dot-case": "^3.0.4", "html-to-text": "^9.0.5",
"entities": "^4.4.0", "multer": "^2.0.0",
"find-up": "^6.3.0", "mysql": "^2.18.1",
"html-minifier-terser": "^7.1.0", "nodemailer": "^6.10.1",
"jju": "^1.4.0", "pdf-lib": "^1.17.1",
"locate-path": "^7.2.0", "png-to-ico": "^2.1.8",
"lower-case": "^2.0.2", "qs": "^6.14.0",
"minify": "^9.2.0", "stripe": "^12.18.0",
"ms": "^2.1.2", "vue": "^3.5.13"
"no-case": "^3.0.4", },
"p-limit": "^4.0.0", "scripts": {
"p-locate": "^6.0.0", "lint": "eslint . --ext .js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore"
"param-case": "^3.0.4", },
"pascal-case": "^3.1.2", "repository": {
"path-exists": "^5.0.0", "type": "git",
"readjson": "^2.2.2", "url": "git+https://github.com/simplePCBuilding/libreevent.git"
"relateurl": "^0.2.7", },
"response-time": "^2.3.2", "keywords": [
"simport": "^1.2.0", "event",
"source-map": "^0.6.1", "management",
"source-map-support": "^0.5.21", "solution"
"terser": "^5.16.5", ],
"try-catch": "^3.0.1", "author": "Janis Hutz",
"try-to-catch": "^3.0.1", "license": "GPL-3.0-or-later",
"tslib": "^2.5.0", "bugs": {
"yocto-queue": "^1.0.0" "url": "https://github.com/simplePCBuilding/libreevent/issues"
}, },
"dependencies": { "homepage": "https://libreevent.janishutz.com"
"@pdfme/generator": "^1.2.6",
"@seald-io/nedb": "^4.0.2",
"axios": "^1.6.0",
"bcrypt": "^5.0.1",
"body-parser": "^1.20.2",
"cookie-parser": "^1.4.6",
"crypto-js": "^4.2.0",
"express": "^4.19.2",
"express-session": "^1.17.3",
"html-to-text": "^9.0.5",
"multer": "^1.4.5-lts.1",
"mysql": "^2.18.1",
"nodemailer": "^6.9.3",
"pdf-lib": "^1.17.1",
"png-to-ico": "^2.1.8",
"qs": "^6.11.2",
"serve-favicon": "^2.5.0",
"serve-static": "^1.15.0",
"stripe": "^12.14.0",
"vue": "^3.3.4"
},
"scripts": {
"lint": "eslint . --ext .js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore"
},
"repository": {
"type": "git",
"url": "git+https://github.com/simplePCBuilding/libreevent.git"
},
"keywords": [
"event",
"management",
"solution"
],
"author": "Janis Hutz",
"license": "GPL-3.0-or-later",
"bugs": {
"url": "https://github.com/simplePCBuilding/libreevent/issues"
},
"homepage": "https://libreevent.janishutz.com"
} }

View File

@@ -21,7 +21,7 @@ module.exports = ( app, settings ) => {
*/ */
app.post( '/setup/start', bodyParser.json(), ( request, response ) => { app.post( '/setup/start', bodyParser.json(), ( request, response ) => {
if ( request.body.token === '' + fs.readFileSync( path.join( __dirname + '/../setupkey.txt' ) ) ) { if ( request.body.token === '' + fs.readFileSync( path.join( __starterDir + '/setupkey.txt' ) ) ) {
request.session.setupKeyOk = true; request.session.setupKeyOk = true;
response.send( 'ok' ); response.send( 'ok' );
} else { } else {
@@ -39,7 +39,7 @@ module.exports = ( app, settings ) => {
app.post( '/setup/saveBasicSettings', bodyParser.json(), ( req, res ) => { app.post( '/setup/saveBasicSettings', bodyParser.json(), ( req, res ) => {
if ( req.session.setupKeyOk ) { if ( req.session.setupKeyOk ) {
fs.writeFileSync( path.join( __dirname + '/../config/db.config.json' ), JSON.stringify( req.body.db ) ); fs.writeFileSync( path.join( __starterDir + '/config/db.config.json' ), JSON.stringify( req.body.db ) );
let emailSettings = {}; let emailSettings = {};
emailSettings[ 'host' ] = req.body.email.host; emailSettings[ 'host' ] = req.body.email.host;
emailSettings[ 'port' ] = req.body.email.port; emailSettings[ 'port' ] = req.body.email.port;
@@ -47,7 +47,7 @@ module.exports = ( app, settings ) => {
emailSettings[ 'auth' ] = { 'user': req.body.email.user, 'pass': req.body.email.pass }; emailSettings[ 'auth' ] = { 'user': req.body.email.user, 'pass': req.body.email.pass };
let hostSplit = req.body.email.host.split( '.' ); let hostSplit = req.body.email.host.split( '.' );
emailSettings[ 'tls' ] = { 'servername': ( hostSplit[ hostSplit.length - 2 ] + '.' + hostSplit[ hostSplit.length - 1 ] ) }; emailSettings[ 'tls' ] = { 'servername': ( hostSplit[ hostSplit.length - 2 ] + '.' + hostSplit[ hostSplit.length - 1 ] ) };
fs.writeFileSync( path.join( __dirname + '/../config/mail.config.json' ), JSON.stringify( emailSettings ) ); fs.writeFileSync( path.join( __starterDir + '/config/mail.config.json' ), JSON.stringify( emailSettings ) );
if ( db === null ) { if ( db === null ) {
db = require( '../backend/db/db.js' ); db = require( '../backend/db/db.js' );
pwm = require( '../admin/pwdmanager.js' ); pwm = require( '../admin/pwdmanager.js' );

View File

@@ -1 +0,0 @@
../webapp/

BIN
src/webapp/main/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "libreevent", "name": "libreevent",
"version": "1.0.5", "version": "1.1.13",
"private": false, "private": false,
"scripts": { "scripts": {
"dev": "vite --host", "dev": "vite --host",
@@ -18,9 +18,9 @@
"vue3-draggable-resizable": "^1.6.5" "vue3-draggable-resizable": "^1.6.5"
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "^1.10.2", "@vitejs/plugin-vue": "^5.2.0",
"vite": "^2.9.18",
"eslint": "^8.39.0", "eslint": "^8.39.0",
"eslint-plugin-vue": "^9.17.0" "eslint-plugin-vue": "^9.17.0",
"vite": "^6.2.2"
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "libreevent-setup", "name": "libreevent-setup",
"version": "1.0.5", "version": "1.1.13",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
@@ -14,9 +14,9 @@
"vue-router": "^4.2.2" "vue-router": "^4.2.2"
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue": "^5.2.3",
"eslint": "^8.39.0", "eslint": "^8.39.0",
"eslint-plugin-vue": "^9.11.0", "eslint-plugin-vue": "^9.11.0",
"vite": "^4.5.3" "vite": "^6.2.2"
} }
} }

View File

@@ -20,7 +20,7 @@
<div id="doc-container"> <div id="doc-container">
<h1>Getting Started</h1> <h1>Getting Started</h1>
<p>In this tutorial, you are going to learn how to set up and configure libreevent.</p> <p>In this tutorial, you are going to learn how to set up and configure libreevent.</p>
<p>Installing libreevent will take you about 2 hour, if you have never made anything similar before. If you don't want to deal with the installation, you may contact us <a href="https://support.janishutz.com/index.php?a=add&amp;category=8">here</a>, so we can set it up for you.</p> <p>Installing libreevent will take you about 2 hour, if you have never made anything similar before. If you don't want to deal with the installation, you may pay so that I can set it up for you <a href="https://store.janishutz.com/product/libreeventSetup">here</a>.</p>
<p>Let's begin the installation <a href="/docs/setup/installation">here</a>!</p> <p>Let's begin the installation <a href="/docs/setup/installation">here</a>!</p>
</div> </div>
</div> </div>

View File

@@ -19,7 +19,7 @@
<div id="docPage"> <div id="docPage">
<div id="doc-container"> <div id="doc-container">
<h1>Installation</h1> <h1>Installation</h1>
<p>Let's begin with setting up libreevent! If you are not technically savvy or want somebody else to set it up for you, please contact me <a href="https://support.janishutz.com/index.php?a=add&amp;category=8">here</a>. If you want to set it up yourself, read on below!</p> <p>Let's begin with setting up libreevent! If you are not technically savvy or want somebody else to set it up for you, you can pay for the setup <a href="https://store.janishutz.com/product/com.janishutz.libreeventSetup">here</a>. If you want to set it up yourself, read on below!</p>
<h1>Selecting a webhosting company</h1> <h1>Selecting a webhosting company</h1>
<p>Choosing the right hosting provider is not easy, especially since libreevent requires node.js. Therefore, we've listed a few excellent options. Whatever hosting provider you end up going with, it is important that they explicitly list Node.js as a feature of that hosting account. All hosting providers below also include MySQL which is beneficial to have and a must-have when you are expecting to sell a lot of tickets simultaneously. This website here is hosted by asurahosting. <em>Note: I may receive a small commission when you buy webhosting using one of the links provided below. This won't affect the price you pay.</em></p> <p>Choosing the right hosting provider is not easy, especially since libreevent requires node.js. Therefore, we've listed a few excellent options. Whatever hosting provider you end up going with, it is important that they explicitly list Node.js as a feature of that hosting account. All hosting providers below also include MySQL which is beneficial to have and a must-have when you are expecting to sell a lot of tickets simultaneously. This website here is hosted by asurahosting. <em>Note: I may receive a small commission when you buy webhosting using one of the links provided below. This won't affect the price you pay.</em></p>
<ul> <ul>

View File

@@ -1,6 +1,6 @@
# Getting Started # Getting Started
In this tutorial, you are going to learn how to set up and configure libreevent. In this tutorial, you are going to learn how to set up and configure libreevent.
Installing libreevent will take you about 2 hour, if you have never made anything similar before. If you don't want to deal with the installation, you may contact us [here](https://support.janishutz.com/index.php?a=add&category=8), so we can set it up for you. Installing libreevent will take you about 2 hour, if you have never made anything similar before. If you don't want to deal with the installation, you may pay so that I can set it up for you [here](https://store.janishutz.com/product/libreeventSetup).
Let's begin the installation [here](&/setup/installation)! Let's begin the installation [here](&/setup/installation)!

View File

@@ -1,5 +1,5 @@
# Installation # Installation
Let's begin with setting up libreevent! If you are not technically savvy or want somebody else to set it up for you, please contact me [here](https://support.janishutz.com/index.php?a=add&category=8). If you want to set it up yourself, read on below! Let's begin with setting up libreevent! If you are not technically savvy or want somebody else to set it up for you, you can pay for the setup [here](https://store.janishutz.com/product/com.janishutz.libreeventSetup). If you want to set it up yourself, read on below!
# Selecting a webhosting company # Selecting a webhosting company