350 Commits

Author SHA1 Message Date
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
Janis Hutz
c04c0dfd04 Update README.md 2024-06-05 12:00:07 +00:00
Janis Hutz
a3b72966c7 Update README.md 2024-06-05 11:59:46 +00:00
Janis Hutz
36ccf29eac Update README.md 2024-06-05 11:59:15 +00:00
c742d037a6 start updating doc style 2024-05-24 09:56:26 +02:00
8e127a1cb5 update docs 2024-05-24 09:50:23 +02:00
janis
284f96a42d update to latest version 2024-05-08 08:59:40 +02:00
Janis Hutz
c9fd44c337 Merge pull request #19 from simplePCBuilding/dependabot/npm_and_yarn/src/webapp/main/multi-aecc66a090 2024-05-08 06:45:11 +00:00
dependabot[bot]
29ce117898 Bump pdfjs-dist and @pdfme/ui in /src/webapp/main
Bumps [pdfjs-dist](https://github.com/mozilla/pdfjs-dist) to 4.2.67 and updates ancestor dependency [@pdfme/ui](https://github.com/pdfme/pdfme). These dependencies need to be updated together.


Updates `pdfjs-dist` from 2.12.313 to 4.2.67
- [Commits](https://github.com/mozilla/pdfjs-dist/commits)

Updates `@pdfme/ui` from 1.2.3 to 3.2.1
- [Release notes](https://github.com/pdfme/pdfme/releases)
- [Changelog](https://github.com/pdfme/pdfme/blob/main/RELEASE.md)
- [Commits](https://github.com/pdfme/pdfme/compare/1.2.3...3.2.1)

---
updated-dependencies:
- dependency-name: pdfjs-dist
  dependency-type: indirect
- dependency-name: "@pdfme/ui"
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-07 10:46:46 +00:00
Janis Hutz
efee0b4a71 Merge pull request #18 from simplePCBuilding/dependabot/npm_and_yarn/src/server/tar-6.2.1 2024-04-11 08:20:48 +00:00
dependabot[bot]
f2557e5bf6 Bump tar from 6.1.13 to 6.2.1 in /src/server
Bumps [tar](https://github.com/isaacs/node-tar) from 6.1.13 to 6.2.1.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v6.1.13...v6.2.1)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-11 07:46:59 +00:00
Janis Hutz
74263ed71a Merge pull request #17 from simplePCBuilding/dependabot/npm_and_yarn/src/webapp/setup/vite-4.5.3 2024-04-04 05:35:38 +00:00
Janis Hutz
cbbb7d200c Merge pull request #16 from simplePCBuilding/dependabot/npm_and_yarn/src/webapp/main/vite-2.9.18 2024-04-04 05:35:33 +00:00
dependabot[bot]
4f7d945ad0 Bump vite from 4.5.2 to 4.5.3 in /src/webapp/setup
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.5.2 to 4.5.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.5.3/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.5.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-04 01:36:42 +00:00
dependabot[bot]
95af5357d5 Bump vite from 2.9.17 to 2.9.18 in /src/webapp/main
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 2.9.17 to 2.9.18.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v2.9.18/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v2.9.18/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-03 17:52:46 +00:00
0bafd9a96c update version to 1.0.4 2024-04-02 19:14:53 +02:00
Janis Hutz
f58a597b90 Merge pull request #14 from simplePCBuilding/dependabot/npm_and_yarn/src/server/express-4.19.2 2024-04-02 14:12:18 +00:00
dependabot[bot]
60b260c3e2 Bump express from 4.18.2 to 4.19.2 in /src/server
Bumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.2...4.19.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-29 02:35:57 +00:00
Janis Hutz
203fc1fdad Merge pull request #13 from simplePCBuilding/dependabot/npm_and_yarn/src/server/follow-redirects-1.15.6 2024-03-19 09:07:44 +01:00
dependabot[bot]
86fe6b27f6 Bump follow-redirects from 1.15.5 to 1.15.6 in /src/server
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.5 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.5...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-17 01:14:54 +00:00
janis
47b1bae815 update package.json for new release 2024-03-07 16:17:17 +01:00
janis
5a5407920b update to V1.0.3 2024-03-07 16:13:41 +01:00
45a38cb36b update nodemailer because security 2024-03-05 17:01:41 +01:00
Janis Hutz
961fa5fc80 Update README.md 2024-01-29 19:31:51 +01:00
Janis Hutz
09633132e0 Update README.md 2024-01-29 19:30:13 +01:00
c3e1411bfe add version update stuff 2024-01-20 09:05:27 +01:00
Janis Hutz
35c4e89c9e Merge pull request #10 from simplePCBuilding/dependabot/npm_and_yarn/src/webapp/setup/vite-4.5.2 2024-01-20 08:56:28 +01:00
Janis Hutz
359fca424c Merge pull request #9 from simplePCBuilding/dependabot/npm_and_yarn/src/webapp/main/vite-2.9.17 2024-01-20 08:56:21 +01:00
dependabot[bot]
6846c187c3 Bump vite from 4.4.12 to 4.5.2 in /src/webapp/setup
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.4.12 to 4.5.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.5.2/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.5.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-20 02:23:47 +00:00
dependabot[bot]
0b0ddda4b9 Bump vite from 2.9.16 to 2.9.17 in /src/webapp/main
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 2.9.16 to 2.9.17.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v2.9.17/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v2.9.17/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-19 22:55:39 +00:00
Janis Hutz
0f5c652bd4 Merge pull request #8 from simplePCBuilding/dependabot/npm_and_yarn/src/server/follow-redirects-1.15.4 2024-01-12 11:01:02 +01:00
dependabot[bot]
7b31b209e7 Bump follow-redirects from 1.15.2 to 1.15.4 in /src/server
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.2 to 1.15.4.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.2...v1.15.4)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-10 22:33:09 +00:00
Janis Hutz
7243592d03 Merge pull request #7 from simplePCBuilding/dependabot/npm_and_yarn/src/webapp/setup/vite-4.4.12 2023-12-08 09:28:07 +00:00
dependabot[bot]
92d6065e01 Bump vite from 4.4.4 to 4.4.12 in /src/webapp/setup
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.4.4 to 4.4.12.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.4.12/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.4.12/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-06 00:12:37 +00:00
3916aefe6b add launch trailer thumbnail 2023-11-29 21:00:19 +01:00
Janis Hutz
3ec9788163 Merge pull request #6 from simplePCBuilding/dependabot/npm_and_yarn/src/server/axios-1.6.0
Bump axios from 1.4.0 to 1.6.0 in /src/server
2023-11-12 12:34:32 +00:00
ddfb2ed5b9 small change 2023-11-12 12:33:40 +01:00
6a181b0139 finish version bump 2023-11-12 12:27:52 +01:00
bf24533cdd bump version number 2023-11-12 12:12:20 +01:00
0d8f3d3e0a small setup patches (spelling mistakes) 2023-11-12 12:09:27 +01:00
f6e4d3f8e3 add missing file 2023-11-12 11:07:58 +01:00
dependabot[bot]
4e46f2dc3a Bump axios from 1.4.0 to 1.6.0 in /src/server
Bumps [axios](https://github.com/axios/axios) from 1.4.0 to 1.6.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.4.0...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-11 14:28:52 +00:00
Janis Hutz
acae6ba9c0 Update README.md 2023-11-06 09:59:04 +01:00
Janis Hutz
1aafb0550a Merge pull request #4 from simplePCBuilding/dependabot/npm_and_yarn/src/webapp/setup/postcss-8.4.31
Bump postcss from 8.4.26 to 8.4.31 in /src/webapp/setup
2023-11-06 09:57:10 +01:00
Janis Hutz
811ab2727b Merge pull request #5 from simplePCBuilding/dependabot/npm_and_yarn/src/server/crypto-js-4.2.0
Bump crypto-js from 4.1.1 to 4.2.0 in /src/server
2023-11-06 09:54:48 +01:00
dependabot[bot]
7d61d084f1 Bump crypto-js from 4.1.1 to 4.2.0 in /src/server
Bumps [crypto-js](https://github.com/brix/crypto-js) from 4.1.1 to 4.2.0.
- [Commits](https://github.com/brix/crypto-js/compare/4.1.1...4.2.0)

---
updated-dependencies:
- dependency-name: crypto-js
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 08:53:07 +00:00
dependabot[bot]
160eaaa0ce Bump postcss from 8.4.26 to 8.4.31 in /src/webapp/setup
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.26 to 8.4.31.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.26...8.4.31)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 08:52:54 +00:00
Janis Hutz
5ee5c3695d Create dependabot.yml 2023-11-06 09:51:24 +01:00
Janis Hutz
77de93f9c3 Merge pull request #3 from simplePCBuilding/simplePCBuilding-patch-1
Create SECURITY.md
2023-11-06 09:48:49 +01:00
Janis Hutz
cc4efce26d Create SECURITY.md 2023-11-06 09:48:00 +01:00
Janis Hutz
5fef565e4b Update notes.md 2023-10-31 07:36:07 +00:00
Janis Hutz
d683f4a520 Update notes.md 2023-10-31 07:35:41 +00:00
Janis Hutz
7ce024a768 Update notes.md
Add links to apps to add to website
2023-10-27 08:49:05 +00:00
0d8915930c fix backdrop of highlighting on website 2023-10-25 19:30:29 +02:00
d9ca5bd7fc fix small spelling mistake on website 2023-10-25 19:17:34 +02:00
66f0042e1c reset databases 2023-10-25 19:07:35 +02:00
451222ee5d fix merge error 2023-10-25 15:50:34 +02:00
d66fdb7c58 add updates to voting plugin 2023-10-25 15:48:58 +02:00
janis
ee6d73a4cf remove debug code 2023-10-24 10:33:20 +02:00
janis
8750ea54a9 add sorting to voting plugin 2023-10-24 10:14:06 +02:00
janis
0134e984f0 remove ticket limit hard coded for testing 2023-10-24 10:12:24 +02:00
60b53ec435 add class to div that was missing it 2023-10-23 18:12:24 +02:00
172659b1c4 fix up voting styling 2023-10-23 18:11:57 +02:00
ffbb040f22 make voting plugin better 2023-10-23 18:11:18 +02:00
13cba558d2 improve voting plugin - more updates incoming! 2023-10-23 14:28:03 +02:00
Janis Hutz
255b5f503c Update README.md
Remove note that project is not complete yet
2023-10-21 16:24:39 +00:00
f02cb8cbc0 small change to package script 2023-10-21 14:58:28 +02:00
f41e03ddf8 fix admin panel nav bug 2023-10-20 19:46:13 +02:00
c6778bd251 potential fix for nav menu bug on webkit 2023-10-20 18:47:39 +02:00
095567eb44 slight design change 2023-10-18 15:08:24 +02:00
15bf96de3e add config files back for testing 2023-10-16 08:29:36 +02:00
bdaf04e3b5 add mail notification if processing fails 2023-10-15 15:05:19 +02:00
a679c5915e make payment processing more robust 2023-10-15 08:02:02 +02:00
9b6fd1355e small note in readme 2023-10-14 13:49:00 +02:00
98c5f4424e fixed bug in 2fa 2023-10-14 10:56:49 +02:00
02dee5ad0d bug fixes 2023-10-14 10:50:50 +02:00
b31667a77f fix a few bugs 2023-10-14 08:00:44 +02:00
e61a425ba3 make side cart view look better on mobile 2023-10-13 13:35:50 +02:00
debe7b8147 add more docs 2023-10-12 15:28:34 +02:00
71a6cc6de3 last preparations for release 2023-10-12 15:15:47 +02:00
9e07c493dc add favicon 2023-10-12 15:07:59 +02:00
6fc1193119 optimize package script 2023-10-12 14:59:18 +02:00
e1bc7579db make package script clean up 2023-10-12 14:53:04 +02:00
e09039f019 finished package script 2023-10-12 14:50:27 +02:00
e517ae4766 add packaging script 2023-10-12 14:21:57 +02:00
62c2d57606 remove test routes 2023-10-11 13:33:13 +02:00
1633cedec2 reset database, update imports, prepare for build 2023-10-11 11:01:57 +02:00
e12a8cecee add deployment notes 2023-10-11 09:57:08 +02:00
470e3f3e91 fix bug in android app + more pages 2023-10-10 17:54:35 +02:00
ee8f6291cd improve ticket validation engine 2023-10-10 15:10:45 +02:00
13c09f5a8c remove app marketing directory from repo 2023-10-10 15:01:28 +02:00
96c09f4977 add iOS app source code 2023-10-10 13:49:59 +02:00
ea5ea207a9 android app done, fix in ticket selection api 2023-10-10 12:10:12 +02:00
5245305daa design updates 2023-10-10 10:35:13 +02:00
a82d954d77 add automatic favicon generator 2023-10-09 20:11:20 +02:00
e5daaaee43 add link for case that download failed 2023-10-09 20:04:41 +02:00
904a3e0b64 start removing third-party requests 2023-10-09 20:00:54 +02:00
459c6fb316 add gpl note 2023-10-09 19:26:22 +02:00
839e118129 almost finished android app 2023-10-09 19:17:19 +02:00
45562414e4 fix bug in seat selector + more android stuff 2023-10-09 17:49:45 +02:00
ee5b70fd3c fix small bug in ticket validation engine 2023-10-08 12:00:21 +02:00
5644272d5e some more progress on android app 2023-10-08 11:07:25 +02:00
ff87b8646a some more progress on android app 2023-10-08 11:07:25 +02:00
033fdf3483 update colors + bugfixes 2023-10-07 16:55:42 +02:00
5d55140681 finish up website 2023-10-07 15:49:50 +02:00
d5c7a96ad7 updates to website 2023-10-07 15:43:51 +02:00
e767c1fb3d update website to be almost complete 2023-10-07 15:04:39 +02:00
97c68d9b17 add db reset to init 2023-10-07 14:44:39 +02:00
Janis Hutz
6a60c3c93b Update README.md 2023-10-06 19:56:07 +00:00
janis
dbb1e7a977 add linting to server folder 2023-10-05 13:57:35 +02:00
janis
5c5462186f do more cleanup of code using eslint 2023-10-05 13:46:53 +02:00
janis
0352bb9051 setup do linter run & fix 2023-10-05 13:31:51 +02:00
janis
46d565fbe7 update logo 2023-10-05 13:30:58 +02:00
janis
7a34e36c4e update notes 2023-10-05 12:06:39 +02:00
janis
63e5ff7afc update project logo (partially) 2023-10-04 21:28:14 +02:00
a9f1018add more fixes that were suggested by eslint 2023-10-02 06:37:39 +02:00
02e4446e78 add notes 2023-10-02 06:36:31 +02:00
f7e3e2122a some more fixes from eslint 2023-10-01 15:46:52 +02:00
5887913f07 run eslint to fix errors 2023-10-01 15:45:02 +02:00
3850544ebb some progress on website 2023-10-01 15:40:28 +02:00
fee562d6e7 imporve readme, add more docs 2023-09-30 17:04:18 +02:00
ee7b90cd93 lots of progress on docs 2023-09-30 16:56:42 +02:00
5a3323a0ea mobile optimisation of seat plan optimized 2023-09-30 14:36:15 +02:00
e8e0de3ae9 new start page template done 2023-09-30 14:30:49 +02:00
a84e4197d4 add logo upload 2023-09-30 14:01:34 +02:00
9e9c4b0ec6 free seat tracker rewrite 2023-09-30 13:44:07 +02:00
fa5be769e2 prepare for rewrite of ticket counting 2023-09-30 10:34:11 +02:00
b5c88e6284 more styling 2023-09-30 09:55:36 +02:00
bcc32f9b28 mobile optimize popups and notifications 2023-09-29 16:03:32 +02:00
7e4b04570e styling, first start page template 2023-09-27 16:08:39 +02:00
b3bfa36c77 some progress on designing 2023-09-26 17:18:15 +02:00
janis
6abc675d12 update website 2023-09-25 09:58:55 +02:00
10da2d6ba0 start mobile optimization 2023-09-24 11:27:58 +02:00
167f1c8037 remove todos 2023-09-23 11:15:17 +02:00
e858daae64 more mobile optimizations 2023-09-23 11:13:47 +02:00
009cf4aaf0 android app almost done, start designing 2023-09-23 10:54:55 +02:00
0019b25244 fix a possible crash in payrexx integration 2023-09-22 16:49:22 +02:00
a6c6a4feb0 app api fix 2023-09-22 09:53:41 +02:00
janis
d37fcda0db remove obsolete file 2023-09-21 15:18:22 +02:00
80b1c2c3ec small file changes 2023-09-20 16:17:07 +02:00
203af48961 seat numbering algorithm working 2023-09-20 16:13:00 +02:00
32baf07c39 progress on seat numbering algorithm 2023-09-20 15:41:48 +02:00
janis
e3f104ccf9 improve email checker 2023-09-19 14:33:29 +02:00
janis
d7a293517d add todo 2023-09-19 13:46:21 +02:00
janis
7eaa81ba14 seat numbering algorithm progress 2023-09-19 11:10:11 +02:00
janis
8097ec6368 more docs 2023-09-19 09:24:58 +02:00
janis
b76f832068 more docs 2023-09-18 17:11:00 +02:00
janis
163564ae7d begin of seat numbering impl 2023-09-18 16:50:22 +02:00
janis
36ad4c5122 fix notifications 2023-09-18 16:36:30 +02:00
janis
a856f227bc various changes to components 2023-09-18 16:14:57 +02:00
130831f050 progress on docs, fixes in basic setup 2023-09-18 15:14:09 +02:00
9a4d38be31 payrexx integration fixed 2023-09-18 14:07:48 +02:00
janis
5c6f189396 doc updates 2023-09-18 10:11:58 +02:00
9c8278df37 some more docs 2023-09-18 09:04:58 +02:00
2881d6a4fc fix ascii art 2023-09-18 08:54:19 +02:00
a9a12d0dc3 move db to a more accessible folder 2023-09-18 08:50:24 +02:00
fb8c3b1824 small changes 2023-09-17 17:24:59 +02:00
cd9d6d5027 add more checks 2023-09-17 17:19:40 +02:00
daba3332e8 various bugfixes 2023-09-17 17:00:00 +02:00
6dd11300d3 lots of fixes 2023-09-17 12:25:44 +02:00
4d4bb81099 cleanup work and prep for testing 2023-09-16 15:32:34 +02:00
94ee69642a newsletter plugin done 2023-09-16 15:11:17 +02:00
892772bcb9 prepare newsletter plugin 2023-09-16 11:49:35 +02:00
364f1d4c38 android app progress + polls plugin 2023-09-16 11:43:42 +02:00
196cc5aed9 polls plugin + android app progress 2023-09-16 11:43:42 +02:00
086a9a9654 start work on newsletter plugin 2023-09-13 16:09:11 +02:00
d7eed47d2c try to fix payrexx integration (unsuccessful) 2023-09-11 19:50:56 +02:00
janis
24e54f7e5c start seat counting 2023-09-11 17:05:58 +02:00
janis
2630a1707d seat counting working 2023-09-11 16:47:18 +02:00
9f75aaac99 bug fixes for payrexx integration (still no good) 2023-09-11 15:10:39 +02:00
171cba0833 add more install instructions 2023-09-10 19:52:32 +02:00
ebb55ffe5e try to fix payrexx (not yet working) 2023-09-10 17:46:14 +02:00
51476afbb3 add note about beta for test deployment 2023-09-10 10:53:30 +02:00
c976f97e78 update event data 2023-09-09 14:06:11 +02:00
1d089c8d93 add colouring for seat plan 2023-09-09 13:55:05 +02:00
defaafdd54 setup app complete 2023-09-08 16:26:37 +02:00
809a05c864 fix app api routes 2023-09-07 12:50:51 +02:00
1ac4e1ce40 add troubleshooting guide for encoding err 2023-09-07 09:32:28 +02:00
733cbf2dbb user account page done (- styling) 2023-09-07 08:40:21 +02:00
10d0703d78 user account view functionality partially done 2023-09-06 17:50:46 +02:00
b91337f831 progress on setup and account view 2023-09-06 15:54:33 +02:00
4afeb7a146 add some setup routes already 2023-09-06 15:27:50 +02:00
667b542893 start page settings done 2023-09-05 18:45:17 +02:00
adf0133cd3 add start page settings 2023-09-05 17:42:39 +02:00
cc57a8b80a add startPage settings files 2023-09-05 13:15:36 +02:00
janis
1ad22482a4 fix bug in start page settings + a bit of progress 2023-09-05 10:33:55 +02:00
janis
a52ec14845 start pages settings (BROKEN) 2023-09-04 17:05:58 +02:00
janis
bebf53e5eb mobile optimize user signup 2023-09-04 16:00:54 +02:00
62f0ef1ce8 add version + start page builder 2023-09-04 14:47:15 +02:00
4a26a05cdc fix admin account deletion 2023-09-04 14:24:21 +02:00
b9b2898392 more android app stuff 2023-09-03 16:03:54 +02:00
fcd3f4a6bb work on android app 2023-09-03 16:03:46 +02:00
b784a6c605 finish various todo 2023-09-02 13:48:11 +02:00
043aa171ca root login + admin account settings 2023-09-01 17:16:52 +02:00
bac321f48e fix bug in seat plan editor (loading broken) 2023-09-01 09:50:40 +02:00
e26369f133 payment gateway settings now fully working 2023-09-01 09:40:06 +02:00
6d68c2d55a add password setting option with password view 2023-08-31 18:01:35 +02:00
janis
b801417c01 add root accounts 2023-08-31 16:12:03 +02:00
janis
1ecfbacc89 add dark mode on default start page 2023-08-31 13:51:05 +02:00
6ea687fa47 add plugin settings page 2023-08-30 17:17:06 +02:00
f0d433a0eb load payment gateway settings 2023-08-30 16:07:53 +02:00
6a3127a35a prepare payment gateway settings 2023-08-29 17:27:45 +02:00
6ac4fd9cda setup almost complete without saving 2023-08-29 16:51:34 +02:00
janis
466a4fbd8b various fixes 2023-08-28 17:09:56 +02:00
a0984782a8 add testing of new method of start page 2023-08-27 13:54:07 +02:00
8c4d70ac28 more progress on setup 2023-08-26 15:01:57 +02:00
991b96d54d reset db 2023-08-26 09:59:05 +02:00
c128b18418 fix major bug in json db 2023-08-26 09:58:19 +02:00
97183cb304 json db has major bug -> fix under way 2023-08-25 20:09:55 +02:00
9952566b6b fix jsondb bug -> missing promise resolution 2023-08-25 19:11:06 +02:00
janis
59fa703595 in setup name change 2023-08-25 16:18:28 +02:00
86a7ec13ad root account setup email and pw checker + other 2023-08-25 09:57:29 +02:00
1705128482 start styling setup 2023-08-24 16:12:20 +02:00
janis
fa5d53aef4 update settings 2023-08-24 13:50:49 +02:00
920da0f321 progress on setup 2023-08-23 16:21:08 +02:00
17481ba03c deletion postponing 2023-08-23 15:40:31 +02:00
c3179194b8 various changes 2023-08-23 11:58:37 +02:00
janis
eacaebd84b add gc for db 2023-08-22 19:21:40 +02:00
64af566b86 update some event settings 2023-08-21 15:11:17 +02:00
e2440485d9 config update, Almost fully styled details page 2023-08-21 14:52:24 +02:00
janis
6743ed778e begin json db testing 2023-08-21 11:59:30 +02:00
4bacd4aa8f some styling for event details view 2023-08-20 11:55:58 +02:00
5505313e3e app endpoints, enforce email verification 2023-08-19 14:10:40 +02:00
71a2927372 various small changes and fixes 2023-08-19 13:35:46 +02:00
6051b18796 implement first part of occupied seat counter 2023-08-18 18:13:53 +02:00
4208ad44a2 json db almost done 2023-08-18 09:28:54 +02:00
fbb96ba838 updates to docs 2023-08-18 09:07:42 +02:00
janis
ec7ab0faee add some more details on website 2023-08-16 09:16:58 +02:00
c7b097fe23 update documentation 2023-08-15 12:11:05 +02:00
3e7ff741a3 add first json db functions 2023-08-15 10:42:24 +02:00
1beba0131a add plugin loader 2023-08-13 15:07:41 +02:00
029181329a general event settings done 2023-08-12 14:49:36 +02:00
e634ac5381 add payrexx as payment provider 2023-08-12 12:47:35 +02:00
2c7e0f39bc Ignore event assets on git upload 2023-08-11 16:52:00 +02:00
887e905343 Loading event data from ui possible now 2023-08-11 16:50:55 +02:00
dbfe89998e fix some things with event loading 2023-08-11 16:32:53 +02:00
d5c581170f event settings almost done 2023-08-11 15:37:04 +02:00
d2c0257b8f clean up settings of event and general ones 2023-08-10 20:54:53 +02:00
5c87a5a282 event image upload done 2023-08-10 19:48:10 +02:00
0a1dee882a restructure and rethink setup 2023-08-10 14:11:13 +02:00
0735224dd1 pw reset done 2023-08-10 13:54:17 +02:00
dfda842c7b password reset preparations done 2023-08-10 12:23:26 +02:00
adca2915b7 move to easier to manage ticket selection 2023-08-09 14:22:38 +02:00
3e95dfeee3 fix payments not working with last change 2023-08-08 16:08:38 +02:00
234d809ebf completely re-engineered backend for tickets 2023-08-08 15:53:10 +02:00
4d27fc8c48 prepare to redo ticket selection api 2023-08-08 10:52:51 +02:00
ed991d3f57 start implementing android app 2023-08-07 18:01:56 +02:00
18f6a5226f Android App Scaffolding 2023-08-07 17:53:13 +02:00
e15057d682 optimise speed of webhook for stripe 2023-08-07 17:41:49 +02:00
9b7eb913ae mostly working ticket selection for non-seatplan 2023-08-07 17:35:20 +02:00
ed38edd880 ticket gen working + various changes 2023-08-07 12:24:52 +02:00
5cbf624284 payments fully integrated 2023-08-06 20:35:50 +02:00
32ed36b93f ticket generation working 2023-08-06 18:37:21 +02:00
2812ab9055 2fa settings now available 2023-08-05 12:45:05 +02:00
2c18ee6f61 working user sign up 2023-08-05 12:30:34 +02:00
f9e6b8fc17 sign up almost fully working 2023-08-05 11:52:29 +02:00
d9adc91256 signup partially working 2023-08-04 13:46:26 +02:00
935c8e32da payment cancellation 2023-08-03 16:44:23 +02:00
8784f79014 stripe integration done, handling missing still 2023-08-03 15:37:50 +02:00
19874cd007 fix various bugs in seat plan selector 2023-08-03 11:11:16 +02:00
127bd5b630 stripe almost working 2023-08-02 17:09:39 +02:00
de3ab81be2 working 2fa system 2023-08-02 14:13:21 +02:00
242bfa012e remove some debug code 2023-08-01 15:17:10 +02:00
581e7143f7 various small changes + almost complete ticket gen 2023-08-01 14:26:46 +02:00
836b56b69d add queue handler 2023-07-31 15:54:34 +02:00
9827bb2c69 clean up some todos 2023-07-31 15:47:10 +02:00
6083ec262c add more documentation 2023-07-29 11:08:32 +02:00
0ef138c865 add some more documentation 2023-07-28 09:38:53 +02:00
b8b6467633 various bugfixes 2023-07-27 15:10:14 +02:00
88f16c0421 add cookie security settings 2023-07-27 14:26:29 +02:00
a2dac4bbbb update postHandler to accept ticket counts 2023-07-27 14:22:13 +02:00
d624637e3e some semi finished features 2023-07-27 12:01:19 +02:00
15217c640a working occupied seats 2023-07-26 16:45:15 +02:00
7716f56ea1 loading of occupied seats (BROKEN) 2023-07-26 15:45:21 +02:00
ee8aa52dd8 db + saving of reserved tickets 2023-07-26 12:24:18 +02:00
d0b215f022 add another db table (sql dbs) 2023-07-26 08:18:20 +02:00
782a245c17 begin stripe plugin 2023-07-25 15:23:49 +02:00
ff277a41ae begin integration of payment gateways 2023-07-25 12:20:52 +02:00
c6313bafdf various changes 2023-07-25 11:52:10 +02:00
8e777ee281 add console styling 2023-07-24 18:59:55 +02:00
84c0017e2a working location settings (incl saving) 2023-07-24 15:44:24 +02:00
5e5e7fee49 fix bug in seat plan loading 2023-07-23 19:41:32 +02:00
4aa4602f69 purchase view progress, cleanup 2023-07-22 10:44:04 +02:00
29d5652834 finished cart management 2023-07-22 10:10:18 +02:00
3fe01239b3 semi finished standing sp comp selection 2023-07-21 14:56:52 +02:00
cbadd2a2c1 seatplan saving and loading for admin & user 2023-07-20 15:24:38 +02:00
d855f61347 mostly working seat selection 2023-07-19 14:42:32 +02:00
b20103d5f1 update ticket rendering 2023-07-18 21:40:31 +02:00
e271ff091e migrate to new cart engine 2023-07-18 10:19:49 +02:00
21afcdb036 restructuring 2023-07-18 09:00:57 +02:00
98ac5c8dfc finish moving setup to own webapp 2023-07-17 16:14:46 +02:00
7f08269796 separate setup from main page for faster load 2023-07-17 15:43:25 +02:00
b30a3226a5 fix event sorting in order view 2023-07-17 15:08:41 +02:00
9da40f2528 ordering view sorting (broken) 2023-07-17 15:01:34 +02:00
e5d3e08a75 add password hashing function + easier prod 2023-07-16 14:59:07 +02:00
8b6c190e15 almost finished admin auth system 2023-07-16 13:40:40 +02:00
afdaf13048 almost functional user login (mail still missing) 2023-07-16 11:45:48 +02:00
a8cf4ec9a4 mysql db partially integrated 2023-07-15 17:07:15 +02:00
5270317e2d fix bugs, full two fa system done 2023-07-13 15:00:58 +02:00
9f5d5a3be3 two fa almost complete 2023-07-13 09:58:43 +02:00
399726d563 work on 2fa system 2023-07-12 17:04:40 +02:00
447533ed87 sql manager 2023-07-12 16:23:13 +02:00
cdaa6d76e5 progress on mysql db interface 2023-07-12 11:39:26 +02:00
fbedf9e95e add more mysql stuff 2023-07-12 09:06:29 +02:00
865141d945 restruct + 2fa + auth 2023-07-11 16:53:17 +02:00
d0647ba1bb update eslint config + other changes 2023-07-11 15:40:39 +02:00
d763448a12 add nodemailer and html-to-text 2023-07-11 15:14:24 +02:00
72aae72dcf add mail config file 2023-07-11 15:05:33 +02:00
29a68edc0c add various things of the backend 2023-07-09 19:53:55 +02:00
fc4b18274b more progress on backend 2023-07-08 13:53:06 +02:00
be263fcd6b begin backend implementation 2023-07-08 13:31:42 +02:00
ca5ab2d74a lots of changes for the website 2023-07-08 13:01:21 +02:00
b86d7dd434 many changes to various components 2023-07-08 11:45:16 +02:00
775a91351a Optimise seat chooser 2023-07-07 21:11:49 +02:00
2e0c9c49b5 fix bugs caused by switch to vite 2023-07-04 18:34:18 +02:00
77260542e1 update vite config 2023-07-04 18:15:04 +02:00
3b8bec2f6c migrate to vite instead of webpack 2023-07-04 18:11:20 +02:00
481 changed files with 35706 additions and 27042 deletions

View File

@@ -64,6 +64,7 @@ module.exports = {
'space-in-parens': [ 'space-in-parens': [
'error', 'error',
'always' 'always'
] ],
'no-var': 'error'
} }
}; };

11
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "npm" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"

17
.gitignore vendored
View File

@@ -14,4 +14,19 @@
node_modules node_modules
# ignore dist folder (this repo only contains source code!) # ignore dist folder (this repo only contains source code!)
/dist /dist
*.secret.json
# ignore all latex files except .tex
*.aux
*.fls
*.synctex.gz
*.fdb_latexmk
._wordcount_selection.tex
/*.zip
AppMarketing
yarn.lock
package-lock.json

55
LICENSE
View File

@@ -618,57 +618,4 @@ an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee. copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

View File

@@ -22,9 +22,19 @@
<img alt="App Version" src="https://img.shields.io/github/package-json/v/simplePCBuilding/libreevent.svg?label=Development Version"> <img alt="App Version" src="https://img.shields.io/github/package-json/v/simplePCBuilding/libreevent.svg?label=Development Version">
</div> </div>
A fully featured, fully free and open source event management solution you can host yourself, to manage your event and sell tickets. All you need is a webserver that can run node.js! <div id="donate" align="center">
<a href="https://store.janishutz.com/donate" target="_blank"><img src="https://store-cdn.janishutz.com/static/support-me.jpg" width="150px"></a>
</div>
Visit our [website](https://libreevent.janishutz.com) A fully featured, free and open source event management solution you can host yourself, to manage your event and sell tickets. All you need is a webserver that can run node.js!
Visit the project's [website](https://libreevent.janishutz.com)
libreǝvent IS FREE SOFTWARE. IT IS PROVIDED "AS IS" AND AS SUCH COMES WITH ABSOLUTELY NO WARRANTY TO THE EXTENT PERMITTED BY APPLICABLE LAW. If anything does not work, please report it back, but do not expect it to be fixed immediately, as this software is developed by volunteers in their free time.
# Download
You may download this project using the GitHub releases page or the direct links on the [libreevent website](https://libreevent.janishutz.com/download) as this only downloads the ready-to-distribute version, not the development version.
Alternatively, you may download the project directly from GitHub (by cloning it or downloading the code) but you'll have to compile and package the project [manually](https://libreevent.janishutz.com/docs/contributing/packaging).
# System requirements # System requirements
- node.js V16.0+ - node.js V16.0+
@@ -33,15 +43,19 @@ Visit our [website](https://libreevent.janishutz.com)
- any CPU from the last 10 years - any CPU from the last 10 years
- Any operating system that can run node.js - Any operating system that can run node.js
# Download # Roadmap
You may download this project using the GitHub releases page or the direct links on the [libreevent website](https://libreevent.janishutz.com/download) as this only downloads the ready-to-distribute version, not the development version. There are a few features planned for libreevent. Please discuss other ideas in the issue I opened specifically for this. (see #12)
Alternatively, you may download the project directly from GitHub (by cloning it or downloading the code) but you'll have to compile and package the project [manually](https://libreevent.janishutz.com/docs/contributing/packaging).
# 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)
@@ -52,19 +66,18 @@ If you like this project and it helped you save money, please consider donating
- [website/](/website/): contains all of the website files: - [website/](/website/): contains all of the website files:
- [website/dist/](/website/dist/): contains all the ready to distribute website files - [website/dist/](/website/dist/): contains all the ready to distribute website files
- [website/src/](/website/src/): contains all of the source files (markdown format) for the website. These files are converted into HTML by the build script. - [website/src/](/website/src/): contains all of the source files (markdown format) for the website. These files are converted into HTML by the build script.
- [package.js](/package.js): collects all of the files of the project and copies them into the [dist/](/dist/) folder. It also minifies the files in the process to reduce package size. - [package.sh](/package.sh): collects all of the files of the project and copies them into the [dist/](/dist/) folder. It also automatically compiles the webapps and removes unnecessary files as well as resetting the databases and settings to the defaults.
- [.eslintrc.js](/.eslintrc.js): ESlint config, the linter used for the project - [.eslintrc.js](/.eslintrc.js): ESlint config, the linter used for the project. Before starting a PR, make sure the linter is happy!
- [.gitignore](/.gitignore): ignored files, currently is node_modules & log files. - [notes.md](./notes.md): Project notes, including future plans for it.
You may notice some additional folders appearing after running You may notice some additional folders appearing after running
``` ```
npm run package ./package.sh
``` ```
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).
## This project is currently NOT ready to be used! <div id="donate" align="center">
Development of this project is currently ongoing and no stable version is available yet. <a href="https://store.janishutz.com/donate">
<img src="https://store-cdn.janishutz.com/static/support-me.jpg" width="150px">
</a>
## ROADMAP </div>
The goal is to get this tool fully functioning by the End of September 2023.

13
SECURITY.md Normal file
View File

@@ -0,0 +1,13 @@
# Security Policy
## Supported Versions
libreevent gets security updates as part of regular software updates. Since there is only one major version currently, only this one gets updates
| Version | Supported |
| ------- | ------------------ |
| 1.x.x | :white_check_mark: |
| 0.x.x | :x: |
## Reporting a Vulnerability
Please open an issue if you have discovered a security problem or send a mail to [development@janishutz.com](mailto:development@janishutz.com)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

View File

@@ -0,0 +1,3 @@
# Ticket Template
This template can be used by libreevent if you do not edit the template. It is entirely copyleft and you can change it to your liking. The LaTex document is included with libreevent.

Binary file not shown.

View File

@@ -0,0 +1,25 @@
\documentclass[11pt]{article}
% Imports %
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage[export]{adjustbox}
\usepackage{tcolorbox}
\usepackage{xcolor}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
\addtolength{\oddsidemargin}{-0.5in}
\addtolength{\textwidth}{1in}
\addtolength{\evensidemargin}{-0.55in}
\addtolength{\topmargin}{-0.75in}
\addtolength{\textheight}{1.5in}
\begin{document}
\begin{tcolorbox}[colback=gray!5!white,colframe=black!75!black,title=Your Ticket - libreevent event management solution]
\vspace{6cm}
\end{tcolorbox}
\end{document}

BIN
assets/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 698 KiB

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

22
notes.md Normal file
View File

@@ -0,0 +1,22 @@
# DEPLOY
For deployment create the following items:
- libreevent-[VERSION HERE]-npm.zip (contains the node_modules folder from src/server)
- libreevent-[VERSION HERE]-prebuilt.zip (contains a ready-to-use compiled version of libreevent (main download))
- libreevent-[VERSION HERE]-full-icu.zip (contains the package.json file which can be used if full-icu is not enabled in Node.js)
-> This can be achieved by running the bash script `package.sh` in the root folder of the project
# Links to apps
- https://play.google.com/store/apps/details?id=com.janishutz.libreevent
- https://apps.apple.com/ch/app/libreevent-entry-control/id6464594870?l=en-GB
# PLANS
- Website: Add ids to titles
- FUTURE: Implement Permission system
- FUTURE: Add Admin profile (page to change account settings per person like changing pwd)
- FUTURE: add multi-language support
- FUTURE: Guest purchase
- FUTURE: Colour for event banner background
- FUTURE: add webpack (or any other minifying tool) to project website to decrease file size (OPTIONAL)

View File

@@ -1,8 +0,0 @@
/*
* libreevent - package.js
*
* Created by Janis Hutz 05/14/2023, Licensed under the GPL V3 License
* https://janishutz.com, development@janishutz.com
*
*
*/

View File

@@ -1,6 +1,6 @@
{ {
"name": "libreevent", "name": "libreevent",
"version": "1.0.0", "version": "1.1.12",
"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": {
@@ -21,4 +21,4 @@
"url": "https://github.com/simplePCBuilding/libreevent/issues" "url": "https://github.com/simplePCBuilding/libreevent/issues"
}, },
"homepage": "https://libreevent.janishutz.com" "homepage": "https://libreevent.janishutz.com"
} }

197
package.sh Executable file
View File

@@ -0,0 +1,197 @@
#
# libreevent - package.sh
#
# Created by Janis Hutz 10/12/2023, Licensed under the GPL V3 License
# https://janishutz.com, development@janishutz.com
#
#
v="V1.1.12"
echo "
_ _ _ _
| (_) | | |
| |_| |__ _ __ ___ _____ _____ _ __ | |_
| | | '_ \\| '__/ _ \\/ _ \\ \\ / / _ \\ '_ \\| __|
| | | |_) | | | __/ __/\\ V / __/ | | | |_
|_|_|_.__/|_| \\___|\\___| \\_/ \\___|_| |_|\\__|
-------------------------------
==> Preparing packages for libreevent
"
echo "
==> Compiling setup... <==
"
sleep 0.5
cd src/webapp/setup
npm i
npm audit fix --force
sleep 1
npm run build
echo "
==> Compiling main webapp... <==
"
sleep 0.5
cd ../main
npm i
npm audit fix --force
sleep 1
npm run build
echo "
==> Resetting databases <==
"
sleep 1
cd ../../server
node prepareDB.js
sleep 1
echo "
==> Collecting files to archive <==
"
sleep 1
cd ../../
rm -rf dist/
mkdir dist/
cd dist
shopt -s extglob
cp -r ../src/server/!(node_modules) .
rm webapp
mkdir webapp
mkdir webapp/main
mkdir webapp/setup
cp -rv ../src/webapp/main/dist ./webapp/main/dist
cp -rv ../src/webapp/setup/dist ./webapp/setup/dist
rm .gitignore
rm prepareDB.js
rm test.js
rm config/*.secret.json
rm backend/plugins/payments/*/*.secret.json
echo "agdhgasjlgagaldusaglueagelwadgl" >> setupkey.txt
echo "
==> Collected files to archive <==
==> Archiving... <==
"
sleep 1
cd ..
zip -9r libreevent-$v-custom.zip dist
echo "
==> Created custom archive <==
==> Creating archive for node_modules <==
"
sleep 1
cd src/server
npm i
npm audit fix --force
sleep 1
cd ../../
zip -9r libreevent-$v-npm.zip src/server/node_modules
echo "
==> Created npm archive <==
==> Creating archive for full-icu package.json <==
"
sleep 1
cd src/server
npm i full-icu
cd ../../
zip -9r libreevent-$v-full-icu.zip src/server/package.json src/server/package-lock.json
cd src/server
npm uninstall full-icu
echo "
==> 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 "
_ _ _ _
| (_) | | |
| |_| |__ _ __ ___ _____ _____ _ __ | |_
| | | '_ \\| '__/ _ \\/ _ \\ \\ / / _ \\ '_ \\| __|
| | | |_) | | | __/ __/\\ V / __/ | | | |_
|_|_|_.__/|_| \\___|\\___| \\_/ \\___|_| |_|\\__|
-------------------------------
==> Done
==> Successfully packaged libreevent $v
Next steps:
- Check that everything was packaged correctly
- 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äü

15
src/apps/Android/.gitignore vendored Normal file
View File

@@ -0,0 +1,15 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties

1
src/apps/Android/.idea/.name generated Normal file
View File

@@ -0,0 +1 @@
libreevent entry control

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

@@ -0,0 +1,123 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings>
</code_scheme>
</component>

View File

@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

6
src/apps/Android/.idea/compiler.xml generated Normal file
View File

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

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="$USER_HOME$/.android/avd/Pixel_7_Pro_API_30.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-10-10T15:22:18.675007998Z" />
</component>
</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>

19
src/apps/Android/.idea/gradle.xml generated Normal file
View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

6
src/apps/Android/.idea/kotlinc.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KotlinJpsPluginSettings">
<option name="version" value="1.9.0" />
</component>
</project>

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>

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

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<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" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

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>

6
src/apps/Android/.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
</component>
</project>

1
src/apps/Android/app/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

View File

@@ -0,0 +1,45 @@
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.janishutz.libreevent"
compileSdk = 35
defaultConfig {
applicationId = "com.janishutz.libreevent"
minSdk = 24
targetSdk = 35
versionCode = 5
versionName = "1.0.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.8.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("com.journeyapps:zxing-android-embedded:4.2.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}

21
src/apps/Android/app/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

Binary file not shown.

View File

@@ -0,0 +1,24 @@
package com.janishutz.libreevent
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.janishutz.libreevent", appContext.packageName)
}
}

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.LibreeventEntryControl"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ScannerActivity"
android:exported="true">
</activity>
</application>
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="true" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

