From f8bbcd2b93112546536d4c4f4eddd93c5046da7e Mon Sep 17 00:00:00 2001 From: vhyrro Date: Sun, 18 Oct 2026 18:31:23 +0200 Subject: [PATCH] fix: allow dots (.) in package names --- .../lib/luxpkgs_rockspec_verifier/rockspec.ex | 2 +- luxpkgs/lib/luxpkgs/packages/package.ex | 2 +- .../controllers/luarocks_api_controller.ex | 16 +++++++++++++--- luxpkgs/lib/luxpkgs_web/schemas/package_input.ex | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/luxpkgs-rockspec-verifier/lib/luxpkgs_rockspec_verifier/rockspec.ex b/luxpkgs-rockspec-verifier/lib/luxpkgs_rockspec_verifier/rockspec.ex index de1b0fc..195853e 100644 --- a/luxpkgs-rockspec-verifier/lib/luxpkgs_rockspec_verifier/rockspec.ex +++ b/luxpkgs-rockspec-verifier/lib/luxpkgs_rockspec_verifier/rockspec.ex @@ -5,7 +5,7 @@ defmodule LuxpkgsRockspecVerifier.Rockspec do }) do sandboxed_state = :luerl_sandbox.init() - Regex.match?(~r/^[a-zA-Z0-9_\-]+$/, expected_name) and + Regex.match?(~r/^[a-zA-Z0-9_\.\-]+$/, expected_name) and case :luerl_sandbox.run( rockspec, %{ diff --git a/luxpkgs/lib/luxpkgs/packages/package.ex b/luxpkgs/lib/luxpkgs/packages/package.ex index e6d6250..41a9e45 100644 --- a/luxpkgs/lib/luxpkgs/packages/package.ex +++ b/luxpkgs/lib/luxpkgs/packages/package.ex @@ -32,7 +32,7 @@ defmodule Luxpkgs.Packages.Package do |> cast(attrs, [:name]) |> validate_required([:name]) |> unique_constraint(:name) - |> validate_format(:name, ~r/^[a-zA-Z0-9_\-]+$/) + |> validate_format(:name, ~r/^[a-zA-Z0-9_\.\-]+$/) # Recast here to prevent the user from changing the package name |> cast(attrs, [:summary, :description]) |> validate_length(:name, min: 1, max: 20) diff --git a/luxpkgs/lib/luxpkgs_web/controllers/luarocks_api_controller.ex b/luxpkgs/lib/luxpkgs_web/controllers/luarocks_api_controller.ex index 1403839..fd35680 100644 --- a/luxpkgs/lib/luxpkgs_web/controllers/luarocks_api_controller.ex +++ b/luxpkgs/lib/luxpkgs_web/controllers/luarocks_api_controller.ex @@ -117,8 +117,12 @@ defmodule LuxpkgsWeb.LuaRocksApiController do |> put_status(:service_unavailable) |> json(%{errors: ["Rockspec verifier service is unavailable"]}) - {:error, %Ecto.Changeset{}} -> - put_status(conn, :bad_request) + {:error, %Ecto.Changeset{} = changeset} -> + conn + |> put_status(:bad_request) + |> json(%{ + errors: Enum.map(changeset.errors, fn {field, {msg, _}} -> "#{field} #{msg}" end) + }) {:error, reason} -> conn @@ -146,7 +150,13 @@ defmodule LuxpkgsWeb.LuaRocksApiController do case Req.post(endpoint, json: %{rockspec: rockspec_text}) do {:ok, %Req.Response{status: 200, body: body}} -> - {:ok, body} + {:ok, + %{ + package: body["package"], + version: body["version"], + summary: body["summary"], + description: body["description"] + }} {:ok, %Req.Response{status: 422}} -> {:error, :invalid_rockspec} diff --git a/luxpkgs/lib/luxpkgs_web/schemas/package_input.ex b/luxpkgs/lib/luxpkgs_web/schemas/package_input.ex index 0fc5cec..26966fe 100644 --- a/luxpkgs/lib/luxpkgs_web/schemas/package_input.ex +++ b/luxpkgs/lib/luxpkgs_web/schemas/package_input.ex @@ -14,7 +14,7 @@ defmodule LuxpkgsWeb.Schemas.PackageInput do type: :string, description: "Unique package name", example: "lua-cjson", - pattern: "^[a-zA-Z0-9_-]+$" + pattern: "^[a-zA-Z0-9_.-]+$" }, summary: %OpenApiSpex.Schema{ type: :string,