Phalcode / gamevault-app

Frontend for the self-hosted gaming platform for drm-free games
https://gamevau.lt
Other
281 stars 12 forks source link

GameVault Client crashes due to pagination #278

Closed brownje96 closed 9 months ago

brownje96 commented 9 months ago

Describe the bug the GameVault client seems to crash if you have more than 80 games in your library.

To Reproduce Add +n games past 80, and scroll down to the end of your library.

Expected behavior The client not to crash, and to gracefully display the library.

Screenshots crash

Desktop (please complete the following information):

Environment GameVault Backend: 9.0.4 GameVault Client: 1.7.3

Additional context

Stack Traces emitted:

MESSAGE:
Object reference not set to an instance of an object.
INNER_EXCEPTION:
STACK_TRACE:
   at gamevault.UserControls.LibraryUserControl.ScrollViewer_ScrollChanged(Object sender, ScrollChangedEventArgs e) in D:\a\gamevault-app\gamevault-app\gamevault\UserControls\LibraryUserControl.xaml.cs:line 188
   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
MESSAGE:
Object reference not set to an instance of an object.
INNER_EXCEPTION:
STACK_TRACE:
   at gamevault.UserControls.LibraryUserControl.ScrollViewer_ScrollChanged(Object sender, ScrollChangedEventArgs e) in D:\a\gamevault-app\gamevault-app\gamevault\UserControls\LibraryUserControl.xaml.cs:line 183
   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

I'm hoping this is just a simple case of me being a PEBKAC.

Alfagun74 commented 9 months ago

Hello @brownje96,

Thank you for reaching out. We've gladly received several crash reports from you tonight, and we're addressing the issue promptly. Firstly, I want to assure you that GameVault is designed to handle a larger library of at least 600 games, as our internal usage has proven.

We noticed that you didn't install GameVault from the Microsoft Store. Unfortunately, we cannot guarantee the stability of GameVault on systems where it has been installed through alternative methods.

In our efforts to address the crash reports, we'd like to gather more information. Did you by any chance tamper with any GameVault files? Additionally, could you provide details on how you installed GameVault if it wasn't from the Microsoft Store? And could you please confirm whether you're using a Microsoft Windows 10 system, or if it's a VM/Linux Prefix that our crash reporter might not be able to detect?

Understanding the installation process will aid us in diagnosing and resolving the issues you've encountered. Thanks!

Alfagun74 commented 9 months ago

Also i see a "Could not connect to server" error there. Just to make sure, can you please attach us a server-log of when this happens in the client please?

brownje96 commented 9 months ago

I am running GameVault client natively on two separate machines running nothing but Windows 10. No hypervisors. No gimmicks.

I have not tampered with the GV client files in any way, unless I've mysteriously developed a major neuropsychiatric issue within the last 24 hours. I'll gladly purge my systems of GV and any residual files, then reinstall, to alleviate this concern however.

I had downloaded and extracted the latest release from this repo, at this URL. For what it's worth, the "Cannot connect to server" error occurs right after the exception related to scrolling is thrown. I can record my screen too if that would help.

With regards to the server....

I'm not entirely sure if "server-log" is a file, component of GV, or if you meant that in a generic way. I may need to be pointed in the right direction of where the server log is, I'm a docker noob after all. This is what docker logs crackpipe-gamevault-backend-1 --tail 50 --follow shows after I open GameVault client. I would assume this is the server log.

info:    ┏ [04/Dec/2023:08:16:45 +0000] admin @ 192.168.16.89 - GET /api/users/me -> 200 - 104.211 ms - - - 'GameVault/1.7.3'
 +2m
info:    ┗ [1] { context: 'Morgan', timestamp: '2023-12-04T08:16:45.845Z' }
info:    ┏ [04/Dec/2023:08:16:46 +0000] admin @ 192.168.16.89 - GET /api/games?search=&sortBy=title:ASC&limit=80 -> 200 - 94.578 ms - - - 'GameVault/1.7.3'
 +429ms
info:    ┗ [1] { context: 'Morgan', timestamp: '2023-12-04T08:16:46.274Z' }

This is logged immediately as the client opens, yet upon the exception being thrown, nothing else is logged. Seems like a dead end to me. There doesn't appear to be anything in /logs on the host or container either. I could send you the link to my server on Discord as well where you could register and try to replicate the bug if you're A) willing and B) think that too would eliminate the server and its configuration as the culprit.

Alfagun74 commented 9 months ago

I trust you haven't encountered any neuropsychiatric concerns. The Download Source is verified as well. While you have successfully located the server log, upon examination, I couldn't identify any noteworthy issues, except for your initial request for 80 games, which executed flawlessly (Code 200). @Yelo420 will delve deeper into the Stack-Traces on the client side to identify any potential culprits.

Alfagun74 commented 9 months ago

This is logged immediately as the client opens, yet upon the exception being thrown, nothing else is logged.

The server does not crash, does it?

brownje96 commented 9 months ago

This is logged immediately as the client opens, yet upon the exception being thrown, nothing else is logged.

The server does not crash, does it?

That was a lingual error on my part- I'm sorry. The server does not crash, there's just no output about the exception the client encounters.

Alfagun74 commented 9 months ago

The most straightforward method to troubleshoot this is by testing it ourselves with our development tools. Could you kindly reach out to 'yelo50' on Discord to share the relevant details? If you don't have discord you can email the admin credentials and server url to us aswell: contact@phalco.de

brownje96 commented 9 months ago

Whelp, after a very unpleasant hospital stay... I think we have resolution to this problem- and it was embarrassingly mostly a PEBKAC event.

I've found that the problem mysteriously goes away when you connect directly to the server, and not in front of the reverse proxy I had set up through Apache. I should've thought to think of this ages ago when I opened the ticket.

To double check- I made a new VM, registered a new subdomain, got a new certificate, kept the configuration as plain as possible, and created a new reverse proxy to my existing server with 81 games. It worked and without throwing the exception.

The configuration was again, simple and textbook:

ProxyPass /gv/ http://192.168.16.175:8080/
ProxyPassReverse /gv/ http://192.168.16.175:8080/

with mod_proxy and mod_proxy_http enabled.

Therefore, logically, it must be something in my production configuration. There were other directives set for other applications I'm self-hosting as well, mostly Nextcloud on this VirtualHost I then disabled these options and of course, GameVault started working. Next I decided to turned them back on one by one until the offending option was discovered. It strongly seemed to be the first one. Not any of the header changes, or rewrites, but the one I thought would be innocuous.

ProxyPreserveHost On

As a final test, I went back to my new/simple test apache reverse proxy server and introduced the directive to it to confirm if that was the cause. The error returned.

Fix: Disable ProxyPreserveHost unless your other webapps direly need it. If they do need it, give GameVault its own VirtualHost.

Moral of the story: just because it LOOKS like it's working, doesn't mean it IS working. Looks can be deceiving.

I'd like to thank the Phalcode team for their concern while I was sick- you guys are awesome <3