View File

@@ -0,0 +1,116 @@
package com.janishutz.libreevent
import java.io.BufferedReader
import java.io.DataOutputStream
import java.io.InputStreamReader
import java.lang.Exception
import java.net.HttpURLConnection
import java.net.URL
class ApiClient {
fun authenticateUser(apiUrl: String, username: String, password: String): String {
try {
val url = URL("$apiUrl/app/authenticate")
println(url)
val connection = url.openConnection() as HttpURLConnection
// Set the request method to POST
connection.requestMethod = "POST"
// Set request headers (if needed)
connection.setRequestProperty("Content-Type", "application/json")
// Enable input and output streams for the connection
connection.doInput = true
connection.doOutput = true
// Create the JSON request body
val jsonRequest = "{\"email\":\"$username\",\"password\":\"$password\"}"
// Write the JSON data to the output stream
val outputStream = DataOutputStream(connection.outputStream)
outputStream.write(jsonRequest.toByteArray(Charsets.UTF_8))
outputStream.flush()
outputStream.close()
// Get the response code from the server
val responseCode = connection.responseCode
if (responseCode == HttpURLConnection.HTTP_OK) {
// Read and handle the response from the server
val reader = BufferedReader(InputStreamReader(connection.inputStream))
val response = StringBuilder()
var line: String?
while (reader.readLine().also { line = it } != null) {
response.append(line)
}
reader.close()
// Return the response as a String
return response.toString()
} else {
println(responseCode)
return "status-code-non-ok"
}
} catch (e: Exception) {
e.printStackTrace()
return "error"
}
}
fun checkTicket(apiUrl: String, username: String, password: String, ticket: String): String {
var url = URL("$apiUrl/app/ticketLookup")
if ( !apiUrl.contains( "https://" )) {
url = URL("https://$apiUrl/app/ticketLookup")
}
val connection = url.openConnection() as HttpURLConnection
// Set the request method to POST
connection.requestMethod = "POST"
// Set request headers (if needed)
connection.setRequestProperty("Content-Type", "application/json")
// Enable input and output streams for the connection
connection.doInput = true
connection.doOutput = true
// Create the JSON request body
val jsonRequest = "{\"email\":\"$username\",\"password\":\"$password\",\"ticketID\":\"$ticket\"}"
// Write the JSON data to the output stream
val outputStream = DataOutputStream(connection.outputStream)
outputStream.write(jsonRequest.toByteArray(Charsets.UTF_8))
outputStream.flush()
outputStream.close()
// Get the response code from the server
val responseCode = connection.responseCode
if (responseCode == HttpURLConnection.HTTP_OK) {
// Read and handle the response from the server
val reader = BufferedReader(InputStreamReader(connection.inputStream))
val response = StringBuilder()
var line: String?
while (reader.readLine().also { line = it } != null) {
response.append(line)
}
reader.close()
// Return the response as a String
return response.toString()
} else {
val r = BufferedReader(InputStreamReader(connection.errorStream))
val res = StringBuilder()
var line: String?
while (r.readLine().also { line = it } != null) {
res.append(line)
}
r.close()
println(res.toString())
return "Error"
}
}
}

