enforce constraints on the settings, store settings in the image

This commit is contained in:
Gavin McDonald
2025-05-05 17:22:08 -04:00
parent 438fa306ae
commit 1ee183557c
2 changed files with 23 additions and 4 deletions

View File

@@ -1,6 +1,6 @@
defmodule LabelmakerWeb.Constants do defmodule LabelmakerWeb.Constants do
@defaults %{ @defaults %{
"label" => "Labelmaker", "label" => "64 character maximum",
"font" => "Helvetica", "font" => "Helvetica",
"color" => "black", "color" => "black",
"size" => "24" "size" => "24"
@@ -22,16 +22,19 @@ defmodule LabelmakerWeb.Constants do
|> Enum.reject(&String.starts_with?(&1, " Font: .")) |> Enum.reject(&String.starts_with?(&1, " Font: ."))
|> Enum.map(&String.trim_leading(&1, " Font: ")) |> Enum.map(&String.trim_leading(&1, " Font: "))
@max_label_length 64
@sizes 8..72 @sizes 8..72
|> Enum.to_list() |> Enum.to_list()
|> Enum.take_every(4) |> Enum.take_every(4)
|> Enum.map(&Integer.to_string/1) |> Enum.map(&Integer.to_string/1)
def defaults, do: @defaults
def permitted_keys, do: @permitted_keys
def colors, do: @colors def colors, do: @colors
def color_count, do: @colors |> length() def color_count, do: @colors |> length()
def defaults, do: @defaults
def fonts, do: @fonts def fonts, do: @fonts
def font_count, do: @fonts |> length() def font_count, do: @fonts |> length()
def max_label_length, do: @max_label_length
def permitted_keys, do: @permitted_keys
def sizes, do: @sizes def sizes, do: @sizes
end end

View File

@@ -6,10 +6,23 @@ defmodule LabelmakerWeb.LabelController do
File.mkdir_p!(@label_dir) File.mkdir_p!(@label_dir)
def show(conn, params) do def show(conn, params) do
params =
params
|> Map.take(Constants.permitted_keys())
|> Enum.filter(fn {k, v} ->
case k do
"color" -> v in Constants.colors()
"font" -> v in Constants.fonts()
"label" -> String.length(v) <= Constants.max_label_length()
"size" -> v in Constants.sizes()
_ -> true
end
end)
|> Map.new()
options = options =
Constants.defaults() Constants.defaults()
|> Map.merge(params) |> Map.merge(params)
|> Map.take(Constants.permitted_keys())
filename = filename =
options options
@@ -40,6 +53,9 @@ defmodule LabelmakerWeb.LabelController do
"-font", "-font",
options["font"], options["font"],
"label:#{options["label"]}", "label:#{options["label"]}",
"-set",
"comment",
inspect(options),
filepath filepath
] ]