update discord patterns

This commit is contained in:
zack 2024-10-25 22:44:04 -04:00
parent 6b054a0944
commit 5610484cce
No known key found for this signature in database
GPG key ID: 5F873416BCF59F35

View file

@ -6,23 +6,44 @@ defmodule ZoeyscomputerWeb.DiscordHandler do
def init(opts), do: opts
def call(%{path_info: ["images", _id]} = conn, _opts) do
user_agent = get_req_header(conn, "user-agent")
Logger.info("user-agent: #{user_agent}")
@discord_patterns [
~r/^Mozilla\/5\.0 \(compatible; Discordbot\//,
# Pattern for common Discord web client
~r/^Mozilla\/5\.0.*Firefox\/.*$/
]
case user_agent do
["Mozilla/5.0 (compatible; Discordbot/" <> _rest] -> handle_discord(conn)
_ -> conn
def call(%{path_info: ["images", _id | _]} = conn, _opts) do
user_agent = List.first(get_req_header(conn, "user-agent"))
request_id = Logger.metadata()[:request_id]
Logger.info("Processing image request",
user_agent: user_agent,
request_id: request_id
)
cond do
is_discord_request?(user_agent) -> handle_discord(conn)
true -> conn
end
end
def call(conn, _opts), do: conn
defp is_discord_request?(nil), do: false
defp is_discord_request?(user_agent) do
Enum.any?(@discord_patterns, fn pattern ->
Regex.match?(pattern, user_agent)
end)
end
defp handle_discord(%{path_info: ["images", id]} = conn) do
case download_from_s3("imgs", id) do
{:ok, image_binary, content_type} ->
conn
|> put_resp_content_type(content_type)
# Optional: Add caching
|> put_resp_header("cache-control", "public, max-age=86400")
|> send_resp(200, image_binary)
|> halt()