update discord patterns
This commit is contained in:
parent
6b054a0944
commit
5610484cce
1 changed files with 27 additions and 6 deletions
|
|
@ -6,23 +6,44 @@ defmodule ZoeyscomputerWeb.DiscordHandler do
|
||||||
|
|
||||||
def init(opts), do: opts
|
def init(opts), do: opts
|
||||||
|
|
||||||
def call(%{path_info: ["images", _id]} = conn, _opts) do
|
@discord_patterns [
|
||||||
user_agent = get_req_header(conn, "user-agent")
|
~r/^Mozilla\/5\.0 \(compatible; Discordbot\//,
|
||||||
Logger.info("user-agent: #{user_agent}")
|
# Pattern for common Discord web client
|
||||||
|
~r/^Mozilla\/5\.0.*Firefox\/.*$/
|
||||||
|
]
|
||||||
|
|
||||||
case user_agent do
|
def call(%{path_info: ["images", _id | _]} = conn, _opts) do
|
||||||
["Mozilla/5.0 (compatible; Discordbot/" <> _rest] -> handle_discord(conn)
|
user_agent = List.first(get_req_header(conn, "user-agent"))
|
||||||
_ -> conn
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
def call(conn, _opts), do: conn
|
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
|
defp handle_discord(%{path_info: ["images", id]} = conn) do
|
||||||
case download_from_s3("imgs", id) do
|
case download_from_s3("imgs", id) do
|
||||||
{:ok, image_binary, content_type} ->
|
{:ok, image_binary, content_type} ->
|
||||||
conn
|
conn
|
||||||
|> put_resp_content_type(content_type)
|
|> put_resp_content_type(content_type)
|
||||||
|
# Optional: Add caching
|
||||||
|
|> put_resp_header("cache-control", "public, max-age=86400")
|
||||||
|> send_resp(200, image_binary)
|
|> send_resp(200, image_binary)
|
||||||
|> halt()
|
|> halt()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue