games647
ad815777d4
Send login command from proxy immediately
2024-05-21 21:55:23 +02:00
games647
9a400f5ae1
Only print premium warning on command sender site
2024-05-21 21:53:30 +02:00
games647
c7254034bb
Modularize authentication backends
2024-05-21 17:07:09 +02:00
games647
7a8e5a59d0
Restore older Java compatibility
2024-05-21 17:04:41 +02:00
games647
d04e421927
Migrate to new HTTP client
2024-05-21 15:09:45 +02:00
games647
6005f0db44
Minor clean up
2024-05-21 15:09:28 +02:00
games647
f50004f50d
Drop configuration for outgoing IP addresses
2024-05-21 15:08:12 +02:00
games647
b6b95d50e5
Update HikariCP
2024-05-21 14:47:34 +02:00
games647
be2ec1e5a8
Clean up methods names and documentation
2024-05-21 14:41:41 +02:00
games647
e9643ee3e2
Simplify bug report template by dropping expected behavior
2024-05-21 12:37:02 +02:00
games647
f1b780c398
Clarify pending logins methods
2024-05-11 11:15:13 +02:00
games647
33d3c751b9
Sanity check password generator
2024-05-11 11:13:52 +02:00
games647
00c0bd3b7b
Reduce build dependency bloat
2024-05-11 11:13:36 +02:00
games647
492a17e7de
Re-enable paper release repo to fix retrieving bungeecord and datafix
2024-05-10 12:20:39 +02:00
games647
c063e7b58d
Added shouldAuthenticate field for ProtocolLib
...
Related #1202
2024-05-10 12:10:31 +02:00
games647
0c64597ff0
Override packet types until they are registered at ProtocolLib
...
Related #1202
2024-05-10 12:07:47 +02:00
games647
9c06401e69
Fail safely if MinecraftEncryption is not found in newer versions
2024-05-10 12:06:52 +02:00
games647
1f9253895c
Document missing premium parameter
2024-05-10 12:06:20 +02:00
games647
41a23bb292
Netty is no longer needed for tests
2024-05-10 10:09:24 +02:00
games647
756b777056
Use a better method name for StoredProfile.isPremium
2024-05-10 10:09:12 +02:00
games647
204d25a739
Re-order and remove outdated auth plugin documentation
2024-05-10 10:03:18 +02:00
games647
07e19b590a
Fix missing class
2024-05-08 09:33:36 +02:00
games647
bb78043d64
Run delayed velocity tasks under our scheduler too
2024-05-07 20:31:55 +02:00
games647
7b6d2062cf
Update license year
2024-05-06 16:40:24 +02:00
games647
3473611b90
Enforce stricter permissions on GitHub actions
2024-05-06 11:18:48 +02:00
games647
9fabc69ba9
Increase dependabot to monthly updates.
...
There are not many critical changes nowadays.
2024-05-06 11:18:28 +02:00
games647
5a782137af
Exclude redundant snakeyaml dependency in BungeeCord
2024-05-06 11:17:44 +02:00
games647
4068fd06db
Update platform dependencies
2024-05-06 11:17:16 +02:00
games647
1419b7d357
Use transitive dependencies from craftapi instead of explicitly
2024-05-06 11:16:42 +02:00
games647
690eabaa5e
Use reflection for test to fix compiling core to older Java versions
2024-05-06 09:40:07 +02:00
games647
caf5188246
Experimental bump of BungeeCord module to Java 17
...
Java 17+ and 21 are LTS releases. The other proxy Velocity
also includes Java 17. Ubuntu 24 LTS includes Java 21 already.
However, Ubuntu 22 LTS only uses Java 11, so it might be
necessary to fallback although Ubuntu 23 includes it.
Nevertheless, third-party JDK installations are also a thing
and Minecraft 1.20.6 nowadays also requires Java 21.
2024-05-05 13:29:06 +02:00
games647
c905ca3d33
Move excluded shaded list to dependencies directly
...
It seems to be easier where the dependencies are coming from.
2024-05-05 13:23:07 +02:00
games647
47b6835f37
Merge pull request #1200 from Freyhold/main
...
add removed dependency in last commit 8e35c5d that updated dependency
2024-05-05 13:20:07 +02:00
hubert-praca
884a4e0d65
Add critical guava and gson back from craftapi
...
Co-authored-by: games647 <games647@users.noreply.github.com >
2024-05-05 13:18:07 +02:00
games647
0ac8481d92
Synchronize velocity java version with upstream
2024-05-05 10:18:27 +02:00
games647
f0209170c7
Exclude database windows authentication in velocity
...
It's very unlikely this is really needed.
2024-05-03 16:00:10 +02:00
games647
e63642b146
Unlock yaml, because we are shipping it now
2024-05-03 15:59:20 +02:00
games647
d58ef6b0a1
Add snakeyaml back
2024-05-03 11:18:15 +02:00
games647
8e35c5df90
Update dependencies
2024-05-03 10:43:57 +02:00
games647
cf4d19aeca
Update deps
2024-05-02 10:57:51 +02:00
games647
7479c8be87
Update compiler plugin to fix GH runner
2024-05-02 10:57:42 +02:00
games647
1889c2605e
Add unit test for multi-release scheduler
2024-05-02 10:57:10 +02:00
games647
3925b66511
Merge pull request #1179 from games647/dependabot/github_actions/advanced-security/maven-dependency-submission-action-4.0.2
...
Bump advanced-security/maven-dependency-submission-action from 4.0.0 to 4.0.2
2024-04-30 16:04:10 +02:00
games647
3f47356d35
Merge pull request #1195 from games647/dependabot/maven/production-dependencies-1cdc2e235a
...
Bump the production-dependencies group across 1 directory with 6 updates
2024-04-30 16:03:51 +02:00
games647
20c2126e53
Merge pull request #1191 from games647/dependabot/maven/development-dependencies-35f3e2a187
...
Bump the development-dependencies group with 3 updates
2024-04-30 16:03:13 +02:00
dependabot[bot]
e1335dccfe
Bump the production-dependencies group across 1 directory with 6 updates
...
Bumps the production-dependencies group with 6 updates in the / directory:
| Package | From | To |
| --- | --- | --- |
| [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle ) | `10.12.7` | `10.16.0` |
| [org.projectlombok:lombok](https://github.com/projectlombok/lombok ) | `1.18.30` | `1.18.32` |
| [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin ) | `3.3.0` | `3.4.1` |
| org.slf4j:slf4j-jdk14 | `2.0.11` | `2.0.13` |
| [org.apache.maven.plugins:maven-shade-plugin](https://github.com/apache/maven-shade-plugin ) | `3.5.1` | `3.5.3` |
| [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) | `3.3.2` | `3.3.3` |
Updates `com.puppycrawl.tools:checkstyle` from 10.12.7 to 10.16.0
- [Release notes](https://github.com/checkstyle/checkstyle/releases )
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.12.7...checkstyle-10.16.0 )
Updates `org.projectlombok:lombok` from 1.18.30 to 1.18.32
- [Changelog](https://github.com/projectlombok/lombok/blob/master/doc/changelog.markdown )
- [Commits](https://github.com/projectlombok/lombok/compare/v1.18.30...v1.18.32 )
Updates `org.apache.maven.plugins:maven-jar-plugin` from 3.3.0 to 3.4.1
- [Release notes](https://github.com/apache/maven-jar-plugin/releases )
- [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.3.0...maven-jar-plugin-3.4.1 )
Updates `org.slf4j:slf4j-jdk14` from 2.0.11 to 2.0.13
Updates `org.apache.maven.plugins:maven-shade-plugin` from 3.5.1 to 3.5.3
- [Release notes](https://github.com/apache/maven-shade-plugin/releases )
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.5.1...maven-shade-plugin-3.5.3 )
Updates `org.mariadb.jdbc:mariadb-java-client` from 3.3.2 to 3.3.3
- [Release notes](https://github.com/mariadb-corporation/mariadb-connector-j/releases )
- [Changelog](https://github.com/mariadb-corporation/mariadb-connector-j/blob/master/CHANGELOG.md )
- [Commits](https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.3.2...3.3.3 )
---
updated-dependencies:
- dependency-name: 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-jar-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: org.apache.maven.plugins:maven-shade-plugin
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-patch
dependency-group: production-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
2024-04-30 13:59:35 +00:00
games647
b9e94d3020
Improve threading by making use of green threads with Java 21
...
This is an experiment. The code was checked to keep blocking
of platform threads to a minimum (See [1]). This will keep
overhead to of using threads small while only I/O will
allocate more threads.
The project now uses Multi-Release Jars, so it will detect
correct version during runtime while keeping backwards
compatibility. However, your IDE might be set manually to
Java 21. A multi-project [2] architecture might be necessary,
but not tested if it really fixes it.
[1] https://openjdk.org/jeps/444
[2] https://maven.apache.org/plugins/maven-compiler-plugin/multirelease.html
2024-04-30 15:57:02 +02:00
games647
896e250fa2
Fix setting offline UUID with newer BungeeCord
...
Fixes #1189
Fixes #1193
2024-04-30 10:11:48 +02:00
dependabot[bot]
815ff39c96
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.1 to 5.10.2
- [Release notes](https://github.com/junit-team/junit5/releases )
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.1...r5.10.2 )
Updates `org.mockito:mockito-core` from 5.9.0 to 5.11.0
- [Release notes](https://github.com/mockito/mockito/releases )
- [Commits](https://github.com/mockito/mockito/compare/v5.9.0...v5.11.0 )
Updates `org.bouncycastle:bcprov-jdk18on` from 1.77 to 1.78.1
- [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 >
2024-04-22 07:11:16 +00:00
dependabot[bot]
4100daa22a
Bump advanced-security/maven-dependency-submission-action
...
Bumps [advanced-security/maven-dependency-submission-action](https://github.com/advanced-security/maven-dependency-submission-action ) from 4.0.0 to 4.0.2.
- [Release notes](https://github.com/advanced-security/maven-dependency-submission-action/releases )
- [Commits](https://github.com/advanced-security/maven-dependency-submission-action/compare/v4.0.0...v4.0.2 )
---
updated-dependencies:
- dependency-name: advanced-security/maven-dependency-submission-action
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2024-04-01 07:57:04 +00:00
games647
a65a5f3020
Make ignore states more verbose in Velocity
2024-02-13 16:54:23 +01:00
games647
8a729e069d
Use current link for hastebin
2024-02-13 16:54:22 +01:00
games647
d89d332273
Minor code recommendations
2024-02-13 16:54:22 +01:00
games647
cd3cfef6d4
Do not encapsulate the task twice in Velocity
2024-02-13 16:54:22 +01:00
games647
6ec6e4844d
Bump dependencies
2024-02-13 16:54:22 +01:00
games647
60a65377b8
Hint proxy setup guide and out of date versions
2024-02-13 16:54:22 +01:00
games647
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
dependabot[bot]
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
games647
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
games647
707572a007
Add core module name
2024-01-16 14:08:47 +01:00
games647
108f5ad324
Transform velocity MariaDB transformers too
...
Otherwise, authentication plugin drivers couldn't be found.
2024-01-15 17:01:02 +01:00
games647
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
games647
aece7f855d
Update Java CI version
2024-01-15 16:29:26 +01:00
games647
33b4ac8494
[ci-skip] Fully qualify dependabot versions
2024-01-15 16:29:16 +01:00
games647
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
games647
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
games647
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
games647
0021bc476d
Merge pull request #709 from Smart123s/feature/floodgate/newdb
...
Differentiate Floodgate players in database
2024-01-15 16:22:34 +01:00
dependabot[bot]
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
dependabot[bot]
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
dependabot[bot]
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
games647
434a276d30
Invert if and document migration flow for better readability
2023-12-11 16:16:16 +01:00
games647
485af5e044
Document states
2023-12-11 16:16:16 +01:00
Smart123s
e566740dde
Differentiate Floodgate players during login
2023-12-11 16:16:15 +01:00
Smart123s
db5b818a80
Add Floodgate variable to StoredProfile/Database
2023-12-11 16:16:15 +01:00
Smart123s
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
Smart123s
62ca46fe6a
Add checksytle suppression via comments
2023-12-11 16:16:15 +01:00
games647
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
games647
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
games647
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
dependabot[bot]
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
dependabot[bot]
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
dependabot[bot]
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
games647
e15ea9ce85
Restore support for fully qualified storage drivers
...
Related #1100
2023-10-12 10:47:14 +02:00
games647
70960661b4
[ci-skip] Fix typo in issue templates
2023-10-11 13:42:17 +02:00
games647
ec657faaff
Force lowercase SQL driver name to improve type checks
2023-10-11 13:40:57 +02:00
games647
51898b4b34
Migrate enhancement requests to newer issue templates
2023-10-11 13:28:12 +02:00
games647
e30de1b700
Include CI server in issue template
2023-10-11 13:28:11 +02:00
games647
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
dependabot[bot]
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
games647
ecacd2a715
Update toolchain for Java 21 compiling
2023-10-11 12:37:07 +02:00
SzczurekYT
ea6d4cf2f6
Add proper support for 1.19.3-1.20.1
2023-10-11 12:37:07 +02:00
SzczurekYT
91b05289ad
Add 1.20.2 support
2023-10-11 12:37:07 +02:00
dependabot[bot]
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
games647
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
dependabot[bot]
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
games647
48a92ed35e
Use wildcard exclude patterns
2023-08-31 13:51:42 +02:00
games647
a4eec19f53
[ci-skip] Fix dependency name
2023-08-31 13:19:17 +02:00
games647
32eda941ee
Ignore Hikari and SnakeYAML in dependency updates
2023-08-31 12:42:32 +02:00
games647
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
dependabot[bot]
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
games647
6a68e04c87
Fix grouping for maven packages
2023-08-31 12:18:10 +02:00
games647
b702f48907
Add version number back
2023-08-31 12:14:06 +02:00
games647
159a6ed37c
Add JavaDoc snippets and tiny reformats
2023-08-31 12:08:40 +02:00
games647
b48dfed709
Add NPE check on velocity for logins
2023-08-31 12:08:40 +02:00
games647
2db327ccc4
Group dependency updates together
2023-08-31 12:08:39 +02:00
games647
9d907983a6
Only run CodeQL if successful
2023-08-31 12:08:39 +02:00
games647
4a3d7f448f
Merge pull request #1071 from xrh0905/floodgate_enabled
...
Floodgate enabled
2023-08-31 12:07:53 +02:00
xrh0905
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
games647
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
games647
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
games647
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
games647
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
games647
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
games647
23fec56ecd
Merge branch 'main' into dependabot/maven/org.bouncycastle-bcprov-jdk18on-1.75
2023-07-20 11:57:50 +02:00
games647
5cd10fd795
Run CodeQL after main build to leverage caching
2023-07-17 17:04:28 +02:00
games647
ecbf07c0b2
Manually start build process in CodeQL
2023-07-17 16:26:52 +02:00
games647
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
games647
44d365b15d
Use java dot file to help autobuild select the correct version
2023-07-17 15:52:54 +02:00
games647
610c49d62c
Enable write for dependency graph
2023-07-17 15:49:36 +02:00
games647
dbd12742fa
Only upload dependency graph on push
2023-07-17 15:47:02 +02:00
games647
f2fd51d4e2
Use suggestion dependency version
2023-07-17 15:17:29 +02:00
games647
f9ca318775
Apply Java version selection after CodeQL init
2023-07-17 15:13:40 +02:00
games647
f06ace2f5b
Add dependency graph to help GitHub find dependencies
2023-07-17 15:09:16 +02:00
games647
ee465e381c
Rephrase invalid session warning to make it more clear
2023-07-17 10:10:03 +02:00
games647
6ab81b1a2f
Fix formatting errors
2023-07-17 09:55:24 +02:00
games647
36ee52aa6e
Print out a warning if we detect local IP addresses during connections
...
Reference #1055
2023-07-10 15:52:34 +02:00
dependabot[bot]
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
dependabot[bot]
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
games647
c106089a72
Include updated yaml for older Spigot platforms
...
Fixes #1031
2023-05-22 15:16:42 +02:00
games647
41f83988fe
Fix code style
2023-05-22 14:43:52 +02:00
games647
dc4510aba3
Print an extra warning if the id list is empty.
2023-05-22 10:35:50 +02:00
games647
dd0dd15200
Print an extra warning if the id list is empty.
2023-05-22 10:21:58 +02:00
dependabot[bot]
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
games647
a182976207
Update license date
2023-04-13 12:00:07 +02:00
games647
e8811de62a
Inline paper detection
2023-04-12 16:34:14 +02:00
games647
0aedad8857
Allow to use Java 11 for Velocity
2023-04-12 11:44:09 +02:00
games647
477ec06d55
Encapsulate storage implementation
2023-04-12 11:30:07 +02:00
games647
e5d61101ae
Typo fixes
2023-04-11 10:36:42 +02:00
games647
c12a88966c
Correct CodeQL action runner file
...
This appears to be a standard file name
2023-04-11 10:35:49 +02:00
dependabot[bot]
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
games647
7d7d91f4da
Apply the latest runner recommendations
2023-04-05 10:47:15 +02:00
games647
8447285ef8
Remove redundant cache from action runner
2023-04-05 10:42:03 +02:00
games647
edae388b37
Update Java action version
2023-04-05 10:07:39 +02:00
games647
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
games647
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
games647
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
games647
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
games647
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
dependabot[bot]
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
dependabot[bot]
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
dependabot[bot]
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
games647
730520fd77
Merge branch 'main' into dependabot/maven/org.projectlombok-lombok-1.18.26
2023-04-05 09:47:56 +02:00
games647
652653bc45
Merge branch 'main' into dependabot/maven/org.slf4j-slf4j-jdk14-2.0.7
2023-04-05 09:47:54 +02:00
games647
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
games647
42911e978f
Rephrase auto-login documentation
...
Fixes #465
2023-04-01 14:24:51 +02:00
dependabot[bot]
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
games647
546bbede0b
Fix compatibility with older guava versions like Minecraft < 1.19
2023-03-31 13:06:12 +02:00
games647
487bc24a8a
Fix breaking ProtocolLib Minecraft version change
...
Fixes #1008
2023-03-30 17:26:59 +02:00
games647
23d7594b67
Fix 404 for cracked handling
...
Fixes #998
2023-03-30 17:18:46 +02:00
dependabot[bot]
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
dependabot[bot]
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
games647
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
games647
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
games647
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
games647
6b4a6cb66c
Merge branch 'main' into dependabot/maven/com.puppycrawl.tools-checkstyle-10.9.2
2023-03-24 17:14:34 +01:00
games647
43e507d032
Merge branch 'main' into dependabot/maven/org.mockito-mockito-inline-5.2.0
2023-03-24 17:14:31 +01:00
games647
40b70c367c
Merge branch 'main' into dependabot/github_actions/actions/cache-3.2.6
2023-03-24 17:14:26 +01:00
games647
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
games647
2646ebac40
Revert "Pin the exact geyser version"
...
This reverts commit b20000cae8 .
2023-03-24 17:10:20 +01:00
games647
b20000cae8
Pin the exact geyser version
2023-03-24 17:06:58 +01:00
games647
0adadd02a1
Find the correct floodgate version
2023-03-24 17:03:37 +01:00
games647
28cf02129f
Drop BungeeCordAuthenticator support as it is no longer available
2023-03-24 16:38:07 +01:00
games647
b4ea6f19b5
Update craftapi to Treat FileNotFound as cracked
2023-03-24 16:38:07 +01:00
games647
06c0e64073
Fix packet constructing for < 1.19.3
2023-03-24 16:38:07 +01:00
dependabot[bot]
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
dependabot[bot]
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
dependabot[bot]
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
dependabot[bot]
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
games647
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
dependabot[bot]
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
games647
cb5598f2f4
Fix creating login start packets with ProtocolLib version 5
...
Fixes #955
2022-12-21 11:57:47 +01:00
games647
b242a7b3ce
Update dependencies
2022-12-21 11:56:39 +01:00
games647
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
games647
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
games647
9d99e1e6e0
Merge branch 'main' into dependabot/maven/org.mariadb.jdbc-mariadb-java-client-3.1.0
2022-12-19 09:06:22 +01:00
games647
85f7f9262b
Merge branch 'main' into dependabot/maven/com.puppycrawl.tools-checkstyle-10.5.0
2022-12-19 09:05:22 +01:00
games647
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
dependabot[bot]
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
games647
1038453469
Fix 1.19.3 compat of removed public key on login
...
Fixes #951
2022-12-18 14:15:30 +01:00
games647
ca17c3f377
Fix project building
2022-12-18 14:03:49 +01:00
dependabot[bot]
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
dependabot[bot]
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
games647
2989d9a62d
Dump BungeeCord dependency to the snapshot version
2022-09-22 10:47:59 +02:00
games647
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
Smart123s
2fae5060dc
Change Geyser AuthType classpath
2022-09-21 13:26:35 +02:00
Smart123s
5a29eede69
Bump Geyser version to 2.1.0-SNAPSHOT
2022-09-21 09:46:29 +02:00
games647
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
games647
2e60f9bc15
[ci skip] Highlight that the stats identifier is only 'stats'
2022-08-23 16:18:34 +02:00
games647
ee6aeafafc
Merge pull request #892 from LaboCraft/fix-ProtocolLib-unregister
...
Fix unregister ProtocolLib
2022-08-22 12:19:51 +02:00
games647
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
dependabot[bot]
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
games647
0867719878
Use own config to prevent single redundant loading config after start
...
Fixes #893
2022-08-21 16:20:39 +02:00
Nathan
ace180976d
Fix unregister ProtocolLib
2022-08-17 14:49:38 +02:00
dependabot[bot]
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
games647
feb46399da
Fetch player injection handler by type rather than name
2022-08-12 10:23:42 +02:00
games647
18b0c427c4
Move annotation usage to the jetbrains package
2022-08-12 09:09:52 +02:00
games647
520bb0d761
Reformat work and build files
2022-08-12 09:09:26 +02:00
games647
6fe7eb2c24
Do not set date format for older SQLite versions
...
Fixes #877
2022-08-10 18:20:57 +02:00
games647
ed9e295c1b
Merge pull request #876 from Smart123s/fix/floodgate/plib-chnext
...
Fix Floodgate prefix with ProtocolLib
2022-08-10 16:33:40 +02:00
Smart123s
c8c4aa522d
Remove Floodgate 1.0 warning
...
Floodgate 2.0 has been released a long time ago.
2022-08-09 17:27:29 +02:00
Smart123s
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
Smart123s
61f949cf97
Revert "Fix Floodgate detection for buggy ProtocolLib"
...
This reverts commit 9978fe69
2022-08-09 17:27:28 +02:00
Smart123s
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
Smart123s
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
Smart123s
55e3531718
Extract channel from ProtocolLib event
2022-08-09 16:54:04 +02:00
games647
1694a7a4f3
Do not override driver setting if using the simplified version
2022-08-09 09:25:56 +02:00
dependabot[bot]
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
games647
3244a3ab64
Resolve the mysql driver if using the simplified version
2022-08-08 10:16:12 +02:00
games647
833177933a
Remove and fix storage driver check
2022-08-04 14:28:30 +02:00
games647
091b558826
Allow any newer SQLite version
2022-08-03 13:31:19 +02:00
games647
df5e6db183
Set SQLite setting using the correct data class
...
Fixes #870
2022-08-03 13:21:44 +02:00
games647
845d16dd04
Simplify storage driver setting
2022-08-02 10:40:00 +02:00
games647
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
dependabot[bot]
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
dependabot[bot]
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
dependabot[bot]
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
dependabot[bot]
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
games647
ed45fada59
Update 1.19.1 public key verification
2022-07-28 17:06:06 +02:00
games647
045f980f38
Forward client key even if verification is disabled
2022-07-28 16:26:35 +02:00
games647
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
games647
e3778c865c
Update dependencies
2022-07-28 13:02:58 +02:00
dependabot[bot]
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
games647
c886ccb9ef
Remove commented out code
2022-07-27 14:37:11 +02:00
games647
bbb615bb0f
Merge branch 'tcpshield'
2022-07-27 14:31:55 +02:00
games647
0e1774a175
Comment out potential debug code
2022-07-27 14:30:48 +02:00
games647
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
games647
0e2e431d87
Use the address field for verify task
2022-07-27 14:30:04 +02:00
games647
1e732d62cb
Replace Field- and MethodUtils from breaking changes in ProtocolLib
2022-07-27 10:06:46 +02:00
games647
94979a3cf6
Fix reading username with 1.19 and Floodgate
...
Related #856
2022-07-27 09:34:36 +02:00
games647
564f713fce
Simplify version setting
2022-07-25 16:28:38 +02:00
games647
05708a256c
Perform check for available reflection during compile time
2022-07-25 13:02:30 +02:00
games647
1d45cad2ea
Add connection debug messages for #855
2022-07-25 10:30:48 +02:00
games647
e82e7c7856
Fix manual name change workaround for floodgate with 1.19
...
Fixes #854
2022-07-25 10:27:09 +02:00
games647
8df5b11276
Fix Java 8 API compatibility
2022-07-22 18:46:46 +02:00
games647
c090278f82
Reset Hikari to the Java 8 version
2022-07-22 13:31:43 +02:00
games647
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
games647
bd65c792d0
Use correct generics
2022-07-22 13:26:39 +02:00
games647
79a83ce84d
Throw exception for utilities
2022-07-22 13:26:39 +02:00
games647
9fdbdeaf9a
Use Lombok to create a record-like struct
2022-07-22 13:26:39 +02:00
games647
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
games647
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
games647
f513cffbaf
Migrate tests to use Junit5
2022-07-22 13:24:57 +02:00
games647
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
games647
e338a768ca
Use class loader for loading the session key
...
Related #849
2022-07-17 16:54:06 +02:00
games647
18a8d7a5dc
Replace Guava with Java joiner
2022-07-17 16:54:06 +02:00
games647
6cf1a79ae1
Reset ignore list of dependabot
2022-07-17 16:54:06 +02:00
games647
0e8b51e148
Minimize dependency jars
2022-07-17 16:54:06 +02:00
games647
ef34550a53
Merge pull request #848 from Smart123s/fix/duplicate/forwardccommand
...
Remove duplicate forwardCrackedCommand()
2022-07-15 08:56:45 +02:00
Smart123s
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
games647
423bfa2275
Re-enable force checkstyle check
2022-07-11 13:00:15 +02:00
games647
06b0cf9e02
Merge pull request #779 from Smart123s/feature/codeformatter
...
Add a code formatter
2022-07-11 12:20:42 +02:00
games647
752600f0e2
Fix code formatting according to checkstyle config
2022-07-11 12:14:31 +02:00
Smart123s
cf53ecacdf
Disable hard to meet checkstyle requirements
...
This is temporary.
2022-07-11 12:14:31 +02:00
Smart123s
b740331d31
Add checkstyle.xml
...
Source: 0332cbe0ba/src/main/resources/sun_checks.xml
2022-07-11 12:14:30 +02:00
Smart123s
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
games647
d5d4a32c3f
Fix forwarding the correct player signature
...
Fixes #843
2022-07-11 12:13:36 +02:00
games647
bea3503eff
Merge pull request #821 from games647/809-119-compatibility-1
...
1.19 Support
2022-07-11 09:43:17 +02:00
games647
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
games647
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
games647
b4ddf4fb19
Reduce dependency list to improve on build time
2022-07-08 16:29:25 +02:00
games647
eb47dd3254
Restore compatibility with older Minecraft versions
2022-07-08 16:28:56 +02:00
games647
0b0a46a18a
Make client public key verification optional
2022-07-06 17:08:58 +02:00
games647
7c8de84a34
Bump dependencies
2022-07-06 17:08:57 +02:00
dependabot[bot]
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
games647
339156be18
Use multiple threads to build the project
2022-07-02 12:37:49 +02:00
games647
944db748e8
Upgrade GitHub actions to use Java 18
2022-07-02 12:36:58 +02:00
games647
bb1cbb79f2
Support newer Paper configuration with clearer error messages
2022-06-28 18:40:51 +02:00
games647
cf356099a0
Fix public key timestamp verification.
2022-06-28 18:34:25 +02:00
games647
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
games647
c118430bf5
Kick players using an invalid public key
2022-06-28 18:34:25 +02:00
games647
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
games647
34e63b7eae
Make profile key optional
2022-06-28 18:34:25 +02:00
games647
e8bb3ec7a9
Validate other encryption methods
2022-06-28 18:34:24 +02:00
games647
1d46640b42
Limit length of server keys
2022-06-28 18:34:24 +02:00
games647
a0fddd69aa
Decrease necessary entropy for running tests
2022-06-28 18:34:24 +02:00
games647
700b889aa9
Improve precision and flexibility of encrypt methods
2022-06-28 18:34:24 +02:00
games647
3767b022a9
Migrate to guava hashing to replace unneeded exceptions
2022-06-28 18:34:24 +02:00
games647
11077a002d
Migrate public key to record
2022-06-28 18:34:24 +02:00
games647
d9bf7267a6
Test valid server key pairs
2022-06-28 18:34:23 +02:00
games647
53e6fe6ddf
Missing synchronization access to the username
2022-06-28 18:34:23 +02:00
games647
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
games647
b041a89209
Typo fixes
2022-06-28 18:34:23 +02:00
games647
a5942cba74
Use HTML links
2022-06-28 18:34:23 +02:00
games647
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
games647
0f17fe18f9
Document origin of signing keys
2022-06-28 18:34:22 +02:00
games647
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
games647
bc7c4eea60
Use PublicKey instead of byte representation
2022-06-28 18:34:22 +02:00
games647
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
games647
e85d0d3f0e
Add session key to plugin
2022-06-28 18:34:22 +02:00
games647
d6c6108a7e
Do not modify certificate file during packaging phase
2022-06-28 18:34:22 +02:00
games647
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
games647
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
games647
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
games647
219ebb1248
Bump version
2022-06-28 18:34:21 +02:00
games647
87281be8cf
Fix start packet containing username in 1.19
2022-06-28 18:34:21 +02:00
games647
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
games647
9ba6e9ba90
Add missing license header
2022-06-24 16:28:18 +02:00
games647
f182adc3bc
Add support for RGB colors using the color char
...
Examples include:
`&x00002a00002b&lText`
2022-06-24 16:21:53 +02:00
games647
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
games647
6f9e8a49f1
Add support for checking velocity support with newer paper configs
...
Fixes #802
2022-06-18 21:23:17 +02:00
games647
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
games647
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
games647
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
games647
10785b32ac
Fix anti bot reading the correct values
2022-06-18 18:08:40 +02:00
games647
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
games647
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
games647
fb32f0b386
Bump requried Java version to 17
2022-06-18 16:15:26 +02:00
dependabot[bot]
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
games647
f5ead50441
Fix typo in pull request template
2022-06-18 16:09:44 +02:00
games647
b878ec34c8
Fix Java workflow setup
2022-06-18 16:09:44 +02:00
games647
3d72e77345
Fix Java version name
2022-06-18 16:09:44 +02:00
games647
18bd778b7e
General minor code clean up and typo fixes
2022-06-18 16:09:44 +02:00
games647
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
dependabot[bot]
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
games647
0af22d9927
Merge pull request #811 from Enginecrafter77/main
...
Support for transparent proxies / DNAT
2022-06-11 08:40:48 +02:00
Enginecrafter77
5abd864fa5
fix: Typo in config.yml comment about useProxyAgnosticResolver
2022-06-10 11:55:31 +02:00
Enginecrafter77
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
Enginecrafter77
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
Enginecrafter77
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
Enginecrafter77
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
Enginecrafter77
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
Enginecrafter77
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
games647
6665c0359b
Note latest proxy version
2022-06-08 10:20:15 +02:00
games647
896291be53
Bump BungeeCord required version
...
Fixes #808
2022-06-08 10:08:15 +02:00
games647
5828e1abde
Remove last sodion reference
2022-06-07 18:51:22 +02:00
games647
8d50a14371
Drop SodionAuth plugin, because it's no longer reachable in Maven
2022-06-07 18:26:24 +02:00
games647
0ae18f3ac6
Always log invalid state messages
...
Related #803
Related #806
2022-06-07 18:24:27 +02:00
games647
82d8b4d2be
Fix typo in messages for invalid-request
2022-06-07 18:18:28 +02:00
dependabot[bot]
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
games647
fc50c997ba
Dump craftapi for updated GSON version and allow . in legit usernames
2022-05-21 14:02:37 +02:00
games647
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
games647
16f8a49b4c
Inform users about the delayed session start for proxies
2022-05-20 12:32:58 +02:00
dependabot[bot]
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
games647
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
games647
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
dependabot[bot]
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
dependabot[bot]
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
games647
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
dependabot[bot]
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
games647
f4a3fed017
Highlight build definition
2022-03-30 16:02:52 +02:00
games647
0105c29710
Reduce memory consumption of anti bot feature
2022-03-30 16:02:52 +02:00
games647
d11cd4f9a1
Ignore META-Info in shading
2022-03-30 16:02:52 +02:00
games647
6c0baea278
Make questions section more specific
2022-03-30 16:02:52 +02:00
games647
55270702a5
Document event behavior that is platform specific
2022-03-30 16:02:52 +02:00
games647
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
games647
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
games647
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
dependabot[bot]
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
dependabot[bot]
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
games647
812cf21ad0
Merge pull request #750 from Smart123s/license/autoheader
...
Fix License header
2022-03-14 14:54:17 +01:00
Smart123s
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
Smart123s
a856356c49
Update license headers to 02db104
...
Done using `mvn license:format`
2022-03-13 10:08:57 +01:00
Smart123s
e9ea930be7
Update copyright year in LICENSE
2022-03-13 10:06:17 +01:00
games647
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
dependabot[bot]
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
games647
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
Smart123s
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
Smart123s
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
games647
033fdd55ae
[ci-skip] Update proxy setup guide
2022-02-15 12:01:13 +01:00
games647
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
games647
3665e15920
Add velocity driver hint
...
Related #723
2022-02-09 12:57:14 +01:00
games647
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
Smart123s
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
games647
7a049b98a6
Update distribution
2022-02-07 17:18:10 +01:00
games647
8de1546e7b
Update craftapi to fix broken prevent-proxy api
...
Related #718
2022-02-04 16:37:13 +01:00
dependabot[bot]
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
games647
999738ef3e
Merge pull request #715 from Smart123s/fix/bukkit/noplibload
...
Fix plugin start without ProtocolLib installed
2022-01-29 11:55:55 +01:00
Smart123s
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
games647
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
dependabot[bot]
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
games647
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
games647
3bcc6c2e94
Differentiate between rate limit and IOExceptions
...
(Related #698 )
2022-01-14 14:22:11 +01:00
games647
b351338e0b
Allow disabling anti bot completely
2022-01-14 14:13:43 +01:00
games647
36c9ae2465
Fix rate limiter
...
Time reported by nanoTime is arbitrarily and could include negative numbers
2022-01-14 14:03:14 +01:00
games647
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
games647
17234a791b
Update logging dependency
2022-01-14 12:56:22 +01:00
games647
0e935e3ad0
Fail safe if command is not specified in plugin.yml
2022-01-14 12:53:51 +01:00
games647
52d778afb1
Clean up
2022-01-14 12:52:46 +01:00
games647
e6eb4939b4
Document generics
2022-01-14 12:50:53 +01:00
games647
36337f7feb
Fix potential thread-safety issues in storing the profile
2022-01-14 12:50:07 +01:00
games647
aa51e98fe2
Declare nullable variants using jetbrains annotations
2022-01-14 12:16:30 +01:00
games647
a5c7e7371d
Try out to minimize unnecessary classes from big dependencies
2022-01-14 12:14:22 +01:00
games647
35b493a708
Typo fixes
2022-01-14 12:12:47 +01:00
games647
b02a1a54d9
Add velocity platform to support tickets
2022-01-14 12:02:19 +01:00
games647
253da03f9c
Add missing descriptions
2022-01-14 12:01:25 +01:00
games647
4a5516c9f9
Merge pull request #566 from Smart123s/fg-plib-fix
...
Workaround for Floodgate prefixes with ProtocolLlib
2021-12-23 12:28:15 +01:00
games647
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
dependabot[bot]
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
Smart123s
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
Smart123s
b92911bf26
Made floodgatePrefixWorkaround configurable
2021-12-09 18:03:29 +01:00
Smart123s
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
games647
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
Smart123s
8c33813e45
Update to Geyser 2.0 API
2021-12-06 19:22:54 +01:00
games647
95251b611a
Initialize logger factory by doing a first call to it
...
Related #670
2021-12-03 10:22:33 +01:00
games647
6c47abc76d
Update dependencies
2021-12-03 09:46:26 +01:00
games647
9c2068032f
Remove duplicate dependency
2021-12-03 09:46:26 +01:00
games647
2110e93bd6
Override slf4j transitive dependency from paper
...
Fixes #670
2021-12-03 09:46:25 +01:00
games647
7439a95e16
Reduce the amount of necessary dependencies by dropping transitive ones
2021-12-02 14:40:29 +01:00
games647
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
games647
829ba79400
Merge pull request #659 from AlbeMiglio/main
...
Added latest Guava and SLF4J compatibility
2021-12-01 16:34:14 +01:00
games647
1dd27ff529
Restore 1.8 compatibility by shading guava in Spigot versions
2021-12-01 16:29:37 +01:00
Alberto Migliorato
2cdfdcb5c5
Added latest Guava and SLF4J compatibility
...
(1.18+ breaks support to older guava methods)
2021-12-01 01:12:38 +01:00
Oldřich Jedlička
15fee92937
Detect enabled Velocity support in server
2021-11-29 13:12:19 +01:00
games647
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
games647
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
dependabot[bot]
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
dependabot[bot]
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
games647
10a7b01bc7
Merge branch 'Smart123s-feature/geyser/allowOfflineNameConflict'
2021-11-28 13:45:33 +01:00
Smart123s
909f263189
Update GH Actions to build with Java 16
2021-11-28 13:45:25 +01:00
Smart123s
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
Smart123s
d0a7832929
Remove unused Floodgate 1.0 dependency
2021-11-28 13:44:57 +01:00
Smart123s
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
Smart123s
af0bc34255
Use local Floodgate instance
...
Shortens code and fixes an unused warning
2021-11-28 13:44:57 +01:00
Smart123s
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
Smart123s
f76c7bd62f
Create generalized BedrockService class
2021-11-28 13:44:57 +01:00
Smart123s
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
Smart123s
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
games647
5612ca744b
Fix relocating mariadb driver in Velocity
...
Fixes #643
2021-11-04 10:29:57 +01:00
games647
d2c94af4a7
Merge pull request #636 from Smart123s/fix/floodgate/pluginmessage
...
Fix "No Session" in plugin messaging
2021-10-24 20:23:53 +02:00
Smart123s
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
games647
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
Smart123s
9978fe69d5
Fix Floodgate detection for buggy ProtocolLib
2021-10-23 15:56:16 +02:00
Smart123s
94299d2547
Prefixed names for packet level Floodgate checks
2021-10-23 13:24:40 +02:00
games647
ef6f0fc436
Fix detecting floodgate on plugin name
...
Floodgate's name is lowercase
Related #630
2021-10-11 16:09:24 +02:00
games647
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
Krakenied
d7e0a4469f
Fix #627 - skip Floodgate config validation if there's no Floodgate installed
...
Fix BungeeManager NPE
2021-10-09 19:52:26 +02:00
games647
28480a0f01
Add floodgate service to Bungee
2021-10-05 15:42:40 +02:00
games647
a3bf875976
Encapsulate floodgate hooks
...
Related #619
Related #620
2021-10-05 15:35:43 +02:00
games647
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
BOT-Neil
8490ff628c
Update JoinManagement.java
2021-10-01 17:15:05 +02:00
BOT-Neil
0d7b8e237d
Update JoinManagement.java
...
dont check for empty prefixes
2021-10-01 13:29:02 +02:00
games647
8b4d4586a7
Fix compiling
2021-09-23 14:56:30 +02:00
games647
cd55441e4e
Allow configuring SSL requirements for MySQL instances
...
Fixes #433
2021-09-23 14:55:23 +02:00
games647
17ecb186a5
Require full verification if SSL is enabled in MySQL
2021-09-23 14:43:24 +02:00
games647
aaff7710e0
Merge pull request #612 from juanmuscaria/main
...
Velocity support
2021-09-22 12:47:21 +02:00
games647
37ac04c8ed
Reformat
2021-09-22 12:13:33 +02:00
games647
c2ec8c93b0
Use the MariaDB driver for a smaller footprint
2021-09-22 12:03:44 +02:00
games647
665881d19a
Exclude gson already present in velocity
2021-09-22 12:01:08 +02:00
games647
5192b98d78
Use java runner for cache
2021-09-22 11:48:59 +02:00
juanmuscaria
709edc6c0a
Added comment to the config to notify about the different driver name
2021-09-17 10:04:05 -03:00
juanmuscaria
c458bd383a
Only remove the texture property from the player profile if forwardSkin is disabled
2021-09-17 10:00:45 -03:00
juanmuscaria
64fbbf759f
Actually handle proxy shutdown this time
2021-09-17 09:45:09 -03:00
juanmuscaria
20379d13b2
Commented why org.slf4j is excluded from the final jar
2021-09-17 09:40:12 -03:00
juanmuscaria
310ef4068c
Make PROXY_ID_fILE static
2021-09-17 09:37:50 -03:00
juanmuscaria
bc4d9857b4
Ops, printing exception directly
2021-09-17 09:36:51 -03:00
juanmuscaria
d0491d44ec
Remove left over assertion
2021-09-17 09:35:07 -03:00
juanmuscaria
7ade127888
Relocate the MySql Driver
2021-09-16 13:42:36 -03:00
juanmuscaria
68a783bd40
Use path directly for loading the proxy uuid
2021-09-16 13:25:35 -03:00
juanmuscaria
352702eae4
Some code formatting and cleanup
2021-09-15 20:08:03 -03:00
juanmuscaria
b6dfa4802a
Removed old FIXME and added a new TODO
2021-09-15 19:58:29 -03:00
juanmuscaria
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
juanmuscaria
4befb35af9
Added a way to generate or use a predefined proxy uuid.
2021-09-15 19:58:29 -03:00
juanmuscaria
01632ec125
Cleanup unused imports
2021-09-15 15:44:51 -03:00
juanmuscaria
268c70bc51
Use org.slf4j.Logger directly
2021-09-15 13:54:28 -03:00
Enrique García
ec7c421f83
[Security] Check if cracked user have the Floodgate prefix ( #614 )
2021-09-15 16:50:55 +02:00
juanmuscaria
f82c85d3eb
Ops, seems like velocity repo already mirrors the latest driver.
2021-09-14 12:29:49 -03:00
juanmuscaria
6e318ba9bb
Use logger for exceptions
2021-09-14 12:26:52 -03:00
juanmuscaria
89d03bcc6b
I missed that there was an alternative for bungee in the documentation
2021-09-14 12:22:22 -03:00
juanmuscaria
502b16a0e7
Fill all plugin metadata properly.
2021-09-14 12:12:04 -03:00
juanmuscaria
de0655cba2
Changed the database driver to mysql
2021-09-14 11:59:22 -03:00
juanmuscaria
0e7d8a595d
Added missing license header for some classes.
2021-09-14 11:36:26 -03:00
juanmuscaria
7178ea4587
Seems like this is generated automatically.
2021-09-13 21:29:56 -03:00
juanmuscaria
e639e29dee
Partial velocity support.
2021-09-13 21:24:46 -03:00
games647
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
games647
47ee2cf458
[ci skip] Merge pull request #609 from cmod31/patch-1
...
BungeeCord/Waterfall section
2021-08-29 10:56:32 +02:00
cmod31
d564d74443
BungeeCord/Waterfall section
...
Added some detail.
issue #607
2021-08-29 10:47:05 +02:00
Smart123s
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
games647
172efafc2b
Merge pull request #602 from Smart123s/fg-bungee-handshake
...
Fix plugin messages for Floodgate players
2021-08-23 17:17:56 +02:00
Smart123s
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
Smart123s
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
Smart123s
f39c3a1ea6
Update Floodgate repository
2021-08-20 11:49:54 +02:00
games647
7dd0aa5bca
Limit parallelism to one thread for SQLite
...
Fixes #596
2021-08-14 17:54:57 +02:00
games647
f8fe3d7d71
Do not silence exceptions for Floodgate
2021-08-12 20:39:14 +02:00
games647
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
dependabot[bot]
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
games647
6e0272d92c
Fix receiving login packet twice with ProtocolLib
...
Fixes #578
Commit that introduces the bug:
1f4757669c
2021-07-16 14:24:17 +02:00
games647
758ccb9bf2
Clean up
2021-07-14 16:33:31 +02:00
games647
0515ac193d
Extract protocollib method detection
2021-07-14 16:33:18 +02:00
games647
864e551a88
Disable verbose verification output
...
NameChange fix is resolved
2021-07-14 16:32:32 +02:00
games647
0a24d36ef8
[ci skip] Rephrase development build section
...
Fixes #576
2021-07-12 17:25:52 +02:00
games647
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
MAX_小葵
ae66f1ab35
Update plugin SodionAuth's link
2021-07-10 22:04:54 +08:00
games647
ed725d991e
[ci skip] Show user clickable links
2021-07-06 11:25:52 +02:00
games647
e45d4b3482
[ci skip] Require what happened form
2021-07-06 11:20:36 +02:00
games647
b5b5faaefb
[ci skip] Add feedback message to forms
2021-06-30 17:23:54 +02:00
games647
51a28ae93f
[CI-SKIP] Fix issue template syntax
2021-06-30 17:04:16 +02:00
games647
d2fcdade0b
[CI-SKIP] Try out issue forms
2021-06-30 17:02:19 +02:00
games647
cde045d6fd
Only build for main branches to fix duplicate actions with dependabot
2021-06-29 12:55:37 +02:00
games647
ccdc455ce9
Clarify naming and structure
2021-06-22 14:07:47 +02:00
games647
4e1f5e9401
Add icons to issue templates
2021-06-22 13:25:57 +02:00
games647
2e64b52261
Migrate questions to discussions
2021-06-22 13:25:41 +02:00
games647
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
games647
496817afca
Increase the rate limit for bigger servers
...
Related #406
2021-06-21 18:00:45 +02:00
games647
daf6f06a00
Name anti-bot feature explicitly for own rate limiting
2021-06-21 17:33:38 +02:00
games647
4be0e1333d
[CI-SKIP] Add issue template descriptions
2021-06-21 17:08:20 +02:00
games647
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
games647
9f89756820
Disable plugin if dependencies not available
...
Related #554
2021-06-21 17:08:20 +02:00
games647
d1daec436c
Merge pull request #559 from Smart123s/fg2-ln-autoreg
...
Add 'linked' option to 'autoRegisterFloodgate'
2021-06-21 16:31:25 +02:00
Smart123s
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
games647
5607a19312
Merge pull request #560 from Smart123s/fg-player-to-account
...
Update messages
2021-06-21 14:30:46 +02:00
games647
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
dependabot[bot]
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
Smart123s
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
Smart123s
33261b9ea6
Floodgate 2.0 is no longer in a seperate branch
2021-06-20 17:37:18 +02:00
games647
5442f773ae
Merge pull request #558 from Smart123s/fg-sharedtask
...
Add Floodgate config options for BungeeCord
2021-06-20 14:03:45 +02:00
Smart123s
fd3da28bec
Use Override for non core code in FloodgateAuthTas
2021-06-20 13:35:31 +02:00
Smart123s
9350f52916
Create a seperate function for isNameCheckRequired
2021-06-20 13:23:51 +02:00
Smart123s
7c2bb9c9a4
Don't spam log when with unregistered floodgate
2021-06-20 13:05:04 +02:00
Smart123s
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
Smart123s
ed627ce438
Add autoLogin and register for Floodgate Bungee
2021-06-20 11:26:14 +02:00
Smart123s
af83604c94
Remove existing Floodgate integration from Bungee
2021-06-20 11:26:13 +02:00
Smart123s
8f43cc0978
Partially move FloodgateAuthTask to Core
...
The moved code can be used in a BungeeCord implementation
2021-06-20 11:26:13 +02:00
games647
578028719f
Merge pull request #556 from Smart123s/patch-5
...
FloodgateNameConflict no longer needs autoLogin
2021-06-19 10:43:09 +02:00
Péter Tombor
b87b59be12
FloodgateNameConflict no longer needs autoLogin
...
The removed line is not valid after 1f3cd5fa5b
2021-06-18 23:25:46 +02:00
games647
f17f9d983a
Merge pull request #551 from games647/codeql
...
CodeQL Test
2021-06-17 14:52:09 +02:00
games647
6cbd64b06d
Cache autobuild process
2021-06-17 14:23:18 +02:00
games647
8d588ff7db
Document codeql workflow file
2021-06-17 14:23:17 +02:00
games647
92e05c460f
Create CodeQL scanning workflow
2021-06-17 14:23:17 +02:00
games647
b9011b6141
Add support for 1.17
...
Fixes #552
2021-06-15 20:46:25 +02:00
games647
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
games647
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
Smart123s
2e83eaaa81
Remove unused import
2021-06-14 19:42:56 +02:00
Smart123s
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
Smart123s
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
Smart123s
235d7f8d80
Add 'no-conflict' as an option to config.yml value checking
2021-06-14 19:16:04 +02:00
Smart123s
dbf10f4767
Remove unnecessary whitespaces
2021-06-14 19:16:02 +02:00
Smart123s
fed1e91b28
Document 'no-conflict' in config.yml
2021-06-14 19:09:54 +02:00
Smart123s
dc8dd13d5b
Expand possible values in config.yml
2021-06-14 19:09:54 +02:00
Smart123s
165e5fe856
Add 'no-conflict' option to some Floodgate config entries
2021-06-14 19:09:43 +02:00
games647
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
games647
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
games647
11c38bdb15
Set required distribution name
2021-06-14 10:35:10 +02:00
dependabot[bot]
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
games647
edb4179ba6
Ignore provided guava dependency
2021-06-13 20:06:44 +02:00
games647
e0ddfec921
Drop not needed specific time and number limits
2021-06-13 20:06:44 +02:00
games647
b2fef5e6d6
Update GitHub actions with dependabot too
2021-06-13 20:06:44 +02:00
games647
02db1041e2
Be explicit about the license name
2021-06-13 20:06:43 +02:00
games647
04428fe146
Merge pull request #543 from Smart123s/fix-warnings
...
Get rid of several warning messages
2021-06-13 19:42:20 +02:00
Smart123s
9656aadb35
Remove unused imports
2021-06-13 16:50:36 +02:00
Smart123s
c0d21fdca2
Remove 'handlerFound' from ConnectListener
2021-06-13 16:48:01 +02:00
Smart123s
c1cf80fe28
Remove 'initialHandlerClazzFound' from ConnectL...
2021-06-13 16:44:57 +02:00
Smart123s
9acab1e453
Don't store 'floodgateVersion' in ConnectListener
2021-06-13 16:43:38 +02:00
Smart123s
d51335c6de
Don't store 'ultraAuthPlugin'
2021-06-13 16:36:04 +02:00
Smart123s
2fdcc34575
Don't store 'plugin' in BukkitScheduler
2021-06-13 16:33:47 +02:00
Smart123s
66a51a8e13
Remove unused 'serverId' from BukkitLoginSession
2021-06-13 16:31:39 +02:00
Smart123s
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
games647
d1109ac75e
Merge pull request #542 from Smart123s/patch-4
...
Add license header to FloodgateAuthTask.java
2021-06-12 20:08:30 +02:00
Smart123s
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
Smart123s
ee2b3a37f8
Move Floodgate name conflict check to Core
2021-06-12 19:57:31 +02:00
Smart123s
0e8ad6e318
Add license header to FloodgateHook.java
2021-06-12 19:56:36 +02:00
Péter Tombor
bc8fffe063
Add license header to FloodgateAuthTask.java
2021-06-12 19:51:15 +02:00
Smart123s
757d0ef991
Fix & Move allowFloodgateNameConflict=linked
2021-06-05 18:43:23 +02:00
Smart123s
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
Smart123s
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
Smart123s
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
games647
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
Péter Tombor
0d5413d402
Warn in config: linked players conflict their Java name
2021-05-22 21:17:11 +02:00
games647
119b9cb000
Merge pull request #494 from Smart123s/main
...
Floodgate support for Bukkit
2021-05-16 20:50:53 +02:00
Smart123s
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
Smart123s
b2b61539e1
Revert "Move Floodgate conflict chechking to core"
...
This reverts commit b0ef1a59ac .
2021-05-16 17:54:50 +02:00
Smart123s
b9dd921885
Change plugin.yml to softepend on Floodgate 2.0
...
Rebased to remove Bungee related changes
2021-05-16 17:53:22 +02:00
games647
6b20b71403
Merge pull request #530 from Smart123s/patch-2
...
Change dependency Floodgate Bungee to API
2021-05-16 16:08:14 +02:00
Péter Tombor
40b9405c1d
Change dependency Floodgate Bungee to API
...
Same functionality, less code to be downloaded.
2021-05-15 11:58:43 +02:00
games647
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
Péter Tombor
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
games647
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
TechnicallyCoded
2700b3ee0e
Implement floodgate api version 2.0
2021-05-12 11:49:15 +02:00
Smart123s
5858bfb443
Add Floodgate name conflict check to ProtocolSupport
2021-05-09 11:10:10 +02:00
Smart123s
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
Smart123s
25254b2393
Add vscode to .gitignore
2021-05-09 09:09:52 +02:00
Smart123s
08b864220d
Merge branch 'main' of https://github.com/games647/FastLogin
2021-05-09 09:06:59 +02:00
games647
dbe9ac2903
Merge pull request #525 from Smart123s/fg2-bc
...
Fix Floodgate 2.0 on BungeeCord
2021-05-08 19:18:24 +02:00
Smart123s
1b7b2ff2b5
Add support for Floodgate 2.0
2021-05-08 16:26:58 +02:00
Smart123s
d01c368cdb
Fix identation in bukkit/pom.xml
2021-05-08 14:46:00 +02:00
Smart123s
75750f8417
Apostrophes are no longer necessary in config.yml
2021-05-08 14:20:56 +02:00
Smart123s
85a1abfaac
Describe how UUIDs work for 'allowFloodgateNameConflict' in config.yml
2021-05-08 13:38:38 +02:00
Smart123s
5a263956fe
Fixed Java auto login/register
2021-05-06 11:56:24 +02:00
games647
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
dependabot-preview[bot]
7fe6d0ae2b
Upgrade to GitHub-native Dependabot
2021-04-29 15:33:48 +00:00
dependabot-preview[bot]
d3be664c3d
Merge pull request #517 from games647/dependabot/maven/com.mycila-license-maven-plugin-4.1
2021-04-28 07:49:29 +00:00
dependabot-preview[bot]
1edfc83e65
Merge pull request #518 from games647/dependabot/maven/junit-junit-4.13.2
2021-04-28 07:44:10 +00:00
dependabot-preview[bot]
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
dependabot-preview[bot]
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
Smart123s
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
Smart123s
a078bb8214
Add missing return
2021-04-11 10:13:43 +02:00
games647
7192dcdf07
Merge pull request #504 from InkerBot/main
...
Add SodionAuthBungee support
2021-04-07 10:48:56 +02:00
墨水瓶Official
2c3fd4a575
Return when first auth plugin found
2021-04-07 00:30:11 +08:00
墨水瓶Official
ab1d3ded63
Fix errors
2021-04-07 00:12:58 +08:00
墨水瓶Official
83a6cb4bb4
Add log info and fix errors
2021-04-07 00:11:22 +08:00
InkerBot
fd045e9ed7
Add SodionAuth softDepend
2021-04-06 22:16:27 +08:00
InkerBot
fb98dd8393
Void "Hook" in plugin name
2021-04-06 22:07:26 +08:00
InkerBot
f766e6213e
Use a loop to hook AuthPlugin
2021-04-06 21:58:53 +08:00
InkerBot
68d23e127a
Bump SodionAuth version and fix errors.
2021-04-06 21:28:36 +08:00
InkerBot
8837a1b70e
Bump SodionAuth version and fix errors.
2021-04-06 21:27:25 +08:00
dependabot-preview[bot]
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
InkerBot
ea894b3a7b
Add SodionAuthBungee hook
2021-04-06 00:31:17 +08:00
InkerBot
0c45c30d2f
Bump SodionAuth version
2021-04-06 00:30:18 +08:00
dependabot-preview[bot]
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
games647
d6a02aa538
Apply license headers to every file
...
(Related #494 )
2021-04-05 11:04:42 +02:00
Smart123s
9e8a9508d7
Re-use FloodgatePlayer in FloodgateAuthTask
2021-03-30 20:03:09 +02:00
Smart123s
600f484963
Added function isValidConfigValue()
2021-03-30 20:00:21 +02:00
Smart123s
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
games647
c3c0827cfc
Drop duplicate package goal
2021-03-29 15:19:53 +02:00
Smart123s
870d1ee281
Migrate to Floodgate v2.0
...
This removes support for Floodgate 1.x
2021-03-29 14:49:33 +02:00
games647
e0790965ec
Catch NoSuchMethodError
...
Fixes #499
2021-03-29 11:56:02 +02:00
games647
4bc328c37c
Fail safely if BungeeCord implementation specific classes are not found
2021-03-29 11:56:02 +02:00
games647
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
Smart123s
f7fd94e983
Update config comments
2021-03-22 21:25:27 +01:00
Smart123s
d8b9822c11
Fix "Asynchronous player kick"
2021-03-22 20:46:49 +01:00
Smart123s
e2e4e76fd9
Moved getGeyserPlayer() to the only class it's used in
2021-03-22 20:35:22 +01:00
Smart123s
f9992f1447
Fixed 'allowFloodgateNameConflict' for 'false' value.
2021-03-22 19:57:13 +01:00
Smart123s
5d94e610ff
Create a profile for Bedrock players when registering
2021-03-22 19:51:46 +01:00
Smart123s
9abc99ebc2
Use UUID instead of name when checking for Geyser player
2021-03-22 18:37:12 +01:00
Smart123s
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
Smart123s
305700497e
Re-added an empty line (deleted by mistake)
2021-03-22 11:43:30 +01:00
Smart123s
8c8ed0b639
Made FloodgateAuth async
2021-03-22 10:16:23 +01:00
Smart123s
ee2ae7f9fd
Use authPlugin.isRegistered() instead of profile.isSaved()
2021-03-21 19:21:49 +01:00
Smart123s
3e9e433736
Move dependencies
2021-03-21 11:07:18 +01:00
Smart123s
c41896e5f2
Use isPluginEnabled() in NameCheckTask.java
2021-03-21 11:02:29 +01:00
Péter Tombor
78f897a490
Use isPluginEnabled() in ConnectionListener.java
...
Co-authored-by: games647 <games647@users.noreply.github.com >
2021-03-21 10:59:58 +01:00
Smart123s
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
Smart123s
a23f846146
Implement allowFloodgateNameConflict
...
Check config.yml for details.
2021-03-20 17:16:55 +01:00
Smart123s
0206a6c5a4
Added new config options (not yet implemented)
2021-03-20 15:37:37 +01:00
Smart123s
6544e007f6
Code cleanup
2021-03-20 14:41:21 +01:00
Smart123s
0cbf2a4e20
Check if Geyser and Floodgate are installed before accessing them
2021-03-20 13:38:41 +01:00
Smart123s
57e797f1be
Implement auto login for Floodgate players
...
This is buggy in most cases.
2021-03-20 12:22:41 +01:00
Smart123s
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
dependabot-preview[bot]
176781d55a
Merge pull request #474 from games647/dependabot/maven/de.xxschrandxx.bca-BungeeCordAuthenticator-0.0.2
2021-03-17 15:41:41 +00:00
games647
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
dependabot-preview[bot]
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
dependabot-preview[bot]
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
games647
ff2e5c0435
Drop package goal for the core module
2021-02-18 18:25:37 +01:00
games647
30c233c953
Fix workflow version
2021-02-18 18:21:32 +01:00
games647
6fd81e8e29
Sort supported list alphabetically
2021-02-18 18:17:52 +01:00
games647
4765372b0a
Add BungeeAuthenticator and UserLogin
2021-02-18 18:16:06 +01:00
games647
303c064416
Check for valid file access first
2021-02-14 17:06:44 +01:00
games647
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
games647
25356db175
Clean up CI
2021-02-09 16:33:37 +01:00
games647
465519eece
Ignore the correct channel
2021-02-09 16:33:37 +01:00
games647
16f131ee2d
Limit expire timer
2021-02-09 16:33:36 +01:00
games647
43046bea97
Fix branch references
2021-02-09 16:33:36 +01:00
xXSchrandXx
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
dependabot-preview[bot]
28fb40d063
Merge pull request #453 from games647/dependabot/maven/com.zaxxer-HikariCP-4.0.1
2021-02-09 12:36:45 +00:00
games647
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
Kamilkime
c079653d09
Always return true when registering with AuthMe
2021-02-09 10:42:10 +01:00
Kamilkime
7fbfa8240c
Allow FastLogin to respect AuthMe pre IP register limit, fixes #458
2021-02-09 01:28:12 +01:00
Kamilkime
1ab346d067
Correct name check on PaperSpigot, fixes #423 , fixes #437 , fixes #457
2021-02-09 00:28:05 +01:00
dependabot-preview[bot]
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
games647
9ff404a424
Update CI workflow
2020-11-10 12:33:31 +01:00
games647
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
Kamilkime
1f63f91f17
Add comments, make cipher variable names clearer
2020-11-09 13:25:16 +01:00
Kamilkime
71d84d1748
Make encryption method reflections static
2020-11-08 17:15:26 +01:00
Kamilkime
64072d84d8
Update encryption to handle MC 1.16.4, fixes #412
2020-11-08 03:52:39 +01:00
dependabot-preview[bot]
f2441ecc15
Merge pull request #408 from games647/dependabot/maven/junit-junit-4.13.1
2020-11-04 11:18:44 +00:00
games647
fe1499f1fb
Add support for 1.16.4
...
Fixes #412
Fixes #411
2020-11-04 11:05:34 +01:00
dependabot-preview[bot]
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
games647
d034e71331
Do not move and create a new proxy file
...
Fixes #389
2020-08-06 10:10:00 +02:00
games647
7e43b99f91
[CI-SKIP] Dump placeholderapi to prevent deprecates on register
2020-08-03 21:06:22 +02:00
games647
496a036fb4
Merge pull request #385 from ishlandbukkit/master
...
Add SodionAuthHook
2020-08-02 17:17:58 +02:00
games647
fa1f85698a
Fix NoSuchMethodError for PlaceholderAPI after breaking change
...
Fixes #386
2020-07-31 17:02:51 +02:00
games647
25b6ca7653
Convert proxy file to the new name
2020-07-31 17:02:51 +02:00
games647
b30eb0de29
Debug verified username usage in ProtocolLib
2020-07-31 17:02:51 +02:00
games647
c96d64597a
Clear proxies file name
2020-07-31 17:02:51 +02:00
games647
0ef2000f2a
Rename rate limit to join limit
2020-07-31 17:02:51 +02:00
ishland
a36ac7f9e3
Remove unneeded SodionAuth-Libs
2020-07-29 16:11:41 +08:00
ishland
2e38550db0
I figured it out FINALLY
2020-07-29 16:07:24 +08:00
ishland
4e2b6c7810
Use JitPack and update API reference
2020-07-29 10:58:04 +08:00
ishland
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
Gabriele C
cae2f8f58d
Implement FastLoginPremiumToggleEvent
2020-06-27 13:58:38 +02:00
games647
de1487b6aa
Fix driver warning message not displaying
2020-06-06 18:38:51 +02:00
games647
96cdac1332
Ignore proxied bedrock players ( Fixes #328 )
2020-06-06 18:32:08 +02:00
games647
2601fea84f
Drop no longer needed uuid getter
2020-06-06 16:29:52 +02:00
games647
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
games647
286b755ee3
Log player handling
...
Related #354
2020-05-23 21:40:10 +02:00
games647
5c5b7384a4
Better explain anti bot configuration values
2020-05-21 10:25:01 +02:00
games647
7c125dc0b6
Add more debugging messages for delayed proxy logins
...
Related #352
2020-05-21 10:03:56 +02:00
games647
103a8320ec
Log requested premium logins
2020-05-20 19:50:22 +02:00
games647
49df461643
Reduce work threads, because processing is async
2020-05-19 11:47:08 +02:00
games647
3b69904257
Extract login decryption int utilities
2020-05-19 11:46:10 +02:00
games647
b41d56f835
Fix reflection access
2020-05-19 09:57:39 +02:00
games647
b1797c84d9
Prevent duplicate save requests
2020-05-18 16:10:39 +02:00
games647
9941a69c6d
Use invokeExact for better performance
2020-05-18 13:21:07 +02:00
games647
0ee269785a
Set UUIDs using MethodHandles
2020-05-18 12:12:51 +02:00
games647
c74c8f5fee
Throw exception on unexpected UUIDs
2020-05-15 15:14:14 +02:00
games647
0ad3a853b5
Guard against any potential modifications for UUID changes
...
Related #344
2020-05-15 14:49:49 +02:00
games647
42637813e8
Add missing cases from last commit
2020-05-15 14:44:31 +02:00
games647
feee64309e
Warn if FastLogin doesn't login authenticated players
...
Related #351
2020-05-15 14:38:22 +02:00
games647
b9cf8f0498
Log setting the offline UUID on Bungee
...
Related #344
2020-05-15 14:12:18 +02:00
games647
30a763dbc4
Add introduction about closing issues
2020-05-14 15:11:01 +02:00
games647
42790b27f8
Unregister variable on disable
2020-05-14 13:45:23 +02:00
games647
c58eda983a
Fix parsing of placeholder status
...
Fixes #341
2020-05-14 13:41:32 +02:00
games647
477d3df1dd
Favor nano time, because it's monotonic
2020-05-13 22:40:26 +02:00
games647
c1dc69845e
[Experimental] Enable paranoid to hide MySQL details
2020-05-13 21:27:53 +02:00
games647
c3f6881e4b
Add missing default values for the rate limiter
2020-05-13 19:51:05 +02:00
games647
25b380f74a
Add a basic rate limiter for incoming connections
...
Related #347
2020-05-13 19:47:02 +02:00
games647
a5777869c8
Re-order driver specific properties
2020-05-13 19:46:02 +02:00
games647
cf3e8434a2
Prefer more MySQL performance optimizations
2020-05-13 19:46:02 +02:00
dependabot-preview[bot]
5881be9b78
Merge pull request #348 from games647/dependabot/maven/com.zaxxer-HikariCP-3.4.5
2020-05-12 14:22:39 +00:00
dependabot-preview[bot]
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
games647
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
games647
b6a95bb153
Delay force login command for async logins on Paper from Bungee
...
Related #331
2020-05-07 16:25:10 +02:00
dependabot-preview[bot]
9bae5c3f79
Merge pull request #339 from games647/dependabot/maven/me.clip-placeholderapi-2.10.6
2020-05-05 11:46:47 +00:00
dependabot-preview[bot]
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
dependabot-preview[bot]
d829c71438
Merge pull request #334 from games647/dependabot/maven/com.zaxxer-HikariCP-3.4.3
2020-04-29 10:36:11 +00:00
dependabot-preview[bot]
9cf5431d1a
Merge pull request #335 from games647/dependabot/maven/com.lenis0012.bukkit-loginsecurity-3.0.2
2020-04-28 08:36:50 +00:00
dependabot-preview[bot]
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
dependabot-preview[bot]
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
dependabot-preview[bot]
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
dependabot-preview[bot]
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
games647
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
games647
6f99b6e9b4
Add explicit Junit dependency
2020-03-20 16:13:45 +01:00
games647
109e19e6da
Add missing synchronized modifiers
2020-03-20 16:13:45 +01:00
games647
65469ed579
Make scheduler platform dependent
2020-03-20 13:44:58 +01:00
games647
8ecb5657d3
Drop nullable annotation usage to compile
...
Thanks CI
2020-03-14 19:06:05 +01:00
games647
b0cf6e39c7
Drop forced dependency
2020-03-14 19:01:09 +01:00
games647
88a526b5bf
Drop support for Minecraft 1.7
2020-03-14 18:51:27 +01:00
games647
57b84509da
Limit the total number of running threads
...
(Related #304 )
2020-03-14 18:20:34 +01:00
games647
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
games647
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
dependabot-preview[bot]
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
dependabot-preview[bot]
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
dependabot-preview[bot]
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
games647
fdc0485f05
[CI-SKIP] Use HTTPS and newer URLs in Maven
2020-03-03 10:50:48 +01:00
games647
1068ddbadd
Enable Maven cache for runner
2020-03-03 10:47:55 +01:00
games647
b0d5bd606c
Rework issue templates
2020-03-03 10:47:37 +01:00
games647
1e59101ada
Enable MySQL storage caching
2020-03-03 10:46:43 +01:00
games647
46ac3c74e4
Fix Java setup action version
2020-02-17 15:28:58 +01:00
games647
d22af0f42e
Fix unique name
2020-02-17 15:24:45 +01:00
games647
2cc078773b
Migrate to GitHub actions
2020-02-17 15:18:58 +01:00
games647
c1b8b60bf7
Use HTTPS for code comments too
2020-02-12 10:59:11 +01:00
games647
c54d6eecfc
Merge branch 'JLLeitschuh/fix/JLL/use_https_to_resolve_dependencies'
2020-02-12 10:57:30 +01:00
Jonathan Leitschuh
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
games647
282467d21b
Set a default kick reason if nothing is specified
2020-01-08 10:44:10 +01:00
games647
e8a5dc7433
Use BungeeCord event methods for kicking the player
2020-01-07 20:35:16 +01:00
games647
4b45932d6a
Migrate to asynchronous calls to LoginSecurity
...
(Fixes #290 )
2020-01-06 10:04:44 +01:00
games647
1375cf3997
Fix ProtocolLib version
2019-12-29 13:35:33 +01:00
games647
5a5cf016d9
Remove on blacklist status on join too
2019-12-29 13:33:18 +01:00
games647
2c7e569653
Fix force login events being sync instead of async ( Fixes #278 )
2019-11-09 13:57:12 +01:00
games647
94c5fe302e
Merge pull request #277 from FearGames/master
...
Fix build and add events
2019-11-02 16:41:43 +01:00
Gabriele C
c80012ddb1
Allow multi-line messages
2019-10-25 11:54:26 +02:00
Gabriele C
17361b1b54
Implement PreLogin and AutoLogin events
2019-10-23 14:45:51 +02:00
Gabriele C
426b458a58
Fix BungeeAuth dependency
2019-10-23 12:50:40 +02:00
games647
62a8b939cc
Use 'TEXT' for strings in the configuration file
2019-08-16 14:59:14 +02:00
games647
327c8c4c9d
Dump dependencies
2019-07-09 12:56:14 +02:00
games647
fbbe7a735a
Initialize the decryption cipher only once
...
(Related #259 )
2019-07-09 12:52:54 +02:00
games647
4110ce2fa2
Fix creating logging session in ProtocolSupport environments
...
Fixes #251
2019-05-11 21:16:38 +02:00
games647
28743d23bf
Remove duplicate repository
2019-05-06 17:39:21 +02:00
games647
145bd95679
Drop usage of deprecated apache lang library
2019-05-06 17:37:13 +02:00
games647
3fe17cf8d9
Merge pull request #250 from lenis0012/patch-2
...
Update LoginSecurity maven repository
2019-05-06 17:36:15 +02:00
lenis0012
3446d4c443
Update LoginSecurity maven repository
2019-05-06 11:35:39 +02:00
games647
c528433079
Allow username only database logins
...
Related #247
2019-04-15 20:35:56 +02:00
games647
25858ea11f
Enable travis caching
2019-04-14 10:16:53 +02:00
games647
204ffbb2ee
Document network requests
2019-04-14 10:16:33 +02:00
games647
9c1ba81cbe
Fix running force actions in LoginSecurity thread-safe
2019-04-14 10:16:19 +02:00
games647
15c5857c4f
Correctly set the offline UUID in ProtocolSupport (Thanks to @Shevchik)
2018-08-30 12:32:42 +02:00
games647
4b0ad3b186
Update ProtocolSupport hook
2018-08-29 19:49:10 +02:00
games647
101f7207a9
Limit plugin channels to 16 characters for 1.7 support
...
Fixes #223
2018-08-07 13:41:30 +02:00
games647
64175fe9e8
Update to CraftApi 0.2
2018-07-29 18:47:07 +02:00
games647
f7a10d86eb
Don't transform because it's already compatible with 1.13
2018-07-25 16:55:52 +02:00
games647
542aabad73
Lowercase the namespace correctly
2018-07-24 14:33:33 +02:00
games647
260b93a565
Channel names should be lowercase according to the spec
...
Related #217 , #218
2018-07-24 10:17:21 +02:00
games647
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
games647
c172b1ec84
Prevent duplicate message fetching for kick in PLib ( Fixes #212 )
2018-06-27 18:59:40 +02:00
games647
9b0b8f5fcb
Fix repository link of ProtocolLib
2018-06-06 20:17:24 +02:00
games647
20104b2b00
Update ProtocolLib to fix building
2018-06-06 09:33:05 +02:00
games647
fd76d2448e
Add advanced options for the connection pool ( Fixes #210 )
2018-06-04 21:28:19 +02:00
games647
53a1821a9d
Fix ProtocolLib repository
2018-06-04 21:27:23 +02:00
games647
1c6f4e82e0
Fix NPE for cracked players on non-bungee environments
2018-05-23 19:14:20 +02:00
games647
084afef899
Update premium UUID on verification (Related #208 )
2018-05-04 19:45:43 +02:00
games647
8a9eed3a74
Add /newline variable
2018-05-04 18:54:26 +02:00
games647
1ea6d929b1
Clarify how to configure MariaDB/MySQL correctly
2018-04-26 10:09:40 +02:00
games647
ddc3aa9279
Replace deprecated PropertiesResolveEvent with LoginFinishEvent
...
affects only ProtocolSupport
2018-04-26 10:08:56 +02:00
games647
2a79a9511b
Fix auto register type in BungeeCord not being sent
2018-04-07 16:14:46 +02:00
games647
791df26702
Fix defaults overriding config
2018-04-05 18:42:50 +02:00
games647
cdf1988f2f
Fix comping after craftapi update
2018-04-05 17:38:16 +02:00
games647
f476c091bb
Fix default message loading, because default values are ignored by .getKeys()
2018-04-05 17:33:32 +02:00
games647
352c72df64
Add note about developments builds
2018-04-02 14:43:43 +02:00
games647
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
games647
f2e42019d6
Mention the new FastLogin module names in the setup guide
2018-03-31 10:34:26 +02:00
games647
82ec71e8d0
Update premium status for non-bungeecord setups (Related #200 )
2018-03-27 20:43:53 +02:00
games647
6d207d62ba
Fix BungeeCord blacklist condition checking
2018-03-25 15:44:51 +02:00
games647
889dab3152
Migrate to PlaceholderExpansion from PlaceholderAPI
2018-03-21 11:02:55 +01:00
games647
71c1f4f12e
Remove session in ProtocolSupport directly without expiring
2018-03-18 16:22:03 +01:00
games647
3651c4873c
Dump craftapi version
2018-03-17 16:57:05 +01:00
games647
8b613a48cc
Forward skin from ProtocolLib verification response
2018-03-16 16:40:12 +01:00
games647
78f8fa1f05
Fix NPE on nullable uuid column
2018-03-16 16:34:31 +01:00
games647
ac5820bb75
Encode enums as integers
2018-03-16 15:15:54 +01:00
games647
c1cb28c996
Add basic API ( Fixes #200 )
2018-03-16 15:15:03 +01:00
games647
b534765ff8
Always forward premium status to spigot
2018-03-16 15:14:35 +01:00
games647
5bcfdfeb32
Cancel restore session events if it's a premium player (Related #201 )
2018-03-16 14:44:35 +01:00
games647
b7c0fd549c
Add an explicit warning about the BungeeCord setup guide
2018-03-11 12:27:43 +01:00
games647
61c1364506
Simplify command handling
2018-03-11 11:47:02 +01:00
games647
a29dd849f9
Move shared Mojang client into independant project
2018-03-09 14:39:02 +01:00
games647
3f9eba69ba
Generate a public key only for ProtocolLib listener
2018-03-09 13:57:51 +01:00
games647
f250f8071f
Optional migration
2018-03-05 21:27:48 +01:00
games647
8272aeac69
Switch to the codemc repo for BungeeCord
2018-03-05 17:37:40 +01:00
games647
4d470be712
Dump AuthMe version
2018-03-05 17:35:33 +01:00
games647
e2c04f2c26
Add isSaved helper
2018-03-02 19:56:17 +01:00
games647
86694982c7
Minor refactoring
2018-03-02 18:29:38 +01:00
games647
04b00f4f22
Add driver available check for more readable error messages
2018-02-24 20:45:22 +01:00
games647
48c2355745
Remove copy-paste misleading package name
2018-02-24 20:45:22 +01:00
games647
cff25c958d
Extract BungeeCord message in dedicated classes
2018-02-24 20:45:20 +01:00
games647
06bb4b80dd
Add toString methods to all relevant classes
2018-02-24 20:43:18 +01:00
games647
2bdd051a41
Remove universal jar building for a smaller jar footprint and less conflicts with provided dependencies
2018-02-24 20:43:18 +01:00
games647
526a8a9d51
Log invalid proxy id messages
2018-02-24 10:45:52 +01:00
games647
8cbdb66625
Relocate HikariCP and slf4j too to prevent conflicts
2018-02-08 13:24:42 +01:00
games647
e5e815a885
Cancel autologin for AuthMe sessions ( Fixes #189 , #148 , #103 )
2018-02-05 15:01:28 +01:00
games647
d0d5bd300b
Use static imports for Colectors.*
2018-02-05 12:54:35 +01:00
games647
0c550edb05
Shade the gson dependency to fix compatibility with Minecraft 1.7.10
...
(Fixes #190 )
2018-01-30 13:15:48 +01:00
games647
181ea71222
Readd SSLFactory for rate-limit load balance because direct proxies doesn't work at all
2018-01-28 13:25:10 +01:00
games647
c38692e237
Use ChangeSkins rate-limit message here too
2018-01-28 12:25:25 +01:00
games647
dcef62fa57
Fix FileAlreadyExistsException for sym linked folders
2018-01-27 21:49:32 +01:00
games647
856613a8c7
Update Hikari dependency
2018-01-27 18:47:19 +01:00
games647
3beb8beaeb
Migrate tests to assertThat
2018-01-27 18:47:01 +01:00
games647
f3ea7ecbbe
Update development builds link
2018-01-27 18:46:43 +01:00
games647
25c725f237
[ci skip] Update LoginSecurity to 2.1.7 to fix compiling
2017-12-01 09:35:37 +01:00
games647
ffe4eb7364
Clarify BungeeCord plugin installation on Spigot
2017-11-25 09:34:38 +01:00
games647
82a258097d
Use SecureRandom for passwords
2017-10-30 17:57:01 +01:00
games647
57eff4b3ec
Fix NPE for skin apply in ProtocolLib mode (Related #182 )
2017-10-15 17:57:24 +02:00
games647
4858049c2a
Use direct proxies instead of ssl factories for multiple IP-addresses
2017-10-14 18:25:12 +02:00
games647
bb2cc1b42a
Remove local address check (Related #181 )
2017-10-12 09:59:16 +02:00
games647
2512c5cf67
Convert local IP addr '-' to . (Related #179 )
2017-10-09 10:33:38 +02:00
games647
c7c0782071
Fix address rotating for contacting the Mojang API
2017-10-07 19:48:29 +02:00
games647
df945146b8
Fix debug logging
2017-10-07 19:19:45 +02:00
games647
e32b0232e9
Fix logger init ( Fixes #178 )
2017-10-04 09:22:21 +02:00
games647
6daa654af8
Fix NPE for Mojang API connector
2017-10-03 15:14:37 +02:00
games647
0f01002564
Optimize issue template
2017-10-03 14:19:34 +02:00
games647
28a20a46fa
Fix NPE parsing Mojang uuid
2017-10-03 14:19:02 +02:00
games647
105e00b7e8
Use Instant for timestamps
2017-10-01 17:11:06 +02:00
games647
dce44295d0
Migrate SLF4J logging ( Fixes #177 )
2017-09-29 16:54:29 +02:00
games647
1f917f3a8d
Use Optionals for nullable values
2017-09-24 19:50:42 +02:00
games647
e6c23a4bb5
Use Gson's TypeAdapter for more type safety
2017-09-23 13:56:28 +02:00
games647
66b808c999
Fix compile
2017-09-22 21:41:24 +02:00
games647
2932de5588
Add support for IPv6 proxies
2017-09-22 21:08:24 +02:00
games647
16f7461568
Fix message loading was interacting with the normal config
2017-09-22 20:11:58 +02:00
games647
2f0eb81735
Shade the Bungee-Config implementation because it's platform independent
2017-09-22 20:07:04 +02:00
games647
bb80521ab6
Thermos supports GSON so we could share the json parsing
2017-09-22 18:17:35 +02:00
games647
109508dae6
Clean up using IDE inspections
2017-09-21 15:00:39 +02:00
games647
5bf9b05d30
Fix BungeeAuth Maven repository
2017-09-13 12:34:56 +02:00
games647
7839804a4c
Drop support for deprecated AuthMe API
2017-09-12 17:05:18 +02:00
games647
ca58c55eca
Remove legacy database migration code
2017-09-08 11:33:14 +02:00
games647
10453fd637
Drop support for RoyalAuth, because it doesn't seem to be supported anymore
2017-09-08 11:30:24 +02:00
games647
d18b734550
Update dependencies
2017-09-08 11:17:05 +02:00
games647
7f51659cc7
Version dump
2017-09-03 20:06:00 +02:00
games647
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
games647
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
games647
4ea7968366
Remove Importer to prepare for code refactor
2017-08-24 18:50:37 +02:00
games647
44a47bc97f
Set default value for proxies
2017-08-20 21:40:37 +02:00
games647
82cb25f809
Output more informational messages by default
2017-08-19 21:53:07 +02:00
games647
551441cdc4
Add HTTP-proxies support
2017-08-18 16:09:59 +02:00
games647
22a56862b0
Remove mcapi.ca section and fix config typos
2017-08-16 17:18:58 +02:00
games647
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
games647
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
games647
0459b0a5a1
Remove bungee chatcolor for Bukkit to support KCauldron
2017-07-22 08:35:32 +02:00
games647
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
games647
6595dc6ac0
Increase hook delay to let ProtocolLib inject the listener
2017-06-30 17:37:57 +02:00
games647
ea44002e91
Update dependencies and format imports
2017-06-30 17:23:46 +02:00
games647
131de8404c
Add support for new authme API
2017-06-12 17:26:46 +02:00
games647
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
games647
7db8c78975
Drop support for old authme API
2017-06-04 15:52:01 +02:00
games647
b102f06f8e
Update ProtocolLib to fix building
2017-05-27 11:24:43 +02:00
games647
a79e18445a
Fix building because the bungee proxy repo is down [ci skip]
2017-05-19 12:01:02 +02:00
games647
cf1a0c1bef
Remove ebean util usage to make it compatible with 1.12
2017-05-14 17:11:10 +02:00
games647
059c3f346e
Lowercase name inside pendingconnection for comparisons against the database
2017-05-10 17:06:25 +02:00
Leo G. ~ Leoko
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
games647
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
games647
881b2ec7bc
Fix changelog markdown syntax
2017-04-15 09:42:17 +02:00
games647
194c67cd6f
Fix markdown syntax
2017-04-05 09:24:41 +02:00
games647
863607c9a4
Add optional useSSL config option
2017-02-23 09:16:11 +01:00
games647
f37cc0a0db
Add commit id to the version
2017-02-14 14:01:57 +01:00
games647
70a81bfcdf
Correctly wait for BungeeAuth loading by using the correct depend tag ( Fixes #119 )
2017-02-10 19:06:57 +01:00
games647
b8d029d6da
Remove third party API
2017-02-04 14:09:38 +01:00
games647
c47dd1df80
Fix FileNotFoundEx if the bungee config doesn't exist
2017-01-28 16:38:48 +01:00
games647
4d5b1787b1
Migrate to Java 7 NIO files
2017-01-26 09:52:45 +01:00
games647
8c764220bd
Fix duplicate premium username message
2017-01-21 18:02:45 +01:00
games647
9af076b4c4
Fix premium username logging message at the wrong place
2017-01-09 17:57:50 +01:00
games647
22aa9287e9
Fix NoClassDef errors if the optional PlaceholderAPI is not available ( Fixes #108 )
2017-01-07 18:42:10 +01:00
games647
f08daa9b72
Update bungee-proxy maven repository
2017-01-06 13:00:17 +01:00
games647
bc53743c6b
Add placeholder variables
2017-01-06 12:54:02 +01:00
games647
a430a079c9
Do no print auto login message on authme session reuse (Related #101 )
2016-12-23 22:12:55 +01:00
games647
f3ac6090f1
Fix bungee online check ( Fixes #101 )
2016-12-23 10:01:38 +01:00
games647
5ca9b9c59a
Add note about firewalling your spigot server if you use BungeeCord
2016-12-22 09:13:58 +01:00
games647
b886d1501f
Update LoginSecurity to make it buildable
2016-12-16 15:56:30 +01:00
games647
0082cc6536
Use static builder to make it independent from ProtocolLib without throwing NoClassDefFoundError
2016-12-16 15:49:40 +01:00
games647
7f96d55084
Convert config values to string if casting fails
2016-11-26 13:27:39 +01:00
games647
3851d539f8
Workaround injector class is package private in older versions of ProtocolLib ( Fixes #94 )
2016-11-26 11:33:15 +01:00
games647
a25d97879f
Fail safetly if there session was started (prevents duplicate errors)
2016-11-26 10:06:27 +01:00
games647
41abffdb08
Fix Spigot console command invocation sends result to ingame players
2016-10-20 14:06:18 +02:00
games647
e69eb70377
Update BungeeAuth dependency and use the new API
2016-10-05 10:06:02 +02:00
games647
e924b7a2fa
Automatically register players who are not known to the auth plugin
...
Fixes #85
2016-10-03 13:46:33 +02:00
games647
157ca04691
Fix timestamp parsing in newer versions of SQLite
2016-09-23 12:26:18 +02:00
games647
ae3e03405d
No duplicate login's like auth plugins auto logins if it's the same ip
2016-09-23 10:42:25 +02:00
games647
bebb04bdea
Share the same force login mangement for less duplicate code
2016-09-22 10:56:31 +02:00
games647
91f41c55de
Finally set a value to the API column
2016-09-21 13:24:26 +02:00
games647
1acc825f81
Remove deprecated API methods
2016-09-21 13:22:48 +02:00