Fix article ID parsing bug

Since the article ID regular expression wasn't anchored to the end of
the URL, it would grab characters after a / or - that were hex
characters. For example /@user/bacon-123abc would just grab `bac`. Not
great.

This anchors the ID at the end of the string so that it will be more
likely to catch IDs.
This commit is contained in:
Edward Loveall 2022-02-13 21:07:50 -05:00
parent 3f5a5580e0
commit fb51270f87
No known key found for this signature in database
GPG key ID: A7606DFEC2BA731F
3 changed files with 10 additions and 1 deletions

View file

@ -2,6 +2,7 @@
* Better article ID parsing * Better article ID parsing
* Link to full Medium URL on error page * Link to full Medium URL on error page
* Fix article ID parsing bug
2022-02-12 2022-02-12

View file

@ -14,6 +14,14 @@ describe ArticleIdParser do
result.should eq(Monads::Just.new("111111abcdef")) result.should eq(Monads::Just.new("111111abcdef"))
end end
it "parses the post id for urls with hex characters after a /" do
request = resource_request("/@user/bacon-abcdef123456")
result = ArticleIdParser.parse(request)
result.should eq(Monads::Just.new("abcdef123456"))
end
it "parses the post id for urls like /user/:post_slug" do it "parses the post id for urls like /user/:post_slug" do
request = resource_request("/user/my-post-222222abcdef") request = resource_request("/user/my-post-222222abcdef")

View file

@ -1,7 +1,7 @@
class ArticleIdParser class ArticleIdParser
include Monads include Monads
ID_REGEX = /[\/\-]([0-9a-f]+)/i ID_REGEX = /[\/\-]([0-9a-f]+)$/i
def self.parse(request : HTTP::Request) def self.parse(request : HTTP::Request)
new.parse(request) new.parse(request)