Compare commits

...

397 Commits

Author SHA1 Message Date
jhqwqmc 8b2f32bb7d
Update locale_CN.yml (#3616) 2024-05-13 21:55:21 +03:00
Aurora Lahtela ca9870d9fe Fix CorrectWrongCharacterEncodingPatch failing on mysql.user table being a view 2024-05-11 18:58:22 +03:00
Aurora Lahtela 9e25f2b26c Sanitize and validate more join address variations
- Added Data_gathering.Preserve_invalid_join_addresses to allow overriding this behavior.

Affects issues:
- Fixed #3545
2024-04-27 10:08:18 +03:00
Aurora Lahtela 24a8c75b67 Add support for configuring the plugin using environment variables.
Examples:
- Plugin.ServerName -> PLAN_PLUGIN_SERVERNAME
- Database.MySQL.Password -> PLAN_DATABASE_MYSQL_PASSWORD

Affects issues:
- Close #1353
- #1991
2024-04-21 20:35:41 +03:00
Sniper_TVmc 132fa2f919
Update locale_FR.yml (#3578) 2024-04-21 09:25:28 +03:00
Aurora Lahtela 7f268d9a07
Update versions.txt 2024-04-20 20:42:27 +03:00
Aurora Lahtela be8c8951c9 Update jitpack.yml to use JDK 21 2024-04-20 10:34:03 +03:00
AuroraLS3 e630db1b71 Update versions.txt 5.6 DEV build 2850 2024-04-20 07:26:27 +00:00
Aurora Lahtela 0d5d9adb77 Bump Extension-PlaceholderAPI to R1.6
Allows configuring invalid placeholder values that should not overwrite existing values.

Affects issues:
- Fixed #3566
2024-04-20 10:12:15 +03:00
jhqwqmc 590e0445cb
Update locale CN by jhqwqmc (#3567) 2024-04-20 10:04:24 +03:00
Aurora Lahtela bd4108a367 Update dependencies
- @testing-library/react
- i18next
- i18next-http-backend
- sass
- swagger-ui
- org.apache.commons.commons-text
- slf4j
2024-04-20 10:02:35 +03:00
Drex faa911e232
Update to 1.20.5 Fabric by DrexHD (#3424)
* Update to 24w03b
* Update to 1.20.5-rc2
* Bump minecraft dependency
2024-04-20 09:48:33 +03:00
dependabot[bot] 6776c79a14
Bump org.sonarqube from 4.4.1.3373 to 5.0.0.4638 in /Plan (#3542)
Bumps org.sonarqube from 4.4.1.3373 to 5.0.0.4638.

---
updated-dependencies:
- dependency-name: org.sonarqube
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-07 14:40:15 +03:00
dependabot[bot] 13d168a593
Bump daggerVersion from 2.51 to 2.51.1 in /Plan (#3555)
Bumps `daggerVersion` from 2.51 to 2.51.1.

Updates `com.google.dagger:dagger` from 2.51 to 2.51.1
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.51...dagger-2.51.1)

Updates `com.google.dagger:dagger-compiler` from 2.51 to 2.51.1
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.51...dagger-2.51.1)

---
updated-dependencies:
- dependency-name: com.google.dagger:dagger
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.google.dagger:dagger-compiler
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-07 13:41:33 +03:00
Aurora Lahtela 634d6f2a77 Update javascript dependencies
- font awesome
- sass
- swagger-ui
2024-04-07 13:40:41 +03:00
Aurora Lahtela 74ae2dcf40 Fix server allowlist bounces not being exported 2024-04-07 11:18:38 +03:00
Aurora Lahtela f40e1498c1
3268/redesign join address visualization (#3558)
- Join address pie removed
- Join address group mechanism added
  - User can select multiple addresses for each group
  - User can rename each group to their liking
  - The groups are stored in preferences so that user doesn't need to add them back every time
- Use the join address group mechanism for time series of Join Addresses
- Use the join address group mechanism for Player Retention
- Small improvement to retention graph: Show multiple labels
- Small improvement to site clock: Can now hover to show actual date

Affected issues:
- Close #3268
2024-04-07 11:13:18 +03:00
dependabot[bot] b6f68936cf
Bump org.seleniumhq.selenium:selenium-java in /Plan (#3554)
Bumps [org.seleniumhq.selenium:selenium-java](https://github.com/SeleniumHQ/selenium) from 4.18.1 to 4.19.1.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Commits](https://github.com/SeleniumHQ/selenium/commits)

---
updated-dependencies:
- dependency-name: org.seleniumhq.selenium:selenium-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-05 14:34:01 +03:00
dependabot[bot] 55799eafa0
Bump vite from 5.2.2 to 5.2.8 in /Plan/react/dashboard (#3548)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.2.2 to 5.2.8.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.2.8/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-05 14:31:45 +03:00
Aurora Lahtela 8c36f318c7 Prevent duplicate key exception from being thrown entirely
Affects issues:
- Fixed #3543
2024-03-30 10:11:15 +02:00
Aurora Lahtela 49269d3aab Attempt to fix duplicate key issue in UpdateWebPermissionsPatch
Affects issues:
- #3543
2024-03-30 09:48:19 +02:00
dependabot[bot] 95a20b54a3
Bump @testing-library/react in /Plan/react/dashboard (#3528)
Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 14.2.1 to 14.2.2.
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v14.2.1...v14.2.2)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-23 13:25:36 +02:00
dependabot[bot] 2b9314a104
Bump sass from 1.71.1 to 1.72.0 in /Plan/react/dashboard (#3520)
Bumps [sass](https://github.com/sass/dart-sass) from 1.71.1 to 1.72.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.71.1...1.72.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-23 13:25:29 +02:00
dependabot[bot] 5a80c6482b
Bump io.swagger.core.v3.swagger-gradle-plugin in /Plan (#3533)
Bumps io.swagger.core.v3.swagger-gradle-plugin from 2.2.20 to 2.2.21.

---
updated-dependencies:
- dependency-name: io.swagger.core.v3.swagger-gradle-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-23 13:09:06 +02:00
dependabot[bot] 92f887b4a0
Bump react-bootstrap from 2.10.1 to 2.10.2 in /Plan/react/dashboard (#3529)
Bumps [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) from 2.10.1 to 2.10.2.
- [Release notes](https://github.com/react-bootstrap/react-bootstrap/releases)
- [Changelog](https://github.com/react-bootstrap/react-bootstrap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-bootstrap/react-bootstrap/compare/v2.10.1...v2.10.2)

---
updated-dependencies:
- dependency-name: react-bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-23 13:08:53 +02:00
dependabot[bot] 5af89eb787
Bump swaggerVersion from 2.2.20 to 2.2.21 in /Plan (#3532)
Bumps `swaggerVersion` from 2.2.20 to 2.2.21.

Updates `io.swagger.core.v3:swagger-core-jakarta` from 2.2.20 to 2.2.21

Updates `io.swagger.core.v3:swagger-jaxrs2-jakarta` from 2.2.20 to 2.2.21

---
updated-dependencies:
- dependency-name: io.swagger.core.v3:swagger-core-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.swagger.core.v3:swagger-jaxrs2-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-23 13:07:54 +02:00
dependabot[bot] d5fc213523
Bump vite from 5.1.5 to 5.2.2 in /Plan/react/dashboard (#3531)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.1.5 to 5.2.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@5.2.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-23 13:07:38 +02:00
dependabot[bot] e4a43af3ef
Bump org.apache.commons:commons-compress from 1.26.0 to 1.26.1 in /Plan (#3522)
Bumps org.apache.commons:commons-compress from 1.26.0 to 1.26.1.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-23 13:06:46 +02:00
dependabot[bot] a543af9562
Bump i18next from 23.10.0 to 23.10.1 in /Plan/react/dashboard (#3518)
Bumps [i18next](https://github.com/i18next/i18next) from 23.10.0 to 23.10.1.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.10.0...v23.10.1)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-23 13:06:31 +02:00
dependabot[bot] 9a605994e8
Bump axios from 1.6.7 to 1.6.8 in /Plan/react/dashboard (#3530)
Bumps [axios](https://github.com/axios/axios) from 1.6.7 to 1.6.8.
- [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.6.7...v1.6.8)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-23 13:05:43 +02:00
dependabot[bot] aac41547db
Bump swagger-ui from 5.11.10 to 5.12.0 in /Plan/react/dashboard (#3517)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.11.10 to 5.12.0.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.11.10...v5.12.0)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-23 13:04:19 +02:00
Aurora Lahtela 6d9494d680
Add mcmdev as contributor
For this contribution https://github.com/plan-player-analytics/Extension-LibertyBans/pull/9
2024-03-21 21:28:17 +02:00
Aurora Lahtela b800a9b3ee Bump Extension-LibertyBans to 1.1.0-R1.5 2024-03-20 17:13:05 +02:00
jhqwqmc bd8d92b45c
Update locale_CN.yml (#3516) 2024-03-17 20:15:14 +02:00
Aurora Lahtela 4fb67d7ba7 Update French Locale (FR) by Sniper_TVmc 2024-03-14 20:44:50 +02:00
Aurora Lahtela a4cd8257e2 Fix New Query view not opening at all
The Edit Query effect broke when view wasn't present somewhere
2024-03-14 20:43:23 +02:00
Aurora Lahtela 20b8ab9baa Add 'Edit Query' button to Query Results
This allows easier editing of existing query results
2024-03-14 20:17:08 +02:00
AuroraLS3 e021162729 Update versions.txt 5.6 build 2820 2024-03-14 15:16:46 +00:00
Aurora Lahtela 7463d4e440 Fix exception related to CONCAT on SQLite in Extension boolean storage
Affects issues:
- Fixed #3514
2024-03-11 20:52:41 +02:00
Aurora Lahtela 9fa1a94301 Fix join address not appearing in /plan ingame
Affects issues:
- Fixed #3513
2024-03-11 20:30:31 +02:00
jhqwqmc 30532acf46
Update locale_CN.yml (#3512) 2024-03-11 20:18:30 +02:00
AuroraLS3 4617876e44 Update versions.txt 5.6 build 2816 2024-03-10 08:46:34 +00:00
Aurora Lahtela 252832fcf6 Bump Extension-FastLogin to R1.3
Increase wait up to 9 seconds, until not unknown anymore

Affects issues:
- Close #3485
2024-03-10 10:27:13 +02:00
Aurora Lahtela 8116063e62
Whitelist bounce gathering (#3511)
* Store bounced whitelist logins

* Add allowlist bounce endpoint

* Restore locale file indent from master branch

* Add UI for allowlist

* Update locale

* Fix sonar detected bug and implement database tests

Affects issues:
- Close #2233
2024-03-10 10:25:42 +02:00
Aurora Lahtela 24e6af2d03 Bump Extension-Quests to 5.0.1-R1.0
Affects issues:
- Fixed #3347
- Close https://github.com/PikaMug/Quests/issues/2192
2024-03-10 10:22:23 +02:00
Aurora Lahtela 7299e10064 Fix InstalledPluginGatheringTask running on server thread 2024-03-09 21:15:43 +02:00
Aurora Lahtela de9f9ec5b4
Sonar fixes (#3510)
* Remove deprecated code

- RemoveUnsatisfiedConditionalPlayerResultsTransaction.java
- RemoveUnsatisfiedConditionalServerResultsTransaction.java

* Fix apache compress deprecations

- Use org.apache.commons.io.IOUtils instead of org.apache.commons.compress.utils.IOUtils
- Use TarArchiveInputStream#getNextEntry instead of getNextTarEntry

* Rename variable in BukkitPingCounter

* Extract ApiServices from PlanSystem
2024-03-09 14:43:41 +02:00
Aurora Lahtela 670ef2aff3 Fix exception when storing Extension boolean values with MySQL
Query was using reserved keyword 'stored' as a table alias

Changed it to use 'indb' as the alias

Affects issues:
- Fixed #3508
2024-03-09 10:51:53 +02:00
Aurora Lahtela 9c43287f60 Add Join Address to /plan ingame and placeholders
Adds a %plan_player_join_address% placeholder

Affects issues:
- Close #3463
2024-03-09 10:44:33 +02:00
Aurora Lahtela 9ade3fbf01 Skip yarn build steps on Jitpack
Jitpack doesn't have gclib required for Node 20 which means all builds fail there when yarn build is attempted.

This makes yarn tasks conditional dependency with -PisJitpack flag which skips the problematic section

Affects issues:
- Possibly fixed #3411
2024-03-09 10:29:44 +02:00
Aurora Lahtela 3aa8a71501 Bump Extension-FastLogin to R1.2
Wait one second before asking premium status

Affects issues:
- Possibly fixed #3485
2024-03-09 10:21:14 +02:00
dependabot[bot] 9e29b5aa6b
Bump mockitoVersion from 5.10.0 to 5.11.0 in /Plan (#3505)
Bumps `mockitoVersion` from 5.10.0 to 5.11.0.

Updates `org.mockito:mockito-core` from 5.10.0 to 5.11.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.10.0...v5.11.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.10.0 to 5.11.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.10.0...v5.11.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-09 10:12:03 +02:00
dependabot[bot] 94c13f38e4
Bump export-to-csv from 1.2.3 to 1.2.4 in /Plan/react/dashboard (#3503)
Bumps [export-to-csv](https://github.com/alexcaza/export-to-csv) from 1.2.3 to 1.2.4.
- [Release notes](https://github.com/alexcaza/export-to-csv/releases)
- [Commits](https://github.com/alexcaza/export-to-csv/compare/v1.2.3...v1.2.4)

---
updated-dependencies:
- dependency-name: export-to-csv
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-09 10:11:52 +02:00
dependabot[bot] b244d43635
Bump react-router-dom from 6.22.2 to 6.22.3 in /Plan/react/dashboard (#3500)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.22.2 to 6.22.3.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.22.3/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-09 10:11:37 +02:00
dependabot[bot] 05a61ec75a
Bump swagger-ui from 5.11.8 to 5.11.10 in /Plan/react/dashboard (#3501)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.11.8 to 5.11.10.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.11.8...v5.11.10)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-09 10:11:30 +02:00
dependabot[bot] 51d31daa81
Bump react-i18next from 14.0.5 to 14.1.0 in /Plan/react/dashboard (#3502)
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 14.0.5 to 14.1.0.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v14.0.5...v14.1.0)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-09 10:11:23 +02:00
dependabot[bot] 0c2b4e1b3e
Bump com.github.seancfoley:ipaddress from 5.4.2 to 5.5.0 in /Plan (#3507)
Bumps [com.github.seancfoley:ipaddress](https://github.com/seancfoley/IPAddress) from 5.4.2 to 5.5.0.
- [Release notes](https://github.com/seancfoley/IPAddress/releases)
- [Commits](https://github.com/seancfoley/IPAddress/compare/v5.4.2...v5.5.0)

---
updated-dependencies:
- dependency-name: com.github.seancfoley:ipaddress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-09 10:11:16 +02:00
dependabot[bot] 520adf6ca8
Bump testContainersVersion from 1.19.6 to 1.19.7 in /Plan (#3506)
Bumps `testContainersVersion` from 1.19.6 to 1.19.7.

Updates `org.testcontainers:testcontainers` from 1.19.6 to 1.19.7
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.6...1.19.7)

Updates `org.testcontainers:junit-jupiter` from 1.19.6 to 1.19.7
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.6...1.19.7)

Updates `org.testcontainers:nginx` from 1.19.6 to 1.19.7
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.6...1.19.7)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:nginx
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-09 10:11:02 +02:00
dependabot[bot] 1a0f0f33a7
Bump vite from 5.1.4 to 5.1.5 in /Plan/react/dashboard (#3504)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.1.4 to 5.1.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.1.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-09 10:10:54 +02:00
Aurora Lahtela 1beb1ec4bd Revert SQLite driver back to 3.42.0.1
Affects issues:
- #3436
2024-03-09 10:10:01 +02:00
Aurora Lahtela 70e3f394ba Change player ping graph data format
HighCharts error 12 was occurring due to too many data points

This commit changes player ping graph data to be served in format expected by turbo-mode so that it renders.

Affects issues:
- Fixed #3498
2024-03-05 20:10:20 +02:00
AuroraLS3 e1b4e34e77 Update versions.txt 5.6 DEV build 2796 2024-03-03 08:39:26 +00:00
dependabot[bot] a9ab23347a
Bump @fullcalendar/react from 6.1.10 to 6.1.11 in /Plan/react/dashboard (#3495)
Bumps [@fullcalendar/react](https://github.com/fullcalendar/fullcalendar-react) from 6.1.10 to 6.1.11.
- [Release notes](https://github.com/fullcalendar/fullcalendar-react/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar-react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar-react/compare/v6.1.10...v6.1.11)

---
updated-dependencies:
- dependency-name: "@fullcalendar/react"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-03 10:21:23 +02:00
dependabot[bot] c764b2cb31
Bump @fullcalendar/daygrid in /Plan/react/dashboard (#3496)
Bumps [@fullcalendar/daygrid](https://github.com/fullcalendar/fullcalendar/tree/HEAD/packages/daygrid) from 6.1.10 to 6.1.11.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/commits/v6.1.11/packages/daygrid)

---
updated-dependencies:
- dependency-name: "@fullcalendar/daygrid"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-03 10:21:07 +02:00
dependabot[bot] e10185f344
Bump @fullcalendar/bootstrap in /Plan/react/dashboard (#3491)
Bumps [@fullcalendar/bootstrap](https://github.com/fullcalendar/fullcalendar/tree/HEAD/packages/bootstrap4) from 6.1.10 to 6.1.11.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/commits/v6.1.11/packages/bootstrap4)

---
updated-dependencies:
- dependency-name: "@fullcalendar/bootstrap"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-03 10:19:47 +02:00
dependabot[bot] bdbd403e3b
Bump daggerVersion from 2.50 to 2.51 in /Plan (#3490)
Bumps `daggerVersion` from 2.50 to 2.51.

Updates `com.google.dagger:dagger` from 2.50 to 2.51
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.50...dagger-2.51)

Updates `com.google.dagger:dagger-compiler` from 2.50 to 2.51
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.50...dagger-2.51)

---
updated-dependencies:
- dependency-name: com.google.dagger:dagger
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.dagger:dagger-compiler
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-03 10:19:38 +02:00
dependabot[bot] 2c7813e795
Bump react-router-dom from 6.22.1 to 6.22.2 in /Plan/react/dashboard (#3492)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.22.1 to 6.22.2.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.22.2/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-03 10:19:08 +02:00
dependabot[bot] 0467c0ddd1
Bump swagger-ui from 5.11.7 to 5.11.8 in /Plan/react/dashboard (#3493)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.11.7 to 5.11.8.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.11.7...v5.11.8)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-03 10:18:57 +02:00
dependabot[bot] e33033808c
Bump @fullcalendar/interaction in /Plan/react/dashboard (#3494)
Bumps [@fullcalendar/interaction](https://github.com/fullcalendar/fullcalendar/tree/HEAD/packages/interaction) from 6.1.10 to 6.1.11.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/commits/v6.1.11/packages/interaction)

---
updated-dependencies:
- dependency-name: "@fullcalendar/interaction"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-03 10:18:33 +02:00
Aurora Lahtela 5044b6e365 Fix server/network calendar being editable 2024-03-03 10:18:36 +02:00
Aurora Lahtela 12cf9ea414 Fix Today/Yesterday wrong with negative timezones
Applied offset to "now" when comparing with offset timestamps.

Affects issues:
- Possibly fixed #3420
2024-03-03 10:16:02 +02:00
Aurora Lahtela 701866cc6a Don't try to delete conditional providers if there's nothing to delete 2024-03-02 09:14:27 +02:00
Aurora Lahtela 7368eccbbd Optimize unsatisfied extension conditional value cleanup
Extensions support @Conditional value where a boolean provider determines if other values should exist.
Unsatisfied values were being removed during database cleanup task.
The cleanup transaction was very slow and could hang the server if it was performed near shutdown.

The cleanup is now performed on boolean value change (individual value for one player)
instead of with large cleanup transaction (all values and all players).

Affects issues:
- #3436
2024-03-02 08:53:38 +02:00
dependabot[bot] 3ddfe6b166
Bump org.mariadb.jdbc:mariadb-java-client from 3.3.2 to 3.3.3 in /Plan (#3484)
Bumps [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j) from 3.3.2 to 3.3.3.
- [Release notes](https://github.com/mariadb-corporation/mariadb-connector-j/releases)
- [Changelog](https://github.com/mariadb-corporation/mariadb-connector-j/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.3.2...3.3.3)

---
updated-dependencies:
- dependency-name: org.mariadb.jdbc:mariadb-java-client
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 20:21:44 +02:00
dependabot[bot] 68140ba7f9
Bump org.apache.commons:commons-compress from 1.25.0 to 1.26.0 in /Plan (#3473)
Bumps org.apache.commons:commons-compress from 1.25.0 to 1.26.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 20:21:28 +02:00
dependabot[bot] b03a4be38b
Bump react-router-dom from 6.22.0 to 6.22.1 in /Plan/react/dashboard (#3476)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.22.0 to 6.22.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/react-router-dom@6.22.1/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.22.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 20:21:19 +02:00
dependabot[bot] d4aa1e254d
Bump export-to-csv from 1.2.2 to 1.2.3 in /Plan/react/dashboard (#3480)
Bumps [export-to-csv](https://github.com/alexcaza/export-to-csv) from 1.2.2 to 1.2.3.
- [Release notes](https://github.com/alexcaza/export-to-csv/releases)
- [Commits](https://github.com/alexcaza/export-to-csv/compare/v1.2.2...v1.2.3)

---
updated-dependencies:
- dependency-name: export-to-csv
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 20:21:13 +02:00
dependabot[bot] 7fd7f704bf
Bump i18next from 23.8.2 to 23.10.0 in /Plan/react/dashboard (#3477)
Bumps [i18next](https://github.com/i18next/i18next) from 23.8.2 to 23.10.0.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.8.2...v23.10.0)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 20:20:56 +02:00
dependabot[bot] 2cfd0bff2f
Bump testContainersVersion from 1.19.5 to 1.19.6 in /Plan (#3474)
Bumps `testContainersVersion` from 1.19.5 to 1.19.6.

Updates `org.testcontainers:testcontainers` from 1.19.5 to 1.19.6
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.5...1.19.6)

Updates `org.testcontainers:junit-jupiter` from 1.19.5 to 1.19.6
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.5...1.19.6)

Updates `org.testcontainers:nginx` from 1.19.5 to 1.19.6
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.5...1.19.6)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:nginx
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 19:40:22 +02:00
dependabot[bot] f2749a33ff
Bump sass from 1.70.0 to 1.71.1 in /Plan/react/dashboard (#3478)
Bumps [sass](https://github.com/sass/dart-sass) from 1.70.0 to 1.71.1.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.70.0...1.71.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 19:40:05 +02:00
dependabot[bot] f69a2858ee
Bump org.seleniumhq.selenium:selenium-java in /Plan (#3475)
Bumps [org.seleniumhq.selenium:selenium-java](https://github.com/SeleniumHQ/selenium) from 4.17.0 to 4.18.1.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.17.0...selenium-4.18.1)

---
updated-dependencies:
- dependency-name: org.seleniumhq.selenium:selenium-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 19:39:37 +02:00
dependabot[bot] f78dca306c
Bump vite from 5.1.3 to 5.1.4 in /Plan/react/dashboard (#3479)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.1.3 to 5.1.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.1.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 19:39:12 +02:00
dependabot[bot] 8861e99abc
Bump @fullcalendar/core from 6.1.10 to 6.1.11 in /Plan/react/dashboard (#3481)
Bumps [@fullcalendar/core](https://github.com/fullcalendar/fullcalendar/tree/HEAD/packages/core) from 6.1.10 to 6.1.11.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/commits/v6.1.11/packages/core)

---
updated-dependencies:
- dependency-name: "@fullcalendar/core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 19:38:47 +02:00
dependabot[bot] 34013901c7
Bump i18next-http-backend from 2.4.3 to 2.5.0 in /Plan/react/dashboard (#3482)
Bumps [i18next-http-backend](https://github.com/i18next/i18next-http-backend) from 2.4.3 to 2.5.0.
- [Changelog](https://github.com/i18next/i18next-http-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-http-backend/compare/v2.4.3...v2.5.0)

---
updated-dependencies:
- dependency-name: i18next-http-backend
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 19:38:16 +02:00
dependabot[bot] a2147f2fab
Bump bootstrap from 5.3.2 to 5.3.3 in /Plan/react/dashboard (#3483)
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 5.3.2 to 5.3.3.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v5.3.2...v5.3.3)

---
updated-dependencies:
- dependency-name: bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-28 19:38:06 +02:00
Aurora Lahtela 367d8af59a
Update action versions 2024-02-28 17:23:47 +02:00
Aurora Lahtela 6ed23f0c0b Download GeoLite2 Country database from playeranalytics.net
Affects issues:
- Fixed #3452
2024-02-28 11:47:16 +02:00
Aurora Lahtela 4042980379 Fix build issue 2024-02-28 10:10:35 +02:00
Aurora Lahtela 092533d0b7 Change order of guards to allow IP blocklisted requests to be rate-limited 2024-02-28 10:09:21 +02:00
Aurora Lahtela ab94ab9125 Rate limit against simple DDoS
Affects issues:
- Close #1846
- Close #3486
2024-02-28 10:02:26 +02:00
Aurora Lahtela b50fa10e12 Reduce DDoS impact of access log transactions
Made Plan skip access logging if transaction queue is larger than 500 transactions
Reduced amount of objects held by access log transaction by serializing request properties to objects before passing to transaction.

Affects issues:
- #3486
2024-02-27 10:11:45 +02:00
dependabot[bot] a3a2085c8a
Bump vite from 5.0.12 to 5.1.3 in /Plan/react/dashboard (#3465)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.12 to 5.1.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.1.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 10:32:20 +02:00
dependabot[bot] 8170f4f974
Bump react-bootstrap from 2.10.0 to 2.10.1 in /Plan/react/dashboard (#3464)
Bumps [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) from 2.10.0 to 2.10.1.
- [Release notes](https://github.com/react-bootstrap/react-bootstrap/releases)
- [Changelog](https://github.com/react-bootstrap/react-bootstrap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-bootstrap/react-bootstrap/compare/v2.10.0...v2.10.1)

---
updated-dependencies:
- dependency-name: react-bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 10:12:51 +02:00
dependabot[bot] d15cf82e9c
Bump undici from 5.26.3 to 5.28.3 in /Plan/react/dashboard (#3467)
Bumps [undici](https://github.com/nodejs/undici) from 5.26.3 to 5.28.3.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.26.3...v5.28.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 10:12:05 +02:00
dependabot[bot] b1566dfe80
Bump swagger-ui from 5.11.2 to 5.11.7 in /Plan/react/dashboard (#3468)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.11.2 to 5.11.7.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.11.2...v5.11.7)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 10:11:56 +02:00
dependabot[bot] 1297ede72d
Bump @testing-library/jest-dom in /Plan/react/dashboard (#3458)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.4.1 to 6.4.2.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.4.1...v6.4.2)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 09:26:02 +02:00
dependabot[bot] f8553009f3
Bump org.junit.jupiter:junit-jupiter from 5.10.1 to 5.10.2 in /Plan (#3454)
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.10.1 to 5.10.2.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.1...r5.10.2)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 09:25:38 +02:00
dependabot[bot] 7d3ab667d8
Bump testContainersVersion from 1.19.4 to 1.19.5 in /Plan (#3453)
Bumps `testContainersVersion` from 1.19.4 to 1.19.5.

Updates `org.testcontainers:testcontainers` from 1.19.4 to 1.19.5
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.4...1.19.5)

Updates `org.testcontainers:junit-jupiter` from 1.19.4 to 1.19.5
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.4...1.19.5)

Updates `org.testcontainers:nginx` from 1.19.4 to 1.19.5
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.4...1.19.5)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:nginx
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 09:25:24 +02:00
dependabot[bot] a4e2f0d6f7
Bump react-i18next from 14.0.1 to 14.0.5 in /Plan/react/dashboard (#3459)
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 14.0.1 to 14.0.5.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v14.0.1...v14.0.5)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 09:24:13 +02:00
dependabot[bot] e955f80daa
Bump commons-codec:commons-codec from 1.16.0 to 1.16.1 in /Plan (#3457)
Bumps [commons-codec:commons-codec](https://github.com/apache/commons-codec) from 1.16.0 to 1.16.1.
- [Changelog](https://github.com/apache/commons-codec/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-codec/compare/rel/commons-codec-1.16.0...rel/commons-codec-1.16.1)

---
updated-dependencies:
- dependency-name: commons-codec:commons-codec
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 09:24:00 +02:00
dependabot[bot] aad3073c92
Bump com.github.node-gradle.node from 7.0.1 to 7.0.2 in /Plan (#3456)
Bumps com.github.node-gradle.node from 7.0.1 to 7.0.2.

---
updated-dependencies:
- dependency-name: com.github.node-gradle.node
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 09:23:25 +02:00
Aurora Lahtela b867bcebdb Don't save sessions on server shutdown if database already closed
Affects issues:
- #3436
2024-02-17 09:19:38 +02:00
Aurora Lahtela bede36957b Fix ShutdownSaveTest 2024-02-17 09:11:37 +02:00
Aurora Lahtela 2daf3943b7 Make call-site for SQLite JVM wait more accurate
Affects issues:
- #3436
2024-02-17 09:06:45 +02:00
Aurora Lahtela e041e193fc Close transaction queue after connection wait on SQLite
Affects issues:
- #3436
2024-02-11 15:47:39 +02:00
Aurora Lahtela bf3bdb599d Log connection waiting sites without dev mode 2024-02-04 10:05:48 +02:00
dependabot[bot] 8ced48d815
Bump @testing-library/jest-dom in /Plan/react/dashboard (#3444)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.3.0 to 6.4.1.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.3.0...v6.4.1)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-03 14:49:19 +02:00
dependabot[bot] 45833d5fc7
Bump com.github.seancfoley:ipaddress from 5.4.0 to 5.4.2 in /Plan (#3451)
Bumps [com.github.seancfoley:ipaddress](https://github.com/seancfoley/IPAddress) from 5.4.0 to 5.4.2.
- [Release notes](https://github.com/seancfoley/IPAddress/releases)
- [Commits](https://github.com/seancfoley/IPAddress/compare/v5.4.0...v5.4.2)

---
updated-dependencies:
- dependency-name: com.github.seancfoley:ipaddress
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-03 14:49:10 +02:00
dependabot[bot] ad8256cf04
Bump swagger-ui from 5.11.0 to 5.11.2 in /Plan/react/dashboard (#3443)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.11.0 to 5.11.2.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.11.0...v5.11.2)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-03 13:53:58 +02:00
dependabot[bot] 0ccafd9050
Bump react-router-dom from 6.21.3 to 6.22.0 in /Plan/react/dashboard (#3447)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.21.3 to 6.22.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.22.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-03 13:53:21 +02:00
dependabot[bot] 60f2aa6c42
Bump i18next-http-backend from 2.4.2 to 2.4.3 in /Plan/react/dashboard (#3446)
Bumps [i18next-http-backend](https://github.com/i18next/i18next-http-backend) from 2.4.2 to 2.4.3.
- [Changelog](https://github.com/i18next/i18next-http-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-http-backend/compare/v2.4.2...v2.4.3)

---
updated-dependencies:
- dependency-name: i18next-http-backend
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-03 13:53:06 +02:00
dependabot[bot] 468bd32111
Bump i18next from 23.7.19 to 23.8.2 in /Plan/react/dashboard (#3442)
Bumps [i18next](https://github.com/i18next/i18next) from 23.7.19 to 23.8.2.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.7.19...v23.8.2)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-03 13:52:45 +02:00
dependabot[bot] ed543e460e
Bump @testing-library/react in /Plan/react/dashboard (#3445)
Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 14.1.2 to 14.2.1.
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v14.1.2...v14.2.1)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-03 13:52:35 +02:00
dependabot[bot] cac627a2f7
Bump jettyVersion from 11.0.19 to 11.0.20 in /Plan (#3450)
Bumps `jettyVersion` from 11.0.19 to 11.0.20.

Updates `org.eclipse.jetty:jetty-server` from 11.0.19 to 11.0.20

Updates `org.eclipse.jetty:jetty-alpn-java-server` from 11.0.19 to 11.0.20

Updates `org.eclipse.jetty.http2:http2-server` from 11.0.19 to 11.0.20

---
updated-dependencies:
- dependency-name: org.eclipse.jetty:jetty-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty:jetty-alpn-java-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty.http2:http2-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-03 13:52:07 +02:00
dependabot[bot] a0a430507e
Bump org.xerial:sqlite-jdbc from 3.45.0.0 to 3.45.1.0 in /Plan (#3448)
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.45.0.0 to 3.45.1.0.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.45.0.0...3.45.1.0)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-03 13:51:55 +02:00
Aurora Lahtela 5ddbd52d37 Log connection holding call sites in dev-mode 2024-02-03 10:17:31 +02:00
Aurora Lahtela 4615c6b6b0 Optimize unsatisfied condition removal for players with user_id join
The query was joining based on UUID which can be slow since it's a string.
2024-02-03 09:13:00 +02:00
Aurora Lahtela 47d74eee8c Add slf4j-nop:1.7.36 to SQLite driver dependencies
SQLite driver 3.43.2.1 downgraded to slf4j 1.7

Adding the nop library to be loaded by the dependency downloader
will stop the error message since slf4j-nop 1.7 is loaded.

Affects issues:
- Fixed #3435
2024-01-28 12:34:37 +02:00
甜力怕 bda96726f8
Update locale_CN.yml by liuzhen932 (#3437) 2024-01-28 09:05:07 +02:00
Aurora Lahtela 2b93919b5e Use better loader for PlayerTable 2024-01-27 21:04:16 +02:00
Aurora Lahtela a8decff8e8 Make Ping Table use DataTablesTable
Also fixed issue where server ping table never loaded
2024-01-27 21:02:04 +02:00
Aurora Lahtela 67c487b820 Fix Best and Worst ping formatting on player table 2024-01-27 14:21:34 +02:00
Aurora Lahtela ff7e7791f3 Refactor PlayerListCard to also have PlayerTable 2024-01-27 14:13:08 +02:00
Aurora Lahtela 3ad5d577d4 Make Query view affect ping data retrieved
All ping data was being used to create average.

This allows comparing ping over time
2024-01-27 14:01:14 +02:00
Aurora Lahtela 7494902e46 Add regular_players and network_regular_players placeholders
Affects issues:
- Close #3425
2024-01-27 13:38:06 +02:00
Aurora Lahtela 01ce503c77 Add network session placeholders
Affects issues:
- Close #2267
2024-01-27 13:35:03 +02:00
AuroraLS3 465af8e803 Update versions.txt 2024-01-27 08:08:01 +00:00
dependabot[bot] 512defb3f8
Bump org.seleniumhq.selenium:selenium-java from 4.12.1 to 4.17.0 in /Plan (#3434)
* Bump org.seleniumhq.selenium:selenium-java in /Plan

Bumps [org.seleniumhq.selenium:selenium-java](https://github.com/SeleniumHQ/selenium) from 4.12.1 to 4.17.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Commits](https://github.com/SeleniumHQ/selenium/commits/selenium-4.17.0)

---
updated-dependencies:
- dependency-name: org.seleniumhq.selenium:selenium-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Use new headless setup method

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Aurora Lahtela <24460436+AuroraLS3@users.noreply.github.com>
2024-01-27 09:49:50 +02:00
dependabot[bot] 89355d4975
Bump testContainersVersion from 1.19.3 to 1.19.4 in /Plan (#3431)
Bumps `testContainersVersion` from 1.19.3 to 1.19.4.

Updates `org.testcontainers:testcontainers` from 1.19.3 to 1.19.4
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.3...1.19.4)

Updates `org.testcontainers:junit-jupiter` from 1.19.3 to 1.19.4
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.3...1.19.4)

Updates `org.testcontainers:nginx` from 1.19.3 to 1.19.4
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.3...1.19.4)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:nginx
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-27 09:26:00 +02:00
dependabot[bot] 4a6987710f
Bump org.xerial:sqlite-jdbc from 3.42.0.1 to 3.45.0.0 in /Plan (#3430)
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.42.0.1 to 3.45.0.0.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.42.0.1...3.45.0.0)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-27 09:25:52 +02:00
dependabot[bot] 79ba13b6fc
Bump react-i18next from 14.0.0 to 14.0.1 in /Plan/react/dashboard (#3427)
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 14.0.0 to 14.0.1.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v14.0.0...v14.0.1)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-27 09:14:23 +02:00
dependabot[bot] 7bbc18934a
Bump i18next from 23.7.16 to 23.7.19 in /Plan/react/dashboard (#3428)
Bumps [i18next](https://github.com/i18next/i18next) from 23.7.16 to 23.7.19.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.7.16...v23.7.19)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-27 09:14:09 +02:00
dependabot[bot] 66844d4c56
Bump @testing-library/jest-dom in /Plan/react/dashboard (#3429)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.2.0 to 6.3.0.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.2.0...v6.3.0)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-27 09:13:47 +02:00
dependabot[bot] d68bf9fca9
Bump axios from 1.6.5 to 1.6.7 in /Plan/react/dashboard (#3426)
Bumps [axios](https://github.com/axios/axios) from 1.6.5 to 1.6.7.
- [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.6.5...v1.6.7)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-27 09:13:22 +02:00
dependabot[bot] 6584ca0cb7
Bump mockitoVersion from 5.9.0 to 5.10.0 in /Plan (#3433)
Bumps `mockitoVersion` from 5.9.0 to 5.10.0.

Updates `org.mockito:mockito-core` from 5.9.0 to 5.10.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.9.0...v5.10.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.9.0 to 5.10.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.9.0...v5.10.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-27 09:12:53 +02:00
Aurora Lahtela 8356a0d52e Test and fix top_ placeholders
Affects issues:
- Fixed #3369
2024-01-21 20:08:46 +02:00
Aurora Lahtela c8d0cc91b6 Fixed react bundle getting exported when export is disabled
Caused by missing checks before react export.

Affects issues:
- #3384
2024-01-21 19:33:24 +02:00
Aurora Lahtela ae85f39871 Stop JSON cache mismatch when UUID is missing
The check for {identifier}- meant that lookup for "PLAYERS_ONLINE-"
would also match "PLAYERS_ONLINE-{uuid}-" since start is the same

Fixed this by changing identifiers to PLAYERS_ONLINE_{uuid}-{timestamp}

Affects issues:
- Fixed #3404
2024-01-21 19:21:41 +02:00
Aurora Lahtela 1fdd3289a6 Move fabric command registration earlier
This prevents situation where Plan disables due to an error but reload command is not available

Affects issues:
- Fixed #3392
2024-01-21 13:44:47 +02:00
Aurora Lahtela 9e08794ddd Update locale files 2024-01-21 10:04:17 +02:00
Aurora Lahtela 34a731b70a Add CSV export to all DataTables
Affects issues:
- Close #3413
2024-01-21 10:02:39 +02:00
Aurora Lahtela 673cb4cfdb Remove console log 2024-01-20 11:34:39 +02:00
Aurora Lahtela 8e94d26ff3 Format Server/Network Overview values in the frontend 2024-01-20 11:34:20 +02:00
dependabot[bot] f9d2b0767f
Bump react-router-dom from 6.21.2 to 6.21.3 in /Plan/react/dashboard (#3414)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.21.2 to 6.21.3.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.21.3/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-20 09:12:49 +02:00
dependabot[bot] 7dfb933295
Bump sass from 1.69.7 to 1.70.0 in /Plan/react/dashboard (#3415)
Bumps [sass](https://github.com/sass/dart-sass) from 1.69.7 to 1.70.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.69.7...1.70.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-20 09:12:33 +02:00
dependabot[bot] 8e0b2d2734
Bump react-bootstrap from 2.9.2 to 2.10.0 in /Plan/react/dashboard (#3416)
Bumps [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) from 2.9.2 to 2.10.0.
- [Release notes](https://github.com/react-bootstrap/react-bootstrap/releases)
- [Changelog](https://github.com/react-bootstrap/react-bootstrap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-bootstrap/react-bootstrap/compare/v2.9.2...v2.10.0)

---
updated-dependencies:
- dependency-name: react-bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-20 09:12:14 +02:00
dependabot[bot] 3717eacad1
Bump mockitoVersion from 5.8.0 to 5.9.0 in /Plan (#3417)
Bumps `mockitoVersion` from 5.8.0 to 5.9.0.

Updates `org.mockito:mockito-core` from 5.8.0 to 5.9.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.8.0...v5.9.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.8.0 to 5.9.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.8.0...v5.9.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-20 09:11:57 +02:00
dependabot[bot] 6f179a133b
Bump com.mysql:mysql-connector-j from 8.2.0 to 8.3.0 in /Plan (#3418)
Bumps [com.mysql:mysql-connector-j](https://github.com/mysql/mysql-connector-j) from 8.2.0 to 8.3.0.
- [Changelog](https://github.com/mysql/mysql-connector-j/blob/release/8.x/CHANGES)
- [Commits](https://github.com/mysql/mysql-connector-j/compare/8.2.0...8.3.0)

---
updated-dependencies:
- dependency-name: com.mysql:mysql-connector-j
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-20 09:11:47 +02:00
dependabot[bot] 0ec5552d90
Bump vite from 5.0.11 to 5.0.12 in /Plan/react/dashboard (#3419)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.11 to 5.0.12.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.0.12/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.0.12/packages/vite)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-20 09:11:11 +02:00
dependabot[bot] 2a387bd0dd
Bump swagger-ui from 5.10.5 to 5.11.0 in /Plan/react/dashboard (#3409)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.10.5 to 5.11.0.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.10.5...v5.11.0)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-17 11:36:29 +02:00
dependabot[bot] 26b69e604c
Bump react-router-dom from 6.21.1 to 6.21.2 in /Plan/react/dashboard (#3407)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.21.1 to 6.21.2.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.21.2/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-17 11:36:06 +02:00
dependabot[bot] 3e41c4dccf
Bump slf4jVersion from 2.0.10 to 2.0.11 in /Plan (#3405)
Bumps `slf4jVersion` from 2.0.10 to 2.0.11.

Updates `org.slf4j:slf4j-nop` from 2.0.10 to 2.0.11

Updates `org.slf4j:slf4j-api` from 2.0.10 to 2.0.11

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-nop
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-17 11:35:12 +02:00
dependabot[bot] ae98bcfd69
Bump axios from 1.6.4 to 1.6.5 in /Plan/react/dashboard (#3406)
Bumps [axios](https://github.com/axios/axios) from 1.6.4 to 1.6.5.
- [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.6.4...v1.6.5)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-17 11:35:04 +02:00
dependabot[bot] 05f07da915
Bump vite from 5.0.10 to 5.0.11 in /Plan/react/dashboard (#3408)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.10 to 5.0.11.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.0.11/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-17 11:34:51 +02:00
AuroraLS3 d4ab5a53f8 Update versions.txt 5.6 DEV build 2703 2024-01-07 10:10:44 +00:00
dependabot[bot] 29ed71f81c
Bump @fullcalendar/react from 6.1.9 to 6.1.10 in /Plan/react/dashboard (#3361)
Bumps [@fullcalendar/react](https://github.com/fullcalendar/fullcalendar-react) from 6.1.9 to 6.1.10.
- [Release notes](https://github.com/fullcalendar/fullcalendar-react/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar-react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar-react/compare/v6.1.9...v6.1.10)

---
updated-dependencies:
- dependency-name: "@fullcalendar/react"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-07 11:51:43 +02:00
Aurora Lahtela 28f3f356cc Use getGameProfile().getName() for player name on Fabric 2024-01-07 11:44:53 +02:00
Jeroen Bollen fa1ec4f4f6
Fabric 1.20.4 (#3366) 2024-01-07 11:39:06 +02:00
dependabot[bot] 23d2cc046e
Bump @testing-library/jest-dom in /Plan/react/dashboard (#3396)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.1.6 to 6.2.0.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.1.6...v6.2.0)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-07 11:38:31 +02:00
dependabot[bot] 5602706cfa
Bump @testing-library/user-event in /Plan/react/dashboard (#3397)
Bumps [@testing-library/user-event](https://github.com/testing-library/user-event) from 14.5.1 to 14.5.2.
- [Release notes](https://github.com/testing-library/user-event/releases)
- [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/user-event/compare/v14.5.1...v14.5.2)

---
updated-dependencies:
- dependency-name: "@testing-library/user-event"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-07 11:38:23 +02:00
dependabot[bot] 9dc4bbdb64
Bump sass from 1.69.6 to 1.69.7 in /Plan/react/dashboard (#3398)
Bumps [sass](https://github.com/sass/dart-sass) from 1.69.6 to 1.69.7.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.69.6...1.69.7)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-07 11:38:16 +02:00
Aurora Lahtela feb8118002 Bump Extension-DiscordSRV to 1.27.0-R1.4
Affects issues:
- Fixed #3399
2024-01-06 18:01:51 +02:00
Aurora Lahtela bc4aef8b2b Add some missing javadocs to not generate warnings 2024-01-06 18:01:50 +02:00
dependabot[bot] 6fa2d0ab87
Bump @vitejs/plugin-react from 4.2.0 to 4.2.1 in /Plan/react/dashboard (#3356)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.2.0 to 4.2.1.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/v4.2.1/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 17:01:18 +02:00
dependabot[bot] c638600d0a
Bump swagger-ui from 5.10.3 to 5.10.5 in /Plan/react/dashboard (#3360)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.10.3 to 5.10.5.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.10.3...v5.10.5)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 17:01:12 +02:00
dependabot[bot] 3d95541f8e
Bump axios from 1.6.3 to 1.6.4 in /Plan/react/dashboard (#3394)
Bumps [axios](https://github.com/axios/axios) from 1.6.3 to 1.6.4.
- [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.6.3...v1.6.4)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 17:00:57 +02:00
dependabot[bot] 38e9909b23
Bump i18next from 23.7.12 to 23.7.16 in /Plan/react/dashboard (#3393)
Bumps [i18next](https://github.com/i18next/i18next) from 23.7.12 to 23.7.16.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.7.12...v23.7.16)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 17:00:47 +02:00
dependabot[bot] 3e5dbd4ca3
Bump react-router-dom from 6.20.1 to 6.21.1 in /Plan/react/dashboard (#3382)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.20.1 to 6.21.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.21.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 17:00:35 +02:00
dependabot[bot] 9e8d93820a
Bump @fullcalendar/interaction in /Plan/react/dashboard (#3362)
Bumps [@fullcalendar/interaction](https://github.com/fullcalendar/fullcalendar/tree/HEAD/packages/interaction) from 6.1.9 to 6.1.10.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/commits/v6.1.10/packages/interaction)

---
updated-dependencies:
- dependency-name: "@fullcalendar/interaction"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:59:59 +02:00
dependabot[bot] 775347574f
Bump org.mariadb.jdbc:mariadb-java-client from 3.3.1 to 3.3.2 in /Plan (#3379)
Bumps [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j) from 3.3.1 to 3.3.2.
- [Release notes](https://github.com/mariadb-corporation/mariadb-connector-j/releases)
- [Changelog](https://github.com/mariadb-corporation/mariadb-connector-j/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.3.1...3.3.2)

---
updated-dependencies:
- dependency-name: org.mariadb.jdbc:mariadb-java-client
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:05:34 +02:00
dependabot[bot] fec0471edd
Bump @fullcalendar/bootstrap in /Plan/react/dashboard (#3357)
Bumps [@fullcalendar/bootstrap](https://github.com/fullcalendar/fullcalendar/tree/HEAD/packages/bootstrap4) from 6.1.9 to 6.1.10.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/commits/v6.1.10/packages/bootstrap4)

---
updated-dependencies:
- dependency-name: "@fullcalendar/bootstrap"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:04:56 +02:00
dependabot[bot] e6c97c0d81
Bump jettyVersion from 11.0.18 to 11.0.19 in /Plan (#3375)
Bumps `jettyVersion` from 11.0.18 to 11.0.19.

Updates `org.eclipse.jetty:jetty-server` from 11.0.18 to 11.0.19
- [Release notes](https://github.com/jetty/jetty.project/releases)
- [Commits](https://github.com/jetty/jetty.project/compare/jetty-11.0.18...jetty-11.0.19)

Updates `org.eclipse.jetty:jetty-alpn-java-server` from 11.0.18 to 11.0.19

Updates `org.eclipse.jetty.http2:http2-server` from 11.0.18 to 11.0.19

---
updated-dependencies:
- dependency-name: org.eclipse.jetty:jetty-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty:jetty-alpn-java-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty.http2:http2-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:04:40 +02:00
dependabot[bot] f50b915a23
Bump @fullcalendar/daygrid from 6.1.9 to 6.1.10 in /Plan/react/dashboard (#3363)
Bumps [@fullcalendar/daygrid](https://github.com/fullcalendar/fullcalendar/tree/HEAD/packages/daygrid) from 6.1.9 to 6.1.10.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/commits/v6.1.10/packages/daygrid)

---
updated-dependencies:
- dependency-name: "@fullcalendar/daygrid"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:03:34 +02:00
dependabot[bot] d204b5cf75
Bump io.swagger.core.v3.swagger-gradle-plugin in /Plan (#3376)
Bumps io.swagger.core.v3.swagger-gradle-plugin from 2.2.19 to 2.2.20.

---
updated-dependencies:
- dependency-name: io.swagger.core.v3.swagger-gradle-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:03:04 +02:00
dependabot[bot] 9ece2ea4a5
Bump swaggerVersion from 2.2.19 to 2.2.20 in /Plan (#3377)
Bumps `swaggerVersion` from 2.2.19 to 2.2.20.

Updates `io.swagger.core.v3:swagger-core-jakarta` from 2.2.19 to 2.2.20

Updates `io.swagger.core.v3:swagger-jaxrs2-jakarta` from 2.2.19 to 2.2.20

---
updated-dependencies:
- dependency-name: io.swagger.core.v3:swagger-core-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.swagger.core.v3:swagger-jaxrs2-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:02:53 +02:00
dependabot[bot] 82894e05ba
Bump daggerVersion from 2.49 to 2.50 in /Plan (#3378)
Bumps `daggerVersion` from 2.49 to 2.50.

Updates `com.google.dagger:dagger` from 2.49 to 2.50
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.49...dagger-2.50)

Updates `com.google.dagger:dagger-compiler` from 2.49 to 2.50
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.49...dagger-2.50)

---
updated-dependencies:
- dependency-name: com.google.dagger:dagger
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.dagger:dagger-compiler
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:02:42 +02:00
dependabot[bot] e771db2f3a
Bump vite from 5.0.5 to 5.0.10 in /Plan/react/dashboard (#3380)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.5 to 5.0.10.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.0.10/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:02:03 +02:00
dependabot[bot] 3ee3335ccf
Bump react-i18next from 13.5.0 to 14.0.0 in /Plan/react/dashboard (#3381)
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 13.5.0 to 14.0.0.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v13.5.0...v14.0.0)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:01:47 +02:00
dependabot[bot] 4564b04fec
Bump slf4jVersion from 2.0.9 to 2.0.10 in /Plan (#3385)
Bumps `slf4jVersion` from 2.0.9 to 2.0.10.

Updates `org.slf4j:slf4j-nop` from 2.0.9 to 2.0.10

Updates `org.slf4j:slf4j-api` from 2.0.9 to 2.0.10

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-nop
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:01:31 +02:00
dependabot[bot] 2b57902111
Bump i18next from 23.7.8 to 23.7.12 in /Plan/react/dashboard (#3386)
Bumps [i18next](https://github.com/i18next/i18next) from 23.7.8 to 23.7.12.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.7.8...v23.7.12)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:01:11 +02:00
dependabot[bot] cad820b925
Bump axios from 1.6.2 to 1.6.3 in /Plan/react/dashboard (#3387)
Bumps [axios](https://github.com/axios/axios) from 1.6.2 to 1.6.3.
- [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.6.2...v1.6.3)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:01:00 +02:00
dependabot[bot] edbbf682f0
Bump @testing-library/jest-dom in /Plan/react/dashboard (#3388)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.1.5 to 6.1.6.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.1.5...v6.1.6)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:00:49 +02:00
dependabot[bot] cddb06b6db
Bump react-bootstrap from 2.9.1 to 2.9.2 in /Plan/react/dashboard (#3389)
Bumps [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) from 2.9.1 to 2.9.2.
- [Release notes](https://github.com/react-bootstrap/react-bootstrap/releases)
- [Changelog](https://github.com/react-bootstrap/react-bootstrap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-bootstrap/react-bootstrap/compare/v2.9.1...v2.9.2)

---
updated-dependencies:
- dependency-name: react-bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:00:40 +02:00
dependabot[bot] 9e6ed14498
Bump sass from 1.69.5 to 1.69.6 in /Plan/react/dashboard (#3390)
Bumps [sass](https://github.com/sass/dart-sass) from 1.69.5 to 1.69.6.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.69.5...1.69.6)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:00:20 +02:00
dependabot[bot] f25886250c
Bump moment from 2.29.4 to 2.30.1 in /Plan/react/dashboard (#3391)
Bumps [moment](https://github.com/moment/moment) from 2.29.4 to 2.30.1.
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.4...2.30.1)

---
updated-dependencies:
- dependency-name: moment
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-04 16:00:04 +02:00
dependabot[bot] 122e35b9c3
Bump vite from 5.0.0 to 5.0.5 in /Plan/react/dashboard (#3355)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.0 to 5.0.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.0.5/packages/vite)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-10 10:39:01 +02:00
Aurora Lahtela bc424f062f
3236/vite migration (#3354)
* Migrate to Vite
* Remove asset-manifest.json which vite doesn't generate
* Fix tree-shaking removing Export URL if-blocks from services
* Implement address correction for the vite bundle
* Fixed issue with single proxy online graph 403 without page.server.overview.players.online.graph

Affects issues:
- Close #3236
2023-12-10 09:29:01 +02:00
dependabot[bot] 05cf96de0e
Bump org.mariadb.jdbc:mariadb-java-client from 3.3.0 to 3.3.1 in /Plan (#3332)
Bumps [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j) from 3.3.0 to 3.3.1.
- [Release notes](https://github.com/mariadb-corporation/mariadb-connector-j/releases)
- [Changelog](https://github.com/mariadb-corporation/mariadb-connector-j/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.3.0...3.3.1)

---
updated-dependencies:
- dependency-name: org.mariadb.jdbc:mariadb-java-client
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:35:21 +02:00
dependabot[bot] c2849e4ad8
Bump @fortawesome/free-brands-svg-icons in /Plan/react/dashboard (#3337)
Bumps [@fortawesome/free-brands-svg-icons](https://github.com/FortAwesome/Font-Awesome) from 6.4.2 to 6.5.1.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.2...6.5.1)

---
updated-dependencies:
- dependency-name: "@fortawesome/free-brands-svg-icons"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:35:05 +02:00
dependabot[bot] 633d29a8c2
Bump @fortawesome/free-solid-svg-icons in /Plan/react/dashboard (#3336)
Bumps [@fortawesome/free-solid-svg-icons](https://github.com/FortAwesome/Font-Awesome) from 6.4.2 to 6.5.1.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.2...6.5.1)

---
updated-dependencies:
- dependency-name: "@fortawesome/free-solid-svg-icons"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:34:58 +02:00
dependabot[bot] 22705289b2
Bump @fortawesome/fontawesome-free in /Plan/react/dashboard (#3335)
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 6.4.2 to 6.5.1.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.2...6.5.1)

---
updated-dependencies:
- dependency-name: "@fortawesome/fontawesome-free"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:34:49 +02:00
dependabot[bot] 2d5bb874f1
Bump react-router-dom from 6.20.0 to 6.20.1 in /Plan/react/dashboard (#3352)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.20.0 to 6.20.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.20.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:12:23 +02:00
dependabot[bot] 9e829ef649
Bump @fortawesome/fontawesome-svg-core in /Plan/react/dashboard (#3334)
Bumps [@fortawesome/fontawesome-svg-core](https://github.com/FortAwesome/Font-Awesome) from 6.4.2 to 6.5.1.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.2...6.5.1)

---
updated-dependencies:
- dependency-name: "@fortawesome/fontawesome-svg-core"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:11:32 +02:00
dependabot[bot] 087c22235c
Bump @fortawesome/free-regular-svg-icons in /Plan/react/dashboard (#3338)
Bumps [@fortawesome/free-regular-svg-icons](https://github.com/FortAwesome/Font-Awesome) from 6.4.2 to 6.5.1.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.2...6.5.1)

---
updated-dependencies:
- dependency-name: "@fortawesome/free-regular-svg-icons"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:11:11 +02:00
dependabot[bot] 09a61d39e3
Bump @testing-library/jest-dom in /Plan/react/dashboard (#3340)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.1.4 to 6.1.5.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.1.4...v6.1.5)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:11:02 +02:00
dependabot[bot] e7b421bed2
Bump @fullcalendar/core from 6.1.9 to 6.1.10 in /Plan/react/dashboard (#3339)
Bumps [@fullcalendar/core](https://github.com/fullcalendar/fullcalendar/tree/HEAD/packages/core) from 6.1.9 to 6.1.10.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/commits/v6.1.10/packages/core)

---
updated-dependencies:
- dependency-name: "@fullcalendar/core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:10:51 +02:00
dependabot[bot] 157b4bed9d
Bump @adobe/css-tools from 4.3.1 to 4.3.2 in /Plan/react/dashboard (#3342)
Bumps [@adobe/css-tools](https://github.com/adobe/css-tools) from 4.3.1 to 4.3.2.
- [Changelog](https://github.com/adobe/css-tools/blob/main/History.md)
- [Commits](https://github.com/adobe/css-tools/commits)

---
updated-dependencies:
- dependency-name: "@adobe/css-tools"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:10:38 +02:00
dependabot[bot] 584ac9880e
Bump mockitoVersion from 5.7.0 to 5.8.0 in /Plan (#3348)
Bumps `mockitoVersion` from 5.7.0 to 5.8.0.

Updates `org.mockito:mockito-core` from 5.7.0 to 5.8.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.7.0...v5.8.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.7.0 to 5.8.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.7.0...v5.8.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:10:26 +02:00
dependabot[bot] 1731c28022
Bump daggerVersion from 2.48.1 to 2.49 in /Plan (#3349)
Bumps `daggerVersion` from 2.48.1 to 2.49.

Updates `com.google.dagger:dagger` from 2.48.1 to 2.49
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.48.1...dagger-2.49)

Updates `com.google.dagger:dagger-compiler` from 2.48.1 to 2.49
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.48.1...dagger-2.49)

---
updated-dependencies:
- dependency-name: com.google.dagger:dagger
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.dagger:dagger-compiler
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:10:08 +02:00
dependabot[bot] c3a1b215ab
Bump com.maxmind.geoip2:geoip2 from 4.1.0 to 4.2.0 in /Plan (#3351)
Bumps [com.maxmind.geoip2:geoip2](https://github.com/maxmind/GeoIP2-java) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/maxmind/GeoIP2-java/releases)
- [Changelog](https://github.com/maxmind/GeoIP2-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/maxmind/GeoIP2-java/compare/v4.1.0...v4.2.0)

---
updated-dependencies:
- dependency-name: com.maxmind.geoip2:geoip2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:09:06 +02:00
dependabot[bot] 3374250493
Bump i18next from 23.7.6 to 23.7.8 in /Plan/react/dashboard (#3353)
Bumps [i18next](https://github.com/i18next/i18next) from 23.7.6 to 23.7.8.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.7.6...v23.7.8)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-09 09:08:30 +02:00
jhqwqmc 26854c37cc
Update locale_CN.yml (#3345) 2023-12-06 11:42:06 +02:00
dependabot[bot] bf46b1123c
Bump testContainersVersion from 1.19.2 to 1.19.3 in /Plan (#3322)
Bumps `testContainersVersion` from 1.19.2 to 1.19.3.

Updates `org.testcontainers:testcontainers` from 1.19.2 to 1.19.3
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.2...1.19.3)

Updates `org.testcontainers:junit-jupiter` from 1.19.2 to 1.19.3
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.2...1.19.3)

Updates `org.testcontainers:nginx` from 1.19.2 to 1.19.3
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.2...1.19.3)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:nginx
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-25 13:56:48 +02:00
dependabot[bot] 4627337bb5
Bump i18next-http-backend from 2.4.1 to 2.4.2 in /Plan/react/dashboard (#3323)
Bumps [i18next-http-backend](https://github.com/i18next/i18next-http-backend) from 2.4.1 to 2.4.2.
- [Changelog](https://github.com/i18next/i18next-http-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-http-backend/compare/v2.4.1...v2.4.2)

---
updated-dependencies:
- dependency-name: i18next-http-backend
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-25 13:56:35 +02:00
dependabot[bot] 5074fba1a4
Bump react-router-dom from 6.19.0 to 6.20.0 in /Plan/react/dashboard (#3324)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.19.0 to 6.20.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.20.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-25 13:56:27 +02:00
dependabot[bot] 6e7f64610a
Bump swagger-ui from 5.10.0 to 5.10.3 in /Plan/react/dashboard (#3325)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.10.0 to 5.10.3.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.10.0...v5.10.3)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-25 13:56:13 +02:00
dependabot[bot] 15c5ea32d4
Bump @testing-library/react in /Plan/react/dashboard (#3326)
Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 14.1.0 to 14.1.2.
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v14.1.0...v14.1.2)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-25 13:56:06 +02:00
dependabot[bot] d45c04c502
Bump i18next-chained-backend in /Plan/react/dashboard (#3316)
Bumps [i18next-chained-backend](https://github.com/i18next/i18next-chained-backend) from 4.5.0 to 4.6.2.
- [Changelog](https://github.com/i18next/i18next-chained-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-chained-backend/compare/v4.5.0...v4.6.2)

---
updated-dependencies:
- dependency-name: i18next-chained-backend
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-18 14:18:26 +02:00
dependabot[bot] 3146a19e30
Bump testContainersVersion from 1.19.1 to 1.19.2 in /Plan (#3317)
Bumps `testContainersVersion` from 1.19.1 to 1.19.2.

Updates `org.testcontainers:testcontainers` from 1.19.1 to 1.19.2
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.1...1.19.2)

Updates `org.testcontainers:junit-jupiter` from 1.19.1 to 1.19.2
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.1...1.19.2)

Updates `org.testcontainers:nginx` from 1.19.1 to 1.19.2
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.1...1.19.2)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:nginx
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-18 14:18:12 +02:00
dependabot[bot] e15b9b9ceb
Bump i18next from 23.6.0 to 23.7.6 in /Plan/react/dashboard (#3310)
Bumps [i18next](https://github.com/i18next/i18next) from 23.6.0 to 23.7.6.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.6.0...v23.7.6)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-18 14:07:13 +02:00
dependabot[bot] e6aec3d6e0
Bump i18next-http-backend from 2.3.1 to 2.4.1 in /Plan/react/dashboard (#3311)
Bumps [i18next-http-backend](https://github.com/i18next/i18next-http-backend) from 2.3.1 to 2.4.1.
- [Changelog](https://github.com/i18next/i18next-http-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-http-backend/compare/v2.3.1...v2.4.1)

---
updated-dependencies:
- dependency-name: i18next-http-backend
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-18 14:07:04 +02:00
dependabot[bot] 66af4723cc
Bump axios from 1.6.1 to 1.6.2 in /Plan/react/dashboard (#3312)
Bumps [axios](https://github.com/axios/axios) from 1.6.1 to 1.6.2.
- [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.6.1...v1.6.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-18 14:06:54 +02:00
dependabot[bot] 0ab3988541
Bump react-i18next from 13.3.1 to 13.5.0 in /Plan/react/dashboard (#3314)
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 13.3.1 to 13.5.0.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v13.3.1...v13.5.0)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-18 14:06:24 +02:00
dependabot[bot] a9226b3c1b
Bump swagger-ui from 5.9.3 to 5.10.0 in /Plan/react/dashboard (#3313)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.9.3 to 5.10.0.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.9.3...v5.10.0)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-18 14:06:13 +02:00
dependabot[bot] ef6262f7ac
Bump react-router-dom from 6.18.0 to 6.19.0 in /Plan/react/dashboard (#3315)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.18.0 to 6.19.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.19.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-18 14:05:59 +02:00
dependabot[bot] c5408ffa71
Bump io.swagger.core.v3.swagger-gradle-plugin in /Plan (#3318)
Bumps io.swagger.core.v3.swagger-gradle-plugin from 2.2.18 to 2.2.19.

---
updated-dependencies:
- dependency-name: io.swagger.core.v3.swagger-gradle-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-18 14:05:06 +02:00
dependabot[bot] bbdb88ea65
Bump swaggerVersion from 2.2.18 to 2.2.19 in /Plan (#3319)
Bumps `swaggerVersion` from 2.2.18 to 2.2.19.

Updates `io.swagger.core.v3:swagger-core-jakarta` from 2.2.18 to 2.2.19

Updates `io.swagger.core.v3:swagger-jaxrs2-jakarta` from 2.2.18 to 2.2.19

---
updated-dependencies:
- dependency-name: io.swagger.core.v3:swagger-core-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.swagger.core.v3:swagger-jaxrs2-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-18 14:04:58 +02:00
dependabot[bot] 08e57c0264
Bump org.apache.commons:commons-compress from 1.24.0 to 1.25.0 in /Plan (#3320)
Bumps org.apache.commons:commons-compress from 1.24.0 to 1.25.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-18 14:04:51 +02:00
dependabot[bot] de31166248
Bump swagger-ui from 5.9.1 to 5.9.3 in /Plan/react/dashboard (#3302)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.9.1 to 5.9.3.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.9.1...v5.9.3)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-15 16:27:44 +02:00
dependabot[bot] e7eff36a9c
Bump @testing-library/react in /Plan/react/dashboard (#3303)
Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 14.0.0 to 14.1.0.
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v14.0.0...v14.1.0)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-15 16:27:24 +02:00
dependabot[bot] 8e2e86e4a7
Bump axios from 1.6.0 to 1.6.1 in /Plan/react/dashboard (#3304)
Bumps [axios](https://github.com/axios/axios) from 1.6.0 to 1.6.1.
- [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.6.0...v1.6.1)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-15 16:27:13 +02:00
dependabot[bot] 969e33bd10
Bump org.mariadb.jdbc:mariadb-java-client from 3.2.0 to 3.3.0 in /Plan (#3305)
Bumps [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j) from 3.2.0 to 3.3.0.
- [Release notes](https://github.com/mariadb-corporation/mariadb-connector-j/releases)
- [Changelog](https://github.com/mariadb-corporation/mariadb-connector-j/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.2.0...3.3.0)

---
updated-dependencies:
- dependency-name: org.mariadb.jdbc:mariadb-java-client
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-15 16:26:54 +02:00
dependabot[bot] 3b2a75bc46
Bump org.junit.jupiter:junit-jupiter from 5.10.0 to 5.10.1 in /Plan (#3306)
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.10.0 to 5.10.1.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.0...r5.10.1)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-15 16:26:34 +02:00
dependabot[bot] 8b5e628aa7
Bump com.zaxxer:HikariCP from 5.0.1 to 5.1.0 in /Plan (#3307)
Bumps [com.zaxxer:HikariCP](https://github.com/brettwooldridge/HikariCP) from 5.0.1 to 5.1.0.
- [Changelog](https://github.com/brettwooldridge/HikariCP/blob/dev/CHANGES)
- [Commits](https://github.com/brettwooldridge/HikariCP/compare/HikariCP-5.0.1...HikariCP-5.1.0)

---
updated-dependencies:
- dependency-name: com.zaxxer:HikariCP
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-15 16:26:14 +02:00
dependabot[bot] c44e7ed540
Bump mockitoVersion from 5.6.0 to 5.7.0 in /Plan (#3296)
Bumps `mockitoVersion` from 5.6.0 to 5.7.0.

Updates `org.mockito:mockito-core` from 5.6.0 to 5.7.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.6.0...v5.7.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.6.0 to 5.7.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.6.0...v5.7.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-07 15:24:49 +02:00
dependabot[bot] 40f693163a
Bump me.clip:placeholderapi from 2.11.4 to 2.11.5 in /Plan (#3300)
Bumps me.clip:placeholderapi from 2.11.4 to 2.11.5.

---
updated-dependencies:
- dependency-name: me.clip:placeholderapi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-07 15:24:27 +02:00
dependabot[bot] ce51e28945
Bump react-router-dom from 6.17.0 to 6.18.0 in /Plan/react/dashboard (#3295)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.17.0 to 6.18.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.18.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-07 15:24:17 +02:00
dependabot[bot] 9ed1def1c6
Bump org.apache.commons:commons-text from 1.10.0 to 1.11.0 in /Plan (#3301)
Bumps org.apache.commons:commons-text from 1.10.0 to 1.11.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-text
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-07 15:23:50 +02:00
dependabot[bot] 2e92abdbdd
Bump jettyVersion from 11.0.17 to 11.0.18 in /Plan (#3299)
Bumps `jettyVersion` from 11.0.17 to 11.0.18.

Updates `org.eclipse.jetty:jetty-server` from 11.0.17 to 11.0.18
- [Release notes](https://github.com/eclipse/jetty.project/releases)
- [Commits](https://github.com/eclipse/jetty.project/compare/jetty-11.0.17...jetty-11.0.18)

Updates `org.eclipse.jetty:jetty-alpn-java-server` from 11.0.17 to 11.0.18

Updates `org.eclipse.jetty.http2:http2-server` from 11.0.17 to 11.0.18

---
updated-dependencies:
- dependency-name: org.eclipse.jetty:jetty-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty:jetty-alpn-java-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty.http2:http2-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-07 15:23:38 +02:00
dependabot[bot] 5e43ea4ad8
Bump i18next-http-backend from 2.2.2 to 2.3.1 in /Plan/react/dashboard (#3293)
Bumps [i18next-http-backend](https://github.com/i18next/i18next-http-backend) from 2.2.2 to 2.3.1.
- [Changelog](https://github.com/i18next/i18next-http-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-http-backend/compare/v2.2.2...v2.3.1)

---
updated-dependencies:
- dependency-name: i18next-http-backend
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-29 15:47:35 +02:00
dependabot[bot] 0c12e83253
Bump react-router-dom from 6.16.0 to 6.17.0 in /Plan/react/dashboard (#3273)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-29 15:46:35 +02:00
dependabot[bot] b1d84bd1bb
Bump com.mysql:mysql-connector-j from 8.1.0 to 8.2.0 in /Plan (#3283)
Bumps [com.mysql:mysql-connector-j](https://github.com/mysql/mysql-connector-j) from 8.1.0 to 8.2.0.
- [Changelog](https://github.com/mysql/mysql-connector-j/blob/release/8.x/CHANGES)
- [Commits](https://github.com/mysql/mysql-connector-j/compare/8.1.0...8.2.0)

---
updated-dependencies:
- dependency-name: com.mysql:mysql-connector-j
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-29 14:28:01 +02:00
dependabot[bot] 6a92bacfa3
Bump swaggerVersion from 2.2.17 to 2.2.18 in /Plan (#3284)
Bumps `swaggerVersion` from 2.2.17 to 2.2.18.

Updates `io.swagger.core.v3:swagger-core-jakarta` from 2.2.17 to 2.2.18

Updates `io.swagger.core.v3:swagger-jaxrs2-jakarta` from 2.2.17 to 2.2.18

---
updated-dependencies:
- dependency-name: io.swagger.core.v3:swagger-core-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.swagger.core.v3:swagger-jaxrs2-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-29 14:27:12 +02:00
dependabot[bot] 7ab8975b56
Bump io.swagger.core.v3.swagger-gradle-plugin in /Plan (#3285)
Bumps io.swagger.core.v3.swagger-gradle-plugin from 2.2.17 to 2.2.18.

---
updated-dependencies:
- dependency-name: io.swagger.core.v3.swagger-gradle-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-29 14:27:06 +02:00
dependabot[bot] 605f031227
Bump i18next-http-backend from 2.2.2 to 2.3.0 in /Plan/react/dashboard (#3286)
Bumps [i18next-http-backend](https://github.com/i18next/i18next-http-backend) from 2.2.2 to 2.3.0.
- [Changelog](https://github.com/i18next/i18next-http-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-http-backend/compare/v2.2.2...v2.3.0)

---
updated-dependencies:
- dependency-name: i18next-http-backend
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-29 14:27:00 +02:00
dependabot[bot] a2623a0e4e
Bump swagger-ui from 5.9.0 to 5.9.1 in /Plan/react/dashboard (#3287)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.9.0 to 5.9.1.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.9.0...v5.9.1)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-29 14:26:52 +02:00
dependabot[bot] 069965f730
Bump axios from 1.5.1 to 1.6.0 in /Plan/react/dashboard (#3288)
Bumps [axios](https://github.com/axios/axios) from 1.5.1 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.5.1...v1.6.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-29 14:26:45 +02:00
dependabot[bot] bc3015dc3a
Bump react-bootstrap from 2.9.0 to 2.9.1 in /Plan/react/dashboard (#3289)
Bumps [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) from 2.9.0 to 2.9.1.
- [Release notes](https://github.com/react-bootstrap/react-bootstrap/releases)
- [Changelog](https://github.com/react-bootstrap/react-bootstrap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-bootstrap/react-bootstrap/compare/v2.9.0...v2.9.1)

---
updated-dependencies:
- dependency-name: react-bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-29 14:26:32 +02:00
dependabot[bot] 1d16491d57
Bump sass from 1.69.4 to 1.69.5 in /Plan/react/dashboard (#3290)
Bumps [sass](https://github.com/sass/dart-sass) from 1.69.4 to 1.69.5.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.69.4...1.69.5)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-29 14:26:20 +02:00
jhqwqmc db8d4c5700
Update locale_CN.yml (#3282)
修正翻译
2023-10-26 13:57:15 +03:00
jhqwqmc cb52a50695
Update locale_CN.yml (#3278) 2023-10-22 09:03:31 +03:00
Aurora Lahtela f1b2d1ec3c
Move some test preparation steps after jar build step 2023-10-21 19:31:15 +03:00
Aurora Lahtela 012b61c21d Reorganize some packages
- webserver.resolver.json
- database.sql.tables
- database.transactions
2023-10-21 19:19:08 +03:00
AuroraLS3 ce1705383b Update versions.txt 5.6 build 2614 2023-10-21 09:14:46 +00:00
Aurora Lahtela 53b1dc4e35 Fix small issues with PingTable 2023-10-21 11:13:37 +03:00
Aurora Lahtela edf86155d1 Fixed sorting for plugin tables that have raw numbers 2023-10-21 11:12:34 +03:00
Aurora Lahtela eac25b5e77 Made Player page plugins tabs cleaner
- Added a collapse
- Only show servers for which there's plugin data.
2023-10-21 11:04:09 +03:00
Aurora Lahtela 3d1c0f8d64 Make sure /v1/query checks access permissions for using filters. 2023-10-21 10:57:48 +03:00
Aurora Lahtela 65f706d3cc Fix date formatting showing 'undefinedNaN NaN NaN' 2023-10-21 10:31:23 +03:00
dependabot[bot] 185529678a
Bump sass from 1.69.3 to 1.69.4 in /Plan/react/dashboard (#3272)
Bumps [sass](https://github.com/sass/dart-sass) from 1.69.3 to 1.69.4.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.69.3...1.69.4)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-20 08:49:12 +03:00
dependabot[bot] df11ab8ea7
Bump i18next from 23.5.1 to 23.6.0 in /Plan/react/dashboard (#3274)
Bumps [i18next](https://github.com/i18next/i18next) from 23.5.1 to 23.6.0.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.5.1...v23.6.0)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-20 08:46:43 +03:00
dependabot[bot] 6eb7996b5d
Bump react-i18next from 13.2.2 to 13.3.1 in /Plan/react/dashboard (#3275)
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 13.2.2 to 13.3.1.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v13.2.2...v13.3.1)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-20 08:46:35 +03:00
dependabot[bot] 230e92059c
Bump undici from 5.25.1 to 5.26.3 in /Plan/react/dashboard (#3270)
Bumps [undici](https://github.com/nodejs/undici) from 5.25.1 to 5.26.3.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.25.1...v5.26.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-19 14:05:16 +03:00
dependabot[bot] d8e177fbbf
Bump @babel/traverse from 7.22.11 to 7.23.2 in /Plan/react/dashboard (#3271)
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.11 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-19 14:05:00 +03:00
Aurora Lahtela 4b3efe1378 Check for permission before linking to Query page from Query Modal 2023-10-18 19:17:20 +03:00
Aurora Lahtela c032009144 Add possibility of clicking geolocation map to Query players from there 2023-10-18 19:12:36 +03:00
Aurora Lahtela 9c9d029268 Add Ping to Players table
Affects issues:
- Close #2593
2023-10-18 18:12:12 +03:00
Aurora Lahtela 9c9058eda9 Add API to tell Plan what permissions an endpoint uses. 2023-10-18 17:28:23 +03:00
Aurora Lahtela 394c47ba6f Add %plan_player_geolocation% placeholder
Affects issues:
- Close #3269
2023-10-17 18:46:43 +03:00
Aurora Lahtela dae9ebe362 Various fixes to tables
- Fixed errors related to how sortBy changes when column visibility is toggled.
- Fixed player page links in extension tables
- All Extension tables are now colored DataTables instead of being different based on row count.
2023-10-15 18:16:23 +03:00
Aurora Lahtela b076308ec3 Add a 'Click and Drag' text to calendar to highlight new functionality 2023-10-15 17:31:39 +03:00
Aurora Lahtela 1f485cfbe5 Use semantic version for fabric 2023-10-15 17:19:06 +03:00
Aurora Lahtela fe59fa5a66 Fix 403 if user has no access to Query but has access to a Calendar and clicks it 2023-10-15 17:15:38 +03:00
Aurora Lahtela 499d82139a Fix some flaky tests due to NETWORK_CHANGED error 2023-10-15 13:25:58 +03:00
Aurora Lahtela aa06ac66f1 Obfuscate license key with jasypt
Affects issues:
- Close #3256
2023-10-15 12:52:28 +03:00
dependabot[bot] df1596b296
Bump sass from 1.69.0 to 1.69.3 in /Plan/react/dashboard (#3260)
Bumps [sass](https://github.com/sass/dart-sass) from 1.69.0 to 1.69.3.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.69.0...1.69.3)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-14 12:02:48 +03:00
dependabot[bot] a16b699155
Bump @testing-library/jest-dom in /Plan/react/dashboard (#3261)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.1.3 to 6.1.4.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.1.3...v6.1.4)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-14 12:02:30 +03:00
dependabot[bot] 1aa39c5b83
Bump mockitoVersion from 5.5.0 to 5.6.0 in /Plan (#3263)
Bumps `mockitoVersion` from 5.5.0 to 5.6.0.

Updates `org.mockito:mockito-core` from 5.5.0 to 5.6.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.5.0...v5.6.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.5.0 to 5.6.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.5.0...v5.6.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-14 12:02:18 +03:00
dependabot[bot] 5787cfb1ab
Bump jettyVersion from 11.0.16 to 11.0.17 in /Plan (#3264)
Bumps `jettyVersion` from 11.0.16 to 11.0.17.

Updates `org.eclipse.jetty:jetty-server` from 11.0.16 to 11.0.17
- [Release notes](https://github.com/eclipse/jetty.project/releases)
- [Commits](https://github.com/eclipse/jetty.project/compare/jetty-11.0.16...jetty-11.0.17)

Updates `org.eclipse.jetty:jetty-alpn-java-server` from 11.0.16 to 11.0.17

Updates `org.eclipse.jetty.http2:http2-server` from 11.0.16 to 11.0.17

---
updated-dependencies:
- dependency-name: org.eclipse.jetty:jetty-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty:jetty-alpn-java-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty.http2:http2-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-14 12:02:01 +03:00
dependabot[bot] a1f07e98e0
Bump swaggerVersion from 2.2.16 to 2.2.17 in /Plan (#3265)
Bumps `swaggerVersion` from 2.2.16 to 2.2.17.

Updates `io.swagger.core.v3:swagger-core-jakarta` from 2.2.16 to 2.2.17

Updates `io.swagger.core.v3:swagger-jaxrs2-jakarta` from 2.2.16 to 2.2.17

---
updated-dependencies:
- dependency-name: io.swagger.core.v3:swagger-core-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.swagger.core.v3:swagger-jaxrs2-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-14 12:01:09 +03:00
dependabot[bot] d7113d3cba
Bump io.swagger.core.v3.swagger-gradle-plugin in /Plan (#3266)
Bumps io.swagger.core.v3.swagger-gradle-plugin from 2.2.16 to 2.2.17.

---
updated-dependencies:
- dependency-name: io.swagger.core.v3.swagger-gradle-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-14 12:01:00 +03:00
Aurora Lahtela f9d28489c2 Update locale files with proxy webserver address language 2023-10-10 10:05:22 +03:00
Aurora Lahtela b92dfdb127 Fix webserver disabling always by accident 2023-10-10 10:03:50 +03:00
Aurora Lahtela 176c090f39 Bump Extension-Tebex to 2.4
Adds support for table formatting apis in DataExtension api

Affects issues:
- Fixed #3079
2023-10-10 09:53:03 +03:00
Aurora Lahtela 98188bbc96 Make Join Address Graph translate their legend properly 2023-10-10 09:28:20 +03:00
Aurora Lahtela 70cbab8f2d Make Activity Graphs translate their legend properly 2023-10-10 09:25:52 +03:00
Aurora Lahtela a74fb36b10 Fix Activity Index not showing up on Players Tables 2023-10-10 09:05:28 +03:00
Aurora Lahtela 549a26bcc8 Show any valid address if webserver is enabled (even game servers)
Affects issues:
- Fixed #3251
2023-10-10 08:40:09 +03:00
Aurora Lahtela d6065f497b Hide extra '0' when server has 0 player kills
The component shares rendering with Network as Numbers and player_kills is undefined on network.

Affects issues
- Fixed #3252
2023-10-10 08:24:49 +03:00
Aurora Lahtela 6a9a469adc Add link to query page from calendar query modal
Fixes to query page as well.
2023-10-08 14:35:39 +03:00
Aurora Lahtela 653ea6d481 Click & Drag on server calendar to query player data
Clicking and dragging on server calendar will select start and end time to use for
a Query Page View and Played Between filter.
This data is then displayed in a modal for easy viewing.

This allows viewing who was online on specific day(s), how much they played, and other information about the players.

Affects issues:
- Close #1531
2023-10-08 11:12:47 +03:00
Aurora Lahtela a937d64ca1 Add extra context to where it shows 'Unavailable'
Affects issues:
- Close #2819
2023-10-08 09:19:51 +03:00
Aurora Lahtela a419ef3c87 Fix dangerouslySetInnerHTML in ExtensionTable
Affects issues:
- Fixed #3250
2023-10-07 09:16:45 +03:00
AuroraLS3 a742e9fbf6 Update versions.txt 5.6 DEV build 2574 2023-10-07 06:11:27 +00:00
Aurora Lahtela 5a2bdaf6ba
2360/plugin versions (#3249)
* Add methods to gather plugin versions from servers
* Gathering and storage for plugin version history
* Test plugin gathering
* Test plugin metadata storage
* /v1/pluginHistory endpoint
* Plugin history tab
* Plugin history to performance tab
* Possibly fix ConfigChange.MovedValue being applied all the time
* Updated locale files
* Export pluginHistory for server page
* Add plugin history to network page
* Access control and improvements
* Remove pluginHistory from export since it now requires auth
* Fix access visibility tests
* Fix VelocitySensor during test

Affects issues:
- Close #2360
2023-10-07 08:39:00 +03:00
dependabot[bot] 61db13626b
Bump com.github.node-gradle.node from 7.0.0 to 7.0.1 in /Plan (#3244)
Bumps com.github.node-gradle.node from 7.0.0 to 7.0.1.

---
updated-dependencies:
- dependency-name: com.github.node-gradle.node
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-06 14:29:18 +03:00
jhqwqmc f398012c01
update locale_CN.yml (#3243)
* update locale_CN.yml

* Update Plan/common/src/main/java/com/djrapitops/plan/settings/locale/LangCode.java

---------

Co-authored-by: Aurora Lahtela <24460436+AuroraLS3@users.noreply.github.com>
2023-10-06 14:28:25 +03:00
dependabot[bot] 5f46e50171
Bump testContainersVersion from 1.19.0 to 1.19.1 in /Plan (#3245)
Bumps `testContainersVersion` from 1.19.0 to 1.19.1.

Updates `org.testcontainers:testcontainers` from 1.19.0 to 1.19.1
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.0...1.19.1)

Updates `org.testcontainers:junit-jupiter` from 1.19.0 to 1.19.1
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.0...1.19.1)

Updates `org.testcontainers:nginx` from 1.19.0 to 1.19.1
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.19.0...1.19.1)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.testcontainers:nginx
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-06 14:27:01 +03:00
dependabot[bot] 759ae80d94
Bump sass from 1.68.0 to 1.69.0 in /Plan/react/dashboard (#3248)
Bumps [sass](https://github.com/sass/dart-sass) from 1.68.0 to 1.69.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.68.0...1.69.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-06 14:26:26 +03:00
dependabot[bot] 8d0ef084c1
Bump org.sonarqube from 4.4.0.3356 to 4.4.1.3373 in /Plan (#3247)
Bumps org.sonarqube from 4.4.0.3356 to 4.4.1.3373.

---
updated-dependencies:
- dependency-name: org.sonarqube
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-06 14:26:04 +03:00
dependabot[bot] 4d16e87aa9
Bump daggerVersion from 2.48 to 2.48.1 in /Plan (#3246)
Bumps `daggerVersion` from 2.48 to 2.48.1.

Updates `com.google.dagger:dagger` from 2.48 to 2.48.1
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.48...dagger-2.48.1)

Updates `com.google.dagger:dagger-compiler` from 2.48 to 2.48.1
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.48...dagger-2.48.1)

---
updated-dependencies:
- dependency-name: com.google.dagger:dagger
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.google.dagger:dagger-compiler
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-06 14:25:55 +03:00
Aurora Lahtela 8eb4a54e6e Disable database player clean on game servers when proxy is installed
Affects issues:
- Close #3241
2023-10-06 08:39:24 +03:00
Dreeam ee1f337eff
Join Address gathering fix by Dreeam-qwq (#3242)
Fixes gathering for addresses without port on Bukkit based platforms
2023-10-03 21:02:30 +03:00
dependabot[bot] 956e712169
Bump axios from 1.5.0 to 1.5.1 in /Plan/react/dashboard (#3232)
Bumps [axios](https://github.com/axios/axios) from 1.5.0 to 1.5.1.
- [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.5.0...v1.5.1)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-01 16:56:19 +03:00
dependabot[bot] 31df5b10d2
Bump swagger-ui from 5.7.2 to 5.9.0 in /Plan/react/dashboard (#3238)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.7.2 to 5.9.0.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.7.2...v5.9.0)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-01 16:55:33 +03:00
dependabot[bot] 7ba3dd23f3
Bump daggerVersion from 2.47 to 2.48 in /Plan (#3187)
* Bump daggerVersion from 2.47 to 2.48 in /Plan

Bumps `daggerVersion` from 2.47 to 2.48.

Updates `com.google.dagger:dagger` from 2.47 to 2.48
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.47...dagger-2.48)

Updates `com.google.dagger:dagger-compiler` from 2.47 to 2.48
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.47...dagger-2.48)

---
updated-dependencies:
- dependency-name: com.google.dagger:dagger
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: com.google.dagger:dagger-compiler
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fix duplicate binding issue

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Aurora Lahtela <24460436+AuroraLS3@users.noreply.github.com>
2023-10-01 16:55:19 +03:00
dependabot[bot] fbddd7dd50
Bump react-router-dom from 6.15.0 to 6.16.0 in /Plan/react/dashboard (#3210)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.15.0 to 6.16.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.16.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-01 16:06:05 +03:00
dependabot[bot] 79e5ef4872
Bump react-bootstrap from 2.8.0 to 2.9.0 in /Plan/react/dashboard (#3231)
Bumps [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) from 2.8.0 to 2.9.0.
- [Release notes](https://github.com/react-bootstrap/react-bootstrap/releases)
- [Changelog](https://github.com/react-bootstrap/react-bootstrap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-bootstrap/react-bootstrap/compare/v2.8.0...v2.9.0)

---
updated-dependencies:
- dependency-name: react-bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-01 16:05:49 +03:00
dependabot[bot] 3b4906d135
Bump me.clip:placeholderapi from 2.11.3 to 2.11.4 in /Plan (#3233)
Bumps me.clip:placeholderapi from 2.11.3 to 2.11.4.

---
updated-dependencies:
- dependency-name: me.clip:placeholderapi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-01 16:05:31 +03:00
dependabot[bot] 0899124df4
Bump org.sonarqube from 4.3.1.3277 to 4.4.0.3356 in /Plan (#3234)
Bumps org.sonarqube from 4.3.1.3277 to 4.4.0.3356.

---
updated-dependencies:
- dependency-name: org.sonarqube
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-01 16:05:20 +03:00
AuroraLS3 5f179a9747 Update versions.txt 5.6 DEV build 2556 2023-10-01 05:42:56 +00:00
Aurora Lahtela 94184bf2a2 Fix false positive eslint line 2023-10-01 08:39:47 +03:00
Aurora Lahtela db9eb57299 Add setting to log untranslated lines for easier translation 2023-10-01 08:30:55 +03:00
Aurora Lahtela 0f4f23091e Update locale with new lines 2023-10-01 08:20:08 +03:00
Aurora Lahtela 876098edd7 Fix locale issues with Group permission help modal 2023-10-01 08:06:33 +03:00
Aurora Lahtela 71231018c3 Fix locale typo {{mn}} -> {{m}} 2023-10-01 07:32:16 +03:00
Aurora Lahtela 8b70decff8 Remove removed config variables from config.yml 2023-10-01 07:30:48 +03:00
Aurora Lahtela 159d3fe3f4 Fix compile warnings related to swagger annotations 2023-10-01 07:28:49 +03:00
Aurora Lahtela 01d6f4df28 Log errors to JS console from ErrorView to catch them in Unit tests 2023-09-30 17:11:03 +03:00
Aurora Lahtela 621e0b6f6e Add Network Calendar to Network Overview
Does the same as Server Calendar but for the whole network.

Affects issues:
- Close #3111
2023-09-30 17:10:18 +03:00
Aurora Lahtela 9886040de7 Translate more labels like 'Unknown' in the frontend 2023-09-29 09:11:50 +03:00
Aurora Lahtela 30a8da3c3b Reload custom locale when file is modified
Affects issues:
- Close #2311
2023-09-29 08:28:57 +03:00
Aurora Lahtela a1d5e4dc4f Bump Extension-ViaVersion to R1.5
Uses different query for networks

Affects issues:
- Fixed #3227
2023-09-27 17:13:09 +03:00
DonkerJumala 606af56d46
Update Japanese Locale (JA) by Jumala9163 (#3229) 2023-09-27 14:14:21 +03:00
Aurora Lahtela 17d3540e1a Fix ping method error spam 2023-09-25 08:16:57 +03:00
AuroraLS3 4c5ffca6f3 Update versions.txt 5.6 DEV build 2542 2023-09-24 07:55:29 +00:00
Aurora Lahtela ced66a1590 Fix incorrect usingProxyHttps check 2023-09-24 09:59:07 +03:00
Aurora Lahtela d6e90d3c01 Remove http cache from /v1/player endpoint
Affects issues:
- Fixed #3009
2023-09-24 09:53:32 +03:00
Aurora Lahtela 55c13d1875 Run scheduled tasks from other plugins using API in sequence
This prevents two transactions executing at the same time.

Affects issues:
- Fixed #3147
2023-09-24 09:40:48 +03:00
Aurora Lahtela 8bda0ff1c9 Bump Extension-Litebans to 0.4.1-R1.5
Order query results by time instead of id

Affects issues:
- Possibly fixed #3041
2023-09-24 09:23:51 +03:00
Aurora Lahtela bd5dcb7512 Don't fall back to relative address when using proxy-https
Affects issues:
- Fixed #3032
2023-09-24 09:14:49 +03:00
Aurora Lahtela 9bf7d65137 Bump Extension-Lands to 6.35.0-R1.2
Updates the Lands API

Affects issues:
- Fixed #3097
2023-09-24 09:09:35 +03:00
Aurora Lahtela fa2c16526f Disable X-Forwarded-For warning temporarily
Affects issues:
- Close #2967
2023-09-24 09:00:45 +03:00
Aurora Lahtela 6dada8edf9 Hide navigation items that need authentication to work 2023-09-24 08:59:42 +03:00
Aurora Lahtela 2bc3f29525 Add support for Player#getPing in Spigot
Affects issues:
- Fixed #3140
2023-09-24 08:51:35 +03:00
Aurora Lahtela 9fce4926ad Fix off by one error in top_ placeholders
Affects issues:
- Fixed #3174
2023-09-24 08:45:57 +03:00
Aurora Lahtela f67a02775f Fix deprecation smells 2023-09-24 08:39:01 +03:00
Aurora Lahtela 630247d884
Update README.md
Remove the anchor on the image
2023-09-23 22:25:26 +03:00
Aurora Lahtela 01d904c7d1
2905/remove old web files (#3225)
* Removed Plugin.Use_Legacy_Frontend feature flag
* Remove version modal html generation in Java
* Remove contributor list html generation in Java
* Remove more html generation in Java
* Delete old web file bundle
* Removed locale html/js translation from backend
* Move Html#swapColorsToSpan to the React side
* Reimplement datatables and backend for preferences
* Load preferences from backend
* Usability fixes to the players table
* Delete WebAssetVersionCheckTask
* Add new locale to locale files
* Export defaultPreferences as json on react export

Affects issues:
- Close #2905
2023-09-23 22:24:34 +03:00
dependabot[bot] 2fc4ee7ac1
Bump bootstrap from 5.3.1 to 5.3.2 in /Plan/react/dashboard (#3213)
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 5.3.1 to 5.3.2.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v5.3.1...v5.3.2)

---
updated-dependencies:
- dependency-name: bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-23 12:57:35 +03:00
dependabot[bot] 630e672963
Bump org.apache.commons:commons-compress from 1.23.0 to 1.24.0 in /Plan (#3215)
Bumps org.apache.commons:commons-compress from 1.23.0 to 1.24.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-compress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-22 16:53:46 +03:00
dependabot[bot] c0ea0b0d62
Bump org.spongepowered.gradle.plugin from 2.1.1 to 2.2.0 in /Plan (#3216)
Bumps [org.spongepowered.gradle.plugin](https://github.com/SpongePowered/SpongeGradle) from 2.1.1 to 2.2.0.
- [Release notes](https://github.com/SpongePowered/SpongeGradle/releases)
- [Commits](https://github.com/SpongePowered/SpongeGradle/compare/v2.1.1...v2.2.0)

---
updated-dependencies:
- dependency-name: org.spongepowered.gradle.plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-22 16:53:31 +03:00
dependabot[bot] 29425a602f
Bump i18next-localstorage-backend in /Plan/react/dashboard (#3222)
Bumps [i18next-localstorage-backend](https://github.com/i18next/i18next-localStorage-backend) from 4.1.1 to 4.2.0.
- [Changelog](https://github.com/i18next/i18next-localstorage-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-localStorage-backend/compare/v4.1.1...v4.2.0)

---
updated-dependencies:
- dependency-name: i18next-localstorage-backend
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-22 16:46:01 +03:00
dependabot[bot] 0a9bf0fd82
Bump @testing-library/user-event in /Plan/react/dashboard (#3218)
Bumps [@testing-library/user-event](https://github.com/testing-library/user-event) from 14.4.3 to 14.5.1.
- [Release notes](https://github.com/testing-library/user-event/releases)
- [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/user-event/compare/v14.4.3...v14.5.1)

---
updated-dependencies:
- dependency-name: "@testing-library/user-event"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-22 16:38:57 +03:00
dependabot[bot] 5027d4290c
Bump i18next-chained-backend in /Plan/react/dashboard (#3219)
Bumps [i18next-chained-backend](https://github.com/i18next/i18next-chained-backend) from 4.4.0 to 4.5.0.
- [Changelog](https://github.com/i18next/i18next-chained-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-chained-backend/compare/v4.4.0...v4.5.0)

---
updated-dependencies:
- dependency-name: i18next-chained-backend
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-22 16:38:41 +03:00
dependabot[bot] 788549b284
Bump sass from 1.66.1 to 1.68.0 in /Plan/react/dashboard (#3220)
Bumps [sass](https://github.com/sass/dart-sass) from 1.66.1 to 1.68.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.66.1...1.68.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-22 16:38:33 +03:00
dependabot[bot] 658dc1049b
Bump swagger-ui from 5.6.2 to 5.7.2 in /Plan/react/dashboard (#3221)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.6.2 to 5.7.2.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.6.2...v5.7.2)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-22 16:38:22 +03:00
dependabot[bot] 18b0c16400
Bump swaggerVersion from 2.2.15 to 2.2.16 in /Plan (#3224)
Bumps `swaggerVersion` from 2.2.15 to 2.2.16.

Updates `io.swagger.core.v3:swagger-core-jakarta` from 2.2.15 to 2.2.16

Updates `io.swagger.core.v3:swagger-jaxrs2-jakarta` from 2.2.15 to 2.2.16

---
updated-dependencies:
- dependency-name: io.swagger.core.v3:swagger-core-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: io.swagger.core.v3:swagger-jaxrs2-jakarta
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-22 16:38:08 +03:00
dependabot[bot] 90ea6511a4
Bump io.swagger.core.v3.swagger-gradle-plugin in /Plan (#3223)
Bumps io.swagger.core.v3.swagger-gradle-plugin from 2.2.15 to 2.2.16.

---
updated-dependencies:
- dependency-name: io.swagger.core.v3.swagger-gradle-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-22 16:37:58 +03:00
Antti Koponen 366faaba45
Fabric 1.20.2 by Kopo (#3217)
* Upgrade Gradle to 8.3

* Fabric 1.20.2

* Fix some Gradle warnings
2023-09-22 16:37:31 +03:00
dependabot[bot] 2313b0b257
Bump i18next from 23.5.0 to 23.5.1 in /Plan/react/dashboard (#3204)
Bumps [i18next](https://github.com/i18next/i18next) from 23.5.0 to 23.5.1.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.5.0...v23.5.1)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-10 10:32:30 +03:00
dependabot[bot] 3b6380d0b1
Bump org.seleniumhq.selenium:selenium-java in /Plan (#3193)
Bumps [org.seleniumhq.selenium:selenium-java](https://github.com/SeleniumHQ/selenium) from 4.12.0 to 4.12.1.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Commits](https://github.com/SeleniumHQ/selenium/commits)

---
updated-dependencies:
- dependency-name: org.seleniumhq.selenium:selenium-java
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-10 09:15:44 +03:00
dependabot[bot] 0e9606be41
Bump org.sonarqube from 4.3.0.3225 to 4.3.1.3277 in /Plan (#3194)
Bumps org.sonarqube from 4.3.0.3225 to 4.3.1.3277.

---
updated-dependencies:
- dependency-name: org.sonarqube
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-10 09:15:34 +03:00
dependabot[bot] 28aba62694
Bump slf4jVersion from 2.0.7 to 2.0.9 in /Plan (#3195)
Bumps `slf4jVersion` from 2.0.7 to 2.0.9.

Updates `org.slf4j:slf4j-nop` from 2.0.7 to 2.0.9

Updates `org.slf4j:slf4j-api` from 2.0.7 to 2.0.9

---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-nop
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.slf4j:slf4j-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-10 09:15:15 +03:00
dependabot[bot] 64beaf1d79
Bump swagger-ui from 5.4.2 to 5.6.2 in /Plan/react/dashboard (#3198)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.4.2 to 5.6.2.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.4.2...v5.6.2)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-10 09:15:06 +03:00
dependabot[bot] e778e6448f
Bump @testing-library/jest-dom in /Plan/react/dashboard (#3199)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.1.2 to 6.1.3.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.1.2...v6.1.3)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-10 09:15:00 +03:00
dependabot[bot] 926396ebb7
Bump i18next-http-backend from 2.2.1 to 2.2.2 in /Plan/react/dashboard (#3200)
Bumps [i18next-http-backend](https://github.com/i18next/i18next-http-backend) from 2.2.1 to 2.2.2.
- [Changelog](https://github.com/i18next/i18next-http-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-http-backend/compare/v2.2.1...v2.2.2)

---
updated-dependencies:
- dependency-name: i18next-http-backend
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-10 09:14:52 +03:00
dependabot[bot] aedaa90de6
Bump react-i18next from 13.2.1 to 13.2.2 in /Plan/react/dashboard (#3201)
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 13.2.1 to 13.2.2.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v13.2.1...v13.2.2)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-10 09:14:43 +03:00
dependabot[bot] 5a64a69d1d
Bump i18next from 23.4.6 to 23.5.0 in /Plan/react/dashboard (#3202)
Bumps [i18next](https://github.com/i18next/i18next) from 23.4.6 to 23.5.0.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.4.6...v23.5.0)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-10 09:14:35 +03:00
Aurora Lahtela b40ba82195
Add Ukranian locale_UK.yml by xlanyleeet (#3203)
* Add locale_UK by xlanyleeet
* Update LangCode.java
* Update Contributors.java
2023-09-10 09:11:05 +03:00
dependabot[bot] 800d7b33a2
Bump org.mariadb.jdbc:mariadb-java-client from 3.1.4 to 3.2.0 in /Plan (#3190)
Bumps [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j) from 3.1.4 to 3.2.0.
- [Release notes](https://github.com/mariadb-corporation/mariadb-connector-j/releases)
- [Changelog](https://github.com/mariadb-corporation/mariadb-connector-j/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.1.4...3.2.0)

---
updated-dependencies:
- dependency-name: org.mariadb.jdbc:mariadb-java-client
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-01 08:27:35 +03:00
dependabot[bot] 3e0209d333
Bump react-i18next from 13.2.0 to 13.2.1 in /Plan/react/dashboard (#3185)
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 13.2.0 to 13.2.1.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v13.2.0...v13.2.1)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-01 08:27:00 +03:00
dependabot[bot] dde7476fa2
Bump org.seleniumhq.selenium:selenium-java in /Plan (#3189)
Bumps [org.seleniumhq.selenium:selenium-java](https://github.com/SeleniumHQ/selenium) from 4.11.0 to 4.12.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.11.0...selenium-4.12.0)

---
updated-dependencies:
- dependency-name: org.seleniumhq.selenium:selenium-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-01 08:26:50 +03:00
dependabot[bot] 641a600021
Bump jettyVersion from 11.0.15 to 11.0.16 in /Plan (#3191)
Bumps `jettyVersion` from 11.0.15 to 11.0.16.

Updates `org.eclipse.jetty:jetty-server` from 11.0.15 to 11.0.16
- [Release notes](https://github.com/eclipse/jetty.project/releases)
- [Commits](https://github.com/eclipse/jetty.project/compare/jetty-11.0.15...jetty-11.0.16)

Updates `org.eclipse.jetty:jetty-alpn-java-server` from 11.0.15 to 11.0.16

Updates `org.eclipse.jetty.http2:http2-server` from 11.0.15 to 11.0.16

---
updated-dependencies:
- dependency-name: org.eclipse.jetty:jetty-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty:jetty-alpn-java-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.eclipse.jetty.http2:http2-server
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-01 08:26:36 +03:00
dependabot[bot] 6ff0462366
Bump axios from 1.4.0 to 1.5.0 in /Plan/react/dashboard (#3186)
Bumps [axios](https://github.com/axios/axios) from 1.4.0 to 1.5.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.5.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-01 08:26:23 +03:00
dependabot[bot] b3dc121f5b
Bump i18next from 23.4.5 to 23.4.6 in /Plan/react/dashboard (#3183)
Bumps [i18next](https://github.com/i18next/i18next) from 23.4.5 to 23.4.6.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.4.5...v23.4.6)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-25 18:22:13 +03:00
dependabot[bot] 5378c83f5e
Bump org.xerial:sqlite-jdbc from 3.41.2.1 to 3.42.0.1 in /Plan (#3184)
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.41.2.1 to 3.42.0.1.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.41.2.1...3.42.0.1)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-25 18:22:05 +03:00
dependabot[bot] c607684e9b
Bump mockitoVersion from 5.4.0 to 5.5.0 in /Plan (#3177)
Bumps `mockitoVersion` from 5.4.0 to 5.5.0.

Updates `org.mockito:mockito-core` from 5.4.0 to 5.5.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.4.0...v5.5.0)

Updates `org.mockito:mockito-junit-jupiter` from 5.4.0 to 5.5.0
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.4.0...v5.5.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.mockito:mockito-junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-25 17:57:11 +03:00
dependabot[bot] 74dc826bb7
Bump @testing-library/jest-dom in /Plan/react/dashboard (#3181)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.0.0 to 6.1.2.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.0.0...v6.1.2)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-25 17:57:00 +03:00
dependabot[bot] 03a69e7ef3
Bump sass from 1.66.0 to 1.66.1 in /Plan/react/dashboard (#3180)
Bumps [sass](https://github.com/sass/dart-sass) from 1.66.0 to 1.66.1.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.66.0...1.66.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-25 17:56:50 +03:00
dependabot[bot] 246aec7df0
Bump i18next from 23.4.4 to 23.4.5 in /Plan/react/dashboard (#3179)
Bumps [i18next](https://github.com/i18next/i18next) from 23.4.4 to 23.4.5.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.4.4...v23.4.5)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-25 17:56:23 +03:00
dependabot[bot] b176e0ea63
Bump react-i18next from 13.1.2 to 13.2.0 in /Plan/react/dashboard (#3182)
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 13.1.2 to 13.2.0.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v13.1.2...v13.2.0)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-25 17:56:13 +03:00
dependabot[bot] b7946df958
Bump testContainersVersion from 1.18.3 to 1.19.0 in /Plan (#3178)
Bumps `testContainersVersion` from 1.18.3 to 1.19.0.

Updates `org.testcontainers:testcontainers` from 1.18.3 to 1.19.0
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.18.3...1.19.0)

Updates `org.testcontainers:junit-jupiter` from 1.18.3 to 1.19.0
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.18.3...1.19.0)

Updates `org.testcontainers:nginx` from 1.18.3 to 1.19.0
- [Release notes](https://github.com/testcontainers/testcontainers-java/releases)
- [Changelog](https://github.com/testcontainers/testcontainers-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testcontainers/testcontainers-java/compare/1.18.3...1.19.0)

---
updated-dependencies:
- dependency-name: org.testcontainers:testcontainers
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.testcontainers:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: org.testcontainers:nginx
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-25 17:55:57 +03:00
Aurora Lahtela d86dfb7bcc Fix join address truncation error on backup 2023-08-23 19:48:04 +03:00
dependabot[bot] d8139ccc05
Bump @testing-library/jest-dom in /Plan/react/dashboard (#3172)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 5.17.0 to 6.0.0.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v5.17.0...v6.0.0)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-20 15:19:09 +03:00
dependabot[bot] 2f0c865111
Bump swagger-ui from 5.3.1 to 5.4.2 in /Plan/react/dashboard (#3171)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.3.1 to 5.4.2.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.3.1...v5.4.2)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-20 15:18:54 +03:00
dependabot[bot] c8b0ca69e9
Bump sass from 1.65.1 to 1.66.0 in /Plan/react/dashboard (#3170)
Bumps [sass](https://github.com/sass/dart-sass) from 1.65.1 to 1.66.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.65.1...1.66.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-20 15:18:39 +03:00
dependabot[bot] 18b330db69
Bump react-i18next from 13.1.1 to 13.1.2 in /Plan/react/dashboard (#3169)
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 13.1.1 to 13.1.2.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v13.1.1...v13.1.2)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-20 15:18:32 +03:00
dependabot[bot] db12af63d5
Bump com.github.node-gradle.node from 5.0.0 to 7.0.0 in /Plan (#3168)
Bumps com.github.node-gradle.node from 5.0.0 to 7.0.0.

---
updated-dependencies:
- dependency-name: com.github.node-gradle.node
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-20 15:18:23 +03:00
Aurora Lahtela 5061439d14
1623/access control (#3173)
* Add web authorization permission based on groups
  * Access and parts of website are limited by permissions
* Add group management in /manage page
  * Higher level permissions grant lower level permissions similar to Sponge
* Add command /plan setgroup, which uses plan.setgroup.other permission
* Add command /plan groups, which uses plan.setgroup.other permission
* Add more navigation based on permissions
* API modifications
  * User#hasPermission now returns true if user has parent permission in the tree
  * ResolverService#registerPermissions and ResolverService#registerPermission methods for adding new permissions
* Update locale with new lines
* Various unrelated fixes to CSS and code

Affects issues:
- Close #1623
2023-08-20 11:56:13 +03:00
dependabot[bot] 4884cf28c2
Bump @fortawesome/free-brands-svg-icons in /Plan/react/dashboard (#3149)
Bumps [@fortawesome/free-brands-svg-icons](https://github.com/FortAwesome/Font-Awesome) from 6.4.0 to 6.4.2.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.0...6.4.2)

---
updated-dependencies:
- dependency-name: "@fortawesome/free-brands-svg-icons"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 17:11:31 +03:00
dependabot[bot] 0511762320
Bump @fortawesome/fontawesome-free in /Plan/react/dashboard (#3153)
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 6.4.0 to 6.4.2.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.0...6.4.2)

---
updated-dependencies:
- dependency-name: "@fortawesome/fontawesome-free"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 17:04:53 +03:00
dependabot[bot] 3906a55c73
Bump @fortawesome/free-regular-svg-icons in /Plan/react/dashboard (#3150)
Bumps [@fortawesome/free-regular-svg-icons](https://github.com/FortAwesome/Font-Awesome) from 6.4.0 to 6.4.2.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.0...6.4.2)

---
updated-dependencies:
- dependency-name: "@fortawesome/free-regular-svg-icons"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 17:04:40 +03:00
dependabot[bot] 3b609a7fbf
Bump @fortawesome/free-solid-svg-icons in /Plan/react/dashboard (#3157)
Bumps [@fortawesome/free-solid-svg-icons](https://github.com/FortAwesome/Font-Awesome) from 6.4.0 to 6.4.2.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.0...6.4.2)

---
updated-dependencies:
- dependency-name: "@fortawesome/free-solid-svg-icons"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 16:44:32 +03:00
dependabot[bot] 3b620f5fae
Bump @fortawesome/fontawesome-svg-core in /Plan/react/dashboard (#3152)
Bumps [@fortawesome/fontawesome-svg-core](https://github.com/FortAwesome/Font-Awesome) from 6.4.0 to 6.4.2.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.4.0...6.4.2)

---
updated-dependencies:
- dependency-name: "@fortawesome/fontawesome-svg-core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 16:43:54 +03:00
dependabot[bot] 22956caf85
Bump org.seleniumhq.selenium:selenium-java in /Plan (#3159)
Bumps [org.seleniumhq.selenium:selenium-java](https://github.com/SeleniumHQ/selenium) from 4.10.0 to 4.11.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.10.0...selenium-4.11.0)

---
updated-dependencies:
- dependency-name: org.seleniumhq.selenium:selenium-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 16:43:44 +03:00
dependabot[bot] caaa27a1c1
Bump swagger-ui from 5.2.0 to 5.3.1 in /Plan/react/dashboard (#3151)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.2.0 to 5.3.1.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.2.0...v5.3.1)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 16:04:53 +03:00
dependabot[bot] 34e897c69f
Bump datatables.net-bs5 from 1.13.5 to 1.13.6 in /Plan/react/dashboard (#3155)
Bumps [datatables.net-bs5](https://github.com/DataTables/Dist-DataTables-Bootstrap5) from 1.13.5 to 1.13.6.
- [Release notes](https://github.com/DataTables/Dist-DataTables-Bootstrap5/releases)
- [Commits](https://github.com/DataTables/Dist-DataTables-Bootstrap5/compare/1.13.5...1.13.6)

---
updated-dependencies:
- dependency-name: datatables.net-bs5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Aurora Lahtela <24460436+AuroraLS3@users.noreply.github.com>
2023-08-11 16:04:43 +03:00
dependabot[bot] 72fd48ceab
Bump datatables.net from 1.13.5 to 1.13.6 in /Plan/react/dashboard (#3154)
Bumps [datatables.net](https://github.com/DataTables/Dist-DataTables) from 1.13.5 to 1.13.6.
- [Commits](https://github.com/DataTables/Dist-DataTables/compare/1.13.5...1.13.6)

---
updated-dependencies:
- dependency-name: datatables.net
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 16:04:03 +03:00
dependabot[bot] 5e1411e6d6
Bump com.github.ben-manes.caffeine:caffeine in /Plan (#3161)
Bumps [com.github.ben-manes.caffeine:caffeine](https://github.com/ben-manes/caffeine) from v3.1.7 to 3.1.8.
- [Release notes](https://github.com/ben-manes/caffeine/releases)
- [Commits](https://github.com/ben-manes/caffeine/compare/v3.1.7...v3.1.8)

---
updated-dependencies:
- dependency-name: com.github.ben-manes.caffeine:caffeine
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 09:17:43 +03:00
dependabot[bot] 2c69a0764c
Bump react-i18next from 13.0.2 to 13.1.1 in /Plan/react/dashboard (#3163)
Bumps [react-i18next](https://github.com/i18next/react-i18next) from 13.0.2 to 13.1.1.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v13.0.2...v13.1.1)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 09:17:13 +03:00
dependabot[bot] f87344050a
Bump sass from 1.64.1 to 1.65.1 in /Plan/react/dashboard (#3164)
Bumps [sass](https://github.com/sass/dart-sass) from 1.64.1 to 1.65.1.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.64.1...1.65.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 09:17:03 +03:00
dependabot[bot] eb866e2181
Bump react-router-dom from 6.14.2 to 6.15.0 in /Plan/react/dashboard (#3165)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.14.2 to 6.15.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.15.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 09:16:51 +03:00
dependabot[bot] 0512a0d31a
Bump i18next from 23.4.1 to 23.4.4 in /Plan/react/dashboard (#3166)
Bumps [i18next](https://github.com/i18next/i18next) from 23.4.1 to 23.4.4.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.4.1...v23.4.4)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-11 09:15:54 +03:00
dependabot[bot] 5f2e1e8eda
Bump i18next from 23.2.11 to 23.4.1 in /Plan/react/dashboard (#3143)
Bumps [i18next](https://github.com/i18next/i18next) from 23.2.11 to 23.4.1.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.2.11...v23.4.1)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-08-03 16:30:40 +03:00
dependabot[bot] a8025a18c0
Bump com.maxmind.geoip2:geoip2 from 4.0.1 to 4.1.0 in /Plan (#3145)
Bumps [com.maxmind.geoip2:geoip2](https://github.com/maxmind/GeoIP2-java) from 4.0.1 to 4.1.0.
- [Release notes](https://github.com/maxmind/GeoIP2-java/releases)
- [Changelog](https://github.com/maxmind/GeoIP2-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/maxmind/GeoIP2-java/compare/v4.0.1...v4.1.0)

---
updated-dependencies:
- dependency-name: com.maxmind.geoip2:geoip2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-31 18:58:00 +03:00
dependabot[bot] b473961b59
Bump com.github.ben-manes.caffeine:caffeine in /Plan (#3135)
Bumps [com.github.ben-manes.caffeine:caffeine](https://github.com/ben-manes/caffeine) from 3.1.6 to v3.1.7.
- [Release notes](https://github.com/ben-manes/caffeine/releases)
- [Commits](https://github.com/ben-manes/caffeine/compare/v3.1.6...v3.1.7)

---
updated-dependencies:
- dependency-name: com.github.ben-manes.caffeine:caffeine
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-31 18:57:44 +03:00
dependabot[bot] 1b954e65f3
Bump org.junit.jupiter:junit-jupiter from 5.9.3 to 5.10.0 in /Plan (#3133)
Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.9.3 to 5.10.0.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.3...r5.10.0)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-31 18:57:28 +03:00
Toxi 40383d1d20
[Sponge] Dependency version issue (#3146)
* [Sponge] Adjust dependency versions

This may not be needed on anything besides luckperms

* Add self to contributors
2023-07-30 09:28:46 +03:00
dependabot[bot] e470d63a17
Bump me.lucko:fabric-permissions-api in /Plan (#3134)
Bumps me.lucko:fabric-permissions-api from 0.2-SNAPSHOT to 0.3-SNAPSHOT.

---
updated-dependencies:
- dependency-name: me.lucko:fabric-permissions-api
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-30 08:49:39 +03:00
dependabot[bot] f0ef3f6589
Bump sass from 1.64.0 to 1.64.1 in /Plan/react/dashboard (#3139)
Bumps [sass](https://github.com/sass/dart-sass) from 1.64.0 to 1.64.1.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.64.0...1.64.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-30 08:48:59 +03:00
dependabot[bot] b06f0d4119
Bump i18next from 23.2.11 to 23.3.0 in /Plan/react/dashboard (#3136)
Bumps [i18next](https://github.com/i18next/i18next) from 23.2.11 to 23.3.0.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.2.11...v23.3.0)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-30 08:47:44 +03:00
dependabot[bot] 944ebc8dcf
Bump bootstrap from 5.3.0 to 5.3.1 in /Plan/react/dashboard (#3138)
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v5.3.0...v5.3.1)

---
updated-dependencies:
- dependency-name: bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-30 08:47:02 +03:00
dependabot[bot] 21b8702764
Bump swagger-ui from 5.1.3 to 5.2.0 in /Plan/react/dashboard (#3137)
Bumps [swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.1.3 to 5.2.0.
- [Release notes](https://github.com/swagger-api/swagger-ui/releases)
- [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc)
- [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.1.3...v5.2.0)

---
updated-dependencies:
- dependency-name: swagger-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-30 08:46:47 +03:00
Aurora Lahtela 239e97ca47
Fix selenium webdriver action 2023-07-28 19:31:38 +03:00
solt-27 acd9ad39f3
Update to JA locale by yu_solt (#3131) 2023-07-24 19:42:43 +03:00
AuroraLS3 c3d5b20a89 Update versions.txt 5.5 build 2461 2023-07-21 16:54:09 +00:00
752 changed files with 20696 additions and 43109 deletions

View File

@ -23,30 +23,16 @@ jobs:
steps:
- name: 📥 Checkout git repository
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: ☕ Setup JDK
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
distribution: 'adopt'
java-version: '17'
- name: 🚦 Setup Selenium Webdriver
uses: nanasess/setup-chromedriver@v1
- name: 🚦 Setup Selenium Webdriver settings
run: |
export DISPLAY=:99
chromedriver --url-base=/wd/hub &
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 &
- name: 📶 Verify MariaDB connection
env:
PORT: ${{ job.services.mariadb.ports[3306] }}
run: |
while ! mysqladmin ping -h"127.0.0.1" -P"$PORT" --silent; do
sleep 1
done
java-version: '21'
- name: 💼 Load Gradle Cache
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
@ -68,15 +54,29 @@ jobs:
echo "versionString=$(cat build/versions/jar.txt)" >> $GITHUB_ENV
echo "artifactPath=$(pwd)/builds" >> $GITHUB_ENV
- name: 📤 Upload Plan.jar
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: Plan-${{ env.versionString }}-${{ env.git_hash }}.jar
path: ${{ env.artifactPath }}/Plan-${{ env.snapshotVersion }}.jar
- name: 📤 Upload PlanFabric.jar
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: PlanFabric-${{ env.versionString }}-${{ env.git_hash }}.jar
path: ${{ env.artifactPath }}/PlanFabric-${{ env.snapshotVersion }}.jar
- name: 🚦 Setup Selenium Webdriver
uses: nanasess/setup-chromedriver@v2
- name: 🚦 Setup Selenium Webdriver settings
run: |
export DISPLAY=:99
chromedriver --url-base=/wd/hub &
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 &
- name: 📶 Verify MariaDB connection
env:
PORT: ${{ job.services.mariadb.ports[3306] }}
run: |
while ! mysqladmin ping -h"127.0.0.1" -P"$PORT" --silent; do
sleep 1
done
- name: 🩺 Test
env:
MYSQL_DB: test

View File

@ -8,7 +8,7 @@ compileJava {
options.release = 8
}
ext.apiVersion = '5.5-R0.1'
ext.apiVersion = '5.6-R0.1'
publishing {
repositories {

View File

@ -90,7 +90,11 @@ enum Capability {
* {@link com.djrapitops.plan.delivery.web.ResourceService#addJavascriptToResource(String, String, ResourceService.Position, String, String)}
* {@link com.djrapitops.plan.delivery.web.ResourceService#addStyleToResource(String, String, ResourceService.Position, String, String)}
*/
PAGE_EXTENSION_RESOURCES_REGISTER_DIRECT_CUSTOMIZATION;
PAGE_EXTENSION_RESOURCES_REGISTER_DIRECT_CUSTOMIZATION,
/**
* {@link com.djrapitops.plan.delivery.web.ResolverService#registerPermissions(String...)}
*/
PAGE_EXTENSION_USER_PERMISSIONS;
static Optional<Capability> getByName(String name) {
if (name == null) {

View File

@ -64,6 +64,9 @@ public interface CapabilityService {
return Capability.getByName(capabilityName).isPresent();
}
/**
* Singleton holder for listeners.
*/
class ListHolder {
static final AtomicReference<List<Consumer<Boolean>>> enableListeners = new AtomicReference<>(
new CopyOnWriteArrayList<>()

View File

@ -89,7 +89,7 @@ public interface ComponentService {
* Converts the given input into a {@link Component}.
* Input example {@code §ctext}.
*
* @param legacy the input legacy
* @param legacy the input legacy
* @param character the character to use as the color prefix, usually {@code §}.
* @return a {@link Component}
* @see #fromLegacy(String)
@ -115,7 +115,7 @@ public interface ComponentService {
* Input example: {@code &#rrggbbtext}.
*
* @param adventureLegacy the input adventure legacy
* @param character the character to use as the color prefix, usually {@code &}.
* @param character the character to use as the color prefix, usually {@code &}.
* @return a {@link Component}
* @see #fromAdventureLegacy(String)
* @see Component#SECTION
@ -139,7 +139,7 @@ public interface ComponentService {
* Input example: {@code §x§r§r§g§g§b§btext}.
*
* @param bungeeLegacy the input bungee legacy
* @param character the character to use as the color prefix, usually {@code §}.
* @param character the character to use as the color prefix, usually {@code §}.
* @return a {@link Component}
* @see Component#SECTION
* @see Component#AMPERSAND
@ -164,6 +164,9 @@ public interface ComponentService {
*/
Component fromJson(String json);
/**
* Singleton holder for ComponentService.
*/
class Holder {
static final AtomicReference<ComponentService> service = new AtomicReference<>();

View File

@ -17,9 +17,11 @@
package com.djrapitops.plan.delivery.web;
import com.djrapitops.plan.delivery.web.resolver.Resolver;
import com.djrapitops.plan.delivery.web.resolver.request.Request;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Pattern;
@ -63,6 +65,26 @@ public interface ResolverService {
*/
void registerResolverForMatches(String pluginName, Pattern pattern, Resolver resolver);
/**
* Register a new permission that you are using in your {@link Resolver#canAccess(Request)} method.
* <p>
* The permissions are not given to any users by default, and need to be given by admin manually.
*
* @param webPermissions Permission strings, higher level permissions grant lower level automatically - eg. page.foo also grants page.foo.bar
* @return CompletableFuture that tells when the permissions have been stored.
*/
CompletableFuture<Void> registerPermissions(String... webPermissions);
/**
* Register a new permission that you are using in your {@link Resolver#canAccess(Request)} method.
* <p>
* The permission is granted to any groups with {@code whenHasPermission} parameter.
*
* @param webPermission Permission string, higher level permissions grant lower level automatically - eg. page.foo also grants page.foo.bar
* @param whenHasPermission Permission that a group already has that this permission should be granted to - eg. page.network.overview.numbers
*/
void registerPermission(String webPermission, String whenHasPermission);
/**
* Obtain a {@link Resolver} for a target.
* <p>

View File

@ -1,6 +1,5 @@
/**
* PageExtension API for extending the webserver and the website.
*
* <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5-PageExtension-API">Documentation</a>
*/
package com.djrapitops.plan.delivery.web;

View File

@ -46,6 +46,11 @@ public final class CompositeResolver implements Resolver {
this.resolvers = new ArrayList<>();
}
/**
* Create a new builder for a .
*
* @return a builder.
*/
public static CompositeResolver.Builder builder() {
return new Builder();
}
@ -100,6 +105,9 @@ public final class CompositeResolver implements Resolver {
return getResolver(forThis.getPath()).map(resolver -> resolver.requiresAuth(forThis)).orElse(true);
}
/**
* Builder class for {@link CompositeResolver}.
*/
public static class Builder {
private final CompositeResolver composite;
@ -132,6 +140,11 @@ public final class CompositeResolver implements Resolver {
return this;
}
/**
* Build the final result after adding all resolvers.
*
* @return The {@link CompositeResolver}
*/
public CompositeResolver build() {
return composite;
}

View File

@ -22,11 +22,20 @@ import java.util.Optional;
import java.util.function.Function;
import java.util.function.Predicate;
/**
* Utility class for constructing a {@link Resolver} with Functional Interfaces.
*/
public class FunctionalResolverWrapper implements Resolver {
private final Function<Request, Optional<Response>> resolver;
private final Predicate<Request> accessCheck;
/**
* Default constructor.
*
* @param resolver Function that solves the {@link Request} into an Optional {@link Response}.
* @param accessCheck Predicate that checks if {@link Request} is allowed or if 403 Forbidden should be given.
*/
public FunctionalResolverWrapper(Function<Request, Optional<Response>> resolver, Predicate<Request> accessCheck) {
this.resolver = resolver;
this.accessCheck = accessCheck;

View File

@ -19,7 +19,9 @@ package com.djrapitops.plan.delivery.web.resolver;
import com.djrapitops.plan.delivery.web.resolver.request.Request;
import com.djrapitops.plan.delivery.web.resolver.request.WebUser;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
/**
* Interface for resolving requests of Plan webserver.
@ -40,6 +42,25 @@ public interface Resolver {
*/
boolean canAccess(Request request);
/**
* Override this to tell Plan what web permissions this endpoint uses.
* <p>
* This allows:
* <ul>
* <li>Plan to store these permissions in the permission list</li>
* <li>Users can grant/deny the permission for a group</li>
* <li>Plan can show what endpoints specific permission gives access to</li>
* </ul>
* <p>
* Requires PAGE_EXTENSION_USER_PERMISSIONS capability
*
* @return Set of permissions eg. [plugin.custom.permission, plugin.custom.permission.child.node]
* @see com.djrapitops.plan.capability.CapabilityService for Capability checks
*/
default Set<String> usedWebPermissions() {
return new HashSet<>();
}
/**
* Implement request resolution.
*
@ -51,10 +72,21 @@ public interface Resolver {
*/
Optional<Response> resolve(Request request);
/**
* Creates a new {@link ResponseBuilder} for a {@link Response}.
*
* @return a new builder.
*/
default ResponseBuilder newResponseBuilder() {
return Response.builder();
}
/**
* Used to check if the resolver requires authentication to be used.
*
* @param request Incoming request that you can use to figure out if authentication is required.
* @return true if you want 401 to be given when user has not logged in.
*/
default boolean requiresAuth(Request request) {
return true;
}

View File

@ -33,7 +33,7 @@ public class ResponseBuilder {
/**
* Set MIME Type of the Response.
*
* @param mimeType MIME type of the Response https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
* @param mimeType MIME type of the Response <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types">Documentation</a>
* @return this builder.
* @see MimeType for common MIME types.
*/
@ -46,7 +46,7 @@ public class ResponseBuilder {
* <p>
* Default status code is 200 (OK) if not set.
*
* @param code 1xx, 2xx, 3xx, 4xx, 5xx, https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
* @param code 1xx, 2xx, 3xx, 4xx, 5xx, <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status">Documentation</a>
* @return this builder.
*/
public ResponseBuilder setStatus(int code) {
@ -57,7 +57,7 @@ public class ResponseBuilder {
/**
* Set HTTP Response header.
*
* @param header Key of the header. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
* @param header Key of the header. <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers">Documentation</a>
* @param value Value for the header.
* @return this builder.
*/
@ -75,7 +75,7 @@ public class ResponseBuilder {
* Utility method for building redirects.
*
* @param url URL to redirect the client to with 302 Found.
* @return https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Location
* @return <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Location">Documentation</a>
*/
public ResponseBuilder redirectTo(String url) {
return setStatus(302).setHeader("Location", url).setContent(new byte[0]);

View File

@ -26,6 +26,11 @@ package com.djrapitops.plan.delivery.web.resolver.exception;
*/
public class BadRequestException extends IllegalArgumentException {
/**
* Default constructor.
*
* @param message Error message - avoid including any input incoming in the request to prevent XSS.
*/
public BadRequestException(String message) {
super(message);
}

View File

@ -1,6 +1,5 @@
/**
* Classes for implementing functionality with {@link com.djrapitops.plan.delivery.web.ResolverService}.
*
* <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5-PageExtension-API#resolverservice">Documentation</a>
*/
package com.djrapitops.plan.delivery.web.resolver;

View File

@ -43,7 +43,7 @@ public final class Request {
* @param path Requested path /example/target
* @param query Request parameters ?param=value etc
* @param user Web user doing the request (if authenticated)
* @param headers Request headers https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
* @param headers Request headers <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers">Documentation</a>
* @param requestBody Raw body as bytes, if present
*/
public Request(String method, URIPath path, URIQuery query, WebUser user, Map<String, String> headers, byte[] requestBody) {
@ -57,6 +57,11 @@ public final class Request {
/**
* Special constructor that figures out URIPath and URIQuery from "/path/and?query=params" and has no request body.
*
* @param method HTTP requst method
* @param target The requested path and query, e.g. "/path/and?query=params"
* @param user User that made the request
* @param headers HTTP request headers
*/
public Request(String method, String target, WebUser user, Map<String, String> headers) {
this.method = method;
@ -121,7 +126,7 @@ public final class Request {
/**
* Get a header in the request.
*
* @param key https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
* @param key <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers">Documentation</a>
* @return Value if it is present in the request.
*/
public Optional<String> getHeader(String key) {

View File

@ -17,6 +17,7 @@
package com.djrapitops.plan.delivery.web.resolver.request;
import java.util.*;
import java.util.function.Supplier;
public final class WebUser {
@ -57,7 +58,16 @@ public final class WebUser {
}
public boolean hasPermission(String permission) {
return permissions.contains(permission);
for (String grant : permissions) {
String substitute = permission.replace(grant, "");
// Last character is . so it is a sub-permission of the parent, eg. page.player, page.player.thing -> .thing
if (substitute.isEmpty() || substitute.startsWith(".")) return true;
}
return false;
}
public boolean hasPermission(Supplier<String> permissionSupplier) {
return hasPermission(permissionSupplier.get());
}
public String getName() {

View File

@ -1,6 +1,5 @@
/**
* Classes for implementing functionality with {@link com.djrapitops.plan.delivery.web.ResourceService}.
*
* <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5-PageExtension-API#resourceservice">Documentation</a>
*/
package com.djrapitops.plan.delivery.web.resource;

View File

@ -113,6 +113,7 @@ public interface DataExtension {
* <p>
* Requires Capability DATA_EXTENSION_BUILDER_API
*
* @param text Text that is displayed next to the value.
* @return new builder.
*/
default ValueBuilder valueBuilder(String text) {

View File

@ -81,6 +81,9 @@ public interface ExtensionService {
*/
void unregister(DataExtension extension);
/**
* Singleton holder for {@link ExtensionService}.
*/
class Holder {
static final AtomicReference<ExtensionService> service = new AtomicReference<>();

View File

@ -42,6 +42,12 @@ public enum FormatType {
*/
NONE;
/**
* Get a format type by the enum name without exception.
*
* @param name FormatType#name()
* @return Optional if the format type is found by that name, empty if not found.
*/
public static Optional<FormatType> getByName(String name) {
if (name == null) {
return Optional.empty();
@ -51,4 +57,5 @@ public enum FormatType {
} catch (IllegalArgumentException e) {
return Optional.empty();
}
}}
}
}

View File

@ -30,6 +30,11 @@ package com.djrapitops.plan.extension;
*/
public interface Group {
/**
* Get the name of the group.
*
* @return Name of the group given by a {@link com.djrapitops.plan.extension.annotation.GroupProvider}, e.g. "Miner"
*/
String getGroupName();
}

View File

@ -89,7 +89,7 @@ public @interface BooleanProvider {
/**
* Name of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Name of the icon, if name is not valid no icon is shown.
*/
@ -98,7 +98,7 @@ public @interface BooleanProvider {
/**
* Family of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Family that matches an icon, if there is no icon for this family no icon is shown.
*/

View File

@ -76,7 +76,7 @@ public @interface ComponentProvider {
/**
* Name of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Name of the icon, if name is not valid no icon is shown.
*/
@ -85,7 +85,7 @@ public @interface ComponentProvider {
/**
* Family of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Family that matches an icon, if there is no icon for this family no icon is shown.
*/

View File

@ -67,7 +67,7 @@ public @interface DoubleProvider {
/**
* Name of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Name of the icon, if name is not valid no icon is shown.
*/
@ -76,7 +76,7 @@ public @interface DoubleProvider {
/**
* Family of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Family that matches an icon, if there is no icon for this family no icon is shown.
*/

View File

@ -62,7 +62,7 @@ public @interface GroupProvider {
/**
* Name of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Name of the icon, if name is not valid no icon is shown.
*/
@ -71,7 +71,7 @@ public @interface GroupProvider {
/**
* Family of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Family that matches an icon, if there is no icon for this family no icon is shown.
*/

View File

@ -39,10 +39,18 @@ public @interface InvalidateMethod {
*/
String value();
/**
* Multiple {@link InvalidateMethod} annotations are supported per class.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Multiple {
/**
* All the annotations.
*
* @return All InvalidateMethod annotations in the class.
*/
InvalidateMethod[] value();
}

View File

@ -79,7 +79,7 @@ public @interface NumberProvider {
/**
* Name of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Name of the icon, if name is not valid no icon is shown.
*/
@ -88,7 +88,7 @@ public @interface NumberProvider {
/**
* Family of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Family that matches an icon, if there is no icon for this family no icon is shown.
*/

View File

@ -70,7 +70,7 @@ public @interface PercentageProvider {
/**
* Name of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Name of the icon, if name is not valid no icon is shown.
*/
@ -79,7 +79,7 @@ public @interface PercentageProvider {
/**
* Family of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Family that matches an icon, if there is no icon for this family no icon is shown.
*/

View File

@ -44,7 +44,7 @@ public @interface PluginInfo {
/**
* Name of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Name of the icon, if name is not valid no icon is shown.
*/
@ -53,7 +53,7 @@ public @interface PluginInfo {
/**
* Family of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Family that matches an icon, if there is no icon for this family no icon is shown.
*/

View File

@ -79,7 +79,7 @@ public @interface StringProvider {
/**
* Name of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Name of the icon, if name is not valid no icon is shown.
*/
@ -88,7 +88,7 @@ public @interface StringProvider {
/**
* Family of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Family that matches an icon, if there is no icon for this family no icon is shown.
*/

View File

@ -41,7 +41,7 @@ public @interface TabInfo {
/**
* Name of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Name of the icon, if name is not valid no icon is shown.
*/
@ -50,7 +50,7 @@ public @interface TabInfo {
/**
* Family of Font Awesome icon.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @return Family that matches an icon, if there is no icon for this family no icon is shown.
*/

View File

@ -18,7 +18,10 @@ package com.djrapitops.plan.extension.builder;
import com.djrapitops.plan.component.Component;
import com.djrapitops.plan.extension.FormatType;
import com.djrapitops.plan.extension.annotation.*;
import com.djrapitops.plan.extension.annotation.BooleanProvider;
import com.djrapitops.plan.extension.annotation.Conditional;
import com.djrapitops.plan.extension.annotation.StringProvider;
import com.djrapitops.plan.extension.annotation.Tab;
import com.djrapitops.plan.extension.extractor.ExtensionMethod;
import com.djrapitops.plan.extension.icon.Color;
import com.djrapitops.plan.extension.icon.Family;
@ -64,7 +67,7 @@ public interface ValueBuilder {
/**
* Icon displayed next to the value.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons
*
* @param iconName Name of the icon
* @param iconFamily Family of the icon
@ -78,7 +81,7 @@ public interface ValueBuilder {
/**
* Icon displayed next to the value.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons
*
* @param icon Icon built using the methods in {@link Icon}.
* @return This builder.

View File

@ -47,6 +47,12 @@ public enum Color {
BLACK,
NONE;
/**
* Get a color by the enum name without exception.
*
* @param name Color#name()
* @return Optional if the color is found by that name, empty if not found.
*/
public static Optional<Color> getByName(String name) {
if (name == null) {
return Optional.empty();
@ -56,4 +62,5 @@ public enum Color {
} catch (IllegalArgumentException e) {
return Optional.empty();
}
}}
}
}

View File

@ -37,6 +37,12 @@ public enum Family {
*/
BRAND;
/**
* Get a family by the enum name without exception.
*
* @param name Family#name()
* @return Optional if the family is found by that name, empty if not found.
*/
public static Optional<Family> getByName(String name) {
if (name == null) {
return Optional.empty();

View File

@ -16,10 +16,12 @@
*/
package com.djrapitops.plan.extension.icon;
import java.util.Objects;
/**
* Object that represents an icon on the website.
* <p>
* See https://fontawesome.com/icons (select 'free')) for icons and their {@link Family}.
* See <a href="https://fontawesome.com/icons">FontAwesome</a> (select 'free')) for icons and their {@link Family}.
*
* @author AuroraLS3
*/
@ -72,11 +74,27 @@ public class Icon {
return this;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Icon icon = (Icon) o;
return type == icon.type && Objects.equals(getName(), icon.getName()) && getColor() == icon.getColor();
}
@Override
public int hashCode() {
return Objects.hash(id, type, getName(), getColor());
}
@Override
public String toString() {
return "Icon{" + type.name() + ", '" + name + '\'' + ", " + color.name() + '}';
}
/**
* Builder for an {@link Icon}.
*/
public static class Builder {
private final Icon icon;

View File

@ -1,6 +1,5 @@
/**
* DataExtension API and related classes.
*
* <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API">Documentation</a>
*/
package com.djrapitops.plan.extension;

View File

@ -21,10 +21,8 @@ import com.djrapitops.plan.extension.icon.Color;
import com.djrapitops.plan.extension.icon.Icon;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
/**
* Object for giving Plan table data.
@ -100,6 +98,52 @@ public final class Table {
return tableColumnFormats;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Table table = (Table) o;
return Arrays.equals(getColumns(), table.getColumns())
&& Arrays.equals(getIcons(), table.getIcons())
&& Arrays.equals(getTableColumnFormats(), table.getTableColumnFormats())
&& valuesEqual(table);
}
private boolean valuesEqual(Table other) {
List<Object[]> rows1 = getRows();
List<Object[]> rows2 = other.getRows();
if (rows1.size() != rows2.size()) return false;
for (int i = 0; i < rows1.size(); i++) {
Object[] values1 = rows1.get(i);
Object[] values2 = rows2.get(i);
for (int j = 0; j < getMaxColumnSize(); j++) {
if (!Objects.equals(Objects.toString(values1[0]), Objects.toString(values2[0]))) {
return false;
}
}
}
return true;
}
@Override
public int hashCode() {
int result = Objects.hash(getRows());
result = 31 * result + Arrays.hashCode(getColumns());
result = 31 * result + Arrays.hashCode(getIcons());
result = 31 * result + Arrays.hashCode(getTableColumnFormats());
return result;
}
@Override
public String toString() {
return "Table{" +
"columns=" + Arrays.toString(columns) +
", icons=" + Arrays.toString(icons) +
", tableColumnFormats=" + Arrays.toString(tableColumnFormats) +
", rows=" + rows.stream().map(Arrays::toString).collect(Collectors.toList()) +
'}';
}
/**
* Factory for creating new {@link Table} objects.
*/

View File

@ -62,14 +62,44 @@ public interface CommonQueries {
*/
long fetchLastSeen(UUID playerUUID, UUID serverUUID);
/**
* Get the UUIDs of all servers Plan has registered.
*
* @return Set of Server UUIDs
*/
Set<UUID> fetchServerUUIDs();
/**
* Fetch UUID of a player by name.
*
* @param playerName Name of the player
* @return UUID if it is found by Plan or empty if not found.
*/
Optional<UUID> fetchUUIDOf(String playerName);
/**
* Fetch name of a player by UUID.
*
* @param playerUUID UUID of the player
* @return Name if it is known by Plan or empty if not.
*/
Optional<String> fetchNameOf(UUID playerUUID);
/**
* Check that schema has table you are using in your queries.
*
* @param table Name of the table, e.g. plan_users.
* @return true if table exists.
*/
boolean doesDBHaveTable(String table);
/**
* Check that schema table has a column you are using in your queries.
*
* @param table Name of the table, e.g. plan_users.
* @param column Name of the column, e.g. id
* @return true if table and column exist.
*/
boolean doesDBHaveTableColumn(String table, String column);
/**

View File

@ -126,7 +126,7 @@ public interface QueryService {
CommonQueries getCommonQueries();
/**
* See https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
* See <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html">Functional Interfaces</a>
*/
@FunctionalInterface
interface ThrowingConsumer<T> {
@ -134,7 +134,7 @@ public interface QueryService {
}
/**
* See https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
* See <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html">Functional Interfaces</a>
*/
@FunctionalInterface
interface ThrowingFunction<T, R> {
@ -142,7 +142,7 @@ public interface QueryService {
}
/**
* See https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
* See <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html">Functional Interfaces</a>
*/
@FunctionalInterface
interface VoidFunction {

View File

@ -1,6 +1,5 @@
/**
* Query API related classes.
*
* <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5-Query-API">Documentation</a>
*/
package com.djrapitops.plan.query;

View File

@ -51,6 +51,9 @@ public interface ListenerService {
*/
void registerListenerForPlan(Object listener);
/**
* Singleton holder for listeners.
*/
class Holder {
static final AtomicReference<ListenerService> service = new AtomicReference<>();

View File

@ -11,13 +11,13 @@ buildscript {
}
plugins {
id "com.github.johnrengelman.shadow" version "7.1.2" apply false
id "com.github.johnrengelman.shadow" version "8.1.1" apply false
id "java"
id 'java-library'
id "jacoco"
id "checkstyle"
id "org.sonarqube" version "4.3.0.3225"
id 'fabric-loom' version '1.1-SNAPSHOT' apply false
id "org.sonarqube" version "5.0.0.4638"
id 'fabric-loom' version '1.6-SNAPSHOT' apply false
}
apply plugin: 'nebula-aggregate-javadocs'
@ -36,20 +36,22 @@ def buildVersion = determineBuildVersion()
allprojects {
group "com.djrapitops"
version "5.5-SNAPSHOT"
version "5.6-SNAPSHOT"
ext.majorVersion = '5'
ext.minorVersion = '5'
ext.minorVersion = '6'
ext.buildVersion = buildVersion
ext.fullVersion = project.ext.majorVersion + '.' + project.ext.minorVersion + ' build ' + project.ext.buildVersion
ext.fullVersionFilename = project.ext.majorVersion + '.' + project.ext.minorVersion + '-build-' + project.ext.buildVersion
ext.fullVersionSemantic = project.ext.majorVersion + '.' + project.ext.minorVersion + '+build.' + project.ext.buildVersion
// Fix for UTF-8 files showing with wrong encoding when compiled on Windows machines.
compileJava { options.encoding = "UTF-8" }
tasks.withType(JavaCompile) { options.encoding = 'UTF-8' }
tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' }
javadoc { options.encoding = 'UTF-8' }
}
logger.lifecycle("Building artifact for version $fullVersion")
logger.lifecycle("Building artifact for version $fullVersion / $fullVersionFilename / $fullVersionSemantic")
subprojects {
// Build plugins
@ -67,7 +69,7 @@ subprojects {
}
ext {
daggerVersion = "2.47"
daggerVersion = "2.51.1"
palVersion = "5.1.0"
@ -81,31 +83,32 @@ subprojects {
redisBungeeVersion = "0.3.8-SNAPSHOT"
redisBungeeProxioDevVersion = "0.7.3"
commonsTextVersion = "1.10.0"
commonsCompressVersion = "1.23.0"
commonsCodecVersion = "1.16.0"
caffeineVersion = "3.1.6"
jettyVersion = "11.0.15"
commonsTextVersion = "1.12.0"
commonsCompressVersion = "1.26.1"
commonsCodecVersion = "1.16.1"
caffeineVersion = "3.1.8"
jettyVersion = "11.0.20"
caffeineVersion = "2.9.2"
mysqlVersion = "8.1.0"
mariadbVersion = "3.1.4"
sqliteVersion = "3.41.2.1"
mysqlVersion = "8.3.0"
mariadbVersion = "3.3.3"
sqliteVersion = "3.42.0.1"
adventureVersion = "4.14.0"
hikariVersion = "5.0.1"
slf4jVersion = "2.0.7"
geoIpVersion = "4.0.1"
hikariVersion = "5.1.0"
slf4jVersion = "2.0.13"
geoIpVersion = "4.2.0"
gsonVersion = "2.10.1"
dependencyDownloadVersion = "1.3.1"
ipAddressMatcherVersion = "5.4.0"
ipAddressMatcherVersion = "5.5.0"
jasyptVersion = "1.9.3"
bstatsVersion = "3.0.2"
placeholderapiVersion = "2.11.3"
placeholderapiVersion = "2.11.5"
nkPlaceholderapiVersion = "1.4-SNAPSHOT"
junitVersion = "5.9.3"
mockitoVersion = "5.4.0"
testContainersVersion = "1.18.3"
swaggerVersion = "2.2.15"
junitVersion = "5.10.2"
mockitoVersion = "5.11.0"
testContainersVersion = "1.19.7"
swaggerVersion = "2.2.21"
}
repositories {
@ -127,6 +130,8 @@ subprojects {
testImplementation "com.google.dagger:dagger:$daggerVersion"
testAnnotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
compileOnly "io.swagger.core.v3:swagger-core-jakarta:$swaggerVersion"
// Test Tooling Dependencies
testImplementation "org.junit.jupiter:junit-jupiter:$junitVersion" // JUnit 5
testImplementation "org.mockito:mockito-core:$mockitoVersion" // Mockito Core
@ -148,7 +153,7 @@ subprojects {
testImplementation.extendsFrom shadow // Include shadowed dependencies in test classpath
}
// Test classes available to other modules
task testJar(type: Jar) {
tasks.register('testJar', Jar) {
archiveClassifier.set("test")
from sourceSets.test.output
}
@ -176,8 +181,8 @@ subprojects {
}
}
plugins.withType(JacocoPlugin) {
tasks["test"].finalizedBy 'jacocoTestReport'
plugins.withType(JacocoPlugin).configureEach {
tasks.named("test").get().finalizedBy 'jacocoTestReport'
}
}

View File

@ -16,13 +16,16 @@
*/
package com.djrapitops.plan.gathering;
import com.djrapitops.plan.gathering.domain.PluginMetadata;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@ -129,4 +132,12 @@ public class BukkitSensor implements ServerSensor<World> {
.map(Player::getName)
.collect(Collectors.toList());
}
@Override
public List<PluginMetadata> getInstalledPlugins() {
return Arrays.stream(Bukkit.getPluginManager().getPlugins())
.map(Plugin::getDescription)
.map(description -> new PluginMetadata(description.getName(), description.getVersion()))
.collect(Collectors.toList());
}
}

View File

@ -25,7 +25,7 @@ import java.util.stream.Collectors;
/**
* UserImportRefiner attempts to find any crucial information that is missing.
*
* <p>
* - Finds UUIDs if only name is present.
* - Finds Names if only UUID is present.
* - Removes any importers that do not have any identifiers.

View File

@ -16,6 +16,7 @@
*/
package com.djrapitops.plan.gathering.listeners.bukkit;
import com.djrapitops.plan.gathering.JoinAddressValidator;
import com.djrapitops.plan.gathering.cache.JoinAddressCache;
import com.djrapitops.plan.gathering.domain.BukkitPlayerData;
import com.djrapitops.plan.gathering.domain.event.PlayerJoin;
@ -28,6 +29,8 @@ import com.djrapitops.plan.identification.ServerUUID;
import com.djrapitops.plan.storage.database.DBSystem;
import com.djrapitops.plan.storage.database.transactions.events.BanStatusTransaction;
import com.djrapitops.plan.storage.database.transactions.events.KickStoreTransaction;
import com.djrapitops.plan.storage.database.transactions.events.StoreAllowlistBounceTransaction;
import com.djrapitops.plan.utilities.dev.Untrusted;
import com.djrapitops.plan.utilities.logging.ErrorContext;
import com.djrapitops.plan.utilities.logging.ErrorLogger;
import org.bukkit.event.EventHandler;
@ -50,6 +53,7 @@ public class PlayerOnlineListener implements Listener {
private final PlayerJoinEventConsumer playerJoinEventConsumer;
private final PlayerLeaveEventConsumer playerLeaveEventConsumer;
private final JoinAddressValidator joinAddressValidator;
private final JoinAddressCache joinAddressCache;
private final ServerInfo serverInfo;
@ -61,6 +65,7 @@ public class PlayerOnlineListener implements Listener {
public PlayerOnlineListener(
PlayerJoinEventConsumer playerJoinEventConsumer,
PlayerLeaveEventConsumer playerLeaveEventConsumer,
JoinAddressValidator joinAddressValidator,
JoinAddressCache joinAddressCache,
ServerInfo serverInfo,
DBSystem dbSystem,
@ -69,6 +74,7 @@ public class PlayerOnlineListener implements Listener {
) {
this.playerJoinEventConsumer = playerJoinEventConsumer;
this.playerLeaveEventConsumer = playerLeaveEventConsumer;
this.joinAddressValidator = joinAddressValidator;
this.joinAddressCache = joinAddressCache;
this.serverInfo = serverInfo;
this.dbSystem = dbSystem;
@ -82,16 +88,14 @@ public class PlayerOnlineListener implements Listener {
UUID playerUUID = event.getPlayer().getUniqueId();
ServerUUID serverUUID = serverInfo.getServerUUID();
boolean banned = PlayerLoginEvent.Result.KICK_BANNED == event.getResult();
boolean notWhitelisted = PlayerLoginEvent.Result.KICK_WHITELIST == event.getResult();
String address = event.getHostname();
if (!address.isEmpty()) {
address = address.substring(0, address.lastIndexOf(':'));
if (address.contains("\u0000")) {
address = address.substring(0, address.indexOf('\u0000'));
}
if (address.contains("fml")) {
address = address.substring(0, address.lastIndexOf("fml"));
}
if (notWhitelisted) {
dbSystem.getDatabase().executeTransaction(new StoreAllowlistBounceTransaction(playerUUID, event.getPlayer().getName(), serverUUID, System.currentTimeMillis()));
}
@Untrusted String address = joinAddressValidator.sanitize(event.getHostname());
if (joinAddressValidator.isValid(address)) {
joinAddressCache.put(playerUUID, address);
}
dbSystem.getDatabase().executeTransaction(new BanStatusTransaction(playerUUID, serverUUID, banned));

View File

@ -53,7 +53,7 @@ import java.util.logging.Logger;
* Task that handles player ping calculation on Bukkit based servers.
* <p>
* Modified PingManager from LagMonitor plugin.
* https://github.com/games647/LagMonitor/blob/master/src/main/java/com/github/games647/lagmonitor/task/PingManager.java
* <a href="https://github.com/games647/LagMonitor/blob/master/src/main/java/com/github/games647/lagmonitor/task/PingManager.java">original</a>
*
* @author games647
*/
@ -89,9 +89,9 @@ public class BukkitPingCounter extends TaskSystem.Task implements Listener {
startRecording = new ConcurrentHashMap<>();
playerHistory = new HashMap<>();
Optional<PingMethod> pingMethod = loadPingMethod();
if (pingMethod.isPresent()) {
this.pingMethod = pingMethod.get();
Optional<PingMethod> loaded = loadPingMethod();
if (loaded.isPresent()) {
this.pingMethod = loaded.get();
pingMethodAvailable = true;
} else {
pingMethodAvailable = false;
@ -100,6 +100,7 @@ public class BukkitPingCounter extends TaskSystem.Task implements Listener {
private Optional<PingMethod> loadPingMethod() {
PingMethod[] methods = new PingMethod[]{
new SpigotPingMethod(),
new PaperPingMethod(),
new ReflectiveLatencyFieldMethod(),
new ReflectivePingFieldMethod(),

View File

@ -0,0 +1,64 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2016-2018
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.djrapitops.plan.gathering.timed;
import org.bukkit.entity.Player;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class SpigotPingMethod implements PingMethod {
private String reasonForUnavailability;
@Override
public boolean isAvailable() {
try {
//Only available in Paper
Class.forName("org.bukkit.entity.Player").getDeclaredMethod("getPing");
return true;
} catch (ClassNotFoundException | NoSuchMethodException noSuchMethodEx) {
reasonForUnavailability = noSuchMethodEx.toString();
return false;
}
}
@Override
public int getPing(Player player) {
if (reasonForUnavailability != null) return -1;
try {
Method getPing = player.getClass().getDeclaredMethod("getPing");
return (int) getPing.invoke(player);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
reasonForUnavailability = e.toString();
return -1;
}
}
@Override
public String getReasonForUnavailability() {
return reasonForUnavailability;
}
}

View File

@ -19,7 +19,6 @@ package com.djrapitops.plan.modules.bukkit;
import com.djrapitops.plan.TaskSystem;
import com.djrapitops.plan.addons.placeholderapi.PlaceholderCacheRefreshTask;
import com.djrapitops.plan.delivery.web.ResourceWriteTask;
import com.djrapitops.plan.delivery.web.WebAssetVersionCheckTask;
import com.djrapitops.plan.delivery.webserver.auth.ActiveCookieExpiryCleanupTask;
import com.djrapitops.plan.delivery.webserver.cache.JSONFileStorage;
import com.djrapitops.plan.delivery.webserver.configuration.AddressAllowList;
@ -27,6 +26,7 @@ import com.djrapitops.plan.extension.ExtensionServerDataUpdater;
import com.djrapitops.plan.gathering.ShutdownDataPreservation;
import com.djrapitops.plan.gathering.ShutdownHook;
import com.djrapitops.plan.gathering.timed.BukkitPingCounter;
import com.djrapitops.plan.gathering.timed.InstalledPluginGatheringTask;
import com.djrapitops.plan.gathering.timed.ServerTPSCounter;
import com.djrapitops.plan.gathering.timed.SystemUsageBuffer;
import com.djrapitops.plan.settings.upkeep.ConfigStoreTask;
@ -94,10 +94,6 @@ public interface BukkitTaskModule {
@IntoSet
TaskSystem.Task bindResourceWriteTask(ResourceWriteTask resourceWriteTask);
@Binds
@IntoSet
TaskSystem.Task bindWebAssetVersionCheckTask(WebAssetVersionCheckTask webAssetVersionCheckTask);
@Binds
@IntoSet
TaskSystem.Task bindActiveCookieStoreExpiryTask(ActiveCookieExpiryCleanupTask activeCookieExpiryCleanupTask);
@ -113,4 +109,8 @@ public interface BukkitTaskModule {
@Binds
@IntoSet
TaskSystem.Task bindAddressAllowListUpdateTask(AddressAllowList addressAllowList);
@Binds
@IntoSet
TaskSystem.Task bindInstalledPluginGatheringTask(InstalledPluginGatheringTask installedPluginGatheringTask);
}

View File

@ -32,7 +32,7 @@ import java.lang.reflect.Field;
* An utility class that simplifies reflection in Bukkit plugins.
* <p>
* Modified Reflection utility from LagMonitor plugin.
* https://github.com/games647/LagMonitor/blob/master/src/main/java/com/github/games647/lagmonitor/traffic/Reflection.java
* <a href="https://github.com/games647/LagMonitor/blob/master/src/main/java/com/github/games647/lagmonitor/traffic/Reflection.java">original code</a>
*
* @author Kristian
*/

View File

@ -17,9 +17,11 @@
package com.djrapitops.plan.gathering;
import com.djrapitops.plan.PlanBungee;
import com.djrapitops.plan.gathering.domain.PluginMetadata;
import com.djrapitops.plan.identification.properties.RedisCheck;
import com.djrapitops.plan.identification.properties.RedisPlayersOnlineSupplier;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Plugin;
import javax.inject.Inject;
import javax.inject.Singleton;
@ -35,11 +37,13 @@ public class BungeeSensor implements ServerSensor<Object> {
private final IntSupplier onlinePlayerCountSupplier;
private final IntSupplier onlinePlayerCountBungee;
private final Supplier<Collection<ProxiedPlayer>> getPlayers;
private final Supplier<Collection<Plugin>> getPlugins;
@Inject
public BungeeSensor(PlanBungee plugin) {
getPlayers = plugin.getProxy()::getPlayers;
onlinePlayerCountBungee = plugin.getProxy()::getOnlineCount;
getPlugins = plugin.getProxy().getPluginManager()::getPlugins;
onlinePlayerCountSupplier = RedisCheck.isClassAvailable() ? new RedisPlayersOnlineSupplier() : onlinePlayerCountBungee;
}
@ -63,4 +67,12 @@ public class BungeeSensor implements ServerSensor<Object> {
public boolean usingRedisBungee() {
return RedisCheck.isClassAvailable();
}
@Override
public List<PluginMetadata> getInstalledPlugins() {
return getPlugins.get().stream()
.map(Plugin::getDescription)
.map(description -> new PluginMetadata(description.getName(), description.getVersion()))
.collect(Collectors.toList());
}
}

View File

@ -40,5 +40,5 @@ public interface BungeeSuperClassBindingModule {
ListenerSystem bindListenerSystem(BungeeListenerSystem listenerSystem);
@Binds
ServerSensor<Object> bindServerSensor(BungeeSensor sensor);
ServerSensor<?> bindServerSensor(BungeeSensor sensor);
}

View File

@ -18,12 +18,12 @@ package com.djrapitops.plan.modules.bungee;
import com.djrapitops.plan.TaskSystem;
import com.djrapitops.plan.delivery.web.ResourceWriteTask;
import com.djrapitops.plan.delivery.web.WebAssetVersionCheckTask;
import com.djrapitops.plan.delivery.webserver.auth.ActiveCookieExpiryCleanupTask;
import com.djrapitops.plan.delivery.webserver.cache.JSONFileStorage;
import com.djrapitops.plan.delivery.webserver.configuration.AddressAllowList;
import com.djrapitops.plan.extension.ExtensionServerDataUpdater;
import com.djrapitops.plan.gathering.timed.BungeePingCounter;
import com.djrapitops.plan.gathering.timed.InstalledPluginGatheringTask;
import com.djrapitops.plan.gathering.timed.ProxyTPSCounter;
import com.djrapitops.plan.gathering.timed.SystemUsageBuffer;
import com.djrapitops.plan.settings.upkeep.NetworkConfigStoreTask;
@ -81,10 +81,6 @@ public interface BungeeTaskModule {
@IntoSet
TaskSystem.Task bindResourceWriteTask(ResourceWriteTask resourceWriteTask);
@Binds
@IntoSet
TaskSystem.Task bindWebAssetVersionCheckTask(WebAssetVersionCheckTask webAssetVersionCheckTask);
@Binds
@IntoSet
TaskSystem.Task bindActiveCookieStoreExpiryTask(ActiveCookieExpiryCleanupTask activeCookieExpiryCleanupTask);
@ -92,4 +88,8 @@ public interface BungeeTaskModule {
@Binds
@IntoSet
TaskSystem.Task bindAddressAllowListUpdateTask(AddressAllowList addressAllowList);
@Binds
@IntoSet
TaskSystem.Task bindInstalledPluginGatheringTask(InstalledPluginGatheringTask installedPluginGatheringTask);
}

View File

@ -3,8 +3,8 @@ import org.apache.tools.ant.filters.ReplaceTokens
plugins {
id "dev.vankka.dependencydownload.plugin" version "$dependencyDownloadVersion"
id "com.github.node-gradle.node" version "5.0.0"
id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.15"
id "com.github.node-gradle.node" version "7.0.2"
id "io.swagger.core.v3.swagger-gradle-plugin" version "2.2.21"
}
configurations {
@ -64,6 +64,7 @@ dependencies {
mysqlDriver "com.mysql:mysql-connector-j:$mysqlVersion"
mariadbDriver "org.mariadb.jdbc:mariadb-java-client:$mariadbVersion"
sqliteDriver "org.xerial:sqlite-jdbc:$sqliteVersion"
sqliteDriver "org.slf4j:slf4j-nop:1.7.36"
ipAddressMatcher "com.github.seancfoley:ipaddress:$ipAddressMatcherVersion"
shadow "org.apache.commons:commons-text:$commonsTextVersion"
@ -82,6 +83,8 @@ dependencies {
// json-simple has junit (a test dependency) compile scoped
exclude group: "junit", module: "junit"
}
implementation "org.jasypt:jasypt:$jasyptVersion:lite"
// Swagger annotations
implementation "jakarta.ws.rs:jakarta.ws.rs-api:3.1.0"
@ -92,12 +95,21 @@ dependencies {
testArtifacts project(":extensions:adventure")
testImplementation project(":extensions:adventure")
testImplementation "com.google.code.gson:gson:$gsonVersion"
testImplementation "org.seleniumhq.selenium:selenium-java:4.10.0"
testImplementation "org.seleniumhq.selenium:selenium-java:4.19.1"
testImplementation "org.testcontainers:testcontainers:$testContainersVersion"
testImplementation "org.testcontainers:junit-jupiter:$testContainersVersion"
testImplementation "org.testcontainers:nginx:$testContainersVersion"
}
test {
environment "PLAN_TEST_NODE_STRING", "String"
environment "PLAN_TEST_NODE_BOOLEAN", "true"
environment "PLAN_TEST_NODE_INTEGER", "5"
environment "PLAN_TEST_NODE_DOUBLE", "0.5"
environment "PLAN_TEST_NODE_LONG", "9223372036854775807"
environment "PLAN_TEST_NODE_STRINGLIST", "- Test\n- Another"
}
task updateVersion(type: Copy) {
from('src/main/resources') {
include 'plugin.yml'
@ -111,13 +123,14 @@ task updateVersion(type: Copy) {
node {
download = true
version = "16.14.2"
version = "20.9.0"
nodeProjectDir = file("$rootDir/react/dashboard")
}
task yarnBundle(type: YarnTask) {
inputs.files(fileTree("$rootDir/react/dashboard/src"))
inputs.file("$rootDir/react/dashboard/package.json")
inputs.file("$rootDir/react/dashboard/vite.config.js")
outputs.dir("$rootDir/react/dashboard/build")
@ -136,6 +149,7 @@ task yarnStart(type: YarnTask) {
task copyYarnBuildResults {
inputs.files(fileTree("$rootDir/react/dashboard/build"))
outputs.dir("$rootDir/common/build/resources/main/assets/plan/web")
outputs.dir("$rootDir/common/build/resources/test/assets/plan/web")
dependsOn yarnBundle
doLast {
@ -144,6 +158,10 @@ task copyYarnBuildResults {
from "$rootDir/react/dashboard/build"
into "$rootDir/common/build/resources/main/assets/plan/web"
}
copy {
into "$rootDir/common/build/resources/main/assets/plan/web"
into "$rootDir/common/build/resources/test/assets/plan/web"
}
}
}
@ -224,8 +242,12 @@ artifacts {
}
processResources {
dependsOn copyYarnBuildResults
dependsOn determineAssetModifications
// Skips Yarn build on Jitpack since Jitpack doesn't offer gclib version compatible with Node 20
// Jitpack build is used mainly for java dependencies.
if (!project.hasProperty("isJitpack")) {
dependsOn copyYarnBuildResults
dependsOn determineAssetModifications
}
dependsOn generateResourceForMySQLDriver
dependsOn generateResourceForSQLiteDriver
dependsOn generateResourceForIpAddressMatcher

View File

@ -0,0 +1,119 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan;
import com.djrapitops.plan.component.ComponentSvc;
import com.djrapitops.plan.delivery.web.ResolverSvc;
import com.djrapitops.plan.delivery.web.ResourceSvc;
import com.djrapitops.plan.extension.ExtensionSvc;
import com.djrapitops.plan.query.QuerySvc;
import com.djrapitops.plan.settings.ListenerSvc;
import com.djrapitops.plan.settings.SchedulerSvc;
import com.djrapitops.plan.settings.SettingsSvc;
import javax.inject.Inject;
import javax.inject.Singleton;
/**
* Breaks up {@link PlanSystem} to be a smaller class.
*
* @author AuroraLS3
*/
@Singleton
public class ApiServices {
private final ComponentSvc componentService;
private final ResolverSvc resolverService;
private final ResourceSvc resourceService;
private final ExtensionSvc extensionService;
private final QuerySvc queryService;
private final ListenerSvc listenerService;
private final SettingsSvc settingsService;
private final SchedulerSvc schedulerService;
@Inject
public ApiServices(
ComponentSvc componentService,
ResolverSvc resolverService,
ResourceSvc resourceService,
ExtensionSvc extensionService,
QuerySvc queryService,
ListenerSvc listenerService,
SettingsSvc settingsService,
SchedulerSvc schedulerService
) {
this.componentService = componentService;
this.resolverService = resolverService;
this.resourceService = resourceService;
this.extensionService = extensionService;
this.queryService = queryService;
this.listenerService = listenerService;
this.settingsService = settingsService;
this.schedulerService = schedulerService;
}
public void register() {
extensionService.register();
componentService.register();
resolverService.register();
resourceService.register();
listenerService.register();
settingsService.register();
schedulerService.register();
queryService.register();
}
public void registerExtensions() {
extensionService.registerExtensions();
}
public void disableExtensionDataUpdates() {
extensionService.disableUpdates();
}
public ComponentSvc getComponentService() {
return componentService;
}
public ResolverSvc getResolverService() {
return resolverService;
}
public ResourceSvc getResourceService() {
return resourceService;
}
public ExtensionSvc getExtensionService() {
return extensionService;
}
public QuerySvc getQueryService() {
return queryService;
}
public ListenerSvc getListenerService() {
return listenerService;
}
public SettingsSvc getSettingsService() {
return settingsService;
}
public SchedulerSvc getSchedulerService() {
return schedulerService;
}
}

View File

@ -17,25 +17,17 @@
package com.djrapitops.plan;
import com.djrapitops.plan.api.PlanAPI;
import com.djrapitops.plan.component.ComponentSvc;
import com.djrapitops.plan.delivery.DeliveryUtilities;
import com.djrapitops.plan.delivery.export.ExportSystem;
import com.djrapitops.plan.delivery.formatting.Formatters;
import com.djrapitops.plan.delivery.web.ResolverSvc;
import com.djrapitops.plan.delivery.web.ResourceSvc;
import com.djrapitops.plan.delivery.webserver.NonProxyWebserverDisableChecker;
import com.djrapitops.plan.delivery.webserver.WebServerSystem;
import com.djrapitops.plan.extension.ExtensionSvc;
import com.djrapitops.plan.gathering.cache.CacheSystem;
import com.djrapitops.plan.gathering.importing.ImportSystem;
import com.djrapitops.plan.gathering.listeners.ListenerSystem;
import com.djrapitops.plan.identification.ServerInfo;
import com.djrapitops.plan.processing.Processing;
import com.djrapitops.plan.query.QuerySvc;
import com.djrapitops.plan.settings.ConfigSystem;
import com.djrapitops.plan.settings.ListenerSvc;
import com.djrapitops.plan.settings.SchedulerSvc;
import com.djrapitops.plan.settings.SettingsSvc;
import com.djrapitops.plan.settings.locale.LocaleSystem;
import com.djrapitops.plan.storage.database.DBSystem;
import com.djrapitops.plan.storage.file.PlanFiles;
@ -77,14 +69,7 @@ public class PlanSystem implements SubSystem {
private final ImportSystem importSystem;
private final ExportSystem exportSystem;
private final DeliveryUtilities deliveryUtilities;
private final ComponentSvc componentService;
private final ResolverSvc resolverService;
private final ResourceSvc resourceService;
private final ExtensionSvc extensionService;
private final QuerySvc queryService;
private final ListenerSvc listenerService;
private final SettingsSvc settingsService;
private final SchedulerSvc schedulerService;
private final ApiServices apiServices;
private final PluginLogger logger;
private final ErrorLogger errorLogger;
@ -104,17 +89,10 @@ public class PlanSystem implements SubSystem {
ImportSystem importSystem,
ExportSystem exportSystem,
DeliveryUtilities deliveryUtilities,
ComponentSvc componentService,
ResolverSvc resolverService,
ResourceSvc resourceService,
ExtensionSvc extensionService,
QuerySvc queryService,
ListenerSvc listenerService,
SettingsSvc settingsService,
SchedulerSvc schedulerService,
PluginLogger logger,
ErrorLogger errorLogger,
PlanAPI.PlanAPIHolder apiHolder
ApiServices apiServices, // API v5
@SuppressWarnings("deprecation") PlanAPI.PlanAPIHolder apiHolder // Deprecated PlanAPI, backwards compatibility
) {
this.files = files;
this.configSystem = configSystem;
@ -130,16 +108,9 @@ public class PlanSystem implements SubSystem {
this.importSystem = importSystem;
this.exportSystem = exportSystem;
this.deliveryUtilities = deliveryUtilities;
this.componentService = componentService;
this.resolverService = resolverService;
this.resourceService = resourceService;
this.extensionService = extensionService;
this.queryService = queryService;
this.listenerService = listenerService;
this.settingsService = settingsService;
this.schedulerService = schedulerService;
this.logger = logger;
this.errorLogger = errorLogger;
this.apiServices = apiServices;
logger.info("§2");
logger.info("§2 ██▌");
@ -149,14 +120,6 @@ public class PlanSystem implements SubSystem {
logger.info("§2");
}
/**
* @deprecated Use {@link com.djrapitops.plan.delivery.webserver.Addresses} instead.
*/
@Deprecated(since = "Addresses.java")
public String getMainAddress() {
return webServerSystem.getAddresses().getMainAddress().orElse(webServerSystem.getAddresses().getFallbackLocalhostAddress());
}
/**
* Enables only the systems that are required for {@link com.djrapitops.plan.commands.PlanCommand}.
*
@ -170,22 +133,15 @@ public class PlanSystem implements SubSystem {
* Enables the rest of the systems that are not enabled in {@link #enableForCommands()}.
*/
public void enableOtherThanCommands() {
extensionService.register();
componentService.register();
resolverService.register();
resourceService.register();
listenerService.register();
settingsService.register();
schedulerService.register();
queryService.register();
apiServices.register();
enableSystems(
processing,
files,
localeSystem,
versionChecker,
databaseSystem,
webServerSystem,
processing,
serverInfo,
importSystem,
exportSystem,
@ -197,11 +153,11 @@ public class PlanSystem implements SubSystem {
// Disables Webserver if Proxy is detected in the database
if (serverInfo.getServer().isNotProxy()) {
processing.submitNonCritical(new NonProxyWebserverDisableChecker(
configSystem.getConfig(), webServerSystem.getAddresses(), webServerSystem, logger, errorLogger
configSystem.getConfig(), localeSystem.getLocale(), webServerSystem.getAddresses(), webServerSystem, logger, errorLogger
));
}
extensionService.registerExtensions();
apiServices.registerExtensions();
enabled = true;
String javaVersion = System.getProperty("java.specification.version");
@ -231,7 +187,7 @@ public class PlanSystem implements SubSystem {
enabled = false;
Formatters.clearSingleton();
extensionService.disableUpdates();
apiServices.disableExtensionDataUpdates();
disableSystems(
taskSystem,
@ -324,12 +280,8 @@ public class PlanSystem implements SubSystem {
return enabled;
}
public ExtensionSvc getExtensionService() {
return extensionService;
}
public ComponentSvc getComponentService() {
return componentService;
public ApiServices getApiServices() {
return apiServices;
}
public static long getServerEnableTime() {

View File

@ -43,7 +43,7 @@ import java.util.stream.Collectors;
* PlanAPI extension for all implementations.
*
* @author AuroraLS3
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (https://github.com/plan-player-analytics/Plan/wiki/APIv5).
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (<a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5">wiki</a>).
*/
@Singleton
@Deprecated(forRemoval = true, since = "5.0")

View File

@ -35,7 +35,7 @@ import java.util.UUID;
* Interface for PlanAPI methods.
*
* @author AuroraLS3
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (https://github.com/plan-player-analytics/Plan/wiki/APIv5).
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (<a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5">wiki</a>).
*/
@Deprecated(since = "5.0")
public interface PlanAPI {
@ -65,7 +65,7 @@ public interface PlanAPI {
}
/**
* @deprecated PluginData API has been deprecated - see https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API for new API.
* @deprecated PluginData API has been deprecated - see <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API">wiki</a> for new API.
*/
@Deprecated
void addPluginDataSource(PluginData pluginData);

View File

@ -29,7 +29,7 @@ import java.util.Optional;
* The Keys might change in the future, but the Optional API should help dealing with those cases.
*
* @author AuroraLS3
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (https://github.com/plan-player-analytics/Plan/wiki/APIv5).
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (<a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5">wiki</a>).
*/
@Deprecated(since = "5.0")
public class PlayerContainer {

View File

@ -28,7 +28,7 @@ import java.util.Optional;
* The Keys might change in the future, but the Optional API should help dealing with those cases.
*
* @author AuroraLS3
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (https://github.com/plan-player-analytics/Plan/wiki/APIv5).
* @deprecated Plan API v4 has been deprecated, use the APIv5 instead (<a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5">wiki</a>).
*/
@Deprecated(forRemoval = true, since = "5.0")
public class ServerContainer {

View File

@ -115,6 +115,8 @@ public class PlanCommand {
.subcommand(unregisterCommand())
.subcommand(logoutCommand())
.subcommand(webUsersCommand())
.subcommand(groups())
.subcommand(setGroup())
.subcommand(acceptCommand())
.subcommand(cancelCommand())
@ -261,7 +263,7 @@ public class PlanCommand {
.requiredArgument(locale.getString(HelpLang.ARG_USERNAME), locale.getString(HelpLang.DESC_ARG_USERNAME))
.description(locale.getString(HelpLang.LOGOUT))
.inDepthDescription(locale.getString(DeepHelpLang.LOGOUT))
.onCommand(registrationCommands::onLogoutCommand)
.onArgsOnlyCommand(registrationCommands::onLogoutCommand)
.onTabComplete(this::webUserNames)
.build();
}
@ -514,4 +516,36 @@ public class PlanCommand {
.onTabComplete(this::playerNames)
.build();
}
private Subcommand setGroup() {
return Subcommand.builder()
.aliases("setgroup")
.requirePermission(Permissions.SET_GROUP)
.requiredArgument(locale.getString(HelpLang.ARG_USERNAME), locale.getString(HelpLang.DESC_ARG_USERNAME))
.requiredArgument(locale.getString(HelpLang.ARG_GROUP), locale.getString(HelpLang.DESC_ARG_GROUP))
.description(locale.getString(HelpLang.SET_GROUP))
.inDepthDescription(locale.getString(DeepHelpLang.SET_GROUP))
.onCommand(registrationCommands::onChangePermissionGroup)
.onTabComplete(this::webGroupTabComplete)
.build();
}
private List<String> webGroupTabComplete(CMDSender sender, @Untrusted Arguments arguments) {
Optional<String> groupArgument = arguments.get(1);
if (groupArgument.isPresent()) {
return tabCompleteCache.getMatchingWebGroupNames(groupArgument.get());
}
String usernameArgument = arguments.get(0).orElse(null);
return tabCompleteCache.getMatchingUserIdentifiers(usernameArgument);
}
private Subcommand groups() {
return Subcommand.builder()
.aliases("groups")
.requirePermission(Permissions.SET_GROUP)
.description(locale.getString(HelpLang.GROUPS))
.inDepthDescription(locale.getString(DeepHelpLang.GROUPS))
.onCommand(registrationCommands::onListWebGroups)
.build();
}
}

View File

@ -17,7 +17,6 @@
package com.djrapitops.plan.commands;
import com.djrapitops.plan.SubSystem;
import com.djrapitops.plan.delivery.domain.auth.User;
import com.djrapitops.plan.gathering.ServerSensor;
import com.djrapitops.plan.identification.Server;
import com.djrapitops.plan.identification.ServerUUID;
@ -52,6 +51,7 @@ public class TabCompleteCache implements SubSystem {
private final Set<String> serverIdentifiers;
private final Set<String> userIdentifiers;
private final Set<String> backupFileNames;
private final Set<String> webGroupIdentifiers;
@Inject
public TabCompleteCache(
@ -68,6 +68,7 @@ public class TabCompleteCache implements SubSystem {
serverIdentifiers = new HashSet<>();
userIdentifiers = new HashSet<>();
backupFileNames = new HashSet<>();
webGroupIdentifiers = new HashSet<>();
}
@Override
@ -77,9 +78,14 @@ public class TabCompleteCache implements SubSystem {
refreshServerIdentifiers();
refreshUserIdentifiers();
refreshBackupFileNames();
refreshWebGroupIdentifiers();
});
}
private void refreshWebGroupIdentifiers() {
webGroupIdentifiers.addAll(dbSystem.getDatabase().query(WebUserQueries.fetchGroupNames()));
}
private void refreshServerIdentifiers() {
Map<ServerUUID, Server> serverNames = dbSystem.getDatabase().query(ServerQueries.fetchPlanServerInformation());
for (Map.Entry<ServerUUID, Server> server : serverNames.entrySet()) {
@ -94,9 +100,7 @@ public class TabCompleteCache implements SubSystem {
}
private void refreshUserIdentifiers() {
dbSystem.getDatabase().query(WebUserQueries.fetchAllUsers()).stream()
.map(User::getUsername)
.forEach(userIdentifiers::add);
userIdentifiers.addAll(dbSystem.getDatabase().query(WebUserQueries.fetchAllUsernames()));
}
private void refreshBackupFileNames() {
@ -133,6 +137,10 @@ public class TabCompleteCache implements SubSystem {
return findMatches(backupFileNames, searchFor);
}
public List<String> getMatchingWebGroupNames(@Untrusted String searchFor) {
return findMatches(webGroupIdentifiers, searchFor);
}
@NotNull
List<String> findMatches(Collection<String> searchList, @Untrusted String searchFor) {
List<String> filtered = searchList.stream()

View File

@ -29,6 +29,7 @@ import com.djrapitops.plan.delivery.formatting.Formatter;
import com.djrapitops.plan.delivery.formatting.Formatters;
import com.djrapitops.plan.exceptions.ExportException;
import com.djrapitops.plan.gathering.domain.GeoInfo;
import com.djrapitops.plan.gathering.domain.event.JoinAddress;
import com.djrapitops.plan.gathering.importing.ImportSystem;
import com.djrapitops.plan.gathering.importing.importers.Importer;
import com.djrapitops.plan.identification.Identifiers;
@ -42,6 +43,7 @@ import com.djrapitops.plan.settings.locale.Locale;
import com.djrapitops.plan.settings.locale.lang.CommandLang;
import com.djrapitops.plan.settings.locale.lang.GenericLang;
import com.djrapitops.plan.settings.locale.lang.HelpLang;
import com.djrapitops.plan.settings.locale.lang.HtmlLang;
import com.djrapitops.plan.storage.database.DBSystem;
import com.djrapitops.plan.storage.database.Database;
import com.djrapitops.plan.storage.database.queries.containers.ContainerFetchQueries;
@ -258,12 +260,17 @@ public class DataUtilityCommands {
Optional<GeoInfo> mostRecentGeoInfo = new GeoInfoMutator(geoInfo).mostRecent();
String geolocation = mostRecentGeoInfo.isPresent() ? mostRecentGeoInfo.get().getGeolocation() : "-";
SessionsMutator sessionsMutator = SessionsMutator.forContainer(player);
String latestJoinAddress = sessionsMutator.latestSession()
.flatMap(session -> session.getExtraData(JoinAddress.class))
.map(JoinAddress::getAddress)
.orElse("-");
String table = locale.getString(CommandLang.HEADER_INSPECT, playerName) + '\n' +
locale.getString(CommandLang.INGAME_ACTIVITY_INDEX, activityIndex.getFormattedValue(formatters.decimals()), activityIndex.getGroup()) + '\n' +
locale.getString(CommandLang.INGAME_REGISTERED, timestamp.apply(() -> registered)) + '\n' +
locale.getString(CommandLang.INGAME_LAST_SEEN, timestamp.apply(() -> lastSeen)) + '\n' +
locale.getString(CommandLang.INGAME_GEOLOCATION, geolocation) + '\n' +
" §2" + locale.getString(HtmlLang.LABEL_LABEL_JOIN_ADDRESS) + ": §f" + latestJoinAddress + '\n' +
locale.getString(CommandLang.INGAME_TIMES_KICKED, player.getValue(PlayerKeys.KICK_COUNT).orElse(0)) + '\n' +
'\n' +
locale.getString(CommandLang.INGAME_PLAYTIME, length.apply(sessionsMutator.toPlaytime())) + '\n' +

View File

@ -217,7 +217,7 @@ public class LinkCommands {
sender.send(t + locale.getString(CommandLang.HEADER_WEB_USERS, 0));
} else {
String usersListed = users.stream().sorted()
.map(user -> m + user.getUsername() + "::" + t + user.getLinkedTo() + "::" + s + user.getPermissionLevel() + "\n")
.map(user -> m + user.getUsername() + "::" + t + user.getLinkedTo() + "::" + s + user.getPermissionGroup() + "\n")
.collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)
.toString();
sender.buildMessage()

View File

@ -20,6 +20,7 @@ import com.djrapitops.plan.commands.use.Arguments;
import com.djrapitops.plan.commands.use.CMDSender;
import com.djrapitops.plan.commands.use.ColorScheme;
import com.djrapitops.plan.delivery.domain.auth.User;
import com.djrapitops.plan.delivery.domain.auth.WebPermission;
import com.djrapitops.plan.delivery.webserver.auth.ActiveCookieStore;
import com.djrapitops.plan.delivery.webserver.auth.FailReason;
import com.djrapitops.plan.delivery.webserver.auth.RegistrationBin;
@ -33,7 +34,6 @@ import com.djrapitops.plan.storage.database.Database;
import com.djrapitops.plan.storage.database.queries.objects.WebUserQueries;
import com.djrapitops.plan.storage.database.transactions.commands.RemoveWebUserTransaction;
import com.djrapitops.plan.storage.database.transactions.commands.StoreWebUserTransaction;
import com.djrapitops.plan.utilities.PassEncryptUtil;
import com.djrapitops.plan.utilities.dev.Untrusted;
import com.djrapitops.plan.utilities.logging.ErrorContext;
import com.djrapitops.plan.utilities.logging.ErrorLogger;
@ -41,7 +41,7 @@ import net.playeranalytics.plugin.server.PluginLogger;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
@ -99,61 +99,41 @@ public class RegistrationCommands {
} else {
@Untrusted Optional<String> code = arguments.getAfter("--code");
if (code.isPresent()) {
registerUsingCode(sender, code.get());
registerUsingCode(sender, code.get(), arguments);
} else {
registerUsingLegacy(sender, arguments);
sender.send(locale.getString(CommandLang.FAIL_REQ_ARGS, "--code", "/plan register --code 81cc5b17"));
}
}
}
public void registerUsingCode(CMDSender sender, @Untrusted String code) {
public void registerUsingCode(CMDSender sender, @Untrusted String code, @Untrusted Arguments arguments) {
UUID linkedToUUID = sender.getUUID().orElse(null);
Optional<User> user = RegistrationBin.register(code, linkedToUUID);
if (user.isPresent()) {
registerUser(user.get(), sender, getPermissionLevel(sender));
} else {
throw new IllegalArgumentException(locale.getString(FailReason.USER_INFORMATION_NOT_FOUND));
}
User user = RegistrationBin.register(code, linkedToUUID)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(FailReason.USER_INFORMATION_NOT_FOUND)));
String permissionGroup = getPermissionGroup(sender, arguments)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(FailReason.NO_PERMISSION_GROUP)));
user.setPermissionGroup(permissionGroup);
registerUser(user, sender);
}
public void registerUsingLegacy(CMDSender sender, @Untrusted Arguments arguments) {
@Untrusted String password = arguments.get(0)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_REQ_ARGS, 1, "<password>")));
String passwordHash = PassEncryptUtil.createHash(password);
int permissionLevel = arguments.getInteger(2)
.filter(arg -> sender.hasPermission(Permissions.REGISTER_OTHER)) // argument only allowed with register other permission
.orElseGet(() -> getPermissionLevel(sender));
Optional<UUID> senderUUID = sender.getUUID();
Optional<String> senderName = sender.getPlayerName();
if (senderUUID.isPresent() && senderName.isPresent()) {
String playerName = senderName.get();
UUID linkedToUUID = senderUUID.get();
@Untrusted String username = arguments.get(1).orElse(playerName);
registerUser(new User(username, playerName, linkedToUUID, passwordHash, permissionLevel, Collections.emptyList()), sender, permissionLevel);
} else {
@Untrusted String username = arguments.get(1)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_REQ_ARGS, 3, "<password> <name> <level>")));
registerUser(new User(username, "console", null, passwordHash, permissionLevel, Collections.emptyList()), sender, permissionLevel);
private Optional<String> getPermissionGroup(CMDSender sender, @Untrusted Arguments arguments) {
List<String> groups = dbSystem.getDatabase().query(WebUserQueries.fetchGroupNames());
if (sender.isPlayer()) {
for (String group : groups) {
if (sender.hasPermission("plan.webgroup." + group)) {
return Optional.of(group);
}
}
} else if (arguments.contains("superuser")) {
return dbSystem.getDatabase().query(WebUserQueries.fetchGroupNamesWithPermission(WebPermission.MANAGE_GROUPS.getPermission()))
.stream().findFirst();
}
return Optional.empty();
}
private int getPermissionLevel(CMDSender sender) {
if (sender.hasPermission(Permissions.SERVER)) {
return 0;
}
if (sender.hasPermission(Permissions.PLAYER_OTHER)) {
return 1;
}
if (sender.hasPermission(Permissions.PLAYER_SELF)) {
return 2;
}
return 100;
}
private void registerUser(User user, CMDSender sender, int permissionLevel) {
private void registerUser(User user, CMDSender sender) {
String username = user.getUsername();
user.setPermissionLevel(permissionLevel);
try {
Database database = dbSystem.getDatabase();
boolean userExists = database.query(WebUserQueries.fetchUser(username)).isPresent();
@ -163,11 +143,11 @@ public class RegistrationCommands {
.get(); // Wait for completion
sender.send(locale.getString(CommandLang.WEB_USER_REGISTER_SUCCESS, username));
logger.info(locale.getString(CommandLang.WEB_USER_REGISTER_NOTIFY, username, permissionLevel));
logger.info(locale.getString(CommandLang.WEB_USER_REGISTER_NOTIFY, username, user.getPermissionGroup()));
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (DBOpException | ExecutionException e) {
errorLogger.warn(e, ErrorContext.builder().related(sender, user, permissionLevel).build());
errorLogger.warn(e, ErrorContext.builder().related(sender, user).build());
}
}
@ -217,7 +197,7 @@ public class RegistrationCommands {
}
public void onLogoutCommand(CMDSender sender, @Untrusted Arguments arguments) {
public void onLogoutCommand(@Untrusted Arguments arguments) {
@Untrusted String loggingOut = arguments.get(0)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_REQ_ONE_ARG, locale.getString(HelpLang.ARG_USERNAME) + "/*")));
@ -227,4 +207,32 @@ public class RegistrationCommands {
ActiveCookieStore.removeUserCookie(loggingOut);
}
}
public void onChangePermissionGroup(CMDSender sender, @Untrusted Arguments arguments) {
String username = arguments.get(0)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_REQ_ARGS, locale.getString(HelpLang.ARG_USERNAME))));
String group = arguments.get(1)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_REQ_ARGS, locale.getString(HelpLang.ARG_GROUP))));
Database database = dbSystem.getDatabase();
User user = database.query(WebUserQueries.fetchUser(username))
.orElseThrow(() -> new IllegalArgumentException(locale.getString(FailReason.USER_DOES_NOT_EXIST)));
Optional<Integer> groupId = database.query(WebUserQueries.fetchGroupId(group));
if (groupId.isEmpty()) {
throw new IllegalArgumentException(locale.getString(FailReason.GROUP_DOES_NOT_EXIST));
}
user.setPermissionGroup(group);
database.executeTransaction(new StoreWebUserTransaction(user))
.thenRun(() -> sender.send(locale.getString(CommandLang.PROGRESS_SUCCESS)));
}
public void onListWebGroups(CMDSender sender) {
Database database = dbSystem.getDatabase();
List<String> groupNames = database.query(WebUserQueries.fetchGroupNames());
sender.send(String.join(", ", groupNames));
}
}

View File

@ -54,6 +54,10 @@ public interface SubcommandBuilder {
return onCommand((sender, arguments) -> executor.accept(sender));
}
default SubcommandBuilder onArgsOnlyCommand(Consumer<Arguments> executor) {
return onCommand((sender, arguments) -> executor.accept(arguments));
}
SubcommandBuilder onTabComplete(BiFunction<CMDSender, Arguments, List<String>> resolver);
Subcommand build();

View File

@ -27,7 +27,7 @@ import java.util.UUID;
* @author AuroraLS3
* @see TableContainer
* @see InspectContainer
* @deprecated PluginData API has been deprecated - see https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API for new API.
* @deprecated PluginData API has been deprecated - see <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API">wiki</a> for new API.
*/
@Deprecated(since = "5.0")
public final class AnalysisContainer extends InspectContainer {

View File

@ -27,7 +27,7 @@ import java.util.TreeMap;
*
* @author AuroraLS3
* @see TableContainer
* @deprecated PluginData API has been deprecated - see https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API for new API.
* @deprecated PluginData API has been deprecated - see <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API">wiki</a> for new API.
*/
@Deprecated(since = "5.0")
public class InspectContainer {

View File

@ -26,7 +26,7 @@ import java.util.List;
* Container used for creating Html tables.
*
* @author AuroraLS3
* @deprecated PluginData API has been deprecated - see https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API for new API.
* @deprecated PluginData API has been deprecated - see <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API">wiki</a> for new API.
*/
@Deprecated(since = "5.0")
public class TableContainer {

View File

@ -23,7 +23,7 @@ import java.util.UUID;
* Interface for PluginData objects that affect Ban state of players.
*
* @author AuroraLS3
* @deprecated PluginData API has been deprecated - see https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API for new API.
* @deprecated PluginData API has been deprecated - see <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API">wiki</a> for new API.
*/
@Deprecated(since = "5.0")
public interface BanData {

View File

@ -20,7 +20,7 @@ package com.djrapitops.plan.data.plugin;
* Enum class for PluginData to estimate the required width of the contained items.
*
* @author AuroraLS3
* @deprecated PluginData API has been deprecated - see https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API for new API.
* @deprecated PluginData API has been deprecated - see <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API">wiki</a> for new API.
*/
@Deprecated
public enum ContainerSize {

View File

@ -33,7 +33,7 @@ import java.util.UUID;
* to register objects extending this class.
*
* @author AuroraLS3
* @deprecated PluginData API has been deprecated - see https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API for new API.
* @deprecated PluginData API has been deprecated - see <a href="https://github.com/plan-player-analytics/Plan/wiki/APIv5---DataExtension-API">wiki</a> for new API.
*/
@Deprecated(since = "5.0")
public abstract class PluginData {

View File

@ -16,6 +16,8 @@
*/
package com.djrapitops.plan.delivery.domain;
import java.util.Objects;
/**
* Object that has a value tied to a date.
*
@ -39,4 +41,25 @@ public class DateObj<T> implements DateHolder {
public T getValue() {
return value;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DateObj<?> dateObj = (DateObj<?>) o;
return getDate() == dateObj.getDate() && Objects.equals(getValue(), dateObj.getValue());
}
@Override
public int hashCode() {
return Objects.hash(getDate(), getValue());
}
@Override
public String toString() {
return "DateObj{" +
"date=" + date +
", value=" + value +
'}';
}
}

View File

@ -0,0 +1,77 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain;
import org.jetbrains.annotations.Nullable;
import java.util.Objects;
/**
* Represents plugin version history.
* <p>
* If version is null the plugin was uninstalled at that time.
*
* @author AuroraLS3
*/
public class PluginHistoryMetadata {
private final String name;
@Nullable
private final String version;
private final long modified;
public PluginHistoryMetadata(String name, @Nullable String version, long modified) {
this.name = name;
this.version = version;
this.modified = modified;
}
public String getName() {
return name;
}
@Nullable
public String getVersion() {
return version;
}
public long getModified() {
return modified;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PluginHistoryMetadata that = (PluginHistoryMetadata) o;
return getModified() == that.getModified() && Objects.equals(getName(), that.getName()) && Objects.equals(getVersion(), that.getVersion());
}
@Override
public int hashCode() {
return Objects.hash(getName(), getVersion(), getModified());
}
@Override
public String toString() {
return "PluginHistoryMetadata{" +
"name='" + name + '\'' +
", version='" + version + '\'' +
", modified=" + modified +
'}';
}
}

View File

@ -18,6 +18,7 @@ package com.djrapitops.plan.delivery.domain;
import com.djrapitops.plan.delivery.domain.mutators.ActivityIndex;
import com.djrapitops.plan.gathering.domain.BaseUser;
import com.djrapitops.plan.gathering.domain.Ping;
import java.util.Objects;
import java.util.Optional;
@ -38,6 +39,7 @@ public class TablePlayer implements Comparable<TablePlayer> {
private Long registered;
private Long lastSeen;
private String geolocation;
private Ping ping;
private boolean banned = false;
@ -87,6 +89,10 @@ public class TablePlayer implements Comparable<TablePlayer> {
return Optional.ofNullable(geolocation);
}
public Ping getPing() {
return ping;
}
public boolean isBanned() {
return banned;
}
@ -111,12 +117,13 @@ public class TablePlayer implements Comparable<TablePlayer> {
lastSeen.equals(that.lastSeen) &&
name.equals(that.name) &&
activityIndex.equals(that.activityIndex) &&
geolocation.equals(that.geolocation);
geolocation.equals(that.geolocation) &&
ping.equals(that.ping);
}
@Override
public int hashCode() {
return Objects.hash(name, activityIndex, activePlaytime, sessionCount, registered, lastSeen, geolocation);
return Objects.hash(name, activityIndex, activePlaytime, sessionCount, registered, lastSeen, geolocation, ping);
}
@Override
@ -130,6 +137,7 @@ public class TablePlayer implements Comparable<TablePlayer> {
", registered=" + registered +
", lastSeen=" + lastSeen +
", geolocation='" + geolocation + '\'' +
", ping='" + ping + '\'' +
", banned=" + banned +
'}';
}
@ -190,6 +198,11 @@ public class TablePlayer implements Comparable<TablePlayer> {
return this;
}
public Builder ping(Ping ping) {
player.ping = ping;
return this;
}
public TablePlayer build() {
return player;
}

View File

@ -1,93 +0,0 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* Object containing webserver security user information.
*
* @author AuroraLS3
* @deprecated Use {@link com.djrapitops.plan.delivery.domain.auth.User} instead
* TODO Rewrite Authentication stuff
*/
@Deprecated(since = "2022-02-12, User.java")
public class WebUser {
private final String username;
private final String saltedPassHash;
private final int permLevel;
public WebUser(String username, String saltedPassHash, int permLevel) {
this.username = username;
this.saltedPassHash = saltedPassHash;
this.permLevel = permLevel;
}
public static List<String> getPermissionsForLevel(int level) {
List<String> permissions = new ArrayList<>();
if (level <= 0) {
permissions.add("page.network");
permissions.add("page.server");
permissions.add("page.debug");
// TODO Add JSON Permissions
}
if (level <= 1) {
permissions.add("page.players");
permissions.add("page.player.other");
}
if (level <= 2) {
permissions.add("page.player.self");
}
return permissions;
}
public String getSaltedPassHash() {
return saltedPassHash;
}
public int getPermLevel() {
return permLevel;
}
public String getName() {
return username;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
WebUser webUser = (WebUser) o;
return permLevel == webUser.permLevel &&
Objects.equals(username, webUser.username) &&
Objects.equals(saltedPassHash, webUser.saltedPassHash);
}
@Override
public int hashCode() {
return Objects.hash(username, saltedPassHash, permLevel);
}
public com.djrapitops.plan.delivery.web.resolver.request.WebUser toNewWebUser() {
return new com.djrapitops.plan.delivery.web.resolver.request.WebUser(
username, getPermissionsForLevel(permLevel).toArray(new String[0])
);
}
}

View File

@ -0,0 +1,59 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.auth;
import java.util.Objects;
/**
* Represents Plan web permission group without permissions or users.
* <p>
* This object is used instead of a String in case more attributes are added in the future.
*
* @author AuroraLS3
*/
public class Group {
private final String name;
public Group(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Group group = (Group) o;
return Objects.equals(getName(), group.getName());
}
@Override
public int hashCode() {
return Objects.hash(getName());
}
@Override
public String toString() {
return "WebGroup{" +
"name='" + name + '\'' +
'}';
}
}

View File

@ -0,0 +1,58 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.auth;
import java.util.List;
import java.util.Objects;
/**
* Represents Plan web permission group listing without associated permissions.
*
* @author AuroraLS3
*/
public class GroupList {
private final List<Group> groups;
public GroupList(List<Group> groups) {
this.groups = groups;
}
public List<Group> getGroups() {
return groups;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
GroupList that = (GroupList) o;
return Objects.equals(getGroups(), that.getGroups());
}
@Override
public int hashCode() {
return Objects.hash(getGroups());
}
@Override
public String toString() {
return "WebGroupList{" +
"groups=" + groups +
'}';
}
}

View File

@ -36,15 +36,15 @@ public class User implements Comparable<User> {
private final String linkedTo;
private final UUID linkedToUUID; // null for 'console'
private final String passwordHash;
private int permissionLevel;
private String permissionGroup;
private final Collection<String> permissions;
public User(@Untrusted String username, String linkedTo, UUID linkedToUUID, String passwordHash, int permissionLevel, Collection<String> permissions) {
public User(@Untrusted String username, String linkedTo, UUID linkedToUUID, String passwordHash, String permissionGroup, Collection<String> permissions) {
this.username = username;
this.linkedTo = linkedTo;
this.linkedToUUID = linkedToUUID;
this.passwordHash = passwordHash;
this.permissionLevel = permissionLevel;
this.permissionGroup = permissionGroup;
this.permissions = permissions;
}
@ -73,20 +73,16 @@ public class User implements Comparable<User> {
return passwordHash;
}
/**
* @deprecated Permission list should be used instead.
*/
@Deprecated(since = "2022-05-04", forRemoval = true)
public int getPermissionLevel() {
return permissionLevel;
public String getPermissionGroup() {
return permissionGroup;
}
/**
* @deprecated Permission list should be used instead.
*/
@Deprecated(since = "2022-05-04", forRemoval = true)
public void setPermissionLevel(int permissionLevel) {
this.permissionLevel = permissionLevel;
public void setPermissionGroup(String permissionGroup) {
this.permissionGroup = permissionGroup;
}
public Collection<String> getPermissions() {
return permissions;
}
@Override
@ -96,7 +92,7 @@ public class User implements Comparable<User> {
", linkedTo='" + linkedTo + '\'' +
", linkedToUUID=" + linkedToUUID +
", passwordHash='" + passwordHash + '\'' +
", permissionLevel=" + permissionLevel +
", permissionGroup=" + permissionGroup +
", permissions=" + permissions +
'}';
}
@ -106,22 +102,22 @@ public class User implements Comparable<User> {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return permissionLevel == user.permissionLevel &&
Objects.equals(username, user.username) &&
return Objects.equals(username, user.username) &&
Objects.equals(linkedTo, user.linkedTo) &&
Objects.equals(linkedToUUID, user.linkedToUUID) &&
Objects.equals(passwordHash, user.passwordHash) &&
Objects.equals(permissionGroup, user.permissionGroup) &&
Objects.equals(permissions, user.permissions);
}
@Override
public int hashCode() {
return Objects.hash(username, linkedTo, linkedToUUID, passwordHash, permissionLevel, permissions);
return Objects.hash(username, linkedTo, linkedToUUID, passwordHash, permissionGroup, permissions);
}
@Override
public int compareTo(User other) {
int comparison = Integer.compare(this.permissionLevel, other.permissionLevel);
int comparison = String.CASE_INSENSITIVE_ORDER.compare(this.permissionGroup, other.permissionGroup);
if (comparison == 0) comparison = String.CASE_INSENSITIVE_ORDER.compare(this.username, other.username);
return comparison;
}

View File

@ -0,0 +1,183 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.auth;
import com.djrapitops.plan.settings.locale.lang.Lang;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.function.Supplier;
/**
* List of web permissions.
*
* @author AuroraLS3
*/
public enum WebPermission implements Supplier<String>, Lang {
PAGE("Controls what is visible on pages"),
PAGE_NETWORK("See all of network page"),
PAGE_NETWORK_OVERVIEW("See Network Overview -tab"),
PAGE_NETWORK_OVERVIEW_NUMBERS("See Network Overview numbers"),
PAGE_NETWORK_OVERVIEW_GRAPHS("See Network Overview graphs"),
PAGE_NETWORK_OVERVIEW_GRAPHS_ONLINE("See Players Online graph"),
PAGE_NETWORK_OVERVIEW_GRAPHS_DAY_BY_DAY("See Day by Day graph"),
PAGE_NETWORK_OVERVIEW_GRAPHS_HOUR_BY_HOUR("See Hour by Hour graph"),
PAGE_NETWORK_OVERVIEW_GRAPHS_CALENDAR("See Network calendar"),
PAGE_NETWORK_SERVER_LIST("See list of servers"),
PAGE_NETWORK_PLAYERBASE("See Playerbase Overview -tab"),
PAGE_NETWORK_PLAYERBASE_OVERVIEW("See Playerbase Overview numbers"),
PAGE_NETWORK_PLAYERBASE_GRAPHS("See Playerbase Overview graphs"),
PAGE_NETWORK_SESSIONS("See Sessions tab"),
PAGE_NETWORK_SESSIONS_OVERVIEW("See Session insights"),
PAGE_NETWORK_SESSIONS_WORLD_PIE("See World Pie graph"),
PAGE_NETWORK_SESSIONS_SERVER_PIE("See Server Pie graph"),
PAGE_NETWORK_SESSIONS_LIST("See list of sessions"),
PAGE_NETWORK_JOIN_ADDRESSES("See Join Addresses -tab"),
PAGE_NETWORK_JOIN_ADDRESSES_GRAPHS("See Join Address graphs"),
@Deprecated
PAGE_NETWORK_JOIN_ADDRESSES_GRAPHS_PIE("See Latest Join Addresses graph", true),
PAGE_NETWORK_JOIN_ADDRESSES_GRAPHS_TIME("See Join Addresses over time graph"),
PAGE_NETWORK_RETENTION("See Player Retention -tab"),
PAGE_NETWORK_GEOLOCATIONS("See Geolocations tab"),
PAGE_NETWORK_GEOLOCATIONS_MAP("See Geolocations Map"),
PAGE_NETWORK_GEOLOCATIONS_PING_PER_COUNTRY("See Ping Per Country table"),
PAGE_NETWORK_PLAYERS("See Player list -tab"),
PAGE_NETWORK_PERFORMANCE("See network Performance tab"),
PAGE_NETWORK_PLUGIN_HISTORY("See Plugin History across the network"),
PAGE_NETWORK_PLUGINS("See Plugins tab of Proxy"),
PAGE_SERVER("See all of server page"),
PAGE_SERVER_OVERVIEW("See Server Overview -tab"),
PAGE_SERVER_OVERVIEW_NUMBERS("See Server Overview numbers"),
PAGE_SERVER_OVERVIEW_PLAYERS_ONLINE_GRAPH("See Players Online graph"),
PAGE_SERVER_ONLINE_ACTIVITY("See Online Activity -tab"),
PAGE_SERVER_ONLINE_ACTIVITY_OVERVIEW("See Online Activity numbers"),
PAGE_SERVER_ONLINE_ACTIVITY_GRAPHS("See Online Activity graphs"),
PAGE_SERVER_ONLINE_ACTIVITY_GRAPHS_DAY_BY_DAY("See Day by Day graph"),
PAGE_SERVER_ONLINE_ACTIVITY_GRAPHS_HOUR_BY_HOUR("See Hour by Hour graph"),
PAGE_SERVER_ONLINE_ACTIVITY_GRAPHS_PUNCHCARD("See Punchcard graph"),
PAGE_SERVER_ONLINE_ACTIVITY_GRAPHS_CALENDAR("See Server calendar"),
PAGE_SERVER_PLAYERBASE("See Playerbase Overview -tab"),
PAGE_SERVER_PLAYERBASE_OVERVIEW("See Playerbase Overview numbers"),
PAGE_SERVER_PLAYERBASE_GRAPHS("See Playerbase Overview graphs"),
PAGE_SERVER_PLAYER_VERSUS("See PvP & PvE -tab"),
PAGE_SERVER_PLAYER_VERSUS_OVERVIEW("See PvP & PvE numbers"),
PAGE_SERVER_PLAYER_VERSUS_KILL_LIST("See Player kill and death lists"),
PAGE_SERVER_PLAYERS("See Player list -tab"),
PAGE_SERVER_SESSIONS("See Sessions tab"),
PAGE_SERVER_SESSIONS_OVERVIEW("See Session insights"),
PAGE_SERVER_SESSIONS_WORLD_PIE("See World Pie graph"),
PAGE_SERVER_SESSIONS_LIST("See list of sessions"),
PAGE_SERVER_JOIN_ADDRESSES("See Join Addresses -tab"),
PAGE_SERVER_JOIN_ADDRESSES_GRAPHS("See Join Address graphs"),
@Deprecated
PAGE_SERVER_JOIN_ADDRESSES_GRAPHS_PIE("See Latest Join Addresses graph", true),
PAGE_SERVER_JOIN_ADDRESSES_GRAPHS_TIME("See Join Addresses over time graph"),
PAGE_SERVER_RETENTION("See Player Retention -tab"),
PAGE_SERVER_GEOLOCATIONS("See Geolocations tab"),
PAGE_SERVER_GEOLOCATIONS_MAP("See Geolocations Map"),
PAGE_SERVER_GEOLOCATIONS_PING_PER_COUNTRY("See Ping Per Country table"),
PAGE_SERVER_PERFORMANCE("See Performance tab"),
PAGE_SERVER_PERFORMANCE_GRAPHS("See Performance graphs"),
PAGE_SERVER_PERFORMANCE_OVERVIEW("See Performance numbers"),
PAGE_SERVER_PLUGIN_HISTORY("See Plugin History"),
PAGE_SERVER_PLUGINS("See Plugins -tabs of servers"),
PAGE_SERVER_ALLOWLIST_BOUNCE("See list of Game allowlist bounces"),
PAGE_PLAYER("See all of player page"),
PAGE_PLAYER_OVERVIEW("See Player Overview -tab"),
PAGE_PLAYER_SESSIONS("See Player Sessions -tab"),
PAGE_PLAYER_VERSUS("See PvP & PvE -tab"),
PAGE_PLAYER_SERVERS("See Servers -tab"),
PAGE_PLAYER_PLUGINS("See Plugins -tabs"),
ACCESS("Controls access to pages"),
ACCESS_PLAYER("Allows accessing any /player pages"),
ACCESS_PLAYER_SELF("Allows accessing own /player page"),
ACCESS_RAW_PLAYER_DATA("Allows accessing /player/{uuid}/raw json data. Follows 'access.player' permissions."),
// Restricting to specific servers: access.server.uuid
ACCESS_SERVER("Allows accessing all /server pages"),
ACCESS_NETWORK("Allows accessing /network page"),
ACCESS_PLAYERS("Allows accessing /players page"),
ACCESS_QUERY("Allows accessing /query and Query results pages"),
ACCESS_ERRORS("Allows accessing /errors page"),
ACCESS_DOCS("Allows accessing /docs page"),
MANAGE_GROUPS("Allows modifying group permissions & Access to /manage/groups page"),
MANAGE_USERS("Allows modifying what users belong to what group");
private final String description;
private final boolean deprecated;
WebPermission(String description) {
this(description, false);
}
WebPermission(String description, boolean deprecated) {
this.description = description;
this.deprecated = deprecated;
}
public String getPermission() {
return StringUtils.lowerCase(name()).replace('_', '.');
}
public boolean isDeprecated() {
return deprecated;
}
@Override
public String get() {
return getPermission();
}
@Override
public String getIdentifier() {
return "HTML - Permission " + name();
}
@Override
public String getKey() {
return "html.manage.permission.description." + name().toLowerCase();
}
@Override
public String getDefault() {
return description;
}
public static WebPermission[] nonDeprecatedValues() {
return Arrays.stream(values())
.filter(Predicate.not(WebPermission::isDeprecated))
.toArray(WebPermission[]::new);
}
public static Optional<WebPermission> findByPermission(String permission) {
String name = StringUtils.upperCase(permission).replace('.', '_');
try {
return Optional.of(valueOf(name));
} catch (IllegalArgumentException noSuchEnum) {
return Optional.empty();
}
}
public static boolean isDeprecated(String permission) {
return findByPermission(permission).map(WebPermission::isDeprecated).orElse(false);
}
}

View File

@ -0,0 +1,58 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.auth;
import java.util.List;
import java.util.Objects;
/**
* Represents a list of web permissions.
*
* @author AuroraLS3
*/
public class WebPermissionList {
private final List<String> permissions;
public WebPermissionList(List<String> permissions) {
this.permissions = permissions;
}
public List<String> getPermissions() {
return permissions;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
WebPermissionList that = (WebPermissionList) o;
return Objects.equals(getPermissions(), that.getPermissions());
}
@Override
public int hashCode() {
return Objects.hash(getPermissions());
}
@Override
public String toString() {
return "PermissionList{" +
"permissions=" + permissions +
'}';
}
}

View File

@ -139,7 +139,6 @@ public interface DataContainer {
/**
* Get formatted Value identified by the Key.
* <p>
*
* @param key Key that identifies the Value
* @param formatter Formatter for the Optional returned by {@link DataContainer#getValue(Key)}

View File

@ -0,0 +1,82 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.datatransfer;
import com.djrapitops.plan.utilities.dev.Untrusted;
import java.util.Objects;
import java.util.UUID;
/**
* Represents an event where player bounced off the whitelist.
*
* @author AuroraLS3
*/
public class AllowlistBounce {
private final UUID playerUUID;
@Untrusted
private final String playerName;
private final int count;
private final long lastTime;
public AllowlistBounce(UUID playerUUID, String playerName, int count, long lastTime) {
this.playerUUID = playerUUID;
this.playerName = playerName;
this.count = count;
this.lastTime = lastTime;
}
public UUID getPlayerUUID() {
return playerUUID;
}
public String getPlayerName() {
return playerName;
}
public int getCount() {
return count;
}
public long getLastTime() {
return lastTime;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AllowlistBounce bounce = (AllowlistBounce) o;
return getCount() == bounce.getCount() && getLastTime() == bounce.getLastTime() && Objects.equals(getPlayerUUID(), bounce.getPlayerUUID()) && Objects.equals(getPlayerName(), bounce.getPlayerName());
}
@Override
public int hashCode() {
return Objects.hash(getPlayerUUID(), getPlayerName(), getCount(), getLastTime());
}
@Override
public String toString() {
return "AllowlistBounce{" +
"playerUUID=" + playerUUID +
", playerName='" + playerName + '\'' +
", count=" + count +
", lastTime=" + lastTime +
'}';
}
}

View File

@ -0,0 +1,67 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.datatransfer;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
/**
* Represents data returned by {@link com.djrapitops.plan.delivery.webserver.resolver.json.PlayerJoinAddressJSONResolver}.
*
* @author AuroraLS3
*/
public class PlayerJoinAddresses {
private final List<String> joinAddresses;
private final Map<UUID, String> joinAddressByPlayer;
public PlayerJoinAddresses(List<String> joinAddresses, Map<UUID, String> joinAddressByPlayer) {
this.joinAddresses = joinAddresses;
this.joinAddressByPlayer = joinAddressByPlayer;
}
public List<String> getJoinAddresses() {
return joinAddresses;
}
public Map<UUID, String> getJoinAddressByPlayer() {
return joinAddressByPlayer;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PlayerJoinAddresses that = (PlayerJoinAddresses) o;
return Objects.equals(getJoinAddresses(), that.getJoinAddresses()) && Objects.equals(getJoinAddressByPlayer(), that.getJoinAddressByPlayer());
}
@Override
public int hashCode() {
return Objects.hash(getJoinAddresses(), getJoinAddressByPlayer());
}
@Override
public String toString() {
return "PlayerJoinAddresses{" +
"joinAddresses=" + joinAddresses +
", joinAddressByPlayer=" + joinAddressByPlayer +
'}';
}
}

View File

@ -0,0 +1,51 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.datatransfer;
import com.djrapitops.plan.delivery.domain.datatransfer.extension.ExtensionDescriptionDto;
import java.util.List;
/**
* @author AuroraLS3
*/
public class PlayerListDto {
private final List<TablePlayerDto> players;
private final List<ExtensionDescriptionDto> extensionDescriptors;
public PlayerListDto(List<TablePlayerDto> players, List<ExtensionDescriptionDto> extensionDescriptors) {
this.players = players;
this.extensionDescriptors = extensionDescriptors;
}
public List<TablePlayerDto> getPlayers() {
return players;
}
public List<ExtensionDescriptionDto> getExtensionDescriptors() {
return extensionDescriptors;
}
@Override
public String toString() {
return "PlayerListDto{" +
"players=" + players +
", extensionDescriptors=" + extensionDescriptors +
'}';
}
}

View File

@ -0,0 +1,60 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.datatransfer;
import com.djrapitops.plan.delivery.domain.PluginHistoryMetadata;
import java.util.List;
import java.util.Objects;
/**
* History of plugin versions, sorted most recent first.
*
* @author AuroraLS3
*/
public class PluginHistoryDto {
private final List<PluginHistoryMetadata> history;
public PluginHistoryDto(List<PluginHistoryMetadata> history) {
this.history = history;
}
public List<PluginHistoryMetadata> getHistory() {
return history;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PluginHistoryDto that = (PluginHistoryDto) o;
return Objects.equals(getHistory(), that.getHistory());
}
@Override
public int hashCode() {
return Objects.hash(getHistory());
}
@Override
public String toString() {
return "PluginHistoryDto{" +
"history=" + history +
'}';
}
}

View File

@ -0,0 +1,211 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* aLong with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.datatransfer;
import com.djrapitops.plan.delivery.domain.datatransfer.extension.ExtensionValueDataDto;
import com.djrapitops.plan.gathering.domain.Ping;
import java.util.Map;
import java.util.UUID;
/**
* Represents a row for players table.
*
* @author AuroraLS3
*/
public class TablePlayerDto {
private UUID playerUUID;
private String playerName;
private double activityIndex;
private Long playtimeActive;
private Long sessionCount;
private Long lastSeen;
private Long registered;
private String country;
private Double pingAverage;
private Integer pingMax;
private Integer pingMin;
private Map<String, ExtensionValueDataDto> extensionValues;
private TablePlayerDto() {
// Builder constructor
}
public static TablePlayerDtoBuilder builder() {
return new TablePlayerDtoBuilder();
}
public String getPlayerName() {
return playerName;
}
private void setPlayerName(String playerName) {
this.playerName = playerName;
}
public double getActivityIndex() {
return activityIndex;
}
private void setActivityIndex(double activityIndex) {
this.activityIndex = activityIndex;
}
public Long getPlaytimeActive() {
return playtimeActive;
}
private void setPlaytimeActive(Long playtimeActive) {
this.playtimeActive = playtimeActive;
}
public Long getSessionCount() {
return sessionCount;
}
private void setSessionCount(Long sessionCount) {
this.sessionCount = sessionCount;
}
public Long getLastSeen() {
return lastSeen;
}
private void setLastSeen(Long lastSeen) {
this.lastSeen = lastSeen;
}
public Long getRegistered() {
return registered;
}
private void setRegistered(Long registered) {
this.registered = registered;
}
public String getCountry() {
return country;
}
private void setCountry(String country) {
this.country = country;
}
public Map<String, ExtensionValueDataDto> getExtensionValues() {
return extensionValues;
}
private void setExtensionValues(Map<String, ExtensionValueDataDto> extensionValues) {
this.extensionValues = extensionValues;
}
public UUID getPlayerUUID() {
return playerUUID;
}
public void setPlayerUUID(UUID playerUUID) {
this.playerUUID = playerUUID;
}
public Double getPingAverage() {
return pingAverage;
}
public void setPingAverage(Double pingAverage) {
this.pingAverage = pingAverage;
}
public Integer getPingMax() {
return pingMax;
}
public void setPingMax(Integer pingMax) {
this.pingMax = pingMax;
}
public Integer getPingMin() {
return pingMin;
}
public void setPingMin(Integer pingMin) {
this.pingMin = pingMin;
}
public static final class TablePlayerDtoBuilder {
private final TablePlayerDto tablePlayerDto;
private TablePlayerDtoBuilder() {tablePlayerDto = new TablePlayerDto();}
public TablePlayerDtoBuilder withUuid(UUID playerUUID) {
tablePlayerDto.setPlayerUUID(playerUUID);
return this;
}
public TablePlayerDtoBuilder withName(String name) {
tablePlayerDto.setPlayerName(name);
return this;
}
public TablePlayerDtoBuilder withActivityIndex(double activityIndex) {
tablePlayerDto.setActivityIndex(activityIndex);
return this;
}
public TablePlayerDtoBuilder withPlaytimeActive(Long playtimeActive) {
tablePlayerDto.setPlaytimeActive(playtimeActive);
return this;
}
public TablePlayerDtoBuilder withSessionCount(Long sessionCount) {
tablePlayerDto.setSessionCount(sessionCount);
return this;
}
public TablePlayerDtoBuilder withLastSeen(Long lastSeen) {
tablePlayerDto.setLastSeen(lastSeen);
return this;
}
public TablePlayerDtoBuilder withRegistered(Long registered) {
tablePlayerDto.setRegistered(registered);
return this;
}
public TablePlayerDtoBuilder withCountry(String country) {
tablePlayerDto.setCountry(country);
return this;
}
public TablePlayerDtoBuilder withExtensionValues(Map<String, ExtensionValueDataDto> extensionValues) {
tablePlayerDto.setExtensionValues(extensionValues);
return this;
}
public TablePlayerDtoBuilder withPing(Ping ping) {
if (ping != null) {
tablePlayerDto.setPingAverage(ping.getAverage());
tablePlayerDto.setPingMax(ping.getMax());
tablePlayerDto.setPingMin(ping.getMin());
}
return this;
}
public TablePlayerDto build() {return tablePlayerDto;}
}
}

View File

@ -16,12 +16,14 @@
*/
package com.djrapitops.plan.delivery.domain.datatransfer.extension;
import com.djrapitops.plan.delivery.formatting.Formatter;
import com.djrapitops.plan.delivery.formatting.Formatters;
import com.djrapitops.plan.extension.FormatType;
import com.djrapitops.plan.extension.implementation.results.ExtensionTabData;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
public class ExtensionTabDataDto {
@ -36,25 +38,29 @@ public class ExtensionTabDataDto {
tableData = extensionTabData.getTableData().stream().map(ExtensionTableDataDto::new).collect(Collectors.toList());
}
private List<ExtensionValueDataDto> constructValues(List<String> order, ExtensionTabData tabData) {
public static Optional<ExtensionValueDataDto> mapToValue(ExtensionTabData tabData, String key) {
Formatters formatters = Formatters.getInstance();
Formatter<Double> decimalFormatter = formatters.decimals();
Formatter<Double> percentageFormatter = formatters.percentage();
Map<FormatType, Formatter<Long>> numberFormatters = new EnumMap<>(FormatType.class);
numberFormatters.put(FormatType.DATE_SECOND, formatters.secondLong());
numberFormatters.put(FormatType.DATE_YEAR, formatters.yearLong());
numberFormatters.put(FormatType.TIME_MILLISECONDS, formatters.timeAmount());
numberFormatters.put(FormatType.NONE, Object::toString);
Optional<ExtensionValueDataDto> booleanValue = tabData.getBoolean(key).map(data -> new ExtensionValueDataDto(data.getDescription(), "BOOLEAN", data.getFormattedValue()));
if (booleanValue.isPresent()) return booleanValue;
Optional<ExtensionValueDataDto> doubleValue = tabData.getDouble(key).map(data -> new ExtensionValueDataDto(data.getDescription(), "DOUBLE", data.getFormattedValue(formatters.decimals())));
if (doubleValue.isPresent()) return doubleValue;
Optional<ExtensionValueDataDto> percentage = tabData.getPercentage(key).map(data -> new ExtensionValueDataDto(data.getDescription(), "PERCENTAGE", data.getFormattedValue(formatters.percentage())));
if (percentage.isPresent()) return percentage;
Optional<ExtensionValueDataDto> number = tabData.getNumber(key).map(data -> new ExtensionValueDataDto(data.getDescription(), data.getFormatType() == FormatType.NONE ? "NUMBER" : data.getFormatType().name(), data.getFormattedValue(formatters.getNumberFormatter(data.getFormatType()))));
if (number.isPresent()) return number;
Optional<ExtensionValueDataDto> string = tabData.getString(key).map(data -> new ExtensionValueDataDto(data.getDescription(), data.isPlayerName() ? "LINK" : "STRING", data.getFormattedValue()));
if (string.isPresent()) return string;
// If component is not found either return empty Optional.
return tabData.getComponent(key).map(data -> new ExtensionValueDataDto(data.getDescription(), "COMPONENT", data.getFormattedValue()));
}
private List<ExtensionValueDataDto> constructValues(List<String> order, ExtensionTabData tabData) {
List<ExtensionValueDataDto> extensionValues = new ArrayList<>();
for (String key : order) {
tabData.getBoolean(key).ifPresent(data -> extensionValues.add(new ExtensionValueDataDto(data.getDescription(), "BOOLEAN", data.getFormattedValue())));
tabData.getDouble(key).ifPresent(data -> extensionValues.add(new ExtensionValueDataDto(data.getDescription(), "DOUBLE", data.getFormattedValue(decimalFormatter))));
tabData.getPercentage(key).ifPresent(data -> extensionValues.add(new ExtensionValueDataDto(data.getDescription(), "PERCENTAGE", data.getFormattedValue(percentageFormatter))));
tabData.getNumber(key).ifPresent(data -> extensionValues.add(new ExtensionValueDataDto(data.getDescription(), data.getFormatType() == FormatType.NONE ? "NUMBER" : data.getFormatType().name(), data.getFormattedValue(numberFormatters.get(data.getFormatType())))));
tabData.getString(key).ifPresent(data -> extensionValues.add(new ExtensionValueDataDto(data.getDescription(), data.isPlayerName() ? "HTML" : "STRING", data.getFormattedValue())));
tabData.getComponent(key).ifPresent(data -> extensionValues.add(new ExtensionValueDataDto(data.getDescription(), "COMPONENT", data.getFormattedValue())));
mapToValue(tabData, key).ifPresent(extensionValues::add);
}
return extensionValues;
}

View File

@ -16,8 +16,11 @@
*/
package com.djrapitops.plan.delivery.domain.datatransfer.extension;
import com.djrapitops.plan.delivery.rendering.html.structure.HtmlTable;
import com.djrapitops.plan.delivery.formatting.Formatters;
import com.djrapitops.plan.delivery.rendering.html.Html;
import com.djrapitops.plan.extension.table.Table;
import com.djrapitops.plan.extension.table.TableColumnFormat;
import org.apache.commons.text.StringEscapeUtils;
import java.util.ArrayList;
import java.util.Arrays;
@ -41,11 +44,48 @@ public class TableDto {
.map(IconDto::new)
.collect(Collectors.toList());
rows = HtmlTable.mapToRows(table.getRows(), table.getTableColumnFormats()).stream()
rows = mapToRows(table.getRows(), table.getTableColumnFormats()).stream()
.map(row -> constructRow(columns, row))
.collect(Collectors.toList());
}
public static List<TableCellDto[]> mapToRows(List<Object[]> rows, TableColumnFormat[] tableColumnFormats) {
return rows.stream()
.map(row -> {
List<TableCellDto> mapped = new ArrayList<>(row.length);
for (int i = 0; i < row.length; i++) {
Object value = row[i];
if (value == null) {
mapped.add(null);
} else {
TableColumnFormat format = tableColumnFormats[i];
mapped.add(new TableCellDto(applyFormat(format, value), value));
}
}
return mapped.toArray(new TableCellDto[0]);
})
.collect(Collectors.toList());
}
public static String applyFormat(TableColumnFormat format, Object value) {
try {
switch (format) {
case TIME_MILLISECONDS:
return Formatters.getInstance().timeAmount().apply(Long.parseLong(value.toString()));
case DATE_YEAR:
return Formatters.getInstance().yearLong().apply(Long.parseLong(value.toString()));
case DATE_SECOND:
return Formatters.getInstance().secondLong().apply(Long.parseLong(value.toString()));
case PLAYER_NAME:
return Html.LINK.create("../player/" + Html.encodeToURL(value.toString()), StringEscapeUtils.escapeHtml4(value.toString()));
default:
return value.toString();
}
} catch (Exception e) {
return Objects.toString(value);
}
}
private List<TableCellDto> constructRow(List<String> columns, TableCellDto[] row) {
List<TableCellDto> constructedRow = new ArrayList<>();

View File

@ -28,15 +28,15 @@ import java.util.Objects;
*/
public class ServerSpecificLineGraph {
private final List<Double[]> points;
private final List<Number[]> points;
private final ServerDto server;
public ServerSpecificLineGraph(List<Double[]> points, ServerDto server) {
public ServerSpecificLineGraph(List<Number[]> points, ServerDto server) {
this.points = points;
this.server = server;
}
public List<Double[]> getPoints() {
public List<Number[]> getPoints() {
return points;
}

View File

@ -0,0 +1,70 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.datatransfer.preferences;
import java.util.Objects;
/**
* @author AuroraLS3
*/
public class GraphThresholds {
private double highThreshold;
private double mediumThreshold;
public GraphThresholds(double highThreshold, double mediumThreshold) {
this.highThreshold = highThreshold;
this.mediumThreshold = mediumThreshold;
}
public double getHighThreshold() {
return highThreshold;
}
public void setHighThreshold(int highThreshold) {
this.highThreshold = highThreshold;
}
public double getMediumThreshold() {
return mediumThreshold;
}
public void setMediumThreshold(int mediumThreshold) {
this.mediumThreshold = mediumThreshold;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
GraphThresholds that = (GraphThresholds) o;
return getHighThreshold() == that.getHighThreshold() && getMediumThreshold() == that.getMediumThreshold();
}
@Override
public int hashCode() {
return Objects.hash(getHighThreshold(), getMediumThreshold());
}
@Override
public String toString() {
return "GraphThresholds{" +
"highThreshold=" + highThreshold +
", mediumThreshold=" + mediumThreshold +
'}';
}
}

View File

@ -0,0 +1,212 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.datatransfer.preferences;
import java.util.Objects;
/**
* @author AuroraLS3
*/
public class Preferences {
private boolean recentDaysInDateFormat;
private String dateFormatFull;
private String dateFormatNoSeconds;
private String dateFormatClock;
private TimeFormat timeFormat;
private String decimalFormat;
private int firstDay;
private String playerHeadImageUrl;
private GraphThresholds tpsThresholds;
private GraphThresholds diskThresholds;
private Preferences() {
}
public static Builder builder() {
return new Preferences.Builder();
}
public boolean isRecentDaysInDateFormat() {
return recentDaysInDateFormat;
}
private void setRecentDaysInDateFormat(boolean recentDaysInDateFormat) {
this.recentDaysInDateFormat = recentDaysInDateFormat;
}
public String getDateFormatFull() {
return dateFormatFull;
}
private void setDateFormatFull(String dateFormatFull) {
this.dateFormatFull = dateFormatFull;
}
public String getDateFormatNoSeconds() {
return dateFormatNoSeconds;
}
private void setDateFormatNoSeconds(String dateFormatNoSeconds) {
this.dateFormatNoSeconds = dateFormatNoSeconds;
}
public String getDateFormatClock() {
return dateFormatClock;
}
private void setDateFormatClock(String dateFormatClock) {
this.dateFormatClock = dateFormatClock;
}
public TimeFormat getTimeFormat() {
return timeFormat;
}
private void setTimeFormat(TimeFormat timeFormat) {
this.timeFormat = timeFormat;
}
public String getDecimalFormat() {
return decimalFormat;
}
private void setDecimalFormat(String decimalFormat) {
this.decimalFormat = decimalFormat;
}
public int getFirstDay() {
return firstDay;
}
private void setFirstDay(int firstDay) {
this.firstDay = firstDay;
}
public String getPlayerHeadImageUrl() {
return playerHeadImageUrl;
}
private void setPlayerHeadImageUrl(String playerHeadImageUrl) {
this.playerHeadImageUrl = playerHeadImageUrl;
}
public GraphThresholds getTpsThresholds() {
return tpsThresholds;
}
private void setTpsThresholds(GraphThresholds tpsThresholds) {
this.tpsThresholds = tpsThresholds;
}
public GraphThresholds getDiskThresholds() {
return diskThresholds;
}
private void setDiskThresholds(GraphThresholds diskThresholds) {
this.diskThresholds = diskThresholds;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Preferences that = (Preferences) o;
return isRecentDaysInDateFormat() == that.isRecentDaysInDateFormat() && getFirstDay() == that.getFirstDay() && Objects.equals(getDateFormatFull(), that.getDateFormatFull()) && Objects.equals(getDateFormatNoSeconds(), that.getDateFormatNoSeconds()) && Objects.equals(getDateFormatClock(), that.getDateFormatClock()) && Objects.equals(getTimeFormat(), that.getTimeFormat()) && Objects.equals(getDecimalFormat(), that.getDecimalFormat()) && Objects.equals(getPlayerHeadImageUrl(), that.getPlayerHeadImageUrl()) && Objects.equals(getTpsThresholds(), that.getTpsThresholds()) && Objects.equals(getDiskThresholds(), that.getDiskThresholds());
}
@Override
public int hashCode() {
return Objects.hash(isRecentDaysInDateFormat(), getDateFormatFull(), getDateFormatNoSeconds(), getDateFormatClock(), getTimeFormat(), getDecimalFormat(), getFirstDay(), getPlayerHeadImageUrl(), getTpsThresholds(), getDiskThresholds());
}
@Override
public String toString() {
return "Preferences{" +
"recentDaysInDateFormat=" + recentDaysInDateFormat +
", dateFormatFull='" + dateFormatFull + '\'' +
", dateFormatNoSeconds='" + dateFormatNoSeconds + '\'' +
", dateFormatClock='" + dateFormatClock + '\'' +
", timeFormat=" + timeFormat +
", decimalFormat='" + decimalFormat + '\'' +
", firstDay=" + firstDay +
", playerHeadImageUrl='" + playerHeadImageUrl + '\'' +
", tpsThresholds=" + tpsThresholds +
", diskThresholds=" + diskThresholds +
'}';
}
public static final class Builder {
private final Preferences preferences;
private Builder() {preferences = new Preferences();}
public Builder withRecentDaysInDateFormat(boolean recentDaysInDateFormat) {
preferences.setRecentDaysInDateFormat(recentDaysInDateFormat);
return this;
}
public Builder withDateFormatFull(String dateFormatFull) {
preferences.setDateFormatFull(dateFormatFull);
return this;
}
public Builder withDateFormatNoSeconds(String dateFormatNoSeconds) {
preferences.setDateFormatNoSeconds(dateFormatNoSeconds);
return this;
}
public Builder withDateFormatClock(String dateFormatClock) {
preferences.setDateFormatClock(dateFormatClock);
return this;
}
public Builder withTimeFormat(TimeFormat timeFormat) {
preferences.setTimeFormat(timeFormat);
return this;
}
public Builder withDecimalFormat(String decimalFormat) {
preferences.setDecimalFormat(decimalFormat);
return this;
}
public Builder withFirstDay(int firstDay) {
preferences.setFirstDay(firstDay);
return this;
}
public Builder withPlayerHeadImageUrl(String playerHeadImageUrl) {
preferences.setPlayerHeadImageUrl(playerHeadImageUrl);
return this;
}
public Builder withTpsThresholds(GraphThresholds tpsThresholds) {
preferences.setTpsThresholds(tpsThresholds);
return this;
}
public Builder withDiskThresholds(GraphThresholds diskThresholds) {
preferences.setDiskThresholds(diskThresholds);
return this;
}
public Preferences build() {return preferences;}
}
}

View File

@ -0,0 +1,210 @@
/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package com.djrapitops.plan.delivery.domain.datatransfer.preferences;
import java.util.Objects;
/**
* @author AuroraLS3
*/
public class TimeFormat {
private String year;
private String years;
private String month;
private String months;
private String day;
private String days;
private String hours;
private String minutes;
private String seconds;
private String zero;
private TimeFormat() {
// Constructor is private for builder
}
public static Builder builder() {
return new Builder();
}
public String getYear() {
return year;
}
private void setYear(String year) {
this.year = year;
}
public String getYears() {
return years;
}
private void setYears(String years) {
this.years = years;
}
public String getMonth() {
return month;
}
private void setMonth(String month) {
this.month = month;
}
public String getMonths() {
return months;
}
private void setMonths(String months) {
this.months = months;
}
public String getDay() {
return day;
}
private void setDay(String day) {
this.day = day;
}
public String getDays() {
return days;
}
private void setDays(String days) {
this.days = days;
}
public String getHours() {
return hours;
}
private void setHours(String hours) {
this.hours = hours;
}
public String getMinutes() {
return minutes;
}
private void setMinutes(String minutes) {
this.minutes = minutes;
}
public String getSeconds() {
return seconds;
}
private void setSeconds(String seconds) {
this.seconds = seconds;
}
public String getZero() {
return zero;
}
private void setZero(String zero) {
this.zero = zero;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
TimeFormat that = (TimeFormat) o;
return Objects.equals(getYear(), that.getYear()) && Objects.equals(getYears(), that.getYears()) && Objects.equals(getMonth(), that.getMonth()) && Objects.equals(getMonths(), that.getMonths()) && Objects.equals(getDay(), that.getDay()) && Objects.equals(getDays(), that.getDays()) && Objects.equals(getHours(), that.getHours()) && Objects.equals(getMinutes(), that.getMinutes()) && Objects.equals(getSeconds(), that.getSeconds()) && Objects.equals(getZero(), that.getZero());
}
@Override
public int hashCode() {
return Objects.hash(getYear(), getYears(), getMonth(), getMonths(), getDay(), getDays(), getHours(), getMinutes(), getSeconds(), getZero());
}
@Override
public String toString() {
return "TimeFormat{" +
"year='" + year + '\'' +
", years='" + years + '\'' +
", month='" + month + '\'' +
", months='" + months + '\'' +
", day='" + day + '\'' +
", days='" + days + '\'' +
", hours='" + hours + '\'' +
", minutes='" + minutes + '\'' +
", seconds='" + seconds + '\'' +
", zero='" + zero + '\'' +
'}';
}
public static final class Builder {
private final TimeFormat timeFormat;
private Builder() {timeFormat = new TimeFormat();}
public Builder withYear(String year) {
timeFormat.setYear(year);
return this;
}
public Builder withYears(String years) {
timeFormat.setYears(years);
return this;
}
public Builder withMonth(String month) {
timeFormat.setMonth(month);
return this;
}
public Builder withMonths(String months) {
timeFormat.setMonths(months);
return this;
}
public Builder withDay(String day) {
timeFormat.setDay(day);
return this;
}
public Builder withDays(String days) {
timeFormat.setDays(days);
return this;
}
public Builder withHours(String hours) {
timeFormat.setHours(hours);
return this;
}
public Builder withMinutes(String minutes) {
timeFormat.setMinutes(minutes);
return this;
}
public Builder withSeconds(String seconds) {
timeFormat.setSeconds(seconds);
return this;
}
public Builder withZero(String zero) {
timeFormat.setZero(zero);
return this;
}
public TimeFormat build() {return timeFormat;}
}
}

View File

@ -38,15 +38,16 @@ import java.util.concurrent.TimeUnit;
* <p>
* Activity for a single week is calculated using {@code A(t) = (1 / (pi/2 * (t/T) + 1))}.
* A(t) is based on function f(x) = 1 / (x + 1), which has property f(0) = 1, decreasing from there, but not in a straight line.
* You can see the function plotted here https://www.wolframalpha.com/input/?i=1+%2F+(x%2B1)+from+-1+to+2
* You can see the function plotted <a href="https://www.wolframalpha.com/input/?i=1+%2F+(x%2B1)+from+-1+to+2">here</a>
* <p>
* To fine tune the curve pi/2 is used since it felt like a good curve.
* <p>
* Activity index A is calculated by using the formula:
* {@code A = 5 - 5 * [A(t1) + A(t2) + A(t3)] / 3}
* <p>
* <a href="https://www.wolframalpha.com/input/?i=plot+y+%3D+5+-+5+*+(1+%2F+(pi%2F2+*+x%2B1))+and+y+%3D1+and+y+%3D+2+and+y+%3D+3+and+y+%3D+3.75+from+-0.5+to+3">
* Plot for A and limits
* https://www.wolframalpha.com/input/?i=plot+y+%3D+5+-+5+*+(1+%2F+(pi%2F2+*+x%2B1))+and+y+%3D1+and+y+%3D+2+and+y+%3D+3+and+y+%3D+3.75+from+-0.5+to+3
* </a>
* <p>
* New Limits for A would thus be
* {@code < 1: Inactive}
@ -90,6 +91,16 @@ public class ActivityIndex {
return getGroups(null);
}
public static String[] getDefaultGroupLangKeys() {
return new String[]{
HtmlLang.INDEX_VERY_ACTIVE.getKey(),
HtmlLang.INDEX_ACTIVE.getKey(),
HtmlLang.INDEX_REGULAR.getKey(),
HtmlLang.INDEX_IRREGULAR.getKey(),
HtmlLang.INDEX_INACTIVE.getKey()
};
}
public static String[] getGroups(Locale locale) {
if (locale == null) {
return new String[]{
@ -158,24 +169,32 @@ public class ActivityIndex {
return Math.abs(Math.log(other.value) - Math.log(value));
}
public static String getGroup(double value) {
public static HtmlLang getGroupLang(double value) {
if (value >= VERY_ACTIVE) {
return HtmlLang.INDEX_VERY_ACTIVE.getDefault();
return HtmlLang.INDEX_VERY_ACTIVE;
} else if (value >= ACTIVE) {
return HtmlLang.INDEX_ACTIVE.getDefault();
return HtmlLang.INDEX_ACTIVE;
} else if (value >= REGULAR) {
return HtmlLang.INDEX_REGULAR.getDefault();
return HtmlLang.INDEX_REGULAR;
} else if (value >= IRREGULAR) {
return HtmlLang.INDEX_IRREGULAR.getDefault();
return HtmlLang.INDEX_IRREGULAR;
} else {
return HtmlLang.INDEX_INACTIVE.getDefault();
return HtmlLang.INDEX_INACTIVE;
}
}
public static String getGroup(double value) {
return getGroupLang(value).getDefault();
}
public String getGroup() {
return getGroup(value);
}
public String getGroupLang() {
return getGroupLang(value).getKey();
}
public String getGroup(Locale locale) {
if (value >= VERY_ACTIVE) {
return locale.getString(HtmlLang.INDEX_VERY_ACTIVE);

View File

@ -20,7 +20,6 @@ import com.djrapitops.plan.identification.Server;
import com.djrapitops.plan.identification.ServerInfo;
import com.djrapitops.plan.settings.config.PlanConfig;
import com.djrapitops.plan.settings.config.paths.ExportSettings;
import com.djrapitops.plan.settings.config.paths.PluginSettings;
import com.djrapitops.plan.storage.database.DBSystem;
import com.djrapitops.plan.storage.database.Database;
import com.djrapitops.plan.storage.database.queries.objects.ServerQueries;
@ -86,11 +85,6 @@ public class ExportScheduler extends PluginRunnable {
}
private void scheduleReactExport() {
if (config.isTrue(PluginSettings.LEGACY_FRONTEND) ||
config.isFalse(ExportSettings.SERVER_PAGE) &&
config.isFalse(ExportSettings.PLAYER_PAGES) &&
config.isFalse(ExportSettings.PLAYERS_PAGE)) {return;}
runnableFactory.create(
new ExportTask(exporter, Exporter::exportReact, errorLogger)
).runTaskLaterAsynchronously(TimeAmount.toTicks(5, TimeUnit.SECONDS));

View File

@ -166,6 +166,12 @@ public class Exporter extends FileExporter {
}
public void exportReact() throws ExportException {
if (config.isFalse(ExportSettings.PLAYER_PAGES)
&& config.isFalse(ExportSettings.SERVER_PAGE)
&& config.isFalse(ExportSettings.PLAYERS_PAGE)) {
return;
}
Path toDirectory = config.getPageExportPath();
try {

View File

@ -16,23 +16,16 @@
*/
package com.djrapitops.plan.delivery.export;
import com.djrapitops.plan.delivery.rendering.pages.Page;
import com.djrapitops.plan.delivery.rendering.pages.PageFactory;
import com.djrapitops.plan.delivery.web.ResourceService;
import com.djrapitops.plan.delivery.web.resolver.Response;
import com.djrapitops.plan.delivery.web.resolver.exception.NotFoundException;
import com.djrapitops.plan.delivery.web.resolver.request.Request;
import com.djrapitops.plan.delivery.web.resource.WebResource;
import com.djrapitops.plan.delivery.webserver.resolver.json.RootJSONResolver;
import com.djrapitops.plan.exceptions.WebUserAuthException;
import com.djrapitops.plan.identification.Server;
import com.djrapitops.plan.settings.config.PlanConfig;
import com.djrapitops.plan.settings.config.paths.PluginSettings;
import com.djrapitops.plan.settings.theme.Theme;
import com.djrapitops.plan.storage.database.DBSystem;
import com.djrapitops.plan.storage.database.Database;
import com.djrapitops.plan.storage.file.PlanFiles;
import com.djrapitops.plan.storage.file.Resource;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringEscapeUtils;
@ -54,25 +47,19 @@ public class NetworkPageExporter extends FileExporter {
private final PlanFiles files;
private final PlanConfig config;
private final DBSystem dbSystem;
private final PageFactory pageFactory;
private final RootJSONResolver jsonHandler;
private final Theme theme;
@Inject
public NetworkPageExporter(
PlanFiles files,
PlanConfig config,
DBSystem dbSystem,
PageFactory pageFactory,
RootJSONResolver jsonHandler,
Theme theme
RootJSONResolver jsonHandler
) {
this.files = files;
this.config = config;
this.dbSystem = dbSystem;
this.pageFactory = pageFactory;
this.jsonHandler = jsonHandler;
this.theme = theme;
}
/**
@ -89,35 +76,10 @@ public class NetworkPageExporter extends FileExporter {
ExportPaths exportPaths = new ExportPaths();
exportPaths.put("./players", toRelativePathFromRoot("players"));
exportRequiredResources(exportPaths, toDirectory);
exportJSON(exportPaths, toDirectory, server);
exportHtml(exportPaths, toDirectory);
exportReactRedirects(toDirectory);
}
private void exportHtml(ExportPaths exportPaths, Path toDirectory) throws IOException {
if (config.isFalse(PluginSettings.LEGACY_FRONTEND)) return;
Path to = toDirectory
.resolve("network")
.resolve("index.html");
Page page = pageFactory.networkPage();
// Fixes refreshingJsonRequest ignoring old data of export
String html = StringUtils.replaceEach(page.toHtml(),
new String[]{"loadPlayersOnlineGraph, 'network-overview', true);",
"&middot; Performance",
"<head>"
},
new String[]{"loadPlayersOnlineGraph, 'network-overview');",
"&middot; Performance (Unavailable with Export)",
"<head><style>.refresh-element {display: none;}</style>"
});
export(to, exportPaths.resolveExportPaths(html));
}
public static String[] getRedirections() {
return new String[]{
"network",
@ -134,8 +96,6 @@ public class NetworkPageExporter extends FileExporter {
}
private void exportReactRedirects(Path toDirectory) throws IOException {
if (config.isTrue(PluginSettings.LEGACY_FRONTEND)) return;
exportReactRedirects(toDirectory, files, config, getRedirections());
}
@ -161,16 +121,17 @@ public class NetworkPageExporter extends FileExporter {
"graph?type=uniqueAndNew",
"graph?type=hourlyUniqueAndNew",
"graph?type=serverPie",
"graph?type=joinAddressPie",
"graph?type=joinAddressByDay",
"graph?type=activity",
"graph?type=geolocation",
"graph?type=uniqueAndNew",
"graph?type=serverCalendar",
"network/pingTable",
"sessions",
"extensionData?server=" + serverUUID,
"retention",
"joinAddresses"
"joinAddresses",
"playersTable"
);
}
@ -210,75 +171,6 @@ public class NetworkPageExporter extends FileExporter {
}
}
private void exportRequiredResources(ExportPaths exportPaths, Path toDirectory) throws IOException {
if (config.isFalse(PluginSettings.LEGACY_FRONTEND)) return;
exportResources(exportPaths, toDirectory,
"./img/Flaticon_circle.png",
"./css/sb-admin-2.css",
"./css/style.css",
"./css/noauth.css",
"./vendor/datatables/datatables.min.js",
"./vendor/datatables/datatables.min.css",
"./vendor/highcharts/modules/map.js",
"./vendor/highcharts/mapdata/world.js",
"./vendor/highcharts/modules/drilldown.js",
"./vendor/highcharts/highcharts.js",
"./vendor/highcharts/modules/no-data-to-display.js",
"./vendor/masonry/masonry.pkgd.min.js",
"./vendor/fontawesome-free/css/all.min.css",
"./vendor/fontawesome-free/webfonts/fa-brands-400.eot",
"./vendor/fontawesome-free/webfonts/fa-brands-400.ttf",
"./vendor/fontawesome-free/webfonts/fa-brands-400.woff",
"./vendor/fontawesome-free/webfonts/fa-brands-400.woff2",
"./vendor/fontawesome-free/webfonts/fa-regular-400.eot",
"./vendor/fontawesome-free/webfonts/fa-regular-400.ttf",
"./vendor/fontawesome-free/webfonts/fa-regular-400.woff",
"./vendor/fontawesome-free/webfonts/fa-regular-400.woff2",
"./vendor/fontawesome-free/webfonts/fa-solid-900.eot",
"./vendor/fontawesome-free/webfonts/fa-solid-900.ttf",
"./vendor/fontawesome-free/webfonts/fa-solid-900.woff",
"./vendor/fontawesome-free/webfonts/fa-solid-900.woff2",
"./js/domUtils.js",
"./js/sb-admin-2.js",
"./js/xmlhttprequests.js",
"./js/color-selector.js",
"./js/sessionAccordion.js",
"./js/pingTable.js",
"./js/graphs.js",
"./js/network-values.js"
);
}
private void exportResources(ExportPaths exportPaths, Path toDirectory, String... resourceNames) throws IOException {
for (String resourceName : resourceNames) {
String nonRelativePath = toNonRelativePath(resourceName);
exportResource(toDirectory, nonRelativePath);
exportPaths.put(resourceName, toRelativePathFromRoot(nonRelativePath));
}
}
private void exportResource(Path toDirectory, String resourceName) throws IOException {
WebResource resource = ResourceService.getInstance().getResource("Plan", resourceName,
() -> files.getResourceFromJar("web/" + resourceName).asWebResource());
Path to = toDirectory.resolve(resourceName);
if (resourceName.endsWith(".css") || resourceName.endsWith("color-selector.js")) {
export(to, theme.replaceThemeColors(resource.asString()));
} else if ("js/network-values.js".equalsIgnoreCase(resourceName) || "js/sessionAccordion.js".equalsIgnoreCase(resourceName)) {
String relativePlayerLink = toRelativePathFromRoot("player");
String relativeServerLink = toRelativePathFromRoot("server/");
export(to, StringUtils.replaceEach(resource.asString(),
new String[]{"../player", "./player", "./server/", "server/"},
new String[]{relativePlayerLink, relativePlayerLink, relativeServerLink, relativeServerLink}
));
} else if (Resource.isTextResource(resourceName)) {
export(to, resource.asString());
} else {
export(to, resource);
}
}
private String toRelativePathFromRoot(String resourceName) {
// Network html is exported at /network//index.html or /server/index.html
return "../" + toNonRelativePath(resourceName);

View File

@ -16,25 +16,16 @@
*/
package com.djrapitops.plan.delivery.export;
import com.djrapitops.plan.delivery.domain.container.PlayerContainer;
import com.djrapitops.plan.delivery.rendering.pages.Page;
import com.djrapitops.plan.delivery.rendering.pages.PageFactory;
import com.djrapitops.plan.delivery.web.ResourceService;
import com.djrapitops.plan.delivery.web.resolver.Response;
import com.djrapitops.plan.delivery.web.resolver.exception.NotFoundException;
import com.djrapitops.plan.delivery.web.resolver.request.Request;
import com.djrapitops.plan.delivery.web.resource.WebResource;
import com.djrapitops.plan.delivery.webserver.resolver.json.RootJSONResolver;
import com.djrapitops.plan.exceptions.WebUserAuthException;
import com.djrapitops.plan.settings.config.PlanConfig;
import com.djrapitops.plan.settings.config.paths.PluginSettings;
import com.djrapitops.plan.settings.theme.Theme;
import com.djrapitops.plan.storage.database.DBSystem;
import com.djrapitops.plan.storage.database.Database;
import com.djrapitops.plan.storage.database.queries.PlayerFetchQueries;
import com.djrapitops.plan.storage.database.queries.containers.ContainerFetchQueries;
import com.djrapitops.plan.storage.file.PlanFiles;
import com.djrapitops.plan.storage.file.Resource;
import org.apache.commons.lang3.StringUtils;
import javax.inject.Inject;
@ -56,25 +47,19 @@ public class PlayerPageExporter extends FileExporter {
private final PlanFiles files;
private final PlanConfig config;
private final DBSystem dbSystem;
private final PageFactory pageFactory;
private final RootJSONResolver jsonHandler;
private final Theme theme;
@Inject
public PlayerPageExporter(
PlanFiles files,
PlanConfig config,
DBSystem dbSystem,
PageFactory pageFactory,
RootJSONResolver jsonHandler,
Theme theme
RootJSONResolver jsonHandler
) {
this.files = files;
this.config = config;
this.dbSystem = dbSystem;
this.pageFactory = pageFactory;
this.jsonHandler = jsonHandler;
this.theme = theme;
}
public static String[] getRedirections(UUID playerUUID) {
@ -106,33 +91,14 @@ public class PlayerPageExporter extends FileExporter {
ExportPaths exportPaths = new ExportPaths();
exportPaths.put("../network", toRelativePathFromRoot("network"));
exportPaths.put("../server/", toRelativePathFromRoot("server"));
exportRequiredResources(exportPaths, toDirectory);
Path playerDirectory = toDirectory.resolve("player/" + toFileName(playerUUID.toString()));
exportJSON(exportPaths, playerDirectory, playerUUID);
exportHtml(exportPaths, playerDirectory, playerUUID);
exportReactRedirects(toDirectory, playerUUID);
exportPaths.clear();
}
private void exportHtml(ExportPaths exportPaths, Path playerDirectory, UUID playerUUID) throws IOException {
if (config.isFalse(PluginSettings.LEGACY_FRONTEND)) return;
Path to = playerDirectory.resolve("index.html");
try {
Database db = dbSystem.getDatabase();
PlayerContainer player = db.query(ContainerFetchQueries.fetchPlayerContainer(playerUUID));
Page page = pageFactory.playerPage(player);
export(to, exportPaths.resolveExportPaths(page.toHtml()));
} catch (IllegalStateException notFound) {
throw new NotFoundException(notFound.getMessage());
}
}
private void exportReactRedirects(Path toDirectory, UUID playerUUID) throws IOException {
if (config.isTrue(PluginSettings.LEGACY_FRONTEND)) return;
exportReactRedirects(toDirectory, files, config, getRedirections(playerUUID));
}
@ -163,70 +129,6 @@ public class PlayerPageExporter extends FileExporter {
}
}
private void exportRequiredResources(ExportPaths exportPaths, Path toDirectory) throws IOException {
if (config.isFalse(PluginSettings.LEGACY_FRONTEND)) return;
// Style
exportResources(exportPaths, toDirectory,
"../img/Flaticon_circle.png",
"../css/sb-admin-2.css",
"../css/style.css",
"../css/noauth.css",
"../vendor/datatables/datatables.min.js",
"../vendor/datatables/datatables.min.css",
"../vendor/highcharts/modules/map.js",
"../vendor/highcharts/mapdata/world.js",
"../vendor/highcharts/modules/drilldown.js",
"../vendor/highcharts/highcharts.js",
"../vendor/highcharts/modules/no-data-to-display.js",
"../vendor/fullcalendar/fullcalendar.min.css",
"../vendor/momentjs/moment.js",
"../vendor/masonry/masonry.pkgd.min.js",
"../vendor/fullcalendar/fullcalendar.min.js",
"../vendor/fontawesome-free/css/all.min.css",
"../vendor/fontawesome-free/webfonts/fa-brands-400.eot",
"../vendor/fontawesome-free/webfonts/fa-brands-400.ttf",
"../vendor/fontawesome-free/webfonts/fa-brands-400.woff",
"../vendor/fontawesome-free/webfonts/fa-brands-400.woff2",
"../vendor/fontawesome-free/webfonts/fa-regular-400.eot",
"../vendor/fontawesome-free/webfonts/fa-regular-400.ttf",
"../vendor/fontawesome-free/webfonts/fa-regular-400.woff",
"../vendor/fontawesome-free/webfonts/fa-regular-400.woff2",
"../vendor/fontawesome-free/webfonts/fa-solid-900.eot",
"../vendor/fontawesome-free/webfonts/fa-solid-900.ttf",
"../vendor/fontawesome-free/webfonts/fa-solid-900.woff",
"../vendor/fontawesome-free/webfonts/fa-solid-900.woff2",
"../js/sb-admin-2.js",
"../js/xmlhttprequests.js",
"../js/color-selector.js",
"../js/sessionAccordion.js",
"../js/graphs.js",
"../js/player-values.js"
);
}
private void exportResources(ExportPaths exportPaths, Path toDirectory, String... resourceNames) throws IOException {
for (String resourceName : resourceNames) {
String nonRelativePath = toNonRelativePath(resourceName);
exportResource(toDirectory, nonRelativePath);
exportPaths.put(resourceName, toRelativePathFromRoot(nonRelativePath));
}
}
private void exportResource(Path toDirectory, String resourceName) throws IOException {
WebResource resource = ResourceService.getInstance().getResource("Plan", resourceName,
() -> files.getResourceFromJar("web/" + resourceName).asWebResource());
Path to = toDirectory.resolve(resourceName);
if (resourceName.endsWith(".css") || resourceName.endsWith("color-selector.js")) {
export(to, theme.replaceThemeColors(resource.asString()));
} else if (Resource.isTextResource(resourceName)) {
export(to, resource.asString());
} else {
export(to, resource);
}
}
private String toRelativePathFromRoot(String resourceName) {
// Player html is exported at /player/<uuid>/index.html
return "../../" + toNonRelativePath(resourceName);

View File

@ -16,23 +16,16 @@
*/
package com.djrapitops.plan.delivery.export;
import com.djrapitops.plan.delivery.rendering.pages.Page;
import com.djrapitops.plan.delivery.rendering.pages.PageFactory;
import com.djrapitops.plan.delivery.web.ResourceService;
import com.djrapitops.plan.delivery.web.resolver.Response;
import com.djrapitops.plan.delivery.web.resolver.exception.NotFoundException;
import com.djrapitops.plan.delivery.web.resolver.request.Request;
import com.djrapitops.plan.delivery.web.resource.WebResource;
import com.djrapitops.plan.delivery.webserver.resolver.json.RootJSONResolver;
import com.djrapitops.plan.exceptions.WebUserAuthException;
import com.djrapitops.plan.identification.ServerInfo;
import com.djrapitops.plan.settings.config.PlanConfig;
import com.djrapitops.plan.settings.config.paths.PluginSettings;
import com.djrapitops.plan.settings.theme.Theme;
import com.djrapitops.plan.storage.database.DBSystem;
import com.djrapitops.plan.storage.database.Database;
import com.djrapitops.plan.storage.file.PlanFiles;
import com.djrapitops.plan.storage.file.Resource;
import org.apache.commons.lang3.StringUtils;
import javax.inject.Inject;
@ -53,28 +46,23 @@ public class PlayersPageExporter extends FileExporter {
private final PlanFiles files;
private final PlanConfig config;
private final DBSystem dbSystem;
private final PageFactory pageFactory;
private final RootJSONResolver jsonHandler;
private final Theme theme;
private final ServerInfo serverInfo;
private final ExportPaths exportPaths;
private static final String PLAYERS_TABLE = "playersTable";
@Inject
public PlayersPageExporter(
PlanFiles files,
PlanConfig config, DBSystem dbSystem,
PageFactory pageFactory,
RootJSONResolver jsonHandler,
Theme theme,
ServerInfo serverInfo
) {
this.files = files;
this.config = config;
this.dbSystem = dbSystem;
this.pageFactory = pageFactory;
this.jsonHandler = jsonHandler;
this.theme = theme;
this.serverInfo = serverInfo;
exportPaths = new ExportPaths();
@ -85,121 +73,42 @@ public class PlayersPageExporter extends FileExporter {
if (dbState == Database.State.CLOSED || dbState == Database.State.CLOSING) return;
exportPaths.put("href=\"/\"", "href=\"" + toRelativePathFromRoot(serverInfo.getServer().isProxy() ? "network" : "server") + '"');
exportRequiredResources(toDirectory);
exportJSON(toDirectory);
exportHtml(toDirectory);
exportReactRedirects(toDirectory);
exportPaths.clear();
}
private void exportHtml(Path toDirectory) throws IOException {
if (config.isFalse(PluginSettings.LEGACY_FRONTEND)) return;
Path to = toDirectory
.resolve("players")
.resolve("index.html");
Page page = pageFactory.playersPage();
// Fixes refreshingJsonRequest ignoring old data of export
String html = StringUtils.replaceEach(page.toHtml(),
new String[]{
"}, 'playerlist', true);",
"<head>"
},
new String[]{
"}, 'playerlist');",
"<head><style>.refresh-element {display: none;}</style>"
});
export(to, exportPaths.resolveExportPaths(html));
}
private void exportReactRedirects(Path toDirectory) throws IOException {
if (config.isTrue(PluginSettings.LEGACY_FRONTEND)) return;
String[] redirections = {"players"};
exportReactRedirects(toDirectory, files, config, redirections);
}
private void exportJSON(Path toDirectory) throws IOException {
Response response = getJSONResponse("players")
Response response = getJSONResponse()
.orElseThrow(() -> new NotFoundException("players page was not properly exported: not found"));
String jsonResourceName = toFileName(toJSONResourceName("players")) + ".json";
String jsonResourceName = toFileName(toJSONResourceName()) + ".json";
export(toDirectory.resolve("data").resolve(jsonResourceName),
// Replace ../player in urls to fix player page links
StringUtils.replace(response.getAsString(), "../player", toRelativePathFromRoot("player"))
);
exportPaths.put("./v1/players", toRelativePathFromRoot("data/" + jsonResourceName));
exportPaths.put("./v1/" + PLAYERS_TABLE, toRelativePathFromRoot("data/" + jsonResourceName));
}
private String toJSONResourceName(String resource) {
return StringUtils.replaceEach(resource, new String[]{"?", "&", "type=", "server="}, new String[]{"-", "_", "", ""});
private String toJSONResourceName() {
return StringUtils.replaceEach(PLAYERS_TABLE, new String[]{"?", "&", "type=", "server="}, new String[]{"-", "_", "", ""});
}
private Optional<Response> getJSONResponse(String resource) {
private Optional<Response> getJSONResponse() {
try {
return jsonHandler.getResolver().resolve(new Request("GET", "/v1/" + resource, null, Collections.emptyMap()));
return jsonHandler.getResolver().resolve(new Request("GET", "/v1/" + PLAYERS_TABLE, null, Collections.emptyMap()));
} catch (WebUserAuthException e) {
// The rest of the exceptions should not be thrown
throw new IllegalStateException("Unexpected exception thrown: " + e.toString(), e);
}
}
private void exportRequiredResources(Path toDirectory) throws IOException {
if (config.isFalse(PluginSettings.LEGACY_FRONTEND)) return;
// Style
exportResources(toDirectory,
"img/Flaticon_circle.png",
"css/sb-admin-2.css",
"css/style.css",
"css/noauth.css",
"vendor/datatables/datatables.min.js",
"vendor/datatables/datatables.min.css",
"vendor/fontawesome-free/css/all.min.css",
"vendor/fontawesome-free/webfonts/fa-brands-400.eot",
"vendor/fontawesome-free/webfonts/fa-brands-400.ttf",
"vendor/fontawesome-free/webfonts/fa-brands-400.woff",
"vendor/fontawesome-free/webfonts/fa-brands-400.woff2",
"vendor/fontawesome-free/webfonts/fa-regular-400.eot",
"vendor/fontawesome-free/webfonts/fa-regular-400.ttf",
"vendor/fontawesome-free/webfonts/fa-regular-400.woff",
"vendor/fontawesome-free/webfonts/fa-regular-400.woff2",
"vendor/fontawesome-free/webfonts/fa-solid-900.eot",
"vendor/fontawesome-free/webfonts/fa-solid-900.ttf",
"vendor/fontawesome-free/webfonts/fa-solid-900.woff",
"vendor/fontawesome-free/webfonts/fa-solid-900.woff2",
"js/sb-admin-2.js",
"js/xmlhttprequests.js",
"js/color-selector.js"
);
}
private void exportResources(Path toDirectory, String... resourceNames) throws IOException {
for (String resourceName : resourceNames) {
exportResource(toDirectory, resourceName);
}
}
private void exportResource(Path toDirectory, String resourceName) throws IOException {
WebResource resource = ResourceService.getInstance().getResource("Plan", resourceName,
() -> files.getResourceFromJar("web/" + resourceName).asWebResource());
Path to = toDirectory.resolve(resourceName);
if (resourceName.endsWith(".css") || resourceName.endsWith("color-selector.js")) {
export(to, theme.replaceThemeColors(resource.asString()));
} else if (Resource.isTextResource(resourceName)) {
export(to, resource.asString());
} else {
export(to, resource);
}
exportPaths.put(resourceName, toRelativePathFromRoot(resourceName));
}
private String toRelativePathFromRoot(String resourceName) {
// Players html is exported at /players/index.html or /server/index.html
return "../" + toNonRelativePath(resourceName);

View File

@ -16,6 +16,7 @@
*/
package com.djrapitops.plan.delivery.export;
import com.djrapitops.plan.delivery.rendering.BundleAddressCorrection;
import com.djrapitops.plan.delivery.web.AssetVersions;
import com.djrapitops.plan.delivery.web.resolver.Response;
import com.djrapitops.plan.delivery.web.resolver.request.Request;
@ -52,23 +53,25 @@ public class ReactExporter extends FileExporter {
private final PlanConfig config;
private final RootJSONResolver jsonHandler;
private final AssetVersions assetVersions;
private final BundleAddressCorrection bundleAddressCorrection;
@Inject
public ReactExporter(
PlanFiles files,
PlanConfig config,
RootJSONResolver jsonHandler,
AssetVersions assetVersions
AssetVersions assetVersions,
BundleAddressCorrection bundleAddressCorrection
) {
this.files = files;
this.config = config;
this.jsonHandler = jsonHandler;
this.assetVersions = assetVersions;
this.bundleAddressCorrection = bundleAddressCorrection;
}
public void exportReactFiles(Path toDirectory) throws IOException {
exportIndexHtml(toDirectory);
exportAsset(toDirectory, "asset-manifest.json");
exportAsset(toDirectory, "favicon.ico");
exportAsset(toDirectory, "logo192.png");
exportAsset(toDirectory, "logo512.png");
@ -84,6 +87,7 @@ public class ReactExporter extends FileExporter {
exportJson(toDirectory, "metadata");
exportJson(toDirectory, "version");
exportJson(toDirectory, "networkMetadata");
exportJson(toDirectory, "preferences");
}
private void exportLocaleJson(Path toDirectory) throws IOException {
@ -103,17 +107,18 @@ public class ReactExporter extends FileExporter {
Path to = toDirectory.resolve(path);
Resource resource = files.getResourceFromJar("web/" + path);
// Make static asset loading work with subdirectory addresses
if (path.endsWith(".css") || "asset-manifest.json".equals(path)) {
if (path.endsWith(".css")) {
String contents = resource.asString();
String withReplacedStatic = StringUtils.replace(contents, "/static", getBasePath() + "/static");
export(to, withReplacedStatic);
String withReplaced = bundleAddressCorrection.correctAddressForExport(contents, path);
export(to, withReplaced);
} else if (path.endsWith(".js")) {
String withReplacedConstants = StringUtils.replaceEach(
resource.asString(),
new String[]{"PLAN_BASE_ADDRESS", "PLAN_EXPORTED_VERSION", ".p=\"/\""},
new String[]{config.get(WebserverSettings.EXTERNAL_LINK), "true", ".p=\"" + getBasePath() + "/\""}
new String[]{"PLAN_BASE_ADDRESS", "PLAN_EXPORTED_VERSION"},
new String[]{config.get(WebserverSettings.EXTERNAL_LINK), "true"}
);
export(to, withReplacedConstants);
String withReplaced = bundleAddressCorrection.correctAddressForExport(withReplacedConstants, path);
export(to, withReplaced);
} else {
export(to, resource);
}
@ -140,25 +145,11 @@ public class ReactExporter extends FileExporter {
private void exportIndexHtml(Path toDirectory) throws IOException {
String contents = files.getResourceFromJar("web/index.html")
.asString();
String basePath = getBasePath();
contents = StringUtils.replaceEach(contents,
new String[]{"/static", "/pageExtensionApi.js"},
new String[]{basePath + "/static", basePath + "/pageExtensionApi.js"});
contents = bundleAddressCorrection.correctAddressForExport(contents, "index.html");
export(toDirectory.resolve("index.html"), contents);
}
private String getBasePath() {
String basePath = config.get(WebserverSettings.EXTERNAL_LINK)
.replace("http://", "")
.replace("https://", "");
if (StringUtils.contains(basePath, '/')) {
return basePath.substring(StringUtils.indexOf(basePath, '/'));
} else {
return "";
}
}
private void exportAsset(Path toDirectory, String asset) throws IOException {
export(toDirectory.resolve(asset), files.getResourceFromJar("web/" + asset));
}

View File

@ -16,25 +16,18 @@
*/
package com.djrapitops.plan.delivery.export;
import com.djrapitops.plan.delivery.rendering.pages.Page;
import com.djrapitops.plan.delivery.rendering.pages.PageFactory;
import com.djrapitops.plan.delivery.web.ResourceService;
import com.djrapitops.plan.delivery.web.resolver.Response;
import com.djrapitops.plan.delivery.web.resolver.exception.NotFoundException;
import com.djrapitops.plan.delivery.web.resolver.request.Request;
import com.djrapitops.plan.delivery.web.resource.WebResource;
import com.djrapitops.plan.delivery.webserver.resolver.json.RootJSONResolver;
import com.djrapitops.plan.exceptions.WebUserAuthException;
import com.djrapitops.plan.identification.Server;
import com.djrapitops.plan.identification.ServerInfo;
import com.djrapitops.plan.identification.ServerUUID;
import com.djrapitops.plan.settings.config.PlanConfig;
import com.djrapitops.plan.settings.config.paths.PluginSettings;
import com.djrapitops.plan.settings.theme.Theme;
import com.djrapitops.plan.storage.database.DBSystem;
import com.djrapitops.plan.storage.database.Database;
import com.djrapitops.plan.storage.file.PlanFiles;
import com.djrapitops.plan.storage.file.Resource;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringEscapeUtils;
@ -55,10 +48,8 @@ public class ServerPageExporter extends FileExporter {
private final PlanFiles files;
private final PlanConfig config;
private final PageFactory pageFactory;
private final DBSystem dbSystem;
private final RootJSONResolver jsonHandler;
private final Theme theme;
private final ServerInfo serverInfo;
private final ExportPaths exportPaths;
@ -67,18 +58,14 @@ public class ServerPageExporter extends FileExporter {
public ServerPageExporter(
PlanFiles files,
PlanConfig config,
PageFactory pageFactory,
DBSystem dbSystem,
RootJSONResolver jsonHandler,
Theme theme,
ServerInfo serverInfo // To know if current server is a Proxy
) {
this.files = files;
this.config = config;
this.pageFactory = pageFactory;
this.dbSystem = dbSystem;
this.jsonHandler = jsonHandler;
this.theme = theme;
this.serverInfo = serverInfo;
exportPaths = new ExportPaths();
@ -97,41 +84,11 @@ public class ServerPageExporter extends FileExporter {
if (dbState == Database.State.CLOSED || dbState == Database.State.CLOSING) return;
exportPaths.put("../network", toRelativePathFromRoot("network"));
exportRequiredResources(toDirectory);
exportJSON(toDirectory, server);
exportHtml(toDirectory, server);
exportReactRedirects(toDirectory, server.getUuid());
exportPaths.clear();
}
private void exportHtml(Path toDirectory, Server server) throws IOException {
if (config.isFalse(PluginSettings.LEGACY_FRONTEND)) return;
ServerUUID serverUUID = server.getUuid();
Path to = toDirectory
.resolve(serverInfo.getServer().isProxy() ? "server/" + toFileName(server.getName()) : "server")
.resolve("index.html");
Page page = pageFactory.serverPage(serverUUID);
// Fixes refreshingJsonRequest ignoring old data of export
String html = StringUtils.replaceEach(page.toHtml(),
new String[]{
"loadOptimizedPerformanceGraph, 'performance', true);",
"loadserverCalendar, 'online-activity-overview', true);",
"}, 'playerlist', true);",
"<head>"
},
new String[]{
"loadOptimizedPerformanceGraph, 'performance');",
"loadserverCalendar, 'online-activity-overview');",
"}, 'playerlist');",
"<head><style>.refresh-element {display: none;}</style>"
});
export(to, exportPaths.resolveExportPaths(html));
}
public static String[] getRedirections(ServerUUID serverUUID) {
String server = "server/";
return new String[]{
@ -143,6 +100,7 @@ public class ServerPageExporter extends FileExporter {
server + serverUUID + "/playerbase",
server + serverUUID + "/join-addresses",
server + serverUUID + "/retention",
server + serverUUID + "/allowlist",
server + serverUUID + "/players",
server + serverUUID + "/geolocations",
server + serverUUID + "/performance",
@ -151,8 +109,6 @@ public class ServerPageExporter extends FileExporter {
}
private void exportReactRedirects(Path toDirectory, ServerUUID serverUUID) throws IOException {
if (config.isTrue(PluginSettings.LEGACY_FRONTEND)) return;
exportReactRedirects(toDirectory, files, config, getRedirections(serverUUID));
}
@ -182,18 +138,18 @@ public class ServerPageExporter extends FileExporter {
"graph?type=geolocation&server=" + serverUUID,
"graph?type=uniqueAndNew&server=" + serverUUID,
"graph?type=hourlyUniqueAndNew&server=" + serverUUID,
"graph?type=joinAddressPie&server=" + serverUUID,
"graph?type=joinAddressByDay&server=" + serverUUID,
"graph?type=serverCalendar&server=" + serverUUID,
"graph?type=punchCard&server=" + serverUUID,
"players?server=" + serverUUID,
"playersTable?server=" + serverUUID,
"kills?server=" + serverUUID,
"pingTable?server=" + serverUUID,
"sessions?server=" + serverUUID,
"extensionData?server=" + serverUUID,
"serverIdentity?server=" + serverUUID,
"retention?server=" + serverUUID,
"joinAddresses?server=" + serverUUID
"joinAddresses?server=" + serverUUID,
"gameAllowlistBounces?server=" + serverUUID
);
}
@ -233,71 +189,6 @@ public class ServerPageExporter extends FileExporter {
}
}
private void exportRequiredResources(Path toDirectory) throws IOException {
if (config.isFalse(PluginSettings.LEGACY_FRONTEND)) return;
// Style
exportResources(toDirectory,
"../img/Flaticon_circle.png",
"../css/sb-admin-2.css",
"../css/style.css",
"../vendor/datatables/datatables.min.js",
"../vendor/datatables/datatables.min.css",
"../vendor/highcharts/modules/map.js",
"../vendor/highcharts/mapdata/world.js",
"../vendor/highcharts/modules/drilldown.js",
"../vendor/highcharts/highcharts.js",
"../vendor/highcharts/modules/no-data-to-display.js",
"../vendor/fullcalendar/fullcalendar.min.css",
"../vendor/momentjs/moment.js",
"../vendor/masonry/masonry.pkgd.min.js",
"../vendor/fullcalendar/fullcalendar.min.js",
"../vendor/fontawesome-free/css/all.min.css",
"../vendor/fontawesome-free/webfonts/fa-brands-400.eot",
"../vendor/fontawesome-free/webfonts/fa-brands-400.ttf",
"../vendor/fontawesome-free/webfonts/fa-brands-400.woff",
"../vendor/fontawesome-free/webfonts/fa-brands-400.woff2",
"../vendor/fontawesome-free/webfonts/fa-regular-400.eot",
"../vendor/fontawesome-free/webfonts/fa-regular-400.ttf",
"../vendor/fontawesome-free/webfonts/fa-regular-400.woff",
"../vendor/fontawesome-free/webfonts/fa-regular-400.woff2",
"../vendor/fontawesome-free/webfonts/fa-solid-900.eot",
"../vendor/fontawesome-free/webfonts/fa-solid-900.ttf",
"../vendor/fontawesome-free/webfonts/fa-solid-900.woff",
"../vendor/fontawesome-free/webfonts/fa-solid-900.woff2",
"../js/domUtils.js",
"../js/sb-admin-2.js",
"../js/xmlhttprequests.js",
"../js/color-selector.js",
"../js/sessionAccordion.js",
"../js/pingTable.js",
"../js/graphs.js",
"../js/server-values.js"
);
}
private void exportResources(Path toDirectory, String... resourceNames) throws IOException {
for (String resourceName : resourceNames) {
String nonRelativePath = toNonRelativePath(resourceName);
exportResource(toDirectory, nonRelativePath);
exportPaths.put(resourceName, toRelativePathFromRoot(nonRelativePath));
}
}
private void exportResource(Path toDirectory, String resourceName) throws IOException {
WebResource resource = ResourceService.getInstance().getResource("Plan", resourceName,
() -> files.getResourceFromJar("web/" + resourceName).asWebResource());
Path to = toDirectory.resolve(resourceName);
if (resourceName.endsWith(".css") || resourceName.endsWith("color-selector.js")) {
export(to, theme.replaceThemeColors(resource.asString()));
} else if (Resource.isTextResource(resourceName)) {
export(to, resource.asString());
} else {
export(to, resource);
}
}
private String toRelativePathFromRoot(String resourceName) {
// Server html is exported at /server/<name>/index.html or /server/index.html
return (serverInfo.getServer().isProxy() ? "../../" : "../") + toNonRelativePath(resourceName);

View File

@ -18,6 +18,7 @@ package com.djrapitops.plan.delivery.formatting;
import com.djrapitops.plan.delivery.domain.DateHolder;
import com.djrapitops.plan.delivery.formatting.time.*;
import com.djrapitops.plan.extension.FormatType;
import com.djrapitops.plan.settings.config.PlanConfig;
import com.djrapitops.plan.settings.locale.Locale;
@ -160,6 +161,20 @@ public class Formatters {
return value -> byteSizeFormatter.apply((double) value);
}
public Formatter<Long> getNumberFormatter(FormatType type) {
switch (type) {
case DATE_SECOND:
return secondLong();
case DATE_YEAR:
return yearLong();
case TIME_MILLISECONDS:
return timeAmount();
case NONE:
default:
return Object::toString;
}
}
static class Holder {
static final AtomicReference<Formatters> formatters = new AtomicReference<>();

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