View File

@@ -0,0 +1,107 @@
package com.janishutz.libreevent
import android.Manifest
import android.content.pm.PackageManager
import android.app.AlertDialog
import android.content.Intent
import android.os.Bundle
import android.os.StrictMode
import android.os.StrictMode.ThreadPolicy
import android.widget.Button
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val policy = ThreadPolicy.Builder().permitAll().build()
StrictMode.setThreadPolicy(policy)
val sharedPref = applicationContext.getSharedPreferences( "login", MODE_PRIVATE )
val hasSwitched = intent.hasExtra("hasSwitched")
val loginButton = findViewById<Button>(R.id.loginButton)
val urlEditText = findViewById<EditText>(R.id.url)
val usernameEditText = findViewById<EditText>(R.id.username)
val passwordEditText = findViewById<EditText>(R.id.password)
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA), CAMERA_PERMISSION_REQUEST)
}
if (sharedPref.getString( "url", null ).toString() != "null" && sharedPref.getString( "username", null ).toString() != "null" ) {
urlEditText.setText(sharedPref.getString( "url", null ).toString())
usernameEditText.setText(sharedPref.getString( "username", null ).toString())
}
if (sharedPref.getString( "loginOk", null ).toString() != "null" && !hasSwitched) {
println(sharedPref.getString( "loginOk", null ).toString())
val switchIntent = Intent(this, ScannerActivity::class.java)
startActivity(switchIntent)
}
loginButton.setOnClickListener {
val url = urlEditText.text.toString()
val username = usernameEditText.text.toString()
val password = passwordEditText.text.toString()
login( url, username, password )
}
}
private fun login( url: String, username: String, password: String ) {
val res = ApiClient().authenticateUser( url, username, password )
println( res )
if ( res == "authOk" ) {
val sharedPref = applicationContext.getSharedPreferences( "login", MODE_PRIVATE )
val editor = sharedPref.edit()
editor.putString( "username", username )
editor.putString( "password", password )
editor.putString( "url", url )
editor.putString( "loginOk", "true" )
editor.apply()
val switchIntent = Intent(this, ScannerActivity::class.java)
startActivity(switchIntent)
} else if ( res == "status-code-non-ok" ) {
val alertDialogBuilder = AlertDialog.Builder(this)
alertDialogBuilder.setTitle("Username or password incorrect")
alertDialogBuilder.setMessage("Please ensure that the values entered are correct and try again")
alertDialogBuilder.setIcon(android.R.drawable.ic_dialog_alert)
alertDialogBuilder.setPositiveButton("OK") { dialog, _ ->
dialog.dismiss()
}
alertDialogBuilder.show()
} else if ( res == "error") {
val alertDialogBuilder = AlertDialog.Builder(this)
alertDialogBuilder.setTitle("Unable to connect")
alertDialogBuilder.setMessage("Please ensure that the url specified is correct.")
alertDialogBuilder.setIcon(android.R.drawable.ic_dialog_alert)
alertDialogBuilder.setPositiveButton("OK") { dialog, _ ->
dialog.dismiss()
}
alertDialogBuilder.show()
} else if ( res == "wrong") {
val alertDialogBuilder = AlertDialog.Builder(this)
alertDialogBuilder.setTitle("Username or password incorrect")
alertDialogBuilder.setMessage("Please ensure that the values entered are correct and try again")
alertDialogBuilder.setIcon(android.R.drawable.ic_dialog_alert)
alertDialogBuilder.setPositiveButton("OK") { dialog, _ ->
dialog.dismiss()
}
alertDialogBuilder.show()
}
}
companion object {
private const val CAMERA_PERMISSION_REQUEST = 1
}
}

