Activity index grouping query for /network page was using plan_user_info
instead of plan_users.
This lead to duplication of users if a player had played on multiple
servers.
Affects issues:
- Fixed#1216
Changed Redirects
From / -> "/server/" to /server/ServerName
From /server/Unexisting -> "/server/" to "/server/ServerName"
Affects issues:
- Close 1210
Fixes an issue where authentication is not required but is present
anyway, leading to WebAuthFailException when trying to get
web user for authentication headers coming from a reverse-proxy.
Affects issues:
- #1215
- This might increase memory usage when viewing player page by a little
- This might increase time it takes to get player page json
- 'avg_ping' is not always present for a session
Affects issues:
- Close#864
Playtime was not being updated live for the player placeholders because
the Active session was not added in the PlayerContainer before
calculations.
- Added the active session (if present) to the placeholders
- Updated session state when it is fetched from the cache (world time)
Affects issues:
- Close#1209
- Fixed possible null issues with NicknameCache
- Removed bunch of unused code, such as:
- Point reduction algorithm implementations
- HighCharts data String parsing methods
- Unused Mutators
- Unused AnalysisKeys
- Leftovers from ConnectionSystem (Response codes)
- Unused queries (Leftovers from Server box and Players table queries)
- rendering.html.icon.Icons
- Made bunch of fields final
Note that old deprecated API classes do not have signature changes.
Recommended behavior for MySQL deadlock is to retry the transaction.
Added code that performs 3 attempts with recursion if deadlocks occur.
Affects issues:
- Fixed#1212
NOT IN has a long execution time and leads to lock time being large.
Modified the transaction to select the duplicates and then remove them
Affects issues:
- Possibly fixed#1212
Redirection from the root page / was pointed towards address like
/server leading to reverse-proxies using subdirectories to misbehave
Fixed by changing all known redirections:
- / now uses relative redirects
- /server/wrong_name now redirects to [Configured address]/server
Configured address takes Alternative IP settings into account.
Affects issues:
- Fixed#1207
MySQL is very strict about subquery size in insert, so duplicate rows
would cause issues in next inserts (Duplicates can occur if two servers
do the same work at the same time)
Due to the way Optional#orElse works, the part inside orElse was run
even when the UUID could be parsed from the given String, leading to
unnecessary work as well as errors in the player UUID query
(That uses names and doesn't look at uuids like the server query)
Fixed by splitting the two execution branches
Affects issues:
- Fixed#1200 (Manually tested)
Favorite server is determined by playtime and if player has no sessions
the player's favorite server will be null, leading to NPE while parsing
JSON.
Added Optional to the source of the null value
Error was reported on Discord that exporting on join sometimes
caused a BadRequestException
A check was added to prevent exporting non-registered players.
- BindException printed a stacktrace on console.
- Bungee threw EnableException with Webserver disabled
- Now writes a easy to read error about bind error
- No longer mandates webserver to start on Bungee (Export possible).
Affects issues:
- Invalidate / Close#1184
A replacer could replace same String multiple times and produce
../../../../server/ instead of intended ../server/
Changed method call from replace to replaceOnce
A single instance of server/ exists in the file.
Affected issues:
- Possibly fixed#1195
Three different SQL queries were causing errors on a H2 database.
Found causes:
- [42001-199] Extra parentheses around subquery: '... FROM (subquery)'
- [HY004 not found] H2 performs query type checks at compile time and
thus parametized variables inside SELECT need to be implicitly cast
to a type
Fixes:
- Removed extra parentheses around 2 queries
- Added a cast to CHAR to a query
Affects issues:
- Fixed#1183
MySQL that restricts float being queried with getLong caused an
SQLException
All usages of getLong with AVG function replaced with
getDouble cast to long.
Affects issues:
- Fixed#1181
MySQL that restricts float being queried with getInt caused an
SQLException
All usages of getInt with AVG function replaced with
getDouble cast to int.
Affects issues:
- Fixed#1181
Improper sanitation was causing issues when server name contained
a single quote symbol.
.server-name replacement was not in use so the offending line of
JS code could be removed.
Affects issues:
- Fixed#1191
Reported StringIndexOutOfBoundsException was likely caused by
AdvancedBans giving something else than UUID with getUuid() method.
Fixed by rejecting Strings smaller than 32 characters
(UUID with dashes is 36)
Affects issues:
- Fixed#1192
Reported NoSuchMethodError did not seem to make sense.
Compiled the extension with newest api version to get it fixed.
Affects issues:
- Possibly fixed#1196