31d9f3cb4a
Fix parsing of illegal uuids with spaces
2024-04-04 21:46:58 +02:00
56e43fb146
Add support for postgresql
2024-04-04 17:43:23 +02:00
a65a5f3020
Make ignore states more verbose in Velocity
2024-02-13 16:54:23 +01:00
8a729e069d
Use current link for hastebin
2024-02-13 16:54:22 +01:00
d89d332273
Minor code recommendations
2024-02-13 16:54:22 +01:00
cd3cfef6d4
Do not encapsulate the task twice in Velocity
2024-02-13 16:54:22 +01:00
6ec6e4844d
Bump dependencies
2024-02-13 16:54:22 +01:00
60a65377b8
Hint proxy setup guide and out of date versions
2024-02-13 16:54:22 +01:00
ffbf0ae3f4
Merge pull request #1151 from games647/dependabot/github_actions/advanced-security/maven-dependency-submission-action-4.0.0
...
Bump advanced-security/maven-dependency-submission-action from 3.0.2 to 4.0.0
2024-02-01 11:38:47 +01:00
4cf65cf7e5
Bump advanced-security/maven-dependency-submission-action
...
Bumps [advanced-security/maven-dependency-submission-action](https://github.com/advanced-security/maven-dependency-submission-action ) from 3.0.2 to 4.0.0.
- [Release notes](https://github.com/advanced-security/maven-dependency-submission-action/releases )
- [Commits](https://github.com/advanced-security/maven-dependency-submission-action/compare/v3.0.2...v4.0.0 )
---
updated-dependencies:
- dependency-name: advanced-security/maven-dependency-submission-action
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2024-02-01 07:45:51 +00:00
dbf5ae2fae
[Velocity] Fix plugin resuming event processing if login is not handled
...
This causes login timeouts if this plugin doesn't handle the login for
cases like:
* Anti-Bot is triggered
* Another plugin already denied the login
Fixes #1146
2024-01-23 13:59:49 +01:00
707572a007
Add core module name
2024-01-16 14:08:47 +01:00
108f5ad324
Transform velocity MariaDB transformers too
...
Otherwise, authentication plugin drivers couldn't be found.
2024-01-15 17:01:02 +01:00
2112d06162
Increase encryption key size for Spigot protocol
...
1024 bits are very weak keys. This size equals vanillas implementation.
Therefore, 2048 goes out of spec, but works and requires only minimal
additional performance for improved security.
The consequence will be during the login and playing in onlinemode.
First for authenticating and second for the encryption of all following
packets.
2024-01-15 16:37:48 +01:00
aece7f855d
Update Java CI version
2024-01-15 16:29:26 +01:00
33b4ac8494
[ci-skip] Fully qualify dependabot versions
2024-01-15 16:29:16 +01:00
09161b86dd
Merge pull request #1142 from games647/dependabot/maven/production-dependencies-eb968b0e20
...
Bump the production-dependencies group with 5 updates
2024-01-15 16:25:55 +01:00
57833bb40b
Merge pull request #1133 from games647/dependabot/github_actions/github/codeql-action-3
...
Bump github/codeql-action from 2 to 3
2024-01-15 16:23:45 +01:00
a1414a38ff
Merge pull request #1141 from games647/dependabot/maven/development-dependencies-ca802ab3b6
...
Bump the development-dependencies group with 1 update
2024-01-15 16:23:24 +01:00
0021bc476d
Merge pull request #709 from Smart123s/feature/floodgate/newdb
...
Differentiate Floodgate players in database
2024-01-15 16:22:34 +01:00
4b1e08a2f8
Bump the production-dependencies group with 5 updates
...
Bumps the production-dependencies group with 5 updates:
| Package | From | To |
| --- | --- | --- |
| [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle ) | `10.12.5` | `10.12.7` |
| [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire ) | `3.2.2` | `3.2.5` |
| org.slf4j:slf4j-jdk14 | `2.0.9` | `2.0.11` |
| com.lenis0012.bukkit:loginsecurity | `3.2.1` | `3.3.0` |
| [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) | `3.3.1` | `3.3.2` |
Updates `com.puppycrawl.tools:checkstyle` from 10.12.5 to 10.12.7
- [Release notes](https://github.com/checkstyle/checkstyle/releases )
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.12.5...checkstyle-10.12.7 )
Updates `org.apache.maven.plugins:maven-surefire-plugin` from 3.2.2 to 3.2.5
- [Release notes](https://github.com/apache/maven-surefire/releases )
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.2...surefire-3.2.5 )
Updates `org.slf4j:slf4j-jdk14` from 2.0.9 to 2.0.11
Updates `com.lenis0012.bukkit:loginsecurity` from 3.2.1 to 3.3.0
Updates `org.mariadb.jdbc:mariadb-java-client` 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: com.puppycrawl.tools:checkstyle
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: org.slf4j:slf4j-jdk14
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: com.lenis0012.bukkit:loginsecurity
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-dependencies
- dependency-name: org.mariadb.jdbc:mariadb-java-client
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
2024-01-15 07:40:02 +00:00
dbf5b8907e
Bump the development-dependencies group with 1 update
...
Bumps the development-dependencies group with 1 update: [org.mockito:mockito-core](https://github.com/mockito/mockito ).
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 )
---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: development-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
2024-01-15 07:38:05 +00:00
e6dfa97e70
Bump github/codeql-action from 2 to 3
...
Bumps [github/codeql-action](https://github.com/github/codeql-action ) from 2 to 3.
- [Release notes](https://github.com/github/codeql-action/releases )
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md )
- [Commits](https://github.com/github/codeql-action/compare/v2...v3 )
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2024-01-01 07:12:00 +00:00
434a276d30
Invert if and document migration flow for better readability
2023-12-11 16:16:16 +01:00
485af5e044
Document states
2023-12-11 16:16:16 +01:00
e566740dde
Differentiate Floodgate players during login
2023-12-11 16:16:15 +01:00
db5b818a80
Add Floodgate
variable to StoredProfile/Database
2023-12-11 16:16:15 +01:00
b0b998d1aa
Use columnName instead of columnIndex
...
It's safer to rely on names instead of indexes.
It's also easier to add new columns at the end of the table.
2023-12-11 16:16:15 +01:00
62ca46fe6a
Add checksytle suppression via comments
2023-12-11 16:16:15 +01:00
cd67797b5b
Merge pull request #1122 from games647/dependabot/maven/development-dependencies-a116437099
...
Bump the development-dependencies group with 3 updates
2023-12-06 16:19:28 +01:00
48e8b45f1e
Merge pull request #1123 from games647/dependabot/maven/production-dependencies-d650319dc7
...
Bump the production-dependencies group with 6 updates
2023-12-06 16:19:09 +01:00
1c9b8cb971
Merge pull request #1120 from games647/dependabot/github_actions/actions/setup-java-4
...
Bump actions/setup-java from 3 to 4
2023-12-06 16:18:34 +01:00
dcb9540a2f
Bump the production-dependencies group with 6 updates
...
Bumps the production-dependencies group with 6 updates:
| Package | From | To |
| --- | --- | --- |
| [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle ) | `10.12.4` | `10.12.5` |
| [org.apache.maven.plugins:maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin ) | `3.3.0` | `3.3.1` |
| [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire ) | `3.1.2` | `3.2.2` |
| me.clip:placeholderapi | `2.11.4` | `2.11.5` |
| [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) | `3.2.0` | `3.3.1` |
| [org.codehaus.mojo:templating-maven-plugin](https://github.com/mojohaus/templating-maven-plugin ) | `1.0.0` | `3.0.0` |
Updates `com.puppycrawl.tools:checkstyle` from 10.12.4 to 10.12.5
- [Release notes](https://github.com/checkstyle/checkstyle/releases )
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.12.4...checkstyle-10.12.5 )
Updates `org.apache.maven.plugins:maven-checkstyle-plugin` from 3.3.0 to 3.3.1
- [Commits](https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.3.0...maven-checkstyle-plugin-3.3.1 )
Updates `org.apache.maven.plugins:maven-surefire-plugin` from 3.1.2 to 3.2.2
- [Release notes](https://github.com/apache/maven-surefire/releases )
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.1.2...surefire-3.2.2 )
Updates `me.clip:placeholderapi` from 2.11.4 to 2.11.5
Updates `org.mariadb.jdbc:mariadb-java-client` from 3.2.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.2.0...3.3.1 )
Updates `org.codehaus.mojo:templating-maven-plugin` from 1.0.0 to 3.0.0
- [Release notes](https://github.com/mojohaus/templating-maven-plugin/releases )
- [Commits](https://github.com/mojohaus/templating-maven-plugin/compare/templating-maven-plugin-1.0.0...3.0.0 )
---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: org.apache.maven.plugins:maven-checkstyle-plugin
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-dependencies
- dependency-name: me.clip:placeholderapi
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: org.mariadb.jdbc:mariadb-java-client
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-dependencies
- dependency-name: org.codehaus.mojo:templating-maven-plugin
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: production-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-12-04 07:49:44 +00:00
cacf3c23f1
Bump the development-dependencies group with 3 updates
...
Bumps the development-dependencies group with 3 updates: [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5 ), [org.mockito:mockito-core](https://github.com/mockito/mockito ) and [org.bouncycastle:bcprov-jdk18on](https://github.com/bcgit/bc-java ).
Updates `org.junit.jupiter:junit-jupiter` 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 )
Updates `org.mockito:mockito-core` from 5.6.0 to 5.8.0
- [Release notes](https://github.com/mockito/mockito/releases )
- [Commits](https://github.com/mockito/mockito/compare/v5.6.0...v5.8.0 )
Updates `org.bouncycastle:bcprov-jdk18on` from 1.76 to 1.77
- [Changelog](https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.html )
- [Commits](https://github.com/bcgit/bc-java/commits )
---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
dependency-type: direct:development
update-type: version-update:semver-patch
dependency-group: development-dependencies
- dependency-name: org.mockito:mockito-core
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: development-dependencies
- dependency-name: org.bouncycastle:bcprov-jdk18on
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: development-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-12-04 07:48:07 +00:00
67f170694f
Bump actions/setup-java from 3 to 4
...
Bumps [actions/setup-java](https://github.com/actions/setup-java ) from 3 to 4.
- [Release notes](https://github.com/actions/setup-java/releases )
- [Commits](https://github.com/actions/setup-java/compare/v3...v4 )
---
updated-dependencies:
- dependency-name: actions/setup-java
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-12-01 07:49:23 +00:00
e15ea9ce85
Restore support for fully qualified storage drivers
...
Related #1100
2023-10-12 10:47:14 +02:00
70960661b4
[ci-skip] Fix typo in issue templates
2023-10-11 13:42:17 +02:00
ec657faaff
Force lowercase SQL driver name to improve type checks
2023-10-11 13:40:57 +02:00
51898b4b34
Migrate enhancement requests to newer issue templates
2023-10-11 13:28:12 +02:00
e30de1b700
Include CI server in issue template
2023-10-11 13:28:11 +02:00
ce17441edb
Merge pull request #1097 from games647/dependabot/maven/production-dependencies-84d7f6773a
...
Bump the production-dependencies group with 6 updates
2023-10-11 12:39:04 +02:00
3244b7a87a
Bump actions/checkout from 3 to 4
...
Bumps [actions/checkout](https://github.com/actions/checkout ) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases )
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md )
- [Commits](https://github.com/actions/checkout/compare/v3...v4 )
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-10-11 12:38:02 +02:00
ecacd2a715
Update toolchain for Java 21 compiling
2023-10-11 12:37:07 +02:00
ea6d4cf2f6
Add proper support for 1.19.3-1.20.1
2023-10-11 12:37:07 +02:00
91b05289ad
Add 1.20.2 support
2023-10-11 12:37:07 +02:00
4e0f8cfb65
Bump the production-dependencies group with 6 updates
...
Bumps the production-dependencies group with 6 updates:
| Package | From | To |
| --- | --- | --- |
| [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle ) | `10.12.3` | `10.12.4` |
| [org.projectlombok:lombok](https://github.com/projectlombok/lombok ) | `1.18.28` | `1.18.30` |
| com.mycila:license-maven-plugin | `4.2` | `4.3` |
| org.slf4j:slf4j-jdk14 | `2.0.7` | `2.0.9` |
| me.clip:placeholderapi | `2.11.3` | `2.11.4` |
| [org.apache.maven.plugins:maven-shade-plugin](https://github.com/apache/maven-shade-plugin ) | `3.5.0` | `3.5.1` |
Updates `com.puppycrawl.tools:checkstyle` from 10.12.3 to 10.12.4
- [Release notes](https://github.com/checkstyle/checkstyle/releases )
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.12.3...checkstyle-10.12.4 )
Updates `org.projectlombok:lombok` from 1.18.28 to 1.18.30
- [Changelog](https://github.com/projectlombok/lombok/blob/master/doc/changelog.markdown )
- [Commits](https://github.com/projectlombok/lombok/compare/v1.18.28...v1.18.30 )
Updates `com.mycila:license-maven-plugin` from 4.2 to 4.3
Updates `org.slf4j:slf4j-jdk14` from 2.0.7 to 2.0.9
Updates `me.clip:placeholderapi` from 2.11.3 to 2.11.4
Updates `org.apache.maven.plugins:maven-shade-plugin` from 3.5.0 to 3.5.1
- [Release notes](https://github.com/apache/maven-shade-plugin/releases )
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.5.0...maven-shade-plugin-3.5.1 )
---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: org.projectlombok:lombok
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: com.mycila:license-maven-plugin
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-dependencies
- dependency-name: org.slf4j:slf4j-jdk14
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: me.clip:placeholderapi
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: org.apache.maven.plugins:maven-shade-plugin
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-10-02 07:56:41 +00:00
d76690dcbe
Merge pull request #1087 from games647/dependabot/maven/production-dependencies-ce791421b1
...
Bump the production-dependencies group with 7 updates
2023-08-31 15:23:30 +02:00
3559d067ad
Bump the production-dependencies group with 7 updates
...
Bumps the production-dependencies group with 7 updates:
| Package | From | To |
| --- | --- | --- |
| [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle ) | `10.9.3` | `10.12.3` |
| [org.projectlombok:lombok](https://github.com/projectlombok/lombok ) | `1.18.26` | `1.18.28` |
| [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire ) | `2.22.2` | `3.1.2` |
| [com.google.code.gson:gson](https://github.com/google/gson ) | `2.10` | `2.10.1` |
| com.lenis0012.bukkit:loginsecurity | `3.1.1` | `3.2.1` |
| [org.apache.maven.plugins:maven-shade-plugin](https://github.com/apache/maven-shade-plugin ) | `3.4.1` | `3.5.0` |
| [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) | `3.1.4` | `3.2.0` |
Updates `com.puppycrawl.tools:checkstyle` from 10.9.3 to 10.12.3
- [Release notes](https://github.com/checkstyle/checkstyle/releases )
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.9.3...checkstyle-10.12.3 )
Updates `org.projectlombok:lombok` from 1.18.26 to 1.18.28
- [Release notes](https://github.com/projectlombok/lombok/releases )
- [Changelog](https://github.com/projectlombok/lombok/blob/master/doc/changelog.markdown )
- [Commits](https://github.com/projectlombok/lombok/compare/v1.18.26...v1.18.28 )
Updates `org.apache.maven.plugins:maven-surefire-plugin` from 2.22.2 to 3.1.2
- [Release notes](https://github.com/apache/maven-surefire/releases )
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-2.22.2...surefire-3.1.2 )
Updates `com.google.code.gson:gson` from 2.10 to 2.10.1
- [Release notes](https://github.com/google/gson/releases )
- [Changelog](https://github.com/google/gson/blob/main/CHANGELOG.md )
- [Commits](https://github.com/google/gson/compare/gson-parent-2.10...gson-parent-2.10.1 )
Updates `com.lenis0012.bukkit:loginsecurity` from 3.1.1 to 3.2.1
Updates `org.apache.maven.plugins:maven-shade-plugin` from 3.4.1 to 3.5.0
- [Release notes](https://github.com/apache/maven-shade-plugin/releases )
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.4.1...maven-shade-plugin-3.5.0 )
Updates `org.mariadb.jdbc:mariadb-java-client` 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: com.puppycrawl.tools:checkstyle
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-dependencies
- dependency-name: org.projectlombok:lombok
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: production-dependencies
- dependency-name: com.google.code.gson:gson
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: production-dependencies
- dependency-name: com.lenis0012.bukkit:loginsecurity
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-dependencies
- dependency-name: org.apache.maven.plugins:maven-shade-plugin
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-dependencies
- dependency-name: org.mariadb.jdbc:mariadb-java-client
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: production-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-08-31 11:53:12 +00:00
48a92ed35e
Use wildcard exclude patterns
2023-08-31 13:51:42 +02:00
a4eec19f53
[ci-skip] Fix dependency name
2023-08-31 13:19:17 +02:00
32eda941ee
Ignore Hikari and SnakeYAML in dependency updates
2023-08-31 12:42:32 +02:00
92d88caf0a
Merge pull request #1085 from games647/dependabot/maven/development-dependencies-424a594065
...
Bump the development-dependencies group with 2 updates
2023-08-31 12:28:11 +02:00
d2202d7a12
Bump the development-dependencies group with 2 updates
...
Bumps the development-dependencies group with 2 updates: [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5 ) and [org.bouncycastle:bcprov-jdk18on](https://github.com/bcgit/bc-java ).
Updates `org.junit.jupiter:junit-jupiter` from 5.9.1 to 5.10.0
- [Release notes](https://github.com/junit-team/junit5/releases )
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.1...r5.10.0 )
Updates `org.bouncycastle:bcprov-jdk18on` from 1.75 to 1.76
- [Changelog](https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.html )
- [Commits](https://github.com/bcgit/bc-java/commits )
---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: development-dependencies
- dependency-name: org.bouncycastle:bcprov-jdk18on
dependency-type: direct:development
update-type: version-update:semver-minor
dependency-group: development-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-08-31 10:21:23 +00:00
6a68e04c87
Fix grouping for maven packages
2023-08-31 12:18:10 +02:00
b702f48907
Add version number back
2023-08-31 12:14:06 +02:00
159a6ed37c
Add JavaDoc snippets and tiny reformats
2023-08-31 12:08:40 +02:00
b48dfed709
Add NPE check on velocity for logins
2023-08-31 12:08:40 +02:00
2db327ccc4
Group dependency updates together
2023-08-31 12:08:39 +02:00
9d907983a6
Only run CodeQL if successful
2023-08-31 12:08:39 +02:00
4a3d7f448f
Merge pull request #1071 from xrh0905/floodgate_enabled
...
Floodgate enabled
2023-08-31 12:07:53 +02:00
31cbb2ff11
Add floodgate support
...
Based on: https://github.com/games647/FastLogin/pull/649
Solve hooks not found
Add defination of floodgateservice
Geyser API
2023-08-31 12:04:23 +02:00
1715c08ee6
Merge pull request #1041 from games647/dependabot/maven/org.apache.maven.plugins-maven-checkstyle-plugin-3.3.0
...
Bump maven-checkstyle-plugin from 3.1.2 to 3.3.0
2023-07-20 12:02:43 +02:00
5682df9ad5
Merge pull request #1048 from games647/dependabot/maven/org.bouncycastle-bcprov-jdk18on-1.75
...
Bump bcprov-jdk18on from 1.72 to 1.75
2023-07-20 12:01:27 +02:00
132b560130
Merge pull request #1036 from games647/dependabot/maven/org.mariadb.jdbc-mariadb-java-client-3.1.4
...
Bump mariadb-java-client from 3.1.0 to 3.1.4
2023-07-20 12:01:13 +02:00
e204c9c579
Merge pull request #1021 from games647/dependabot/maven/com.mycila-license-maven-plugin-4.2
...
Bump license-maven-plugin from 4.1 to 4.2
2023-07-20 12:00:56 +02:00
f92863e53a
Merge branch 'main' into dependabot/maven/org.apache.maven.plugins-maven-checkstyle-plugin-3.3.0
2023-07-20 12:00:33 +02:00
23fec56ecd
Merge branch 'main' into dependabot/maven/org.bouncycastle-bcprov-jdk18on-1.75
2023-07-20 11:57:50 +02:00
5cd10fd795
Run CodeQL after main build to leverage caching
2023-07-17 17:04:28 +02:00
ecbf07c0b2
Manually start build process in CodeQL
2023-07-17 16:26:52 +02:00
053b51e96b
Relax java build version requirement
...
GitHub action seems to always download Java 19 even though it is
already downloaded and installed. This could also help with running
the CodeQL action.
2023-07-17 16:17:57 +02:00
44d365b15d
Use java dot file to help autobuild select the correct version
2023-07-17 15:52:54 +02:00
610c49d62c
Enable write for dependency graph
2023-07-17 15:49:36 +02:00
dbd12742fa
Only upload dependency graph on push
2023-07-17 15:47:02 +02:00
f2fd51d4e2
Use suggestion dependency version
2023-07-17 15:17:29 +02:00
f9ca318775
Apply Java version selection after CodeQL init
2023-07-17 15:13:40 +02:00
f06ace2f5b
Add dependency graph to help GitHub find dependencies
2023-07-17 15:09:16 +02:00
ee465e381c
Rephrase invalid session warning to make it more clear
2023-07-17 10:10:03 +02:00
6ab81b1a2f
Fix formatting errors
2023-07-17 09:55:24 +02:00
36ee52aa6e
Print out a warning if we detect local IP addresses during connections
...
Reference #1055
2023-07-10 15:52:34 +02:00
e5c70d8597
Bump bcprov-jdk18on from 1.72 to 1.75
...
Bumps [bcprov-jdk18on](https://github.com/bcgit/bc-java ) from 1.72 to 1.75.
- [Changelog](https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.html )
- [Commits](https://github.com/bcgit/bc-java/commits )
---
updated-dependencies:
- dependency-name: org.bouncycastle:bcprov-jdk18on
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-06-26 07:58:13 +00:00
8b1485f0b1
Bump maven-checkstyle-plugin from 3.1.2 to 3.3.0
...
Bumps [maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin ) from 3.1.2 to 3.3.0.
- [Commits](https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.1.2...maven-checkstyle-plugin-3.3.0 )
---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-checkstyle-plugin
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-05-29 07:57:19 +00:00
c106089a72
Include updated yaml for older Spigot platforms
...
Fixes #1031
2023-05-22 15:16:42 +02:00
41f83988fe
Fix code style
2023-05-22 14:43:52 +02:00
dc4510aba3
Print an extra warning if the id list is empty.
2023-05-22 10:35:50 +02:00
dd0dd15200
Print an extra warning if the id list is empty.
2023-05-22 10:21:58 +02:00
5fc27f6c4a
Bump mariadb-java-client from 3.1.0 to 3.1.4
...
Bumps [mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) from 3.1.0 to 3.1.4.
- [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/commits/3.1.4 )
---
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 >
2023-05-08 07:57:09 +00:00
a182976207
Update license date
2023-04-13 12:00:07 +02:00
e8811de62a
Inline paper detection
2023-04-12 16:34:14 +02:00
0aedad8857
Allow to use Java 11 for Velocity
2023-04-12 11:44:09 +02:00
477ec06d55
Encapsulate storage implementation
2023-04-12 11:30:07 +02:00
e5d61101ae
Typo fixes
2023-04-11 10:36:42 +02:00
c12a88966c
Correct CodeQL action runner file
...
This appears to be a standard file name
2023-04-11 10:35:49 +02:00
73720277b3
Bump license-maven-plugin from 4.1 to 4.2
...
Bumps license-maven-plugin from 4.1 to 4.2.
---
updated-dependencies:
- dependency-name: com.mycila:license-maven-plugin
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-04-10 07:58:12 +00:00
7d7d91f4da
Apply the latest runner recommendations
2023-04-05 10:47:15 +02:00
8447285ef8
Remove redundant cache from action runner
2023-04-05 10:42:03 +02:00
edae388b37
Update Java action version
2023-04-05 10:07:39 +02:00
7c41b8a5e8
Merge pull request #1006 from games647/dependabot/maven/org.projectlombok-lombok-1.18.26
...
Bump lombok from 1.18.24 to 1.18.26
2023-04-05 09:51:13 +02:00
dfbfe9c4e5
Merge pull request #1003 from games647/dependabot/maven/com.puppycrawl.tools-checkstyle-10.9.3
...
Bump checkstyle from 10.9.2 to 10.9.3
2023-04-05 09:51:05 +02:00
2fa6700666
Merge pull request #1004 from games647/dependabot/maven/me.clip-placeholderapi-2.11.3
...
Bump placeholderapi from 2.11.2 to 2.11.3
2023-04-05 09:50:54 +02:00
0db205691b
Merge pull request #1005 from games647/dependabot/maven/com.lenis0012.bukkit-loginsecurity-3.1.1
...
Bump loginsecurity from 3.1 to 3.1.1
2023-04-05 09:50:50 +02:00
d13414097a
Merge pull request #1007 from games647/dependabot/maven/org.slf4j-slf4j-jdk14-2.0.7
...
Bump slf4j-jdk14 from 2.0.6 to 2.0.7
2023-04-05 09:50:42 +02:00
d6389f0474
Bump loginsecurity from 3.1 to 3.1.1
...
Bumps loginsecurity from 3.1 to 3.1.1.
---
updated-dependencies:
- dependency-name: com.lenis0012.bukkit:loginsecurity
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-04-05 09:48:09 +02:00
d153b5e2d5
Bump placeholderapi from 2.11.2 to 2.11.3
...
Bumps placeholderapi from 2.11.2 to 2.11.3.
---
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 >
2023-04-05 09:48:08 +02:00
b21d73e9dc
Bump checkstyle from 10.9.2 to 10.9.3
...
Bumps [checkstyle](https://github.com/checkstyle/checkstyle ) from 10.9.2 to 10.9.3.
- [Release notes](https://github.com/checkstyle/checkstyle/releases )
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.9.2...checkstyle-10.9.3 )
---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-04-05 09:48:07 +02:00
730520fd77
Merge branch 'main' into dependabot/maven/org.projectlombok-lombok-1.18.26
2023-04-05 09:47:56 +02:00
652653bc45
Merge branch 'main' into dependabot/maven/org.slf4j-slf4j-jdk14-2.0.7
2023-04-05 09:47:54 +02:00
010f9b3827
Merge pull request #1012 from games647/dependabot/github_actions/actions/cache-3.3.1
...
Bump actions/cache from 3.2.6 to 3.3.1
2023-04-05 09:46:59 +02:00
42911e978f
Rephrase auto-login documentation
...
Fixes #465
2023-04-01 14:24:51 +02:00
46bfbb9ca0
Bump actions/cache from 3.2.6 to 3.3.1
...
Bumps [actions/cache](https://github.com/actions/cache ) from 3.2.6 to 3.3.1.
- [Release notes](https://github.com/actions/cache/releases )
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md )
- [Commits](https://github.com/actions/cache/compare/v3.2.6...v3.3.1 )
---
updated-dependencies:
- dependency-name: actions/cache
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-04-01 07:57:40 +00:00
546bbede0b
Fix compatibility with older guava versions like Minecraft < 1.19
2023-03-31 13:06:12 +02:00
487bc24a8a
Fix breaking ProtocolLib Minecraft version change
...
Fixes #1008
2023-03-30 17:26:59 +02:00
23d7594b67
Fix 404 for cracked handling
...
Fixes #998
2023-03-30 17:18:46 +02:00
87121979ce
Bump slf4j-jdk14 from 2.0.6 to 2.0.7
...
Bumps [slf4j-jdk14](https://github.com/qos-ch/slf4j ) from 2.0.6 to 2.0.7.
- [Release notes](https://github.com/qos-ch/slf4j/releases )
- [Commits](https://github.com/qos-ch/slf4j/compare/v_2.0.6...v_2.0.7 )
---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-jdk14
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-03-27 07:57:59 +00:00
a42b824c3d
Bump lombok from 1.18.24 to 1.18.26
...
Bumps [lombok](https://github.com/projectlombok/lombok ) from 1.18.24 to 1.18.26.
- [Release notes](https://github.com/projectlombok/lombok/releases )
- [Changelog](https://github.com/projectlombok/lombok/blob/master/doc/changelog.markdown )
- [Commits](https://github.com/projectlombok/lombok/compare/v1.18.24...v1.18.26 )
---
updated-dependencies:
- dependency-name: org.projectlombok:lombok
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-03-27 07:57:58 +00:00
a50f8b7210
Merge pull request #996 from games647/dependabot/maven/org.mockito-mockito-inline-5.2.0
...
Bump mockito-inline from 4.10.0 to 5.2.0
2023-03-24 17:17:59 +01:00
598d384516
Merge pull request #999 from games647/dependabot/maven/com.puppycrawl.tools-checkstyle-10.9.2
...
Bump checkstyle from 10.5.0 to 10.9.2
2023-03-24 17:17:46 +01:00
48d4a4861a
Merge pull request #994 from games647/dependabot/github_actions/actions/cache-3.2.6
...
Bump actions/cache from 3.0.5 to 3.2.6
2023-03-24 17:16:14 +01:00
6b4a6cb66c
Merge branch 'main' into dependabot/maven/com.puppycrawl.tools-checkstyle-10.9.2
2023-03-24 17:14:34 +01:00
43e507d032
Merge branch 'main' into dependabot/maven/org.mockito-mockito-inline-5.2.0
2023-03-24 17:14:31 +01:00
40b70c367c
Merge branch 'main' into dependabot/github_actions/actions/cache-3.2.6
2023-03-24 17:14:26 +01:00
e7208e6a5d
Merge pull request #971 from games647/dependabot/maven/io.papermc-paperlib-1.0.8
...
Bump paperlib from 1.0.7 to 1.0.8
2023-03-24 17:13:51 +01:00
2646ebac40
Revert "Pin the exact geyser version"
...
This reverts commit b20000cae8
.
2023-03-24 17:10:20 +01:00
b20000cae8
Pin the exact geyser version
2023-03-24 17:06:58 +01:00
0adadd02a1
Find the correct floodgate version
2023-03-24 17:03:37 +01:00
28cf02129f
Drop BungeeCordAuthenticator support as it is no longer available
2023-03-24 16:38:07 +01:00
b4ea6f19b5
Update craftapi to Treat FileNotFound as cracked
2023-03-24 16:38:07 +01:00
06c0e64073
Fix packet constructing for < 1.19.3
2023-03-24 16:38:07 +01:00
984ad723d2
Bump checkstyle from 10.5.0 to 10.9.2
...
Bumps [checkstyle](https://github.com/checkstyle/checkstyle ) from 10.5.0 to 10.9.2.
- [Release notes](https://github.com/checkstyle/checkstyle/releases )
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.5.0...checkstyle-10.9.2 )
---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-03-20 07:57:53 +00:00
acdd0d577a
Bump mockito-inline from 4.10.0 to 5.2.0
...
Bumps [mockito-inline](https://github.com/mockito/mockito ) from 4.10.0 to 5.2.0.
- [Release notes](https://github.com/mockito/mockito/releases )
- [Commits](https://github.com/mockito/mockito/compare/v4.10.0...v5.2.0 )
---
updated-dependencies:
- dependency-name: org.mockito:mockito-inline
dependency-type: direct:development
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-03-13 07:58:02 +00:00
f4e098589b
Bump actions/cache from 3.0.5 to 3.2.6
...
Bumps [actions/cache](https://github.com/actions/cache ) from 3.0.5 to 3.2.6.
- [Release notes](https://github.com/actions/cache/releases )
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md )
- [Commits](https://github.com/actions/cache/compare/v3.0.5...v3.2.6 )
---
updated-dependencies:
- dependency-name: actions/cache
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-03-01 07:57:15 +00:00
f706f428a3
Bump paperlib from 1.0.7 to 1.0.8
...
Bumps [paperlib](https://github.com/PaperMC/PaperLib ) from 1.0.7 to 1.0.8.
- [Release notes](https://github.com/PaperMC/PaperLib/releases )
- [Changelog](https://github.com/PaperMC/PaperLib/blob/master/CHANGELOG.md )
- [Commits](https://github.com/PaperMC/PaperLib/compare/v1.0.7...v1.0.8 )
---
updated-dependencies:
- dependency-name: io.papermc:paperlib
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2023-01-02 07:01:34 +00:00
971b0e1f09
Merge pull request #963 from games647/dependabot/maven/org.apache.maven.plugins-maven-shade-plugin-3.4.1
...
Bump maven-shade-plugin from 3.3.0 to 3.4.1
2022-12-29 14:48:34 +01:00
c63712a949
Bump maven-shade-plugin from 3.3.0 to 3.4.1
...
Bumps [maven-shade-plugin](https://github.com/apache/maven-shade-plugin ) from 3.3.0 to 3.4.1.
- [Release notes](https://github.com/apache/maven-shade-plugin/releases )
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.3.0...maven-shade-plugin-3.4.1 )
---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-shade-plugin
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-12-26 07:00:58 +00:00
cb5598f2f4
Fix creating login start packets with ProtocolLib version 5
...
Fixes #955
2022-12-21 11:57:47 +01:00
b242a7b3ce
Update dependencies
2022-12-21 11:56:39 +01:00
889cabb9e1
Merge pull request #943 from games647/dependabot/maven/org.mariadb.jdbc-mariadb-java-client-3.1.0
...
Bump mariadb-java-client from 3.0.7 to 3.1.0
2022-12-19 09:08:13 +01:00
7cbcf5b465
Merge pull request #947 from games647/dependabot/maven/com.puppycrawl.tools-checkstyle-10.5.0
...
Bump checkstyle from 10.3.2 to 10.5.0
2022-12-19 09:07:05 +01:00
9d99e1e6e0
Merge branch 'main' into dependabot/maven/org.mariadb.jdbc-mariadb-java-client-3.1.0
2022-12-19 09:06:22 +01:00
85f7f9262b
Merge branch 'main' into dependabot/maven/com.puppycrawl.tools-checkstyle-10.5.0
2022-12-19 09:05:22 +01:00
020291271a
Merge pull request #954 from games647/dependabot/maven/org.slf4j-slf4j-jdk14-2.0.6
...
Bump slf4j-jdk14 from 2.0.0 to 2.0.6
2022-12-19 09:05:07 +01:00
96be14cc73
Bump slf4j-jdk14 from 2.0.0 to 2.0.6
...
Bumps [slf4j-jdk14](https://github.com/qos-ch/slf4j ) from 2.0.0 to 2.0.6.
- [Release notes](https://github.com/qos-ch/slf4j/releases )
- [Commits](https://github.com/qos-ch/slf4j/compare/v_2.0.0...v_2.0.6 )
---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-jdk14
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-12-19 07:01:09 +00:00
1038453469
Fix 1.19.3 compat of removed public key on login
...
Fixes #951
2022-12-18 14:15:30 +01:00
ca17c3f377
Fix project building
2022-12-18 14:03:49 +01:00
c56d55f23d
Bump checkstyle from 10.3.2 to 10.5.0
...
Bumps [checkstyle](https://github.com/checkstyle/checkstyle ) from 10.3.2 to 10.5.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases )
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.3.2...checkstyle-10.5.0 )
---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-11-28 07:02:29 +00:00
19af059538
Bump mariadb-java-client from 3.0.7 to 3.1.0
...
Bumps [mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) from 3.0.7 to 3.1.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/commits )
---
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 >
2022-11-21 07:02:54 +00:00
2989d9a62d
Dump BungeeCord dependency to the snapshot version
2022-09-22 10:47:59 +02:00
84bfce9f84
Merge pull request #923 from Smart123s/feature/floodgate/extensions
...
Bump Geyser version to 2.1.0-SNAPSHOT
2022-09-22 10:40:24 +02:00
2fae5060dc
Change Geyser AuthType classpath
2022-09-21 13:26:35 +02:00
5a29eede69
Bump Geyser version to 2.1.0-SNAPSHOT
2022-09-21 09:46:29 +02:00
7425df86b5
Merge pull request #887 from games647/dependabot/maven/org.mockito-mockito-inline-4.7.0
...
Bump mockito-inline from 4.6.1 to 4.7.0
2022-08-25 15:04:47 +02:00
2e60f9bc15
[ci skip] Highlight that the stats identifier is only 'stats'
2022-08-23 16:18:34 +02:00
ee6aeafafc
Merge pull request #892 from LaboCraft/fix-ProtocolLib-unregister
...
Fix unregister ProtocolLib
2022-08-22 12:19:51 +02:00
47644afa19
Merge pull request #897 from games647/dependabot/maven/org.slf4j-slf4j-jdk14-2.0.0
...
Bump slf4j-jdk14 from 2.0.0-beta1 to 2.0.0
2022-08-22 12:01:21 +02:00
9441d6551d
Bump slf4j-jdk14 from 2.0.0-beta1 to 2.0.0
...
Bumps [slf4j-jdk14](https://github.com/qos-ch/slf4j ) from 2.0.0-beta1 to 2.0.0.
- [Release notes](https://github.com/qos-ch/slf4j/releases )
- [Commits](https://github.com/qos-ch/slf4j/compare/v_2.0.0-beta1...v_2.0.0 )
---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-jdk14
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-08-22 07:02:54 +00:00
0867719878
Use own config to prevent single redundant loading config after start
...
Fixes #893
2022-08-21 16:20:39 +02:00
ace180976d
Fix unregister ProtocolLib
2022-08-17 14:49:38 +02:00
749974bca7
Bump mockito-inline from 4.6.1 to 4.7.0
...
Bumps [mockito-inline](https://github.com/mockito/mockito ) from 4.6.1 to 4.7.0.
- [Release notes](https://github.com/mockito/mockito/releases )
- [Commits](https://github.com/mockito/mockito/compare/v4.6.1...v4.7.0 )
---
updated-dependencies:
- dependency-name: org.mockito:mockito-inline
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-08-15 07:03:14 +00:00
feb46399da
Fetch player injection handler by type rather than name
2022-08-12 10:23:42 +02:00
18b0c427c4
Move annotation usage to the jetbrains package
2022-08-12 09:09:52 +02:00
520bb0d761
Reformat work and build files
2022-08-12 09:09:26 +02:00
6fe7eb2c24
Do not set date format for older SQLite versions
...
Fixes #877
2022-08-10 18:20:57 +02:00
ed9e295c1b
Merge pull request #876 from Smart123s/fix/floodgate/plib-chnext
...
Fix Floodgate prefix with ProtocolLib
2022-08-10 16:33:40 +02:00
c8c4aa522d
Remove Floodgate 1.0 warning
...
Floodgate 2.0 has been released a long time ago.
2022-08-09 17:27:29 +02:00
649ce8cb1a
Revert "Workaround for Floodgate prefixes with ProtocolLlib"
...
This reverts commit 94979a3
This reverts commit e82e7c7
This reverts commit b92911b
This reverts commit 03850ae
This reverts commit 8859ebb
2022-08-09 17:27:28 +02:00
61f949cf97
Revert "Fix Floodgate detection for buggy ProtocolLib"
...
This reverts commit 9978fe69
2022-08-09 17:27:28 +02:00
8571feef6d
Reimplement skipped Floodgate tasks
...
Due to a bug in ProtocolLib, Floodgate will never execute some of its tasks if an async listener is registered.
Related: https://github.com/GeyserMC/Floodgate/issues/143
Skipped code: 5d5713ed9e/spigot/src/main/java/org/geysermc/floodgate/addon/data/SpigotDataHandler.java (L121-L175)
Fixes #786
Fixes #703
Fixes #689
Fixes #647
2022-08-09 17:27:27 +02:00
bf86042c52
Disable checkstyle line length for JavaDoc links
...
GitHub permalinks can easily get longer than 120 characters.
2022-08-09 16:54:11 +02:00
55e3531718
Extract channel from ProtocolLib event
2022-08-09 16:54:04 +02:00
1694a7a4f3
Do not override driver setting if using the simplified version
2022-08-09 09:25:56 +02:00
ba7613c32a
Bump slf4j-jdk14 from 2.0.0-alpha7 to 2.0.0-beta1 ( #874 )
...
Bumps [slf4j-jdk14](https://github.com/qos-ch/slf4j ) from 2.0.0-alpha7 to 2.0.0-beta1.
- [Release notes](https://github.com/qos-ch/slf4j/releases )
- [Commits](https://github.com/qos-ch/slf4j/compare/v_2.0.0-alpha7...v_2.0.0-beta1 )
---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-jdk14
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>
2022-08-08 10:17:58 +02:00
3244a3ab64
Resolve the mysql driver if using the simplified version
2022-08-08 10:16:12 +02:00
833177933a
Remove and fix storage driver check
2022-08-04 14:28:30 +02:00
091b558826
Allow any newer SQLite version
2022-08-03 13:31:19 +02:00
df5e6db183
Set SQLite setting using the correct data class
...
Fixes #870
2022-08-03 13:21:44 +02:00
845d16dd04
Simplify storage driver setting
2022-08-02 10:40:00 +02:00
6beaf194ce
Let the JDBC DriveManager pick the right driver for us
...
According to HikariCP, it's recommended to use the DataSource version
if available. For MySQL, it's not recommended, because of bugs in the
network timeout implementation. Therefore, we use here the jdbc url
version still, but let the driver be picked by the DriveManager.
Fixes #591
2022-08-02 10:38:53 +02:00
62d7320a6e
Bump junit-jupiter from 5.8.2 to 5.9.0 ( #866 )
...
Bumps [junit-jupiter](https://github.com/junit-team/junit5 ) from 5.8.2 to 5.9.0.
- [Release notes](https://github.com/junit-team/junit5/releases )
- [Commits](https://github.com/junit-team/junit5/compare/r5.8.2...r5.9.0 )
---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
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>
2022-08-01 12:15:39 +02:00
c1207d884d
Bump craftapi from 0.5.3 to 0.6 ( #867 )
...
Bumps [craftapi](https://github.com/games647/CraftAPI ) from 0.5.3 to 0.6.
- [Release notes](https://github.com/games647/CraftAPI/releases )
- [Commits](https://github.com/games647/CraftAPI/commits )
---
updated-dependencies:
- dependency-name: com.github.games647:craftapi
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>
2022-08-01 12:15:25 +02:00
4a8e903773
Bump gson from 2.9.0 to 2.9.1 ( #868 )
...
Bumps [gson](https://github.com/google/gson ) from 2.9.0 to 2.9.1.
- [Release notes](https://github.com/google/gson/releases )
- [Changelog](https://github.com/google/gson/blob/master/CHANGELOG.md )
- [Commits](https://github.com/google/gson/compare/gson-parent-2.9.0...gson-parent-2.9.1 )
---
updated-dependencies:
- dependency-name: com.google.code.gson:gson
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>
2022-08-01 12:15:14 +02:00
e53c4f89f0
Bump checkstyle from 10.3.1 to 10.3.2 ( #865 )
...
Bumps [checkstyle](https://github.com/checkstyle/checkstyle ) from 10.3.1 to 10.3.2.
- [Release notes](https://github.com/checkstyle/checkstyle/releases )
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.3.1...checkstyle-10.3.2 )
---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
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>
2022-08-01 12:14:53 +02:00
ed45fada59
Update 1.19.1 public key verification
2022-07-28 17:06:06 +02:00
045f980f38
Forward client key even if verification is disabled
2022-07-28 16:26:35 +02:00
25c8be65ed
Disable metadata checking if login packets are re-used on login
...
Some servers appear to re-use login packets. However, ProtocolLib
metadata sets the data based on the identity of the packet handle. This
makes the metadata available for fresh incoming packets too.
Related #855
2022-07-28 14:14:10 +02:00
e3778c865c
Update dependencies
2022-07-28 13:02:58 +02:00
4765d6d4ef
Bump geyser.version from 2.0.0-SNAPSHOT to 2.0.5-SNAPSHOT ( #842 )
...
Bumps `geyser.version` from 2.0.0-SNAPSHOT to 2.0.5-SNAPSHOT.
Updates `core` from 2.0.0-SNAPSHOT to 2.0.5-SNAPSHOT
- [Release notes](https://github.com/GeyserMC/Geyser/releases )
- [Commits](https://github.com/GeyserMC/Geyser/commits )
Updates `geyser-api` from 2.0.0-SNAPSHOT to 2.0.5-SNAPSHOT
---
updated-dependencies:
- dependency-name: org.geysermc:core
dependency-type: direct:production
update-type: version-update:semver-patch
- dependency-name: org.geysermc:geyser-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>
2022-07-28 12:42:40 +02:00
c886ccb9ef
Remove commented out code
2022-07-27 14:37:11 +02:00
bbb615bb0f
Merge branch 'tcpshield'
2022-07-27 14:31:55 +02:00
0e1774a175
Comment out potential debug code
2022-07-27 14:30:48 +02:00
f50bef3eb2
Fix TCPShield compat by using raw address for sessions
...
TCPShield overwrites the IP address during connection. ProtocolLib
doesn't notice this change, because it uses the end-to-end connection
which is the proxy IP. This causes getAddress calls during Spigot play
state and ProtocolLib auth state not match and then have conflicting
session ids.
A solution is also to hold onto the temporary player object. However
since we don't get a notification for a disconnect, holding it will
prevent to get GCed until the timeout occurs (1 minute).
Fixes #595
2022-07-27 14:30:42 +02:00
0e2e431d87
Use the address field for verify task
2022-07-27 14:30:04 +02:00
1e732d62cb
Replace Field- and MethodUtils from breaking changes in ProtocolLib
2022-07-27 10:06:46 +02:00
94979a3cf6
Fix reading username with 1.19 and Floodgate
...
Related #856
2022-07-27 09:34:36 +02:00
564f713fce
Simplify version setting
2022-07-25 16:28:38 +02:00
05708a256c
Perform check for available reflection during compile time
2022-07-25 13:02:30 +02:00
1d45cad2ea
Add connection debug messages for #855
2022-07-25 10:30:48 +02:00
e82e7c7856
Fix manual name change workaround for floodgate with 1.19
...
Fixes #854
2022-07-25 10:27:09 +02:00
8df5b11276
Fix Java 8 API compatibility
2022-07-22 18:46:46 +02:00
c090278f82
Reset Hikari to the Java 8 version
2022-07-22 13:31:43 +02:00
23d30eee1a
Migrate to Java 8 (sponsored contribution)
...
Java >8 includes many helpful features and API additions. Current
phoronix benchmarks indicated a very similar performance. Furthermore,
the fact that Java 18 even works with 1.8.8 contributed to the
decision to move to Java 17 like vanilla Java in 1.19.
This also helps us to learn about the newer features added for our
personal interests. As this is a free project, this motivated us to make
this step.
Nevertheless, many server owners were frustrated about this decision.
Thanks to financial contribution, we revised this decision until Java 8
is end of life or no longer used actively used according to bstats.org
2022-07-22 13:26:52 +02:00
bd65c792d0
Use correct generics
2022-07-22 13:26:39 +02:00
79a83ce84d
Throw exception for utilities
2022-07-22 13:26:39 +02:00
9fdbdeaf9a
Use Lombok to create a record-like struct
2022-07-22 13:26:39 +02:00
dd2fca2ea1
Replace var with val to prevent conflicts with newer Java version
...
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
index 81abad1..d148bc1 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
@@ -59,7 +59,7 @@ import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
-import lombok.var;
+import lombok.val;
/**
* Encryption and decryption minecraft util for connection between servers
@@ -179,9 +179,9 @@ final class EncryptionUtil {
private static PublicKey loadMojangSessionKey()
throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
- var keyUrl = FastLoginBukkit.class.getClassLoader().getResource("yggdrasil_session_pubkey.der");
- var keyData = Resources.toByteArray(keyUrl);
- var keySpec = new X509EncodedKeySpec(keyData);
+ val keyUrl = FastLoginBukkit.class.getClassLoader().getResource("yggdrasil_session_pubkey.der");
+ val keyData = Resources.toByteArray(keyUrl);
+ val keySpec = new X509EncodedKeySpec(keyData);
return KeyFactory.getInstance("RSA").generatePublic(keySpec);
}
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
index dc208ff..1363cb3 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
@@ -60,7 +60,7 @@ import java.util.UUID;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
-import lombok.var;
+import lombok.val;
import org.bukkit.entity.Player;
import static com.comphenix.protocol.PacketType.Login.Client.START;
@@ -269,7 +269,7 @@ public class VerifyResponseTask implements Runnable {
startPacket.getStrings().write(0, username);
EquivalentConverter<WrappedProfileKeyData> converter = BukkitConverters.getWrappedPublicKeyDataConverter();
- var wrappedKey = Optional.ofNullable(clientKey).map(key ->
+ val wrappedKey = Optional.ofNullable(clientKey).map(key ->
new WrappedProfileKeyData(clientKey.expiry(), clientKey.key(), clientKey.signature())
);
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/FastLoginBukkitTest.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/FastLoginBukkitTest.java
index e4ce55a..9d6832e 100644
--- a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/FastLoginBukkitTest.java
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/FastLoginBukkitTest.java
@@ -30,7 +30,7 @@ import com.github.games647.fastlogin.core.CommonUtil;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.chat.ComponentSerializer;
-import lombok.var;
+import lombok.val;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -39,12 +39,12 @@ class FastLoginBukkitTest {
@Test
void testRGB() {
- var message = "&x00002a00002b&lText";
- var msg = CommonUtil.translateColorCodes(message);
+ val message = "&x00002a00002b&lText";
+ val msg = CommonUtil.translateColorCodes(message);
assertEquals(msg, "§x00002a00002b§lText");
- var components = TextComponent.fromLegacyText(msg);
- var expected = "{\"bold\":true,\"color\":\"#00a00b\",\"text\":\"Text\"}";
+ val components = TextComponent.fromLegacyText(msg);
+ val expected = "{\"bold\":true,\"color\":\"#00a00b\",\"text\":\"Text\"}";
assertEquals(ComponentSerializer.toString(components), expected);
}
}
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/Base64Adapter.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/Base64Adapter.java
index 29b2f3d..c2fb34d 100644
--- a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/Base64Adapter.java
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/Base64Adapter.java
@@ -32,13 +32,13 @@ import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.util.Base64;
-import lombok.var;
+import lombok.val;
public class Base64Adapter extends TypeAdapter<byte[]> {
@Override
public void write(JsonWriter out, byte[] value) throws IOException {
- var encoded = Base64.getEncoder().encodeToString(value);
+ val encoded = Base64.getEncoder().encodeToString(value);
out.value(encoded);
}
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
index df3888e..1bbe864 100644
--- a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
@@ -50,7 +50,7 @@ import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
-import lombok.var;
+import lombok.val;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
@@ -61,7 +61,7 @@ class EncryptionUtilTest {
@Test
void testVerifyToken() {
- var random = ThreadLocalRandom.current();
+ val random = ThreadLocalRandom.current();
byte[] token = EncryptionUtil.generateVerifyToken(random);
assertAll(
@@ -89,10 +89,10 @@ class EncryptionUtilTest {
@Test
void testExpiredClientKey() throws Exception {
- var clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key.json");
+ val clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key.json");
// Client expires at the exact second mentioned, so use it for verification
- var expiredTimestamp = clientKey.expiry();
+ val expiredTimestamp = clientKey.expiry();
assertFalse(EncryptionUtil.verifyClientKey(clientKey, expiredTimestamp));
}
@@ -106,7 +106,7 @@ class EncryptionUtilTest {
"client_keys/invalid_wrong_signature.json"
})
void testInvalidClientKey(String clientKeySource) throws Exception {
- var clientKey = ResourceLoader.loadClientKey(clientKeySource);
+ val clientKey = ResourceLoader.loadClientKey(clientKeySource);
Instant expireTimestamp = clientKey.expiry().minus(5, ChronoUnit.HOURS);
assertFalse(EncryptionUtil.verifyClientKey(clientKey, expireTimestamp));
@@ -114,8 +114,8 @@ class EncryptionUtilTest {
@Test
void testValidClientKey() throws Exception {
- var clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key.json");
- var verificationTimestamp = clientKey.expiry().minus(5, ChronoUnit.HOURS);
+ val clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key.json");
+ val verificationTimestamp = clientKey.expiry().minus(5, ChronoUnit.HOURS);
assertTrue(EncryptionUtil.verifyClientKey(clientKey, verificationTimestamp));
}
@@ -123,7 +123,7 @@ class EncryptionUtilTest {
@Test
void testDecryptSharedSecret() throws Exception {
KeyPair serverPair = EncryptionUtil.generateKeyPair();
- var serverPK = serverPair.getPublic();
+ val serverPK = serverPair.getPublic();
SecretKey secretKey = generateSharedKey();
byte[] encryptedSecret = encrypt(serverPK, secretKey.getEncoded());
@@ -135,7 +135,7 @@ class EncryptionUtilTest {
private static byte[] encrypt(PublicKey receiverKey, byte... message)
throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
- var encryptCipher = Cipher.getInstance(receiverKey.getAlgorithm());
+ val encryptCipher = Cipher.getInstance(receiverKey.getAlgorithm());
encryptCipher.init(Cipher.ENCRYPT_MODE, receiverKey);
return encryptCipher.doFinal(message);
}
@@ -151,9 +151,9 @@ class EncryptionUtilTest {
@Test
void testServerIdHash() throws Exception {
- var serverId = "";
- var sharedSecret = generateSharedKey();
- var serverPK = ResourceLoader.loadClientKey("client_keys/valid_public_key.json").key();
+ val serverId = "";
+ val sharedSecret = generateSharedKey();
+ val serverPK = ResourceLoader.loadClientKey("client_keys/valid_public_key.json").key();
String sessionHash = getServerHash(serverId, sharedSecret, serverPK);
assertEquals(EncryptionUtil.getServerIdHashString(serverId, sharedSecret, serverPK), sessionHash);
@@ -167,7 +167,7 @@ class EncryptionUtilTest {
// sha1.update(server's encoded public key from Encryption Request)
// hash := sha1.hexdigest() # String of hex characters
@SuppressWarnings("deprecation")
- var hasher = Hashing.sha1().newHasher();
+ val hasher = Hashing.sha1().newHasher();
hasher.putString(serverId, StandardCharsets.US_ASCII);
hasher.putBytes(sharedSecret.getEncoded());
hasher.putBytes(serverPK.getEncoded());
@@ -180,9 +180,9 @@ class EncryptionUtilTest {
@Test
void testServerIdHashWrongSecret() throws Exception {
- var serverId = "";
- var sharedSecret = generateSharedKey();
- var serverPK = ResourceLoader.loadClientKey("client_keys/valid_public_key.json").key();
+ val serverId = "";
+ val sharedSecret = generateSharedKey();
+ val serverPK = ResourceLoader.loadClientKey("client_keys/valid_public_key.json").key();
String sessionHash = getServerHash(serverId, sharedSecret, serverPK);
assertNotEquals(EncryptionUtil.getServerIdHashString("", generateSharedKey(), serverPK), sessionHash);
@@ -190,12 +190,12 @@ class EncryptionUtilTest {
@Test
void testServerIdHashWrongServerKey() {
- var serverId = "";
- var sharedSecret = generateSharedKey();
- var serverPK = EncryptionUtil.generateKeyPair().getPublic();
+ val serverId = "";
+ val sharedSecret = generateSharedKey();
+ val serverPK = EncryptionUtil.generateKeyPair().getPublic();
String sessionHash = getServerHash(serverId, sharedSecret, serverPK);
- var wrongPK = EncryptionUtil.generateKeyPair().getPublic();
+ val wrongPK = EncryptionUtil.generateKeyPair().getPublic();
assertNotEquals(EncryptionUtil.getServerIdHashString("", sharedSecret, wrongPK), sessionHash);
}
@@ -239,8 +239,8 @@ class EncryptionUtilTest {
@Test
void testNonce() throws Exception {
byte[] expected = {1, 2, 3, 4};
- var serverKey = EncryptionUtil.generateKeyPair();
- var encryptedNonce = encrypt(serverKey.getPublic(), expected);
+ val serverKey = EncryptionUtil.generateKeyPair();
+ val encryptedNonce = encrypt(serverKey.getPublic(), expected);
assertTrue(EncryptionUtil.verifyNonce(expected, serverKey.getPrivate(), encryptedNonce));
}
@@ -248,19 +248,19 @@ class EncryptionUtilTest {
@Test
void testNonceIncorrect() throws Exception {
byte[] expected = {1, 2, 3, 4};
- var serverKey = EncryptionUtil.generateKeyPair();
+ val serverKey = EncryptionUtil.generateKeyPair();
// flipped first character
- var encryptedNonce = encrypt(serverKey.getPublic(), new byte[]{0, 2, 3, 4});
+ val encryptedNonce = encrypt(serverKey.getPublic(), new byte[]{0, 2, 3, 4});
assertFalse(EncryptionUtil.verifyNonce(expected, serverKey.getPrivate(), encryptedNonce));
}
@Test
void testNonceFailedDecryption() throws Exception {
byte[] expected = {1, 2, 3, 4};
- var serverKey = EncryptionUtil.generateKeyPair();
+ val serverKey = EncryptionUtil.generateKeyPair();
// generate a new keypair that is different
- var encryptedNonce = encrypt(EncryptionUtil.generateKeyPair().getPublic(), expected);
+ val encryptedNonce = encrypt(EncryptionUtil.generateKeyPair().getPublic(), expected);
assertThrows(GeneralSecurityException.class,
() -> EncryptionUtil.verifyNonce(expected, serverKey.getPrivate(), encryptedNonce)
@@ -270,7 +270,7 @@ class EncryptionUtilTest {
@Test
void testNonceIncorrectEmpty() {
byte[] expected = {1, 2, 3, 4};
- var serverKey = EncryptionUtil.generateKeyPair();
+ val serverKey = EncryptionUtil.generateKeyPair();
byte[] encryptedNonce = {};
assertThrows(GeneralSecurityException.class,
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SignatureTestData.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SignatureTestData.java
index 9a75fc5..01b734e 100644
--- a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SignatureTestData.java
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SignatureTestData.java
@@ -32,13 +32,13 @@ import com.google.gson.annotations.JsonAdapter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
-import lombok.var;
+import lombok.val;
public class SignatureTestData {
public static SignatureTestData fromResource(String resourceName) throws IOException {
- var keyUrl = Resources.getResource(resourceName);
- var encodedSignature = Resources.toString(keyUrl, StandardCharsets.US_ASCII);
+ val keyUrl = Resources.getResource(resourceName);
+ val encodedSignature = Resources.toString(keyUrl, StandardCharsets.US_ASCII);
return new Gson().fromJson(encodedSignature, SignatureTestData.class);
}
diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/FastLoginBungee.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/FastLoginBungee.java
index 148282c..c83c14d 100644
--- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/FastLoginBungee.java
+++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/FastLoginBungee.java
@@ -57,6 +57,7 @@ import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.PendingConnection;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server;
+import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.api.plugin.PluginManager;
import net.md_5.bungee.api.scheduler.GroupedThreadFactory;
@@ -100,7 +101,7 @@ public class FastLoginBungee extends Plugin implements PlatformPlugin<CommandSen
//events
PluginManager pluginManager = getProxy().getPluginManager();
- ConnectListener connectListener = new ConnectListener(this, core.getAntiBot());
+ Listener connectListener = new ConnectListener(this, core.getAntiBot());
pluginManager.registerListener(this, connectListener);
pluginManager.registerListener(this, new PluginMessageListener(this));
2022-07-22 13:26:38 +02:00
7e9da9fd7c
Migrate to Java 8 (sponsored contribution)
...
Java >8 includes many helpful features and API additions. Current
phoronix benchmarks indicated a very similar performance. Furthermore,
the fact that Java 18 even works with 1.8.8 contributed to the
decision to move to Java 17 like vanilla Java in 1.19.
This also helps us to learn about the newer features added for our
personal interests. As this is a free project, this motivated us to make
this step.
Nevertheless, many server owners were frustrated about this decision.
Thanks to financial contribution, we revised this decision until Java 8
is end of life or no longer used actively used according to bstats.org
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
index 68095f6..81abad1 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
@@ -50,7 +50,7 @@ import java.time.Instant;
import java.util.Arrays;
import java.util.Base64;
import java.util.Base64.Encoder;
-import java.util.random.RandomGenerator;
+import java.util.Random;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
@@ -59,6 +59,8 @@ import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
+import lombok.var;
+
/**
* Encryption and decryption minecraft util for connection between servers
* and paid Minecraft account clients.
@@ -112,7 +114,7 @@ final class EncryptionUtil {
* @param random random generator
* @return a token with 4 bytes long
*/
- public static byte[] generateVerifyToken(RandomGenerator random) {
+ public static byte[] generateVerifyToken(Random random) {
byte[] token = new byte[VERIFY_TOKEN_LENGTH];
random.nextBytes(token);
return token;
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
index 2e21ccb..4ce14ff 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
@@ -56,6 +56,7 @@ import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
+import lombok.var;
import org.bukkit.entity.Player;
import static com.comphenix.protocol.PacketType.Login.Client.ENCRYPTION_BEGIN;
@@ -171,7 +172,7 @@ public class ProtocolLibListener extends PacketAdapter {
Either<byte[], ?> either = packet.getSpecificModifier(Either.class).read(0);
if (clientPublicKey == null) {
Optional<byte[]> left = either.left();
- if (left.isEmpty()) {
+ if (!left.isPresent()) {
plugin.getLog().error("No verify token sent if requested without player signed key {}", sender);
return false;
}
@@ -179,7 +180,7 @@ public class ProtocolLibListener extends PacketAdapter {
return EncryptionUtil.verifyNonce(expectedToken, keyPair.getPrivate(), left.get());
} else {
Optional<?> optSignatureData = either.right();
- if (optSignatureData.isEmpty()) {
+ if (!optSignatureData.isPresent()) {
plugin.getLog().error("No signature given to sent player signing key {}", sender);
return false;
}
@@ -219,7 +220,7 @@ public class ProtocolLibListener extends PacketAdapter {
.optionRead(0);
var clientKey = profileKey.flatMap(opt -> opt).flatMap(this::verifyPublicKey);
- if (verifyClientKeys && clientKey.isEmpty()) {
+ if (verifyClientKeys && !clientKey.isPresent()) {
// missing or incorrect
// expired always not allowed
player.kickPlayer(plugin.getCore().getMessage("invalid-public-key"));
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
index 829d764..dc208ff 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
@@ -60,6 +60,7 @@ import java.util.UUID;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
+import lombok.var;
import org.bukkit.entity.Player;
import static com.comphenix.protocol.PacketType.Login.Client.START;
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/packet/ClientPublicKey.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/packet/ClientPublicKey.java
index e375e29..619d41d 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/packet/ClientPublicKey.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/packet/ClientPublicKey.java
@@ -27,8 +27,62 @@ package com.github.games647.fastlogin.bukkit.listener.protocollib.packet;
import java.security.PublicKey;
import java.time.Instant;
+import java.util.Arrays;
+import java.util.Objects;
+import java.util.StringJoiner;
-public record ClientPublicKey(Instant expiry, PublicKey key, byte[] signature) {
+public final class ClientPublicKey {
+ private final Instant expiry;
+ private final PublicKey key;
+ private final byte[] signature;
+
+ public ClientPublicKey(Instant expiry, PublicKey key, byte[] signature) {
+ this.expiry = expiry;
+ this.key = key;
+ this.signature = signature;
+ }
+
+ public Instant expiry() {
+ return expiry;
+ }
+
+ public PublicKey key() {
+ return key;
+ }
+
+ public byte[] signature() {
+ return signature;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+
+ if (obj == null || obj.getClass() != this.getClass()) {
+ return false;
+ }
+
+ ClientPublicKey that = (ClientPublicKey) obj;
+ return Objects.equals(this.expiry, that.expiry)
+ && Objects.equals(this.key, that.key)
+ && Arrays.equals(this.signature, that.signature);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(expiry, key, signature);
+ }
+
+ @Override
+ public String toString() {
+ return new StringJoiner(", ", ClientPublicKey.class.getSimpleName() + "[", "]")
+ .add("expiry=" + expiry)
+ .add("key=" + key)
+ .add("signature=" + Arrays.toString(signature))
+ .toString();
+ }
public boolean isExpired(Instant verifyTimestamp) {
return !verifyTimestamp.isBefore(expiry);
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/FastLoginBukkitTest.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/FastLoginBukkitTest.java
index 07ff623..e4ce55a 100644
--- a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/FastLoginBukkitTest.java
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/FastLoginBukkitTest.java
@@ -30,6 +30,7 @@ import com.github.games647.fastlogin.core.CommonUtil;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.chat.ComponentSerializer;
+import lombok.var;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -43,8 +44,7 @@ class FastLoginBukkitTest {
assertEquals(msg, "§x00002a00002b§lText");
var components = TextComponent.fromLegacyText(msg);
- var expected = """
- {"bold":true,"color":"#00a00b","text":"Text"}""";
+ var expected = "{\"bold\":true,\"color\":\"#00a00b\",\"text\":\"Text\"}";
assertEquals(ComponentSerializer.toString(components), expected);
}
}
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/Base64Adapter.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/Base64Adapter.java
index c2a2d1a..29b2f3d 100644
--- a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/Base64Adapter.java
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/Base64Adapter.java
@@ -32,6 +32,8 @@ import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.util.Base64;
+import lombok.var;
+
public class Base64Adapter extends TypeAdapter<byte[]> {
@Override
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
index e1b8bea..df3888e 100644
--- a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
@@ -50,6 +50,7 @@ import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
+import lombok.var;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ResourceLoader.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ResourceLoader.java
index 4361fe9..ac0991e 100644
--- a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ResourceLoader.java
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ResourceLoader.java
@@ -33,6 +33,7 @@ import com.google.gson.JsonObject;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
+import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
@@ -57,19 +58,19 @@ public class ResourceLoader {
) {
PemObject pemObject = pemReader.readPemObject();
byte[] content = pemObject.getContent();
- var privateKeySpec = new PKCS8EncodedKeySpec(content);
+ PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(content);
- var factory = KeyFactory.getInstance("RSA");
+ KeyFactory factory = KeyFactory.getInstance("RSA");
return (RSAPrivateKey) factory.generatePrivate(privateKeySpec);
}
}
protected static ClientPublicKey loadClientKey(String path)
throws NoSuchAlgorithmException, IOException, InvalidKeySpecException {
- var keyUrl = Resources.getResource(path);
+ URL keyUrl = Resources.getResource(path);
- var lines = Resources.toString(keyUrl, StandardCharsets.US_ASCII);
- var object = new Gson().fromJson(lines, JsonObject.class);
+ String lines = Resources.toString(keyUrl, StandardCharsets.US_ASCII);
+ JsonObject object = new Gson().fromJson(lines, JsonObject.class);
Instant expires = Instant.parse(object.getAsJsonPrimitive("expires_at").getAsString());
String key = object.getAsJsonPrimitive("key").getAsString();
@@ -87,9 +88,9 @@ public class ResourceLoader {
) {
PemObject pemObject = pemReader.readPemObject();
byte[] content = pemObject.getContent();
- var pubKeySpec = new X509EncodedKeySpec(content);
+ X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(content);
- var factory = KeyFactory.getInstance("RSA");
+ KeyFactory factory = KeyFactory.getInstance("RSA");
return (RSAPublicKey) factory.generatePublic(pubKeySpec);
}
}
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SignatureTestData.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SignatureTestData.java
index ee62e24..9a75fc5 100644
--- a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SignatureTestData.java
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SignatureTestData.java
@@ -32,6 +32,8 @@ import com.google.gson.annotations.JsonAdapter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
+import lombok.var;
+
public class SignatureTestData {
public static SignatureTestData fromResource(String resourceName) throws IOException {
diff --git a/core/src/main/java/com/github/games647/fastlogin/core/CommonUtil.java b/core/src/main/java/com/github/games647/fastlogin/core/CommonUtil.java
index 324e240..89dc7ee 100644
--- a/core/src/main/java/com/github/games647/fastlogin/core/CommonUtil.java
+++ b/core/src/main/java/com/github/games647/fastlogin/core/CommonUtil.java
@@ -25,8 +25,7 @@
*/
package com.github.games647.fastlogin.core;
-import com.github.games647.craftapi.cache.SafeCacheBuilder;
-import com.google.common.cache.CacheLoader;
+import com.google.common.cache.CacheBuilder;
import java.lang.reflect.Constructor;
import java.util.concurrent.ConcurrentMap;
@@ -43,7 +42,7 @@ public final class CommonUtil {
private static final char TRANSLATED_CHAR = '§';
public static <K, V> ConcurrentMap<K, V> buildCache(int expireAfterWrite, int maxSize) {
- SafeCacheBuilder<Object, Object> builder = SafeCacheBuilder.newBuilder();
+ CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder();
if (expireAfterWrite > 0) {
builder.expireAfterWrite(expireAfterWrite, TimeUnit.MINUTES);
@@ -53,9 +52,7 @@ public final class CommonUtil {
builder.maximumSize(maxSize);
}
- return builder.build(CacheLoader.from(() -> {
- throw new UnsupportedOperationException();
- }));
+ return (ConcurrentMap<K, V>) builder.build().asMap();
}
public static String translateColorCodes(String rawMessage) {
diff --git a/core/src/main/java/com/github/games647/fastlogin/core/StoredProfile.java b/core/src/main/java/com/github/games647/fastlogin/core/StoredProfile.java
index ee58bde..26492d3 100644
--- a/core/src/main/java/com/github/games647/fastlogin/core/StoredProfile.java
+++ b/core/src/main/java/com/github/games647/fastlogin/core/StoredProfile.java
@@ -118,10 +118,11 @@ public class StoredProfile extends Profile {
return true;
}
- if (!(o instanceof StoredProfile that)) {
+ if (!(o instanceof StoredProfile)) {
return false;
}
+ StoredProfile that = (StoredProfile) o;
if (!super.equals(o)) {
return false;
}
diff --git a/pom.xml b/pom.xml
index f2f3950..e1b26b0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,7 +48,7 @@
<!-- Set default for non-git clones -->
<git.commit.id>Unknown</git.commit.id>
- <java.version>17</java.version>
+ <java.version>8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
@@ -189,5 +189,12 @@
<version>5.8.2</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <version>1.18.24</version>
+ <scope>provided</scope>
+ </dependency>
</dependencies>
</project>
2022-07-22 13:26:38 +02:00
f513cffbaf
Migrate tests to use Junit5
2022-07-22 13:24:57 +02:00
cdb3c50b87
Merge pull request #837 from games647/dependabot/maven/org.mariadb.jdbc-mariadb-java-client-3.0.6
...
Bump mariadb-java-client from 3.0.5 to 3.0.6
2022-07-17 16:56:31 +02:00
e338a768ca
Use class loader for loading the session key
...
Related #849
2022-07-17 16:54:06 +02:00
18a8d7a5dc
Replace Guava with Java joiner
2022-07-17 16:54:06 +02:00
6cf1a79ae1
Reset ignore list of dependabot
2022-07-17 16:54:06 +02:00
0e8b51e148
Minimize dependency jars
2022-07-17 16:54:06 +02:00
ef34550a53
Merge pull request #848 from Smart123s/fix/duplicate/forwardccommand
...
Remove duplicate forwardCrackedCommand()
2022-07-15 08:56:45 +02:00
fe1d4944a8
Remove duplicate forwardCrackedCommand()
...
The forwardCrackedCommand() method is invoked before, the removed code, that does the exact same thing.
2022-07-14 17:11:25 +02:00
423bfa2275
Re-enable force checkstyle check
2022-07-11 13:00:15 +02:00
06b0cf9e02
Merge pull request #779 from Smart123s/feature/codeformatter
...
Add a code formatter
2022-07-11 12:20:42 +02:00
752600f0e2
Fix code formatting according to checkstyle config
2022-07-11 12:14:31 +02:00
cf53ecacdf
Disable hard to meet checkstyle requirements
...
This is temporary.
2022-07-11 12:14:31 +02:00
b740331d31
Add checkstyle.xml
...
Source: 0332cbe0ba/src/main/resources/sun_checks.xml
2022-07-11 12:14:30 +02:00
13b2f22e31
Add code formatter
...
Add checkstyle as maven goal
This will fail the build if the code is not formatted properly
2022-07-11 12:14:30 +02:00
d5d4a32c3f
Fix forwarding the correct player signature
...
Fixes #843
2022-07-11 12:13:36 +02:00
bea3503eff
Merge pull request #821 from games647/809-119-compatibility-1
...
1.19 Support
2022-07-11 09:43:17 +02:00
adfae507ac
Flip velocity check to scan for newer Paper configurations first
...
The PaperConfig class file still exists in newer versions
2022-07-08 16:43:02 +02:00
e89cb3293a
Disable verify client keys by default for older compatibility
...
This also mimics the default vanilla configuration.
2022-07-08 16:30:41 +02:00
b4ddf4fb19
Reduce dependency list to improve on build time
2022-07-08 16:29:25 +02:00
eb47dd3254
Restore compatibility with older Minecraft versions
2022-07-08 16:28:56 +02:00
0b0a46a18a
Make client public key verification optional
2022-07-06 17:08:58 +02:00
7c8de84a34
Bump dependencies
2022-07-06 17:08:57 +02:00
c448be8c5f
Bump mariadb-java-client from 3.0.5 to 3.0.6
...
Bumps [mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) from 3.0.5 to 3.0.6.
- [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.0.5...3.0.6 )
---
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 >
2022-07-04 07:04:41 +00:00
339156be18
Use multiple threads to build the project
2022-07-02 12:37:49 +02:00
944db748e8
Upgrade GitHub actions to use Java 18
2022-07-02 12:36:58 +02:00
bb1cbb79f2
Support newer Paper configuration with clearer error messages
2022-06-28 18:40:51 +02:00
cf356099a0
Fix public key timestamp verification.
2022-06-28 18:34:25 +02:00
91c01e3422
Reuse verify token tick message for signature verification
...
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
index 6c578ff..92e1dcd 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
@@ -153,11 +153,11 @@ public class ProtocolLibListener extends PacketAdapter {
Runnable verifyTask = new VerifyResponseTask(plugin, packetEvent, sender, sharedSecret, keyPair);
plugin.getScheduler().runAsync(verifyTask);
} else {
- sender.kickPlayer("Invalid signature");
+ sender.kickPlayer(plugin.getCore().getMessage("invalid-verify-token"));
plugin.getLog().error("Invalid signature from player {}", sender);
}
} catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException signatureEx) {
- sender.kickPlayer("Invalid signature");
+ sender.kickPlayer(plugin.getCore().getMessage("invalid-verify-token"));
plugin.getLog().error("Invalid signature from player {}", sender, signatureEx);
}
}
2022-06-28 18:34:25 +02:00
c118430bf5
Kick players using an invalid public key
2022-06-28 18:34:25 +02:00
ce59172839
Log signature verification errors to help administrators
...
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
index c3e159a..da28f38 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
@@ -154,9 +154,11 @@ public class ProtocolLibListener extends PacketAdapter {
plugin.getScheduler().runAsync(verifyTask);
} else {
sender.kickPlayer("Invalid signature");
+ plugin.getLog().error("Invalid signature from player {}", sender);
}
- } catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException e) {
+ } catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException signatureEx) {
sender.kickPlayer("Invalid signature");
+ plugin.getLog().error("Invalid signature from player {}", sender, signatureEx);
}
}
}
2022-06-28 18:34:25 +02:00
34e63b7eae
Make profile key optional
2022-06-28 18:34:25 +02:00
e8bb3ec7a9
Validate other encryption methods
2022-06-28 18:34:24 +02:00
1d46640b42
Limit length of server keys
2022-06-28 18:34:24 +02:00
a0fddd69aa
Decrease necessary entropy for running tests
2022-06-28 18:34:24 +02:00
700b889aa9
Improve precision and flexibility of encrypt methods
2022-06-28 18:34:24 +02:00
3767b022a9
Migrate to guava hashing to replace unneeded exceptions
2022-06-28 18:34:24 +02:00
11077a002d
Migrate public key to record
2022-06-28 18:34:24 +02:00
d9bf7267a6
Test valid server key pairs
2022-06-28 18:34:23 +02:00
53e6fe6ddf
Missing synchronization access to the username
2022-06-28 18:34:23 +02:00
1c528fb9cb
Clean up
...
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BungeeManager.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BungeeManager.java
index 49ff879..7149238 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BungeeManager.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BungeeManager.java
@@ -36,6 +36,7 @@ import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@@ -62,7 +63,7 @@ public class BungeeManager {
private final FastLoginBukkit plugin;
private boolean enabled;
- private final Set<UUID> firedJoinEvents = new HashSet<>();
+ private final Collection<UUID> firedJoinEvents = new HashSet<>();
public BungeeManager(FastLoginBukkit plugin) {
this.plugin = plugin;
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/CrackedCommand.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/CrackedCommand.java
index a6ac9b7..6153338 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/CrackedCommand.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/CrackedCommand.java
@@ -44,7 +44,7 @@ public class CrackedCommand extends ToggleCommand {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
if (args.length == 0) {
- onCrackedSelf(sender, command, args);
+ onCrackedSelf(sender);
} else {
onCrackedOther(sender, command, args);
}
@@ -52,7 +52,7 @@ public class CrackedCommand extends ToggleCommand {
return true;
}
- private void onCrackedSelf(CommandSender sender, Command cmd, String[] args) {
+ private void onCrackedSelf(CommandSender sender) {
if (isConsole(sender)) {
return;
}
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/PremiumCommand.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/PremiumCommand.java
index 26b6d31..9f1ef98 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/PremiumCommand.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/command/PremiumCommand.java
@@ -51,7 +51,7 @@ public class PremiumCommand extends ToggleCommand {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
if (args.length == 0) {
- onPremiumSelf(sender, command, args);
+ onPremiumSelf(sender);
} else {
onPremiumOther(sender, command, args);
}
@@ -59,7 +59,7 @@ public class PremiumCommand extends ToggleCommand {
return true;
}
- private void onPremiumSelf(CommandSender sender, Command cmd, String[] args) {
+ private void onPremiumSelf(CommandSender sender) {
if (isConsole(sender)) {
return;
}
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginAutoLoginEvent.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginAutoLoginEvent.java
index 8c61330..6412c6d 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginAutoLoginEvent.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginAutoLoginEvent.java
@@ -28,6 +28,7 @@ package com.github.games647.fastlogin.bukkit.event;
import com.github.games647.fastlogin.core.StoredProfile;
import com.github.games647.fastlogin.core.shared.LoginSession;
import com.github.games647.fastlogin.core.shared.event.FastLoginAutoLoginEvent;
+
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginPreLoginEvent.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginPreLoginEvent.java
index 6b2edfc..5bf6df9 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginPreLoginEvent.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginPreLoginEvent.java
@@ -28,6 +28,7 @@ package com.github.games647.fastlogin.bukkit.event;
import com.github.games647.fastlogin.core.StoredProfile;
import com.github.games647.fastlogin.core.shared.LoginSource;
import com.github.games647.fastlogin.core.shared.event.FastLoginPreLoginEvent;
+
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginPremiumToggleEvent.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginPremiumToggleEvent.java
index 146efb0..0904826 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginPremiumToggleEvent.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/event/BukkitFastLoginPremiumToggleEvent.java
@@ -27,6 +27,7 @@ package com.github.games647.fastlogin.bukkit.event;
import com.github.games647.fastlogin.core.StoredProfile;
import com.github.games647.fastlogin.core.shared.event.FastLoginPremiumToggleEvent;
+
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/hook/AuthMeHook.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/hook/AuthMeHook.java
index fecfb73..45d5a5f 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/hook/AuthMeHook.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/hook/AuthMeHook.java
@@ -28,18 +28,20 @@ package com.github.games647.fastlogin.bukkit.hook;
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
+
import fr.xephi.authme.api.v3.AuthMeApi;
import fr.xephi.authme.events.RestoreSessionEvent;
import fr.xephi.authme.process.Management;
import fr.xephi.authme.process.register.executors.ApiPasswordRegisterParams;
import fr.xephi.authme.process.register.executors.RegistrationMethod;
+
+import java.lang.reflect.Field;
+
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
-import java.lang.reflect.Field;
-
/**
* GitHub: <a href="https://github.com/Xephi/AuthMeReloaded/ ">...</a>
* <p>
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/PaperCacheListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/PaperCacheListener.java
index e444ed9..44ff6ea 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/PaperCacheListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/PaperCacheListener.java
@@ -29,6 +29,7 @@ import com.destroystokyo.paper.profile.ProfileProperty;
import com.github.games647.craftapi.model.skin.Textures;
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
+
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ManualNameChange.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ManualNameChange.java
index cdf3999..2a36e88 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ManualNameChange.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ManualNameChange.java
@@ -25,6 +25,7 @@
*/
package com.github.games647.fastlogin.bukkit.listener.protocollib;
+import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
@@ -36,8 +37,6 @@ import org.geysermc.floodgate.api.FloodgateApi;
import static com.comphenix.protocol.PacketType.Login.Client.START;
-import com.comphenix.protocol.ProtocolLibrary;
-
/**
* Manually inject Floodgate player name prefixes.
* <br>
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java
index 485c065..d3b38ea 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java
@@ -49,7 +49,7 @@ public class NameCheckTask extends JoinManagement<Player, CommandSender, Protoco
private final FastLoginBukkit plugin;
private final PacketEvent packetEvent;
- private final PublicKey publicKey;
+ private final PublicKey serverKey;
private final Random random;
@@ -57,12 +57,12 @@ public class NameCheckTask extends JoinManagement<Player, CommandSender, Protoco
private final String username;
public NameCheckTask(FastLoginBukkit plugin, Random random, Player player, PacketEvent packetEvent,
- String username, PublicKey publicKey) {
+ String username, PublicKey serverKey) {
super(plugin.getCore(), plugin.getCore().getAuthPluginHook(), plugin.getBedrockService());
this.plugin = plugin;
this.packetEvent = packetEvent;
- this.publicKey = publicKey;
+ this.serverKey = serverKey;
this.random = random;
this.player = player;
this.username = username;
@@ -71,9 +71,9 @@ public class NameCheckTask extends JoinManagement<Player, CommandSender, Protoco
@Override
public void run() {
try {
- Optional<WrappedProfileKeyData> publicKey = packetEvent.getPacket().getOptionals(BukkitConverters.getWrappedPublicKeyDataConverter()).read(0);
+ Optional<WrappedProfileKeyData> clientKey = packetEvent.getPacket().getOptionals(BukkitConverters.getWrappedPublicKeyDataConverter()).read(0);
- super.onLogin(username, new ProtocolLibLoginSource(player, random, publicKey.get(), this.publicKey));
+ super.onLogin(username, new ProtocolLibLoginSource(player, random, clientKey.get(), serverKey));
} finally {
ProtocolLibrary.getProtocolManager().getAsynchronousManager().signalPacketTransmission(packetEvent);
}
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
index 55a8f33..89d855d 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
@@ -127,7 +127,7 @@ public class ProtocolLibListener extends PacketAdapter {
}
}
- private Boolean isFastLoginPacket(PacketEvent packetEvent) {
+ private boolean isFastLoginPacket(PacketEvent packetEvent) {
return packetEvent.getPacket().getMeta(SOURCE_META_KEY)
.map(val -> val.equals(plugin.getName()))
.orElse(false);
@@ -146,7 +146,7 @@ public class ProtocolLibListener extends PacketAdapter {
long salt = FuzzyReflection.getFieldValue(signatureData, Long.TYPE, true);
byte[] signature = FuzzyReflection.getFieldValue(signatureData, byte[].class, true);
- PublicKey publicKey = session.getClientPublicKey().getKey();
+ PublicKey publicKey = session.getClientPublicKey().key();
try {
if (EncryptionUtil.verifySignedNonce(session.getVerifyToken(), publicKey, salt, signature)) {
packetEvent.getAsyncMarker().incrementProcessingDelay();
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java
index d87b602..d4c1130 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java
@@ -33,7 +33,6 @@ import com.comphenix.protocol.wrappers.WrappedChatComponent;
import com.comphenix.protocol.wrappers.WrappedProfilePublicKey.WrappedProfileKeyData;
import com.github.games647.fastlogin.core.shared.LoginSource;
-import java.lang.reflect.InvocationTargetException;
import java.net.InetSocketAddress;
import java.security.PublicKey;
import java.util.Arrays;
@@ -64,7 +63,7 @@ class ProtocolLibLoginSource implements LoginSource {
}
@Override
- public void enableOnlinemode() throws InvocationTargetException {
+ public void enableOnlinemode() {
verifyToken = EncryptionUtil.generateVerifyToken(random);
/*
@@ -92,7 +91,7 @@ class ProtocolLibLoginSource implements LoginSource {
}
@Override
- public void kick(String message) throws InvocationTargetException {
+ public void kick(String message) {
ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
PacketContainer kickPacket = new PacketContainer(DISCONNECT);
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SkinApplyListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SkinApplyListener.java
index 7d43835..3d4a807 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SkinApplyListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SkinApplyListener.java
@@ -34,6 +34,9 @@ import com.comphenix.protocol.wrappers.WrappedSignedProperty;
import com.github.games647.craftapi.model.skin.Textures;
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
+
+import java.lang.reflect.InvocationTargetException;
+
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -41,8 +44,6 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerLoginEvent.Result;
-import java.lang.reflect.InvocationTargetException;
-
public class SkinApplyListener implements Listener {
private static final Class<?> GAME_PROFILE = MinecraftReflection.getGameProfileClass();
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/task/FloodgateAuthTask.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/task/FloodgateAuthTask.java
index acb3597..ef9fed0 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/task/FloodgateAuthTask.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/task/FloodgateAuthTask.java
@@ -25,6 +25,11 @@
*/
package com.github.games647.fastlogin.bukkit.task;
+import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
+import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
+import com.github.games647.fastlogin.core.shared.FastLoginCore;
+import com.github.games647.fastlogin.core.shared.FloodgateManagement;
+
import java.net.InetSocketAddress;
import java.util.UUID;
@@ -33,11 +38,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.geysermc.floodgate.api.player.FloodgatePlayer;
-import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
-import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
-import com.github.games647.fastlogin.core.shared.FastLoginCore;
-import com.github.games647.fastlogin.core.shared.FloodgateManagement;
-
public class FloodgateAuthTask extends FloodgateManagement<Player, CommandSender, BukkitLoginSession, FastLoginBukkit> {
public FloodgateAuthTask(FastLoginCore<Player, CommandSender, FastLoginBukkit> core, Player player, FloodgatePlayer floodgatePlayer) {
diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/event/BungeeFastLoginAutoLoginEvent.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/event/BungeeFastLoginAutoLoginEvent.java
index 365a198..6503ff9 100644
--- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/event/BungeeFastLoginAutoLoginEvent.java
+++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/event/BungeeFastLoginAutoLoginEvent.java
@@ -28,6 +28,7 @@ package com.github.games647.fastlogin.bungee.event;
import com.github.games647.fastlogin.core.StoredProfile;
import com.github.games647.fastlogin.core.shared.LoginSession;
import com.github.games647.fastlogin.core.shared.event.FastLoginAutoLoginEvent;
+
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;
diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/event/BungeeFastLoginPreLoginEvent.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/event/BungeeFastLoginPreLoginEvent.java
index b350763..2128cab 100644
--- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/event/BungeeFastLoginPreLoginEvent.java
+++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/event/BungeeFastLoginPreLoginEvent.java
@@ -28,6 +28,7 @@ package com.github.games647.fastlogin.bungee.event;
import com.github.games647.fastlogin.core.StoredProfile;
import com.github.games647.fastlogin.core.shared.LoginSource;
import com.github.games647.fastlogin.core.shared.event.FastLoginPreLoginEvent;
+
import net.md_5.bungee.api.plugin.Event;
public class BungeeFastLoginPreLoginEvent extends Event implements FastLoginPreLoginEvent {
diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncToggleMessage.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncToggleMessage.java
index 98c384c..2965855 100644
--- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncToggleMessage.java
+++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncToggleMessage.java
@@ -29,8 +29,8 @@ import com.github.games647.fastlogin.bungee.FastLoginBungee;
import com.github.games647.fastlogin.bungee.event.BungeeFastLoginPremiumToggleEvent;
import com.github.games647.fastlogin.core.StoredProfile;
import com.github.games647.fastlogin.core.shared.FastLoginCore;
-
import com.github.games647.fastlogin.core.shared.event.FastLoginPremiumToggleEvent.PremiumToggleReason;
+
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.TextComponent;
diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/FloodgateAuthTask.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/FloodgateAuthTask.java
index 72719cf..5133198 100644
--- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/FloodgateAuthTask.java
+++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/FloodgateAuthTask.java
@@ -25,19 +25,19 @@
*/
package com.github.games647.fastlogin.bungee.task;
+import com.github.games647.fastlogin.bungee.BungeeLoginSession;
+import com.github.games647.fastlogin.bungee.FastLoginBungee;
+import com.github.games647.fastlogin.core.shared.FastLoginCore;
+import com.github.games647.fastlogin.core.shared.FloodgateManagement;
+
import java.net.InetSocketAddress;
import java.util.UUID;
-import org.geysermc.floodgate.api.player.FloodgatePlayer;
-
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server;
-import com.github.games647.fastlogin.bungee.BungeeLoginSession;
-import com.github.games647.fastlogin.bungee.FastLoginBungee;
-import com.github.games647.fastlogin.core.shared.FastLoginCore;
-import com.github.games647.fastlogin.core.shared.FloodgateManagement;
+import org.geysermc.floodgate.api.player.FloodgatePlayer;
public class FloodgateAuthTask
extends FloodgateManagement<ProxiedPlayer, CommandSender, BungeeLoginSession, FastLoginBungee> {
diff --git a/core/src/main/java/com/github/games647/fastlogin/core/hooks/DefaultPasswordGenerator.java b/core/src/main/java/com/github/games647/fastlogin/core/hooks/DefaultPasswordGenerator.java
index b6802a6..9caadef 100644
--- a/core/src/main/java/com/github/games647/fastlogin/core/hooks/DefaultPasswordGenerator.java
+++ b/core/src/main/java/com/github/games647/fastlogin/core/hooks/DefaultPasswordGenerator.java
@@ -26,7 +26,7 @@
package com.github.games647.fastlogin.core.hooks;
import java.security.SecureRandom;
-import java.util.Random;
+import java.util.random.RandomGenerator;
import java.util.stream.IntStream;
public class DefaultPasswordGenerator<P> implements PasswordGenerator<P> {
@@ -35,7 +35,7 @@ public class DefaultPasswordGenerator<P> implements PasswordGenerator<P> {
private static final char[] PASSWORD_CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
.toCharArray();
- private final Random random = new SecureRandom();
+ private final RandomGenerator random = new SecureRandom();
@Override
public String getRandomPassword(P player) {
diff --git a/core/src/main/java/com/github/games647/fastlogin/core/hooks/bedrock/FloodgateService.java b/core/src/main/java/com/github/games647/fastlogin/core/hooks/bedrock/FloodgateService.java
index 7e6a1c2..1b555f1 100644
--- a/core/src/main/java/com/github/games647/fastlogin/core/hooks/bedrock/FloodgateService.java
+++ b/core/src/main/java/com/github/games647/fastlogin/core/hooks/bedrock/FloodgateService.java
@@ -54,14 +54,13 @@ public class FloodgateService extends BedrockService<FloodgatePlayer> {
* <li>autoLoginFloodgate
* <li>autoRegisterFloodgate
* </ul>
- * </p>
*
* @param key the key of the entry in config.yml
* @return <b>true</b> if the entry's value is "true", "false", or "linked"
*/
public boolean isValidFloodgateConfigString(String key) {
String value = core.getConfig().get(key).toString().toLowerCase(Locale.ENGLISH);
- if (!value.equals("true") && !value.equals("linked") && !value.equals("false") && !value.equals("no-conflict")) {
+ if (!"true".equals(value) && !"linked".equals(value) && !"false".equals(value) && !"no-conflict".equals(value)) {
core.getPlugin().getLog().error("Invalid value detected for {} in FastLogin/config.yml.", key);
return false;
}
@@ -87,7 +86,7 @@ public class FloodgateService extends BedrockService<FloodgatePlayer> {
} else {
core.getPlugin().getLog().info("Skipping name conflict checking for player {}", username);
}
-
+
//Floodgate users don't need Java specific checks
return true;
}
@@ -98,7 +97,7 @@ public class FloodgateService extends BedrockService<FloodgatePlayer> {
* username can be found
* <br>
* <i>Falls back to non-prefixed name checks, if ProtocolLib is installed</i>
- *
+ *
* @param prefixedUsername the name of the player with the prefix appended
* @return FloodgatePlayer if found, null otherwise
*/
diff --git a/core/src/main/java/com/github/games647/fastlogin/core/shared/ForceLoginManagement.java b/core/src/main/java/com/github/games647/fastlogin/core/shared/ForceLoginManagement.java
index c8c7bea..873a855 100644
--- a/core/src/main/java/com/github/games647/fastlogin/core/shared/ForceLoginManagement.java
+++ b/core/src/main/java/com/github/games647/fastlogin/core/shared/ForceLoginManagement.java
@@ -25,10 +25,10 @@
*/
package com.github.games647.fastlogin.core.shared;
-import com.github.games647.fastlogin.core.storage.SQLStorage;
import com.github.games647.fastlogin.core.StoredProfile;
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
import com.github.games647.fastlogin.core.shared.event.FastLoginAutoLoginEvent;
+import com.github.games647.fastlogin.core.storage.SQLStorage;
public abstract class ForceLoginManagement<P extends C, C, L extends LoginSession, T extends PlatformPlugin<C>>
implements Runnable {
diff --git a/core/src/test/java/com/github/games647/fastlogin/core/TickingRateLimiterTest.java b/core/src/test/java/com/github/games647/fastlogin/core/TickingRateLimiterTest.java
index 3f753cd..34f196a 100644
--- a/core/src/test/java/com/github/games647/fastlogin/core/TickingRateLimiterTest.java
+++ b/core/src/test/java/com/github/games647/fastlogin/core/TickingRateLimiterTest.java
@@ -32,8 +32,8 @@ import java.util.concurrent.TimeUnit;
import org.junit.Test;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
public class TickingRateLimiterTest {
@@ -43,7 +43,7 @@ public class TickingRateLimiterTest {
* Always expired
*/
@Test
- public void allowExpire() throws InterruptedException {
+ public void allowExpire() {
int size = 3;
FakeTicker ticker = new FakeTicker(5_000_000L);
@@ -51,17 +51,17 @@ public class TickingRateLimiterTest {
// run twice the size to fill it first and then test it
TickingRateLimiter rateLimiter = new TickingRateLimiter(ticker, size, 0);
for (int i = 0; i < size; i++) {
- assertTrue("Filling up", rateLimiter.tryAcquire());
+ assertThat("Filling up", rateLimiter.tryAcquire(), is(true));
}
for (int i = 0; i < size; i++) {
ticker.add(Duration.ofSeconds(1));
- assertTrue("Should be expired", rateLimiter.tryAcquire());
+ assertThat("Should be expired", rateLimiter.tryAcquire(), is(true));
}
}
@Test
- public void allowExpireNegative() throws InterruptedException {
+ public void allowExpireNegative() {
int size = 3;
FakeTicker ticker = new FakeTicker(-5_000_000L);
@@ -69,12 +69,12 @@ public class TickingRateLimiterTest {
// run twice the size to fill it first and then test it
TickingRateLimiter rateLimiter = new TickingRateLimiter(ticker, size, 0);
for (int i = 0; i < size; i++) {
- assertTrue("Filling up", rateLimiter.tryAcquire());
+ assertThat("Filling up", rateLimiter.tryAcquire(), is(true));
}
for (int i = 0; i < size; i++) {
ticker.add(Duration.ofSeconds(1));
- assertTrue("Should be expired", rateLimiter.tryAcquire());
+ assertThat("Should be expired", rateLimiter.tryAcquire(), is(true));
}
}
@@ -90,10 +90,10 @@ public class TickingRateLimiterTest {
// fill the size
TickingRateLimiter rateLimiter = new TickingRateLimiter(ticker, size, TimeUnit.SECONDS.toMillis(30));
for (int i = 0; i < size; i++) {
- assertTrue("Filling up", rateLimiter.tryAcquire());
+ assertThat("Filling up", rateLimiter.tryAcquire(), is(true));
}
- assertFalse("Should be full and no entry should be expired", rateLimiter.tryAcquire());
+ assertThat("Should be full and no entry should be expired", rateLimiter.tryAcquire(), is(false));
}
/**
@@ -108,51 +108,51 @@ public class TickingRateLimiterTest {
// fill the size
TickingRateLimiter rateLimiter = new TickingRateLimiter(ticker, size, TimeUnit.SECONDS.toMillis(30));
for (int i = 0; i < size; i++) {
- assertTrue("Filling up", rateLimiter.tryAcquire());
+ assertThat("Filling up", rateLimiter.tryAcquire(), is(true));
}
- assertFalse("Should be full and no entry should be expired", rateLimiter.tryAcquire());
+ assertThat("Should be full and no entry should be expired", rateLimiter.tryAcquire(), is(false));
}
/**
* Blocked attempts shouldn't replace existing ones.
*/
@Test
- public void blockedNotAdded() throws InterruptedException {
+ public void blockedNotAdded() {
FakeTicker ticker = new FakeTicker(5_000_000L);
// fill the size - 100ms should be reasonable high
TickingRateLimiter rateLimiter = new TickingRateLimiter(ticker, 1, 100);
- assertTrue("Filling up", rateLimiter.tryAcquire());
+ assertThat("Filling up", rateLimiter.tryAcquire(), is(true));
ticker.add(Duration.ofMillis(50));
// still is full - should fail
- assertFalse("Expired too early", rateLimiter.tryAcquire());
+ assertThat("Expired too early", rateLimiter.tryAcquire(), is(false));
// wait the remaining time and add a threshold, because
ticker.add(Duration.ofMillis(50));
- assertTrue("Request not released", rateLimiter.tryAcquire());
+ assertThat("Request not released", rateLimiter.tryAcquire(), is(true));
}
/**
* Blocked attempts shouldn't replace existing ones.
*/
@Test
- public void blockedNotAddedNegative() throws InterruptedException {
+ public void blockedNotAddedNegative() {
FakeTicker ticker = new FakeTicker(-5_000_000L);
// fill the size - 100ms should be reasonable high
TickingRateLimiter rateLimiter = new TickingRateLimiter(ticker, 1, 100);
- assertTrue("Filling up", rateLimiter.tryAcquire());
+ assertThat("Filling up", rateLimiter.tryAcquire(), is(true));
ticker.add(Duration.ofMillis(50));
// still is full - should fail
- assertFalse("Expired too early", rateLimiter.tryAcquire());
+ assertThat("Expired too early", rateLimiter.tryAcquire(), is(false));
// wait the remaining time and add a threshold, because
ticker.add(Duration.ofMillis(50));
- assertTrue("Request not released", rateLimiter.tryAcquire());
+ assertThat("Request not released", rateLimiter.tryAcquire(), is(true));
}
}
diff --git a/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/ConnectListener.java b/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/ConnectListener.java
index 33c8c31..902fb03 100644
--- a/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/ConnectListener.java
+++ b/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/ConnectListener.java
@@ -45,9 +45,11 @@ import com.velocitypowered.api.proxy.InboundConnection;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.server.RegisteredServer;
import com.velocitypowered.api.util.GameProfile;
+import com.velocitypowered.api.util.GameProfile.Property;
import java.net.InetSocketAddress;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@@ -121,7 +123,7 @@ public class ConnectListener {
}
}
- private List<GameProfile.Property> removeSkin(List<GameProfile.Property> oldProperties) {
+ private List<GameProfile.Property> removeSkin(Collection<Property> oldProperties) {
List<GameProfile.Property> newProperties = new ArrayList<>(oldProperties.size() - 1);
for (GameProfile.Property property : oldProperties) {
if (!"textures".equals(property.getName()))
diff --git a/velocity/src/main/java/com/github/games647/fastlogin/velocity/task/AsyncToggleMessage.java b/velocity/src/main/java/com/github/games647/fastlogin/velocity/task/AsyncToggleMessage.java
index 12444fc..8dc7d1c 100644
--- a/velocity/src/main/java/com/github/games647/fastlogin/velocity/task/AsyncToggleMessage.java
+++ b/velocity/src/main/java/com/github/games647/fastlogin/velocity/task/AsyncToggleMessage.java
@@ -32,6 +32,7 @@ import com.github.games647.fastlogin.velocity.FastLoginVelocity;
import com.github.games647.fastlogin.velocity.event.VelocityFastLoginPremiumToggleEvent;
import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.proxy.Player;
+
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
public class AsyncToggleMessage implements Runnable {
2022-06-28 18:34:23 +02:00
b041a89209
Typo fixes
2022-06-28 18:34:23 +02:00
a5942cba74
Use HTML links
2022-06-28 18:34:23 +02:00
f44d7a6780
Forward client key to server
...
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
index a3bb3d0..55a8f33 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
@@ -119,7 +119,7 @@ public class ProtocolLibListener extends PacketAdapter {
case Continue:
default:
//player.getName() won't work at this state
- onLogin(packetEvent, sender, username);
+ onLoginStart(packetEvent, sender, username);
break;
}
} else {
@@ -146,7 +146,6 @@ public class ProtocolLibListener extends PacketAdapter {
long salt = FuzzyReflection.getFieldValue(signatureData, Long.TYPE, true);
byte[] signature = FuzzyReflection.getFieldValue(signatureData, byte[].class, true);
- BukkitLoginSession session = plugin.getSession(sender.getAddress());
PublicKey publicKey = session.getClientPublicKey().getKey();
try {
if (EncryptionUtil.verifySignedNonce(session.getVerifyToken(), publicKey, salt, signature)) {
@@ -162,7 +161,7 @@ public class ProtocolLibListener extends PacketAdapter {
}
}
- private void onLogin(PacketEvent packetEvent, Player player, String username) {
+ private void onLoginStart(PacketEvent packetEvent, Player player, String username) {
//this includes ip:port. Should be unique for an incoming login request with a timeout of 2 minutes
String sessionKey = player.getAddress().toString();
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
index d13a5c9..ed84298 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
@@ -43,6 +43,7 @@ import com.github.games647.craftapi.model.skin.SkinProperty;
import com.github.games647.craftapi.resolver.MojangResolver;
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
+import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
import java.io.IOException;
import java.lang.reflect.Method;
@@ -168,7 +169,7 @@ public class VerifyResponseTask implements Runnable {
session.setVerified(true);
setPremiumUUID(session.getUuid());
- receiveFakeStartPacket(realUsername);
+ receiveFakeStartPacket(realUsername, session.getClientPublicKey());
}
private void setPremiumUUID(UUID premiumUUID) {
@@ -253,7 +254,7 @@ public class VerifyResponseTask implements Runnable {
}
//fake a new login packet in order to let the server handle all the other stuff
- private void receiveFakeStartPacket(String username) {
+ private void receiveFakeStartPacket(String username, ClientPublicKey clientKey) {
//see StartPacketListener for packet information
PacketContainer startPacket = new PacketContainer(START);
@@ -261,7 +262,8 @@ public class VerifyResponseTask implements Runnable {
startPacket.getStrings().write(0, username);
EquivalentConverter<WrappedProfileKeyData> converter = BukkitConverters.getWrappedPublicKeyDataConverter();
- startPacket.getOptionals(converter).write(0, Optional.empty());
+ var key = new WrappedProfileKeyData(clientKey.getExpiry(), clientKey.getKey(), sharedSecret);
+ startPacket.getOptionals(converter).write(0, Optional.of(key));
} else {
//uuid is ignored by the packet definition
WrappedGameProfile fakeProfile = new WrappedGameProfile(UUID.randomUUID(), username);
2022-06-28 18:34:23 +02:00
0f17fe18f9
Document origin of signing keys
2022-06-28 18:34:22 +02:00
dac5cd7639
Verify signed nonce
...
diff --git a/bukkit/pom.xml b/bukkit/pom.xml
index 9b3c5c5..c1f63ba 100644
--- a/bukkit/pom.xml
+++ b/bukkit/pom.xml
@@ -179,6 +179,19 @@
<version>1.0.7</version>
</dependency>
+ <dependency>
+ <groupId>com.mojang</groupId>
+ <artifactId>datafixerupper</artifactId>
+ <version>5.0.28</version>
+ <scope>provided</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
<!--Library for listening and sending Minecraft packets-->
<dependency>
<groupId>com.comphenix.protocol</groupId>
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BukkitLoginSession.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BukkitLoginSession.java
index 556def1..4f4af4d 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BukkitLoginSession.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BukkitLoginSession.java
@@ -26,6 +26,7 @@
package com.github.games647.fastlogin.bukkit;
import com.github.games647.craftapi.model.skin.SkinProperty;
+import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
import com.github.games647.fastlogin.core.StoredProfile;
import com.github.games647.fastlogin.core.shared.LoginSession;
@@ -42,30 +43,33 @@ public class BukkitLoginSession extends LoginSession {
private final byte[] verifyToken;
+ private final ClientPublicKey clientPublicKey;
+
private boolean verified;
private SkinProperty skinProperty;
- public BukkitLoginSession(String username, byte[] verifyToken, boolean registered
+ public BukkitLoginSession(String username, byte[] verifyToken, ClientPublicKey publicKey, boolean registered
, StoredProfile profile) {
super(username, registered, profile);
+ this.clientPublicKey = publicKey;
this.verifyToken = verifyToken.clone();
}
//available for BungeeCord
public BukkitLoginSession(String username, boolean registered) {
- this(username, EMPTY_ARRAY, registered, null);
+ this(username, EMPTY_ARRAY, null, registered, null);
}
//cracked player
public BukkitLoginSession(String username, StoredProfile profile) {
- this(username, EMPTY_ARRAY, false, profile);
+ this(username, EMPTY_ARRAY, null, false, profile);
}
//ProtocolSupport
public BukkitLoginSession(String username, boolean registered, StoredProfile profile) {
- this(username, EMPTY_ARRAY, registered, profile);
+ this(username, EMPTY_ARRAY, null, registered, profile);
}
/**
@@ -79,6 +83,10 @@ public class BukkitLoginSession extends LoginSession {
return verifyToken.clone();
}
+ public ClientPublicKey getClientPublicKey() {
+ return clientPublicKey;
+ }
+
/**
* @return premium skin if available
*/
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
index 956a60f..713fa68 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
@@ -27,6 +27,7 @@ package com.github.games647.fastlogin.bukkit.listener.protocollib;
import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
import com.google.common.io.Resources;
+import com.google.common.primitives.Longs;
import java.io.IOException;
import java.math.BigInteger;
@@ -115,9 +116,9 @@ class EncryptionUtil {
/**
* Generate the server id based on client and server data.
*
- * @param sessionId session for the current login attempt
+ * @param sessionId session for the current login attempt
* @param sharedSecret shared secret between the client and the server
- * @param publicKey public key of the server
+ * @param publicKey public key of the server
* @return the server id formatted as a hexadecimal string.
*/
public static String getServerIdHashString(String sessionId, SecretKey sharedSecret, PublicKey publicKey) {
@@ -136,7 +137,7 @@ class EncryptionUtil {
* Decrypts the content and extracts the key spec.
*
* @param privateKey private server key
- * @param sharedKey the encrypted shared key
+ * @param sharedKey the encrypted shared key
* @return shared secret key
* @throws GeneralSecurityException if it fails to decrypt the data
*/
@@ -151,10 +152,20 @@ class EncryptionUtil {
return false;
}
- Signature signature = Signature.getInstance("SHA1withRSA");
- signature.initVerify(mojangSessionKey);
- signature.update(toSignable(clientKey).getBytes(StandardCharsets.US_ASCII));
- return signature.verify(clientKey.getSignature());
+ Signature verifier = Signature.getInstance("SHA1withRSA");
+ verifier.initVerify(mojangSessionKey);
+ verifier.update(toSignable(clientKey).getBytes(StandardCharsets.US_ASCII));
+ return verifier.verify(clientKey.getSignature());
+ }
+
+ public static boolean verifySignedNonce(byte[] nonce, PublicKey clientKey, long signatureSalt, byte[] signature)
+ throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
+ Signature verifier = Signature.getInstance("SHA256withRSA");
+ verifier.initVerify(clientKey);
+
+ verifier.update(nonce);
+ verifier.update(Longs.toByteArray(signatureSalt));
+ return verifier.verify(signature);
}
private static PublicKey loadMojangSessionKey()
@@ -183,7 +194,7 @@ class EncryptionUtil {
* Decrypted the given data using the cipher.
*
* @param cipher decryption cypher initialized with the private key
- * @param data the encrypted data
+ * @param data the encrypted data
* @return clear text data
* @throws GeneralSecurityException if it fails to decrypt the data
*/
@@ -194,7 +205,7 @@ class EncryptionUtil {
}
private static byte[] getServerIdHash(String sessionId, PublicKey publicKey, SecretKey sharedSecret)
- throws NoSuchAlgorithmException {
+ throws NoSuchAlgorithmException {
// byte[] a(String var0, PublicKey var1, SecretKey var2)
MessageDigest digest = MessageDigest.getInstance("SHA-1");
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java
index f0a4083..485c065 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java
@@ -27,21 +27,25 @@ package com.github.games647.fastlogin.bukkit.listener.protocollib;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketEvent;
+import com.comphenix.protocol.wrappers.BukkitConverters;
+import com.comphenix.protocol.wrappers.WrappedProfilePublicKey.WrappedProfileKeyData;
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
import com.github.games647.fastlogin.bukkit.event.BukkitFastLoginPreLoginEvent;
+import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
import com.github.games647.fastlogin.core.StoredProfile;
import com.github.games647.fastlogin.core.shared.JoinManagement;
import com.github.games647.fastlogin.core.shared.event.FastLoginPreLoginEvent;
import java.security.PublicKey;
+import java.util.Optional;
import java.util.Random;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class NameCheckTask extends JoinManagement<Player, CommandSender, ProtocolLibLoginSource>
- implements Runnable {
+ implements Runnable {
private final FastLoginBukkit plugin;
private final PacketEvent packetEvent;
@@ -67,7 +71,9 @@ public class NameCheckTask extends JoinManagement<Player, CommandSender, Protoco
@Override
public void run() {
try {
- super.onLogin(username, new ProtocolLibLoginSource(player, random, publicKey));
+ Optional<WrappedProfileKeyData> publicKey = packetEvent.getPacket().getOptionals(BukkitConverters.getWrappedPublicKeyDataConverter()).read(0);
+
+ super.onLogin(username, new ProtocolLibLoginSource(player, random, publicKey.get(), this.publicKey));
} finally {
ProtocolLibrary.getProtocolManager().getAsynchronousManager().signalPacketTransmission(packetEvent);
}
@@ -85,7 +91,7 @@ public class NameCheckTask extends JoinManagement<Player, CommandSender, Protoco
//https://github.com/bergerkiller/CraftSource/blob/master/net.minecraft.server/LoginListener.java#L161
@Override
public void requestPremiumLogin(ProtocolLibLoginSource source, StoredProfile profile
- , String username, boolean registered) {
+ , String username, boolean registered) {
try {
source.enableOnlinemode();
} catch (Exception ex) {
@@ -97,8 +103,10 @@ public class NameCheckTask extends JoinManagement<Player, CommandSender, Protoco
core.getPendingLogin().put(ip + username, new Object());
byte[] verify = source.getVerifyToken();
+ WrappedProfileKeyData key = source.getClientPublicKey();
+ ClientPublicKey clientKey = new ClientPublicKey(key.getExpireTime(), key.getKey(), key.getSignature());
- BukkitLoginSession playerSession = new BukkitLoginSession(username, verify, registered, profile);
+ BukkitLoginSession playerSession = new BukkitLoginSession(username, verify, clientKey, registered, profile);
plugin.putSession(player.getAddress(), playerSession);
//cancel only if the player has a paid account otherwise login as normal offline player
synchronized (packetEvent.getAsyncMarker().getProcessingLock()) {
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
index 27c0335..a3bb3d0 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
@@ -30,6 +30,7 @@ import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
+import com.comphenix.protocol.reflect.FuzzyReflection;
import com.comphenix.protocol.wrappers.WrappedGameProfile;
import com.comphenix.protocol.wrappers.WrappedProfilePublicKey;
import com.comphenix.protocol.wrappers.WrappedProfilePublicKey.WrappedProfileKeyData;
@@ -38,6 +39,7 @@ import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
import com.github.games647.fastlogin.core.antibot.AntiBotService;
import com.github.games647.fastlogin.core.antibot.AntiBotService.Action;
+import com.mojang.datafixers.util.Either;
import java.net.InetSocketAddress;
import java.security.InvalidKeyException;
@@ -139,9 +141,24 @@ public class ProtocolLibListener extends PacketAdapter {
plugin.getLog().warn("GameProfile {} tried to send encryption response at invalid state", sender.getAddress());
sender.kickPlayer(plugin.getCore().getMessage("invalid-request"));
} else {
- packetEvent.getAsyncMarker().incrementProcessingDelay();
- Runnable verifyTask = new VerifyResponseTask(plugin, packetEvent, sender, session, sharedSecret, keyPair);
- plugin.getScheduler().runAsync(verifyTask);
+ Either<byte[], ?> either = packetEvent.getPacket().getSpecificModifier(Either.class).read(0);
+ Object signatureData = either.right().get();
+ long salt = FuzzyReflection.getFieldValue(signatureData, Long.TYPE, true);
+ byte[] signature = FuzzyReflection.getFieldValue(signatureData, byte[].class, true);
+
+ BukkitLoginSession session = plugin.getSession(sender.getAddress());
+ PublicKey publicKey = session.getClientPublicKey().getKey();
+ try {
+ if (EncryptionUtil.verifySignedNonce(session.getVerifyToken(), publicKey, salt, signature)) {
+ packetEvent.getAsyncMarker().incrementProcessingDelay();
+ Runnable verifyTask = new VerifyResponseTask(plugin, packetEvent, sender, sharedSecret, keyPair);
+ plugin.getScheduler().runAsync(verifyTask);
+ } else {
+ sender.kickPlayer("Invalid signature");
+ }
+ } catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException e) {
+ sender.kickPlayer("Invalid signature");
+ }
}
}
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java
index dd191f1..d87b602 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibLoginSource.java
@@ -30,6 +30,7 @@ import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.reflect.StructureModifier;
import com.comphenix.protocol.wrappers.WrappedChatComponent;
+import com.comphenix.protocol.wrappers.WrappedProfilePublicKey.WrappedProfileKeyData;
import com.github.games647.fastlogin.core.shared.LoginSource;
import java.lang.reflect.InvocationTargetException;
@@ -48,15 +49,18 @@ class ProtocolLibLoginSource implements LoginSource {
private final Player player;
private final Random random;
+
+ private final WrappedProfileKeyData clientPublicKey;
private final PublicKey publicKey;
private final String serverId = "";
private byte[] verifyToken;
- public ProtocolLibLoginSource(Player player, Random random, PublicKey publicKey) {
+ public ProtocolLibLoginSource(Player player, Random random, WrappedProfileKeyData clientPublicKey, PublicKey serverPublicKey) {
this.player = player;
this.random = random;
- this.publicKey = publicKey;
+ this.clientPublicKey = clientPublicKey;
+ this.publicKey = serverPublicKey;
}
@Override
@@ -109,6 +113,10 @@ class ProtocolLibLoginSource implements LoginSource {
return player.getAddress();
}
+ public WrappedProfileKeyData getClientPublicKey() {
+ return clientPublicKey;
+ }
+
public String getServerId() {
return serverId;
}
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
index e974b09..d13a5c9 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
@@ -29,12 +29,15 @@ import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.injector.temporary.TemporaryPlayerFactory;
+import com.comphenix.protocol.reflect.EquivalentConverter;
import com.comphenix.protocol.reflect.FieldUtils;
import com.comphenix.protocol.reflect.FuzzyReflection;
import com.comphenix.protocol.utility.MinecraftReflection;
import com.comphenix.protocol.utility.MinecraftVersion;
+import com.comphenix.protocol.wrappers.BukkitConverters;
import com.comphenix.protocol.wrappers.WrappedChatComponent;
import com.comphenix.protocol.wrappers.WrappedGameProfile;
+import com.comphenix.protocol.wrappers.WrappedProfilePublicKey.WrappedProfileKeyData;
import com.github.games647.craftapi.model.auth.Verification;
import com.github.games647.craftapi.model.skin.SkinProperty;
import com.github.games647.craftapi.resolver.MojangResolver;
@@ -120,7 +123,7 @@ public class VerifyResponseTask implements Runnable {
}
try {
- if (!checkVerifyToken(session) || !enableEncryption(loginKey)) {
+ if (!enableEncryption(loginKey)) {
return;
}
} catch (Exception ex) {
@@ -180,23 +183,6 @@ public class VerifyResponseTask implements Runnable {
}
}
- private boolean checkVerifyToken(BukkitLoginSession session) throws GeneralSecurityException {
- byte[] requestVerify = session.getVerifyToken();
- //encrypted verify token
- byte[] responseVerify = packetEvent.getPacket().getByteArrays().read(1);
-
- //https://github.com/bergerkiller/CraftSource/blob/master/net.minecraft.server/LoginListener.java#L182
- if (!Arrays.equals(requestVerify, EncryptionUtil.decrypt(serverKey.getPrivate(), responseVerify))) {
- //check if the verify-token are equal to the server sent one
- disconnect("invalid-verify-token",
- "GameProfile {0} ({1}) tried to login with an invalid verify token. Server: {2} Client: {3}",
- session.getRequestUsername(), packetEvent.getPlayer().getAddress(), requestVerify, responseVerify);
- return false;
- }
-
- return true;
- }
-
//try to get the networkManager from ProtocolLib
private Object getNetworkManager() throws IllegalAccessException, ClassNotFoundException {
Object injectorContainer = TemporaryPlayerFactory.getInjectorFromPlayer(player);
@@ -273,6 +259,9 @@ public class VerifyResponseTask implements Runnable {
if (MinecraftVersion.atOrAbove(new MinecraftVersion(1, 19, 0))) {
startPacket.getStrings().write(0, username);
+
+ EquivalentConverter<WrappedProfileKeyData> converter = BukkitConverters.getWrappedPublicKeyDataConverter();
+ startPacket.getOptionals(converter).write(0, Optional.empty());
} else {
//uuid is ignored by the packet definition
WrappedGameProfile fakeProfile = new WrappedGameProfile(UUID.randomUUID(), username);
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/Base64Adapter.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/Base64Adapter.java
new file mode 100644
index 0000000..c2a2d1a
--- /dev/null
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/Base64Adapter.java
@@ -0,0 +1,48 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2015-2022 games647 and contributors
+ *
+ * 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.github.games647.fastlogin.bukkit.listener.protocollib;
+
+import com.google.gson.TypeAdapter;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
+
+import java.io.IOException;
+import java.util.Base64;
+
+public class Base64Adapter extends TypeAdapter<byte[]> {
+
+ @Override
+ public void write(JsonWriter out, byte[] value) throws IOException {
+ var encoded = Base64.getEncoder().encodeToString(value);
+ out.value(encoded);
+ }
+
+ @Override
+ public byte[] read(JsonReader in) throws IOException {
+ String encoded = in.nextString();
+ return Base64.getDecoder().decode(encoded);
+ }
+}
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
index 904405a..63a24ba 100644
--- a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
@@ -25,6 +25,7 @@
*/
package com.github.games647.fastlogin.bukkit.listener.protocollib;
+import com.github.games647.fastlogin.bukkit.listener.protocollib.SignatureTestData.SignatureData;
import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
import com.google.common.io.Resources;
import com.google.gson.Gson;
@@ -36,9 +37,12 @@ import java.io.StringReader;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
+import java.security.PublicKey;
import java.security.SecureRandom;
+import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
+import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
@@ -65,7 +69,7 @@ public class EncryptionUtilTest {
@Test
public void testExpiredClientKey() throws Exception {
- var clientKey = loadClientKey("client_keys/valid.json");
+ var clientKey = loadClientKey("client_keys/valid_public_key.json");
// Client expires at the exact second mentioned, so use it for verification
var expiredTimestamp = clientKey.getExpiry();
@@ -78,7 +82,9 @@ public class EncryptionUtilTest {
// expiration date changed should make the signature invalid
// expiration should still be valid
var clientKey = loadClientKey("client_keys/invalid_wrong_expiration.json");
- assertThat(EncryptionUtil.verifyClientKey(clientKey, clientKey.getExpiry().minus(5, ChronoUnit.HOURS)), is(false));
+ Instant expireTimestamp = clientKey.getExpiry().minus(5, ChronoUnit.HOURS);
+
+ assertThat(EncryptionUtil.verifyClientKey(clientKey, expireTimestamp), is(false));
}
// @Test(expected = Exception.class)
@@ -86,31 +92,119 @@ public class EncryptionUtilTest {
public void testInvalidChangedKey() throws Exception {
// changed public key no longer corresponding to the signature
var clientKey = loadClientKey("client_keys/invalid_wrong_key.json");
- assertThat(EncryptionUtil.verifyClientKey(clientKey, clientKey.getExpiry().minus(5, ChronoUnit.HOURS)), is(false));
+ Instant expireTimestamp = clientKey.getExpiry().minus(5, ChronoUnit.HOURS);
+
+ assertThat(EncryptionUtil.verifyClientKey(clientKey, expireTimestamp), is(false));
}
@Test
public void testInvalidChangedSignature() throws Exception {
// signature modified no longer corresponding to key and expiration date
var clientKey = loadClientKey("client_keys/invalid_wrong_signature.json");
- assertThat(EncryptionUtil.verifyClientKey(clientKey, clientKey.getExpiry().minus(5, ChronoUnit.HOURS)), is(false));
+ Instant expireTimestamp = clientKey.getExpiry().minus(5, ChronoUnit.HOURS);
+
+ assertThat(EncryptionUtil.verifyClientKey(clientKey, expireTimestamp), is(false));
}
@Test
public void testValidClientKey() throws Exception {
- var clientKey = loadClientKey("client_keys/valid.json");
-
+ var clientKey = loadClientKey("client_keys/valid_public_key.json");
var verificationTimestamp = clientKey.getExpiry().minus(5, ChronoUnit.HOURS);
+
assertThat(EncryptionUtil.verifyClientKey(clientKey, verificationTimestamp), is(true));
}
+ @Test
+ public void testValidSignedNonce() throws Exception {
+ ClientPublicKey clientKey = loadClientKey("client_keys/valid_public_key.json");
+ PublicKey clientPublicKey = clientKey.getKey();
+
+ SignatureTestData testData = loadSignatureResource("signature/valid_signature.json");
+ byte[] nonce = testData.getNonce();
+ SignatureData signature = testData.getSignature();
+ long salt = signature.getSalt();
+ assertThat(EncryptionUtil.verifySignedNonce(nonce, clientPublicKey, salt, signature.getSignature()), is(true));
+ }
+
+ @Test
+ public void testIncorrectNonce() throws Exception {
+ ClientPublicKey clientKey = loadClientKey("client_keys/valid_public_key.json");
+ PublicKey clientPublicKey = clientKey.getKey();
+
+ SignatureTestData testData = loadSignatureResource("signature/incorrect_nonce.json");
+ byte[] nonce = testData.getNonce();
+ SignatureData signature = testData.getSignature();
+ long salt = signature.getSalt();
+ assertThat(EncryptionUtil.verifySignedNonce(nonce, clientPublicKey, salt, signature.getSignature()), is(false));
+ }
+
+ @Test
+ public void testIncorrectSalt() throws Exception {
+ // client generated
+ ClientPublicKey clientKey = loadClientKey("client_keys/valid_public_key.json");
+ PublicKey clientPublicKey = clientKey.getKey();
+
+ SignatureTestData testData = loadSignatureResource("signature/incorrect_salt.json");
+ byte[] nonce = testData.getNonce();
+ SignatureData signature = testData.getSignature();
+ long salt = signature.getSalt();
+ assertThat(EncryptionUtil.verifySignedNonce(nonce, clientPublicKey, salt, signature.getSignature()), is(false));
+ }
+
+ @Test
+ public void testIncorrectSignature() throws Exception {
+ // client generated
+ ClientPublicKey clientKey = loadClientKey("client_keys/valid_public_key.json");
+ PublicKey clientPublicKey = clientKey.getKey();
+
+ SignatureTestData testData = loadSignatureResource("signature/incorrect_signature.json");
+ byte[] nonce = testData.getNonce();
+ SignatureData signature = testData.getSignature();
+ long salt = signature.getSalt();
+ assertThat(EncryptionUtil.verifySignedNonce(nonce, clientPublicKey, salt, signature.getSignature()), is(false));
+ }
+
+ @Test
+ public void testWrongPublicKeySigned() throws Exception {
+ // load a different public key
+ ClientPublicKey clientKey = loadClientKey("client_keys/invalid_wrong_key.json");
+ PublicKey clientPublicKey = clientKey.getKey();
+
+ SignatureTestData testData = loadSignatureResource("signature/valid_signature.json");
+ byte[] nonce = testData.getNonce();
+ SignatureData signature = testData.getSignature();
+ long salt = signature.getSalt();
+ assertThat(EncryptionUtil.verifySignedNonce(nonce, clientPublicKey, salt, signature.getSignature()), is(false));
+ }
+
+ private SignatureTestData loadSignatureResource(String resourceName) throws IOException {
+ var keyUrl = Resources.getResource(resourceName);
+ var encodedSignature = Resources.toString(keyUrl, StandardCharsets.US_ASCII);
+
+ return new Gson().fromJson(encodedSignature, SignatureTestData.class);
+ }
+
+ private RSAPrivateKey parsePrivateKey(String keySpec)
+ throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
+ try (
+ Reader reader = new StringReader(keySpec);
+ PemReader pemReader = new PemReader(reader)
+ ) {
+ PemObject pemObject = pemReader.readPemObject();
+ byte[] content = pemObject.getContent();
+ var privateKeySpec = new PKCS8EncodedKeySpec(content);
+
+ var factory = KeyFactory.getInstance("RSA");
+ return (RSAPrivateKey) factory.generatePrivate(privateKeySpec);
+ }
+ }
+
private ClientPublicKey loadClientKey(String path)
throws NoSuchAlgorithmException, IOException, InvalidKeySpecException {
var keyUrl = Resources.getResource(path);
- var gson = new Gson();
var lines = Resources.toString(keyUrl, StandardCharsets.US_ASCII);
- var object = gson.fromJson(lines, JsonObject.class);
+ var object = new Gson().fromJson(lines, JsonObject.class);
Instant expires = Instant.parse(object.getAsJsonPrimitive("expires_at").getAsString());
String key = object.getAsJsonPrimitive("key").getAsString();
@@ -120,10 +214,10 @@ public class EncryptionUtilTest {
return new ClientPublicKey(expires, publicKey, signature);
}
- private RSAPublicKey parsePublicKey(String lines)
+ private RSAPublicKey parsePublicKey(String keySpec)
throws IOException, InvalidKeySpecException, NoSuchAlgorithmException {
try (
- Reader reader = new StringReader(lines);
+ Reader reader = new StringReader(keySpec);
PemReader pemReader = new PemReader(reader)
) {
PemObject pemObject = pemReader.readPemObject();
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SignatureTestData.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SignatureTestData.java
new file mode 100644
index 0000000..8ea85f6
--- /dev/null
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/SignatureTestData.java
@@ -0,0 +1,60 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2015-2022 games647 and contributors
+ *
+ * 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.github.games647.fastlogin.bukkit.listener.protocollib;
+
+import com.google.gson.annotations.JsonAdapter;
+
+public class SignatureTestData {
+
+ @JsonAdapter(Base64Adapter.class)
+ private byte[] nonce;
+
+ private SignatureData signature;
+
+ public byte[] getNonce() {
+ return nonce;
+ }
+
+ public SignatureData getSignature() {
+ return signature;
+ }
+
+ public static class SignatureData {
+
+ private long salt;
+
+ @JsonAdapter(Base64Adapter.class)
+ private byte[] signature;
+
+ public long getSalt() {
+ return salt;
+ }
+
+ public byte[] getSignature() {
+ return signature;
+ }
+ }
+}
diff --git a/bukkit/src/test/resources/client_keys/README.md b/bukkit/src/test/resources/client_keys/README.md
new file mode 100644
index 0000000..1165e23
--- /dev/null
+++ b/bukkit/src/test/resources/client_keys/README.md
@@ -0,0 +1,27 @@
+# About
+
+This contains test resources for the unit tests. The file are extracted from the Minecraft directory with slight
+modifications. The files are found in `$MINECRAFT_HOME$/profilekeys/`, where `$MINECRAFT_HOME$` represents the
+OS-dependent minecraft folder.
+
+**Notable the files in this folder do not contain the private key information. It should be explicitly
+stripped before including it.**
+
+## Minecraft folder
+
+* Windows: `%appdata%\.minecraft`
+* Linux: `/home/username/.minecraft`
+* Mac: `~/Library/Application Support/minecraft`
+
+## Directory structure
+
+* `invalid_wrong_expiration.json`: Changed the expiration date
+* `invalid_wrong_key.json`: Modified public key while keeping the RSA structure valid
+* `invalid_wrong_signature.json`: Changed a character in the public key signature
+* `valid_public_key.json`: Extracted from actual file
+
+## File content
+
+* `expires_at`: Expiration date
+* `key`: Public key from the original file out of `public_key.key`
+* `signature`: Mojang signed signature of this public key
diff --git a/bukkit/src/test/resources/client_keys/invalid_wrong_expiration.json b/bukkit/src/test/resources/client_keys/invalid_wrong_expiration.json
index 7ecc12e..ea509fe 100644
--- a/bukkit/src/test/resources/client_keys/invalid_wrong_expiration.json
+++ b/bukkit/src/test/resources/client_keys/invalid_wrong_expiration.json
@@ -1,5 +1,5 @@
{
- "expires_at": "2022-06-12T09:46:26.421156927Z",
- "key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoOv23jt2QPyab6bPRBwH2ggmzQU4I+xm\nDpi3X5ZB5Em/4uzyZqNVLJc0gShpk0XsdoB28Nq1bPxczOTBxuXi3rg5ax5gL+iymDSU27DLM8s/\n33lOofzGPJUEQGKlFm0QelDKZ/q5Y/9inHE3hEJKf7h0tnmGahXFmZSF/nRz9GHnfSYpjtDr9bsZ\nOzQuLhHXT5E4ksNRTFW41h0MlZ1qOhO+NiiVgk7LmgVYiV7RRbgO8U6RaCEqg5n28Ewo6QtzB+DF\n4NTDeu3E9BLH5G0npdUrVNhdRUWCFDmH6n9hqSIz2J7o6GvWqEvp0h9e/3qtLsoS60hnQXunrcWc\nPaEIYQIDAQAB\n-----END RSA PUBLIC KEY-----\n",
- "signature": "BYv2mKJvz5O3Wo5V5sbJI0L6zAjfzQSkTNd7ykd/MB7KPPDg4zoTuOqphmh042xz1EYbMcfqEZvP04NTaoZDx+IxGieBB+LuxqnmYKIgtpcR2SEpzbSKznSHkupr1hKwF7kCVWLlwSbxc/XRlWPPyT6FE9m628A/jFb/obgfzLLQWfTFWp6kq2oBoUUQV5om2ihdrJ8oLCsw10SGdcFtK4+UuLzz+wjwv3JpvIX93IKdjFnw0KNd110HOPWZgp2n8+f6GsecysorqvwaE1rJC0m9Qa/wFsK2TY7twSMreCrbXPaBiWrkRovtm9gnaBwD+iuZYlnLvO0ld8qW928LL2vFBTi3TsPUWC3i/xYnAR2m8YP2hiCLHuPfSJmgfxHsM2iRdrR8qdOUkiC9h34STEA7Q2+rWkNWJ+YKYVTIkyqHEuXqU87txhVTaRJi6UDGDn49cMKmZwQnn+23JQf1chcn1YFkrivDaJPhm17GhoEldQHSLQfxb0ifja5WBNDbkKBF/h9JqvG3Ya9anxlyxY6g7/m2zP73xfkvUnejoX4GKjffEqezQmTe9RIeuWyz94nfZNLr0Ps363kAfP4KSW+f4zkTU/UVg19ccAY0ZhiwDetKyksU5WqLO8xMPZ6PNFYhNeBb2yhGdT8PidkRYkC4XBn1k7F7apiNUuZU8aA="
+ "expires_at": "2022-06-20T07:31:47.318722344Z",
+ "key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApd3ZxDhcRWWru1XEBke6uYqmbnS2Oxyk\nOMj+QDKrkwUqhVJYciyXGsMx46Mgr/KIoGCcokP5OtIxc6+69/ZLqJ9PvM81kLIxAqyvfBMKMGjP\n376LgxTF1FeDpbe5zXaNRxfmnvQhS5YTLbzgk36qWVjqxJMG4VLVmh7RV5zWsb7XlckZb2zRHM2Y\nMHbEC+ggX+l6zQyfG1KK0MH5k+O6b0xD0rv1wm24sLOesTXH6RZG8cNE3ofdnavxjFodTOnra6w1\naiVcoUTdEPSS86wQwq9j0YCcAKOwMXsqbk9NhpujrdyJ94dev+ELwkNS7P0pPrcfiyFTQeJCZTXz\nJB36MwIDAQAB\n-----END RSA PUBLIC KEY-----\n",
+ "signature": "lfRXK4zL213wBKg760eiPV7yvnLZ6a6v9Iohmw78yxIzqXO3tfrC5Z+P2LGiO1BdI4xckx8yz4ktn82zX97+r2zktBw0As7g71H/FjInpoZ76j3gMUaiFNrQJ0vKCCI7xsjonemroWAVDCAqlvdyqwUu/Fnz85+WoR2kCQ721vwy6IjWA3xhq8XrWjkI/AlBmoS/kVqnvjjjc9vocdddJXbUYzCse/hWWIbsFeBXyiGCd3v7apgtXwQfM++tt87fq7444zQskiYb14oQP8/uNwqZWQ9jAs00i1BZ0MNM6+TZYGHOfS6rbHZ1bcX34VZdcCwpapK/Z2HBRIgDN4QOcgJkyq1GcjvlM2wjfhN8gXTsmbF9Ee+5Y6a4ONRkxRZK2sT8oAXdm0OlTEGB0P0+WRRFOQ/PnRqbI7lvANao2METT2EUHHrtqFMe53kqCHdzy5qyuHxdCEa6l/gSR08fybx9DdRRmhOlhSPGxhgwqyi1fEMrN4CsSKNrv5u+sMqhspA05b3DQJeLDX+UV5ujRHwm0A49NF+h1ZYlrcefz5IMUUisOOw6HiLc/YGLD2jHwSePGdfMwMnrIxbxjCta7/7A91aaN7eYm16KW9erCOwAfJmBSQC6Pbmg5f7rd7rAKVOPxglq7nayXmd+BK53Mal5tltMSgd/0iY6SEtGSEU="
}
diff --git a/bukkit/src/test/resources/client_keys/invalid_wrong_key.json b/bukkit/src/test/resources/client_keys/invalid_wrong_key.json
index 37bb3ad..98ea33f 100644
--- a/bukkit/src/test/resources/client_keys/invalid_wrong_key.json
+++ b/bukkit/src/test/resources/client_keys/invalid_wrong_key.json
@@ -1,5 +1,5 @@
{
- "expires_at": "2022-06-12T10:46:26.421156927Z",
+ "expires_at": "2022-06-20T08:31:47.318722344Z",
"key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoOv23jt2QPyab6bPRBwH2ggmzQU3I+xmDpi3X5ZB5Em/4uzyZqNVLJc0gShpk0XsdoB28Nq1bPxczOTBxuXi3rg5ax5gL+iymDSU27DLM8s/33lOofzGPJUEQGKlFm0QelDKZ/q5Y/9inHE3hEJKf7h0tnmGahXFmZSF/nRz9GHnfSYpjtDr9bsZOzQuLhHXT5E4ksNRTFW41h0MlZ1qOhO+NiiVgk7LmgVYiV7RRbgO8U6RaCEqg5n28Ewo6QtzB+DF4NTDeu3E9BLH5G0npdUrVNhdRUWCFDmH6n9hqSIz2J7o6GvWqEvp0h9e/3qtLsoS60hnQXunrcWcPaEIYQIDAQAB\n-----END RSA PUBLIC KEY-----\n",
- "signature": "BYv2mKJvz5O3Wo5V5sbJI0L6zAjfzQSkTNd7ykd/MB7KPPDg4zoTuOqphmh042xz1EYbMcfqEZvP04NTaoZDx+IxGieBB+LuxqnmYKIgtpcR2SEpzbSKznSHkupr1hKwF7kCVWLlwSbxc/XRlWPPyT6FE9m628A/jFb/obgfzLLQWfTFWp6kq2oBoUUQV5om2ihdrJ8oLCsw10SGdcFtK4+UuLzz+wjwv3JpvIX93IKdjFnw0KNd110HOPWZgp2n8+f6GsecysorqvwaE1rJC0m9Qa/wFsK2TY7twSMreCrbXPaBiWrkRovtm9gnaBwD+iuZYlnLvO0ld8qW928LL2vFBTi3TsPUWC3i/xYnAR2m8YP2hiCLHuPfSJmgfxHsM2iRdrR8qdOUkiC9h34STEA7Q2+rWkNWJ+YKYVTIkyqHEuXqU87txhVTaRJi6UDGDn49cMKmZwQnn+23JQf1chcn1YFkrivDaJPhm17GhoEldQHSLQfxb0ifja5WBNDbkKBF/h9JqvG3Ya9anxlyxY6g7/m2zP73xfkvUnejoX4GKjffEqezQmTe9RIeuWyz94nfZNLr0Ps363kAfP4KSW+f4zkTU/UVg19ccAY0ZhiwDetKyksU5WqLO8xMPZ6PNFYhNeBb2yhGdT8PidkRYkC4XBn1k7F7apiNUuZU8aA="
+ "signature": "lfRXK4zL213wBKg760eiPV7yvnLZ6a6v9Iohmw78yxIzqXO3tfrC5Z+P2LGiO1BdI4xckx8yz4ktn82zX97+r2zktBw0As7g71H/FjInpoZ76j3gMUaiFNrQJ0vKCCI7xsjonemroWAVDCAqlvdyqwUu/Fnz85+WoR2kCQ721vwy6IjWA3xhq8XrWjkI/AlBmoS/kVqnvjjjc9vocdddJXbUYzCse/hWWIbsFeBXyiGCd3v7apgtXwQfM++tt87fq7444zQskiYb14oQP8/uNwqZWQ9jAs00i1BZ0MNM6+TZYGHOfS6rbHZ1bcX34VZdcCwpapK/Z2HBRIgDN4QOcgJkyq1GcjvlM2wjfhN8gXTsmbF9Ee+5Y6a4ONRkxRZK2sT8oAXdm0OlTEGB0P0+WRRFOQ/PnRqbI7lvANao2METT2EUHHrtqFMe53kqCHdzy5qyuHxdCEa6l/gSR08fybx9DdRRmhOlhSPGxhgwqyi1fEMrN4CsSKNrv5u+sMqhspA05b3DQJeLDX+UV5ujRHwm0A49NF+h1ZYlrcefz5IMUUisOOw6HiLc/YGLD2jHwSePGdfMwMnrIxbxjCta7/7A91aaN7eYm16KW9erCOwAfJmBSQC6Pbmg5f7rd7rAKVOPxglq7nayXmd+BK53Mal5tltMSgd/0iY6SEtGSEU="
}
diff --git a/bukkit/src/test/resources/client_keys/invalid_wrong_signature.json b/bukkit/src/test/resources/client_keys/invalid_wrong_signature.json
index cbca4b1..2b80c2c 100644
--- a/bukkit/src/test/resources/client_keys/invalid_wrong_signature.json
+++ b/bukkit/src/test/resources/client_keys/invalid_wrong_signature.json
@@ -1,5 +1,5 @@
{
- "expires_at": "2022-06-12T10:46:26.421156927Z",
- "key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoOv23jt2QPyab6bPRBwH2ggmzQU4I+xm\nDpi3X5ZB5Em/4uzyZqNVLJc0gShpk0XsdoB28Nq1bPxczOTBxuXi3rg5ax5gL+iymDSU27DLM8s/\n33lOofzGPJUEQGKlFm0QelDKZ/q5Y/9inHE3hEJKf7h0tnmGahXFmZSF/nRz9GHnfSYpjtDr9bsZ\nOzQuLhHXT5E4ksNRTFW41h0MlZ1qOhO+NiiVgk7LmgVYiV7RRbgO8U6RaCEqg5n28Ewo6QtzB+DF\n4NTDeu3E9BLH5G0npdUrVNhdRUWCFDmH6n9hqSIz2J7o6GvWqEvp0h9e/3qtLsoS60hnQXunrcWc\nPaEIYQIDAQAB\n-----END RSA PUBLIC KEY-----\n",
- "signature": "bYv2mKJvz5O3Wo5V5sbJI0L6zAjfzQSkTNd7ykd/MB7KPPDg4zoTuOqphmh042xz1EYbMcfqEZvP04NTaoZDx+IxGieBB+LuxqnmYKIgtpcR2SEpzbSKznSHkupr1hKwF7kCVWLlwSbxc/XRlWPPyT6FE9m628A/jFb/obgfzLLQWfTFWp6kq2oBoUUQV5om2ihdrJ8oLCsw10SGdcFtK4+UuLzz+wjwv3JpvIX93IKdjFnw0KNd110HOPWZgp2n8+f6GsecysorqvwaE1rJC0m9Qa/wFsK2TY7twSMreCrbXPaBiWrkRovtm9gnaBwD+iuZYlnLvO0ld8qW928LL2vFBTi3TsPUWC3i/xYnAR2m8YP2hiCLHuPfSJmgfxHsM2iRdrR8qdOUkiC9h34STEA7Q2+rWkNWJ+YKYVTIkyqHEuXqU87txhVTaRJi6UDGDn49cMKmZwQnn+23JQf1chcn1YFkrivDaJPhm17GhoEldQHSLQfxb0ifja5WBNDbkKBF/h9JqvG3Ya9anxlyxY6g7/m2zP73xfkvUnejoX4GKjffEqezQmTe9RIeuWyz94nfZNLr0Ps363kAfP4KSW+f4zkTU/UVg19ccAY0ZhiwDetKyksU5WqLO8xMPZ6PNFYhNeBb2yhGdT8PidkRYkC4XBn1k7F7apiNUuZU8aA="
+ "expires_at": "2022-06-20T08:31:47.318722344Z",
+ "key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApd3ZxDhcRWWru1XEBke6uYqmbnS2Oxyk\nOMj+QDKrkwUqhVJYciyXGsMx46Mgr/KIoGCcokP5OtIxc6+69/ZLqJ9PvM81kLIxAqyvfBMKMGjP\n376LgxTF1FeDpbe5zXaNRxfmnvQhS5YTLbzgk36qWVjqxJMG4VLVmh7RV5zWsb7XlckZb2zRHM2Y\nMHbEC+ggX+l6zQyfG1KK0MH5k+O6b0xD0rv1wm24sLOesTXH6RZG8cNE3ofdnavxjFodTOnra6w1\naiVcoUTdEPSS86wQwq9j0YCcAKOwMXsqbk9NhpujrdyJ94dev+ELwkNS7P0pPrcfiyFTQeJCZTXz\nJB36MwIDAQAB\n-----END RSA PUBLIC KEY-----\n",
+ "signature": "lfRxK4zL213wBKg760eiPV7yvnLZ6a6v9Iohmw78yxIzqXO3tfrC5Z+P2LGiO1BdI4xckx8yz4ktn82zX97+r2zktBw0As7g71H/FjInpoZ76j3gMUaiFNrQJ0vKCCI7xsjonemroWAVDCAqlvdyqwUu/Fnz85+WoR2kCQ721vwy6IjWA3xhq8XrWjkI/AlBmoS/kVqnvjjjc9vocdddJXbUYzCse/hWWIbsFeBXyiGCd3v7apgtXwQfM++tt87fq7444zQskiYb14oQP8/uNwqZWQ9jAs00i1BZ0MNM6+TZYGHOfS6rbHZ1bcX34VZdcCwpapK/Z2HBRIgDN4QOcgJkyq1GcjvlM2wjfhN8gXTsmbF9Ee+5Y6a4ONRkxRZK2sT8oAXdm0OlTEGB0P0+WRRFOQ/PnRqbI7lvANao2METT2EUHHrtqFMe53kqCHdzy5qyuHxdCEa6l/gSR08fybx9DdRRmhOlhSPGxhgwqyi1fEMrN4CsSKNrv5u+sMqhspA05b3DQJeLDX+UV5ujRHwm0A49NF+h1ZYlrcefz5IMUUisOOw6HiLc/YGLD2jHwSePGdfMwMnrIxbxjCta7/7A91aaN7eYm16KW9erCOwAfJmBSQC6Pbmg5f7rd7rAKVOPxglq7nayXmd+BK53Mal5tltMSgd/0iY6SEtGSEU="
}
diff --git a/bukkit/src/test/resources/client_keys/valid.json b/bukkit/src/test/resources/client_keys/valid.json
deleted file mode 100644
index a2d6a41..0000000
--- a/bukkit/src/test/resources/client_keys/valid.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "expires_at": "2022-06-12T10:46:26.421156927Z",
- "key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoOv23jt2QPyab6bPRBwH2ggmzQU4I+xmDpi3X5ZB5Em/4uzyZqNVLJc0gShpk0XsdoB28Nq1bPxczOTBxuXi3rg5ax5gL+iymDSU27DLM8s/33lOofzGPJUEQGKlFm0QelDKZ/q5Y/9inHE3hEJKf7h0tnmGahXFmZSF/nRz9GHnfSYpjtDr9bsZOzQuLhHXT5E4ksNRTFW41h0MlZ1qOhO+NiiVgk7LmgVYiV7RRbgO8U6RaCEqg5n28Ewo6QtzB+DF4NTDeu3E9BLH5G0npdUrVNhdRUWCFDmH6n9hqSIz2J7o6GvWqEvp0h9e/3qtLsoS60hnQXunrcWcPaEIYQIDAQAB\n-----END RSA PUBLIC KEY-----\n",
- "signature": "BYv2mKJvz5O3Wo5V5sbJI0L6zAjfzQSkTNd7ykd/MB7KPPDg4zoTuOqphmh042xz1EYbMcfqEZvP04NTaoZDx+IxGieBB+LuxqnmYKIgtpcR2SEpzbSKznSHkupr1hKwF7kCVWLlwSbxc/XRlWPPyT6FE9m628A/jFb/obgfzLLQWfTFWp6kq2oBoUUQV5om2ihdrJ8oLCsw10SGdcFtK4+UuLzz+wjwv3JpvIX93IKdjFnw0KNd110HOPWZgp2n8+f6GsecysorqvwaE1rJC0m9Qa/wFsK2TY7twSMreCrbXPaBiWrkRovtm9gnaBwD+iuZYlnLvO0ld8qW928LL2vFBTi3TsPUWC3i/xYnAR2m8YP2hiCLHuPfSJmgfxHsM2iRdrR8qdOUkiC9h34STEA7Q2+rWkNWJ+YKYVTIkyqHEuXqU87txhVTaRJi6UDGDn49cMKmZwQnn+23JQf1chcn1YFkrivDaJPhm17GhoEldQHSLQfxb0ifja5WBNDbkKBF/h9JqvG3Ya9anxlyxY6g7/m2zP73xfkvUnejoX4GKjffEqezQmTe9RIeuWyz94nfZNLr0Ps363kAfP4KSW+f4zkTU/UVg19ccAY0ZhiwDetKyksU5WqLO8xMPZ6PNFYhNeBb2yhGdT8PidkRYkC4XBn1k7F7apiNUuZU8aA="
-}
diff --git a/bukkit/src/test/resources/client_keys/valid_public_key.json b/bukkit/src/test/resources/client_keys/valid_public_key.json
new file mode 100644
index 0000000..8943e87
--- /dev/null
+++ b/bukkit/src/test/resources/client_keys/valid_public_key.json
@@ -0,0 +1,5 @@
+{
+ "expires_at": "2022-06-20T08:31:47.318722344Z",
+ "key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApd3ZxDhcRWWru1XEBke6uYqmbnS2Oxyk\nOMj+QDKrkwUqhVJYciyXGsMx46Mgr/KIoGCcokP5OtIxc6+69/ZLqJ9PvM81kLIxAqyvfBMKMGjP\n376LgxTF1FeDpbe5zXaNRxfmnvQhS5YTLbzgk36qWVjqxJMG4VLVmh7RV5zWsb7XlckZb2zRHM2Y\nMHbEC+ggX+l6zQyfG1KK0MH5k+O6b0xD0rv1wm24sLOesTXH6RZG8cNE3ofdnavxjFodTOnra6w1\naiVcoUTdEPSS86wQwq9j0YCcAKOwMXsqbk9NhpujrdyJ94dev+ELwkNS7P0pPrcfiyFTQeJCZTXz\nJB36MwIDAQAB\n-----END RSA PUBLIC KEY-----\n",
+ "signature": "lfRXK4zL213wBKg760eiPV7yvnLZ6a6v9Iohmw78yxIzqXO3tfrC5Z+P2LGiO1BdI4xckx8yz4ktn82zX97+r2zktBw0As7g71H/FjInpoZ76j3gMUaiFNrQJ0vKCCI7xsjonemroWAVDCAqlvdyqwUu/Fnz85+WoR2kCQ721vwy6IjWA3xhq8XrWjkI/AlBmoS/kVqnvjjjc9vocdddJXbUYzCse/hWWIbsFeBXyiGCd3v7apgtXwQfM++tt87fq7444zQskiYb14oQP8/uNwqZWQ9jAs00i1BZ0MNM6+TZYGHOfS6rbHZ1bcX34VZdcCwpapK/Z2HBRIgDN4QOcgJkyq1GcjvlM2wjfhN8gXTsmbF9Ee+5Y6a4ONRkxRZK2sT8oAXdm0OlTEGB0P0+WRRFOQ/PnRqbI7lvANao2METT2EUHHrtqFMe53kqCHdzy5qyuHxdCEa6l/gSR08fybx9DdRRmhOlhSPGxhgwqyi1fEMrN4CsSKNrv5u+sMqhspA05b3DQJeLDX+UV5ujRHwm0A49NF+h1ZYlrcefz5IMUUisOOw6HiLc/YGLD2jHwSePGdfMwMnrIxbxjCta7/7A91aaN7eYm16KW9erCOwAfJmBSQC6Pbmg5f7rd7rAKVOPxglq7nayXmd+BK53Mal5tltMSgd/0iY6SEtGSEU="
+}
diff --git a/bukkit/src/test/resources/signature/README.md b/bukkit/src/test/resources/signature/README.md
new file mode 100644
index 0000000..cc603bc
--- /dev/null
+++ b/bukkit/src/test/resources/signature/README.md
@@ -0,0 +1,16 @@
+# About
+
+This contains test resources for the unit tests. Files in this folder include pre-made cryptographic signatures.
+
+## Directory structure
+
+* `valid_signature.json`: Extracted using packet extract from actual authentication
+* `incorrect_nonce.json`: Different nonce token simulating that the server expected a different token than signed
+* `incorrect_salt.json`: Salt sent is different to the content signed by the signature (changed salt field)
+* `incorrect_signature.json`: Changed signature
+
+## File content
+
+* `nonce`: Server generated nonce token
+* `salt`: Client generated random token
+* `signature`: Nonce and salt signed using the client key from `valid_public_key.json`
diff --git a/bukkit/src/test/resources/signature/incorrect_nonce.json b/bukkit/src/test/resources/signature/incorrect_nonce.json
new file mode 100644
index 0000000..b88c0f5
--- /dev/null
+++ b/bukkit/src/test/resources/signature/incorrect_nonce.json
@@ -0,0 +1,7 @@
+{
+ "nonce": "galNig\u003d\u003d",
+ "signature": {
+ "signature": "JlXAUtIGDjxUOnF5vkg/NUEN2wlzXcqADyYIw2WRTb5hgKwIgxyUPO5v/2M7xU3hxz2Zf0iYHM97h8qNMGQ43cLgfVH9VWZ1kGMuOby2LNSb6nDaMzm0b02ftThaWOWj9kJXbR8fN7qdpB+28t2CTW5ILT+2AZYI/Sn8gFFR+LvJJt1ENMfEj2ZIIkHecpNBuKyLz1aDCZ5BEASSLfAqHEAA3dpHV1DIgzfpO6xwo7bVFDtcBEeusl/Nc3KyGyT8sDFTsZWgitgz53xNKrZUK8Q2BaJfP0zrGAX36rpYURJSVD0AtI1ic9s5aG+OFUC1YhLXb/1cDv37ZjHcdV2ppw\u003d\u003d",
+ "salt": -2985008842905108412
+ }
+}
diff --git a/bukkit/src/test/resources/signature/incorrect_salt.json b/bukkit/src/test/resources/signature/incorrect_salt.json
new file mode 100644
index 0000000..8edffb6
--- /dev/null
+++ b/bukkit/src/test/resources/signature/incorrect_salt.json
@@ -0,0 +1,7 @@
+{
+ "nonce": "GalNig\u003d\u003d",
+ "signature": {
+ "signature": "JlXAUtIGDjxUOnF5vkg/NUEN2wlzXcqADyYIw2WRTb5hgKwIgxyUPO5v/2M7xU3hxz2Zf0iYHM97h8qNMGQ43cLgfVH9VWZ1kGMuOby2LNSb6nDaMzm0b02ftThaWOWj9kJXbR8fN7qdpB+28t2CTW5ILT+2AZYI/Sn8gFFR+LvJJt1ENMfEj2ZIIkHecpNBuKyLz1aDCZ5BEASSLfAqHEAA3dpHV1DIgzfpO6xwo7bVFDtcBEeusl/Nc3KyGyT8sDFTsZWgitgz53xNKrZUK8Q2BaJfP0zrGAX36rpYURJSVD0AtI1ic9s5aG+OFUC1YhLXb/1cDv37ZjHcdV2ppw\u003d\u003d",
+ "salt": -1985008842905108412
+ }
+}
diff --git a/bukkit/src/test/resources/signature/incorrect_signature.json b/bukkit/src/test/resources/signature/incorrect_signature.json
new file mode 100644
index 0000000..ba6bac5
--- /dev/null
+++ b/bukkit/src/test/resources/signature/incorrect_signature.json
@@ -0,0 +1,7 @@
+{
+ "nonce": "GalNig\u003d\u003d",
+ "signature": {
+ "signature": "jlXAUtIGDjxUOnF5vkg/NUEN2wlzXcqADyYIw2WRTb5hgKwIgxyUPO5v/2M7xU3hxz2Zf0iYHM97h8qNMGQ43cLgfVH9VWZ1kGMuOby2LNSb6nDaMzm0b02ftThaWOWj9kJXbR8fN7qdpB+28t2CTW5ILT+2AZYI/Sn8gFFR+LvJJt1ENMfEj2ZIIkHecpNBuKyLz1aDCZ5BEASSLfAqHEAA3dpHV1DIgzfpO6xwo7bVFDtcBEeusl/Nc3KyGyT8sDFTsZWgitgz53xNKrZUK8Q2BaJfP0zrGAX36rpYURJSVD0AtI1ic9s5aG+OFUC1YhLXb/1cDv37ZjHcdV2ppw\u003d\u003d",
+ "salt": -2985008842905108412
+ }
+}
diff --git a/bukkit/src/test/resources/signature/valid_signature.json b/bukkit/src/test/resources/signature/valid_signature.json
new file mode 100644
index 0000000..7f4f4ad
--- /dev/null
+++ b/bukkit/src/test/resources/signature/valid_signature.json
@@ -0,0 +1,7 @@
+{
+ "nonce": "GalNig\u003d\u003d",
+ "signature": {
+ "signature": "JlXAUtIGDjxUOnF5vkg/NUEN2wlzXcqADyYIw2WRTb5hgKwIgxyUPO5v/2M7xU3hxz2Zf0iYHM97h8qNMGQ43cLgfVH9VWZ1kGMuOby2LNSb6nDaMzm0b02ftThaWOWj9kJXbR8fN7qdpB+28t2CTW5ILT+2AZYI/Sn8gFFR+LvJJt1ENMfEj2ZIIkHecpNBuKyLz1aDCZ5BEASSLfAqHEAA3dpHV1DIgzfpO6xwo7bVFDtcBEeusl/Nc3KyGyT8sDFTsZWgitgz53xNKrZUK8Q2BaJfP0zrGAX36rpYURJSVD0AtI1ic9s5aG+OFUC1YhLXb/1cDv37ZjHcdV2ppw\u003d\u003d",
+ "salt": -2985008842905108412
+ }
+}
2022-06-28 18:34:22 +02:00
bc7c4eea60
Use PublicKey instead of byte representation
2022-06-28 18:34:22 +02:00
456342c686
Migrate to ProtocolLib field extractors for better compatibility
...
diff --git a/bukkit/pom.xml b/bukkit/pom.xml
index c4caae8..9b3c5c5 100644
--- a/bukkit/pom.xml
+++ b/bukkit/pom.xml
@@ -183,7 +183,7 @@
<dependency>
<groupId>com.comphenix.protocol</groupId>
<artifactId>ProtocolLib</artifactId>
- <version>5.0.0-20220603.031413-2</version>
+ <version>5.0.0-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
index c9e72fc..3c66e7b 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
@@ -27,12 +27,12 @@ package com.github.games647.fastlogin.bukkit.listener.protocollib;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
-import com.comphenix.protocol.events.InternalStructure;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
-import com.comphenix.protocol.reflect.FuzzyReflection;
import com.comphenix.protocol.wrappers.WrappedGameProfile;
+import com.comphenix.protocol.wrappers.WrappedProfilePublicKey;
+import com.comphenix.protocol.wrappers.WrappedProfilePublicKey.WrappedProfileKeyData;
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
@@ -47,7 +47,6 @@ import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.SignatureException;
import java.time.Instant;
-import java.util.Optional;
import org.bukkit.entity.Player;
@@ -171,15 +170,15 @@ public class ProtocolLibListener extends PacketAdapter {
}
private boolean verifyPublicKey(PacketContainer packet) {
- Optional<InternalStructure> internalStructure = packet.getOptionalStructures().readSafely(0);
- if (internalStructure == null) {
+ WrappedProfileKeyData profileKey = packet.getProfilePublicKeys().optionRead(0)
+ .map(WrappedProfilePublicKey::getKeyData).orElse(null);
+ if (profileKey == null) {
return true;
}
- Object instance = internalStructure.get().getHandle();
- Instant expires = FuzzyReflection.getFieldValue(instance, Instant.class, true);
- PublicKey key = FuzzyReflection.getFieldValue(instance, PublicKey.class, true);
- byte[] signature = FuzzyReflection.getFieldValue(instance, byte[].class, true);
+ Instant expires = profileKey.getExpireTime();
+ PublicKey key = profileKey.getKey();
+ byte[] signature = profileKey.getSignature();
ClientPublicKey clientKey = new ClientPublicKey(expires, key.getEncoded(), signature);
try {
return EncryptionUtil.verifyClientKey(clientKey, Instant.now());
2022-06-28 18:34:22 +02:00
e85d0d3f0e
Add session key to plugin
2022-06-28 18:34:22 +02:00
d6c6108a7e
Do not modify certificate file during packaging phase
2022-06-28 18:34:22 +02:00
d353ac66ab
Verify public keys from players
...
diff --git a/bukkit/pom.xml b/bukkit/pom.xml
index 2e1ccc4..c4caae8 100644
--- a/bukkit/pom.xml
+++ b/bukkit/pom.xml
@@ -119,9 +119,6 @@
<repository>
<id>dmulloy2-repo</id>
<url>https://repo.dmulloy2.net/repository/public/ </url>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
</repository>
<!-- AuthMe Reloaded, xAuth and LoginSecurity -->
@@ -186,7 +183,7 @@
<dependency>
<groupId>com.comphenix.protocol</groupId>
<artifactId>ProtocolLib</artifactId>
- <version>5.0.0-SNAPSHOT</version>
+ <version>5.0.0-20220603.031413-2</version>
<scope>provided</scope>
<exclusions>
<exclusion>
@@ -351,5 +348,12 @@
<scope>system</scope>
<systemPath>${project.basedir}/lib/UltraAuth v2.1.2.jar</systemPath>
</dependency>
+
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcpkix-jdk18on</artifactId>
+ <version>1.71</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
index 1197514..143dda9 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtil.java
@@ -25,15 +25,28 @@
*/
package com.github.games647.fastlogin.bukkit.listener.protocollib;
+import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
+import com.google.common.io.Resources;
+
+import java.io.IOException;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
+import java.security.InvalidKeyException;
+import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
+import java.security.Signature;
+import java.security.SignatureException;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.X509EncodedKeySpec;
+import java.time.Instant;
+import java.util.Base64;
+import java.util.Base64.Encoder;
import java.util.Random;
import javax.crypto.Cipher;
@@ -46,11 +59,25 @@ import javax.crypto.spec.SecretKeySpec;
*
* @see net.minecraft.server.MinecraftEncryption
*/
-public class EncryptionUtil {
+class EncryptionUtil {
public static final int VERIFY_TOKEN_LENGTH = 4;
public static final String KEY_PAIR_ALGORITHM = "RSA";
+ private static final int RSA_LENGTH = 1_024;
+
+ private static final PublicKey mojangSessionKey;
+ private static final int LINE_LENGTH = 76;
+ private static final Encoder KEY_ENCODER = Base64.getMimeEncoder(LINE_LENGTH, "\n".getBytes(StandardCharsets.UTF_8));
+
+ static {
+ try {
+ mojangSessionKey = loadMojangSessionKey();
+ } catch (IOException | NoSuchAlgorithmException | InvalidKeySpecException ex) {
+ throw new RuntimeException("Failed to load Mojang session key", ex);
+ }
+ }
+
private EncryptionUtil() {
// utility
}
@@ -65,7 +92,7 @@ public class EncryptionUtil {
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_PAIR_ALGORITHM);
- keyPairGenerator.initialize(1_024);
+ keyPairGenerator.initialize(RSA_LENGTH);
return keyPairGenerator.generateKeyPair();
} catch (NoSuchAlgorithmException nosuchalgorithmexception) {
// Should be existing in every vm
@@ -120,6 +147,33 @@ public class EncryptionUtil {
return new SecretKeySpec(decrypt(privateKey, sharedKey), "AES");
}
+ public static boolean verifyClientKey(ClientPublicKey clientKey, Instant verifyTimstamp)
+ throws SignatureException, NoSuchAlgorithmException, InvalidKeyException {
+ if (!verifyTimstamp.isBefore(clientKey.getExpiry())) {
+ return false;
+ }
+
+ Signature signature = Signature.getInstance("SHA1withRSA");
+ signature.initVerify(mojangSessionKey);
+ signature.update(toSignable(clientKey).getBytes(StandardCharsets.US_ASCII));
+ return signature.verify(clientKey.getSignature());
+ }
+
+ private static PublicKey loadMojangSessionKey()
+ throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
+ var keyUrl = Resources.getResource("yggdrasil_session_pubkey.der");
+ var keyData = Resources.toByteArray(keyUrl);
+ var keySpec = new X509EncodedKeySpec(keyData);
+
+ return KeyFactory.getInstance("RSA").generatePublic(keySpec);
+ }
+
+ private static String toSignable(ClientPublicKey clientPublicKey) {
+ long expiry = clientPublicKey.getExpiry().toEpochMilli();
+ String encoded = KEY_ENCODER.encodeToString(clientPublicKey.getKey());
+ return expiry + "-----BEGIN RSA PUBLIC KEY-----\n" + encoded + "\n-----END RSA PUBLIC KEY-----\n";
+ }
+
public static byte[] decrypt(PrivateKey key, byte[] data) throws GeneralSecurityException {
// b(Key var0, byte[] var1)
Cipher cipher = Cipher.getInstance(key.getAlgorithm());
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
index f8b8de2..c9e72fc 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
@@ -27,18 +27,27 @@ package com.github.games647.fastlogin.bukkit.listener.protocollib;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
+import com.comphenix.protocol.events.InternalStructure;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
-import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
+import com.comphenix.protocol.reflect.FuzzyReflection;
import com.comphenix.protocol.wrappers.WrappedGameProfile;
+import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
+import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
import com.github.games647.fastlogin.core.antibot.AntiBotService;
import com.github.games647.fastlogin.core.antibot.AntiBotService.Action;
import java.net.InetSocketAddress;
+import java.security.InvalidKeyException;
import java.security.KeyPair;
+import java.security.NoSuchAlgorithmException;
+import java.security.PublicKey;
import java.security.SecureRandom;
+import java.security.SignatureException;
+import java.time.Instant;
+import java.util.Optional;
import org.bukkit.entity.Player;
@@ -149,6 +158,11 @@ public class ProtocolLibListener extends PacketAdapter {
username = (String) packetEvent.getPacket().getMeta("original_name").get();
}
+ if (!verifyPublicKey(packet)) {
+ plugin.getLog().warn("Invalid public key from player {}", username);
+ return;
+ }
+
plugin.getLog().trace("GameProfile {} with {} connecting", sessionKey, username);
packetEvent.getAsyncMarker().incrementProcessingDelay();
@@ -156,6 +170,24 @@ public class ProtocolLibListener extends PacketAdapter {
plugin.getScheduler().runAsync(nameCheckTask);
}
+ private boolean verifyPublicKey(PacketContainer packet) {
+ Optional<InternalStructure> internalStructure = packet.getOptionalStructures().readSafely(0);
+ if (internalStructure == null) {
+ return true;
+ }
+
+ Object instance = internalStructure.get().getHandle();
+ Instant expires = FuzzyReflection.getFieldValue(instance, Instant.class, true);
+ PublicKey key = FuzzyReflection.getFieldValue(instance, PublicKey.class, true);
+ byte[] signature = FuzzyReflection.getFieldValue(instance, byte[].class, true);
+ ClientPublicKey clientKey = new ClientPublicKey(expires, key.getEncoded(), signature);
+ try {
+ return EncryptionUtil.verifyClientKey(clientKey, Instant.now());
+ } catch (SignatureException | InvalidKeyException | NoSuchAlgorithmException ex) {
+ return false;
+ }
+ }
+
private String getUsername(PacketContainer packet) {
WrappedGameProfile profile = packet.getGameProfiles().readSafely(0);
if (profile == null) {
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/packet/ClientPublicKey.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/packet/ClientPublicKey.java
new file mode 100644
index 0000000..495adb1
--- /dev/null
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/packet/ClientPublicKey.java
@@ -0,0 +1,53 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2015-2022 games647 and contributors
+ *
+ * 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.github.games647.fastlogin.bukkit.listener.protocollib.packet;
+
+import java.time.Instant;
+
+public class ClientPublicKey {
+
+ private final Instant expiry;
+ private final byte[] key;
+ private final byte[] signature;
+
+ public ClientPublicKey(Instant expiry, byte[] key, byte[] signature) {
+ this.expiry = expiry;
+ this.key = key;
+ this.signature = signature;
+ }
+
+ public Instant getExpiry() {
+ return expiry;
+ }
+
+ public byte[] getKey() {
+ return key;
+ }
+
+ public byte[] getSignature() {
+ return signature;
+ }
+}
diff --git a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
index 7a097f1..11a52f7 100644
--- a/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
+++ b/bukkit/src/test/java/com/github/games647/fastlogin/bukkit/listener/protocollib/EncryptionUtilTest.java
@@ -25,8 +25,27 @@
*/
package com.github.games647.fastlogin.bukkit.listener.protocollib;
+import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
+import com.google.common.io.Resources;
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.nio.charset.StandardCharsets;
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.X509EncodedKeySpec;
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
+import java.util.Base64;
+import org.bouncycastle.util.io.pem.PemObject;
+import org.bouncycastle.util.io.pem.PemReader;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
@@ -43,4 +62,77 @@ public class EncryptionUtilTest {
assertThat(token, notNullValue());
assertThat(token.length, is(4));
}
+
+ @Test
+ public void testExpiredClientKey() throws Exception {
+ var clientKey = loadClientKey("client_keys/valid.json");
+
+ // Client expires at the exact second mentioned, so use it for verification
+ var expiredTimestamp = clientKey.getExpiry();
+ assertThat(EncryptionUtil.verifyClientKey(clientKey, expiredTimestamp), is(false));
+ }
+
+ // @Test(expected = Exception.class)
+ @Test
+ public void testInvalidChangedExpiration() throws Exception {
+ // expiration date changed should make the signature invalid
+ // expiration should still be valid
+ var clientKey = loadClientKey("client_keys/invalid_wrong_expiration.json");
+ assertThat(EncryptionUtil.verifyClientKey(clientKey, clientKey.getExpiry().minus(5, ChronoUnit.HOURS)), is(false));
+ }
+
+ // @Test(expected = Exception.class)
+ @Test
+ public void testInvalidChangedKey() throws Exception {
+ // changed public key no longer corresponding to the signature
+ var clientKey = loadClientKey("client_keys/invalid_wrong_key.json");
+ assertThat(EncryptionUtil.verifyClientKey(clientKey, clientKey.getExpiry().minus(5, ChronoUnit.HOURS)), is(false));
+ }
+
+ @Test
+ public void testInvalidChangedSignature() throws Exception {
+ // signature modified no longer corresponding to key and expiration date
+ var clientKey = loadClientKey("client_keys/invalid_wrong_signature.json");
+ assertThat(EncryptionUtil.verifyClientKey(clientKey, clientKey.getExpiry().minus(5, ChronoUnit.HOURS)), is(false));
+ }
+
+ @Test
+ public void testValidClientKey() throws Exception {
+ var clientKey = loadClientKey("client_keys/valid.json");
+
+ var verificationTimestamp = clientKey.getExpiry().minus(5, ChronoUnit.HOURS);
+ assertThat(EncryptionUtil.verifyClientKey(clientKey, verificationTimestamp), is(true));
+ }
+
+ private ClientPublicKey loadClientKey(String path)
+ throws NoSuchAlgorithmException, IOException, InvalidKeySpecException {
+ var keyUrl = Resources.getResource(path);
+ var gson = new Gson();
+
+ var lines = Resources.toString(keyUrl, StandardCharsets.US_ASCII);
+ var object = gson.fromJson(lines, JsonObject.class);
+
+ Instant expires = Instant.parse(object.getAsJsonPrimitive("expires_at").getAsString());
+ String key = object.getAsJsonPrimitive("key").getAsString();
+ RSAPublicKey publicKey = parsePublicKey(key);
+
+ byte[] signature = Base64.getDecoder().decode(object.getAsJsonPrimitive("signature").getAsString());
+ return new ClientPublicKey(expires, publicKey.getEncoded(), signature);
+ }
+
+ private RSAPublicKey parsePublicKey(String lines)
+ throws IOException, InvalidKeySpecException, NoSuchAlgorithmException {
+ try (
+ Reader reader = new StringReader(lines);
+ PemReader pemReader = new PemReader(reader)
+ ) {
+
+ PemObject pemObject = pemReader.readPemObject();
+ byte[] content = pemObject.getContent();
+ var pubKeySpec = new X509EncodedKeySpec(content);
+
+ var factory = KeyFactory.getInstance("RSA");
+ return (RSAPublicKey) factory.generatePublic(pubKeySpec);
+ }
+ }
}
diff --git a/bukkit/src/test/resources/client_keys/invalid_wrong_expiration.json b/bukkit/src/test/resources/client_keys/invalid_wrong_expiration.json
new file mode 100644
index 0000000..7ecc12e
--- /dev/null
+++ b/bukkit/src/test/resources/client_keys/invalid_wrong_expiration.json
@@ -0,0 +1,5 @@
+{
+ "expires_at": "2022-06-12T09:46:26.421156927Z",
+ "key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoOv23jt2QPyab6bPRBwH2ggmzQU4I+xm\nDpi3X5ZB5Em/4uzyZqNVLJc0gShpk0XsdoB28Nq1bPxczOTBxuXi3rg5ax5gL+iymDSU27DLM8s/\n33lOofzGPJUEQGKlFm0QelDKZ/q5Y/9inHE3hEJKf7h0tnmGahXFmZSF/nRz9GHnfSYpjtDr9bsZ\nOzQuLhHXT5E4ksNRTFW41h0MlZ1qOhO+NiiVgk7LmgVYiV7RRbgO8U6RaCEqg5n28Ewo6QtzB+DF\n4NTDeu3E9BLH5G0npdUrVNhdRUWCFDmH6n9hqSIz2J7o6GvWqEvp0h9e/3qtLsoS60hnQXunrcWc\nPaEIYQIDAQAB\n-----END RSA PUBLIC KEY-----\n",
+ "signature": "BYv2mKJvz5O3Wo5V5sbJI0L6zAjfzQSkTNd7ykd/MB7KPPDg4zoTuOqphmh042xz1EYbMcfqEZvP04NTaoZDx+IxGieBB+LuxqnmYKIgtpcR2SEpzbSKznSHkupr1hKwF7kCVWLlwSbxc/XRlWPPyT6FE9m628A/jFb/obgfzLLQWfTFWp6kq2oBoUUQV5om2ihdrJ8oLCsw10SGdcFtK4+UuLzz+wjwv3JpvIX93IKdjFnw0KNd110HOPWZgp2n8+f6GsecysorqvwaE1rJC0m9Qa/wFsK2TY7twSMreCrbXPaBiWrkRovtm9gnaBwD+iuZYlnLvO0ld8qW928LL2vFBTi3TsPUWC3i/xYnAR2m8YP2hiCLHuPfSJmgfxHsM2iRdrR8qdOUkiC9h34STEA7Q2+rWkNWJ+YKYVTIkyqHEuXqU87txhVTaRJi6UDGDn49cMKmZwQnn+23JQf1chcn1YFkrivDaJPhm17GhoEldQHSLQfxb0ifja5WBNDbkKBF/h9JqvG3Ya9anxlyxY6g7/m2zP73xfkvUnejoX4GKjffEqezQmTe9RIeuWyz94nfZNLr0Ps363kAfP4KSW+f4zkTU/UVg19ccAY0ZhiwDetKyksU5WqLO8xMPZ6PNFYhNeBb2yhGdT8PidkRYkC4XBn1k7F7apiNUuZU8aA="
+}
diff --git a/bukkit/src/test/resources/client_keys/invalid_wrong_key.json b/bukkit/src/test/resources/client_keys/invalid_wrong_key.json
new file mode 100644
index 0000000..37bb3ad
--- /dev/null
+++ b/bukkit/src/test/resources/client_keys/invalid_wrong_key.json
@@ -0,0 +1,5 @@
+{
+ "expires_at": "2022-06-12T10:46:26.421156927Z",
+ "key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoOv23jt2QPyab6bPRBwH2ggmzQU3I+xmDpi3X5ZB5Em/4uzyZqNVLJc0gShpk0XsdoB28Nq1bPxczOTBxuXi3rg5ax5gL+iymDSU27DLM8s/33lOofzGPJUEQGKlFm0QelDKZ/q5Y/9inHE3hEJKf7h0tnmGahXFmZSF/nRz9GHnfSYpjtDr9bsZOzQuLhHXT5E4ksNRTFW41h0MlZ1qOhO+NiiVgk7LmgVYiV7RRbgO8U6RaCEqg5n28Ewo6QtzB+DF4NTDeu3E9BLH5G0npdUrVNhdRUWCFDmH6n9hqSIz2J7o6GvWqEvp0h9e/3qtLsoS60hnQXunrcWcPaEIYQIDAQAB\n-----END RSA PUBLIC KEY-----\n",
+ "signature": "BYv2mKJvz5O3Wo5V5sbJI0L6zAjfzQSkTNd7ykd/MB7KPPDg4zoTuOqphmh042xz1EYbMcfqEZvP04NTaoZDx+IxGieBB+LuxqnmYKIgtpcR2SEpzbSKznSHkupr1hKwF7kCVWLlwSbxc/XRlWPPyT6FE9m628A/jFb/obgfzLLQWfTFWp6kq2oBoUUQV5om2ihdrJ8oLCsw10SGdcFtK4+UuLzz+wjwv3JpvIX93IKdjFnw0KNd110HOPWZgp2n8+f6GsecysorqvwaE1rJC0m9Qa/wFsK2TY7twSMreCrbXPaBiWrkRovtm9gnaBwD+iuZYlnLvO0ld8qW928LL2vFBTi3TsPUWC3i/xYnAR2m8YP2hiCLHuPfSJmgfxHsM2iRdrR8qdOUkiC9h34STEA7Q2+rWkNWJ+YKYVTIkyqHEuXqU87txhVTaRJi6UDGDn49cMKmZwQnn+23JQf1chcn1YFkrivDaJPhm17GhoEldQHSLQfxb0ifja5WBNDbkKBF/h9JqvG3Ya9anxlyxY6g7/m2zP73xfkvUnejoX4GKjffEqezQmTe9RIeuWyz94nfZNLr0Ps363kAfP4KSW+f4zkTU/UVg19ccAY0ZhiwDetKyksU5WqLO8xMPZ6PNFYhNeBb2yhGdT8PidkRYkC4XBn1k7F7apiNUuZU8aA="
+}
diff --git a/bukkit/src/test/resources/client_keys/invalid_wrong_signature.json b/bukkit/src/test/resources/client_keys/invalid_wrong_signature.json
new file mode 100644
index 0000000..cbca4b1
--- /dev/null
+++ b/bukkit/src/test/resources/client_keys/invalid_wrong_signature.json
@@ -0,0 +1,5 @@
+{
+ "expires_at": "2022-06-12T10:46:26.421156927Z",
+ "key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoOv23jt2QPyab6bPRBwH2ggmzQU4I+xm\nDpi3X5ZB5Em/4uzyZqNVLJc0gShpk0XsdoB28Nq1bPxczOTBxuXi3rg5ax5gL+iymDSU27DLM8s/\n33lOofzGPJUEQGKlFm0QelDKZ/q5Y/9inHE3hEJKf7h0tnmGahXFmZSF/nRz9GHnfSYpjtDr9bsZ\nOzQuLhHXT5E4ksNRTFW41h0MlZ1qOhO+NiiVgk7LmgVYiV7RRbgO8U6RaCEqg5n28Ewo6QtzB+DF\n4NTDeu3E9BLH5G0npdUrVNhdRUWCFDmH6n9hqSIz2J7o6GvWqEvp0h9e/3qtLsoS60hnQXunrcWc\nPaEIYQIDAQAB\n-----END RSA PUBLIC KEY-----\n",
+ "signature": "bYv2mKJvz5O3Wo5V5sbJI0L6zAjfzQSkTNd7ykd/MB7KPPDg4zoTuOqphmh042xz1EYbMcfqEZvP04NTaoZDx+IxGieBB+LuxqnmYKIgtpcR2SEpzbSKznSHkupr1hKwF7kCVWLlwSbxc/XRlWPPyT6FE9m628A/jFb/obgfzLLQWfTFWp6kq2oBoUUQV5om2ihdrJ8oLCsw10SGdcFtK4+UuLzz+wjwv3JpvIX93IKdjFnw0KNd110HOPWZgp2n8+f6GsecysorqvwaE1rJC0m9Qa/wFsK2TY7twSMreCrbXPaBiWrkRovtm9gnaBwD+iuZYlnLvO0ld8qW928LL2vFBTi3TsPUWC3i/xYnAR2m8YP2hiCLHuPfSJmgfxHsM2iRdrR8qdOUkiC9h34STEA7Q2+rWkNWJ+YKYVTIkyqHEuXqU87txhVTaRJi6UDGDn49cMKmZwQnn+23JQf1chcn1YFkrivDaJPhm17GhoEldQHSLQfxb0ifja5WBNDbkKBF/h9JqvG3Ya9anxlyxY6g7/m2zP73xfkvUnejoX4GKjffEqezQmTe9RIeuWyz94nfZNLr0Ps363kAfP4KSW+f4zkTU/UVg19ccAY0ZhiwDetKyksU5WqLO8xMPZ6PNFYhNeBb2yhGdT8PidkRYkC4XBn1k7F7apiNUuZU8aA="
+}
diff --git a/bukkit/src/test/resources/client_keys/valid.json b/bukkit/src/test/resources/client_keys/valid.json
new file mode 100644
index 0000000..a2d6a41
--- /dev/null
+++ b/bukkit/src/test/resources/client_keys/valid.json
@@ -0,0 +1,5 @@
+{
+ "expires_at": "2022-06-12T10:46:26.421156927Z",
+ "key": "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoOv23jt2QPyab6bPRBwH2ggmzQU4I+xmDpi3X5ZB5Em/4uzyZqNVLJc0gShpk0XsdoB28Nq1bPxczOTBxuXi3rg5ax5gL+iymDSU27DLM8s/33lOofzGPJUEQGKlFm0QelDKZ/q5Y/9inHE3hEJKf7h0tnmGahXFmZSF/nRz9GHnfSYpjtDr9bsZOzQuLhHXT5E4ksNRTFW41h0MlZ1qOhO+NiiVgk7LmgVYiV7RRbgO8U6RaCEqg5n28Ewo6QtzB+DF4NTDeu3E9BLH5G0npdUrVNhdRUWCFDmH6n9hqSIz2J7o6GvWqEvp0h9e/3qtLsoS60hnQXunrcWcPaEIYQIDAQAB\n-----END RSA PUBLIC KEY-----\n",
+ "signature": "BYv2mKJvz5O3Wo5V5sbJI0L6zAjfzQSkTNd7ykd/MB7KPPDg4zoTuOqphmh042xz1EYbMcfqEZvP04NTaoZDx+IxGieBB+LuxqnmYKIgtpcR2SEpzbSKznSHkupr1hKwF7kCVWLlwSbxc/XRlWPPyT6FE9m628A/jFb/obgfzLLQWfTFWp6kq2oBoUUQV5om2ihdrJ8oLCsw10SGdcFtK4+UuLzz+wjwv3JpvIX93IKdjFnw0KNd110HOPWZgp2n8+f6GsecysorqvwaE1rJC0m9Qa/wFsK2TY7twSMreCrbXPaBiWrkRovtm9gnaBwD+iuZYlnLvO0ld8qW928LL2vFBTi3TsPUWC3i/xYnAR2m8YP2hiCLHuPfSJmgfxHsM2iRdrR8qdOUkiC9h34STEA7Q2+rWkNWJ+YKYVTIkyqHEuXqU87txhVTaRJi6UDGDn49cMKmZwQnn+23JQf1chcn1YFkrivDaJPhm17GhoEldQHSLQfxb0ifja5WBNDbkKBF/h9JqvG3Ya9anxlyxY6g7/m2zP73xfkvUnejoX4GKjffEqezQmTe9RIeuWyz94nfZNLr0Ps363kAfP4KSW+f4zkTU/UVg19ccAY0ZhiwDetKyksU5WqLO8xMPZ6PNFYhNeBb2yhGdT8PidkRYkC4XBn1k7F7apiNUuZU8aA="
+}
2022-06-28 18:34:21 +02:00
4fa28f2c69
Support username extraction in 1.19
...
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
index d1f83a6..f8b8de2 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
@@ -31,6 +31,7 @@ import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
+import com.comphenix.protocol.wrappers.WrappedGameProfile;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
import com.github.games647.fastlogin.core.antibot.AntiBotService;
import com.github.games647.fastlogin.core.antibot.AntiBotService.Action;
@@ -94,7 +95,7 @@ public class ProtocolLibListener extends PacketAdapter {
PacketContainer packet = packetEvent.getPacket();
InetSocketAddress address = sender.getAddress();
- String username = packet.getGameProfiles().read(0).getName();
+ String username = getUsername(packet);
Action action = antiBotService.onIncomingConnection(address, username);
switch (action) {
@@ -154,4 +155,14 @@ public class ProtocolLibListener extends PacketAdapter {
Runnable nameCheckTask = new NameCheckTask(plugin, random, player, packetEvent, username, keyPair.getPublic());
plugin.getScheduler().runAsync(nameCheckTask);
}
+
+ private String getUsername(PacketContainer packet) {
+ WrappedGameProfile profile = packet.getGameProfiles().readSafely(0);
+ if (profile == null) {
+ return packet.getStrings().read(0);
+ }
+
+ //player.getName() won't work at this state
+ return profile.getName();
+ }
}
2022-06-28 18:34:21 +02:00
d8a6e2a6fa
Update ProtocolLib to 5.0
...
diff --git a/bukkit/pom.xml b/bukkit/pom.xml
index 13e466e..2494a2b 100644
--- a/bukkit/pom.xml
+++ b/bukkit/pom.xml
@@ -186,7 +186,7 @@
<dependency>
<groupId>com.comphenix.protocol</groupId>
<artifactId>ProtocolLib</artifactId>
- <version>4.8.0</version>
+ <version>5.0.0-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
index 5a2794d..2e60cd1 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/VerifyResponseTask.java
@@ -28,7 +28,7 @@ package com.github.games647.fastlogin.bukkit.listener.protocollib;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
-import com.comphenix.protocol.injector.server.TemporaryPlayerFactory;
+import com.comphenix.protocol.injector.temporary.TemporaryPlayerFactory;
import com.comphenix.protocol.reflect.FieldUtils;
import com.comphenix.protocol.reflect.FuzzyReflection;
import com.comphenix.protocol.utility.MinecraftReflection;
@@ -37,18 +37,14 @@ import com.comphenix.protocol.wrappers.WrappedChatComponent;
import com.comphenix.protocol.wrappers.WrappedGameProfile;
import com.github.games647.craftapi.model.auth.Verification;
import com.github.games647.craftapi.model.skin.SkinProperty;
-import com.github.games647.craftapi.resolver.AbstractResolver;
import com.github.games647.craftapi.resolver.MojangResolver;
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import java.net.*;
-import java.nio.charset.StandardCharsets;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
import java.security.GeneralSecurityException;
import java.security.Key;
import java.security.KeyPair;
@@ -263,15 +259,11 @@ public class VerifyResponseTask implements Runnable {
private void kickPlayer(String reason) {
PacketContainer kickPacket = new PacketContainer(DISCONNECT);
kickPacket.getChatComponents().write(0, WrappedChatComponent.fromText(reason));
- try {
- //send kick packet at login state
- //the normal event.getPlayer.kickPlayer(String) method does only work at play state
- ProtocolLibrary.getProtocolManager().sendServerPacket(player, kickPacket);
- //tell the server that we want to close the connection
- player.kickPlayer("Disconnect");
- } catch (InvocationTargetException ex) {
- plugin.getLog().error("Error sending kick packet for: {}", player, ex);
- }
+ //send kick packet at login state
+ //the normal event.getPlayer.kickPlayer(String) method does only work at play state
+ ProtocolLibrary.getProtocolManager().sendServerPacket(player, kickPacket);
+ //tell the server that we want to close the connection
+ player.kickPlayer("Disconnect");
}
//fake a new login packet in order to let the server handle all the other stuff
@@ -287,14 +279,8 @@ public class VerifyResponseTask implements Runnable {
startPacket.getGameProfiles().write(0, fakeProfile);
}
- try {
- //we don't want to handle our own packets so ignore filters
- startPacket.setMeta(ProtocolLibListener.SOURCE_META_KEY, plugin.getName());
- ProtocolLibrary.getProtocolManager().recieveClientPacket(player, startPacket, true);
- } catch (InvocationTargetException | IllegalAccessException ex) {
- plugin.getLog().warn("Failed to fake a new start packet for: {}", username, ex);
- //cancel the event in order to prevent the server receiving an invalid packet
- kickPlayer(plugin.getCore().getMessage("error-kick"));
- }
+ //we don't want to handle our own packets so ignore filters
+ startPacket.setMeta(ProtocolLibListener.SOURCE_META_KEY, plugin.getName());
+ ProtocolLibrary.getProtocolManager().receiveClientPacket(player, startPacket, true);
}
}
2022-06-28 18:34:21 +02:00
219ebb1248
Bump version
2022-06-28 18:34:21 +02:00
87281be8cf
Fix start packet containing username in 1.19
2022-06-28 18:34:21 +02:00
e781eb6c68
Revert "Add support for checking velocity support with newer paper configs"
...
This reverts commit 6f9e8a49f1
.
Fixes #825
2022-06-28 18:12:01 +02:00
9ba6e9ba90
Add missing license header
2022-06-24 16:28:18 +02:00
f182adc3bc
Add support for RGB colors using the color char
...
Examples include:
`&x00002a00002b&lText`
2022-06-24 16:21:53 +02:00
5e159cac64
Explicitly disable ProtocolLib listener on stop
...
This will stop Paper complaining about still running asynchronous tasks
which is a useful feature.
2022-06-19 12:10:31 +02:00
6f9e8a49f1
Add support for checking velocity support with newer paper configs
...
Fixes #802
2022-06-18 21:23:17 +02:00
57b7fe949f
Merge pull request #823 from games647/805-more-antibot-features
...
Add support for blocking incoming connection on AntiBot detection
2022-06-18 18:15:52 +02:00
32fe2cdf4e
Check for valid session before starting a new thread
...
This could reduce load for malicious senders as there have to be session
active to start the expensive operation of creating a new thread.
2022-06-18 18:09:35 +02:00
7cab5993b7
Add license
...
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/FastLoginBukkit.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/FastLoginBukkit.java
index ab4ceed..9c2fa3a 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/FastLoginBukkit.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/FastLoginBukkit.java
@@ -114,9 +114,9 @@ public class FastLoginBukkit extends JavaPlugin implements PlatformPlugin<Comman
}
if (pluginManager.isPluginEnabled("ProtocolSupport")) {
- pluginManager.registerEvents(new ProtocolSupportListener(this, core.getRateLimiter()), this);
+ pluginManager.registerEvents(new ProtocolSupportListener(this, core.getAntiBot()), this);
} else if (pluginManager.isPluginEnabled("ProtocolLib")) {
- ProtocolLibListener.register(this, core.getRateLimiter());
+ ProtocolLibListener.register(this, core.getAntiBot());
if (isPluginInstalled("floodgate")) {
if (getConfig().getBoolean("floodgatePrefixWorkaround")){
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
index 8b3d601..3c161b7 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/ProtocolLibListener.java
@@ -31,8 +31,10 @@ import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
-import com.github.games647.fastlogin.core.RateLimiter;
+import com.github.games647.fastlogin.core.antibot.AntiBotService;
+import com.github.games647.fastlogin.core.antibot.AntiBotService.Action;
+import java.net.InetSocketAddress;
import java.security.KeyPair;
import java.security.SecureRandom;
@@ -50,9 +52,9 @@ public class ProtocolLibListener extends PacketAdapter {
//just create a new once on plugin enable. This used for verify token generation
private final SecureRandom random = new SecureRandom();
private final KeyPair keyPair = EncryptionUtil.generateKeyPair();
- private final RateLimiter rateLimiter;
+ private final AntiBotService antiBotService;
- public ProtocolLibListener(FastLoginBukkit plugin, RateLimiter rateLimiter) {
+ public ProtocolLibListener(FastLoginBukkit plugin, AntiBotService antiBotService) {
//run async in order to not block the server, because we are making api calls to Mojang
super(params()
.plugin(plugin)
@@ -60,15 +62,15 @@ public class ProtocolLibListener extends PacketAdapter {
.optionAsync());
this.plugin = plugin;
- this.rateLimiter = rateLimiter;
+ this.antiBotService = antiBotService;
}
- public static void register(FastLoginBukkit plugin, RateLimiter rateLimiter) {
+ public static void register(FastLoginBukkit plugin, AntiBotService antiBotService) {
// they will be created with a static builder, because otherwise it will throw a NoClassDefFoundError
// TODO: make synchronous processing, but do web or database requests async
ProtocolLibrary.getProtocolManager()
.getAsynchronousManager()
- .registerAsyncHandler(new ProtocolLibListener(plugin, rateLimiter))
+ .registerAsyncHandler(new ProtocolLibListener(plugin, antiBotService))
.start();
}
@@ -88,12 +90,26 @@ public class ProtocolLibListener extends PacketAdapter {
Player sender = packetEvent.getPlayer();
PacketType packetType = packetEvent.getPacketType();
if (packetType == START) {
- if (!rateLimiter.tryAcquire()) {
- plugin.getLog().warn("Simple Anti-Bot join limit - Ignoring {}", sender);
- return;
+ PacketContainer packet = packetEvent.getPacket();
+
+ InetSocketAddress address = sender.getAddress();
+ String username = packet.getGameProfiles().read(0).getName();
+
+ Action action = antiBotService.onIncomingConnection(address, username);
+ switch (action) {
+ case Ignore:
+ // just ignore
+ return;
+ case Block:
+ String message = plugin.getCore().getMessage("kick-antibot");
+ sender.kickPlayer(message);
+ break;
+ case Continue:
+ default:
+ //player.getName() won't work at this state
+ onLogin(packetEvent, sender, username);
+ break;
}
-
- onLogin(packetEvent, sender);
} else {
onEncryptionBegin(packetEvent, sender);
}
@@ -113,18 +129,13 @@ public class ProtocolLibListener extends PacketAdapter {
plugin.getScheduler().runAsync(verifyTask);
}
- private void onLogin(PacketEvent packetEvent, Player player) {
+ private void onLogin(PacketEvent packetEvent, Player player, String username) {
//this includes ip:port. Should be unique for an incoming login request with a timeout of 2 minutes
String sessionKey = player.getAddress().toString();
//remove old data every time on a new login in order to keep the session only for one person
plugin.removeSession(player.getAddress());
- //player.getName() won't work at this state
- PacketContainer packet = packetEvent.getPacket();
-
- String username = packet.getGameProfiles().read(0).getName();
-
if (packetEvent.getPacket().getMeta("original_name").isPresent()) {
//username has been injected by ManualNameChange.java
username = (String) packetEvent.getPacket().getMeta("original_name").get();
diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocolsupport/ProtocolSupportListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocolsupport/ProtocolSupportListener.java
index 608078c..ce84824 100644
--- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocolsupport/ProtocolSupportListener.java
+++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocolsupport/ProtocolSupportListener.java
@@ -29,8 +29,9 @@ import com.github.games647.craftapi.UUIDAdapter;
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
import com.github.games647.fastlogin.bukkit.event.BukkitFastLoginPreLoginEvent;
-import com.github.games647.fastlogin.core.RateLimiter;
import com.github.games647.fastlogin.core.StoredProfile;
+import com.github.games647.fastlogin.core.antibot.AntiBotService;
+import com.github.games647.fastlogin.core.antibot.AntiBotService.Action;
import com.github.games647.fastlogin.core.shared.JoinManagement;
import com.github.games647.fastlogin.core.shared.event.FastLoginPreLoginEvent;
@@ -49,13 +50,13 @@ public class ProtocolSupportListener extends JoinManagement<Player, CommandSende
implements Listener {
private final FastLoginBukkit plugin;
- private final RateLimiter rateLimiter;
+ private final AntiBotService antiBotService;
- public ProtocolSupportListener(FastLoginBukkit plugin, RateLimiter rateLimiter) {
+ public ProtocolSupportListener(FastLoginBukkit plugin, AntiBotService antiBotService) {
super(plugin.getCore(), plugin.getCore().getAuthPluginHook(), plugin.getBedrockService());
this.plugin = plugin;
- this.rateLimiter = rateLimiter;
+ this.antiBotService = antiBotService;
}
@EventHandler
@@ -64,19 +65,28 @@ public class ProtocolSupportListener extends JoinManagement<Player, CommandSende
return;
}
- if (!rateLimiter.tryAcquire()) {
- plugin.getLog().warn("Simple Anti-Bot join limit - Ignoring {}", loginStartEvent.getConnection());
- return;
- }
-
String username = loginStartEvent.getConnection().getProfile().getName();
InetSocketAddress address = loginStartEvent.getAddress();
-
- //remove old data every time on a new login in order to keep the session only for one person
- plugin.removeSession(address);
-
- ProtocolLoginSource source = new ProtocolLoginSource(loginStartEvent);
- super.onLogin(username, source);
+ plugin.getLog().info("Incoming login request for {} from {}", username, address);
+
+ Action action = antiBotService.onIncomingConnection(address, username);
+ switch (action) {
+ case Ignore:
+ // just ignore
+ return;
+ case Block:
+ String message = plugin.getCore().getMessage("kick-antibot");
+ loginStartEvent.denyLogin(message);
+ break;
+ case Continue:
+ default:
+ //remove old data every time on a new login in order to keep the session only for one person
+ plugin.removeSession(address);
+
+ ProtocolLoginSource source = new ProtocolLoginSource(loginStartEvent);
+ super.onLogin(username, source);
+ break;
+ }
}
@EventHandler
diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java
index a8c894d..ddd7e97 100644
--- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java
+++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java
@@ -32,7 +32,8 @@ import com.github.games647.fastlogin.bungee.task.AsyncPremiumCheck;
import com.github.games647.fastlogin.bungee.task.FloodgateAuthTask;
import com.github.games647.fastlogin.bungee.task.ForceLoginTask;
import com.github.games647.fastlogin.core.StoredProfile;
-import com.github.games647.fastlogin.core.antibot.RateLimiter;
+import com.github.games647.fastlogin.core.antibot.AntiBotService;
+import com.github.games647.fastlogin.core.antibot.AntiBotService.Action;
import com.github.games647.fastlogin.core.hooks.bedrock.FloodgateService;
import com.github.games647.fastlogin.core.shared.LoginSession;
import com.google.common.base.Throwables;
@@ -41,8 +42,10 @@ import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.reflect.Field;
+import java.net.InetSocketAddress;
import java.util.UUID;
+import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.PendingConnection;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server;
@@ -92,12 +95,12 @@ public class ConnectListener implements Listener {
}
private final FastLoginBungee plugin;
- private final RateLimiter rateLimiter;
+ private final AntiBotService antiBotService;
private final Property[] emptyProperties = {};
- public ConnectListener(FastLoginBungee plugin, RateLimiter rateLimiter) {
+ public ConnectListener(FastLoginBungee plugin, AntiBotService antiBotService) {
this.plugin = plugin;
- this.rateLimiter = rateLimiter;
+ this.antiBotService = antiBotService;
}
@EventHandler
@@ -107,17 +110,28 @@ public class ConnectListener implements Listener {
return;
}
- if (!rateLimiter.tryAcquire()) {
- plugin.getLog().warn("Simple Anti-Bot join limit - Ignoring {}", connection);
- return;
- }
-
+ InetSocketAddress address = preLoginEvent.getConnection().getAddress();
String username = connection.getName();
+
plugin.getLog().info("Incoming login request for {} from {}", username, connection.getSocketAddress());
- preLoginEvent.registerIntent(plugin);
- Runnable asyncPremiumCheck = new AsyncPremiumCheck(plugin, preLoginEvent, connection, username);
- plugin.getScheduler().runAsync(asyncPremiumCheck);
+ Action action = antiBotService.onIncomingConnection(address, username);
+ switch (action) {
+ case Ignore:
+ // just ignore
+ return;
+ case Block:
+ String message = plugin.getCore().getMessage("kick-antibot");
+ preLoginEvent.setCancelReason(TextComponent.fromLegacyText(message));
+ preLoginEvent.setCancelled(true);
+ break;
+ case Continue:
+ default:
+ preLoginEvent.registerIntent(plugin);
+ Runnable asyncPremiumCheck = new AsyncPremiumCheck(plugin, preLoginEvent, connection, username);
+ plugin.getScheduler().runAsync(asyncPremiumCheck);
+ break;
+ }
}
@EventHandler(priority = EventPriority.LOWEST)
@@ -140,7 +154,7 @@ public class ConnectListener implements Listener {
StoredProfile playerProfile = session.getProfile();
playerProfile.setId(verifiedUUID);
- // bungeecord will do this automatically so override it on disabled option
+ // BungeeCord will do this automatically so override it on disabled option
if (uniqueIdSetter != null) {
InitialHandler initialHandler = (InitialHandler) connection;
diff --git a/core/src/main/java/com/github/games647/fastlogin/core/mojang/MojangApiConnector.java b/core/src/main/java/com/github/games647/fastlogin/core/antibot/AntiBotService.java
similarity index 57%
rename from core/src/main/java/com/github/games647/fastlogin/core/mojang/MojangApiConnector.java
rename to core/src/main/java/com/github/games647/fastlogin/core/antibot/AntiBotService.java
index 4321d6f..2848335 100644
--- a/core/src/main/java/com/github/games647/fastlogin/core/mojang/MojangApiConnector.java
+++ b/core/src/main/java/com/github/games647/fastlogin/core/antibot/AntiBotService.java
@@ -23,3 +23,40 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
+package com.github.games647.fastlogin.core.antibot;
+
+import java.net.InetSocketAddress;
+
+import org.slf4j.Logger;
+
+public class AntiBotService {
+
+ private final Logger logger;
+
+ private final RateLimiter rateLimiter;
+ private final Action limitReachedAction;
+
+ public AntiBotService(Logger logger, RateLimiter rateLimiter, Action limitReachedAction) {
+ this.logger = logger;
+
+ this.rateLimiter = rateLimiter;
+ this.limitReachedAction = limitReachedAction;
+ }
+
+ public Action onIncomingConnection(InetSocketAddress clientAddress, String username) {
+ if (!rateLimiter.tryAcquire()) {
+ logger.warn("Anti-Bot join limit - Ignoring {}", clientAddress);
+ return limitReachedAction;
+ }
+
+ return Action.Continue;
+ }
+
+ public enum Action {
+ Ignore,
+
+ Block,
+
+ Continue;
+ }
+}
diff --git a/core/src/main/java/com/github/games647/fastlogin/core/mojang/ProxyAgnosticMojangResolver.java b/core/src/main/java/com/github/games647/fastlogin/core/antibot/ProxyAgnosticMojangResolver.java
similarity index 100%
rename from core/src/main/java/com/github/games647/fastlogin/core/mojang/ProxyAgnosticMojangResolver.java
rename to core/src/main/java/com/github/games647/fastlogin/core/antibot/ProxyAgnosticMojangResolver.java
diff --git a/core/src/main/java/com/github/games647/fastlogin/core/RateLimiter.java b/core/src/main/java/com/github/games647/fastlogin/core/antibot/RateLimiter.java
similarity index 96%
rename from core/src/main/java/com/github/games647/fastlogin/core/RateLimiter.java
rename to core/src/main/java/com/github/games647/fastlogin/core/antibot/RateLimiter.java
index 3ec2f75..b791ca5 100644
--- a/core/src/main/java/com/github/games647/fastlogin/core/RateLimiter.java
+++ b/core/src/main/java/com/github/games647/fastlogin/core/antibot/RateLimiter.java
@@ -23,7 +23,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-package com.github.games647.fastlogin.core;
+package com.github.games647.fastlogin.core.antibot;
@FunctionalInterface
public interface RateLimiter {
diff --git a/core/src/main/java/com/github/games647/fastlogin/core/TickingRateLimiter.java b/core/src/main/java/com/github/games647/fastlogin/core/antibot/TickingRateLimiter.java
similarity index 98%
rename from core/src/main/java/com/github/games647/fastlogin/core/TickingRateLimiter.java
rename to core/src/main/java/com/github/games647/fastlogin/core/antibot/TickingRateLimiter.java
index 6064229..ced7da1 100644
--- a/core/src/main/java/com/github/games647/fastlogin/core/TickingRateLimiter.java
+++ b/core/src/main/java/com/github/games647/fastlogin/core/antibot/TickingRateLimiter.java
@@ -23,7 +23,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-package com.github.games647.fastlogin.core;
+package com.github.games647.fastlogin.core.antibot;
import com.google.common.base.Ticker;
diff --git a/core/src/main/java/com/github/games647/fastlogin/core/mojang/UUIDTypeAdapter.java b/core/src/main/java/com/github/games647/fastlogin/core/mojang/UUIDTypeAdapter.java
deleted file mode 100644
index 4321d6f..0000000
--- a/core/src/main/java/com/github/games647/fastlogin/core/mojang/UUIDTypeAdapter.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * SPDX-License-Identifier: MIT
- *
- * The MIT License (MIT)
- *
- * Copyright (c) 2015-2022 games647 and contributors
- *
- * 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.
- */
diff --git a/core/src/main/java/com/github/games647/fastlogin/core/shared/FastLoginCore.java b/core/src/main/java/com/github/games647/fastlogin/core/shared/FastLoginCore.java
index 9e2a49a..474a8e2 100644
--- a/core/src/main/java/com/github/games647/fastlogin/core/shared/FastLoginCore.java
+++ b/core/src/main/java/com/github/games647/fastlogin/core/shared/FastLoginCore.java
@@ -28,8 +28,10 @@ package com.github.games647.fastlogin.core.shared;
import com.github.games647.craftapi.resolver.MojangResolver;
import com.github.games647.craftapi.resolver.http.RotatingProxySelector;
import com.github.games647.fastlogin.core.CommonUtil;
-import com.github.games647.fastlogin.core.RateLimiter;
-import com.github.games647.fastlogin.core.TickingRateLimiter;
+import com.github.games647.fastlogin.core.antibot.AntiBotService;
+import com.github.games647.fastlogin.core.antibot.AntiBotService.Action;
+import com.github.games647.fastlogin.core.antibot.RateLimiter;
+import com.github.games647.fastlogin.core.antibot.TickingRateLimiter;
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
import com.github.games647.fastlogin.core.hooks.DefaultPasswordGenerator;
import com.github.games647.fastlogin.core.hooks.PasswordGenerator;
@@ -88,7 +90,7 @@ public class FastLoginCore<P extends C, C, T extends PlatformPlugin<C>> {
private Configuration config;
private SQLStorage storage;
- private RateLimiter rateLimiter;
+ private AntiBotService antiBot;
private PasswordGenerator<P> passwordGenerator = new DefaultPasswordGenerator<>();
private AuthPlugin<P> authPlugin;
@@ -122,7 +124,7 @@ public class FastLoginCore<P extends C, C, T extends PlatformPlugin<C>> {
// Initialize the resolver based on the config parameter
this.resolver = this.config.getBoolean("useProxyAgnosticResolver", false) ? new ProxyAgnosticMojangResolver() : new MojangResolver();
- rateLimiter = createRateLimiter(config.getSection("anti-bot"));
+ antiBot = createAntiBotService(config.getSection("anti-bot"));
Set<Proxy> proxies = config.getStringList("proxies")
.stream()
.map(HostAndPort::fromString)
@@ -144,20 +146,34 @@ public class FastLoginCore<P extends C, C, T extends PlatformPlugin<C>> {
resolver.setOutgoingAddresses(addresses);
}
- private RateLimiter createRateLimiter(Configuration botSection) {
- boolean enabled = botSection.getBoolean("enabled", true);
- if (!enabled) {
+ private AntiBotService createAntiBotService(Configuration botSection) {
+ RateLimiter rateLimiter;
+ if (botSection.getBoolean("enabled", true)) {
+ int maxCon = botSection.getInt("connections", 200);
+ long expireTime = botSection.getLong("expire", 5) * 60 * 1_000L;
+ if (expireTime > MAX_EXPIRE_RATE) {
+ expireTime = MAX_EXPIRE_RATE;
+ }
+
+ rateLimiter = new TickingRateLimiter(Ticker.systemTicker(), maxCon, expireTime);
+ } else {
// no-op rate limiter
- return () -> true;
+ rateLimiter = () -> true;
}
- int maxCon = botSection.getInt("connections", 200);
- long expireTime = botSection.getLong("expire", 5) * 60 * 1_000L;
- if (expireTime > MAX_EXPIRE_RATE) {
- expireTime = MAX_EXPIRE_RATE;
+ Action action = Action.Ignore;
+ switch (botSection.getString("action", "ignore")) {
+ case "ignore":
+ action = Action.Ignore;
+ break;
+ case "block":
+ action = Action.Block;
+ break;
+ default:
+ plugin.getLog().warn("Invalid anti bot action - defaulting to ignore");
}
- return new TickingRateLimiter(Ticker.systemTicker(), maxCon, expireTime);
+ return new AntiBotService(plugin.getLog(), rateLimiter, action);
}
private Configuration loadFile(String fileName) throws IOException {
@@ -285,8 +301,8 @@ public class FastLoginCore<P extends C, C, T extends PlatformPlugin<C>> {
return authPlugin;
}
- public RateLimiter getRateLimiter() {
- return rateLimiter;
+ public AntiBotService getAntiBot() {
+ return antiBot;
}
public void setAuthPluginHook(AuthPlugin<P> authPlugin) {
diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml
index 1b0905d..3a2ab7a 100644
--- a/core/src/main/resources/config.yml
+++ b/core/src/main/resources/config.yml
@@ -20,6 +20,9 @@ anti-bot:
connections: 600
# Amount of minutes after the first connection got inserted will expire and made available
expire: 10
+ # Action - Which action should be performed when the bucket is full (too many connections)
+ # Allowed values are: 'ignore' (FastLogin drops handling the player) or 'block' (block this incoming connection)
+ action: 'ignore'
# Request a premium login without forcing the player to type a command
#
diff --git a/core/src/main/resources/messages.yml b/core/src/main/resources/messages.yml
index 8b315ba..33cadaa 100644
--- a/core/src/main/resources/messages.yml
+++ b/core/src/main/resources/messages.yml
@@ -48,6 +48,9 @@ not-premium-other: '&4Player is not in the premium list'
# Admin wanted to change the premium of a user that isn't known to the plugin
player-unknown: '&4Player not in the database'
+# Player kicked from anti bot feature
+kick-antibot: '&4Please wait a moment!'
+
# ========= Bukkit/Spigot ================
# The user skipped the authentication, because it was a premium player
diff --git a/core/src/test/java/com/github/games647/fastlogin/core/TickingRateLimiterTest.java b/core/src/test/java/com/github/games647/fastlogin/core/TickingRateLimiterTest.java
index 2c04b6e..3f753cd 100644
--- a/core/src/test/java/com/github/games647/fastlogin/core/TickingRateLimiterTest.java
+++ b/core/src/test/java/com/github/games647/fastlogin/core/TickingRateLimiterTest.java
@@ -25,6 +25,8 @@
*/
package com.github.games647.fastlogin.core;
+import com.github.games647.fastlogin.core.antibot.TickingRateLimiter;
+
import java.time.Duration;
import java.util.concurrent.TimeUnit;
diff --git a/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/ConnectListener.java b/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/ConnectListener.java
index 2b51bd2..33c8c31 100644
--- a/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/ConnectListener.java
+++ b/velocity/src/main/java/com/github/games647/fastlogin/velocity/listener/ConnectListener.java
@@ -27,7 +27,8 @@ package com.github.games647.fastlogin.velocity.listener;
import com.github.games647.craftapi.UUIDAdapter;
import com.github.games647.fastlogin.core.StoredProfile;
-import com.github.games647.fastlogin.core.antibot.RateLimiter;
+import com.github.games647.fastlogin.core.antibot.AntiBotService;
+import com.github.games647.fastlogin.core.antibot.AntiBotService.Action;
import com.github.games647.fastlogin.core.shared.LoginSession;
import com.github.games647.fastlogin.velocity.FastLoginVelocity;
import com.github.games647.fastlogin.velocity.VelocityLoginSession;
@@ -37,6 +38,7 @@ import com.velocitypowered.api.event.Continuation;
import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.connection.DisconnectEvent;
import com.velocitypowered.api.event.connection.PreLoginEvent;
+import com.velocitypowered.api.event.connection.PreLoginEvent.PreLoginComponentResult;
import com.velocitypowered.api.event.player.GameProfileRequestEvent;
import com.velocitypowered.api.event.player.ServerConnectedEvent;
import com.velocitypowered.api.proxy.InboundConnection;
@@ -44,19 +46,23 @@ import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.server.RegisteredServer;
import com.velocitypowered.api.util.GameProfile;
+import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
+import net.kyori.adventure.text.TextComponent;
+import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
+
public class ConnectListener {
private final FastLoginVelocity plugin;
- private final RateLimiter rateLimiter;
+ private final AntiBotService antiBotService;
- public ConnectListener(FastLoginVelocity plugin, RateLimiter rateLimiter) {
+ public ConnectListener(FastLoginVelocity plugin, AntiBotService antiBotService) {
this.plugin = plugin;
- this.rateLimiter = rateLimiter;
+ this.antiBotService = antiBotService;
}
@Subscribe
@@ -66,16 +72,28 @@ public class ConnectListener {
}
InboundConnection connection = preLoginEvent.getConnection();
- if (!rateLimiter.tryAcquire()) {
- plugin.getLog().warn("Simple Anti-Bot join limit - Ignoring {}", connection);
- return;
- }
-
String username = preLoginEvent.getUsername();
- plugin.getLog().info("Incoming login request for {} from {}", username, connection.getRemoteAddress());
-
- Runnable asyncPremiumCheck = new AsyncPremiumCheck(plugin, connection, username, continuation, preLoginEvent);
- plugin.getScheduler().runAsync(asyncPremiumCheck);
+ InetSocketAddress address = connection.getRemoteAddress();
+ plugin.getLog().info("Incoming login request for {} from {}", username, address);
+
+ Action action = antiBotService.onIncomingConnection(address, username);
+ switch (action) {
+ case Ignore:
+ // just ignore
+ return;
+ case Block:
+ String message = plugin.getCore().getMessage("kick-antibot");
+ TextComponent messageParsed = LegacyComponentSerializer.legacyAmpersand().deserialize(message);
+
+ PreLoginComponentResult reason = PreLoginComponentResult.denied(messageParsed);
+ preLoginEvent.setResult(reason);
+ break;
+ case Continue:
+ default:
+ Runnable asyncPremiumCheck = new AsyncPremiumCheck(plugin, connection, username, continuation, preLoginEvent);
+ plugin.getScheduler().runAsync(asyncPremiumCheck);
+ break;
+ }
}
@Subscribe
2022-06-18 18:09:31 +02:00
10785b32ac
Fix anti bot reading the correct values
2022-06-18 18:08:40 +02:00
ae8c040d3e
Merge pull request #814 from games647/dependabot/maven/org.geysermc.floodgate-api-2.2.0-SNAPSHOT
...
Bump api from 2.0-SNAPSHOT to 2.2.0-SNAPSHOT
2022-06-18 18:04:15 +02:00
b221a3f294
Merge pull request #822 from games647/dependabot/github_actions/actions/cache-3.0.4
...
Bump actions/cache from 3.0.1 to 3.0.4
2022-06-18 16:35:24 +02:00
fb32f0b386
Bump requried Java version to 17
2022-06-18 16:15:26 +02:00
752cb1c3a7
Bump actions/cache from 3.0.1 to 3.0.4
...
Bumps [actions/cache](https://github.com/actions/cache ) from 3.0.1 to 3.0.4.
- [Release notes](https://github.com/actions/cache/releases )
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md )
- [Commits](https://github.com/actions/cache/compare/v3.0.1...v3.0.4 )
---
updated-dependencies:
- dependency-name: actions/cache
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-06-18 14:10:22 +00:00
f5ead50441
Fix typo in pull request template
2022-06-18 16:09:44 +02:00
b878ec34c8
Fix Java workflow setup
2022-06-18 16:09:44 +02:00
3d72e77345
Fix Java version name
2022-06-18 16:09:44 +02:00
18bd778b7e
General minor code clean up and typo fixes
2022-06-18 16:09:44 +02:00
a9e4c90970
Merge pull request #799 from games647/dependabot/maven/org.mariadb.jdbc-mariadb-java-client-3.0.5
...
Bump mariadb-java-client from 3.0.4 to 3.0.5
2022-06-15 13:15:15 +02:00
c92f94d2e8
Bump api from 2.0-SNAPSHOT to 2.2.0-SNAPSHOT
...
Bumps api from 2.0-SNAPSHOT to 2.2.0-SNAPSHOT.
---
updated-dependencies:
- dependency-name: org.geysermc.floodgate:api
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-06-13 07:03:18 +00:00
0af22d9927
Merge pull request #811 from Enginecrafter77/main
...
Support for transparent proxies / DNAT
2022-06-11 08:40:48 +02:00
5abd864fa5
fix: Typo in config.yml comment about useProxyAgnosticResolver
2022-06-10 11:55:31 +02:00
d7d0caf6e7
style: Re-phrasing of config.yml comment for useProxyAgnosticResolver
...
The comment for useProxyAgnosticResolver in config.yml was re-phrased and supplied with additional information regarding its effective context and its relation to the prevent-proxy setting in server.properties.
2022-06-10 11:40:21 +02:00
edd82f7978
style: ProxyAgnosticMojangResolver: Extracted the URL into a constant
...
The URL of the mojang session server call in ProxyAgnosticMojangResolver was extracted into a constant in order to mitigate the "magic constants" problem.
Additionally, the 204 in the response code check was replaced by a constant from HttpURLConnection, again, in order to not use any magic numbers.
2022-06-10 11:38:22 +02:00
6413ca4d10
fix: Reverted the invalid session log entry modification
...
The initial debug-entry modification regarding the invalid session message was reverted. Now the logging and parameter expansion is done solely by the SLF4J library.
2022-06-10 11:14:10 +02:00
5f494e5a04
feat: Config option to enable ProxyAgnosticMojangResolver
...
A config option was added to allow users to use the ProxyAgnosticMojangResolver if they feel the need to do so. This setting won't affect existing users since it's disabled by default.
2022-06-09 19:24:53 +02:00
5d4483224d
refactor: ProxyAgnosticMojangResolver
...
ProxyAgnosticMojangResolver serves as a cleaner implementation of the hasJoined static method from previous commit. All the reflection involved was removed due to no longer being necessary. This way, a lot cleaner code could be made. All the inner workings remained the same. For more information on how it works, check out ProxyAgnosticMojangResolver.java.
2022-06-09 19:04:49 +02:00
61b86fba52
fix: Initial addressing of #810
...
This commit contains a crude but functional fix for problem described by issue #810 . It works by reimplementing the MojangResolver#hasJoined method using reflection to access the inaccessible fields. The significant difference is that unlike in the CraftAPI implementation, which sends the "ip" parameter when the hostIp parameter is an IPv4 address, but skips it for IPv6, this implementation ommits the "ip" parameter also for IPv4, effectively enabling transparent proxies to work.
WARNING: This commit contains only a proof-of-concept code with crude hacks to make it work with the least amount of code edits. Improvements upon the code will be included in following commits. The code is at the moment really ineffective, and therefore SHOULD NOT BE USED IN PRODUCTION! You have been warned.
2022-06-09 18:41:03 +02:00
6665c0359b
Note latest proxy version
2022-06-08 10:20:15 +02:00
896291be53
Bump BungeeCord required version
...
Fixes #808
2022-06-08 10:08:15 +02:00
5828e1abde
Remove last sodion reference
2022-06-07 18:51:22 +02:00
8d50a14371
Drop SodionAuth plugin, because it's no longer reachable in Maven
2022-06-07 18:26:24 +02:00
0ae18f3ac6
Always log invalid state messages
...
Related #803
Related #806
2022-06-07 18:24:27 +02:00
82d8b4d2be
Fix typo in messages for invalid-request
2022-06-07 18:18:28 +02:00
41890679ed
Bump mariadb-java-client from 3.0.4 to 3.0.5
...
Bumps [mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) from 3.0.4 to 3.0.5.
- [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.0.4...3.0.5 )
---
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 >
2022-05-30 07:03:27 +00:00
fc50c997ba
Dump craftapi for updated GSON version and allow . in legit usernames
2022-05-21 14:02:37 +02:00
b04b8f5806
Merge pull request #790 from games647/dependabot/github_actions/github/codeql-action-2
...
Bump github/codeql-action from 1 to 2
2022-05-20 12:34:03 +02:00
16f8a49b4c
Inform users about the delayed session start for proxies
2022-05-20 12:32:58 +02:00
830d6b1e35
Bump github/codeql-action from 1 to 2
...
Bumps [github/codeql-action](https://github.com/github/codeql-action ) from 1 to 2.
- [Release notes](https://github.com/github/codeql-action/releases )
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md )
- [Commits](https://github.com/github/codeql-action/compare/v1...v2 )
---
updated-dependencies:
- dependency-name: github/codeql-action
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-05-01 07:04:13 +00:00
a32791687c
Merge pull request #774 from games647/dependabot/github_actions/actions/checkout-3
...
Bump actions/checkout from 2 to 3
2022-04-01 13:21:52 +02:00
5d63d304e6
Merge pull request #775 from games647/dependabot/github_actions/actions/cache-3.0.1
...
Bump actions/cache from 2.1.4 to 3.0.1
2022-04-01 13:21:29 +02:00
f25d8b3a99
Bump actions/cache from 2.1.4 to 3.0.1
...
Bumps [actions/cache](https://github.com/actions/cache ) from 2.1.4 to 3.0.1.
- [Release notes](https://github.com/actions/cache/releases )
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md )
- [Commits](https://github.com/actions/cache/compare/v2.1.4...v3.0.1 )
---
updated-dependencies:
- dependency-name: actions/cache
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-04-01 07:02:15 +00:00
cac96408a0
Bump actions/checkout from 2 to 3
...
Bumps [actions/checkout](https://github.com/actions/checkout ) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases )
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md )
- [Commits](https://github.com/actions/checkout/compare/v2...v3 )
---
updated-dependencies:
- dependency-name: actions/checkout
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-04-01 07:02:13 +00:00
0bdcc935ad
Merge pull request #771 from games647/dependabot/maven/org.apache.maven.plugins-maven-shade-plugin-3.3.0
...
Bump maven-shade-plugin from 3.2.4 to 3.3.0
2022-03-30 17:34:12 +02:00
07dea4ac0f
Bump maven-shade-plugin from 3.2.4 to 3.3.0
...
Bumps [maven-shade-plugin](https://github.com/apache/maven-shade-plugin ) from 3.2.4 to 3.3.0.
- [Release notes](https://github.com/apache/maven-shade-plugin/releases )
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.2.4...maven-shade-plugin-3.3.0 )
---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-shade-plugin
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-03-30 14:04:11 +00:00
f4a3fed017
Highlight build definition
2022-03-30 16:02:52 +02:00
0105c29710
Reduce memory consumption of anti bot feature
2022-03-30 16:02:52 +02:00
d11cd4f9a1
Ignore META-Info in shading
2022-03-30 16:02:52 +02:00
6c0baea278
Make questions section more specific
2022-03-30 16:02:52 +02:00
55270702a5
Document event behavior that is platform specific
2022-03-30 16:02:52 +02:00
9d2c346235
Use platform scheduler to reuse threads between plugins
...
The platforms usually use a caching thread executor. It makes to use
this executor to reuse threads as they are expensive to create.
2022-03-30 16:02:51 +02:00
1d3fcb9929
Use custom repository settings for faster fetching
...
Order of repository seems to indicate maven priority fetching
2022-03-30 16:02:51 +02:00
35b044651c
Update dependencies
...
diff --git a/bukkit/pom.xml b/bukkit/pom.xml
index e57b9d2..939697a 100644
--- a/bukkit/pom.xml
+++ b/bukkit/pom.xml
@@ -272,7 +272,7 @@
<dependency>
<groupId>com.lenis0012.bukkit</groupId>
<artifactId>loginsecurity</artifactId>
- <version>3.0.2</version>
+ <version>3.1</version>
<scope>provided</scope>
<optional>true</optional>
<exclusions>
diff --git a/core/pom.xml b/core/pom.xml
index 15a1eb7..3738e9d 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -179,7 +179,7 @@
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
- <version>2.8.9</version>
+ <version>2.9.0</version>
</dependency>
</dependencies>
</project>
2022-03-30 16:02:51 +02:00
666fabd76c
Bump mariadb-java-client from 3.0.3 to 3.0.4
...
Bumps [mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) from 3.0.3 to 3.0.4.
- [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.0.3...3.0.4 )
---
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 >
2022-03-28 13:17:13 +02:00
5d49c497b5
Bump slf4j-jdk14 from 2.0.0-alpha6 to 2.0.0-alpha7 ( #756 )
...
Bumps [slf4j-jdk14](https://github.com/qos-ch/slf4j ) from 2.0.0-alpha6 to 2.0.0-alpha7.
- [Release notes](https://github.com/qos-ch/slf4j/releases )
- [Commits](https://github.com/qos-ch/slf4j/compare/v_2.0.0-alpha6...v_2.0.0-alpha7 )
---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-jdk14
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>
2022-03-28 13:16:30 +02:00
812cf21ad0
Merge pull request #750 from Smart123s/license/autoheader
...
Fix License header
2022-03-14 14:54:17 +01:00
e7a915a6cd
Check license headers before building
...
If a header is missing, then the build should fail. If someone commits
a new file, WITHOUT building it beforehnd, than that header won't be
added. The CI will build the plugin, but changes made by the CI are not
retained in the source tree.
2022-03-13 10:41:33 +01:00
a856356c49
Update license headers to 02db104
...
Done using `mvn license:format`
2022-03-13 10:08:57 +01:00
e9ea930be7
Update copyright year in LICENSE
2022-03-13 10:06:17 +01:00
59eb9ced8b
Merge pull request #741 from games647/dependabot/github_actions/actions/setup-java-3
...
Bump actions/setup-java from 2.3.0 to 3
2022-03-01 08:32:54 +01:00
60d414eacb
Bump actions/setup-java from 2.3.0 to 3
...
Bumps [actions/setup-java](https://github.com/actions/setup-java ) from 2.3.0 to 3.
- [Release notes](https://github.com/actions/setup-java/releases )
- [Commits](https://github.com/actions/setup-java/compare/v2.3.0...v3 )
---
updated-dependencies:
- dependency-name: actions/setup-java
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-03-01 07:02:58 +00:00
ae93b3215a
Merge pull request #737 from Smart123s/fix/736
...
Fix 'no-conflict' option of 'autoLoginFloodgate' in config
2022-02-26 17:37:37 +01:00
7e9bd1639b
Move similar config checks to a common function
...
'autoRegisterFloodgate' and 'autoLoginFloodgate' have the same possible
options, and they are checked against the player in the exact same way.
For example, if either one of them is set to isLinked, linked status is
checked in the same way, regardless of wether it's checked for login or
for registering.
2022-02-25 18:14:25 +01:00
817eedd4ac
Move autoLoginFloodgate check to a common function
...
Reduces duplicate code.
Added missing check for "no-conflict".
2022-02-25 18:13:44 +01:00
033fdd55ae
[ci-skip] Update proxy setup guide
2022-02-15 12:01:13 +01:00
d581b34005
Use mariadb protocol if using its connector
...
MariaDB enforces this to ensure the selection of the correct driver.
Fixes #724
2022-02-09 12:57:14 +01:00
3665e15920
Add velocity driver hint
...
Related #723
2022-02-09 12:57:14 +01:00
6f16700cdf
Merge pull request #717 from games647/dependabot/maven/org.mariadb.jdbc-mariadb-java-client-3.0.3
...
Bump mariadb-java-client from 2.7.5 to 3.0.3
2022-02-07 18:07:34 +01:00
8e6221d846
Fix delayed force login for Floodgate players
...
Login checks are done by bungee, so Bukkit doesn't have to do anything.
The session is set for them by the plugin messages, however, force login
may be delayed. In that case, the player should be logged in at
the onPlayerJoin event.
However, FloodgateAuthTask was run at onPlayerJoin, even if the player
allready had a valid login session. And FloodgateAuthTask always deffers
force login if bungee is present.
As a result, the Floodgate player will never get logged in, if the force
login was delayed by the plugin message.
Co-authored-by: BOT-Neil <neilbooth125@gmail.com >
2022-02-07 17:30:51 +01:00
7a049b98a6
Update distribution
2022-02-07 17:18:10 +01:00
8de1546e7b
Update craftapi to fix broken prevent-proxy api
...
Related #718
2022-02-04 16:37:13 +01:00
7cce0f6e4a
Bump mariadb-java-client from 2.7.5 to 3.0.3
...
Bumps [mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) from 2.7.5 to 3.0.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/2.7.5...3.0.3 )
---
updated-dependencies:
- dependency-name: org.mariadb.jdbc:mariadb-java-client
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2022-01-31 07:02:36 +00:00
999738ef3e
Merge pull request #715 from Smart123s/fix/bukkit/noplibload
...
Fix plugin start without ProtocolLib installed
2022-01-29 11:55:55 +01:00
7951c4c893
Fix plugin startup without ProtocolLib installed
...
Referencing `ProtocolLibrary` in FastLoginBukkit (even in an unreachable
code block) causes Bukkit servers to throw a NoClassDefFoundError on
startup.
Fix based on commit 0082cc6536
2022-01-29 10:48:27 +01:00
9b04ea5c89
Merge pull request #707 from games647/dependabot/maven/org.mariadb.jdbc-mariadb-java-client-2.7.5
...
Bump mariadb-java-client from 2.7.4 to 2.7.5
2022-01-25 20:27:13 +01:00
ac66cefd33
Bump mariadb-java-client from 2.7.4 to 2.7.5
...
Bumps [mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) from 2.7.4 to 2.7.5.
- [Release notes](https://github.com/mariadb-corporation/mariadb-connector-j/releases )
- [Changelog](https://github.com/mariadb-corporation/mariadb-connector-j/blob/2.7.5/CHANGELOG.md )
- [Commits](https://github.com/mariadb-corporation/mariadb-connector-j/compare/2.7.4...2.7.5 )
---
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 >
2022-01-20 10:51:24 +00:00
8a01ddc231
Do not shade the MultiMap class
...
This class is used by ProtocolLib. Calling it, means we use its signature. With relocating this would also update the method
call signature to `.WrappedGameProfile.getProperties()Lfastlogin/guava/collect/Multimap;`, which obviously not present.
2022-01-20 11:50:32 +01:00
3bcc6c2e94
Differentiate between rate limit and IOExceptions
...
(Related #698 )
2022-01-14 14:22:11 +01:00
b351338e0b
Allow disabling anti bot completely
2022-01-14 14:13:43 +01:00
36c9ae2465
Fix rate limiter
...
Time reported by nanoTime is arbitrarily and could include negative numbers
2022-01-14 14:03:14 +01:00
e0f823cbe4
Fix rate limiter blocking the first requests
...
If the server just started, expireTime can become negative. Therefore, the first uninitialized values will not be made available.
2022-01-14 13:20:44 +01:00
17234a791b
Update logging dependency
2022-01-14 12:56:22 +01:00
0e935e3ad0
Fail safe if command is not specified in plugin.yml
2022-01-14 12:53:51 +01:00
52d778afb1
Clean up
2022-01-14 12:52:46 +01:00
e6eb4939b4
Document generics
2022-01-14 12:50:53 +01:00
36337f7feb
Fix potential thread-safety issues in storing the profile
2022-01-14 12:50:07 +01:00
aa51e98fe2
Declare nullable variants using jetbrains annotations
2022-01-14 12:16:30 +01:00
a5c7e7371d
Try out to minimize unnecessary classes from big dependencies
2022-01-14 12:14:22 +01:00
35b493a708
Typo fixes
2022-01-14 12:12:47 +01:00
b02a1a54d9
Add velocity platform to support tickets
2022-01-14 12:02:19 +01:00
253da03f9c
Add missing descriptions
2022-01-14 12:01:25 +01:00
4a5516c9f9
Merge pull request #566 from Smart123s/fg-plib-fix
...
Workaround for Floodgate prefixes with ProtocolLlib
2021-12-23 12:28:15 +01:00
3ca8ae694d
Merge pull request #682 from games647/dependabot/maven/me.clip-placeholderapi-2.11.0
...
Bump placeholderapi from 2.10.10 to 2.11.0
2021-12-21 19:19:47 +01:00
1d7c2aed61
Bump placeholderapi from 2.10.10 to 2.11.0
...
Bumps placeholderapi from 2.10.10 to 2.11.0.
---
updated-dependencies:
- dependency-name: me.clip:placeholderapi
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2021-12-20 07:01:45 +00:00
03850ae4f2
Only add Floodgate prefixes if they are needed
...
Without this patch, Java players would also get a prefix.
2021-12-09 19:40:46 +01:00
b92911bf26
Made floodgatePrefixWorkaround configurable
2021-12-09 18:03:29 +01:00
8859ebb454
Manually append Floodgate Prefixes
...
This can be used as a workaround for #493
This will leave
821be02bdb/spigot/src/main/java/org/geysermc/floodgate/addon/data/SpigotDataHandler.java
in a limbo state, but it shouldn't have a noticable impact on neither
performance nor stability.
This commit will try append prefixes to every player, even if it's not
needed of if Floodgate isn't installed.
2021-12-09 18:01:58 +01:00
06a8d6c625
Merge pull request #674 from Smart123s/fix/geyser/mc-1.18
...
Update to Geyser 2.0 API (fix 1.18)
2021-12-07 19:24:24 +01:00
8c33813e45
Update to Geyser 2.0 API
2021-12-06 19:22:54 +01:00
95251b611a
Initialize logger factory by doing a first call to it
...
Related #670
2021-12-03 10:22:33 +01:00
6c47abc76d
Update dependencies
2021-12-03 09:46:26 +01:00
9c2068032f
Remove duplicate dependency
2021-12-03 09:46:26 +01:00
2110e93bd6
Override slf4j transitive dependency from paper
...
Fixes #670
2021-12-03 09:46:25 +01:00
7439a95e16
Reduce the amount of necessary dependencies by dropping transitive ones
2021-12-02 14:40:29 +01:00
e1c1da199e
Search SL4J JDK provider in our own classpath
...
Using the previous behavior it would look for the service file and provider
in the server jar. First it requires relocating the service file to our JDK
provider and let the service only be queryable from our plugin jar.
Fixes #668
Search SL4J JDK provider in our own classpath
Using the previous behavior it would look for the service file and provider
in the server jar. First it requires relocating the service file to our JDK
provider and let the service only be queryable from our plugin jar.
Fixes #668
2021-12-02 14:40:26 +01:00
829ba79400
Merge pull request #659 from AlbeMiglio/main
...
Added latest Guava and SLF4J compatibility
2021-12-01 16:34:14 +01:00
1dd27ff529
Restore 1.8 compatibility by shading guava in Spigot versions
2021-12-01 16:29:37 +01:00
2cdfdcb5c5
Added latest Guava and SLF4J compatibility
...
(1.18+ breaks support to older guava methods)
2021-12-01 01:12:38 +01:00
15fee92937
Detect enabled Velocity support in server
2021-11-29 13:12:19 +01:00
cb29c5e226
Merge pull request #655 from games647/dependabot/maven/com.velocitypowered-velocity-api-3.1.0
...
Bump velocity-api from 3.0.1 to 3.1.0
2021-11-28 14:04:50 +01:00
d8cd39a974
Merge pull request #654 from games647/dependabot/maven/io.papermc-paperlib-1.0.7
...
Bump paperlib from 1.0.6 to 1.0.7
2021-11-28 14:04:44 +01:00
9a2bc14b72
Bump velocity-api from 3.0.1 to 3.1.0
...
Bumps velocity-api from 3.0.1 to 3.1.0.
---
updated-dependencies:
- dependency-name: com.velocitypowered:velocity-api
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com >
2021-11-28 12:48:34 +00:00
f5a60ca0b3
Bump paperlib from 1.0.6 to 1.0.7
...
Bumps [paperlib](https://github.com/PaperMC/PaperLib ) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/PaperMC/PaperLib/releases )
- [Changelog](https://github.com/PaperMC/PaperLib/blob/master/CHANGELOG.md )
- [Commits](https://github.com/PaperMC/PaperLib/compare/1.0.6...v1.0.7 )
---
updated-dependencies:
- dependency-name: io.papermc:paperlib
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2021-11-28 12:46:15 +00:00
10a7b01bc7
Merge branch 'Smart123s-feature/geyser/allowOfflineNameConflict'
2021-11-28 13:45:33 +01:00
909f263189
Update GH Actions to build with Java 16
2021-11-28 13:45:25 +01:00
2f61a8f8ad
Add packet level checks for Geyser
...
If AuthType == ONLINE, players will be treated as if they were Java
players
If AuthType == OFFLINE, name conflicts will be checked the same way it's
done with Floodgate
Updated config.yml to infrom about the changes.
2021-11-28 13:45:23 +01:00
d0a7832929
Remove unused Floodgate 1.0 dependency
2021-11-28 13:44:57 +01:00
2ac638f3f9
Merge bedrock packet checks into a single function
...
Floodgate and Geyser specific checks can now be modified without
changing JoinManagement.
Added the ability to resume Java specific checks for Bedrock players.
This will be neccessary for Geyser `auth-type=online` players
2021-11-28 13:44:57 +01:00
af0bc34255
Use local Floodgate instance
...
Shortens code and fixes an unused warning
2021-11-28 13:44:57 +01:00
fcd2aa95f0
Use BedrockService in JoinManagement
...
Since the code only needs to interact with Geyser, if Floodgate is not
installed, and perform similar things with both, it's reasonable, to
merge their code.
This commit breaks premium checking with `auth-type=online` in Geyser
2021-11-28 13:44:57 +01:00
f76c7bd62f
Create generalized BedrockService class
2021-11-28 13:44:57 +01:00
f570474fa3
Detect Geyser connections at packet level
...
It is possible to use Geyser without Floodgate by configuring Geyser to
use auth-type= 'online' or 'offline'. In that scenario, floodgateService
will be either unavailable or empty.
2021-11-28 13:44:57 +01:00
3ee6cb2ada
Create stub GeyserService
...
The FloodgateService and GeyserService classes are not merged,
because Geyser can work without Floodgate.
Added Geyser as 'softdepends' in plugin.yml and bungee.yml
to make it load before FastLogin.
Also made Floodgate a soft dependency in bungee.yml.
2021-11-28 13:44:56 +01:00
5612ca744b
Fix relocating mariadb driver in Velocity
...
Fixes #643
2021-11-04 10:29:57 +01:00
d2c94af4a7
Merge pull request #636 from Smart123s/fix/floodgate/pluginmessage
...
Fix "No Session" in plugin messaging
2021-10-24 20:23:53 +02:00
4c514c269b
Fix "No Session" in plugin messaging
...
After Bungee recieved a plugin message from Bukkit, that it has
completed login/register for a Floodgate player, bungee would throw a
NullPointerException: Cannot invoke "BungeeLoginSession.getProfile()"
because "loginSession" is null
2021-10-24 18:24:50 +02:00
40b4eae756
Merge pull request #635 from Smart123s/fix/floodgate/prefix-detect
...
Fix Floodgate player detection (caused by prefixes)
2021-10-23 17:38:14 +02:00
9978fe69d5
Fix Floodgate detection for buggy ProtocolLib
2021-10-23 15:56:16 +02:00
94299d2547
Prefixed names for packet level Floodgate checks
2021-10-23 13:24:40 +02:00
ef6f0fc436
Fix detecting floodgate on plugin name
...
Floodgate's name is lowercase
Related #630
2021-10-11 16:09:24 +02:00
1f83a656cc
Merge pull request #629 from Krakenied/main
...
Fix #627 - skip Floodgate config validation if there's no Floodgate installed
2021-10-10 13:38:29 +02:00
d7e0a4469f
Fix #627 - skip Floodgate config validation if there's no Floodgate installed
...
Fix BungeeManager NPE
2021-10-09 19:52:26 +02:00
28480a0f01
Add floodgate service to Bungee
2021-10-05 15:42:40 +02:00
a3bf875976
Encapsulate floodgate hooks
...
Related #619
Related #620
2021-10-05 15:35:43 +02:00
11c91e6428
Merge pull request #622 from BOT-Neil/main
...
Update JoinManagement.java Dont Check empty for empty prefix
2021-10-05 14:39:36 +02:00
8490ff628c
Update JoinManagement.java
2021-10-01 17:15:05 +02:00
0d7b8e237d
Update JoinManagement.java
...
dont check for empty prefixes
2021-10-01 13:29:02 +02:00
8b4d4586a7
Fix compiling
2021-09-23 14:56:30 +02:00
cd55441e4e
Allow configuring SSL requirements for MySQL instances
...
Fixes #433
2021-09-23 14:55:23 +02:00
17ecb186a5
Require full verification if SSL is enabled in MySQL
2021-09-23 14:43:24 +02:00
aaff7710e0
Merge pull request #612 from juanmuscaria/main
...
Velocity support
2021-09-22 12:47:21 +02:00
37ac04c8ed
Reformat
2021-09-22 12:13:33 +02:00
c2ec8c93b0
Use the MariaDB driver for a smaller footprint
2021-09-22 12:03:44 +02:00
665881d19a
Exclude gson already present in velocity
2021-09-22 12:01:08 +02:00
5192b98d78
Use java runner for cache
2021-09-22 11:48:59 +02:00
709edc6c0a
Added comment to the config to notify about the different driver name
2021-09-17 10:04:05 -03:00
c458bd383a
Only remove the texture property from the player profile if forwardSkin is disabled
2021-09-17 10:00:45 -03:00
64fbbf759f
Actually handle proxy shutdown this time
2021-09-17 09:45:09 -03:00
20379d13b2
Commented why org.slf4j is excluded from the final jar
2021-09-17 09:40:12 -03:00
310ef4068c
Make PROXY_ID_fILE
static
2021-09-17 09:37:50 -03:00
bc4d9857b4
Ops, printing exception directly
2021-09-17 09:36:51 -03:00
d0491d44ec
Remove left over assertion
2021-09-17 09:35:07 -03:00
7ade127888
Relocate the MySql Driver
2021-09-16 13:42:36 -03:00
68a783bd40
Use path directly for loading the proxy uuid
2021-09-16 13:25:35 -03:00
352702eae4
Some code formatting and cleanup
2021-09-15 20:08:03 -03:00
b6dfa4802a
Removed old FIXME and added a new TODO
2021-09-15 19:58:29 -03:00
fc226e1010
Moved LoginEvent logic to GameProfileRequestEvent. Allow overwriting online mode uuid and support for forwardSkin. Added one second delay for login command.
2021-09-15 19:58:29 -03:00
4befb35af9
Added a way to generate or use a predefined proxy uuid.
2021-09-15 19:58:29 -03:00
01632ec125
Cleanup unused imports
2021-09-15 15:44:51 -03:00
268c70bc51
Use org.slf4j.Logger directly
2021-09-15 13:54:28 -03:00
ec7c421f83
[Security] Check if cracked user have the Floodgate prefix ( #614 )
2021-09-15 16:50:55 +02:00
f82c85d3eb
Ops, seems like velocity repo already mirrors the latest driver.
2021-09-14 12:29:49 -03:00
6e318ba9bb
Use logger for exceptions
2021-09-14 12:26:52 -03:00
89d03bcc6b
I missed that there was an alternative for bungee in the documentation
2021-09-14 12:22:22 -03:00
502b16a0e7
Fill all plugin metadata properly.
2021-09-14 12:12:04 -03:00
de0655cba2
Changed the database driver to mysql
2021-09-14 11:59:22 -03:00
0e7d8a595d
Added missing license header for some classes.
2021-09-14 11:36:26 -03:00
7178ea4587
Seems like this is generated automatically.
2021-09-13 21:29:56 -03:00
e639e29dee
Partial velocity support.
2021-09-13 21:24:46 -03:00
d8021931b6
Merge pull request #606 from Smart123s/fg-nostorage-fix
...
Don't crash if no storage is loaded
2021-08-29 20:48:47 +02:00
47ee2cf458
[ci skip] Merge pull request #609 from cmod31/patch-1
...
BungeeCord/Waterfall section
2021-08-29 10:56:32 +02:00
d564d74443
BungeeCord/Waterfall section
...
Added some detail.
issue #607
2021-08-29 10:47:05 +02:00
586b357be8
Don't crash if no storage is loaded
...
If the pluign is running on Bukkit, and it's connected to Bungee
then core.getStorage() will be null.
If that's the case, players will be logged in via a plugin messages.
2021-08-26 13:40:41 +02:00
172efafc2b
Merge pull request #602 from Smart123s/fg-bungee-handshake
...
Fix plugin messages for Floodgate players
2021-08-23 17:17:56 +02:00
056b8a7af7
Recieve success message for Floodgate
...
Floodgate players are offline players, so a special check needs to be
done to save Floodgate players as if they were online players.
2021-08-22 13:33:20 +02:00
198e8f9ea2
Fix Floodgate without auth plugin
...
If no auth plugin is installed, rely on StoredProfile
This fixes #594
2021-08-22 13:33:16 +02:00
f39c3a1ea6
Update Floodgate repository
2021-08-20 11:49:54 +02:00
7dd0aa5bca
Limit parallelism to one thread for SQLite
...
Fixes #596
2021-08-14 17:54:57 +02:00
f8fe3d7d71
Do not silence exceptions for Floodgate
2021-08-12 20:39:14 +02:00
4d4ecf3da7
Merge pull request #583 from games647/dependabot/maven/org.slf4j-slf4j-jdk14-1.7.32
...
Bump slf4j-jdk14 from 1.7.31 to 1.7.32
2021-07-26 10:06:59 +02:00
f80059987b
Bump slf4j-jdk14 from 1.7.31 to 1.7.32
...
Bumps [slf4j-jdk14](https://github.com/qos-ch/slf4j ) from 1.7.31 to 1.7.32.
- [Release notes](https://github.com/qos-ch/slf4j/releases )
- [Commits](https://github.com/qos-ch/slf4j/commits )
---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-jdk14
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2021-07-26 07:02:17 +00:00
6e0272d92c
Fix receiving login packet twice with ProtocolLib
...
Fixes #578
Commit that introduces the bug:
1f4757669c
2021-07-16 14:24:17 +02:00
758ccb9bf2
Clean up
2021-07-14 16:33:31 +02:00
0515ac193d
Extract protocollib method detection
2021-07-14 16:33:18 +02:00
864e551a88
Disable verbose verification output
...
NameChange fix is resolved
2021-07-14 16:32:32 +02:00
0a24d36ef8
[ci skip] Rephrase development build section
...
Fixes #576
2021-07-12 17:25:52 +02:00
8a535e1ad9
[ci skip] Merge pull request #574 from MAX-XiaoKui/patch-1
...
Update plugin SodionAuth's link. Its URL has changed.
2021-07-10 17:18:08 +02:00
ae66f1ab35
Update plugin SodionAuth's link
2021-07-10 22:04:54 +08:00
ed725d991e
[ci skip] Show user clickable links
2021-07-06 11:25:52 +02:00
e45d4b3482
[ci skip] Require what happened form
2021-07-06 11:20:36 +02:00
b5b5faaefb
[ci skip] Add feedback message to forms
2021-06-30 17:23:54 +02:00
51a28ae93f
[CI-SKIP] Fix issue template syntax
2021-06-30 17:04:16 +02:00
d2fcdade0b
[CI-SKIP] Try out issue forms
2021-06-30 17:02:19 +02:00
cde045d6fd
Only build for main branches to fix duplicate actions with dependabot
2021-06-29 12:55:37 +02:00
ccdc455ce9
Clarify naming and structure
2021-06-22 14:07:47 +02:00
4e1f5e9401
Add icons to issue templates
2021-06-22 13:25:57 +02:00
2e64b52261
Migrate questions to discussions
2021-06-22 13:25:41 +02:00
1f4757669c
Allow packet modifications by other plugins
...
If we disable filters, other plugins are advised to only monitor
packets. Potential modifications can be allowed by enabling the filtering again, but adding our meta data to prevent duplicate
processing.
2021-06-22 11:15:21 +02:00
496817afca
Increase the rate limit for bigger servers
...
Related #406
2021-06-21 18:00:45 +02:00
daf6f06a00
Name anti-bot feature explicitly for own rate limiting
2021-06-21 17:33:38 +02:00
4be0e1333d
[CI-SKIP] Add issue template descriptions
2021-06-21 17:08:20 +02:00
58cee1e26e
Exclude more transitive dependencies
...
This could reduce the number of required
downloads as well as to prevent download
from legacy HTTP non secure (not HTTPS)
sources.
2021-06-21 17:08:20 +02:00
9f89756820
Disable plugin if dependencies not available
...
Related #554
2021-06-21 17:08:20 +02:00
d1daec436c
Merge pull request #559 from Smart123s/fg2-ln-autoreg
...
Add 'linked' option to 'autoRegisterFloodgate'
2021-06-21 16:31:25 +02:00
2626c21bc8
Add 'linked' option to 'autoRegisterFloodgate'
...
This makes sense with Floodgate 2.0's Global Link API
2021-06-21 15:15:18 +02:00
5607a19312
Merge pull request #560 from Smart123s/fg-player-to-account
...
Update messages
2021-06-21 14:30:46 +02:00
1f950397a4
Merge pull request #561 from games647/dependabot/maven/org.slf4j-slf4j-jdk14-1.7.31
...
Bump slf4j-jdk14 from 1.7.30 to 1.7.31
2021-06-21 12:07:45 +02:00
08e26dd60f
Bump slf4j-jdk14 from 1.7.30 to 1.7.31
...
Bumps [slf4j-jdk14](https://github.com/qos-ch/slf4j ) from 1.7.30 to 1.7.31.
- [Release notes](https://github.com/qos-ch/slf4j/releases )
- [Commits](https://github.com/qos-ch/slf4j/commits )
---
updated-dependencies:
- dependency-name: org.slf4j:slf4j-jdk14
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2021-06-21 07:03:13 +00:00
2ffe7e0daf
Replace word 'Player' with 'Account' in messages.
...
Technically speaking, one player can own both the Java and the Bedrock
account with the same name, so it's more appropriate to say account
instead of player.
2021-06-20 17:44:46 +02:00
33261b9ea6
Floodgate 2.0 is no longer in a seperate branch
2021-06-20 17:37:18 +02:00
5442f773ae
Merge pull request #558 from Smart123s/fg-sharedtask
...
Add Floodgate config options for BungeeCord
2021-06-20 14:03:45 +02:00
fd3da28bec
Use Override for non core code in FloodgateAuthTas
2021-06-20 13:35:31 +02:00
9350f52916
Create a seperate function for isNameCheckRequired
2021-06-20 13:23:51 +02:00
7c2bb9c9a4
Don't spam log when with unregistered floodgate
2021-06-20 13:05:04 +02:00
0b307a95a3
Add further documentation to config.yml
...
Floodgate options are no longer Bukkit only
autoRegister/LoginFloodgate needs normal (Java) autoRegister/Login
to be set to ture
2021-06-20 11:26:15 +02:00
ed627ce438
Add autoLogin and register for Floodgate Bungee
2021-06-20 11:26:14 +02:00
af83604c94
Remove existing Floodgate integration from Bungee
2021-06-20 11:26:13 +02:00
8f43cc0978
Partially move FloodgateAuthTask to Core
...
The moved code can be used in a BungeeCord implementation
2021-06-20 11:26:13 +02:00
578028719f
Merge pull request #556 from Smart123s/patch-5
...
FloodgateNameConflict no longer needs autoLogin
2021-06-19 10:43:09 +02:00
b87b59be12
FloodgateNameConflict no longer needs autoLogin
...
The removed line is not valid after 1f3cd5fa5b
2021-06-18 23:25:46 +02:00
f17f9d983a
Merge pull request #551 from games647/codeql
...
CodeQL Test
2021-06-17 14:52:09 +02:00
6cbd64b06d
Cache autobuild process
2021-06-17 14:23:18 +02:00
8d588ff7db
Document codeql workflow file
2021-06-17 14:23:17 +02:00
92e05c460f
Create CodeQL scanning workflow
2021-06-17 14:23:17 +02:00
b9011b6141
Add support for 1.17
...
Fixes #552
2021-06-15 20:46:25 +02:00
7fdbedb8c1
Merge pull request #533 from Smart123s/fg-bk-nonconfict
...
Add 'no-conflict' option to some Floodgate config entries
2021-06-15 11:30:06 +02:00
baede33abc
Make Bedrock check nullsafe
...
If the UUID was not set by FloodGate or any other plugin, it's null
by in BungeeCord
Fixes #548
2021-06-15 10:31:53 +02:00
2e83eaaa81
Remove unused import
2021-06-14 19:42:56 +02:00
fb8780d006
Prevent duplicate name check API call
...
Previously: If allowFloodgateNameConflict = false or linked and either autoLoginFloodgate or
autoRegisterFloodgate is set to no-conflict and a player with a non-conflicting name
connects then there will be a double check.
2021-06-14 19:16:40 +02:00
4c0797d5ea
No longer treat linked Floodgate players as conflicting names
...
Since linked players inherit the name of the Java player, it'll always conflict a Java player 's name
2021-06-14 19:16:04 +02:00
235d7f8d80
Add 'no-conflict' as an option to config.yml value checking
2021-06-14 19:16:04 +02:00
dbf10f4767
Remove unnecessary whitespaces
2021-06-14 19:16:02 +02:00
fed1e91b28
Document 'no-conflict' in config.yml
2021-06-14 19:09:54 +02:00
dc8dd13d5b
Expand possible values in config.yml
2021-06-14 19:09:54 +02:00
165e5fe856
Add 'no-conflict' option to some Floodgate config entries
2021-06-14 19:09:43 +02:00
01c9b55d80
Merge pull request #545 from games647/dependabot/github_actions/actions/setup-java-2.1.0
...
Bump actions/setup-java from 1.4.3 to 2.1.0
2021-06-14 10:37:40 +02:00
4cf660559e
Merge pull request #532 from Smart123s/fg-bk-ncshare
...
Share Floodgate name conflict check between Protocol Plugins
2021-06-14 10:37:11 +02:00
11c38bdb15
Set required distribution name
2021-06-14 10:35:10 +02:00
0d9e30be8d
Bump actions/setup-java from 1.4.3 to 2.1.0
...
Bumps [actions/setup-java](https://github.com/actions/setup-java ) from 1.4.3 to 2.1.0.
- [Release notes](https://github.com/actions/setup-java/releases )
- [Commits](https://github.com/actions/setup-java/compare/v1.4.3...v2.1.0 )
---
updated-dependencies:
- dependency-name: actions/setup-java
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2021-06-13 18:08:09 +00:00
edb4179ba6
Ignore provided guava dependency
2021-06-13 20:06:44 +02:00
e0ddfec921
Drop not needed specific time and number limits
2021-06-13 20:06:44 +02:00
b2fef5e6d6
Update GitHub actions with dependabot too
2021-06-13 20:06:44 +02:00
02db1041e2
Be explicit about the license name
2021-06-13 20:06:43 +02:00
04428fe146
Merge pull request #543 from Smart123s/fix-warnings
...
Get rid of several warning messages
2021-06-13 19:42:20 +02:00
9656aadb35
Remove unused imports
2021-06-13 16:50:36 +02:00
c0d21fdca2
Remove 'handlerFound' from ConnectListener
2021-06-13 16:48:01 +02:00
c1cf80fe28
Remove 'initialHandlerClazzFound' from ConnectL...
2021-06-13 16:44:57 +02:00
9acab1e453
Don't store 'floodgateVersion' in ConnectListener
2021-06-13 16:43:38 +02:00
d51335c6de
Don't store 'ultraAuthPlugin'
2021-06-13 16:36:04 +02:00
2fdcc34575
Don't store 'plugin' in BukkitScheduler
2021-06-13 16:33:47 +02:00
66a51a8e13
Remove unused 'serverId' from BukkitLoginSession
2021-06-13 16:31:39 +02:00
411148b560
No longer reference 'Floodgate' in JoinManagement
...
Referencing 'FloodgatePlayer' in JoinManagement.java and it's subclasses
has cause ProtocolLib to fail to register an event when Floodgate was not
installed.
2021-06-13 14:24:14 +02:00
d1109ac75e
Merge pull request #542 from Smart123s/patch-4
...
Add license header to FloodgateAuthTask.java
2021-06-12 20:08:30 +02:00
af0ef2aed9
Stop ProtocolSupport from crying
...
If I ever tried to either cast or use FloodgatePlayer as a return type
when Floodgate was not installed in the server, I got this error:
[19:37:46 ERROR]: [FastLogin] Plugin FastLogin v1.11-SNAPSHOT-744264d has failed to
register events for class
com.github.games647.fastlogin.bukkit.listener.protocolsupport.ProtocolSupportListener
because org/geysermc/floodgate/api/player/FloodgatePlayer does not exist.
ProtocolLib doen't have this problem.
2021-06-12 19:57:32 +02:00
ee2b3a37f8
Move Floodgate name conflict check to Core
2021-06-12 19:57:31 +02:00
0e8ad6e318
Add license header to FloodgateHook.java
2021-06-12 19:56:36 +02:00
bc8fffe063
Add license header to FloodgateAuthTask.java
2021-06-12 19:51:15 +02:00
757d0ef991
Fix & Move allowFloodgateNameConflict=linked
2021-06-05 18:43:23 +02:00
2d5a53a2f9
Kick player if Floodgate name conflict checking fails
...
Rebased on Sat May 22 13:48:29 2021 +0200
Fixed typos in strings
2021-06-05 18:43:23 +02:00
9a6112ebd4
Made ProtocolSupport check for Floodgate name conflicts
...
Rebased on Sat May 22 11:42:34 2021 +0200
Initialize FloodgateHook in constructor
This way, it won't have to be initialized whenever a player joins
2021-06-05 18:42:30 +02:00
1f3cd5fa5b
Share Floodgate name conflict check between Protocol Plugins
...
Added a shared class for Floodgate name conflict checking that can be used by both ProtocolLib and ProtocolSupport
Rebased on Sat May 22 11:42:08 2021 +0200
Added access modifier to "FastLoginBukkit plugin;" in FloodgateHook.java
Rebased on Sat May 22 11:42:08 2021 +0200
Initialize FloogateHook in ProtocolLib's class
2021-06-05 18:40:15 +02:00
e8bb9fd30a
Merge pull request #534 from Smart123s/patch-3
...
Warn in config: linked players conflict their Java name
2021-05-23 13:53:20 +02:00
0d5413d402
Warn in config: linked players conflict their Java name
2021-05-22 21:17:11 +02:00
119b9cb000
Merge pull request #494 from Smart123s/main
...
Floodgate support for Bukkit
2021-05-16 20:50:53 +02:00
d44ab4e634
Warn when unsupported plugins are detected
...
Floodgate 1.0 does not work with the current Bukkit implementation.
ProtocolLib and Floodgate don' play along nicely when used with FastLogin
Related issue: #493
2021-05-16 17:54:50 +02:00
b2b61539e1
Revert "Move Floodgate conflict chechking to core"
...
This reverts commit b0ef1a59ac
.
2021-05-16 17:54:50 +02:00
b9dd921885
Change plugin.yml to softepend on Floodgate 2.0
...
Rebased to remove Bungee related changes
2021-05-16 17:53:22 +02:00
6b20b71403
Merge pull request #530 from Smart123s/patch-2
...
Change dependency Floodgate Bungee to API
2021-05-16 16:08:14 +02:00
40b9405c1d
Change dependency Floodgate Bungee to API
...
Same functionality, less code to be downloaded.
2021-05-15 11:58:43 +02:00
1385f0c730
Merge pull request #528 from Smart123s/patch-1
...
Actually assign the queried version to a variable
2021-05-13 17:21:47 +02:00
a8c1570dd3
Actually assign the queried version to a variable
...
The Floodgate version was queried, but it's return value wasn't actually assigned to a variable.
Edited this from mobile GitHub website. I have no code check here.
2021-05-13 15:12:13 +02:00
3d65a33e0c
Merge pull request #527 from TechnicallyCoded/feature/floodgate-v2.0
...
Implement floodgate api version 2.0
2021-05-13 15:07:21 +02:00
2700b3ee0e
Implement floodgate api version 2.0
2021-05-12 11:49:15 +02:00
5858bfb443
Add Floodgate name conflict check to ProtocolSupport
2021-05-09 11:10:10 +02:00
b0ef1a59ac
Move Floodgate conflict chechking to core
...
The FloodgateApi is the same for Bukkit and Bungee, so the Floodgate
related code could be used in a future Bungee implementation too.
Currently, Bungee will report Floodgate disabled to core, so the
upstream Floodgate implementation will be used there.
If enough code will be moved to core, I might consider enabling these
features to BungeeCord too.
2021-05-09 11:01:36 +02:00
25254b2393
Add vscode to .gitignore
2021-05-09 09:09:52 +02:00
08b864220d
Merge branch 'main' of https://github.com/games647/FastLogin
2021-05-09 09:06:59 +02:00
dbe9ac2903
Merge pull request #525 from Smart123s/fg2-bc
...
Fix Floodgate 2.0 on BungeeCord
2021-05-08 19:18:24 +02:00
1b7b2ff2b5
Add support for Floodgate 2.0
2021-05-08 16:26:58 +02:00
d01c368cdb
Fix identation in bukkit/pom.xml
2021-05-08 14:46:00 +02:00
75750f8417
Apostrophes are no longer necessary in config.yml
2021-05-08 14:20:56 +02:00
85a1abfaac
Describe how UUIDs work for 'allowFloodgateNameConflict' in config.yml
2021-05-08 13:38:38 +02:00
5a263956fe
Fixed Java auto login/register
2021-05-06 11:56:24 +02:00
c1d3f278f7
Merge pull request #520 from games647/dependabot/add-v2-config-file
...
Upgrade to GitHub-native Dependabot
2021-04-30 13:32:08 +02:00
7fe6d0ae2b
Upgrade to GitHub-native Dependabot
2021-04-29 15:33:48 +00:00
d3be664c3d
Merge pull request #517 from games647/dependabot/maven/com.mycila-license-maven-plugin-4.1
2021-04-28 07:49:29 +00:00
1edfc83e65
Merge pull request #518 from games647/dependabot/maven/junit-junit-4.13.2
2021-04-28 07:44:10 +00:00
727a16a9c0
Bump junit from 4.13.1 to 4.13.2
...
Bumps [junit](https://github.com/junit-team/junit4 ) from 4.13.1 to 4.13.2.
- [Release notes](https://github.com/junit-team/junit4/releases )
- [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.13.1.md )
- [Commits](https://github.com/junit-team/junit4/compare/r4.13.1...r4.13.2 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2021-04-27 21:26:42 +00:00
12dccaebe8
Bump license-maven-plugin from 4.0 to 4.1
...
Bumps license-maven-plugin from 4.0 to 4.1.
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2021-04-27 21:26:22 +00:00
0d598ad390
Moved config value checking
...
Previously the value for "autoLoginFloodgate" and "autoRegisterFloodgate" was checked every time a player joined.
Now they are checked at startup.
2021-04-11 11:47:56 +02:00
a078bb8214
Add missing return
2021-04-11 10:13:43 +02:00
7192dcdf07
Merge pull request #504 from InkerBot/main
...
Add SodionAuthBungee support
2021-04-07 10:48:56 +02:00
2c3fd4a575
Return when first auth plugin found
2021-04-07 00:30:11 +08:00
ab1d3ded63
Fix errors
2021-04-07 00:12:58 +08:00
83a6cb4bb4
Add log info and fix errors
2021-04-07 00:11:22 +08:00
fd045e9ed7
Add SodionAuth softDepend
2021-04-06 22:16:27 +08:00
fb98dd8393
Void "Hook" in plugin name
2021-04-06 22:07:26 +08:00
f766e6213e
Use a loop to hook AuthPlugin
2021-04-06 21:58:53 +08:00
68d23e127a
Bump SodionAuth version and fix errors.
2021-04-06 21:28:36 +08:00
8837a1b70e
Bump SodionAuth version and fix errors.
2021-04-06 21:27:25 +08:00
9568556ceb
Merge pull request #503 from games647/dependabot/maven/pl.project13.maven-git-commit-id-plugin-4.0.4
2021-04-06 13:02:28 +00:00
ea894b3a7b
Add SodionAuthBungee hook
2021-04-06 00:31:17 +08:00
0c45c30d2f
Bump SodionAuth version
2021-04-06 00:30:18 +08:00
17e16b68b2
Bump git-commit-id-plugin from 4.0.3 to 4.0.4
...
Bumps git-commit-id-plugin from 4.0.3 to 4.0.4.
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2021-04-05 16:17:24 +00:00
d6a02aa538
Apply license headers to every file
...
(Related #494 )
2021-04-05 11:04:42 +02:00
9e8a9508d7
Re-use FloodgatePlayer in FloodgateAuthTask
2021-03-30 20:03:09 +02:00
600f484963
Added function isValidConfigValue()
2021-03-30 20:00:21 +02:00
94fdc70164
Update config.yml
...
Added Floodgate 2.0 as a requirement
Removed warning about linking accounts with "allowFloodgateNameConflict:
'false'" as it's no longer a problem with Global Linking API enabled
2021-03-29 17:15:45 +02:00
c3c0827cfc
Drop duplicate package goal
2021-03-29 15:19:53 +02:00
870d1ee281
Migrate to Floodgate v2.0
...
This removes support for Floodgate 1.x
2021-03-29 14:49:33 +02:00
e0790965ec
Catch NoSuchMethodError
...
Fixes #499
2021-03-29 11:56:02 +02:00
4bc328c37c
Fail safely if BungeeCord implementation specific classes are not found
2021-03-29 11:56:02 +02:00
357430b5ad
Put configuration values into extra lines to highlight the environment
...
They are not configuration options
Related #488
2021-03-29 11:56:02 +02:00
f7fd94e983
Update config comments
2021-03-22 21:25:27 +01:00
d8b9822c11
Fix "Asynchronous player kick"
2021-03-22 20:46:49 +01:00
e2e4e76fd9
Moved getGeyserPlayer() to the only class it's used in
2021-03-22 20:35:22 +01:00
f9992f1447
Fixed 'allowFloodgateNameConflict' for 'false' value.
2021-03-22 19:57:13 +01:00
5d94e610ff
Create a profile for Bedrock players when registering
2021-03-22 19:51:46 +01:00
9abc99ebc2
Use UUID instead of name when checking for Geyser player
2021-03-22 18:37:12 +01:00
07da8fc76a
autoRegisterFloodgate will no longer try to log in unregistered BE users
...
previously if autoRegisterFloodgate was set to false and the player was
not registered, the plugin tried to auto-login the user, which has led
to misleading "Failed to login" messages
2021-03-22 17:22:51 +01:00
305700497e
Re-added an empty line (deleted by mistake)
2021-03-22 11:43:30 +01:00
8c8ed0b639
Made FloodgateAuth async
2021-03-22 10:16:23 +01:00
ee2ae7f9fd
Use authPlugin.isRegistered() instead of profile.isSaved()
2021-03-21 19:21:49 +01:00
3e9e433736
Move dependencies
2021-03-21 11:07:18 +01:00
c41896e5f2
Use isPluginEnabled() in NameCheckTask.java
2021-03-21 11:02:29 +01:00
78f897a490
Use isPluginEnabled() in ConnectionListener.java
...
Co-authored-by: games647 <games647@users.noreply.github.com >
2021-03-21 10:59:58 +01:00
e1af75191e
Implement autoLoginFloodgate & autoRegisterFloodgate config options
...
Knwon Bug: Profile.isSaved() is 'false' when logging in from Bedrock
after auto registering through Bedrock so FastLogin will try to register
for a second time, insted of logging in
2021-03-20 18:28:32 +01:00
a23f846146
Implement allowFloodgateNameConflict
...
Check config.yml for details.
2021-03-20 17:16:55 +01:00
0206a6c5a4
Added new config options (not yet implemented)
2021-03-20 15:37:37 +01:00
6544e007f6
Code cleanup
2021-03-20 14:41:21 +01:00
0cbf2a4e20
Check if Geyser and Floodgate are installed before accessing them
2021-03-20 13:38:41 +01:00
57e797f1be
Implement auto login for Floodgate players
...
This is buggy in most cases.
2021-03-20 12:22:41 +01:00
e03e67b8fa
Detect if a player is connecting through Floodgate
...
The Floodgate API requires UUID which is inaccessible at the level
FastLogion operates on.
A workaround for this is to check if the currently connecting player is
also a part of the Geyser server's online players list.
*TODO: Check for Java and Bedrock name conflicts with multiple
configurations.*
2021-03-19 08:58:29 +01:00
176781d55a
Merge pull request #474 from games647/dependabot/maven/de.xxschrandxx.bca-BungeeCordAuthenticator-0.0.2
2021-03-17 15:41:41 +00:00
d9f254fbff
Merge pull request #473 from games647/dependabot/maven/com.comphenix.protocol-ProtocolLib-4.6.0
...
Bump ProtocolLib from 4.5.1 to 4.6.0
2021-03-09 20:57:41 +01:00
6b617d993f
Bump BungeeCordAuthenticator from 0.0.2-SNAPSHOT to 0.0.2
...
Bumps BungeeCordAuthenticator from 0.0.2-SNAPSHOT to 0.0.2.
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2021-02-22 16:16:07 +00:00
09ab7288da
Bump ProtocolLib from 4.5.1 to 4.6.0
...
Bumps [ProtocolLib](https://github.com/dmulloy2/ProtocolLib ) from 4.5.1 to 4.6.0.
- [Release notes](https://github.com/dmulloy2/ProtocolLib/releases )
- [Commits](https://github.com/dmulloy2/ProtocolLib/compare/4.5.1...4.6.0 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2021-02-22 16:15:32 +00:00
ff2e5c0435
Drop package goal for the core module
2021-02-18 18:25:37 +01:00
30c233c953
Fix workflow version
2021-02-18 18:21:32 +01:00
6fd81e8e29
Sort supported list alphabetically
2021-02-18 18:17:52 +01:00
4765372b0a
Add BungeeAuthenticator and UserLogin
2021-02-18 18:16:06 +01:00
303c064416
Check for valid file access first
2021-02-14 17:06:44 +01:00
a15de80c7d
Revert "Ignore the correct channel"
...
This reverts commit 465519ee
Namespace key class did the lowercase operation
2021-02-11 10:22:50 +01:00
25356db175
Clean up CI
2021-02-09 16:33:37 +01:00
465519eece
Ignore the correct channel
2021-02-09 16:33:37 +01:00
16f131ee2d
Limit expire timer
2021-02-09 16:33:36 +01:00
43046bea97
Fix branch references
2021-02-09 16:33:36 +01:00
aa734853c6
Implement BungeeCordAuthenticator ( #454 )
...
* Create BungeeCordAuthenticatorHook
* Update bungee.yml
* Update FastLoginBungee.java
* Some small changes
* Test Hook
* Update pom.xml
* Update pom.xml
* Rebuild with new spigotplugins-repo
* Disable checksum for spigotplugins
* Update pom.xml
* Update pom.xml
* Update pom.xml
* Update pom.xml
* Update pom.xml
* Removed spigotplugins-repo
* Update pom.xml
* Update pom.xml
* Update pom.xml
* Update pom.xml
* Update pom.xml
* Update pom.xml
* Update pom.xml
New url
* Update pom.xml
* Update pom.xml
* Update FastLoginBungee.java
* requested changes
* Delete BungeeCordAuthenticator-0.0.2-SNAPSHOT.jar
2021-02-09 14:41:21 +01:00
28fb40d063
Merge pull request #453 from games647/dependabot/maven/com.zaxxer-HikariCP-4.0.1
2021-02-09 12:36:45 +00:00
29c633f68a
Merge pull request #459 from Kamilkime/main
...
Fix name change detection, allow FastLogin to respect AuthMe registration limits
2021-02-09 10:59:33 +01:00
c079653d09
Always return true when registering with AuthMe
2021-02-09 10:42:10 +01:00
7fbfa8240c
Allow FastLogin to respect AuthMe pre IP register limit, fixes #458
2021-02-09 01:28:12 +01:00
1ab346d067
Correct name check on PaperSpigot, fixes #423 , fixes #437 , fixes #457
2021-02-09 00:28:05 +01:00
50a8fd2f79
Bump HikariCP from 3.4.5 to 4.0.1
...
Bumps [HikariCP](https://github.com/brettwooldridge/HikariCP ) from 3.4.5 to 4.0.1.
- [Release notes](https://github.com/brettwooldridge/HikariCP/releases )
- [Changelog](https://github.com/brettwooldridge/HikariCP/blob/dev/CHANGES )
- [Commits](https://github.com/brettwooldridge/HikariCP/compare/HikariCP-3.4.5...HikariCP-4.0.1 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2021-02-01 16:25:09 +00:00
9ff404a424
Update CI workflow
2020-11-10 12:33:31 +01:00
5029701f2a
Merge pull request #418 from Kamilkime/master
...
Update encryption to handle MC 1.16.4, fixes #412
2020-11-09 14:38:31 +01:00
1f63f91f17
Add comments, make cipher variable names clearer
2020-11-09 13:25:16 +01:00
71d84d1748
Make encryption method reflections static
2020-11-08 17:15:26 +01:00
64072d84d8
Update encryption to handle MC 1.16.4, fixes #412
2020-11-08 03:52:39 +01:00
f2441ecc15
Merge pull request #408 from games647/dependabot/maven/junit-junit-4.13.1
2020-11-04 11:18:44 +00:00
fe1499f1fb
Add support for 1.16.4
...
Fixes #412
Fixes #411
2020-11-04 11:05:34 +01:00
e74288e676
Bump junit from 4.13 to 4.13.1
...
Bumps [junit](https://github.com/junit-team/junit4 ) from 4.13 to 4.13.1.
- [Release notes](https://github.com/junit-team/junit4/releases )
- [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.13.1.md )
- [Commits](https://github.com/junit-team/junit4/compare/r4.13...r4.13.1 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2020-10-12 16:20:06 +00:00
d034e71331
Do not move and create a new proxy file
...
Fixes #389
2020-08-06 10:10:00 +02:00
7e43b99f91
[CI-SKIP] Dump placeholderapi to prevent deprecates on register
2020-08-03 21:06:22 +02:00
496a036fb4
Merge pull request #385 from ishlandbukkit/master
...
Add SodionAuthHook
2020-08-02 17:17:58 +02:00
fa1f85698a
Fix NoSuchMethodError for PlaceholderAPI after breaking change
...
Fixes #386
2020-07-31 17:02:51 +02:00
25b6ca7653
Convert proxy file to the new name
2020-07-31 17:02:51 +02:00
b30eb0de29
Debug verified username usage in ProtocolLib
2020-07-31 17:02:51 +02:00
c96d64597a
Clear proxies file name
2020-07-31 17:02:51 +02:00
0ef2000f2a
Rename rate limit to join limit
2020-07-31 17:02:51 +02:00
a36ac7f9e3
Remove unneeded SodionAuth-Libs
2020-07-29 16:11:41 +08:00
2e38550db0
I figured it out FINALLY
2020-07-29 16:07:24 +08:00
4e2b6c7810
Use JitPack and update API reference
2020-07-29 10:58:04 +08:00
4acbcbfd19
Squash previous commits
...
* Add SodionAuth
* Add Comment
* add SodionAuth
Co-authored-by: logos <1102280066@qq.com >
2020-07-29 09:22:17 +08:00
cae2f8f58d
Implement FastLoginPremiumToggleEvent
2020-06-27 13:58:38 +02:00
de1487b6aa
Fix driver warning message not displaying
2020-06-06 18:38:51 +02:00
96cdac1332
Ignore proxied bedrock players ( Fixes #328 )
2020-06-06 18:32:08 +02:00
2601fea84f
Drop no longer needed uuid getter
2020-06-06 16:29:52 +02:00
2bd339b0bf
Use username from Mojang for offline IDs
...
Affected systems: BungeeCord after name change
Effects: Carry on items, permissions, etc. from the old user account without access to the new one
After a name change it could happen that the client still only
knows the old username and will send it to the server. Mojang will provide us with an up-to-date username that we should use instead.
The username is also sent to Mojang, so that they could verify the use. Therefore exploiting this behavior extensively for arbitrary usernames is not possible.
Related #344
2020-05-25 13:41:41 +02:00
286b755ee3
Log player handling
...
Related #354
2020-05-23 21:40:10 +02:00
5c5b7384a4
Better explain anti bot configuration values
2020-05-21 10:25:01 +02:00
7c125dc0b6
Add more debugging messages for delayed proxy logins
...
Related #352
2020-05-21 10:03:56 +02:00
103a8320ec
Log requested premium logins
2020-05-20 19:50:22 +02:00
49df461643
Reduce work threads, because processing is async
2020-05-19 11:47:08 +02:00
3b69904257
Extract login decryption int utilities
2020-05-19 11:46:10 +02:00
b41d56f835
Fix reflection access
2020-05-19 09:57:39 +02:00
b1797c84d9
Prevent duplicate save requests
2020-05-18 16:10:39 +02:00
9941a69c6d
Use invokeExact for better performance
2020-05-18 13:21:07 +02:00
0ee269785a
Set UUIDs using MethodHandles
2020-05-18 12:12:51 +02:00
c74c8f5fee
Throw exception on unexpected UUIDs
2020-05-15 15:14:14 +02:00
0ad3a853b5
Guard against any potential modifications for UUID changes
...
Related #344
2020-05-15 14:49:49 +02:00
42637813e8
Add missing cases from last commit
2020-05-15 14:44:31 +02:00
feee64309e
Warn if FastLogin doesn't login authenticated players
...
Related #351
2020-05-15 14:38:22 +02:00
b9cf8f0498
Log setting the offline UUID on Bungee
...
Related #344
2020-05-15 14:12:18 +02:00
30a763dbc4
Add introduction about closing issues
2020-05-14 15:11:01 +02:00
42790b27f8
Unregister variable on disable
2020-05-14 13:45:23 +02:00
c58eda983a
Fix parsing of placeholder status
...
Fixes #341
2020-05-14 13:41:32 +02:00
477d3df1dd
Favor nano time, because it's monotonic
2020-05-13 22:40:26 +02:00
c1dc69845e
[Experimental] Enable paranoid to hide MySQL details
2020-05-13 21:27:53 +02:00
c3f6881e4b
Add missing default values for the rate limiter
2020-05-13 19:51:05 +02:00
25b380f74a
Add a basic rate limiter for incoming connections
...
Related #347
2020-05-13 19:47:02 +02:00
a5777869c8
Re-order driver specific properties
2020-05-13 19:46:02 +02:00
cf3e8434a2
Prefer more MySQL performance optimizations
2020-05-13 19:46:02 +02:00
5881be9b78
Merge pull request #348 from games647/dependabot/maven/com.zaxxer-HikariCP-3.4.5
2020-05-12 14:22:39 +00:00
58c42f9f7f
Bump HikariCP from 3.4.3 to 3.4.5
...
Bumps [HikariCP](https://github.com/brettwooldridge/HikariCP ) from 3.4.3 to 3.4.5.
- [Release notes](https://github.com/brettwooldridge/HikariCP/releases )
- [Changelog](https://github.com/brettwooldridge/HikariCP/blob/dev/CHANGES )
- [Commits](https://github.com/brettwooldridge/HikariCP/compare/HikariCP-3.4.3...HikariCP-3.4.5 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2020-05-11 16:26:14 +00:00
f40e787b55
Delay force action until PlayerJoinEvent is fired
...
Fixes Paper async chunk loading -> delayed PlayerJoinEvent
(Related #331 )
2020-05-09 18:49:43 +02:00
b6a95bb153
Delay force login command for async logins on Paper from Bungee
...
Related #331
2020-05-07 16:25:10 +02:00
9bae5c3f79
Merge pull request #339 from games647/dependabot/maven/me.clip-placeholderapi-2.10.6
2020-05-05 11:46:47 +00:00
b5ccc1df2e
Bump placeholderapi from 2.10.5 to 2.10.6
...
Bumps placeholderapi from 2.10.5 to 2.10.6.
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2020-05-04 16:26:59 +00:00
d829c71438
Merge pull request #334 from games647/dependabot/maven/com.zaxxer-HikariCP-3.4.3
2020-04-29 10:36:11 +00:00
9cf5431d1a
Merge pull request #335 from games647/dependabot/maven/com.lenis0012.bukkit-loginsecurity-3.0.2
2020-04-28 08:36:50 +00:00
e0a7f207c5
Bump loginsecurity from 3.0.1 to 3.0.2
...
Bumps loginsecurity from 3.0.1 to 3.0.2.
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2020-04-27 16:21:02 +00:00
efb4c34b50
Bump HikariCP from 3.4.2 to 3.4.3
...
Bumps [HikariCP](https://github.com/brettwooldridge/HikariCP ) from 3.4.2 to 3.4.3.
- [Release notes](https://github.com/brettwooldridge/HikariCP/releases )
- [Changelog](https://github.com/brettwooldridge/HikariCP/blob/dev/CHANGES )
- [Commits](https://github.com/brettwooldridge/HikariCP/compare/HikariCP-3.4.2...HikariCP-3.4.3 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2020-04-27 16:20:09 +00:00
68d35c75c2
Bump maven-shade-plugin from 3.2.2 to 3.2.3
...
Bumps [maven-shade-plugin](https://github.com/apache/maven-shade-plugin ) from 3.2.2 to 3.2.3.
- [Release notes](https://github.com/apache/maven-shade-plugin/releases )
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.2.2...maven-shade-plugin-3.2.3 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2020-04-26 11:49:33 +02:00
0d93a2c371
Bump placeholderapi from 2.10.4 to 2.10.5
...
Bumps placeholderapi from 2.10.4 to 2.10.5.
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2020-04-26 11:49:33 +02:00
6091a228ab
Don't rely on toString to build unique session keys
...
Fix IPv6 compatibility which contains brackets
Related #331
2020-04-25 17:05:08 +02:00
6f99b6e9b4
Add explicit Junit dependency
2020-03-20 16:13:45 +01:00
109e19e6da
Add missing synchronized modifiers
2020-03-20 16:13:45 +01:00
65469ed579
Make scheduler platform dependent
2020-03-20 13:44:58 +01:00
8ecb5657d3
Drop nullable annotation usage to compile
...
Thanks CI
2020-03-14 19:06:05 +01:00
b0cf6e39c7
Drop forced dependency
2020-03-14 19:01:09 +01:00
88a526b5bf
Drop support for Minecraft 1.7
2020-03-14 18:51:27 +01:00
57b84509da
Limit the total number of running threads
...
(Related #304 )
2020-03-14 18:20:34 +01:00
e0bc7d914c
Load the after auth plugins
...
Fixes #306
There seems to be some capability problems
that it doesn't correctly load ProtocolLib before
this plugin. Furthermore if we use
events for our hooks they print out a warning.
2020-03-10 09:59:31 +01:00
f1933f735a
Merge pull request #305 from games647/dependabot/maven/pl.project13.maven-git-commit-id-plugin-4.0.0
...
Bump git-commit-id-plugin from 3.0.0 to 4.0.0
2020-03-09 19:18:30 +01:00
f69154418e
Bump git-commit-id-plugin from 3.0.0 to 4.0.0
...
Bumps [git-commit-id-plugin](https://github.com/git-commit-id/maven-git-commit-id-plugin ) from 3.0.0 to 4.0.0.
- [Release notes](https://github.com/git-commit-id/maven-git-commit-id-plugin/releases )
- [Commits](https://github.com/git-commit-id/maven-git-commit-id-plugin/compare/v3.0.0...v4.0.0 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
2020-03-09 16:17:00 +00:00
74b13231f8
bump craftapi to 0.3 ( #303 )
2020-03-08 12:15:37 +01:00
79627e3b60
Bump slf4j-jdk14 from 1.7.26 to 1.7.30 ( #301 )
...
Bumps [slf4j-jdk14](https://github.com/qos-ch/slf4j ) from 1.7.26 to 1.7.30.
- [Release notes](https://github.com/qos-ch/slf4j/releases )
- [Commits](https://github.com/qos-ch/slf4j/compare/v_1.7.26...v_1.7.30 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-06 19:28:02 +01:00
1722ab3267
Bump maven-shade-plugin from 3.2.0 to 3.2.2 ( #302 )
...
Bumps [maven-shade-plugin](https://github.com/apache/maven-shade-plugin ) from 3.2.0 to 3.2.2.
- [Release notes](https://github.com/apache/maven-shade-plugin/releases )
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.2.0...maven-shade-plugin-3.2.2 )
Signed-off-by: dependabot-preview[bot] <support@dependabot.com >
Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-06 19:27:19 +01:00
fdc0485f05
[CI-SKIP] Use HTTPS and newer URLs in Maven
2020-03-03 10:50:48 +01:00
1068ddbadd
Enable Maven cache for runner
2020-03-03 10:47:55 +01:00
b0d5bd606c
Rework issue templates
2020-03-03 10:47:37 +01:00
1e59101ada
Enable MySQL storage caching
2020-03-03 10:46:43 +01:00
46ac3c74e4
Fix Java setup action version
2020-02-17 15:28:58 +01:00
d22af0f42e
Fix unique name
2020-02-17 15:24:45 +01:00
2cc078773b
Migrate to GitHub actions
2020-02-17 15:18:58 +01:00
c1b8b60bf7
Use HTTPS for code comments too
2020-02-12 10:59:11 +01:00
c54d6eecfc
Merge branch 'JLLeitschuh/fix/JLL/use_https_to_resolve_dependencies'
2020-02-12 10:57:30 +01:00
0cf6c4c188
Use HTTPS instead of HTTP to resolve dependencies
...
This fixes a security vulnerability in this project where the `pom.xml`
files were configuring Maven to resolve dependencies over HTTP instead of
HTTPS.
Signed-off-by: Jonathan Leitschuh <Jonathan.Leitschuh@gmail.com >
2020-02-12 10:55:08 +01:00
282467d21b
Set a default kick reason if nothing is specified
2020-01-08 10:44:10 +01:00
e8a5dc7433
Use BungeeCord event methods for kicking the player
2020-01-07 20:35:16 +01:00
4b45932d6a
Migrate to asynchronous calls to LoginSecurity
...
(Fixes #290 )
2020-01-06 10:04:44 +01:00
1375cf3997
Fix ProtocolLib version
2019-12-29 13:35:33 +01:00
5a5cf016d9
Remove on blacklist status on join too
2019-12-29 13:33:18 +01:00
2c7e569653
Fix force login events being sync instead of async ( Fixes #278 )
2019-11-09 13:57:12 +01:00
94c5fe302e
Merge pull request #277 from FearGames/master
...
Fix build and add events
2019-11-02 16:41:43 +01:00
c80012ddb1
Allow multi-line messages
2019-10-25 11:54:26 +02:00
17361b1b54
Implement PreLogin and AutoLogin events
2019-10-23 14:45:51 +02:00
426b458a58
Fix BungeeAuth dependency
2019-10-23 12:50:40 +02:00
62a8b939cc
Use 'TEXT' for strings in the configuration file
2019-08-16 14:59:14 +02:00
327c8c4c9d
Dump dependencies
2019-07-09 12:56:14 +02:00
fbbe7a735a
Initialize the decryption cipher only once
...
(Related #259 )
2019-07-09 12:52:54 +02:00
4110ce2fa2
Fix creating logging session in ProtocolSupport environments
...
Fixes #251
2019-05-11 21:16:38 +02:00
28743d23bf
Remove duplicate repository
2019-05-06 17:39:21 +02:00
145bd95679
Drop usage of deprecated apache lang library
2019-05-06 17:37:13 +02:00
3fe17cf8d9
Merge pull request #250 from lenis0012/patch-2
...
Update LoginSecurity maven repository
2019-05-06 17:36:15 +02:00
3446d4c443
Update LoginSecurity maven repository
2019-05-06 11:35:39 +02:00
c528433079
Allow username only database logins
...
Related #247
2019-04-15 20:35:56 +02:00
25858ea11f
Enable travis caching
2019-04-14 10:16:53 +02:00
204ffbb2ee
Document network requests
2019-04-14 10:16:33 +02:00
9c1ba81cbe
Fix running force actions in LoginSecurity thread-safe
2019-04-14 10:16:19 +02:00
15c5857c4f
Correctly set the offline UUID in ProtocolSupport (Thanks to @Shevchik)
2018-08-30 12:32:42 +02:00
4b0ad3b186
Update ProtocolSupport hook
2018-08-29 19:49:10 +02:00
101f7207a9
Limit plugin channels to 16 characters for 1.7 support
...
Fixes #223
2018-08-07 13:41:30 +02:00
64175fe9e8
Update to CraftApi 0.2
2018-07-29 18:47:07 +02:00
f7a10d86eb
Don't transform because it's already compatible with 1.13
2018-07-25 16:55:52 +02:00
542aabad73
Lowercase the namespace correctly
2018-07-24 14:33:33 +02:00
260b93a565
Channel names should be lowercase according to the spec
...
Related #217 , #218
2018-07-24 10:17:21 +02:00
6604cca8bd
Use Plugin:Subchannel for channel messages
...
This is required to follow 1.13 spec.
(Related #216 , #215 )
2018-07-23 14:11:40 +02:00
c172b1ec84
Prevent duplicate message fetching for kick in PLib ( Fixes #212 )
2018-06-27 18:59:40 +02:00
9b0b8f5fcb
Fix repository link of ProtocolLib
2018-06-06 20:17:24 +02:00
20104b2b00
Update ProtocolLib to fix building
2018-06-06 09:33:05 +02:00
fd76d2448e
Add advanced options for the connection pool ( Fixes #210 )
2018-06-04 21:28:19 +02:00
53a1821a9d
Fix ProtocolLib repository
2018-06-04 21:27:23 +02:00
1c6f4e82e0
Fix NPE for cracked players on non-bungee environments
2018-05-23 19:14:20 +02:00
084afef899
Update premium UUID on verification (Related #208 )
2018-05-04 19:45:43 +02:00
8a9eed3a74
Add /newline variable
2018-05-04 18:54:26 +02:00
1ea6d929b1
Clarify how to configure MariaDB/MySQL correctly
2018-04-26 10:09:40 +02:00
ddc3aa9279
Replace deprecated PropertiesResolveEvent with LoginFinishEvent
...
affects only ProtocolSupport
2018-04-26 10:08:56 +02:00
2a79a9511b
Fix auto register type in BungeeCord not being sent
2018-04-07 16:14:46 +02:00
791df26702
Fix defaults overriding config
2018-04-05 18:42:50 +02:00
cdf1988f2f
Fix comping after craftapi update
2018-04-05 17:38:16 +02:00
f476c091bb
Fix default message loading, because default values are ignored by .getKeys()
2018-04-05 17:33:32 +02:00
352c72df64
Add note about developments builds
2018-04-02 14:43:43 +02:00
2cd0b194aa
We are SNAPSHOT build not a release candidate
...
Maven versions plugin is great for multi-modules.
Run mvn version:set -DnewVersion=... and that's it.
2018-03-31 10:38:57 +02:00
f2e42019d6
Mention the new FastLogin module names in the setup guide
2018-03-31 10:34:26 +02:00
82ec71e8d0
Update premium status for non-bungeecord setups (Related #200 )
2018-03-27 20:43:53 +02:00
6d207d62ba
Fix BungeeCord blacklist condition checking
2018-03-25 15:44:51 +02:00
889dab3152
Migrate to PlaceholderExpansion from PlaceholderAPI
2018-03-21 11:02:55 +01:00
71c1f4f12e
Remove session in ProtocolSupport directly without expiring
2018-03-18 16:22:03 +01:00
3651c4873c
Dump craftapi version
2018-03-17 16:57:05 +01:00
8b613a48cc
Forward skin from ProtocolLib verification response
2018-03-16 16:40:12 +01:00
78f8fa1f05
Fix NPE on nullable uuid column
2018-03-16 16:34:31 +01:00
ac5820bb75
Encode enums as integers
2018-03-16 15:15:54 +01:00
c1cb28c996
Add basic API ( Fixes #200 )
2018-03-16 15:15:03 +01:00
b534765ff8
Always forward premium status to spigot
2018-03-16 15:14:35 +01:00
5bcfdfeb32
Cancel restore session events if it's a premium player (Related #201 )
2018-03-16 14:44:35 +01:00
b7c0fd549c
Add an explicit warning about the BungeeCord setup guide
2018-03-11 12:27:43 +01:00
61c1364506
Simplify command handling
2018-03-11 11:47:02 +01:00
a29dd849f9
Move shared Mojang client into independant project
2018-03-09 14:39:02 +01:00
3f9eba69ba
Generate a public key only for ProtocolLib listener
2018-03-09 13:57:51 +01:00
f250f8071f
Optional migration
2018-03-05 21:27:48 +01:00
8272aeac69
Switch to the codemc repo for BungeeCord
2018-03-05 17:37:40 +01:00
4d470be712
Dump AuthMe version
2018-03-05 17:35:33 +01:00
e2c04f2c26
Add isSaved helper
2018-03-02 19:56:17 +01:00
86694982c7
Minor refactoring
2018-03-02 18:29:38 +01:00
04b00f4f22
Add driver available check for more readable error messages
2018-02-24 20:45:22 +01:00
48c2355745
Remove copy-paste misleading package name
2018-02-24 20:45:22 +01:00
cff25c958d
Extract BungeeCord message in dedicated classes
2018-02-24 20:45:20 +01:00
06bb4b80dd
Add toString methods to all relevant classes
2018-02-24 20:43:18 +01:00
2bdd051a41
Remove universal jar building for a smaller jar footprint and less conflicts with provided dependencies
2018-02-24 20:43:18 +01:00
526a8a9d51
Log invalid proxy id messages
2018-02-24 10:45:52 +01:00
8cbdb66625
Relocate HikariCP and slf4j too to prevent conflicts
2018-02-08 13:24:42 +01:00
e5e815a885
Cancel autologin for AuthMe sessions ( Fixes #189 , #148 , #103 )
2018-02-05 15:01:28 +01:00
d0d5bd300b
Use static imports for Colectors.*
2018-02-05 12:54:35 +01:00
0c550edb05
Shade the gson dependency to fix compatibility with Minecraft 1.7.10
...
(Fixes #190 )
2018-01-30 13:15:48 +01:00
181ea71222
Readd SSLFactory for rate-limit load balance because direct proxies doesn't work at all
2018-01-28 13:25:10 +01:00
c38692e237
Use ChangeSkins rate-limit message here too
2018-01-28 12:25:25 +01:00
dcef62fa57
Fix FileAlreadyExistsException for sym linked folders
2018-01-27 21:49:32 +01:00
856613a8c7
Update Hikari dependency
2018-01-27 18:47:19 +01:00
3beb8beaeb
Migrate tests to assertThat
2018-01-27 18:47:01 +01:00
f3ea7ecbbe
Update development builds link
2018-01-27 18:46:43 +01:00
25c725f237
[ci skip] Update LoginSecurity to 2.1.7 to fix compiling
2017-12-01 09:35:37 +01:00
ffe4eb7364
Clarify BungeeCord plugin installation on Spigot
2017-11-25 09:34:38 +01:00
82a258097d
Use SecureRandom for passwords
2017-10-30 17:57:01 +01:00
57eff4b3ec
Fix NPE for skin apply in ProtocolLib mode (Related #182 )
2017-10-15 17:57:24 +02:00
4858049c2a
Use direct proxies instead of ssl factories for multiple IP-addresses
2017-10-14 18:25:12 +02:00
bb2cc1b42a
Remove local address check (Related #181 )
2017-10-12 09:59:16 +02:00
2512c5cf67
Convert local IP addr '-' to . (Related #179 )
2017-10-09 10:33:38 +02:00
c7c0782071
Fix address rotating for contacting the Mojang API
2017-10-07 19:48:29 +02:00
df945146b8
Fix debug logging
2017-10-07 19:19:45 +02:00
e32b0232e9
Fix logger init ( Fixes #178 )
2017-10-04 09:22:21 +02:00
6daa654af8
Fix NPE for Mojang API connector
2017-10-03 15:14:37 +02:00
0f01002564
Optimize issue template
2017-10-03 14:19:34 +02:00
28a20a46fa
Fix NPE parsing Mojang uuid
2017-10-03 14:19:02 +02:00
105e00b7e8
Use Instant for timestamps
2017-10-01 17:11:06 +02:00
dce44295d0
Migrate SLF4J logging ( Fixes #177 )
2017-09-29 16:54:29 +02:00
1f917f3a8d
Use Optionals for nullable values
2017-09-24 19:50:42 +02:00
e6c23a4bb5
Use Gson's TypeAdapter for more type safety
2017-09-23 13:56:28 +02:00
66b808c999
Fix compile
2017-09-22 21:41:24 +02:00
2932de5588
Add support for IPv6 proxies
2017-09-22 21:08:24 +02:00
16f7461568
Fix message loading was interacting with the normal config
2017-09-22 20:11:58 +02:00
2f0eb81735
Shade the Bungee-Config implementation because it's platform independent
2017-09-22 20:07:04 +02:00
bb80521ab6
Thermos supports GSON so we could share the json parsing
2017-09-22 18:17:35 +02:00
109508dae6
Clean up using IDE inspections
2017-09-21 15:00:39 +02:00
5bf9b05d30
Fix BungeeAuth Maven repository
2017-09-13 12:34:56 +02:00
7839804a4c
Drop support for deprecated AuthMe API
2017-09-12 17:05:18 +02:00
ca58c55eca
Remove legacy database migration code
2017-09-08 11:33:14 +02:00
10453fd637
Drop support for RoyalAuth, because it doesn't seem to be supported anymore
2017-09-08 11:30:24 +02:00
d18b734550
Update dependencies
2017-09-08 11:17:05 +02:00
7f51659cc7
Version dump
2017-09-03 20:06:00 +02:00
bb240d3aa0
Refactor encryption implementation
...
* Simplify utility class and make it more independent from the vendor code
* Create only one cipher object for verification
2017-08-28 12:17:47 +02:00
484855724b
Add ip parameter to verify a player doesn't use an authentication proxy.
...
This doesn't prevent proxy connections in general, but it verifies that
the same IP that is used for connecting to the Minecraft server is also
used for authenticating against the Mojang servers.
This happens if someone uses McLeaks. They use an authentication proxy
in order to hide and control the credentials behind those leaked or
donated accounts. So a user of that service joins the server using
a direct connection, but asks the McLeaks servers to send a relevant
request to the Mojang session-servers in order to pass the premium
verification process.
2017-08-25 13:20:55 +02:00
4ea7968366
Remove Importer to prepare for code refactor
2017-08-24 18:50:37 +02:00
44a47bc97f
Set default value for proxies
2017-08-20 21:40:37 +02:00
82cb25f809
Output more informational messages by default
2017-08-19 21:53:07 +02:00
551441cdc4
Add HTTP-proxies support
2017-08-18 16:09:59 +02:00
22a56862b0
Remove mcapi.ca section and fix config typos
2017-08-16 17:18:58 +02:00
edf5933e07
Set the fake offline UUID on lowest priority (-> as soon as possible)
...
Then every plugin listening on priority level higher than lowest can see that fake UUID
This also fixes race conditions for plugins listening on the same priority as FastLogin before (->low)
(Fixes #167 )
2017-08-01 10:29:58 +02:00
c6da04de70
Fix listening for login start packets if ProtocolLib is installed
...
Another call on ProtocolLib's types removes all previous listening types
Fixes #163
2017-07-25 13:18:08 +02:00
0459b0a5a1
Remove bungee chatcolor for Bukkit to support KCauldron
2017-07-22 08:35:32 +02:00
033333e35c
Minor cleanup using inspections + Https
...
* Use https for maven repositories if possible
* Fix typos
* Merge ProtocolLib listeners into one class
* Upgrade maven plugins and dependencies
2017-07-22 08:27:55 +02:00
6595dc6ac0
Increase hook delay to let ProtocolLib inject the listener
2017-06-30 17:37:57 +02:00
ea44002e91
Update dependencies and format imports
2017-06-30 17:23:46 +02:00
131de8404c
Add support for new authme API
2017-06-12 17:26:46 +02:00
fbdd8ffc35
Choose player name casing based on client request.
...
Since BungeeCord commit 5bc189fbb7e8ca19984544af78a083024404fb2a the name casing is based on
the exact name saved at Mojang. This means it could have breaking effects on FastLogin, because
it performs case-sensitive checks against the database. To provide backwards compatibility with
old data we restore the old implementation access for FastLogin.
Thanks to @Maxetto for pointing this out. This commit basically reverts:
059c3f346e
2017-06-07 21:09:00 +02:00
7db8c78975
Drop support for old authme API
2017-06-04 15:52:01 +02:00
b102f06f8e
Update ProtocolLib to fix building
2017-05-27 11:24:43 +02:00
a79e18445a
Fix building because the bungee proxy repo is down [ci skip]
2017-05-19 12:01:02 +02:00
cf1a0c1bef
Remove ebean util usage to make it compatible with 1.12
2017-05-14 17:11:10 +02:00
059c3f346e
Lowercase name inside pendingconnection for comparisons against the database
2017-05-10 17:06:25 +02:00
47db2c7858
Fixed AuthHook ( #144 )
...
* Fixed AuthHook
The setServerStarted()-Method is now also called if an extern AuthHook
hooks into FastLogin via the API
* Simplified if-Statement
2017-04-19 14:39:27 +02:00
5bb8640d78
Do not try to hook into a plugin if auth plugin hook is already set using the FastLogin API
2017-04-17 15:22:09 +02:00
881b2ec7bc
Fix changelog markdown syntax
2017-04-15 09:42:17 +02:00
194c67cd6f
Fix markdown syntax
2017-04-05 09:24:41 +02:00
863607c9a4
Add optional useSSL config option
2017-02-23 09:16:11 +01:00
f37cc0a0db
Add commit id to the version
2017-02-14 14:01:57 +01:00
70a81bfcdf
Correctly wait for BungeeAuth loading by using the correct depend tag ( Fixes #119 )
2017-02-10 19:06:57 +01:00
b8d029d6da
Remove third party API
2017-02-04 14:09:38 +01:00
c47dd1df80
Fix FileNotFoundEx if the bungee config doesn't exist
2017-01-28 16:38:48 +01:00
4d5b1787b1
Migrate to Java 7 NIO files
2017-01-26 09:52:45 +01:00
8c764220bd
Fix duplicate premium username message
2017-01-21 18:02:45 +01:00
9af076b4c4
Fix premium username logging message at the wrong place
2017-01-09 17:57:50 +01:00
22aa9287e9
Fix NoClassDef errors if the optional PlaceholderAPI is not available ( Fixes #108 )
2017-01-07 18:42:10 +01:00
f08daa9b72
Update bungee-proxy maven repository
2017-01-06 13:00:17 +01:00
bc53743c6b
Add placeholder variables
2017-01-06 12:54:02 +01:00
a430a079c9
Do no print auto login message on authme session reuse (Related #101 )
2016-12-23 22:12:55 +01:00
f3ac6090f1
Fix bungee online check ( Fixes #101 )
2016-12-23 10:01:38 +01:00
5ca9b9c59a
Add note about firewalling your spigot server if you use BungeeCord
2016-12-22 09:13:58 +01:00
b886d1501f
Update LoginSecurity to make it buildable
2016-12-16 15:56:30 +01:00
0082cc6536
Use static builder to make it independent from ProtocolLib without throwing NoClassDefFoundError
2016-12-16 15:49:40 +01:00
7f96d55084
Convert config values to string if casting fails
2016-11-26 13:27:39 +01:00
3851d539f8
Workaround injector class is package private in older versions of ProtocolLib ( Fixes #94 )
2016-11-26 11:33:15 +01:00
a25d97879f
Fail safetly if there session was started (prevents duplicate errors)
2016-11-26 10:06:27 +01:00
41abffdb08
Fix Spigot console command invocation sends result to ingame players
2016-10-20 14:06:18 +02:00
e69eb70377
Update BungeeAuth dependency and use the new API
2016-10-05 10:06:02 +02:00
e924b7a2fa
Automatically register players who are not known to the auth plugin
...
Fixes #85
2016-10-03 13:46:33 +02:00
157ca04691
Fix timestamp parsing in newer versions of SQLite
2016-09-23 12:26:18 +02:00
ae3e03405d
No duplicate login's like auth plugins auto logins if it's the same ip
2016-09-23 10:42:25 +02:00
bebb04bdea
Share the same force login mangement for less duplicate code
2016-09-22 10:56:31 +02:00
91f41c55de
Finally set a value to the API column
2016-09-21 13:24:26 +02:00
1acc825f81
Remove deprecated API methods
2016-09-21 13:22:48 +02:00
87ca00d75d
[SwitchMode] Kick the player only if the player is unknown to us
2016-09-21 09:16:19 +02:00
62ffb1a904
[Bukkit] Fix adding to premium whitelist
2016-09-20 13:55:03 +02:00
5075a71843
A few code styling things
2016-09-20 13:32:06 +02:00
da266c7e91
Fix loading of settings
2016-09-19 17:59:45 +02:00
acab4766b1
Remove database migration logging
2016-09-19 15:59:57 +02:00
bef90d11cd
Deploy only the universal jar to the target folder
2016-09-18 11:40:21 +02:00
a02acd2d63
Remove the nasty UltraAuth fakeplayer workaround
2016-09-18 10:38:05 +02:00
ca42a7c19e
Refactor more code for more Java 8 and Guava usage
2016-09-17 15:19:07 +02:00
b533197f05
Fix config loading in BungeeCord
2016-09-17 15:19:07 +02:00
c94711f315
Fix verb ( #79 )
2016-09-17 08:02:33 +02:00
ee7af80bf0
Fix travis
2016-09-16 17:41:23 +02:00
17c2099bf1
Make use of the awesome Java 8 features
2016-09-16 17:40:42 +02:00
31d6b67381
Try to upgrade to Java 8. I hope enough people are using it.
2016-09-16 16:31:47 +02:00
4b423c9ccb
Update ProtocolSupport and use a maven repository for it now
2016-09-16 10:45:05 +02:00
4292e9aaa0
Less deprecated warnings + Clean up
2016-09-15 11:10:52 +02:00
07d0aededa
Fix loading with unloaded configuration values
2016-09-15 10:33:17 +02:00
218bc50c96
Drop support for LoginSecurity 1.X since 2.X seems to be stable
2016-09-14 17:44:32 +02:00
a3b2e33aad
Switch to vik1395 repository for BungeeAuth
2016-09-13 09:53:46 +02:00
76f5ba7ed1
Refactor a lot of code + Add Guava v10 as shared library
2016-09-11 21:26:03 +02:00
2cd50d23ad
Revert converting auth hooks to the new format
...
-> backwards compatibility
2016-09-11 20:07:21 +02:00
9f5f61f1c2
Do the same for the password generator
2016-09-11 19:57:27 +02:00
3e9c8e3a7e
More shared project code for less errors and less duplication
2016-09-11 18:59:42 +02:00
8e5da01be0
Added configuration to disable auto logins for 2Factor authentication
...
(Fixes #65 )
2016-09-09 16:52:44 +02:00
5022c9aa7b
Add cracked whitelist ( Fixes #42 )
...
(switch-mode -> switching to online-mode from offlinemode)
2016-09-09 16:40:24 +02:00
ad1ab22586
Test another locale sqlite fix
2016-09-08 11:48:13 +02:00
99ef5ce726
Fix correct cracked permission for bukkit
2016-09-08 10:06:43 +02:00
9b7634a9f3
Fix LogIt repository
2016-09-04 16:35:57 +02:00
115fc2e7ba
A try to fix SQLite timestamp parsing
2016-09-04 12:14:28 +02:00
b660951e1e
Fix compatibility with older ProtocolLib versions (for 1.7)
...
because of the missing getMethodAcccessorOrNull method
2016-09-03 10:21:42 +02:00
e495f70ccd
Fix logging exceptions on encryption enabling
2016-09-01 20:09:34 +02:00
b35d67b5c0
Add missing add-premium-other message
2016-09-01 19:41:58 +02:00
58ac73a5a9
Fix update username in FastLogin database after nameChange ( Fixes #67 )
2016-08-31 13:29:06 +02:00
ebe768f7a2
Fix ProtocolSupport autoRegister
2016-08-30 12:27:02 +02:00
d20db79f46
Add second attemp login -> cracked ( Fixes #51 )
2016-08-29 17:38:46 +02:00
c28d889c1b
Remove complex nameChange convert since we now allow duplicate uuids
2016-08-26 13:32:28 +02:00
ad60397851
Added auto login importers
2016-08-25 17:45:09 +02:00
88fdeff3f1
Update documentation
2016-08-25 17:44:51 +02:00
558ee1c92c
Fix console support for cracked/premium commands (Fixes# 62)
2016-08-20 17:38:47 +02:00
3e84ebd787
[BungeeAuth] Do not login the player if it's already logged in using
...
sessions
2016-08-19 22:00:07 +02:00
36d7564c3a
Fix race condition when waiting for bukkit message while
...
bungee redirects player
2016-08-19 21:07:29 +02:00
596caa0573
Invoke forcelogin in BungeeCord only once
2016-08-19 20:52:51 +02:00
fe4331298f
Send a message on BungeeCord if there is only an auth plugin
2016-08-18 20:22:04 +02:00
a67d84ef3f
Fix race condition in bungee<->bukkit
2016-08-18 20:15:43 +02:00
71362dfd7d
Log bungeeauth exceptions
2016-08-18 09:16:06 +02:00
fcd98fce43
Fix Color Code ( #54 )
...
Got it wrong the first time.
2016-08-09 19:17:48 +02:00
6c1c4e7286
Fix third-party not premium player detection
2016-08-09 14:24:57 +02:00
164fb735d6
Fix ProtocolSupport BungeeCord
2016-08-07 11:41:03 +02:00
fa1b0970a5
Dump to 1.7.1
2016-08-01 12:59:04 +02:00
974bf498fc
Fix protocollsupport autoregister
2016-07-31 11:56:20 +02:00
27c04ff08f
Fix BungeeCord autoRegister ( Fixes #46 )
2016-07-31 09:57:50 +02:00
fb357424e6
Run the plugin message reader async to prevent the timeout event
...
warning from BungeeCord
2016-07-26 14:30:11 +02:00
c73bb70256
FIx autoregister bug
2016-07-25 19:29:22 +02:00
dc395cdc3f
Remove debug code
2016-07-20 20:03:17 +02:00
f7626ab969
Read the fully input from mcapi.ca instead of just one line
2016-07-20 11:54:00 +02:00
5f9802d589
Fix third party profile parsing
2016-07-19 10:47:47 +02:00
642c1621ad
Fine tune timeout length
2016-07-13 13:00:25 +02:00
eb965d5a48
Fix importing
2016-07-13 10:05:22 +02:00
457bc9cf47
Fix SQLite drop index
2016-07-12 13:06:27 +02:00
2ab3c6b77c
Update AutoIn importer
2016-07-12 12:39:06 +02:00
f27bad02d3
Remove the uuid index for name change conflicts
2016-07-12 12:23:32 +02:00
9334296beb
Fix saving on name change
2016-07-10 19:25:37 +02:00
fd9940e6f0
Fix setting skin on Cauldron ( Fixes #36 )
2016-07-10 13:34:08 +02:00
0745957e79
Fix BungeeCord not setting an premium uuid ( Fixes #35 )
2016-07-09 13:30:43 +02:00
bb2e60f6e1
State why choose the loginEvent and fix it
2016-07-08 16:47:50 +02:00
d15861b8e5
Use the correct message key
2016-07-08 16:47:50 +02:00
b84b340a77
Consistency language update ( #33 )
...
Messages that aren't targeted to the player invoking the command shouldn't start with "You are", that could be confusing.
Changed Warning message to be more eye-catching to the player. Assuming also that next line doesn't take the color code from previous line (otherwise change "&r" with "&6").
2016-07-07 14:51:14 +02:00
c50249edea
Switch to mcapi.ca and add configurable number of requests
2016-07-07 12:20:39 +02:00
757ddb905a
Make it buildable again
2016-07-04 21:40:42 +02:00
9914b7f358
Fix player entry is not saved if namechangecheck is enabled
2016-07-04 21:26:03 +02:00
bba4eb4eec
Ignore all canceled events
2016-07-03 21:28:44 +02:00
2b16f3341f
Use the loginevent to send the client the offline uuid
...
-> skin applies on deactivated premium uuid
2016-07-03 16:58:23 +02:00
167ce66057
Added note about skin forwarding if premium uuids are disabled
2016-07-03 14:18:27 +02:00
8d1021e44c
Update fake player methods
2016-06-29 19:04:12 +02:00
a811a741f5
Change to lenis repository
2016-06-29 19:03:52 +02:00
a6348766b3
Reduce the number of lookups if a cracked player already exists
2016-06-20 16:29:39 +02:00
22dcc50950
I'm stupid (Related #27 )
2016-06-20 16:16:31 +02:00
bd3494eed0
Fix recursive method invocation (Related #27 )
2016-06-20 15:27:43 +02:00
1aba9a0f3b
Added us.mcapi.com as third-party APIs to workaround rate-limits
...
(Fixes #27 )
2016-06-20 14:12:29 +02:00
6faf00e1bf
Support for making requests to Mojang from different IPv4 addresses
...
(Related #27 )
2016-06-20 13:52:37 +02:00
0d89614f3c
Add support for the new LoginSecurity version
2016-06-18 14:39:47 +02:00
b009658eea
Fix typo in BungeeCord message key
2016-06-16 15:10:25 +02:00
2881689f09
Fixed default message copying
2016-06-15 17:35:10 +02:00
6d1a97fd32
Added premium command warning
2016-06-15 13:55:57 +02:00
b74faa2fd5
Fix missing translation
2016-06-15 13:26:20 +02:00
4800a88886
Perform protocollib checks async/non-blocking
2016-06-14 19:36:34 +02:00
92c9ab5b76
Use ProtocolLib as a soft dependency
2016-06-14 17:21:46 +02:00
d90e3fdb44
Load the embed message as default
2016-06-14 17:02:12 +02:00
8abbb8f07c
Fix bungeecord support ( Fixes #26 )
2016-06-13 08:51:47 +02:00
f04a44b1d2
Applies skin earlier to make it visible for other
...
plugins listening on login events
2016-06-11 17:16:03 +02:00
1a66121977
Do not save players multiple times on server switch
2016-06-11 15:08:44 +02:00
413a0325f8
Fixed BungeeCord force logins if there is a lobby server
2016-06-11 13:24:35 +02:00
9fc7e0bf43
Fixed BungeeCord support by correctly saving the proxy ids ( Fixes #22 )
2016-06-11 10:32:53 +02:00
ac8bcb1758
Fix default config deploy
2016-06-11 09:29:55 +02:00
bebcb3e9de
Make locale messages thread-safe
2016-06-10 10:37:04 +02:00
0b899f61a8
Fixed message removal
2016-06-10 09:23:15 +02:00
7733135ce4
Fixed NPE in BungeeCord on cracked login for existing players ( #22 )
2016-06-10 08:57:08 +02:00
be89eec23b
Fix NPE on premium name check if it's pure cracked player
...
(Fixes #21 )
2016-06-10 08:53:06 +02:00
679060d4e9
Fixed support for empty messages
2016-06-09 14:33:14 +02:00
f6aa064835
Added localization messages ( Fixes #20 )
2016-06-09 12:43:04 +02:00
de4b73c3bd
Upgrade maven plugin version
2016-06-09 10:30:42 +02:00
ac15829dcc
Fixes insert (new player) for cracked players ( Fixes #18 )
2016-06-07 17:32:45 +02:00
0b709997a4
Fix duplicate premium uuid check in BungeeCord
2016-06-07 16:46:18 +02:00
8809875ca4
Fixed setting auth hook
2016-06-04 14:56:04 +02:00
aa30c070b9
Add database importers (planned)
2016-06-02 15:02:15 +02:00
51d0aefbf3
Added support of detecting name changes ( Fixes #18 )
2016-06-01 14:42:48 +02:00
cb876a52bd
Add support for multiple bungeecords ( Fixes #19 )
2016-05-28 17:21:08 +02:00
3e844be65d
Clean up project structure
2016-05-26 11:04:13 +02:00
dce95cf0d0
Prevent thread create violation in BungeeCord
2016-05-25 09:40:43 +02:00
81eeaeae83
Fix recursive call for bungeecord
2016-05-23 21:11:34 +02:00
6b1542de88
Now bungeeCord detection should work for all server versions
2016-05-23 17:02:32 +02:00
99b7367366
Fixed bungeecord support in Cauldron (Related to #11 )
2016-05-23 12:02:44 +02:00
961b144efb
Load the plugin before worlds loading and auth plugins (Related to #12 )
...
to display the message not fully started more less
2016-05-23 10:27:01 +02:00
dcd06ad613
Fix server not fully started message on ProtocolSupport or Bungee
...
(Fixes #15 )
2016-05-23 08:46:18 +02:00
c4c043e1c5
Fix AuthMe 3.X forceLogin on autoRegister ( Fixes #14 )
2016-05-22 20:00:07 +02:00
87aa9dd668
Fixed CrazyLogin hook
2016-05-22 18:34:21 +02:00
2838c06ab3
Replacing guava's class search with an explicit list ( Fixes #11 )
...
-> Fixed 1.7 Minecraft support
-> Fixed Cauldron support
2016-05-22 18:31:34 +02:00
ae58e0539a
Added support for LogIt
2016-05-22 13:59:41 +02:00
624745728f
Added other command argument to /premium and /cracked ( Fixes #13 )
2016-05-21 13:32:48 +02:00
d0287ec2b4
Fixed premium logins if the server is not fully started ( Fixes #12 )
2016-05-18 18:41:24 +02:00
e6a4af92cc
Add support for AuthMe 3.X
2016-05-18 15:47:51 +02:00
8f3920fa99
Fix message order
2016-05-15 17:33:21 +02:00
a723b2ddd3
Added BungeeCord setup description
2016-05-14 14:00:43 +02:00
5cf67127c7
Fix dead lock in xAuth
2016-05-14 13:30:32 +02:00
e5309b9fa1
Remove the check for auth plugins in order to allow auth plugins to
...
register their hook after the initialization of FastLogin
2016-05-14 13:25:12 +02:00
e439126294
Added API methods for auth plugins to set their own hook
2016-05-14 12:27:03 +02:00
59703bac4e
Fix race condition in BungeeCord
2016-05-13 18:54:08 +02:00
bfaf390463
Fixed bungeecord detection for older Spigot builds
2016-05-12 20:11:56 +02:00
9e06fd7735
Added support for the configuration options under BungeeCord
2016-05-06 08:55:09 +02:00
d56a0f9ff1
Fix thread-safety in async forcelogin task
2016-05-05 12:00:22 +02:00
96fe190cac
Ignore module target folders from git too
2016-05-05 09:55:01 +02:00
d4f5b547d4
Listen to the success of the bukkit module
2016-05-05 09:46:21 +02:00
67a4f41056
Depend saving of FastLogin data on the success of the force actions
...
not in reverse order
2016-05-03 18:38:52 +02:00
5174a84a17
Update API methods to reflect errors
2016-05-03 18:05:26 +02:00
a7b164b513
Call force methods sync
2016-05-03 16:55:08 +02:00
ffa5059c67
Use intends to run BungeeCord tasks on a event in background
2016-05-03 16:14:38 +02:00
dfe37dfc1b
Force login only if the save process was successful
2016-05-03 15:58:22 +02:00
6edd40742d
Fix saving bug
2016-04-27 20:35:23 +02:00
b697dc6655
Added autoRegister for BungeeCord
2016-04-27 18:00:25 +02:00
36974450ce
Implement forwardSkin + forwardUUID config option for Bungee
2016-04-27 17:13:27 +02:00
57a59045ce
Add storage support for BungeeCord
2016-04-27 17:02:20 +02:00
11cc4eabc0
Fixes storage bugs
2016-04-26 22:19:25 +02:00
53e02d5457
Finish basic bukkit support
2016-04-26 21:01:48 +02:00
0f85674ec1
Added database setup
2016-04-26 19:32:00 +02:00
378ab09bc8
Fix bungeecord disable
2016-04-26 13:04:20 +02:00
740b11b434
Fix disconnect reason documentation when cracked users joins ( Fixes #9 )
...
This message changed a couple of versions ago
2016-04-20 19:01:25 +02:00
77f0184899
Replace handshake listener with bungeecord config reader
2016-04-05 11:40:23 +02:00
2885daf8b9
Merge pull request #6 from NorbiPeti/patch-1
...
Fixed issues with host lookup from hosts file
2016-04-03 11:21:29 +02:00
1e128d12f5
Merge pull request #7 from NorbiPeti/patch-2
...
Fixed error message condition for /premium
2016-04-03 11:19:21 +02:00
f2a8446c8d
Fixed error message condition for /premium
2016-04-03 03:10:51 +02:00
cc8c49e25b
Fixed issues with host lookup from hosts file
...
I have values set in my hosts file and the original way of getting the address returnned the hostname it was linked to.
2016-04-03 03:00:55 +02:00
25e182148f
Describe the time where we receive the profile properties
2016-03-30 11:37:52 +02:00
f00608c321
Updated FakePlayer against the newest API changes
2016-03-28 10:37:46 +02:00
b86bdf5f23
Added check if player is already premium + Updated FakePlayer against
...
the newest API changes
2016-03-27 11:18:46 +02:00
9a30a0b299
Added forwardSkin config option
2016-03-23 10:15:48 +01:00
fd3b1ed8b6
Added premium UUID support ( Fixes #5 )
2016-03-22 22:16:48 +01:00
f3e675e547
Removes the need to use a bukkit auth plugin if you have a bungee one
...
(Fixes #4 )
2016-03-22 21:25:58 +01:00
0967f31b9a
Optimize performance and thread-safety
2016-03-21 15:45:51 +01:00
8cb4621055
Fixed autoRegister support for LoginSecurity
2016-03-20 15:19:11 +01:00
f610001c9b
Workaround protected method + Add documentation
2016-03-20 13:26:37 +01:00
dd386408d1
Call auth methods on connection
2016-03-20 13:01:03 +01:00
10bfd279d6
Start working on BungeeAuth support
2016-03-20 12:49:24 +01:00
5608821fe3
Fixed BungeeCord support
2016-03-20 11:30:52 +01:00
9c0ad7d70c
Fixed UltraAuth support
2016-03-05 21:47:28 +01:00
099b8e5d0a
Fix weird 1.9 bugs
2016-03-05 21:04:22 +01:00
b4ade882be
Fixed correct build + Fixed plugin.yml
2016-03-05 20:28:40 +01:00
4a3cb42152
Ignore libraries from auth plugins in order to fix repository conflicts
...
Fixes #3
2016-03-04 13:34:17 +01:00
8fc5050e8e
Added support for UltraAuth
2016-03-01 17:26:25 +01:00
015739fe4c
Added unpremium/cracked command
2016-02-28 18:28:36 +01:00
b2ae46a90a
Add royal auth support + Move maven system repositories to jiitpack
2016-02-07 14:39:59 +01:00
353cd17823
Run forceRegister async if possible -> improve performance
2016-02-02 14:57:20 +01:00
157b8499a9
Added auto login without commands ( Fixes #2 )
2016-01-27 17:21:53 +01:00
bd46dae086
Added changelog update
2016-01-27 14:24:42 +01:00
eacbb1ed76
Fixed CrazyLogin restore actions
2016-01-27 14:24:00 +01:00
e389433138
Added isRegistered and forceRegister API methods
2016-01-27 14:23:07 +01:00
d1b2fe8865
Added protocol support
2016-01-24 11:51:39 +01:00
3b4c4a1c79
Fixes build errors by updating parent version of the universal module
2016-01-23 20:56:09 +01:00
b22df62f90
Added premium skin forward
2016-01-23 20:53:13 +01:00
d118de8649
Run packet listeners async from the Netty threads + Correctly shutdown
...
plugin if the server is in online mode.
2015-11-23 20:20:40 +01:00
f8c10d6890
Merge the Bukkit and BungeeCord version together to a universal plugin
2015-11-14 20:03:24 +01:00
c3f8e59a9a
Added BungeeCord support
2015-11-13 22:46:38 +01:00
834818bb7a
Fixed NPE on invalid sessions + Improved security for premium logins
2015-11-04 19:41:47 +01:00
fa46dc690b
Add changelog and travis integration for automatic tests
2015-11-03 18:23:56 +01:00
fdc2772f38
Update description
2015-11-03 17:47:26 +01:00
53af09ae34
Fixed json parsing for logins
2015-10-06 19:22:37 +02:00
f6f6aaf1de
Fix thread safety for fake start packets (Bukkit.getOfflinePlayer doesn't look like to be thread-safe) + More documentation
2015-10-05 19:58:58 +02:00
c0ef95e808
Send the correct kick packet to the client in order to show the reason
2015-10-01 19:35:41 +02:00
cb129547f5
Compile the project with Java 7. Many hosters don't have Java 8 yet.
2015-09-16 16:12:33 +02:00
eb394b5f60
Added /premium command
2015-09-06 20:31:44 +02:00
aebbc84621
Added support for CrazyLogin and LoginSecurity + Code cleanup + Added a lot of comments + Version independent
2015-09-06 14:00:38 +02:00
0eee6ba2be
Update ReadMe
2015-09-05 10:03:06 +02:00
7e2057a7a2
[Security] Fix offline player could login as premium if they logged in using the same address (ip and port) as a previous premium player and under a delay of 2 Minutes.
2015-09-05 09:58:15 +02:00
800f077be0
First upload
2015-09-04 19:56:58 +02:00