defmodule UrlInfo do def get(url) do uri = URI.parse(url) if valid_url?(uri) do [ type, name ] = parse_uri(uri) %{ mime_type: "#{type}/#{name}", type: type } else %{ error: "invalid url" } end end def parse_uri(uri) do get_ext_from_uri(uri) |> MIME.type() |> String.split("/") end defp get_ext_from_uri(%URI{ path: nil }), do: nil defp get_ext_from_uri(%URI{ path: path }) do case Path.extname(path) do "" -> nil ext -> String.slice(ext, 1..(String.length(ext))) end end defp valid_url?(%URI{ scheme: nil }), do: false defp valid_url?(%URI{ host: nil }), do: false defp valid_url?(%URI{ scheme: "http" }), do: true defp valid_url?(%URI{ scheme: "https" }), do: true defp valid_url?(_uri), do: false end