28 lines
689 B
Elixir
28 lines
689 B
Elixir
defmodule ToweropsWeb.SitemapController do
|
|
@moduledoc false
|
|
|
|
use ToweropsWeb, :controller
|
|
|
|
@public_urls ["/", "/privacy", "/terms", "/docs/api", "/docs/graphql", "/help"]
|
|
|
|
def index(conn, _params) do
|
|
base_url = ToweropsWeb.Endpoint.url()
|
|
xml = build_sitemap(base_url)
|
|
|
|
conn
|
|
|> put_resp_content_type("text/xml")
|
|
|> send_resp(200, xml)
|
|
end
|
|
|
|
defp build_sitemap(base_url) do
|
|
urls =
|
|
Enum.map_join(@public_urls, "\n", fn path -> " <url><loc>#{base_url}#{path}</loc></url>" end)
|
|
|
|
String.trim("""
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
#{urls}
|
|
</urlset>
|
|
""")
|
|
end
|
|
end
|