Compare commits

...

29 Commits

Author SHA1 Message Date
dependabot[bot]
32197fb467 Bump github/codeql-action from 3 to 4
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4.
- [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/v3...v4)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-01 07:00:50 +00:00
TuxCoding
65a379c3c2 Catching missing class on other platforms than Paper or older
Related #1313
2025-06-23 19:51:35 +02:00
Ziga
2ff6547552 Improve debug logs for force login in Passky 2025-06-23 11:05:01 +02:00
Ziga
c3233b2c67 - Fix Passky hook
- Implement debug logs to Passky
2025-06-23 11:02:08 +02:00
TuxCoding
f86c918a8b Use Paper API for detecting proxies (1.21.6+)
Related #1312
2025-06-23 10:44:58 +02:00
WuzzyLV
001cf3237b Update CraftAPI to fix 403 Forbidden errors from Mojang API
Fixes #1306
Fixes #1305
2025-06-13 11:13:52 +02:00
dependabot[bot]
c28c634351 Bump advanced-security/maven-dependency-submission-action from 4.1.2 to 5.0.0 (#1298)
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.1.2 to 5.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/v4.1.2...v5.0.0)

---
updated-dependencies:
- dependency-name: advanced-security/maven-dependency-submission-action
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-03 17:19:54 +02:00
TuxCoding
4550562465 Fix finding the correct login sessions in Velocity
Velocity uses different objects during each login phase.
Therefore, keys are no persistent. Only an internal variable
is shared and exposed with `getConnection()`, but this method
is not available in the API. We use `InetSocketAddress` objects
until there is a better method for identifying sessions.

