jensenkd / plex-api

.NET Core SDK for Plex Media Server
MIT License
86 stars 27 forks source link

Unable to get server due to plex security setting #106

Open CED0001 opened 10 months ago

CED0001 commented 10 months ago

Describe the bug When running the AccountServerContainer.Servers() method, my server only gets returned if the plex > settings > network > secure connections setting is set to "preferred" in stead of "required"

To Reproduce Steps to reproduce the behavior:

  1. Go to plex > settings > network > secure connections image And set the secure connection to required: image

  2. In your code, run this:

    
    var account = plexFactory.GetPlexAccount(plexToken);

var serversSumm = await account.ServerSummaries(); //always returns 1 server (which is as expected ✅) var servers = await account.Servers(); //returns 0 servers when secure connection is required, returns 1 server when "preferred"



**Expected behavior**
account.Servers() to always return the same amount of servers as ServerSummaries()

**Screenshots**
![image](https://github.com/jensenkd/plex-api/assets/50182856/8839d3b2-c5af-4a62-84fc-803d54f702da)

**Additional context**
interestingly, within the serverSumm variable that is shown above, there is a property named "Scheme". When inspecting this, I can see that it was set to http, instead of the expected "https" (since the servers security setting is set to require secure connections)
Maybe this plays a role in this story as well. 

![image](https://github.com/jensenkd/plex-api/assets/50182856/885efeaa-ab44-49d2-a469-678af6c8793d)
CED0001 commented 10 months ago

Looks like this issue stems from the following http call: [GET] https://plex.tv/pms/servers.xml (with plex token in the header). This gets called in PlexAccountClient.GetAccountServersAsync(). Plex then returns http scheme which won't work for future calls like the one used in Servers() method.

I have yet to find the Plex setting that edits this. (If it even exists)

I'm considering adding some sort of override to this method (GetAccountServersAsync()), so that the scheme is set manually, and the Servers() method doesn't crash