defmodule SomethingErlangWeb.PageController do use SomethingErlangWeb, :controller def home(conn, params) do # The home page is often custom made, # so skip the default app layout. conn = assign(conn, :params, params) render(conn, :home) end def to_forum_path(conn, %{"forum_path" => path} = _params) do with {:ok, thread, page} <- resolve_url(path) do redirect(conn, to: ~p"/thread/#{thread}?page=#{page}") else _ -> put_flash(conn, :error, "Could not resolve URL") render(conn, :home) end end def to_forum_path(conn, _params) do render(conn, :home) end defp resolve_url(url) do threadid = case Regex.run(~r{threadid=(\d+)}, url) do [_, threadid] -> {:ok, threadid} nil -> {:error, :nothreadid} end page = case Regex.run(~r{pagenumber=(\d+)}, url) do [_, page] -> {:ok, page} nil -> {:ok, 1} end with {:ok, threadid} <- threadid, {:ok, page} <- page do {:ok, threadid, page} else _ -> {:error, :cantparseurl} end end end