View File

@@ -0,0 +1,132 @@
package com.janishutz.libreevent
import android.Manifest
import android.app.AlertDialog
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.widget.Button
import androidx.core.app.ActivityCompat
import com.journeyapps.barcodescanner.BarcodeCallback
import com.journeyapps.barcodescanner.BarcodeResult
import com.journeyapps.barcodescanner.CaptureActivity
import com.journeyapps.barcodescanner.CaptureManager
import com.journeyapps.barcodescanner.DecoratedBarcodeView
import java.util.Date
class ScannerActivity : CaptureActivity() {
private lateinit var barcodeView: DecoratedBarcodeView
private lateinit var captureManager: CaptureManager
private var lastScanned: String = ""
private var lastScanTimestamp: Long = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_scanner)
barcodeView = findViewById(R.id.barcodeScannerView)
val logoutButton = findViewById<Button>(R.id.logoutButton)
logoutButton.setOnClickListener {
val sharedPref = applicationContext.getSharedPreferences( "login", MODE_PRIVATE )
val editor = sharedPref.edit()
editor.remove( "password" )
editor.remove( "loginOk" )
editor.apply()
val switchIntent = Intent(this, MainActivity::class.java)
switchIntent.putExtra("hasSwitched", true)
startActivity(switchIntent)
}
// Check for camera permission and request if not granted
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA), CAMERA_PERMISSION_REQUEST)
} else {
setupScanner()
}
}
private fun setupScanner() {
captureManager = CaptureManager(this, barcodeView)
captureManager.initializeFromIntent(intent, null)
captureManager.decode()
barcodeView.decodeContinuous(object : BarcodeCallback {
override fun barcodeResult(result: BarcodeResult?) {
if (result != null) {
val scannedData = result.text // This is the scanned data (e.g., QR code content)
handleScanResult(scannedData)
}
}
})
}
private fun handleScanResult(result: String) {
if ( lastScanned != result || lastScanTimestamp + 2000 < System.currentTimeMillis()) {
lastScanTimestamp = System.currentTimeMillis()
val sharedPref = applicationContext.getSharedPreferences( "login", MODE_PRIVATE )
val status = ApiClient().checkTicket( sharedPref.getString( "url", null ).toString(),
sharedPref.getString( "username", null ).toString(),
sharedPref.getString( "password", null ).toString(), result )
lastScanned = result
val alertDialogBuilder = AlertDialog.Builder(this)
if ( status == "ticketValid" ) {
alertDialogBuilder.setTitle("Ticket is valid")
} else if ( status == "ticketInvalid" ) {
alertDialogBuilder.setTitle("Ticket is invalid")
} else if ( status == "Error" ) {
alertDialogBuilder.setTitle("There was an error connecting")
alertDialogBuilder.setMessage("Please log out and log in again")
}
alertDialogBuilder.setIcon(android.R.drawable.ic_dialog_alert)
alertDialogBuilder.setPositiveButton("OK") { dialog, _ ->
dialog.dismiss()
}
alertDialogBuilder.show()
}
}
override fun onResume() {
super.onResume()
captureManager.onResume()
}
override fun onPause() {
super.onPause()
captureManager.onPause()
}
// Pass savedInstanceState to onSaveInstanceState
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
captureManager.onSaveInstanceState(outState)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == CAMERA_PERMISSION_REQUEST) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
setupScanner()
} else {
val alertDialogBuilder = AlertDialog.Builder(this)
alertDialogBuilder.setTitle("Camera access required!")
alertDialogBuilder.setMessage("Please ensure that camera access is enabled in settings")
alertDialogBuilder.setIcon(android.R.drawable.ic_dialog_alert)
alertDialogBuilder.setPositiveButton("OK") { dialog, _ ->
dialog.dismiss()
}
alertDialogBuilder.show()
}
}
}
companion object {
private const val CAMERA_PERMISSION_REQUEST = 1
}
}

