Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Doesn't appear to work on proxy (Fedora 36) #67

Closed
C-Lunn opened this issue May 20, 2022 · 10 comments
Closed

Doesn't appear to work on proxy (Fedora 36) #67

C-Lunn opened this issue May 20, 2022 · 10 comments
Labels
bug Something isn't working
Milestone

Comments

@C-Lunn
Copy link
Contributor

C-Lunn commented May 20, 2022

Hi, I'm trying to scrobble from behind a proxy, and have obtained a key and shared secret from last.fm.
On starting the application, I am prompted for a username and password. Entering these, sometimes the application hangs, sometimes I get the following message:

Failed to authenticate with Last.fm

Caused by:
    Authentication failed: Connection Failed: Network is unreachable (os error 101)
Warning: no scrobbling services defined
Looking for an active MPRIS player...

Strace output, if it helps:

....
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("130.211.19.189")}, 16) = 0
getsockname(3, {sa_family=AF_INET, sin_port=htons(41452), sin_addr=inet_addr("172.xxx")}, [28 => 16]) = 0
close(3)                                = 0
socket(AF_INET6, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET6, sin6_port=htons(0), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "2600:1901:0:2fd6::", &sin6_addr), sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable)
close(3)                                = 0
socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr("130.211.19.189")}, 16) = -1 EHOSTUNREACH (No route to host)
close(3)                                = 0
socket(AF_INET6, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET6, sin6_port=htons(443), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "2600:1901:0:2fd6::", &sin6_addr), sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable)
close(3)                                = 0
write(2, "Failed to authenticate with Last"..., 35Failed to authenticate with Last.fm) = 35
write(2, "\n\nCaused by:", 12
....

Unfortunately I can't test off-proxy due to my network setup.

Any help would be appreciated. Thank you.

@InputUsername
Copy link
Owner

That's weird. Have you been able to authenticate with Last.fm using other programs? Would it possible for you to share some details on your proxy setup?

I'm not sure what could be causing this, rescrobbled uses rustfm-scrobble to scrobble to Last.fm, so the issue could very well be in that library.

@C-Lunn
Copy link
Contributor Author

C-Lunn commented May 21, 2022

That's weird. Have you been able to authenticate with Last.fm using other programs? Would it possible for you to share some details on your proxy setup?

I'm not sure what could be causing this, rescrobbled uses rustfm-scrobble to scrobble to Last.fm, so the issue could very well be in that library.

I can authenticate fine using mpris-scrobbler, but I'm having quite a few problems getting that to work reliably.

My proxy is in the form http://proxy.addr:port for both HTTP and HTTPS, and there's also a SOCKS proxy for things like SSH. I have both the upper- and lower-case HTTP(S)_PROXY environment variables set, as well as the GNOME gsettings proxy values.

I'll have a look into rustfm-scrobble. It seems that it is maybe not reading (or failing to get) the proxy values, but I didn't see anything that tried to read them in the strace output.

Thanks.

@InputUsername InputUsername added the bug Something isn't working label May 22, 2022
@InputUsername
Copy link
Owner

@C-Lunn This is a shot in the dark, but I've created a fork of rustfm-scrobble that uses a different HTTP client library. A rescrobbled version that uses this fork is on the use-rustfm-scrobble-fork branch. If you're able to build Rust projects, could you give that a try? (I can also send over a binary)

Thanks!

@C-Lunn
Copy link
Contributor Author

C-Lunn commented May 24, 2022

@C-Lunn This is a shot in the dark, but I've created a fork of rustfm-scrobble that uses a different HTTP client library. A rescrobbled version that uses this fork is on the use-rustfm-scrobble-fork branch. If you're able to build Rust projects, could you give that a try? (I can also send over a binary)

Thanks!

@InputUsername

Username: MY_USERNAME
Password: <pw>, prints plaintext to terminal (bug?)
Failed to authenticate with Last.fm

Caused by:
    Authentication failed: Status code 411 Length Required indicates failure
Warning: no scrobbling services defined

So, looks like it's connecting but a malformed request?

@InputUsername
Copy link
Owner

InputUsername commented May 24, 2022

@C-Lunn

So, looks like it's connecting but a malformed request?

Yes, sorry, this is a mistake on my part while modifying rustfm-scrobble. I've fixed it and it seems to work for me, could you please try again? (You might have to make sure deps of rescrobbled are re-downloaded, eg. cargo clean before running)

Password: <pw>, prints plaintext to terminal (bug?)

This can and should be fixed with a dependency, I'll make a separate issue.

@C-Lunn
Copy link
Contributor Author

C-Lunn commented May 24, 2022

@InputUsername
I have authenticated and now playing is updating correctly, and I've just seen it submit a scrobble. I'll leave my music playing and make sure it's working over time before closing, but I think you've got it.

Thanks!

@InputUsername
Copy link
Owner

InputUsername commented May 24, 2022

@C-Lunn
Awesome! Thanks for your help debugging. I'll try to get this fix into rustfm-scrobble proper, so you won't have to use the fork.

For posterity: the issue seems to be in ureq (current HTTP library in rustfm-scrobble). Ureq either doesn't pick up proxy settings, or if it does, doesn't support HTTPS proxies. The fix is to replace it with attohttpc, which does pick up proxy settings.

@C-Lunn
Copy link
Contributor Author

C-Lunn commented May 24, 2022

@InputUsername
Do you want me to leave the issue open until you've done that, then? Or shall I close it for now?

@InputUsername
Copy link
Owner

@C-Lunn
Keep it open for now, I'll post an update when/if those changes are merged.

@InputUsername
Copy link
Owner

@C-Lunn
The developer did not respond to my issue, and I'm going to move forward with the fork. I've released this in v0.6.0, so hopefully scrobbling behind a proxy works now! 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants