Extend email? to utilize validate_tld
This commit is contained in:
parent
1a341fdac3
commit
70cbfdc84e
3 changed files with 39 additions and 5 deletions
|
@ -48,7 +48,7 @@ defmodule AutoLinker do
|
||||||
* `hashtag_prefix: nil` - a prefix to build a link for a hashtag (example: `https://example.com/tag/`)
|
* `hashtag_prefix: nil` - a prefix to build a link for a hashtag (example: `https://example.com/tag/`)
|
||||||
* `hashtag_handler: nil` - a custom handler to validate and formart a hashtag
|
* `hashtag_handler: nil` - a custom handler to validate and formart a hashtag
|
||||||
* `extra: false` - link urls with rarely used schemes (magnet, ipfs, irc, etc.)
|
* `extra: false` - link urls with rarely used schemes (magnet, ipfs, irc, etc.)
|
||||||
* `validate_tld: true` - Set to false to disable TLD validation for urls, also can be set to :no_scheme to validate TLDs only for urls without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)
|
* `validate_tld: true` - Set to false to disable TLD validation for urls/emails, also can be set to :no_scheme to validate TLDs only for urls without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)
|
||||||
|
|
||||||
Each of the above options can be specified when calling `link(text, opts)`
|
Each of the above options can be specified when calling `link(text, opts)`
|
||||||
or can be set in the `:auto_linker`'s configuration. For example:
|
or can be set in the `:auto_linker`'s configuration. For example:
|
||||||
|
|
|
@ -285,7 +285,7 @@ defmodule AutoLinker.Parser do
|
||||||
defp strip_parens(buffer), do: buffer
|
defp strip_parens(buffer), do: buffer
|
||||||
|
|
||||||
def check_and_link_email(buffer, opts, _user_acc) do
|
def check_and_link_email(buffer, opts, _user_acc) do
|
||||||
if email?(buffer), do: link_email(buffer, opts), else: buffer
|
if email?(buffer, opts), do: link_email(buffer, opts), else: buffer
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_and_link_phone(buffer, opts, _user_acc) do
|
def check_and_link_phone(buffer, opts, _user_acc) do
|
||||||
|
@ -307,7 +307,7 @@ defmodule AutoLinker.Parser do
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_and_link_extra("xmpp:" <> handle, opts, _user_acc) do
|
def check_and_link_extra("xmpp:" <> handle, opts, _user_acc) do
|
||||||
if email?(handle), do: link_extra("xmpp:" <> handle, opts), else: handle
|
if email?(handle, opts), do: link_extra("xmpp:" <> handle, opts), else: handle
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_and_link_extra(buffer, opts, _user_acc) do
|
def check_and_link_extra(buffer, opts, _user_acc) do
|
||||||
|
@ -324,8 +324,8 @@ defmodule AutoLinker.Parser do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def email?(buffer) do
|
def email?(buffer, opts) do
|
||||||
valid_url?(buffer) && Regex.match?(@match_email, buffer) && valid_tld?(buffer, [])
|
valid_url?(buffer) && Regex.match?(@match_email, buffer) && valid_tld?(buffer, opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp valid_url?(url), do: !Regex.match?(@invalid_url, url)
|
defp valid_url?(url), do: !Regex.match?(@invalid_url, url)
|
||||||
|
|
|
@ -76,6 +76,36 @@ defmodule AutoLinker.ParserTest do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "email?" do
|
||||||
|
test "identifies valid emails" do
|
||||||
|
valid_emails()
|
||||||
|
|> Enum.each(fn email ->
|
||||||
|
assert email?(email, [])
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "identifies invalid emails" do
|
||||||
|
invalid_emails()
|
||||||
|
|> Enum.each(fn email ->
|
||||||
|
refute email?(email, [])
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "does not validate tlds when validate_tld: false" do
|
||||||
|
valid_custom_tld_emails()
|
||||||
|
|> Enum.each(fn email ->
|
||||||
|
assert email?(email, validate_tld: false)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "validates tlds when validate_tld: true" do
|
||||||
|
valid_custom_tld_emails()
|
||||||
|
|> Enum.each(fn email ->
|
||||||
|
refute email?(email, validate_tld: true)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "match_phone" do
|
describe "match_phone" do
|
||||||
test "valid" do
|
test "valid" do
|
||||||
valid_phone_nunbers()
|
valid_phone_nunbers()
|
||||||
|
@ -274,4 +304,8 @@ defmodule AutoLinker.ParserTest do
|
||||||
"pleroma.i2p/test",
|
"pleroma.i2p/test",
|
||||||
"misskey.loki"
|
"misskey.loki"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def valid_emails, do: ["rms@ai.mit.edu", "vc@cock.li"]
|
||||||
|
def invalid_emails, do: ["rms[at]ai.mit.edu", "vc@cock", "xmpp:lain@trashserver.net"]
|
||||||
|
def valid_custom_tld_emails, do: ["guardian@33y6fjyhs3phzfjj.onion", "hi@company.null"]
|
||||||
end
|
end
|
||||||
|
|
Reference in a new issue