View File

@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>

View File

@@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>

View File

@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleX="2"
android:scaleY="2"
android:text="Welcome to libreevent!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.157" />
<EditText
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="52dp"
android:ems="10"
android:hint="Your account email"
android:inputType="textEmailAddress"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/url" />
<EditText
android:id="@+id/url"
android:layout_width="302dp"
android:layout_height="48dp"
android:layout_marginTop="32dp"
android:ems="10"
android:hint="link to libreevent instance"
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:ems="10"
android:hint="Password"
android:inputType="textPassword"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/username" />
<Button
android:id="@+id/loginButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="84dp"
android:text="Log in"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/password" />
<TextView
android:id="@+id/textView2"
android:layout_width="306dp"
android:layout_height="51dp"
android:layout_marginTop="40dp"
android:text="This app requires a libreevent server instance to work. Please log in below"
android:textAlignment="center"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.journeyapps.barcodescanner.DecoratedBarcodeView
android:id="@+id/barcodeScannerView"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/logoutButton"
android:layout_width="122dp"
android:layout_height="wrap_content"
android:text="Log out" />
</com.journeyapps.barcodescanner.DecoratedBarcodeView>
</FrameLayout>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -0,0 +1,7 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.LibreeventEntryControl" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your dark theme here. -->
<!-- <item name="colorPrimary">@color/my_dark_primary</item> -->
</style>
</resources>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#213A50</color>
</resources>

