games647 / FastLogin

Checks if a minecraft player has a valid paid account. If so, they can skip offline authentication automatically. (premium auto login)
https://www.spigotmc.org/resources/fastlogin.14153
MIT License
483 stars 118 forks source link

Offline player login stuck #1150

Open pjindras opened 5 months ago

pjindras commented 5 months ago

What happened?

Hello, I am using fastlogin + Authme configuration. Offline player connects and authme says successfully logged in, or is logged in via authme.

However, fastlogin causes that the offline player, even if logged in, is taken as not logged in and thus cannot execute any commands.

I am using: Authme, Authme Velocity, Fastlogin, Fastlogin Velocity

What did you expect?

Offline player should be ignored by fastlogin, only players, who used /premium should be handeled via fastlogin

Steps to reproduce

happens randomly, most of the time it works, and sometimes it happens to the player or even to me that the login doesn't work, respectively, I'm logged in via authme (and possibly via the console with the /authme login command) but it still won't let me do anything (fastlogin) for cracked players

Plugin list

15:54:38[INFO] - AuthMeVelocity, Commander, SignedVelocity 15:54:38[INFO] Bukkit Plugins: (47): 15:54:38[INFO] - AnnouncerPlus, AntiPopup, ArmorStandTools, asCMD, AuthMe, BeastTokens, BlueMap, CancelChat, Citizens, DecentHolograms 15:54:38[INFO] DeluxeMenus, Essentials, EssentialsSpawn, FastAsyncWorldEdit, FastLogin, GadgetsMenu, goBrush, goPaint, HostifyMonitor, Images 15:54:38[INFO] ItemsAdder, LiteBans, LoneLibs, LuckPerms, MineMarket, ModelEngine, Multiverse-Core, MyCommand, NoPlugins, Panilla 15:54:38[INFO] PAPIProxyBridge, PlaceholderAPI, PlugManX, ProtocolLib, RealTimePlugin, ResourcePackBroadcast, Skulls, spark, SuperLobby, SyncCommands 15:54:38[INFO] TAB, Vault, ViaBackwards, ViaVersion, VoidGen, Vulcan, WorldGuard Proxy: miniplaceholders, luckperms, fastlogin, authmevelocity, beasttokensvelocity, botsentry, signedvelocity, chatregulator, commander, hostifymonitor, papiproxybridge, huskchat, litebans, mckotlin-velocity, minimotd-velocity, mi niplaceholders-luckperms-expansion, mysqldriver, nuvotifier, placeholderapi-expansion, plan, serverpermissions, serverutils, skinsrestorer, synccommands, topaz, velocityvanish, bungeepackfix

Configuration file

https://paste.gg/p/anonymous/a981c106065446b19a5c3f19beee5ba2

Server log

https://paste.gg/p/anonymous/d9d8337e053e44df94d912a5914e39b3

Plugin version

FastLogin version 1.12-SNAPSHOT-dbf5ae2

Platform

Velocity

Relevance

pjindras commented 5 months ago

additional info

I am using fastlogin on Velocity and on lobby server (purpur spigot) too I am using the same DB for both I have minecraft 1.20.4

games647 commented 5 months ago

Please post the timestamp and player name, so we could focus on the server log during that time.

pjindras commented 5 months ago

pjindras for example, but I searched in the log and havent seen any error or issue, when it happens again, I will provide detailed log

games647 commented 5 months ago

Just noticed it's the Spigot log. It likely this is caused on the proxy side. Could you add that log?

pjindras commented 5 months ago

Hello @games647 , I am sending velocity log: https://paste.gg/p/anonymous/5fc2ffaf0c0240929542f23ecfd3447e

It also happens sometimes, that some premium users, who used /premium command arent saved into mysql correctly. So after re-log they have to login again, type /premium again and again its not saved etc.

This happens very often, but only in some cases. I dont know, how to debug it, because in logs there isnt much to show, like errors etc.

I saw this issue in log:

