Packages

phoenix_kit

1.7.91
1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib modules llm_text web controller.ex
Raw

lib/modules/llm_text/web/controller.ex

defmodule PhoenixKit.Modules.LLMText.Web.Controller do
@moduledoc """
Controller for serving LLM-friendly text files.
## Endpoints
- GET /{prefix}/llms.txt — serves the index file listing all LLM-readable pages
- GET /{prefix}/llms/*path — serves individual LLM text files
Files are served directly from `priv/static/llms/` with `text/plain` content type.
Returns 404 for files that do not exist.
"""
use PhoenixKitWeb, :controller
require Logger
alias PhoenixKit.Modules.LLMText.FileStorage
@doc """
Serves the llms.txt index file.
"""
def index(conn, _params) do
path = FileStorage.index_path()
case File.read(path) do
{:ok, content} ->
conn
|> put_resp_content_type("text/plain; charset=utf-8")
|> send_resp(200, content)
{:error, :enoent} ->
conn
|> put_resp_content_type("text/plain; charset=utf-8")
|> send_resp(404, "Not found")
{:error, reason} ->
Logger.warning("LLMText controller: failed to read llms.txt: #{inspect(reason)}")
conn
|> put_resp_content_type("text/plain; charset=utf-8")
|> send_resp(500, "Internal error")
end
end
@doc """
Serves an individual LLM text file at `/llms/*path`.
"""
def show(conn, %{"path" => path_parts}) when is_list(path_parts) do
relative_path = Path.join(path_parts)
# Prevent path traversal
if String.contains?(relative_path, "..") do
conn
|> put_resp_content_type("text/plain; charset=utf-8")
|> send_resp(400, "Bad request")
else
full_path = FileStorage.file_path(relative_path)
case File.read(full_path) do
{:ok, content} ->
conn
|> put_resp_content_type("text/plain; charset=utf-8")
|> send_resp(200, content)
{:error, :enoent} ->
conn
|> put_resp_content_type("text/plain; charset=utf-8")
|> send_resp(404, "Not found")
{:error, reason} ->
Logger.warning(
"LLMText controller: failed to read #{relative_path}: #{inspect(reason)}"
)
conn
|> put_resp_content_type("text/plain; charset=utf-8")
|> send_resp(500, "Internal error")
end
end
end
end