View File

@@ -0,0 +1,3 @@
<resources>
<string name="app_name">libreevent entry control</string>
</resources>

View File

@@ -0,0 +1,9 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.LibreeventEntryControl" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Customize your light theme here. -->
<!-- <item name="colorPrimary">@color/my_light_primary</item> -->
</style>
<style name="Theme.LibreeventEntryControl" parent="Base.Theme.LibreeventEntryControl" />
</resources>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?><!--
Sample backup rules file; uncomment and customize as necessary.
See https://developer.android.com/guide/topics/data/autobackup
for details.
Note: This file is ignored for devices older that API 31
See https://developer.android.com/about/versions/12/backup-restore
-->
<full-backup-content>
<!--
<include domain="sharedpref" path="."/>
<exclude domain="sharedpref" path="device.xml"/>
-->
</full-backup-content>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?><!--
Sample data extraction rules file; uncomment and customize as necessary.
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
for details.
-->
<data-extraction-rules>
<cloud-backup>
<!-- TODO: Use <include> and <exclude> to control what is backed up.
<include .../>
<exclude .../>
-->
</cloud-backup>
<!--
<device-transfer>
<include .../>
<exclude .../>
</device-transfer>
-->
</data-extraction-rules>

View File

@@ -0,0 +1,17 @@
package com.janishutz.libreevent
import org.junit.Test
import org.junit.Assert.*
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}

