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
Current section
Files
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