Related #1297
2025-06-02 18:23:33 +02:00
tbm00
2308d98dcd Added /fldelete <name> to delete profiles from storage (#1283)
* Added `/fldelete <name>` to delete profiles from storage by name

* Implemented requested changes for pull request #1283

* Update delete command's perm default
2025-05-26 14:51:21 +02:00
Alex (TuxCoding)
063b6a9405 Add support for Passky login plugin (#1289) 2025-05-20 11:19:54 +02:00
TuxCoding
1b45b8d2be Run tasks directly instead of using the sync method
Fixes #1291
2025-05-13 17:05:23 +02:00
TuxCoding
8be0de4781 Add new download location 2025-05-13 16:59:58 +02:00
TuxCoding
d06c44041d Add annotation processor explicitly to fix plugin json generation
Related #1286
Related #1292
2025-05-13 16:57:28 +02:00
Alex (TuxCoding)
69fa341188 [CI-SKIP] Add GitHub changelog configuration 2025-04-28 13:06:17 +02:00
Ziga
e1ba698f28 Remove duplicated repository 2025-04-24 21:01:11 +02:00
Ziga
7bf613c8b4 Add support for Passky login plugin 2025-04-24 20:55:03 +02:00
Alex (TuxCoding)
1c194280b1 Bump the production-dependencies group across 1 directory with 8 updates (#1288)
Bumps the production-dependencies group with 8 updates in the /
directory:

| Package | From | To |
| --- | --- | --- |
|
[com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle)
| `10.17.0` | `10.23.0` |
|
[org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin)
| `3.13.0` | `3.14.0` |
|
[com.mycila:license-maven-plugin](https://github.com/mathieucarbou/license-maven-plugin)
| `4.5` | `5.0.0` |
|
[org.apache.maven.plugins:maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin)
| `3.4.0` | `3.6.0` |
|
[org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire)
| `3.3.0` | `3.5.3` |
| org.slf4j:slf4j-jdk14 | `2.0.13` | `2.0.17` |
| [org.yaml:snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) |
`2.2` | `2.4` |
|
[org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j)
| `3.4.0` | `3.5.3` |


Updates `com.puppycrawl.tools:checkstyle` from 10.17.0 to 10.23.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/checkstyle/checkstyle/releases">com.puppycrawl.tools:checkstyle's
releases</a>.</em></p>
<blockquote>
<h2>checkstyle-10.23.0</h2>
<p>Checkstyle 10.23.0 - <a
href="https://checkstyle.org/releasenotes.html#Release_10.23.0">https://checkstyle.org/releasenotes.html#Release_10.23.0</a></p>
<p>New:</p>
<p><a
href="https://redirect.github.com/checkstyle/checkstyle/issues/9745">#9745</a>
- JavadocMethod: new property 'allowInlineReturn' to support for Javadoc
return tag as inline</p>
<p>Bug fixes:</p>
<p><a
href="https://redirect.github.com/checkstyle/checkstyle/issues/14697">#14697</a>
- False negative in UnusedImportCheck</p>
<!-- raw HTML omitted -->
<h2>checkstyle-10.22.0</h2>
<p>Checkstyle 10.22.0 - <a
href="https://checkstyle.org/releasenotes.html#Release_10.22.0">https://checkstyle.org/releasenotes.html#Release_10.22.0</a></p>
<p>Breaking backward compatibility:</p>
<p><a
href="https://redirect.github.com/checkstyle/checkstyle/issues/9280">#9280</a>
- JavadocVariable: new property 'accessModifiers' as substitution of
'scope' and 'excludeScope'
<a
href="https://redirect.github.com/checkstyle/checkstyle/issues/15499">#15499</a>
- Change default or IllegalIdentifierName</p>
<p>Bug fixes:</p>
<p><a
href="https://redirect.github.com/checkstyle/checkstyle/issues/16641">#16641</a>
- <code>FileContents.getJavadocBefore()</code>: Comments should not be
skipped if it is not alone in line
<a
href="https://redirect.github.com/checkstyle/checkstyle/issues/16385">#16385</a>
- JavadocTagContinuationIndentation Ignore indentation check when HTML
tag break line
<a
href="https://redirect.github.com/checkstyle/checkstyle/issues/16628">#16628</a>
- use SLL prediction mode for fast javadoc parsing to improve
performance
<a
href="https://redirect.github.com/checkstyle/checkstyle/issues/43">#43</a>
- JavadocMethod: Javadoc Not Detected Above Multiline Comments
<a
href="https://redirect.github.com/checkstyle/checkstyle/issues/12817">#12817</a>
- Incorrect Indentation errors for expression switches with
google_checks.xml
<a
href="https://redirect.github.com/checkstyle/checkstyle/issues/6637">#6637</a>
- SuppressWarningsHolder aliasList members don't act like aliases
<a
href="https://redirect.github.com/checkstyle/checkstyle/issues/13043">#13043</a>
- Make references optional for link and linkplain tags
<a
href="https://redirect.github.com/checkstyle/checkstyle/issues/16005">#16005</a>
- Parse errors if ``@<code>see</code> spans multiple lines
<a
href="https://redirect.github.com/checkstyle/checkstyle/issues/14446">#14446</a>
- Parse error when Javadoc contains `@`snippet with code example that
uses Java annotation</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="25f2753f65"><code>25f2753</code></a>
[maven-release-plugin] prepare release checkstyle-10.23.0</li>
<li><a
href="ed97c94df9"><code>ed97c94</code></a>
doc: release notes for 10.23.0</li>
<li><a
href="9e773ff72e"><code>9e773ff</code></a>
Issue <a
href="https://redirect.github.com/checkstyle/checkstyle/issues/16332">#16332</a>:
Updated SuppressionSingleFilterExamplesTest methods to use veri...</li>
<li><a
href="688d0cda5b"><code>688d0cd</code></a>
Issue <a
href="https://redirect.github.com/checkstyle/checkstyle/issues/16360">#16360</a>:
Migrate XMLLoggerTest to use inlineConfigParser</li>
<li><a
href="66946e9fe9"><code>66946e9</code></a>
Issue <a
href="https://redirect.github.com/checkstyle/checkstyle/issues/16360">#16360</a>:
Migrate XMLLoggerTest.testAddErrorOnZeroColumns to use inlineCo...</li>
<li><a
href="4890ef67d1"><code>4890ef6</code></a>
Issue <a
href="https://redirect.github.com/checkstyle/checkstyle/issues/14631">#14631</a>:
Updated HR_TAG to new AST format</li>
<li><a
href="754c35d720"><code>754c35d</code></a>
minor: Bump version to 10.23.0-SNAPSHOT</li>
<li><a
href="359fa919d6"><code>359fa91</code></a>
Issue <a
href="https://redirect.github.com/checkstyle/checkstyle/issues/16155">#16155</a>:
use nio api in XpathFileGeneratorAuditListener</li>
<li><a
href="3f0fec8c85"><code>3f0fec8</code></a>
Issue <a
href="https://redirect.github.com/checkstyle/checkstyle/issues/9745">#9745</a>:
Added JavadocMethod inline return tag support</li>
<li><a
href="381a852b92"><code>381a852</code></a>
Issue <a
href="https://redirect.github.com/checkstyle/checkstyle/issues/14631">#14631</a>:
Updated DD to new AST format</li>
<li>Additional commits viewable in <a
href="https://github.com/checkstyle/checkstyle/compare/checkstyle-10.17.0...checkstyle-10.23.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `org.apache.maven.plugins:maven-compiler-plugin` from 3.13.0 to
3.14.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/apache/maven-compiler-plugin/releases">org.apache.maven.plugins:maven-compiler-plugin's
releases</a>.</em></p>
<blockquote>
<h2>3.14.0</h2>
<!-- raw HTML omitted -->
<h2>🚀 New features and improvements</h2>
<ul>
<li>Enable GitHub Issues (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/305">#305</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li><a
href="https://issues.apache.org/jira/browse/MCOMPILER-579">[MCOMPILER-579]</a>
- allow module-version configuration (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/273">#273</a>)
<a href="https://github.com/mguillem"><code>@​mguillem</code></a></li>
<li>Bump org.codehaus.plexus:plexus-java from 1.2.0 to 1.4.0 - JDK 24
support (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/293">#293</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
<li>Update release-drafter configuration, PR automation (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/281">#281</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li><a
href="https://issues.apache.org/jira/browse/MCOMPILER-588">[MCOMPILER-588]</a>
- JUnit4 test framework to JUnit5 migration (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/236">#236</a>)
<a
href="https://github.com/MidNight-er"><code>@​MidNight-er</code></a></li>
</ul>
<h2>🐛 Bug Fixes</h2>
<ul>
<li>Fix release-drafter config (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/292">#292</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li><a
href="https://issues.apache.org/jira/browse/MCOMPILER-591">[MCOMPILER-591]</a>
- testCompile - fix detections of target less than 1.9 (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/240">#240</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
</ul>
<h2>📦 Dependency updates</h2>
<ul>
<li>Bump org.codehaus.plexus:plexus-java from 1.2.0 to 1.4.0 - JDK 24
support (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/293">#293</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
<li>Bump mavenVersion from 3.6.3 to 3.9.9 (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/283">#283</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
<li>Bump org.mockito:mockito-core from 4.8.0 to 4.11.0 (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/288">#288</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
<li>Bump org.apache.maven.plugins:maven-plugins from 42 to 43 (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/285">#285</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
<li><a
href="https://issues.apache.org/jira/browse/MCOMPILER-590">[MCOMPILER-590]</a>
- Bump org.apache.maven.plugins:maven-plugins from 41 to 42 (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/235">#235</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
</ul>
<h2>👻 Maintenance</h2>
<ul>
<li>Update scm tag according to branch (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/303">#303</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li><a
href="https://issues.apache.org/jira/browse/MNGSITE-529">[MNGSITE-529]</a>
- Rename &quot;Goals&quot; to &quot;Plugin Documentation&quot; (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/300">#300</a>)
<a href="https://github.com/Bukama"><code>@​Bukama</code></a></li>
<li>Use JUnit version from parent (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/299">#299</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li><a
href="https://issues.apache.org/jira/browse/MCOMPILER-529">[MCOMPILER-529]</a>
- Update docs about version schema (Maven 3) (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/295">#295</a>)
<a href="https://github.com/Bukama"><code>@​Bukama</code></a></li>
<li>Use default Maven versions for build on GitHub (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/289">#289</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li>Remove Maven 3 note (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/241">#241</a>)
<a href="https://github.com/elharo"><code>@​elharo</code></a></li>
<li>Remove info about old versions (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/237">#237</a>)
<a href="https://github.com/elharo"><code>@​elharo</code></a></li>
</ul>
<h2>🔧 Build</h2>
<ul>
<li>Exclude JDK 8 - temurin, adopt-openj9 on macos, use defaults values
(<a
href="https://redirect.github.com/apache/maven-compiler-plugin/pull/238">#238</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b5e7d9b907"><code>b5e7d9b</code></a>
[maven-release-plugin] prepare release maven-compiler-plugin-3.14.0</li>
<li><a
href="9134f1231a"><code>9134f12</code></a>
Enable GitHub Issues</li>
<li><a
href="19b8b128f4"><code>19b8b12</code></a>
Update scm tag according to branch</li>
<li><a
href="09dce4e613"><code>09dce4e</code></a>
[MCOMPILER-579] allow module-version configuration (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/issues/273">#273</a>)</li>
<li><a
href="f7c3c5fab1"><code>f7c3c5f</code></a>
Bump org.codehaus.plexus:plexus-java from 1.2.0 to 1.4.0</li>
<li><a
href="764a54b22b"><code>764a54b</code></a>
[MNGSITE-529] Rename &quot;Goals&quot; to &quot;Plugin
Documentation&quot;</li>
<li><a
href="cfacbc1630"><code>cfacbc1</code></a>
PR Automation only on close event</li>
<li><a
href="5c26bba9ed"><code>5c26bba</code></a>
Use JUnit version from parent</li>
<li><a
href="5449407f10"><code>5449407</code></a>
[MCOMPILER-529] Update docs about version schema (Maven 3)</li>
<li><a
href="01d5b8824e"><code>01d5b88</code></a>
Bump mavenVersion from 3.6.3 to 3.9.9 (<a
href="https://redirect.github.com/apache/maven-compiler-plugin/issues/283">#283</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.14.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `com.mycila:license-maven-plugin` from 4.5 to 5.0.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mathieucarbou/license-maven-plugin/releases">com.mycila:license-maven-plugin's
releases</a>.</em></p>
<blockquote>
<h2>v5.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump junit.version from 5.11.0 to 5.11.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/836">mathieucarbou/license-maven-plugin#836</a></li>
<li>Drop Java 8, use 11 by <a
href="https://github.com/mathieucarbou"><code>@​mathieucarbou</code></a>
in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/833">mathieucarbou/license-maven-plugin#833</a></li>
<li>[pom] Bump jgit to 6.10.0.202406032230-r by <a
href="https://github.com/hazendaz"><code>@​hazendaz</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/837">mathieucarbou/license-maven-plugin#837</a></li>
<li>Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.6 to 3.2.7
by <a href="https://github.com/dependabot"><code>@​dependabot</code></a>
in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/838">mathieucarbou/license-maven-plugin#838</a></li>
<li>Bump com.puppycrawl.tools:checkstyle from 10.18.1 to 10.18.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/839">mathieucarbou/license-maven-plugin#839</a></li>
<li>Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.0 to
3.10.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/841">mathieucarbou/license-maven-plugin#841</a></li>
<li>Bump junit.version from 5.11.1 to 5.11.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/843">mathieucarbou/license-maven-plugin#843</a></li>
<li>Bump surefire.version from 3.5.0 to 3.5.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/844">mathieucarbou/license-maven-plugin#844</a></li>
<li>Bump junit.version from 5.11.2 to 5.11.3 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/845">mathieucarbou/license-maven-plugin#845</a></li>
<li>Bump org.apache.maven.plugins:maven-invoker-plugin from 3.8.0 to
3.8.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/846">mathieucarbou/license-maven-plugin#846</a></li>
<li>Bump org.apache.maven.plugins:maven-project-info-reports-plugin from
3.7.0 to 3.8.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/848">mathieucarbou/license-maven-plugin#848</a></li>
<li>Bump org.apache.maven.plugins:maven-site-plugin from 3.20.0 to
3.21.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/847">mathieucarbou/license-maven-plugin#847</a></li>
<li>Bump maven-plugin.version from 3.15.0 to 3.15.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/849">mathieucarbou/license-maven-plugin#849</a></li>
<li>Bump org.apache.maven.plugins:maven-checkstyle-plugin from 3.5.0 to
3.6.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/850">mathieucarbou/license-maven-plugin#850</a></li>
<li>Bump com.puppycrawl.tools:checkstyle from 10.18.2 to 10.19.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/851">mathieucarbou/license-maven-plugin#851</a></li>
<li>Bump com.puppycrawl.tools:checkstyle from 10.19.0 to 10.20.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/852">mathieucarbou/license-maven-plugin#852</a></li>
<li>Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.1 to
3.11.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/854">mathieucarbou/license-maven-plugin#854</a></li>
<li>Bump surefire.version from 3.5.1 to 3.5.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/853">mathieucarbou/license-maven-plugin#853</a></li>
<li>Bump com.puppycrawl.tools:checkstyle from 10.20.0 to 10.20.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/855">mathieucarbou/license-maven-plugin#855</a></li>
<li>Bump groovy.version from 4.0.23 to 4.0.24 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/856">mathieucarbou/license-maven-plugin#856</a></li>
<li>[exclusions] Do not handle .gradle or build directories by <a
href="https://github.com/hazendaz"><code>@​hazendaz</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/858">mathieucarbou/license-maven-plugin#858</a></li>
<li>Bump com.puppycrawl.tools:checkstyle from 10.20.1 to 10.20.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/861">mathieucarbou/license-maven-plugin#861</a></li>
<li>Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.11.1 to
3.11.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/862">mathieucarbou/license-maven-plugin#862</a></li>
<li>Bump org.apache.maven.plugins:maven-invoker-plugin from 3.8.1 to
3.9.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/863">mathieucarbou/license-maven-plugin#863</a></li>
<li>Bump junit.version from 5.11.3 to 5.11.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/865">mathieucarbou/license-maven-plugin#865</a></li>
<li>Bump com.puppycrawl.tools:checkstyle from 10.20.2 to 10.21.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/864">mathieucarbou/license-maven-plugin#864</a></li>
<li>Bump com.google.guava:guava from 33.3.1-jre to 33.4.0-jre by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/866">mathieucarbou/license-maven-plugin#866</a></li>
<li>Bump org.assertj:assertj-core from 3.26.3 to 3.27.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/867">mathieucarbou/license-maven-plugin#867</a></li>
<li>Bump com.puppycrawl.tools:checkstyle from 10.21.0 to 10.21.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/871">mathieucarbou/license-maven-plugin#871</a></li>
<li>Bump org.assertj:assertj-core from 3.27.0 to 3.27.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/872">mathieucarbou/license-maven-plugin#872</a></li>
<li>Bump org.assertj:assertj-core from 3.27.1 to 3.27.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/875">mathieucarbou/license-maven-plugin#875</a></li>
<li>Test to specify licenseSet includes from CLI by <a
href="https://github.com/mathieu"><code>@​mathieu</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/878">mathieucarbou/license-maven-plugin#878</a></li>
<li>[GA] Update snapshot report by <a
href="https://github.com/github-actions"><code>@​github-actions</code></a>
in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/835">mathieucarbou/license-maven-plugin#835</a></li>
<li>lazy evaluation for git provided properties by <a
href="https://github.com/frawa"><code>@​frawa</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/877">mathieucarbou/license-maven-plugin#877</a></li>
<li>[GA] Update snapshot report by <a
href="https://github.com/github-actions"><code>@​github-actions</code></a>
in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/879">mathieucarbou/license-maven-plugin#879</a></li>
<li>[exclusions] Add angular folder to exclusions by <a
href="https://github.com/hazendaz"><code>@​hazendaz</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/869">mathieucarbou/license-maven-plugin#869</a></li>
<li>Update dependency com.mycila:license-maven-plugin to v4.6 by <a
href="https://github.com/hazendaz"><code>@​hazendaz</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/868">mathieucarbou/license-maven-plugin#868</a></li>
<li>[java11] Use Path.of instead of Paths.get by <a
href="https://github.com/hazendaz"><code>@​hazendaz</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/881">mathieucarbou/license-maven-plugin#881</a></li>
<li>[GA] Update snapshot report by <a
href="https://github.com/github-actions"><code>@​github-actions</code></a>
in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/880">mathieucarbou/license-maven-plugin#880</a></li>
<li>Bump org.assertj:assertj-core from 3.27.2 to 3.27.3 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/889">mathieucarbou/license-maven-plugin#889</a></li>
<li>[tests] Rewrite hamcrest to assertj and remove hamcrest from the
build by <a
href="https://github.com/hazendaz"><code>@​hazendaz</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/895">mathieucarbou/license-maven-plugin#895</a></li>
<li>Use less of plexus and no longer need to override plexus xml by <a
href="https://github.com/hazendaz"><code>@​hazendaz</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/894">mathieucarbou/license-maven-plugin#894</a></li>
<li>Add to default exclusion and cleanup pom on exclusions already in
core releases by <a
href="https://github.com/hazendaz"><code>@​hazendaz</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/892">mathieucarbou/license-maven-plugin#892</a></li>
<li>[gha] Make sure we cache maven (and sort) and make sure docs are
proper EOF marked by <a
href="https://github.com/hazendaz"><code>@​hazendaz</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/893">mathieucarbou/license-maven-plugin#893</a></li>
<li>Build cleanup items by <a
href="https://github.com/hazendaz"><code>@​hazendaz</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/891">mathieucarbou/license-maven-plugin#891</a></li>
<li>[GA] Update snapshot report by <a
href="https://github.com/github-actions"><code>@​github-actions</code></a>
in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/890">mathieucarbou/license-maven-plugin#890</a></li>
<li>Bump com.puppycrawl.tools:checkstyle from 10.21.1 to 10.21.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/899">mathieucarbou/license-maven-plugin#899</a></li>
<li>Bump groovy.version from 4.0.24 to 4.0.25 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/pull/898">mathieucarbou/license-maven-plugin#898</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="57aa95f7b0"><code>57aa95f</code></a>
[maven-release-plugin] prepare release v5.0.0</li>
<li><a
href="de4e5d9fcc"><code>de4e5d9</code></a>
Merge pull request <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/issues/921">#921</a>
from mathieucarbou/dependabot/maven/org.mockito-mocki...</li>
<li><a
href="1fd530b022"><code>1fd530b</code></a>
Bump org.mockito:mockito-bom from 5.16.0 to 5.16.1</li>
<li><a
href="0229bcf6fe"><code>0229bcf</code></a>
Merge pull request <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/issues/920">#920</a>
from mathieucarbou/dependabot/maven/junit.version-5.12.1</li>
<li><a
href="34c9cb32b1"><code>34c9cb3</code></a>
Bump junit.version from 5.12.0 to 5.12.1</li>
<li><a
href="8d11e9c28b"><code>8d11e9c</code></a>
Merge pull request <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/issues/918">#918</a>
from mathieucarbou/dependabot/maven/com.puppycrawl.to...</li>
<li><a
href="04794f5a92"><code>04794f5</code></a>
Bump com.puppycrawl.tools:checkstyle from 10.21.3 to 10.21.4</li>
<li><a
href="b2243d70dd"><code>b2243d7</code></a>
Merge pull request <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/issues/917">#917</a>
from mathieucarbou/dependabot/maven/org.mockito-mocki...</li>
<li><a
href="915c37355d"><code>915c373</code></a>
Bump org.mockito:mockito-bom from 5.15.2 to 5.16.0</li>
<li><a
href="ff4b1d6565"><code>ff4b1d6</code></a>
Merge pull request <a
href="https://redirect.github.com/mathieucarbou/license-maven-plugin/issues/915">#915</a>
from mathieucarbou/dependabot/maven/org.apache.maven....</li>
<li>Additional commits viewable in <a
href="https://github.com/mathieucarbou/license-maven-plugin/compare/license-maven-plugin-4.5...v5.0.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `org.apache.maven.plugins:maven-checkstyle-plugin` from 3.4.0 to
3.6.0
<details>
<summary>Commits</summary>
<ul>
<li><a
href="dd1abd9ee7"><code>dd1abd9</code></a>
[maven-release-plugin] prepare release
maven-checkstyle-plugin-3.6.0</li>
<li><a
href="9ccb06ed3e"><code>9ccb06e</code></a>
fix</li>
<li><a
href="6ac89b88de"><code>6ac89b8</code></a>
[MCHECKSTYLE-452] Upgrade to Doxia 2.0.0 GA Stack</li>
<li><a
href="ff1a1b76e2"><code>ff1a1b7</code></a>
Bump org.apache.commons:commons-lang3 from 3.16.0 to 3.17.0</li>
<li><a
href="13e16c5bbf"><code>13e16c5</code></a>
Remove unecessary test dependency on plexus-container-default</li>
<li><a
href="a7c962ae77"><code>a7c962a</code></a>
[maven-release-plugin] prepare for next development iteration</li>
<li><a
href="868abc95ea"><code>868abc9</code></a>
[maven-release-plugin] prepare release
maven-checkstyle-plugin-3.5.0</li>
<li><a
href="9043f8a96e"><code>9043f8a</code></a>
[MCHECKSTYLE-446] Dynamically calculate
xrefLocation/xrefTestLocation</li>
<li><a
href="0e7bd00e10"><code>0e7bd00</code></a>
[MCHECKSTYLE-445] Upgrade to Doxia 2.0.0 Milestone Stack</li>
<li><a
href="b92666d0b0"><code>b92666d</code></a>
Bump org.apache.maven.plugins:maven-plugins from 42 to 43</li>
<li>Additional commits viewable in <a
href="https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.4.0...maven-checkstyle-plugin-3.6.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `org.apache.maven.plugins:maven-surefire-plugin` from 3.3.0 to
3.5.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/apache/maven-surefire/releases">org.apache.maven.plugins:maven-surefire-plugin's
releases</a>.</em></p>
<blockquote>
<h2>3.5.3</h2>
<!-- raw HTML omitted -->
<h2>🐛 Bug Fixes</h2>
<ul>
<li><a
href="https://issues.apache.org/jira/browse/SUREFIRE-1737">[SUREFIRE-1737]</a>
- Fix disable in statelessTestsetReporter (<a
href="https://redirect.github.com/apache/maven-surefire/pull/816">#816</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li><a
href="https://issues.apache.org/jira/browse/SUREFIRE-1643">[SUREFIRE-1643]</a>
- surefire junit5 parallel tests (<a
href="https://redirect.github.com/apache/maven-surefire/pull/815">#815</a>)
<a href="https://github.com/olamy"><code>@​olamy</code></a></li>
<li><a
href="https://issues.apache.org/jira/browse/SUREFIRE-2289">[SUREFIRE-2289]</a>
- Make exceptions more appropriate to context (<a
href="https://redirect.github.com/apache/maven-surefire/pull/798">#798</a>)
<a href="https://github.com/elharo"><code>@​elharo</code></a></li>
</ul>
<h2>👻 Maintenance</h2>
<ul>
<li>surefire shared utils version current version (<a
href="https://redirect.github.com/apache/maven-surefire/pull/825">#825</a>)
<a href="https://github.com/olamy"><code>@​olamy</code></a></li>
<li>Update site descriptors (<a
href="https://redirect.github.com/apache/maven-surefire/pull/821">#821</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li>Use newer version of surefire for itself testing, enable JUnit 5 in
tests (<a
href="https://redirect.github.com/apache/maven-surefire/pull/822">#822</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li>Remove dependencies from root pom (<a
href="https://redirect.github.com/apache/maven-surefire/pull/819">#819</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li>move this dependency to dptMngt (<a
href="https://redirect.github.com/apache/maven-surefire/pull/818">#818</a>)
<a href="https://github.com/olamy"><code>@​olamy</code></a></li>
<li><a
href="https://issues.apache.org/jira/browse/SUREFIRE-2291">[SUREFIRE-2291]</a>
- Change logger from Plexus to SLF4J (<a
href="https://redirect.github.com/apache/maven-surefire/pull/811">#811</a>)
<a
href="https://github.com/jeffjensen"><code>@​jeffjensen</code></a></li>
<li>Add GitHub Automation actions (<a
href="https://redirect.github.com/apache/maven-surefire/pull/812">#812</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li>Convert reports to Guice (<a
href="https://redirect.github.com/apache/maven-surefire/pull/803">#803</a>)
<a href="https://github.com/elharo"><code>@​elharo</code></a></li>
<li><a
href="https://issues.apache.org/jira/browse/MNGSITE-529">[MNGSITE-529]</a>
- Rename &quot;Goals&quot; to &quot;Plugin Documentation&quot; (<a
href="https://redirect.github.com/apache/maven-surefire/pull/809">#809</a>)
<a href="https://github.com/Bukama"><code>@​Bukama</code></a></li>
<li>Update encoding docs (<a
href="https://redirect.github.com/apache/maven-surefire/pull/802">#802</a>)
<a href="https://github.com/elharo"><code>@​elharo</code></a></li>
<li>Guice injection (<a
href="https://redirect.github.com/apache/maven-surefire/pull/801">#801</a>)
<a href="https://github.com/elharo"><code>@​elharo</code></a></li>
</ul>
<h2>📦 Dependency updates</h2>
<ul>
<li>Bump org.htmlunit:htmlunit from 4.10.0 to 4.11.1 (<a
href="https://redirect.github.com/apache/maven-surefire/pull/823">#823</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
<li>Bump parent to 44 (<a
href="https://redirect.github.com/apache/maven-surefire/pull/817">#817</a>)
<a
href="https://github.com/slawekjaranowski"><code>@​slawekjaranowski</code></a></li>
<li>Bump org.codehaus.plexus:plexus-java from 1.3.0 to 1.4.0 (<a
href="https://redirect.github.com/apache/maven-surefire/pull/810">#810</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
<li>Bump org.htmlunit:htmlunit from 4.4.0 to 4.10.0 (<a
href="https://redirect.github.com/apache/maven-surefire/pull/813">#813</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
<li>Bump commons-io:commons-io from 2.17.0 to 2.18.0 (<a
href="https://redirect.github.com/apache/maven-surefire/pull/797">#797</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
<li>Bump org.assertj:assertj-core from 3.27.2 to 3.27.3 (<a
href="https://redirect.github.com/apache/maven-surefire/pull/807">#807</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
<li>Bump org.assertj:assertj-core from 3.27.0 to 3.27.2 (<a
href="https://redirect.github.com/apache/maven-surefire/pull/805">#805</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
<li>Bump org.assertj:assertj-core from 3.26.3 to 3.27.0 (<a
href="https://redirect.github.com/apache/maven-surefire/pull/800">#800</a>)
@<a href="https://github.com/apps/dependabot">dependabot[bot]</a></li>
</ul>
<h2>3.5.2</h2>
<!-- raw HTML omitted -->
<h2>🚀 New features and improvements</h2>
<ul>
<li><a
href="https://issues.apache.org/jira/browse/SUREFIRE-2278">[SUREFIRE-2278]</a>
- Don't say please. (<a
href="https://redirect.github.com/apache/maven-surefire/pull/792">#792</a>)
<a href="https://github.com/elharo"><code>@​elharo</code></a></li>
</ul>
<h2>📦 Dependency updates</h2>
<ul>
<li><a
href="https://issues.apache.org/jira/browse/SUREFIRE-2281">[SUREFIRE-2281]</a>
- Doxia 2.0.0 ga (<a
href="https://redirect.github.com/apache/maven-surefire/pull/794">#794</a>)
<a href="https://github.com/michael-o"><code>@​michael-o</code></a></li>
<li>Bump commons-io:commons-io from 2.2 to 2.14.0 in
/surefire-its/src/test/resources/surefire-979-smartStackTrace-wrongClassloader/module1
(<a
href="https://redirect.github.com/apache/maven-surefire/pull/789">#789</a>)
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a></li>
</ul>
<h2>👻 Maintenance</h2>
<ul>
<li><a
href="https://issues.apache.org/jira/browse/SUREFIRE-2282">[SUREFIRE-2282]</a>
- surefire-report-plugin: Update Introduction documenta… (<a
href="https://redirect.github.com/apache/maven-surefire/pull/796">#796</a>)
<a href="https://github.com/michael-o"><code>@​michael-o</code></a></li>
<li>Reduce cyclomatic complexity (<a
href="https://redirect.github.com/apache/maven-surefire/pull/793">#793</a>)
<a href="https://github.com/elharo"><code>@​elharo</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4434650a8a"><code>4434650</code></a>
[maven-release-plugin] prepare release surefire-3.5.3</li>
<li><a
href="1270950bc2"><code>1270950</code></a>
use github directly</li>
<li><a
href="59f3a1f547"><code>59f3a1f</code></a>
release tag name backward compatible</li>
<li><a
href="dfbabe2cfa"><code>dfbabe2</code></a>
assertj-core must be test scope (<a
href="https://redirect.github.com/apache/maven-surefire/issues/826">#826</a>)</li>
<li><a
href="e1f8119bfa"><code>e1f8119</code></a>
back to 3.5.3-SNAPSHOT</li>
<li><a
href="c497559438"><code>c497559</code></a>
[maven-release-plugin] prepare for next development iteration</li>
<li><a
href="3962112f45"><code>3962112</code></a>
[maven-release-plugin] prepare release v3.5.3</li>
<li><a
href="227c134e36"><code>227c134</code></a>
surefire shared utils version current version (<a
href="https://redirect.github.com/apache/maven-surefire/issues/825">#825</a>)</li>
<li><a
href="1d34c34a7b"><code>1d34c34</code></a>
Bump org.htmlunit:htmlunit from 4.10.0 to 4.11.1</li>
<li><a
href="906b65aa11"><code>906b65a</code></a>
Update site descriptors</li>
<li>Additional commits viewable in <a
href="https://github.com/apache/maven-surefire/compare/surefire-3.3.0...surefire-3.5.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `org.slf4j:slf4j-jdk14` from 2.0.13 to 2.0.17

Updates `org.yaml:snakeyaml` from 2.2 to 2.4
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c2f88dff8f"><code>c2f88df</code></a>
[maven-release-plugin] prepare for next development iteration</li>
<li><a
href="f30369553d"><code>f303695</code></a>
Merge branch 'master' into build-21</li>
<li><a
href="85fa3093ac"><code>85fa309</code></a>
Update changes</li>
<li><a
href="a9a6534885"><code>a9a6534</code></a>
Merge branch 'master' into remove-custom-base64</li>
<li><a
href="ee85b4f371"><code>ee85b4f</code></a>
Fix Base64</li>
<li><a
href="c39afe58a3"><code>c39afe5</code></a>
Use tests for Java 8</li>
<li><a
href="df5632251a"><code>df56322</code></a>
Merge branch 'master' into ds/checkToken</li>
<li><a
href="95bd06bf21"><code>95bd06b</code></a>
Merge pull request <a
href="https://bitbucket.org/snakeyaml/snakeyaml/issues/13">#13</a> from
schlosna/ds/checkToken</li>
<li><a
href="ccc1be2292"><code>ccc1be2</code></a>
Update changes.xml</li>
<li><a
href="0487ff4ee7"><code>0487ff4</code></a>
Update changes.xml</li>
<li>Additional commits viewable in <a
href="https://bitbucket.org/snakeyaml/snakeyaml/branches/compare/snakeyaml-2.4..snakeyaml-2.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `org.mariadb.jdbc:mariadb-java-client` from 3.4.0 to 3.5.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/mariadb-corporation/mariadb-connector-j/releases">org.mariadb.jdbc:mariadb-java-client's
releases</a>.</em></p>
<blockquote>
<h2>MariaDB Connector/Java 3.5.3</h2>
<h2><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/tree/3.5.3">3.5.3</a>
(Feb 2025)</h2>
<p><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.5.2...3.5.3">Full
Changelog</a></p>
<h4>Bugs Fixed</h4>
<ul>
<li>CONJ-1226 Fixed issue where dates containing zero day or month
resulted in a DateTimeException</li>
<li>CONJ-1232 Resolved timestamp string representation incompatibility
between versions 2.7 and 3.x
<ul>
<li>see new option <a
href="https://mariadb.com/kb/en/about-mariadb-connector-j/#oldmodenoprecisiontimestamp">oldModeNoPrecisionTimestamp</a></li>
</ul>
</li>
<li>CONJ-1226 Fixed incorrect values returned by
ResultSet.getColumnType() for unsigned values</li>
<li>CONJ-1241 Corrected regression in 3.x affecting column metadata for
unsigned types</li>
<li>CONJ-1243 Fixed CallableStatement.getParameterMetadata() returning
wrong java.sql.Type for boolean values</li>
<li>CONJ-1236 Prevented NPE (Null Pointer Exception) after reconnection
failure in high availability configurations</li>
<li>CONJ-1237 Fixed issue with incorrect statements.isClosed value after
closing connection</li>
<li>CONJ-1239 Disabled BULK operations when no parameters are
present</li>
<li>CONJ-1240 Fixed connectivity issues with databases that only accept
TLSv1.3</li>
<li>CONJ-1235 Modified redirection option to enable by default only when
SSL is enabled</li>
</ul>
<h2>MariaDB Connector/Java 3.5.2</h2>
<h2><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/tree/3.5.2">3.5.2</a>
(Feb 2025)</h2>
<p><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.5.1...3.5.2">Full
Changelog</a></p>
<h4>Bugs Fixed</h4>
<ul>
<li>CONJ-1216 Resolved a performance issue that occurred when batch
processing on MySQL and older MariaDB (pre-10.2) servers</li>
<li>CONJ-1218 Incorrect behavior where XA connections are closed when
regular connections are terminated - this is against specifications</li>
<li>CONJ-1217 The trustCertificateKeyStorePassword alias parameter isn’t
taken into account</li>
<li>CONJ-1221 DatabaseMetadata.getTypeInfo() is missing the data types
UUID and VECTOR</li>
<li>CONJ-1225 System throws an exception prematurely without checking
all available connections</li>
<li>CONJ-1228 result-set.getObject() on BLOB type returns Blob in place
of byte[]</li>
<li>CONJ-660 new <code>disconnectOnExpiredPasswords</code> connection
option that controls client behavior when connecting with an expired
password.
When set to true (default), the client disconnects if it detects an
expired password.
When false, the client maintains the connection and allows setting a new
password.</li>
<li>CONJ-1229 Permit executeQuery commands to not return a
result-set</li>
</ul>
<h2>MariaDB Connector/Java 3.5.1</h2>
<h2><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/tree/3.5.1">3.5.1</a>
(Nov 2024)</h2>
<p><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.5.0...3.5.1">Full
Changelog</a></p>
<h4>Notable changes</h4>
<ul>
<li>CONJ-1193 Implement parsec authentication</li>
<li>CONJ-1207 New HaMode: sequential write, loadbalance read</li>
<li>CONJ-1208 permit bulk for INSERT ON DUPLICATE KEY UPDATE commands
for 11.5.1+ servers</li>
</ul>
<h4>Bugs Fixed</h4>
<ul>
<li>CONJ-1053 Mark waffle-jna dependency optional in module
descriptor</li>
<li>CONJ-1196 setObject on java.util.Date was considered was a
java.sql.Date and truncate hour/minutes/seconds/ms while it must be
considered like a java.sql.Timestamp</li>
<li>CONJ-1211 jdbc 4.3 enquoteIdentifier missing validation</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/mariadb-corporation/mariadb-connector-j/blob/master/CHANGELOG.md">org.mariadb.jdbc:mariadb-java-client's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/tree/3.5.3">3.5.3</a>
(Mar 2025)</h2>
<p><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.5.2...3.5.3">Full
Changelog</a></p>
<h4>Bugs Fixed</h4>
<ul>
<li></li>
<li>CONJ-1226 Fixed issue where dates containing zero day or month
resulted in a DateTimeException</li>
<li>CONJ-1232 Resolved timestamp string representation incompatibility
between versions 2.7 and 3.x
<ul>
<li>see new option oldModeNoPrecisionTimestamp</li>
</ul>
</li>
<li>CONJ-1226 Fixed incorrect values returned by
ResultSet.getColumnType() for unsigned values</li>
<li>CONJ-1241 Corrected regression in 3.x affecting column metadata for
unsigned types</li>
<li>CONJ-1243 Fixed CallableStatement.getParameterMetadata() returning
wrong java.sql.Type for boolean values</li>
<li>CONJ-1236 Prevented NPE (Null Pointer Exception) after reconnection
failure in high availability configurations</li>
<li>CONJ-1237 Fixed issue with incorrect statements.isClosed value after
closing connection</li>
<li>CONJ-1239 Disabled BULK operations when no parameters are
present</li>
<li>CONJ-1240 Fixed connectivity issues with databases that only accept
TLSv1.3</li>
<li>CONJ-1235 Modified redirection option to enable by default only when
SSL is enabled</li>
</ul>
<h2><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/tree/3.5.2">3.5.2</a>
(Feb 2025)</h2>
<p><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.5.1...3.5.2">Full
Changelog</a></p>
<h4>Bugs Fixed</h4>
<ul>
<li>CONJ-1216 Resolved a performance issue that occurred when batch
processing on MySQL and older MariaDB (pre-10.2) servers</li>
<li>CONJ-1218 Incorrect behavior where XA connections are closed when
regular connections are terminated - this is against specifications</li>
<li>CONJ-1217 The trustCertificateKeyStorePassword alias parameter isn’t
taken into account</li>
<li>CONJ-1221 DatabaseMetadata.getTypeInfo() is missing the data types
UUID and VECTOR</li>
<li>CONJ-1225 System throws an exception prematurely without checking
all available connections</li>
<li>CONJ-1228 result-set.getObject() on BLOB type returns Blob in place
of byte[]</li>
<li>CONJ-660 new <code>disconnectOnExpiredPasswords</code> connection
option that controls client behavior when connecting with an expired
password.
When set to true (default), the client disconnects if it detects an
expired password.
When false, the client maintains the connection and allows setting a new
password.</li>
<li>CONJ-1229 Permit executeQuery commands to not return a
result-set</li>
</ul>
<h2><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/tree/3.5.1">3.5.1</a>
(Nov 2024)</h2>
<p><a
href="https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.5.0...3.5.1">Full
Changelog</a></p>
<h4>Notable changes</h4>
<ul>
<li>CONJ-1193 Implement parsec authentication</li>
<li>CONJ-1207 New HaMode: sequential write, loadbalance read</li>
<li>CONJ-1208 permit bulk for INSERT ON DUPLICATE KEY UPDATE commands
for 11.5.1+ servers</li>
</ul>
<h4>Bugs Fixed</h4>
<ul>
<li>CONJ-1053 Mark waffle-jna dependency optional in module
descriptor</li>
<li>CONJ-1196 setObject on java.util.Date was considered was a
java.sql.Date and truncate hour/minutes/seconds/ms while it must be
considered like a java.sql.Timestamp</li>
<li>CONJ-1211 jdbc 4.3 enquoteIdentifier missing validation</li>
<li>CONJ-1213 sql command ending with semicolon and trailing space are
not using bulk</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1622933546"><code>1622933</code></a>
[misc] set 3.5.3 version</li>
<li><a
href="b0c299ee26"><code>b0c299e</code></a>
Merge branch 'develop'</li>
<li><a
href="bd1d18f1af"><code>bd1d18f</code></a>
[misc] zero config not permitting non plugins without hash</li>
<li><a
href="ac2555bdb8"><code>ac2555b</code></a>
Merge branch 'develop'</li>
<li><a
href="22f8126638"><code>22f8126</code></a>
[misc] test improvement</li>
<li><a
href="cb03a35974"><code>cb03a35</code></a>
[misc] correcting test for MySQL user length limitation</li>
<li><a
href="031de361f7"><code>031de36</code></a>
[CONJ-1235] enable redirection option by default only when SSL is
enabled</li>
<li><a
href="5352d6bad2"><code>5352d6b</code></a>
[CONJ-1226] Dates containing zero day or month results into
DateTimeException</li>
<li><a
href="2d481205ca"><code>2d48120</code></a>
[CONJ-1243] CallableStatement.getParameterMetadata for Boolean return
wrong v...</li>
<li><a
href="606fe0df86"><code>606fe0d</code></a>
[misc] code style correction</li>
<li>Additional commits viewable in <a
href="https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.4.0...3.5.3">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>
2025-04-23 17:17:40 +02:00
Alex (TuxCoding)
5803a34f84 Bump the development-dependencies group across 1 directory with 2 updates (#1287)
Bumps the development-dependencies group with 2 updates in the /
directory:
[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.10.3 to 5.12.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/junit-team/junit5/releases">org.junit.jupiter:junit-jupiter's
releases</a>.</em></p>
<blockquote>
<p>JUnit 5.12.2 = Platform 1.12.2 + Jupiter 5.12.2 + Vintage 5.12.2</p>
<p>See <a
href="https://junit.org/junit5/docs/5.12.2/release-notes/">Release
Notes</a>.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2">https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2</a></p>
<p>JUnit 5.12.1 = Platform 1.12.1 + Jupiter 5.12.1 + Vintage 5.12.1</p>
<p>See <a
href="https://junit.org/junit5/docs/5.12.1/release-notes/">Release
Notes</a>.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/junit-team/junit5/compare/r5.12.0...r5.12.1">https://github.com/junit-team/junit5/compare/r5.12.0...r5.12.1</a></p>
<p>JUnit 5.12.0 = Platform 1.12.0 + Jupiter 5.12.0 + Vintage 5.12.0</p>
<p>See <a
href="https://junit.org/junit5/docs/5.12.0/release-notes/">Release
Notes</a>.</p>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/chris-carneiro"><code>@​chris-carneiro</code></a>
made their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/3938">junit-team/junit5#3938</a></li>
<li><a href="https://github.com/amaembo"><code>@​amaembo</code></a> made
their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/4024">junit-team/junit5#4024</a></li>
<li><a
href="https://github.com/vdmitrienko"><code>@​vdmitrienko</code></a>
made their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/3889">junit-team/junit5#3889</a></li>
<li><a
href="https://github.com/JojOatXGME"><code>@​JojOatXGME</code></a> made
their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/4032">junit-team/junit5#4032</a></li>
<li><a href="https://github.com/yhkuo41"><code>@​yhkuo41</code></a> made
their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/3169">junit-team/junit5#3169</a></li>
<li><a href="https://github.com/AndreasTu"><code>@​AndreasTu</code></a>
made their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/3431">junit-team/junit5#3431</a></li>
<li><a href="https://github.com/YongGoose"><code>@​YongGoose</code></a>
made their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/4115">junit-team/junit5#4115</a></li>
<li><a
href="https://github.com/JonasJebing"><code>@​JonasJebing</code></a>
made their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/4045">junit-team/junit5#4045</a></li>
<li><a href="https://github.com/ky0n"><code>@​ky0n</code></a> made their
first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/4152">junit-team/junit5#4152</a></li>
<li><a href="https://github.com/filiphr"><code>@​filiphr</code></a> made
their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/4148">junit-team/junit5#4148</a></li>
<li><a href="https://github.com/Anmavel"><code>@​Anmavel</code></a> made
their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/4149">junit-team/junit5#4149</a></li>
<li><a href="https://github.com/awelless"><code>@​awelless</code></a>
made their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/3259">junit-team/junit5#3259</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/junit-team/junit5/compare/r5.11.4...r5.12.0">https://github.com/junit-team/junit5/compare/r5.11.4...r5.12.0</a></p>
<p>JUnit 5.12.0-RC2 = Platform 1.12.0-RC2 + Jupiter 5.12.0-RC2 + Vintage
5.12.0-RC2</p>
<p>See <a
href="https://junit.org/junit5/docs/5.12.0-RC2/release-notes/">Release
Notes</a>.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/junit-team/junit5/compare/r5.12.0-RC1...r5.12.0-RC2">https://github.com/junit-team/junit5/compare/r5.12.0-RC1...r5.12.0-RC2</a></p>
<p>JUnit 5.12.0-RC1 = Platform 1.12.0-RC1 + Jupiter 5.12.0-RC1 + Vintage
5.12.0-RC1</p>
<p>See <a
href="https://junit.org/junit5/docs/5.12.0-RC1/release-notes/">Release
Notes</a>.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/junit-team/junit5/compare/r5.12.0-M1...r5.12.0-RC1">https://github.com/junit-team/junit5/compare/r5.12.0-M1...r5.12.0-RC1</a></p>
<p>JUnit 5.12.0-M1 = Platform 1.12.0-M1 + Jupiter 5.12.0-M1 + Vintage
5.12.0-M1</p>
<p>See <a
href="https://junit.org/junit5/docs/5.12.0-M1/release-notes/">Release
Notes</a>.</p>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/chris-carneiro"><code>@​chris-carneiro</code></a>
made their first contribution in <a
href="https://redirect.github.com/junit-team/junit5/pull/3938">junit-team/junit5#3938</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0a446598f2"><code>0a44659</code></a>
Release 5.12.2</li>
<li><a
href="4c7dfdc0c0"><code>4c7dfdc</code></a>
Finalize 5.12.2 release notes</li>
<li><a
href="561613e183"><code>561613e</code></a>
Fix handling of <code>CleanupMode.ON_SUCCESS</code></li>
<li><a
href="19d07d2306"><code>19d07d2</code></a>
Add 5.12.2 release notes from template</li>
<li><a
href="803cbb6d6e"><code>803cbb6</code></a>
Add build parameter for enabling dry-run mode for test execution</li>
<li><a
href="eb43e62247"><code>eb43e62</code></a>
Back to snapshots for further development</li>
<li><a
href="ba9c9ae111"><code>ba9c9ae</code></a>
Release 5.12.1</li>
<li><a
href="e28ad4a890"><code>e28ad4a</code></a>
Finalize 5.12.1 release notes</li>
<li><a
href="1044e2c63c"><code>1044e2c</code></a>
Move entry to 5.12.1 release notes</li>
<li><a
href="bea821d69a"><code>bea821d</code></a>
Fix Javadoc formatting</li>
<li>Additional commits viewable in <a
href="https://github.com/junit-team/junit5/compare/r5.10.3...r5.12.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `org.bouncycastle:bcprov-jdk18on` from 1.78.1 to 1.80
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/bcgit/bc-java/blob/main/docs/releasenotes.html">org.bouncycastle:bcprov-jdk18on's
changelog</a>.</em></p>
<blockquote>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
<p><!-- raw HTML omitted --><!-- raw HTML omitted -->2.1.1 Version<!--
raw HTML omitted --><!-- raw HTML omitted -->
Release: 1.80<!-- raw HTML omitted -->
Date:      2025, 14th January.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/bcgit/bc-java/commits">compare view</a></li>
</ul>
</details>
<br />

<details>
<summary>Most Recent Ignore Conditions Applied to This Pull
Request</summary>

| Dependency Name | Ignore Conditions |
| --- | --- |
| org.junit.jupiter:junit-jupiter | [< 5.10, > 5.9.1] |
</details>


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>
2025-04-23 17:17:27 +02:00
dependabot[bot]
86c4f48ec6 Bump the production-dependencies group across 1 directory with 8 updates
Bumps the production-dependencies group with 8 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) | `10.17.0` | `10.23.0` |
| [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) | `3.13.0` | `3.14.0` |
| [com.mycila:license-maven-plugin](https://github.com/mathieucarbou/license-maven-plugin) | `4.5` | `5.0.0` |
| [org.apache.maven.plugins:maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin) | `3.4.0` | `3.6.0` |
| [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) | `3.3.0` | `3.5.3` |
| org.slf4j:slf4j-jdk14 | `2.0.13` | `2.0.17` |
| [org.yaml:snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) | `2.2` | `2.4` |
| [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j) | `3.4.0` | `3.5.3` |



Updates `com.puppycrawl.tools:checkstyle` from 10.17.0 to 10.23.0
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.17.0...checkstyle-10.23.0)

Updates `org.apache.maven.plugins:maven-compiler-plugin` from 3.13.0 to 3.14.0
- [Release notes](https://github.com/apache/maven-compiler-plugin/releases)
- [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.14.0)

Updates `com.mycila:license-maven-plugin` from 4.5 to 5.0.0
- [Release notes](https://github.com/mathieucarbou/license-maven-plugin/releases)
- [Commits](https://github.com/mathieucarbou/license-maven-plugin/compare/license-maven-plugin-4.5...v5.0.0)

Updates `org.apache.maven.plugins:maven-checkstyle-plugin` from 3.4.0 to 3.6.0
- [Release notes](https://github.com/apache/maven-checkstyle-plugin/releases)
- [Commits](https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.4.0...maven-checkstyle-plugin-3.6.0)

Updates `org.apache.maven.plugins:maven-surefire-plugin` from 3.3.0 to 3.5.3
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.3.0...surefire-3.5.3)

Updates `org.slf4j:slf4j-jdk14` from 2.0.13 to 2.0.17

Updates `org.yaml:snakeyaml` from 2.2 to 2.4
- [Commits](https://bitbucket.org/snakeyaml/snakeyaml/branches/compare/snakeyaml-2.4..snakeyaml-2.2)

Updates `org.mariadb.jdbc:mariadb-java-client` from 3.4.0 to 3.5.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.4.0...3.5.3)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 10.23.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: org.apache.maven.plugins:maven-compiler-plugin
  dependency-version: 3.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: com.mycila:license-maven-plugin
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: production-dependencies
- dependency-name: org.apache.maven.plugins:maven-checkstyle-plugin
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-version: 3.5.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: org.slf4j:slf4j-jdk14
  dependency-version: 2.0.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: production-dependencies
- dependency-name: org.yaml:snakeyaml
  dependency-version: '2.4'
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
- dependency-name: org.mariadb.jdbc:mariadb-java-client
  dependency-version: 3.5.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-23 15:17:02 +00:00
Alex (TuxCoding)
06e6741493 Bump advanced-security/maven-dependency-submission-action from 4.0.3 to 4.1.1 (#1254)
Bumps
[advanced-security/maven-dependency-submission-action](https://github.com/advanced-security/maven-dependency-submission-action)
from 4.0.3 to 4.1.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/advanced-security/maven-dependency-submission-action/releases">advanced-security/maven-dependency-submission-action's
releases</a>.</em></p>
<blockquote>
<h2>v4.1.1</h2>
<p>No release notes provided.</p>
<h2>v4.1.0</h2>
<ul>
<li>
<p>Adds the ability to change the detector details for the dependency
snapshots via the optional input parameters:</p>
<ul>
<li><code>detector-name</code></li>
<li><code>detector-url</code></li>
<li><code>detector-version</code></li>
</ul>
<p>If the <code>detector-name</code> is specified, then all three become
mandatory as there are no sensible defaults that can be attributed to
the values.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4f64ddab9d"><code>4f64dda</code></a>
chore: Updating release files</li>
<li><a
href="dba3dacedd"><code>dba3dac</code></a>
4.1.1</li>
<li><a
href="4883574ccf"><code>4883574</code></a>
Merge pull request <a
href="https://redirect.github.com/advanced-security/maven-dependency-submission-action/issues/89">#89</a>
from david-wiggs/hotfix/fix-test</li>
<li><a
href="33e1d3d801"><code>33e1d3d</code></a>
Remove reference to undefined function</li>
<li><a
href="4b85c77703"><code>4b85c77</code></a>
Merge pull request <a
href="https://redirect.github.com/advanced-security/maven-dependency-submission-action/issues/88">#88</a>
from david-wiggs/unique-job-matrix</li>
<li><a
href="73d9d97f9f"><code>73d9d97</code></a>
Update src/snapshot-generator.test.ts</li>
<li><a
href="967455e178"><code>967455e</code></a>
No need to import getMavenSettingsFile when testing</li>
<li><a
href="7592e88109"><code>7592e88</code></a>
Use supplied correlator without concatenation</li>
<li><a
href="2ba839e04b"><code>2ba839e</code></a>
Add some tests</li>
<li><a
href="5275a08fb4"><code>5275a08</code></a>
Address merge conflicts</li>
<li>Additional commits viewable in <a
href="https://github.com/advanced-security/maven-dependency-submission-action/compare/v4.0.3...v4.1.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=advanced-security/maven-dependency-submission-action&package-manager=github_actions&previous-version=4.0.3&new-version=4.1.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2025-04-23 17:17:02 +02:00
dependabot[bot]
98da5a36da Bump the development-dependencies group across 1 directory with 2 updates
Bumps the development-dependencies group with 2 updates in the / directory: [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.10.3 to 5.12.2
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.12.2)

Updates `org.bouncycastle:bcprov-jdk18on` from 1.78.1 to 1.80
- [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-version: 5.12.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
- dependency-name: org.bouncycastle:bcprov-jdk18on
  dependency-version: '1.80'
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: development-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-23 15:16:39 +00:00
dependabot[bot]
3bd9e60783 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.3 to 4.1.1.
- [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.3...v4.1.1)

---
updated-dependencies:
- dependency-name: advanced-security/maven-dependency-submission-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-23 15:16:04 +00:00
TuxCoding
568ad7a621 Add configuration option to kick players when toggling premium state
Fixes #1285
2025-04-23 17:12:32 +02:00
TuxCoding
1464ef2952 Add command invoker for change command events
Related #1285
2025-04-23 16:46:37 +02:00
TuxCoding
46239c9ffc Use InboundConnection as session keys for Velocity
Related #1286
2025-04-23 12:22:10 +02:00
TuxCoding
083068b856 Update Mockito for newer Java versions 2025-04-23 12:21:24 +02:00
TuxCoding
dd2aa922d7 [ci-skip] Add project logo 2025-03-18 17:22:48 +01:00
games647
b77ea285e5 Be more precise about why using legacy scheduler 2025-03-18 17:22:48 +01:00
games647
f8f0e7ac7a Drop lombok tool 2025-03-18 17:22:48 +01:00
41 changed files with 501 additions and 243 deletions

25
.github/release.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
# Configure how the release notes are generated for GitHub releases
changelog:
# List of authors (like bots) and labels to exclude from pull requests
exclude:
labels:
- ignore-for-release
categories:
- title: 🛠 Breaking Changes
labels:
- Semver-Major
- breaking-change
- title: 🎉 Exciting New Features
labels:
- Semver-Minor
- enhancement
- title: 🐞 Bugfixes
labels:
- bug
- title: 👒 Dependencies
labels:
- dependencies
- title: Other Changes
labels:
- "*"

View File

@@ -40,7 +40,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
@@ -59,6 +59,6 @@ jobs:
run: mvn package -f "pom.xml" --batch-mode -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip -DskipTests -Dmaven.test.skip.exec -Dlicense.skip=true -Drat.skip=true -Dspotless.check.skip=true -t /home/runner/.m2/toolchains.xml
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{matrix.language}}"

View File

@@ -64,4 +64,4 @@ jobs:
- name: Submit Dependency Snapshot
if: ${{ github.event_name == 'push' }}
uses: advanced-security/maven-dependency-submission-action@v4.0.3
uses: advanced-security/maven-dependency-submission-action@v5.0.0

View File

@@ -1,5 +1,7 @@
# FastLogin
![A shield-shaped emblem with a bold lightning bolt on the left, resembling Minecraft blocks. To the right, "FastLogin" is written in teal, with the tagline: "Automatically detect and login premium Minecraft players"](https://github.com/user-attachments/assets/0788ef69-029b-465e-83a2-b8e7bccc6295 "FastLogin project logo.avif")
Checks if a Minecraft player has a paid account (premium). If so, they can skip offline authentication (auth plugins).
So they don't need to enter passwords. This is also called auto login (auto-login).
@@ -30,7 +32,11 @@ Development builds contain the latest changes from the Source-Code. They are ble
but also include features, enhancements and bug fixes that are not yet in a released version. If you click on the left
side on `Changes`, you can see iterative change sets leading to a specific build.
You can download them from here: https://ci.codemc.org/job/Games647/job/FastLogin/
~~You can download them from here: [CodeMC(Jenkins)](https://ci.codemc.org/job/Games647/job/FastLogin/)~~
Currently broken due changed usernames. Download it from [here](https://github.com/TuxCoding/FastLogin/releases)
***

View File

@@ -168,7 +168,7 @@
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.20.6-R0.1-SNAPSHOT</version>
<version>1.21.6-R0.1-SNAPSHOT</version>
<scope>provided</scope>
<!-- Use our own newer api version -->
<exclusions>
@@ -348,6 +348,22 @@
</exclusions>
</dependency>
<dependency>
<groupId>com.github.zigazajc007</groupId>
<artifactId>Passky</artifactId>
<version>v3.0.0</version>
<scope>provided</scope>
<optional>true</optional>
<!-- Exclude dependencies to prevent potential version conflicts-->
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--No maven repository :(-->
<dependency>
<groupId>de.st_ddt.crazy</groupId>
@@ -379,7 +395,7 @@
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>1.78.1</version>
<version>1.80</version>
<scope>test</scope>
</dependency>
</dependencies>

View File

@@ -31,6 +31,7 @@ import com.github.games647.fastlogin.core.message.LoginActionMessage;
import com.github.games647.fastlogin.core.message.NamespaceKey;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import io.papermc.paper.configuration.ServerConfiguration;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.entity.Player;
@@ -133,6 +134,13 @@ public class BungeeManager {
}
private boolean detectProxy() {
try {
ServerConfiguration.class.getDeclaredMethod("isProxyEnabled");
return Bukkit.getServerConfig().isProxyEnabled();
} catch (NoClassDefFoundError | NoSuchMethodException noSuchClassMethodEx) {
// Ignore continue below
}
try {
if (isProxySupported("org.spigotmc.SpigotConfig", "bungee")) {
return true;

View File

@@ -28,6 +28,7 @@ package com.github.games647.fastlogin.bukkit;
import com.comphenix.protocol.ProtocolLibrary;
import com.github.games647.fastlogin.bukkit.command.CrackedCommand;
import com.github.games647.fastlogin.bukkit.command.PremiumCommand;
import com.github.games647.fastlogin.bukkit.command.DeleteCommand;
import com.github.games647.fastlogin.bukkit.listener.ConnectionListener;
import com.github.games647.fastlogin.bukkit.listener.PaperCacheListener;
import com.github.games647.fastlogin.bukkit.listener.protocollib.ProtocolLibListener;
@@ -155,6 +156,7 @@ public class FastLoginBukkit extends JavaPlugin implements PlatformPlugin<Comman
//register commands using a unique name
Optional.ofNullable(getCommand("premium")).ifPresent(c -> c.setExecutor(new PremiumCommand(this)));
Optional.ofNullable(getCommand("cracked")).ifPresent(c -> c.setExecutor(new CrackedCommand(this)));
Optional.ofNullable(getCommand("fldelete")).ifPresent(c -> c.setExecutor(new DeleteCommand(this)));
}
private boolean initializeFloodgate() {

View File

@@ -30,6 +30,7 @@ import com.github.games647.fastlogin.bukkit.event.BukkitFastLoginPremiumToggleEv
import com.github.games647.fastlogin.core.storage.StoredProfile;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import static com.github.games647.fastlogin.core.shared.event.FastLoginPremiumToggleEvent.PremiumToggleReason;
@@ -57,6 +58,7 @@ public class CrackedCommand extends ToggleCommand {
return;
}
Player player = (Player) sender;
if (forwardCrackedCommand(sender, sender.getName())) {
return;
}
@@ -71,7 +73,16 @@ public class CrackedCommand extends ToggleCommand {
plugin.getScheduler().runAsync(() -> {
plugin.getCore().getStorage().save(profile);
plugin.getServer().getPluginManager().callEvent(
new BukkitFastLoginPremiumToggleEvent(profile, PremiumToggleReason.COMMAND_OTHER));
new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_OTHER)
);
plugin.getScheduler().getSyncExecutor().execute(() -> {
if (plugin.getCore().getConfig().getBoolean("kick-toggle", true)) {
player.kickPlayer(plugin.getCore().getMessage("remove-premium"));
} else {
plugin.getCore().sendLocaleMessage("add-premium", sender);
}
});
});
} else {
plugin.getCore().sendLocaleMessage("not-premium", sender);
@@ -104,7 +115,7 @@ public class CrackedCommand extends ToggleCommand {
plugin.getScheduler().runAsync(() -> {
plugin.getCore().getStorage().save(profile);
plugin.getServer().getPluginManager().callEvent(
new BukkitFastLoginPremiumToggleEvent(profile, PremiumToggleReason.COMMAND_OTHER));
new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_OTHER));
});
}
}

View File

@@ -0,0 +1,94 @@
/*
* SPDX-License-Identifier: MIT
*
* The MIT License (MIT)
*
* Copyright (c) 2015-2024 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.command;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
public class DeleteCommand implements TabExecutor {
private final FastLoginBukkit plugin;
public DeleteCommand(FastLoginBukkit plugin) {
this.plugin = plugin;
}
/**
* Handles the command to delete profiles.
*/
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!sender.hasPermission(command.getPermission())) {
plugin.getCore().sendLocaleMessage("no-permission", sender);
return true;
}
if (plugin.getBungeeManager().isEnabled()) {
sender.sendMessage("Error: Cannot delete profile entries when using BungeeCord!");
return false;
}
if (args.length < 1) {
sender.sendMessage("Error: Must supply username to delete!");
return false;
}
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
int count = plugin.getCore().getStorage().deleteProfile(args[0]);
if (!(sender instanceof ConsoleCommandSender)) {
Bukkit.getScheduler().runTask(plugin, () -> {
if (count == 0) {
sender.sendMessage("Error: No profile entries found!");
} else {
sender.sendMessage("Deleted " + count + " matching profile entries");
}
});
}
});
return true;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
List<String> list = new ArrayList<>();
for (Player p : Bukkit.getOnlinePlayers()) {
if (p.getName().toLowerCase().startsWith(args[0])) {
list.add(p.getName());
}
}
return null;
}
}

View File

@@ -68,7 +68,8 @@ public class PremiumCommand extends ToggleCommand {
return;
}
UUID id = ((Player) sender).getUniqueId();
Player player = (Player) sender;
UUID id = player.getUniqueId();
if (plugin.getConfig().getBoolean("premium-warning") && !plugin.getCore().getPendingConfirms().contains(id)) {
sender.sendMessage(plugin.getCore().getMessage("premium-warning"));
plugin.getCore().getPendingConfirms().add(id);
@@ -86,10 +87,17 @@ public class PremiumCommand extends ToggleCommand {
plugin.getScheduler().runAsync(() -> {
plugin.getCore().getStorage().save(profile);
plugin.getServer().getPluginManager().callEvent(
new BukkitFastLoginPremiumToggleEvent(profile, PremiumToggleReason.COMMAND_SELF));
});
new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_SELF)
);
plugin.getCore().sendLocaleMessage("add-premium", sender);
plugin.getScheduler().getSyncExecutor().execute(() -> {
if (plugin.getCore().getConfig().getBoolean("kick-toggle", true)) {
player.kickPlayer(plugin.getCore().getMessage("remove-premium"));
} else {
plugin.getCore().sendLocaleMessage("add-premium", sender);
}
});
});
}
}
@@ -117,7 +125,8 @@ public class PremiumCommand extends ToggleCommand {
plugin.getScheduler().runAsync(() -> {
plugin.getCore().getStorage().save(profile);
plugin.getServer().getPluginManager().callEvent(
new BukkitFastLoginPremiumToggleEvent(profile, PremiumToggleReason.COMMAND_OTHER));
new BukkitFastLoginPremiumToggleEvent(sender, profile, PremiumToggleReason.COMMAND_OTHER)
);
});
plugin.getCore().sendLocaleMessage("add-premium-other", sender);

View File

@@ -27,6 +27,7 @@ package com.github.games647.fastlogin.bukkit.event;
import com.github.games647.fastlogin.core.shared.event.FastLoginPremiumToggleEvent;
import com.github.games647.fastlogin.core.storage.StoredProfile;
import org.bukkit.command.CommandSender;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
@@ -34,11 +35,15 @@ import org.jetbrains.annotations.NotNull;
public class BukkitFastLoginPremiumToggleEvent extends Event implements FastLoginPremiumToggleEvent {
private static final HandlerList HANDLERS = new HandlerList();
private final CommandSender invoker;
private final StoredProfile profile;
private final PremiumToggleReason reason;
public BukkitFastLoginPremiumToggleEvent(StoredProfile profile, PremiumToggleReason reason) {
public BukkitFastLoginPremiumToggleEvent(CommandSender invoker, StoredProfile profile, PremiumToggleReason reason) {
super(true);
this.invoker = invoker;
this.profile = profile;
this.reason = reason;
}
@@ -48,6 +53,13 @@ public class BukkitFastLoginPremiumToggleEvent extends Event implements FastLogi
return profile;
}
/**
* @return who triggered this change. This could be a Player for itself or others (Admin) or the console.
*/
public CommandSender getInvoker() {
return invoker;
}
@Override
public PremiumToggleReason getReason() {
return reason;

View File

@@ -0,0 +1,68 @@
/*
* SPDX-License-Identifier: MIT
*
* The MIT License (MIT)
*
* Copyright (c) 2015-2024 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.hook;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
import com.rabbitcomapny.api.Identifier;
import com.rabbitcomapny.api.LoginResult;
import com.rabbitcomapny.api.PasskyAPI;
import com.rabbitcomapny.api.RegisterResult;
import org.bukkit.entity.Player;
public class PasskyHook implements AuthPlugin<Player> {
private final FastLoginBukkit plugin;
public PasskyHook(FastLoginBukkit plugin) {
this.plugin = plugin;
}
@Override
public boolean forceLogin(Player player) {
LoginResult result = PasskyAPI.forceLogin(new Identifier(player), true);
if (!result.success) {
plugin.getLog().error("Failed to force login {} via Passky: {}", player.getName(), result.status);
}
return result.success;
}
@Override
public boolean forceRegister(Player player, String password) {
RegisterResult result = PasskyAPI.forceRegister(new Identifier(player), password, true);
if (!result.success) {
plugin.getLog().error("Failed to register {} via Passky: {}", player.getName(), result.status);
}
return result.success;
}
@Override
public boolean isRegistered(String playerName) {
return PasskyAPI.isRegistered(new Identifier(playerName));
}
}

View File

@@ -31,7 +31,6 @@ import com.google.common.hash.Hasher;
import com.google.common.hash.Hashing;
import com.google.common.io.Resources;
import com.google.common.primitives.Longs;
import lombok.val;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
@@ -41,6 +40,7 @@ import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.math.BigInteger;
import java.net.URL;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
@@ -53,6 +53,7 @@ import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.time.Instant;
import java.util.Arrays;
@@ -198,9 +199,9 @@ final class EncryptionUtil {
private static PublicKey loadMojangSessionKey()
throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
val keyUrl = FastLoginBukkit.class.getClassLoader().getResource("yggdrasil_session_pubkey.der");
val keyData = Resources.toByteArray(keyUrl);
val keySpec = new X509EncodedKeySpec(keyData);
URL keyUrl = FastLoginBukkit.class.getClassLoader().getResource("yggdrasil_session_pubkey.der");
byte[] keyData = Resources.toByteArray(keyUrl);
KeySpec keySpec = new X509EncodedKeySpec(keyData);
return KeyFactory.getInstance("RSA").generatePublic(keySpec);
}

View File

@@ -39,6 +39,7 @@ import com.comphenix.protocol.utility.MinecraftVersion;
import com.comphenix.protocol.wrappers.BukkitConverters;
import com.comphenix.protocol.wrappers.Converters;
import com.comphenix.protocol.wrappers.WrappedGameProfile;
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;
@@ -48,7 +49,6 @@ import com.mojang.datafixers.util.Either;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.util.AttributeKey;
import lombok.val;
import org.bukkit.entity.Player;
import org.geysermc.floodgate.api.player.FloodgatePlayer;
import org.jetbrains.annotations.NotNull;
@@ -245,8 +245,9 @@ public class ProtocolLibListener extends PacketAdapter {
// public key is sent separate
clientKey = Optional.empty();
} else {
val profileKey = packet.getOptionals(BukkitConverters.getWrappedPublicKeyDataConverter())
.optionRead(0);
Optional<Optional<WrappedProfileKeyData>> profileKey = packet.getOptionals(
BukkitConverters.getWrappedPublicKeyDataConverter()
).optionRead(0);
clientKey = profileKey.flatMap(Function.identity()).flatMap(data -> {
Instant expires = data.getExpireTime();

View File

@@ -50,7 +50,6 @@ import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
import com.github.games647.fastlogin.bukkit.InetUtils;
import com.github.games647.fastlogin.bukkit.listener.protocollib.packet.ClientPublicKey;
import lombok.val;
import org.bukkit.entity.Player;
import javax.crypto.Cipher;
@@ -307,7 +306,7 @@ public class VerifyResponseTask implements Runnable {
startPacket.getStrings().write(0, username);
EquivalentConverter<WrappedProfileKeyData> converter = BukkitConverters.getWrappedPublicKeyDataConverter();
val wrappedKey = Optional.ofNullable(clientKey).map(key ->
Optional<WrappedProfileKeyData> wrappedKey = Optional.ofNullable(clientKey).map(key ->
new WrappedProfileKeyData(clientKey.expiry(), clientKey.key(), clientKey.signature())
);

View File

@@ -25,20 +25,38 @@
*/
package com.github.games647.fastlogin.bukkit.listener.protocollib.packet;
import lombok.Value;
import lombok.experimental.Accessors;
import java.security.PublicKey;
import java.time.Instant;
import java.util.Base64;
import java.util.StringJoiner;
@Accessors(fluent = true)
@Value(staticConstructor = "of")
public class ClientPublicKey {
Instant expiry;
PublicKey key;
byte[] signature;
private final Instant expiry;
private final PublicKey key;
private final byte[] signature;
public Instant expiry() {
return expiry;
}
public PublicKey key() {
return key;
}
public byte[] signature() {
return signature;
}
public ClientPublicKey(Instant expiry, PublicKey key, byte[] signature) {
this.expiry = expiry;
this.key = key;
this.signature = signature;
}
public static ClientPublicKey of(Instant expiry, PublicKey key, byte[] signature) {
return new ClientPublicKey(expiry, key, signature);
}
public boolean isExpired(Instant verifyTimestamp) {
return !verifyTimestamp.isBefore(expiry);

View File

@@ -32,6 +32,7 @@ import com.github.games647.fastlogin.bukkit.hook.LogItHook;
import com.github.games647.fastlogin.bukkit.hook.LoginSecurityHook;
import com.github.games647.fastlogin.bukkit.hook.UltraAuthHook;
import com.github.games647.fastlogin.bukkit.hook.XAuthHook;
import com.github.games647.fastlogin.bukkit.hook.PasskyHook;
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -94,7 +95,7 @@ public class DelayedAuthHook implements Runnable {
try {
List<Class<? extends AuthPlugin<Player>>> hooks = Arrays.asList(AuthMeHook.class,
CrazyLoginHook.class, LogItHook.class, LoginSecurityHook.class, UltraAuthHook.class,
XAuthHook.class);
XAuthHook.class, PasskyHook.class);
for (Class<? extends AuthPlugin<Player>> clazz : hooks) {
String pluginName = clazz.getSimpleName();

View File

@@ -30,6 +30,7 @@ softdepend:
- LogIt
- UltraAuth
- xAuth
- Passky
commands:
${project.parent.name}:
@@ -44,6 +45,11 @@ commands:
usage: /<command> [player]
permission: ${project.artifactId}.command.cracked
fldelete:
description: 'Delete player profile data'
usage: /<command> [player]
permission: ${project.artifactId}.command.delete
permissions:
${project.artifactId}.command.premium:
description: 'Label themselves as premium'
@@ -62,3 +68,7 @@ permissions:
description: 'Label others as cracked'
children:
${project.artifactId}.command.cracked: true
${project.artifactId}.command.delete:
description: 'Delete other players profile data'
default: op

View File

@@ -26,7 +26,7 @@
package com.github.games647.fastlogin.bukkit;
import com.github.games647.fastlogin.core.CommonUtil;
import lombok.val;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import org.junit.jupiter.api.Test;
@@ -37,13 +37,13 @@ class FastLoginBukkitTest {
@Test
void testRGB() {
val message = "&x00002a00002b&lText";
val msg = CommonUtil.translateColorCodes(message);
String message = "&x00002a00002b&lText";
String msg = CommonUtil.translateColorCodes(message);
assertEquals(msg, "§x00002a00002b§lText");
@SuppressWarnings("deprecation")
val components = TextComponent.fromLegacyText(msg);
val expected = "{\"bold\":true,\"color\":\"#00a00b\",\"text\":\"Text\"}";
BaseComponent[] components = TextComponent.fromLegacyText(msg);
String expected = "{\"bold\":true,\"color\":\"#00a00b\",\"text\":\"Text\"}";
//noinspection deprecation
assertEquals(ComponentSerializer.toString(components), expected);
}

View File

@@ -28,7 +28,6 @@ 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 lombok.val;
import java.io.IOException;
import java.util.Base64;
@@ -37,7 +36,7 @@ public class Base64Adapter extends TypeAdapter<byte[]> {
@Override
public void write(JsonWriter out, byte[] value) throws IOException {
val encoded = Base64.getEncoder().encodeToString(value);
String encoded = Base64.getEncoder().encodeToString(value);
out.value(encoded);
}

View File

@@ -27,8 +27,8 @@ 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.hash.Hasher;
import com.google.common.hash.Hashing;
import lombok.val;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
@@ -51,6 +51,7 @@ import java.security.SignatureException;
import java.security.interfaces.RSAPublicKey;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
@@ -60,7 +61,7 @@ class EncryptionUtilTest {
@Test
void testVerifyToken() {
val random = ThreadLocalRandom.current();
Random random = ThreadLocalRandom.current();
byte[] token = EncryptionUtil.generateVerifyToken(random);
assertAll(
@@ -88,10 +89,10 @@ class EncryptionUtilTest {
@Test
void testExpiredClientKey() throws Exception {
val clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key.json");
ClientPublicKey clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key.json");
// Client expires at the exact second mentioned, so use it for verification
val expiredTimestamp = clientKey.expiry();
Instant expiredTimestamp = clientKey.expiry();
assertFalse(EncryptionUtil.verifyClientKey(clientKey, expiredTimestamp, null));
}
@@ -105,7 +106,7 @@ class EncryptionUtilTest {
"client_keys/invalid_wrong_signature.json"
})
void testInvalidClientKey(String clientKeySource) throws Exception {
val clientKey = ResourceLoader.loadClientKey(clientKeySource);
ClientPublicKey clientKey = ResourceLoader.loadClientKey(clientKeySource);
Instant expireTimestamp = clientKey.expiry().minus(5, ChronoUnit.HOURS);
assertFalse(EncryptionUtil.verifyClientKey(clientKey, expireTimestamp, null));
@@ -113,34 +114,34 @@ class EncryptionUtilTest {
@Test
void testValidClientKey() throws Exception {
val clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key.json");
val verificationTimestamp = clientKey.expiry().minus(5, ChronoUnit.HOURS);
ClientPublicKey clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key.json");
Instant verificationTimestamp = clientKey.expiry().minus(5, ChronoUnit.HOURS);
assertTrue(EncryptionUtil.verifyClientKey(clientKey, verificationTimestamp, null));
}
@Test
void testValid191ClientKey() throws Exception {
val clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key_19_1.json");
val verificationTimestamp = clientKey.expiry().minus(5, ChronoUnit.HOURS);
ClientPublicKey clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key_19_1.json");
Instant verificationTimestamp = clientKey.expiry().minus(5, ChronoUnit.HOURS);
val ownerPremiumId = UUID.fromString("0aaa2c13-922a-411b-b655-9b8c08404695");
UUID ownerPremiumId = UUID.fromString("0aaa2c13-922a-411b-b655-9b8c08404695");
assertTrue(EncryptionUtil.verifyClientKey(clientKey, verificationTimestamp, ownerPremiumId));
}
@Test
void testIncorrect191ClientOwner() throws Exception {
val clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key_19_1.json");
val verificationTimestamp = clientKey.expiry().minus(5, ChronoUnit.HOURS);
ClientPublicKey clientKey = ResourceLoader.loadClientKey("client_keys/valid_public_key_19_1.json");
Instant verificationTimestamp = clientKey.expiry().minus(5, ChronoUnit.HOURS);
val ownerPremiumId = UUID.fromString("61699b2e-d327-4a01-9f1e-0ea8c3f06bc6");
UUID ownerPremiumId = UUID.fromString("61699b2e-d327-4a01-9f1e-0ea8c3f06bc6");
assertFalse(EncryptionUtil.verifyClientKey(clientKey, verificationTimestamp, ownerPremiumId));
}
@Test
void testDecryptSharedSecret() throws Exception {
KeyPair serverPair = EncryptionUtil.generateKeyPair();
val serverPK = serverPair.getPublic();
PublicKey serverPK = serverPair.getPublic();
SecretKey secretKey = generateSharedKey();
byte[] encryptedSecret = encrypt(serverPK, secretKey.getEncoded());
@@ -152,7 +153,7 @@ class EncryptionUtilTest {
private static byte[] encrypt(PublicKey receiverKey, byte... message)
throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
val encryptCipher = Cipher.getInstance(receiverKey.getAlgorithm());
Cipher encryptCipher = Cipher.getInstance(receiverKey.getAlgorithm());
encryptCipher.init(Cipher.ENCRYPT_MODE, receiverKey);
return encryptCipher.doFinal(message);
}
@@ -168,9 +169,9 @@ class EncryptionUtilTest {
@Test
void testServerIdHash() throws Exception {
val serverId = "";
val sharedSecret = generateSharedKey();
val serverPK = ResourceLoader.loadClientKey("client_keys/valid_public_key.json").key();
String serverId = "";
SecretKeySpec sharedSecret = generateSharedKey();
PublicKey serverPK = ResourceLoader.loadClientKey("client_keys/valid_public_key.json").key();
String sessionHash = getServerHash(serverId, sharedSecret, serverPK);
assertEquals(EncryptionUtil.getServerIdHashString(serverId, sharedSecret, serverPK), sessionHash);
@@ -185,7 +186,7 @@ class EncryptionUtilTest {
// sha1.update(server's encoded public key from Encryption Request)
// hash := sha1.hexdigest() # String of hex characters
@SuppressWarnings("deprecation")
val hasher = Hashing.sha1().newHasher();
Hasher hasher = Hashing.sha1().newHasher();
hasher.putString(serverId, StandardCharsets.US_ASCII);
hasher.putBytes(sharedSecret.getEncoded());
hasher.putBytes(serverPK.getEncoded());
@@ -198,9 +199,9 @@ class EncryptionUtilTest {
@Test
void testServerIdHashWrongSecret() throws Exception {
val serverId = "";
val sharedSecret = generateSharedKey();
val serverPK = ResourceLoader.loadClientKey("client_keys/valid_public_key.json").key();
String serverId = "";
SecretKeySpec sharedSecret = generateSharedKey();
PublicKey serverPK = ResourceLoader.loadClientKey("client_keys/valid_public_key.json").key();
String sessionHash = getServerHash(serverId, sharedSecret, serverPK);
assertNotEquals(EncryptionUtil.getServerIdHashString("", generateSharedKey(), serverPK), sessionHash);
@@ -208,12 +209,12 @@ class EncryptionUtilTest {
@Test
void testServerIdHashWrongServerKey() {
val serverId = "";
val sharedSecret = generateSharedKey();
val serverPK = EncryptionUtil.generateKeyPair().getPublic();
String serverId = "";
SecretKeySpec sharedSecret = generateSharedKey();
PublicKey serverPK = EncryptionUtil.generateKeyPair().getPublic();
String sessionHash = getServerHash(serverId, sharedSecret, serverPK);
val wrongPK = EncryptionUtil.generateKeyPair().getPublic();
PublicKey wrongPK = EncryptionUtil.generateKeyPair().getPublic();
assertNotEquals(EncryptionUtil.getServerIdHashString("", sharedSecret, wrongPK), sessionHash);
}
@@ -257,8 +258,8 @@ class EncryptionUtilTest {
@Test
void testNonce() throws Exception {
byte[] expected = {1, 2, 3, 4};
val serverKey = EncryptionUtil.generateKeyPair();
val encryptedNonce = encrypt(serverKey.getPublic(), expected);
KeyPair serverKey = EncryptionUtil.generateKeyPair();
byte[] encryptedNonce = encrypt(serverKey.getPublic(), expected);
assertTrue(EncryptionUtil.verifyNonce(expected, serverKey.getPrivate(), encryptedNonce));
}
@@ -266,19 +267,19 @@ class EncryptionUtilTest {
@Test
void testNonceIncorrect() throws Exception {
byte[] expected = {1, 2, 3, 4};
val serverKey = EncryptionUtil.generateKeyPair();
KeyPair serverKey = EncryptionUtil.generateKeyPair();
// flipped first character
val encryptedNonce = encrypt(serverKey.getPublic(), new byte[]{0, 2, 3, 4});
byte[] 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};
val serverKey = EncryptionUtil.generateKeyPair();
KeyPair serverKey = EncryptionUtil.generateKeyPair();
// generate a new keypair that is different
val encryptedNonce = encrypt(EncryptionUtil.generateKeyPair().getPublic(), expected);
byte[] encryptedNonce = encrypt(EncryptionUtil.generateKeyPair().getPublic(), expected);
assertThrows(GeneralSecurityException.class,
() -> EncryptionUtil.verifyNonce(expected, serverKey.getPrivate(), encryptedNonce)
@@ -288,7 +289,7 @@ class EncryptionUtilTest {
@Test
void testNonceIncorrectEmpty() {
byte[] expected = {1, 2, 3, 4};
val serverKey = EncryptionUtil.generateKeyPair();
KeyPair serverKey = EncryptionUtil.generateKeyPair();
byte[] encryptedNonce = {};
assertThrows(GeneralSecurityException.class,

View File

@@ -28,16 +28,16 @@ package com.github.games647.fastlogin.bukkit.listener.protocollib;
import com.google.common.io.Resources;
import com.google.gson.Gson;
import com.google.gson.annotations.JsonAdapter;
import lombok.val;
import java.io.IOException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class SignatureTestData {
public static SignatureTestData fromResource(String resourceName) throws IOException {
val keyUrl = Resources.getResource(resourceName);
val encodedSignature = Resources.toString(keyUrl, StandardCharsets.US_ASCII);
URL keyUrl = Resources.getResource(resourceName);
String encodedSignature = Resources.toString(keyUrl, StandardCharsets.US_ASCII);
return new Gson().fromJson(encodedSignature, SignatureTestData.class);
}

View File

@@ -26,7 +26,6 @@
package com.github.games647.fastlogin.bukkit.task;
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
import lombok.val;
import org.bukkit.entity.Player;
import org.junit.jupiter.api.Test;
@@ -36,7 +35,7 @@ class DelayedAuthHookTest {
@Test
void createNewReflectiveInstance() throws ReflectiveOperationException {
val authHook = new DelayedAuthHook(null);
DelayedAuthHook authHook = new DelayedAuthHook(null);
assertNotNull(authHook.newInstance(DummyHook.class));
}

View File

@@ -76,7 +76,12 @@ public class AsyncToggleMessage implements Runnable {
? PremiumToggleReason.COMMAND_OTHER : PremiumToggleReason.COMMAND_SELF;
core.getPlugin().getProxy().getPluginManager().callEvent(
new BungeeFastLoginPremiumToggleEvent(playerProfile, reason));
sendMessage("remove-premium");
if (isPlayerSender && core.getConfig().getBoolean("kick-toggle", true)) {
sender.disconnect(TextComponent.fromLegacyText(core.getMessage("remove-premium")));
} else {
sendMessage("remove-premium");
}
}
private void activatePremium() {

View File

@@ -140,21 +140,21 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>2.0.13</version>
<version>2.0.17</version>
</dependency>
<!-- snakeyaml is present in Bungee, Spigot, so we could use this independent implementation -->
<dependency>
<groupId>net.md-5</groupId>
<artifactId>bungeecord-config</artifactId>
<version>1.20-R0.2-SNAPSHOT</version>
<version>1.20-R0.2</version>
</dependency>
<!-- This is optional in BungeeCord-config, so we include it here manually -->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.2</version>
<version>2.4</version>
</dependency>
<!--Floodgate for Xbox Live Authentication-->
@@ -203,7 +203,7 @@
<dependency>
<groupId>com.github.games647</groupId>
<artifactId>craftapi</artifactId>
<version>0.8.1</version>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Database driver included in Spigot -->

View File

@@ -27,10 +27,9 @@ package com.github.games647.fastlogin.core;
import com.github.games647.craftapi.model.auth.Verification;
import com.github.games647.craftapi.resolver.MojangResolver;
import com.github.games647.craftapi.resolver.Options;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.util.Optional;
@@ -44,38 +43,12 @@ import java.util.Optional;
*/
public class ProxyAgnosticMojangResolver extends MojangResolver {
private static final String HOST = "sessionserver.mojang.com";
/**
* A formatting string containing a URL used to call the {@code hasJoined} method on mojang session servers.
* <p>
* Formatting parameters:
* 1. The username of the player in question
* 2. The serverId of this server
*/
public static final String ENDPOINT = "https://" + HOST + "/session/minecraft/hasJoined?username=%s&serverId=%s";
public ProxyAgnosticMojangResolver(Options options) {
super(options);
}
@Override
public Optional<Verification> hasJoined(String username, String serverHash, InetAddress hostIp)
throws IOException {
String url = String.format(ENDPOINT, username, serverHash);
HttpURLConnection conn = this.getConnection(url);
int responseCode = conn.getResponseCode();
Verification verification = null;
// Mojang session servers send HTTP 204 (NO CONTENT) when the authentication seems invalid
// If that's not our case, the authentication is valid, and so we can parse the response.
if (responseCode != HttpURLConnection.HTTP_NO_CONTENT) {
verification = this.parseRequest(conn, this::parseVerification);
}
return Optional.ofNullable(verification);
}
// Functional implementation of InputStreamAction, used in hasJoined method in parseRequest call
protected Verification parseVerification(InputStream input) throws IOException {
return this.readJson(input, Verification.class);
return super.hasJoined(username, serverHash, null);
}
}

View File

@@ -63,7 +63,7 @@ public class LoginActionMessage implements ChannelMessage {
@Override
public void readFrom(ByteArrayDataInput input) {
this.type = Type.values()[input.readInt()];
this.type = Type.values()[input.readByte()];
this.playerName = input.readUTF();
@@ -75,7 +75,7 @@ public class LoginActionMessage implements ChannelMessage {
@Override
public void writeTo(ByteArrayDataOutput output) {
output.writeInt(type.ordinal());
output.writeByte(type.ordinal());
//Data is sent through a random player. We have to tell the Bukkit version of this plugin the target
output.writeUTF(playerName);

View File

@@ -43,9 +43,30 @@ public abstract class AbstractAsyncScheduler {
this.processingPool = processingPool;
}
public abstract CompletableFuture<Void> runAsync(Runnable task);
public CompletableFuture<Void> runAsync(Runnable task) {
return CompletableFuture.runAsync(() -> process(task), processingPool).exceptionally(error -> {
logger.warn("Error occurred on thread pool", error);
return null;
});
}
public abstract CompletableFuture<Void> runAsyncDelayed(Runnable task, Duration delay);
public CompletableFuture<Void> runAsyncDelayed(Runnable task, Duration delay) {
return CompletableFuture.runAsync(() -> {
currentlyRunning.incrementAndGet();
try {
Thread.sleep(delay.toMillis());
task.run();
} catch (InterruptedException interruptedException) {
// restore interrupt flag
Thread.currentThread().interrupt();
} finally {
currentlyRunning.getAndDecrement();
}
}, processingPool).exceptionally(error -> {
logger.warn("Error occurred on thread pool", error);
return null;
});
}
protected void process(Runnable task) {
currentlyRunning.incrementAndGet();

View File

@@ -27,8 +27,6 @@ package com.github.games647.fastlogin.core.scheduler;
import org.slf4j.Logger;
import java.time.Duration;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
/**
@@ -42,33 +40,8 @@ public class AsyncScheduler extends AbstractAsyncScheduler {
public AsyncScheduler(Logger logger, Executor processingPool) {
super(logger, processingPool);
logger.info("Using legacy scheduler");
logger.info("Using legacy platform scheduler for using an older Java version. "
+ "Upgrade Java to 21+ for improved performance");
}
@Override
public CompletableFuture<Void> runAsync(Runnable task) {
return CompletableFuture.runAsync(() -> process(task), processingPool).exceptionally(error -> {
logger.warn("Error occurred on thread pool", error);
return null;
});
}
@Override
public CompletableFuture<Void> runAsyncDelayed(Runnable task, Duration delay) {
return CompletableFuture.runAsync(() -> {
currentlyRunning.incrementAndGet();
try {
Thread.sleep(delay.toMillis());
process(task);
} catch (InterruptedException interruptedException) {
// restore interrupt flag
Thread.currentThread().interrupt();
} finally {
currentlyRunning.getAndDecrement();
}
}, processingPool).exceptionally(error -> {
logger.warn("Error occurred on thread pool", error);
return null;
});
}
}

View File

@@ -26,6 +26,7 @@
package com.github.games647.fastlogin.core.shared;
import com.github.games647.craftapi.resolver.MojangResolver;
import com.github.games647.craftapi.resolver.Options;
import com.github.games647.craftapi.resolver.http.RotatingProxySelector;
import com.github.games647.fastlogin.core.CommonUtil;
import com.github.games647.fastlogin.core.ProxyAgnosticMojangResolver;
@@ -48,11 +49,9 @@ import net.md_5.bungee.config.YamlConfiguration;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Proxy.Type;
import java.net.UnknownHostException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
@@ -121,30 +120,35 @@ public class FastLoginCore<P extends C, C, T extends PlatformPlugin<C>> {
return;
}
// Initialize the resolver based on the config parameter
this.resolver = this.config.getBoolean("useProxyAgnosticResolver", false)
? new ProxyAgnosticMojangResolver() : new MojangResolver();
Options resolverOptions = new Options();
resolverOptions.setMaxNameRequests(config.getInt("mojang-request-limit", 600));
antiBot = createAntiBotService(config.getSection("anti-bot"));
Set<Proxy> proxies = config.getStringList("proxies")
.stream()
.map(proxy -> proxy.split(":"))
.map(proxy -> new InetSocketAddress(proxy[0], Integer.parseInt(proxy[1])))
.map(sa -> new Proxy(Type.HTTP, sa))
.collect(toSet());
Collection<InetAddress> addresses = new HashSet<>();
for (String localAddress : config.getStringList("ip-addresses")) {
try {
addresses.add(InetAddress.getByName(localAddress.replace('-', '.')));
} catch (UnknownHostException ex) {
plugin.getLog().error("IP-Address is unknown to us", ex);
}
if (!proxies.isEmpty()) {
resolverOptions.setProxySelector(new RotatingProxySelector(proxies));
}
resolver.setMaxNameRequests(config.getInt("mojang-request-limit"));
resolver.setProxySelector(new RotatingProxySelector(proxies));
resolver.setOutgoingAddresses(addresses);
// TODO: Not available currently in craftapi?
// Collection<InetAddress> addresses = new HashSet<>();
// for (String localAddress : config.getStringList("ip-addresses")) {
// try {
// addresses.add(InetAddress.getByName(localAddress.replace('-', '.')));
// } catch (UnknownHostException ex) {
// plugin.getLog().error("IP-Address is unknown to us", ex);
// }
// }
// resolver.setOutgoingAddresses(addresses);
// Initialize the resolver based on the config parameter
this.resolver = this.config.getBoolean("useProxyAgnosticResolver", false)
? new ProxyAgnosticMojangResolver(resolverOptions) : new MojangResolver(resolverOptions);
antiBot = createAntiBotService(config.getSection("anti-bot"));
}
private AntiBotService createAntiBotService(Configuration botSection) {

View File

@@ -32,6 +32,8 @@ public interface AuthStorage {
StoredProfile loadProfile(UUID uuid);
int deleteProfile(String name);
void save(StoredProfile playerProfile);
void close();

View File

@@ -65,6 +65,8 @@ public abstract class SQLStorage implements AuthStorage {
+ "` WHERE `Name`=? LIMIT 1";
protected static final String LOAD_BY_UUID = "SELECT * FROM `" + PREMIUM_TABLE
+ "` WHERE `UUID`=? LIMIT 1";
protected static final String DELETE_BY_NAME = "DELETE FROM " + PREMIUM_TABLE
+ " WHERE `Name` = ?";
protected static final String INSERT_PROFILE = "INSERT INTO `" + PREMIUM_TABLE
+ "` (`UUID`, `Name`, `Premium`, `Floodgate`, `LastIp`) " + "VALUES (?, ?, ?, ?, ?) ";
// limit not necessary here, because it's unique
@@ -143,6 +145,25 @@ public abstract class SQLStorage implements AuthStorage {
return null;
}
@Override
public int deleteProfile(String name) {
try (Connection con = dataSource.getConnection();
PreparedStatement deleteStmt = con.prepareStatement(DELETE_BY_NAME)) {
deleteStmt.setString(1, name);
int rowsDeleted = deleteStmt.executeUpdate();
if (rowsDeleted > 0) {
log.info("Deleted {}'s profile data", name);
} else {
log.info("No profile data found for {}", name);
}
return rowsDeleted;
} catch (SQLException sqlEx) {
log.error("Failed to query profile: {}", name, sqlEx);
return 0;
}
}
private Optional<StoredProfile> parseResult(ResultSet resultSet) throws SQLException {
if (resultSet.next()) {
long userId = resultSet.getInt("UserID");

View File

@@ -27,8 +27,6 @@ package com.github.games647.fastlogin.core.scheduler;
import org.slf4j.Logger;
import java.time.Duration;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@@ -46,33 +44,4 @@ public class AsyncScheduler extends AbstractAsyncScheduler {
logger.info("Using optimized green threads with Java 21");
}
@Override
public CompletableFuture<Void> runAsync(Runnable task) {
return CompletableFuture
.runAsync(() -> process(task), processingPool)
.exceptionally(error -> {
logger.warn("Error occurred on thread pool", error);
return null;
});
}
@Override
public CompletableFuture<Void> runAsyncDelayed(Runnable task, Duration delay) {
return CompletableFuture.runAsync(() -> {
currentlyRunning.incrementAndGet();
try {
Thread.sleep(delay);
process(task);
} catch (InterruptedException interruptedException) {
// restore interrupt flag
Thread.currentThread().interrupt();
} finally {
currentlyRunning.getAndDecrement();
}
}, processingPool).exceptionally(error -> {
logger.warn("Error occurred on thread pool", error);
return null;
});
}
}

View File

@@ -150,11 +150,14 @@ nameChangeCheck: false
forwardSkin: true
# Displays a warning message that this message SHOULD only be invoked by
# users who actually are the owner of this account. So not by cracked players
# users who actually are the owner of this account (and not cracked players)
#
# If they still want to invoke the command, they have to invoke /premium again
premium-warning: true
# Kick players after they confirmed the command from above.
kick-toggle: true
# ======[[ Spigot+ProtocolLib users only ]]======
# When set to true, enables the use of alternative session resolver which does not send the server IP
# to mojang session servers. This setting might be useful when you are trying to run the server via a

22
pom.xml
View File

@@ -83,7 +83,7 @@
<plugin>
<!-- Update compiler plugin for old Maven versions like GH runner -->
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<version>3.14.0</version>
</plugin>
<plugin>
@@ -106,7 +106,7 @@
<plugin>
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>4.5</version>
<version>5.0.0</version>
<configuration>
<licenseSets>
<licenseSet>
@@ -134,7 +134,7 @@
</plugin>
<plugin>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.4.0</version>
<version>3.6.0</version>
<configuration>
<configLocation>checkstyle.xml</configLocation>
<consoleOutput>true</consoleOutput>
@@ -145,7 +145,7 @@
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>10.17.0</version>
<version>10.23.0</version>
</dependency>
</dependencies>
<executions>
@@ -162,7 +162,7 @@
<!-- Require newer versions for Junit5 support -->
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.3.0</version>
<version>3.5.3</version>
<configuration>
<!-- Work-around to make multi-release classes discoverable
https://issues.apache.org/jira/browse/SUREFIRE-1731 -->
@@ -218,18 +218,10 @@
</build>
<dependencies>
<!-- Use lombok to use some newer Java syntax features in Java 8 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombook.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.3</version>
<version>5.12.2</version>
<scope>test</scope>
</dependency>
@@ -237,7 +229,7 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.12.0</version>
<version>5.17.0</version>
<scope>test</scope>
</dependency>
</dependencies>

View File

@@ -62,6 +62,20 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<annotationProcessors>
<annotationProcessor>
com.velocitypowered.api.plugin.ap.PluginAnnotationProcessor
</annotationProcessor>
</annotationProcessors>
</configuration>
</plugin>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.0</version>
@@ -161,25 +175,15 @@
<dependency>
<groupId>com.velocitypowered</groupId>
<artifactId>velocity-api</artifactId>
<version>3.3.0-SNAPSHOT</version>
<version>3.4.0-SNAPSHOT</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>com.moandjiezana.toml</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.spongepowered</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--Velocity does not ship any database driver-->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.4.0</version>
<version>3.5.3</version>
<exclusions>
<!-- Exclude JNA implementation for WAFFLE - Windows Authentication Framework (mariadb)-->
<exclusion>

View File

@@ -66,4 +66,8 @@ public class VelocityLoginSource implements LoginSource {
public InetSocketAddress getAddress() {
return connection.getRemoteAddress();
}
public InboundConnection getConnection() {
return connection;
}
}

View File

@@ -121,7 +121,7 @@ public class ConnectListener {
if (event.isOnlineMode()) {
LoginSession session = plugin.getSession().get(event.getConnection().getRemoteAddress());
if (session == null) {
plugin.getLog().warn("No active login session found for player {}", event.getUsername());
plugin.getLog().error("No active login session found for onlinemode player {}", event.getUsername());
return;
}
@@ -192,6 +192,8 @@ public class ConnectListener {
public void onDisconnect(DisconnectEvent disconnectEvent) {
Player player = disconnectEvent.getPlayer();
plugin.getCore().getPendingConfirms().remove(player.getUniqueId());
plugin.getSession().remove(player.getRemoteAddress());
}
/**

View File

@@ -83,12 +83,12 @@ public class PluginMessageListener {
plugin.getScheduler().runAsync(() -> readMessage(forPlayer, channel, data));
}
private void readMessage(Player forPlayer, String channel, byte[] data) {
private void readMessage(Player sender, String channel, byte[] data) {
FastLoginCore<Player, CommandSource, FastLoginVelocity> core = plugin.getCore();
ByteArrayDataInput dataInput = ByteStreams.newDataInput(data);
if (successChannel.equals(channel)) {
onSuccessMessage(forPlayer);
onSuccessMessage(sender);
} else if (changeChannel.equals(channel)) {
ChangePremiumMessage changeMessage = new ChangePremiumMessage();
changeMessage.readFrom(dataInput);
@@ -97,19 +97,19 @@ public class PluginMessageListener {
boolean isSourceInvoker = changeMessage.isSourceInvoker();
if (changeMessage.shouldEnable()) {
Boolean premiumWarning = plugin.getCore().getConfig().get("premium-warning", true);
if (playerName.equals(forPlayer.getUsername()) && premiumWarning
&& !core.getPendingConfirms().contains(forPlayer.getUniqueId())) {
if (playerName.equals(sender.getUsername()) && premiumWarning
&& !core.getPendingConfirms().contains(sender.getUniqueId())) {
String message = core.getMessage("premium-warning");
forPlayer.sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(message));
core.getPendingConfirms().add(forPlayer.getUniqueId());
sender.sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(message));
core.getPendingConfirms().add(sender.getUniqueId());
return;
}
core.getPendingConfirms().remove(forPlayer.getUniqueId());
Runnable task = new AsyncToggleMessage(core, forPlayer, playerName, true, isSourceInvoker);
core.getPendingConfirms().remove(sender.getUniqueId());
Runnable task = new AsyncToggleMessage(core, sender, playerName, true, isSourceInvoker);
plugin.getScheduler().runAsync(task);
} else {
Runnable task = new AsyncToggleMessage(core, forPlayer, playerName, false, isSourceInvoker);
Runnable task = new AsyncToggleMessage(core, sender, playerName, false, isSourceInvoker);
plugin.getScheduler().runAsync(task);
}
}

View File

@@ -82,7 +82,8 @@ public class AsyncPremiumCheck extends JoinManagement<Player, CommandSource, Vel
String username, boolean registered) {
source.enableOnlinemode();
VelocityLoginSession session = new VelocityLoginSession(username, registered, profile);
plugin.getSession().put(source.getAddress(), session);
plugin.getLog().error("Putting session: {}", source.getConnection());
plugin.getSession().put(source.getConnection().getRemoteAddress(), session);
String ip = source.getAddress().getAddress().getHostAddress();
plugin.getCore().addLoginAttempt(ip, username);
@@ -91,6 +92,6 @@ public class AsyncPremiumCheck extends JoinManagement<Player, CommandSource, Vel
@Override
public void startCrackedSession(VelocityLoginSource source, StoredProfile profile, String username) {
VelocityLoginSession session = new VelocityLoginSession(username, false, profile);
plugin.getSession().put(source.getAddress(), session);
plugin.getSession().put(source.getConnection().getRemoteAddress(), session);
}
}

View File

@@ -33,29 +33,26 @@ import com.github.games647.fastlogin.velocity.event.VelocityFastLoginPremiumTogg
import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.proxy.ConsoleCommandSource;
import com.velocitypowered.api.proxy.Player;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
public class AsyncToggleMessage implements Runnable {
private final FastLoginCore<Player, CommandSource, FastLoginVelocity> core;
private final CommandSource sender;
private final Player sender;
private final String senderName;
private final String targetPlayer;
private final boolean toPremium;
private final boolean isPlayerSender;
public AsyncToggleMessage(FastLoginCore<Player, CommandSource, FastLoginVelocity> core,
CommandSource sender, String playerName, boolean toPremium, boolean playerSender) {
Player sender, String playerName, boolean toPremium, boolean playerSender) {
this.core = core;
this.sender = sender;
this.targetPlayer = playerName;
this.toPremium = toPremium;
this.isPlayerSender = playerSender;
if (sender instanceof Player playSender) {
senderName = playSender.getUsername();
} else {
senderName = "";
}
this.senderName = sender.getUsername();
}
@Override
@@ -82,7 +79,14 @@ public class AsyncToggleMessage implements Runnable {
? PremiumToggleReason.COMMAND_OTHER : PremiumToggleReason.COMMAND_SELF;
core.getPlugin().getProxy().getEventManager().fire(
new VelocityFastLoginPremiumToggleEvent(playerProfile, reason));
sendMessage("remove-premium");
if (isPlayerSender && core.getConfig().getBoolean("kick-toggle", true)) {
TextComponent msg = LegacyComponentSerializer.legacyAmpersand()
.deserialize(core.getMessage("remove-premium"));
sender.disconnect(msg);
} else {
sendMessage("remove-premium");
}
}
private void activatePremium() {