View File

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

View File

@@ -0,0 +1,23 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true

Binary file not shown.

View File

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

185
src/apps/Android/gradlew vendored Executable file
View File

@@ -0,0 +1,185 @@
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"

89
src/apps/Android/gradlew.bat vendored Normal file
View File

@@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@@ -0,0 +1,17 @@
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "libreevent entry control"
include(":app")

View File

@@ -0,0 +1,393 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
921EDBF82A827CF200F8965C /* libreevent_entry_controlApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 921EDBF72A827CF200F8965C /* libreevent_entry_controlApp.swift */; };
921EDBFA2A827CF200F8965C /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 921EDBF92A827CF200F8965C /* ContentView.swift */; };
921EDBFC2A827CF400F8965C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 921EDBFB2A827CF400F8965C /* Assets.xcassets */; };
921EDBFF2A827CF400F8965C /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 921EDBFE2A827CF400F8965C /* Preview Assets.xcassets */; };
92DBBD892AA9B6A6006F6094 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92DBBD882AA9B6A6006F6094 /* LoginView.swift */; };
92DBBD8C2AA9C0C5006F6094 /* CodeScanner in Frameworks */ = {isa = PBXBuildFile; productRef = 92DBBD8B2AA9C0C5006F6094 /* CodeScanner */; };
92DBBD922AA9D0AF006F6094 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 92DBBD912AA9D0AF006F6094 /* Launch Screen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
921EDBF42A827CF200F8965C /* libreevent-entry-control.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "libreevent-entry-control.app"; sourceTree = BUILT_PRODUCTS_DIR; };
921EDBF72A827CF200F8965C /* libreevent_entry_controlApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = libreevent_entry_controlApp.swift; sourceTree = "<group>"; };
921EDBF92A827CF200F8965C /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
921EDBFB2A827CF400F8965C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
921EDBFE2A827CF400F8965C /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
92DBBD882AA9B6A6006F6094 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = "<group>"; };
92DBBD912AA9D0AF006F6094 /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
92DBBD932AA9D5AD006F6094 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
921EDBF12A827CF200F8965C /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
92DBBD8C2AA9C0C5006F6094 /* CodeScanner in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
921EDBEB2A827CF200F8965C = {
isa = PBXGroup;
children = (
921EDBF62A827CF200F8965C /* libreevent-entry-control */,
921EDBF52A827CF200F8965C /* Products */,
);
sourceTree = "<group>";
};
921EDBF52A827CF200F8965C /* Products */ = {
isa = PBXGroup;
children = (
921EDBF42A827CF200F8965C /* libreevent-entry-control.app */,
);
name = Products;
sourceTree = "<group>";
};
921EDBF62A827CF200F8965C /* libreevent-entry-control */ = {
isa = PBXGroup;
children = (
92DBBD932AA9D5AD006F6094 /* Info.plist */,
921EDBF72A827CF200F8965C /* libreevent_entry_controlApp.swift */,
921EDBF92A827CF200F8965C /* ContentView.swift */,
92DBBD882AA9B6A6006F6094 /* LoginView.swift */,
921EDBFB2A827CF400F8965C /* Assets.xcassets */,
921EDBFD2A827CF400F8965C /* Preview Content */,
92DBBD912AA9D0AF006F6094 /* Launch Screen.storyboard */,
);
path = "libreevent-entry-control";
sourceTree = "<group>";
};
921EDBFD2A827CF400F8965C /* Preview Content */ = {
isa = PBXGroup;
children = (
921EDBFE2A827CF400F8965C /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
921EDBF32A827CF200F8965C /* libreevent-entry-control */ = {
isa = PBXNativeTarget;
buildConfigurationList = 921EDC022A827CF400F8965C /* Build configuration list for PBXNativeTarget "libreevent-entry-control" */;
buildPhases = (
921EDBF02A827CF200F8965C /* Sources */,
921EDBF12A827CF200F8965C /* Frameworks */,
921EDBF22A827CF200F8965C /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "libreevent-entry-control";
packageProductDependencies = (
92DBBD8B2AA9C0C5006F6094 /* CodeScanner */,
);
productName = "libreevent-entry-control";
productReference = 921EDBF42A827CF200F8965C /* libreevent-entry-control.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
921EDBEC2A827CF200F8965C /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1420;
LastUpgradeCheck = 1420;
TargetAttributes = {
921EDBF32A827CF200F8965C = {
CreatedOnToolsVersion = 14.2;
};
};
};
buildConfigurationList = 921EDBEF2A827CF200F8965C /* Build configuration list for PBXProject "libreevent-entry-control" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 921EDBEB2A827CF200F8965C;
packageReferences = (
92DBBD8A2AA9C0C5006F6094 /* XCRemoteSwiftPackageReference "CodeScanner" */,
);
productRefGroup = 921EDBF52A827CF200F8965C /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
921EDBF32A827CF200F8965C /* libreevent-entry-control */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
921EDBF22A827CF200F8965C /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
92DBBD922AA9D0AF006F6094 /* Launch Screen.storyboard in Resources */,
921EDBFF2A827CF400F8965C /* Preview Assets.xcassets in Resources */,
921EDBFC2A827CF400F8965C /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
921EDBF02A827CF200F8965C /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
92DBBD892AA9B6A6006F6094 /* LoginView.swift in Sources */,
921EDBFA2A827CF200F8965C /* ContentView.swift in Sources */,
921EDBF82A827CF200F8965C /* libreevent_entry_controlApp.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
921EDC002A827CF400F8965C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.2;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
921EDC012A827CF400F8965C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.2;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
921EDC032A827CF400F8965C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2;
DEVELOPMENT_ASSET_PATHS = "\"libreevent-entry-control/Preview Content\"";
DEVELOPMENT_TEAM = 8CRQNHKNVF;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "libreevent-entry-control/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = libreevent;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.business";
INFOPLIST_KEY_NSCameraUsageDescription = "We need to scan QR codes";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UILaunchStoryboardName = "Launch Screen.storyboard";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1;
PRODUCT_BUNDLE_IDENTIFIER = "com.janishutz.libreevent-entry-control";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
921EDC042A827CF400F8965C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2;
DEVELOPMENT_ASSET_PATHS = "\"libreevent-entry-control/Preview Content\"";
DEVELOPMENT_TEAM = 8CRQNHKNVF;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "libreevent-entry-control/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = libreevent;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.business";
INFOPLIST_KEY_NSCameraUsageDescription = "We need to scan QR codes";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UILaunchStoryboardName = "Launch Screen.storyboard";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1;
PRODUCT_BUNDLE_IDENTIFIER = "com.janishutz.libreevent-entry-control";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
921EDBEF2A827CF200F8965C /* Build configuration list for PBXProject "libreevent-entry-control" */ = {
isa = XCConfigurationList;
buildConfigurations = (
921EDC002A827CF400F8965C /* Debug */,
921EDC012A827CF400F8965C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
921EDC022A827CF400F8965C /* Build configuration list for PBXNativeTarget "libreevent-entry-control" */ = {
isa = XCConfigurationList;
buildConfigurations = (
921EDC032A827CF400F8965C /* Debug */,
921EDC042A827CF400F8965C /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCRemoteSwiftPackageReference section */
92DBBD8A2AA9C0C5006F6094 /* XCRemoteSwiftPackageReference "CodeScanner" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/twostraws/CodeScanner";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 2.0.0;
};
};
/* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
92DBBD8B2AA9C0C5006F6094 /* CodeScanner */ = {
isa = XCSwiftPackageProductDependency;
package = 92DBBD8A2AA9C0C5006F6094 /* XCRemoteSwiftPackageReference "CodeScanner" */;
productName = CodeScanner;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 921EDBEC2A827CF200F8965C /* Project object */;
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@@ -0,0 +1,14 @@
{
"pins" : [
{
"identity" : "codescanner",
"kind" : "remoteSourceControl",
"location" : "https://github.com/twostraws/CodeScanner",
"state" : {
"revision" : "bf5d7087015620b250ee6c865b3c9039fc159d1a",
"version" : "2.3.3"
}
}
],
"version" : 2
}

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>libreevent-entry-control.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>

View File

@@ -0,0 +1,11 @@
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Some files were not shown because too many files have changed in this diff Show More