[07:04:42] [Velocity Async Event Executor - #2/ERROR] [com.velocitypowered.proxy.event.VelocityEventManager]: Couldn't pass PreLoginEvent to fastlogin --   | java.lang.IllegalArgumentException: Illegal UUID string: 7a7c203e-fcd2-405f-a134-8910251d7fdc   | at com.github.games647.craftapi.FastUUID.parseUUIDUUndashed(FastUUID.java:162) ~[?:?]   | at com.github.games647.craftapi.UUIDAdapter.parseId(UUIDAdapter.java:37) ~[?:?]   | at java.util.Optional.map(Unknown Source) ~[?:?]   | at com.github.games647.fastlogin.core.storage.SQLStorage.parseResult(SQLStorage.java:150) ~[?:?]   | at com.github.games647.fastlogin.core.storage.SQLStorage.loadProfile(SQLStorage.java:120) ~[?:?]   | at com.github.games647.fastlogin.core.shared.JoinManagement.onLogin(JoinManagement.java:61) ~[?:?]   | at com.github.games647.fastlogin.velocity.task.AsyncPremiumCheck.run(AsyncPremiumCheck.java:62) ~[?:?]   | at com.velocitypowered.api.event.EventTask$1.execute(EventTask.java:66) ~[server.jar:3.3.0-SNAPSHOT (git-953ab6d8-b335)]   | at com.velocitypowered.proxy.event.VelocityEventManager$ContinuationTask.execute(VelocityEventManager.java:545) ~[server.jar:3.3.0-SNAPSHOT (git-953ab6d8-b335)]   | at com.velocitypowered.proxy.event.VelocityEventManager.fire(VelocityEventManager.java:604) ~[server.jar:3.3.0-SNAPSHOT (git-953ab6d8-b335)]   | at com.velocitypowered.proxy.event.VelocityEventManager.lambda$fire$5(VelocityEventManager.java:478) ~[server.jar:3.3.0-SNAPSHOT (git-953ab6d8-b335)]   | at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]   | at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]   | at java.lang.Thread.run(Unknown Source) [?:?]   | [07:04:44] [Netty epoll Worker #2/INFO] [com.velocitypowered.proxy.connection.client.AuthSessionHandler]: [connected player] 1101martin1101 (/79.110.37.30:59876) has connected

But that is only one player's specific case, others who have the same issue haven't had this error message. The tricky is, that there are many players, who use it without a problem and then many players, who have issues -> are not saved correctly (with a premium account) or are asked for login but have an offline account (and never used /premium cmd).

pjindras commented 5 months ago

Maybe there could be issue with mysql/mariaDB saving in case of Velocity. I have it configured as MariaDB in fastlogin, but I am also using mysqldriver plugin on velocity.

games647 commented 5 months ago

Illegal UUID string: 7a7c203e-fcd2-405f-a134-8910251d7fdc | at com.github.games647.craftapi.FastUUID.parseUUIDUUndashed(FastUUID.java:162)

This means you have invalid data in your database. The UUID should be saved without the dashes. Do you imported the data or inserted something manually?

pjindras commented 5 months ago

Illegal UUID string: 7a7c203e-fcd2-405f-a134-8910251d7fdc | at com.github.games647.craftapi.FastUUID.parseUUIDUUndashed(FastUUID.java:162)

This means you have invalid data in your database. The UUID should be saved without the dashes. Do you imported the data or inserted something manually?

Only in case of player 1101martin1101 because he used /premium command many times, and his UUID wasnt saved into database (and he was always asked to login again).

The same problem have many more players, without error messages.

pjindras commented 5 months ago
  1. This is cracked player, should be with cracked status, after using /cracked its still unknown

e8a28400-aafb-46c1-91c9-9654ab6e5c40

Velocity log:
`12:11:43[INFO] [server connection] knez -> lobby has disconnected
12:11:44[INFO] [huskchat]: %servername% [CHAT] vojaczek: vim že ti to stavěni jde ale nechceš na jiny ostruvek ? :D
12:11:47[INFO] [fastlogin]: Incoming login request for knez from /178.255.168.217:51363
12:11:47[INFO] [fastlogin]: Handling player knez
12:11:47[INFO] [connected player] knez (/178.255.168.217:51363) has connected
12:11:47[INFO] [server connection] knez -> lobby has connected
12:11:48[INFO] [forceresourcepacks]: [DEBUG] knez matched assignment lobby due to main packs
12:11:48[INFO] [forceresourcepacks]: knez: running actions for pack lobby and status 11/REQUESTED/first join: false
12:11:48[INFO] [forceresourcepacks]: [DEBUG] Send pack lobby (http://pillager.hostify.cz:59238/generated.zip) to knez. Required: true, Prompt message: null
12:11:48[INFO] [forceresourcepacks]: knez: running actions for pack lobby and status 3/ACCEPTED/first join: false
  1. This is premium player, used /premium, he has premium status, but fastlogin is not working in his case #
    15:27:08[INFO] [connected player] 1101martin1101 (/79.110.37.30:60883) has disconnected
    15:27:08[INFO] [server connection] 1101martin1101 -> lobby has disconnected
    15:27:09[INFO] [huskchat]: %servername% [CHAT] slepicak: bosse mi nech :D
    15:27:17[INFO] [fastlogin]: Incoming login request for 1101martin1101 from /79.110.37.30:60923
    15:27:17[INFO] [fastlogin]: Handling player 1101martin1101
    15:27:17[INFO] [fastlogin]: Requesting premium login for registered player: 1101martin1101
    15:27:18[INFO] [fastlogin]: Overridden UUID from 7a7c203e-fcd2-405f-a134-8910251d7fdc to 9395311d-efa1-3af0-ba23-9f459f9785e0 (based of 1101martin1101) on com.velocitypowered.proxy.connection.client.LoginInboundConnection@33eed42b
    15:27:18[INFO] [connected player] 1101martin1101 (/79.110.37.30:60923) has connected
    15:27:18[INFO] [server connection] 1101martin1101 -> lobby has connected
    15:27:18[INFO] [forceresourcepacks]: [DEBUG] 1101martin1101 matched assignment lobby due to main packs
    15:27:18[INFO] [forceresourcepacks]: 1101martin1101: running actions for pack lobby and status 11/REQUESTED/first join: false
    15:27:18[INFO] [forceresourcepacks]: [DEBUG] Send pack lobby (http://pillager.hostify.cz:59238/generated.zip) to 1101martin1101. Required: true, Prompt message: null
    15:27:18[INFO] [forceresourcepacks]: 1101martin1101: running actions for pack lobby and status 3/ACCEPTED/first join: false
    15:27:24[INFO] [forceresourcepacks]: 1101martin1101: running actions for pack lobby and status 0/LOADED/first join: false

For some reason, he still needs to proceed authme login, but he has activated fastlogin.

There are also some issues with Feather fabric players, but those are Vanilla players and the issues are there too, it must be bug in Fastlogin Velocity.

games647 commented 5 months ago

I've seen that the proxy correctly recognized the premium status.

Overridden UUID [...]

What is missing here is the force login command forwarding on ServerConnectedEvent. This command runs delayed (1sec) after the proxy<->server connection is established.

In the latest build I added some more verbose logging. For that version the log messages from a premium player are important on the proxy as well as Spigot side. This is necessary, because somehow the information get lost when the Spigot and Proxy module of FastLogin with another.

pjindras commented 5 months ago

I installed lastest dev build, this is log of player, who used /premium, but its not working in his case: Velocity: https://paste.gg/p/anonymous/3a5480de61934109a6abd9d18b459be2

Spigot: https://paste.gg/p/anonymous/c8cd611a658b496eb8f21bc455369c30

games647 commented 5 months ago

In comparison to the earlier post, this time the proxy didn't request a premium login. (Note the missing: Requesting premium login for registered player). This means the plugin detected a failure on the previous run and thefore required an addtional command run to be requested next.

What is required to debug this behavior is a premium login attempt directly after.

pjindras commented 5 months ago

When the player goes /cracked -> /premium + again /premium

Then it works, like in this case of player petrkeram

https://paste.gg/p/anonymous/115424655d11476b80b39f83b8bb5dff https://paste.gg/p/anonymous/ab56b6ac2fec41f9a2514cfa8acf4219

But in the case of new players, when they go only /premium and /premium, it doesnt work, or some other cases, which I dont know now how to reproduce, it is or can be stucked. As it was previously in the case, that I sent last week.

Its hard to describe and reproduce ...

but for example this case is player OndraMik:

https://paste.gg/p/anonymous/b0e876c53ade45cc907594a77925e16a https://paste.gg/p/anonymous/2031fb42436f4a3a879b0ad0ec4a9dc3

In his case, fastlogin wasn't working properly, when he did the same as petrkeram. There are still some "strange" situations, do I have to clean the whole DB or what would be the best solution?

games647 commented 5 months ago

For second player, this one is interesting:

[WARN] [FastLogin] Player CraftPlayer{name=1101martin1101} is already authenticated. Cancelling force login.

So FastLogin doesn't perform an force login command your auth plugin already reports that the player is logged in. I guess the issue here is that in this case FastLogin isn't sure its own login can be performed successfully and therefore doesn't report this confirmation.