Skip to content

Commit e3b4791

Browse files
tvanderpolacco
authored andcommitted
Allow any binary string that is parsed successfully by UUID.info() as a UUID
1 parent 9a44978 commit e3b4791

7 files changed

Lines changed: 18 additions & 10 deletions

File tree

lib/sequin/accounts/impersonate.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ defmodule Sequin.Accounts.Impersonate do
6464
end
6565

6666
defp find_user(user_id) do
67-
if Sequin.String.uuid?(user_id) do
67+
if Sequin.String.sequin_uuid?(user_id) do
6868
Accounts.get_user(user_id)
6969
else
7070
Accounts.get_user(email: user_id)

lib/sequin/consumers/function.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ defmodule Sequin.Consumers.Function do
8585
end
8686

8787
def where_id_or_name(query \\ base_query(), id_or_name) do
88-
if Sequin.String.uuid?(id_or_name) do
88+
if Sequin.String.sequin_uuid?(id_or_name) do
8989
where_id(query, id_or_name)
9090
else
9191
where_name(query, id_or_name)

lib/sequin/consumers/http_endpoint.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ defmodule Sequin.Consumers.HttpEndpoint do
137137
end
138138

139139
def where_id_or_name(query \\ base_query(), id_or_name) do
140-
if Sequin.String.uuid?(id_or_name) do
140+
if Sequin.String.sequin_uuid?(id_or_name) do
141141
where_id(query, id_or_name)
142142
else
143143
where_name(query, id_or_name)

lib/sequin/consumers/sink_consumer.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ defmodule Sequin.Consumers.SinkConsumer do
395395
end
396396

397397
def where_id_or_name(query \\ base_query(), id_or_name) do
398-
if Sequin.String.uuid?(id_or_name) do
398+
if Sequin.String.sequin_uuid?(id_or_name) do
399399
where_id(query, id_or_name)
400400
else
401401
where_name(query, id_or_name)

lib/sequin/databases/postgres_database.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ defmodule Sequin.Databases.PostgresDatabase do
141141
end
142142

143143
def where_id_or_name(query \\ base_query(), id_or_name) do
144-
if Sequin.String.uuid?(id_or_name) do
144+
if Sequin.String.sequin_uuid?(id_or_name) do
145145
where_id(query, id_or_name)
146146
else
147147
where_name(query, id_or_name)

lib/sequin/replication/wal_pipeline.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ defmodule Sequin.Replication.WalPipeline do
5555
end
5656

5757
def where_id_or_name(query \\ base_query(), id_or_name) do
58-
if Sequin.String.uuid?(id_or_name) do
58+
if Sequin.String.sequin_uuid?(id_or_name) do
5959
where_id(query, id_or_name)
6060
else
6161
where_name(query, id_or_name)

lib/sequin/string.ex

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,19 @@ defmodule Sequin.String do
4040
end
4141
end
4242

43+
@doc """
44+
Returns true if the string parses as a valid UUID format.
45+
"""
4346
def uuid?(str) when is_binary(str) do
44-
str
45-
|> UUID.info()
46-
|> case do
47-
{:ok, info} -> info[:version] in [7, 4] and info[:variant] == :rfc4122
47+
match?({:ok, _}, UUID.info(str))
48+
end
49+
50+
@doc """
51+
Returns true if the string is a valid Sequin-generated UUID (v4, RFC4122 variant).
52+
"""
53+
def sequin_uuid?(str) when is_binary(str) do
54+
case UUID.info(str) do
55+
{:ok, info} -> info[:version] == 4 and info[:variant] == :rfc4122
4856
_ -> false
4957
end
5058
end

0 commit comments

Comments
 (0)