Closed Starbix closed 4 years ago
I will investigate the issue, but it seems to be related with the http client used to validate URLs.
For now, you can try to workaround it by disabling that validation.
In order to do that, pass the VALIDATE_URLS=false
env var to your docker container.
@Starbix I have just merged the fix for this issue, which makes sure IDNs are parsed before trying to validate the URL with the HTTP client.
The fix will be part of the upcoming v1.20.1
Thanks for the fix, creating a link containing an Umlaut works great now!
However it doesn't yet handle a redirect to a URL containing Umlauts. I have the following config:
server_name laubacher.io;
...
return 301 https://cédric.laubacher.io$request_uri;
So creating a link for https://laubacher.io doesn't work yet. I'm not sure if this is even supposed to work, as it works on my browsers but not on all cURL versions I've tested.
That's a question I have asked myself when implementing the fix.
I have decided to go with the approach of "validate the URL once parsed to ASCII, but save the original one with special chars and use it for redirects", mainly because browsers seem to properly handle it, and it's not nice for end users to see the ugly domain name which results from parsing IDN to ASCII.
However, non-browser http clients seem to fail.
Maybe there's some cURL option that will make it work with internationalized domain names.
Oh, wait, I didn't understand your comment. Now I get what you mean.
That's a use case I didn't consider, but I think it should be possible to handle it.
Hey @Starbix, I have just tested creating a short URL for https://laubacher.io, ind it is working fine for me :thinking:
If I then use the short link generated by shlink, all redirects are properly followed and I end up in https://cédric.laubacher.io.
Oh that's probably because I temporarily changed my redirect to punycode: return 301 https://xn--cdric-bsa.laubacher.io$request_uri;
I changed it back to return 301 https://cédric.laubacher.io$request_uri;
now.
Yeah, it was that :sweat_smile:
Can you leave it like that for a few minutes? It will help me sort the issue out.
I have fixed it by manually following redirects (instead of letting the HTTP client do it transparently) and making the IDN to ASCII conversion on every step.
https://github.com/shlinkio/shlink/pull/548
Once the build passes I will merge the fix.
The HTTP client shlink is using has also a PR to add support for this, which will simplify shlink's code a lot once they merge it.
@Starbix The latest
docker tag is being built right now. Give it about 30 minutes and then it should be there including the fix.
Thanks for the fix!
How Shlink is set-up
latest
Summary
Shlink fails to create a URL when it comes across a URL with Umlaut. Eg. éxample.com
Current behavior
An error gets thrown:
An error occurred while creating the URL :(
It happens both when a URL is entered which redirects to a URL with Umlaut and when one is entered directly.
Expected behavior
Create a shortened URL.
How to reproduce
Try to create a shlink (?) of a URL including an Umlaut like é
Log