diff --git a/bin/update_auth b/bin/update_auth
new file mode 100755
index 0000000..ed01ae9
--- /dev/null
+++ b/bin/update_auth
@@ -0,0 +1,6 @@
+#!/bin/sh
+while read LINE; do
+ echo "update auth" >&2
+ bin/update_etc_git_auth
+ bin/update_git_ssh_authorized_keys
+done
diff --git a/lib/kmxgit/application.ex b/lib/kmxgit/application.ex
index 79c4264..75aca4a 100644
--- a/lib/kmxgit/application.ex
+++ b/lib/kmxgit/application.ex
@@ -8,16 +8,11 @@ defmodule Kmxgit.Application do
@impl true
def start(_type, _args) do
children = [
- # Start the Ecto repository
Kmxgit.Repo,
- # Start the Telemetry supervisor
+ Kmxgit.GitAuth,
KmxgitWeb.Telemetry,
- # Start the PubSub system
{Phoenix.PubSub, name: Kmxgit.PubSub},
- # Start the Endpoint (http/https)
KmxgitWeb.Endpoint
- # Start a worker by calling: Kmxgit.Worker.start_link(arg)
- # {Kmxgit.Worker, arg}
]
# See https://hexdocs.pm/elixir/Supervisor.html
diff --git a/lib/kmxgit/git.ex b/lib/kmxgit/git.ex
index 8179575..abd0632 100644
--- a/lib/kmxgit/git.ex
+++ b/lib/kmxgit/git.ex
@@ -37,7 +37,7 @@ defmodule Kmxgit.Git do
{:ok, files} ->
files1 = files
|> Enum.map(fn file ->
- Map.put(file, :url, "#{parent}/#{file.name}")
+ Map.put(file, :url, "#{parent}/#{path}/#{file.name}")
end)
{:ok, files1}
x -> x
diff --git a/lib/kmxgit/git_auth.ex b/lib/kmxgit/git_auth.ex
new file mode 100644
index 0000000..d1a249d
--- /dev/null
+++ b/lib/kmxgit/git_auth.ex
@@ -0,0 +1,23 @@
+defmodule Kmxgit.GitAuth do
+ use GenServer
+
+ def start_link(_opts) do
+ GenServer.start_link(__MODULE__, nil, name: __MODULE__)
+ end
+
+ @impl true
+ def init(_opts) do
+ port = Port.open({:spawn_executable, "bin/update_auth"}, [:binary])
+ {:ok, %{port: port}}
+ end
+
+ @impl true
+ def handle_cast(:update, state = %{port: port}) do
+ Port.command(port, "\n")
+ {:noreply, state}
+ end
+
+ def update() do
+ GenServer.cast(__MODULE__, :update)
+ end
+end
diff --git a/lib/kmxgit_web/controllers/admin/organisation_controller.ex b/lib/kmxgit_web/controllers/admin/organisation_controller.ex
index 14eda1e..74ee36f 100644
--- a/lib/kmxgit_web/controllers/admin/organisation_controller.ex
+++ b/lib/kmxgit_web/controllers/admin/organisation_controller.ex
@@ -2,6 +2,7 @@ defmodule KmxgitWeb.Admin.OrganisationController do
use KmxgitWeb, :controller
alias Kmxgit.IndexParams
+ alias Kmxgit.GitAuth
alias Kmxgit.GitManager
alias Kmxgit.OrganisationManager
alias Kmxgit.Repo
@@ -82,10 +83,7 @@ defmodule KmxgitWeb.Admin.OrganisationController do
if org.slug.slug != org1.slug.slug do
case GitManager.rename_dir(org.slug.slug, org1.slug.slug) do
:ok ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
org1
{:error, err} -> Repo.rollback(err)
end
@@ -123,10 +121,7 @@ defmodule KmxgitWeb.Admin.OrganisationController do
org = OrganisationManager.get_organisation!(params["organisation_id"])
case OrganisationManager.add_user(org, login) do
{:ok, org1} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.admin_organisation_path(conn, :show, org1))
{:error, _} ->
@@ -150,10 +145,7 @@ defmodule KmxgitWeb.Admin.OrganisationController do
org = OrganisationManager.get_organisation!(params["organisation_id"])
case OrganisationManager.remove_user(org, login) do
{:ok, org} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.admin_organisation_path(conn, :show, org))
{:error, _} ->
@@ -169,10 +161,7 @@ defmodule KmxgitWeb.Admin.OrganisationController do
if org do
case OrganisationManager.delete_organisation(org) do
{:ok, _} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.admin_organisation_path(conn, :index))
{:error, _} ->
diff --git a/lib/kmxgit_web/controllers/admin/repository_controller.ex b/lib/kmxgit_web/controllers/admin/repository_controller.ex
index d70e044..de31cfd 100644
--- a/lib/kmxgit_web/controllers/admin/repository_controller.ex
+++ b/lib/kmxgit_web/controllers/admin/repository_controller.ex
@@ -2,6 +2,7 @@ defmodule KmxgitWeb.Admin.RepositoryController do
use KmxgitWeb, :controller
alias Kmxgit.IndexParams
+ alias Kmxgit.GitAuth
alias Kmxgit.GitManager
alias Kmxgit.RepositoryManager
alias Kmxgit.RepositoryManager.Repository
@@ -72,10 +73,8 @@ defmodule KmxgitWeb.Admin.RepositoryController do
end
end) do
{:ok, repo} ->
- case GitManager.update_auth() do
- :ok -> :ok = GitManager.public_access(Repository.full_slug(repo), repo.public_access)
- error -> IO.inspect(error)
- end
+ GitAuth.update()
+ :ok = GitManager.public_access(Repository.full_slug(repo), repo.public_access)
conn
|> redirect(to: Routes.admin_repository_path(conn, :show, repo))
{:error, changeset} ->
@@ -121,10 +120,8 @@ defmodule KmxgitWeb.Admin.RepositoryController do
end
end) do
{:ok, repo1} ->
- case GitManager.update_auth() do
- :ok -> :ok = GitManager.public_access(Repository.full_slug(repo1), repo1.public_access)
- error -> IO.inspect(error)
- end
+ GitAuth.update()
+ :ok = GitManager.public_access(Repository.full_slug(repo1), repo1.public_access)
conn
|> redirect(to: Routes.admin_repository_path(conn, :show, repo1))
{:error, changeset} ->
@@ -149,10 +146,7 @@ defmodule KmxgitWeb.Admin.RepositoryController do
repo = RepositoryManager.get_repository!(params["repository_id"])
case RepositoryManager.add_member(repo, login) do
{:ok, repo} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.admin_repository_path(conn, :show, repo))
{:error, _} ->
@@ -176,10 +170,7 @@ defmodule KmxgitWeb.Admin.RepositoryController do
repo = RepositoryManager.get_repository!(params["repository_id"])
case RepositoryManager.remove_member(repo, login) do
{:ok, repo} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.admin_repository_path(conn, :show, repo))
{:error, _} ->
@@ -200,10 +191,7 @@ defmodule KmxgitWeb.Admin.RepositoryController do
end
end) do
{:ok, _} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.admin_repository_path(conn, :index))
{:error, changeset} ->
diff --git a/lib/kmxgit_web/controllers/admin/user_controller.ex b/lib/kmxgit_web/controllers/admin/user_controller.ex
index 4116d11..350ce5e 100644
--- a/lib/kmxgit_web/controllers/admin/user_controller.ex
+++ b/lib/kmxgit_web/controllers/admin/user_controller.ex
@@ -2,6 +2,7 @@ defmodule KmxgitWeb.Admin.UserController do
use KmxgitWeb, :controller
alias Kmxgit.IndexParams
+ alias Kmxgit.GitAuth
alias Kmxgit.GitManager
alias Kmxgit.RepositoryManager
alias Kmxgit.UserManager
@@ -85,10 +86,7 @@ defmodule KmxgitWeb.Admin.UserController do
if user do
case UserManager.admin_update_user(user, params["user"]) do
{:ok, user1} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.admin_user_path(conn, :show, user1))
{:error, changeset} ->
@@ -137,10 +135,7 @@ defmodule KmxgitWeb.Admin.UserController do
def delete(conn, params) do
if user = UserManager.get_user(params["id"]) do
{:ok, _} = UserManager.delete_user(user)
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.admin_user_path(conn, :index))
else
diff --git a/lib/kmxgit_web/controllers/organisation_controller.ex b/lib/kmxgit_web/controllers/organisation_controller.ex
index f64a7cb..40ff9ac 100644
--- a/lib/kmxgit_web/controllers/organisation_controller.ex
+++ b/lib/kmxgit_web/controllers/organisation_controller.ex
@@ -1,6 +1,7 @@
defmodule KmxgitWeb.OrganisationController do
use KmxgitWeb, :controller
+ alias Kmxgit.GitAuth
alias Kmxgit.GitManager
alias Kmxgit.OrganisationManager
alias Kmxgit.OrganisationManager.Organisation
@@ -54,10 +55,7 @@ defmodule KmxgitWeb.OrganisationController do
if org.slug.slug != org1.slug.slug do
case GitManager.rename_dir(org.slug.slug, org1.slug.slug) do
:ok ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
org1
{:error, err} -> Repo.rollback(err)
end
@@ -101,10 +99,7 @@ defmodule KmxgitWeb.OrganisationController do
if org && Organisation.owner?(org, current_user) do
case OrganisationManager.add_user(org, login) do
{:ok, org} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.slug_path(conn, :show, org.slug.slug))
{:error, _e} ->
@@ -138,10 +133,7 @@ defmodule KmxgitWeb.OrganisationController do
if org && Organisation.owner?(org, current_user) do
case OrganisationManager.remove_user(org, login) do
{:ok, org} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.slug_path(conn, :show, org.slug.slug))
{:error, _} ->
@@ -164,10 +156,7 @@ defmodule KmxgitWeb.OrganisationController do
{:ok, _} ->
case GitManager.delete_dir(org.slug.slug) do
:ok ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
:ok
{:error, out} -> Repo.rollback(status: out)
end
diff --git a/lib/kmxgit_web/controllers/repository_controller.ex b/lib/kmxgit_web/controllers/repository_controller.ex
index 50c45f2..ea5fde6 100644
--- a/lib/kmxgit_web/controllers/repository_controller.ex
+++ b/lib/kmxgit_web/controllers/repository_controller.ex
@@ -80,10 +80,8 @@ defmodule KmxgitWeb.RepositoryController do
end
end) do
{:ok, repo} ->
- case GitManager.update_auth() do
- :ok -> :ok = GitManager.public_access(Repository.full_slug(repo), repo.public_access)
- error -> IO.inspect(error)
- end
+ GitAuth.update()
+ :ok = GitManager.public_access(Repository.full_slug(repo), repo.public_access)
conn
|> redirect(to: Routes.repository_path(conn, :show, owner.slug.slug, Repository.splat(repo)))
{:error, changeset} ->
@@ -524,10 +522,8 @@ defmodule KmxgitWeb.RepositoryController do
end)
case tr do
{:ok, repo1} ->
- case GitManager.update_auth() do
- :ok -> :ok = GitManager.public_access(Repository.full_slug(repo1), repo1.public_access)
- error -> IO.inspect(error)
- end
+ GitAuth.update()
+ :ok = GitManager.public_access(Repository.full_slug(repo1), repo1.public_access)
conn
|> redirect(to: Routes.repository_path(conn, :show, Repository.owner_slug(repo1), Repository.splat(repo1)))
{:error, changeset} ->
@@ -570,10 +566,7 @@ defmodule KmxgitWeb.RepositoryController do
org = repo.organisation
case RepositoryManager.add_member(repo, login) do
{:ok, repo} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.repository_path(conn, :show, params["owner"], Repository.splat(repo)))
{:error, _} ->
@@ -615,10 +608,7 @@ defmodule KmxgitWeb.RepositoryController do
org = repo.organisation
case RepositoryManager.remove_member(repo, login) do
{:ok, repo} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.repository_path(conn, :show, params["owner"], Repository.splat(repo)))
{:error, _} ->
@@ -646,10 +636,7 @@ defmodule KmxgitWeb.RepositoryController do
end
end) do
{:ok, _} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.slug_path(conn, :show, params["owner"]))
{:error, _changeset} ->
@@ -767,10 +754,7 @@ defmodule KmxgitWeb.RepositoryController do
end
end) do
{:ok, repo} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.repository_path(conn, :show, owner.slug.slug, Repository.splat(repo)))
{:error, changeset} ->
diff --git a/lib/kmxgit_web/controllers/user_controller.ex b/lib/kmxgit_web/controllers/user_controller.ex
index 4596661..13c0b7a 100644
--- a/lib/kmxgit_web/controllers/user_controller.ex
+++ b/lib/kmxgit_web/controllers/user_controller.ex
@@ -1,6 +1,7 @@
defmodule KmxgitWeb.UserController do
use KmxgitWeb, :controller
+ alias Kmxgit.GitAuth
alias Kmxgit.GitManager
alias Kmxgit.Repo
alias Kmxgit.UserManager
@@ -59,10 +60,7 @@ defmodule KmxgitWeb.UserController do
end
end) do
{:ok, user} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update()
conn
|> redirect(to: Routes.slug_path(conn, :show, User.login(user)))
{:error, changeset} ->
@@ -164,10 +162,7 @@ defmodule KmxgitWeb.UserController do
end
end) do
{:ok, _} ->
- case GitManager.update_auth() do
- :ok -> nil
- error -> IO.inspect(error)
- end
+ GitAuth.update() do
conn
|> redirect(to: "/")
{:error, changeset} ->